[gap-guava] 01/07: Imported Upstream version 3.5

Jerome Benoit calculus-guest at moszumanska.debian.org
Thu Sep 11 14:27:40 UTC 2014


This is an automated email from the git hooks/post-receive script.

calculus-guest pushed a commit to branch master
in repository gap-guava.

commit 37c7f9d611b41a3412817722317ff032af2c13cc
Author: Tim Abbott <tabbott at mit.edu>
Date:   Sat Feb 7 14:09:04 2009 -0500

    Imported Upstream version 3.5
---
 CHANGES.guava                      |   202 +
 COPYING.guava                      |   985 ++
 Makefile                           |    72 +
 Makefile.in                        |    72 +
 PackageInfo.g                      |   279 +
 README.guava                       |   128 +
 configure                          |    11 +
 doc/body.tmp                       | 25247 +++++++++++++++++++++++++++++++++++
 doc/chap0.html                     |   538 +
 doc/chap0.txt                      |   444 +
 doc/chap1.html                     |   119 +
 doc/chap1.txt                      |    91 +
 doc/chap2.html                     |   267 +
 doc/chap2.txt                      |   231 +
 doc/chap3.html                     |   504 +
 doc/chap3.txt                      |   505 +
 doc/chap4.html                     |  2103 +++
 doc/chap4.txt                      |  2098 +++
 doc/chap5.html                     |  2318 ++++
 doc/chap5.txt                      |  2372 ++++
 doc/chap6.html                     |   983 ++
 doc/chap6.txt                      |  1041 ++
 doc/chap7.html                     |  1951 +++
 doc/chap7.txt                      |  1910 +++
 doc/chapBib.html                   |   224 +
 doc/chapBib.txt                    |    82 +
 doc/chapInd.html                   |   437 +
 doc/chapInd.txt                    |   408 +
 doc/guava.aux                      |   765 ++
 doc/guava.bbl                      |   124 +
 doc/guava.bib                      |   205 +
 doc/guava.blg                      |    54 +
 doc/guava.brf                      |    42 +
 doc/guava.idx                      |   401 +
 doc/guava.ilg                      |     6 +
 doc/guava.ind                      |   472 +
 doc/guava.log                      |  2102 +++
 doc/guava.pnr                      |   325 +
 doc/guava.tex                      |  8771 ++++++++++++
 doc/guava.toc                      |   317 +
 doc/guava.xml                      | 12684 ++++++++++++++++++
 doc/head.tmp                       |  1229 ++
 doc/manual.bib                     |    74 +
 doc/manual.blg                     |    51 +
 doc/manual.idx                     |   283 +
 doc/manual.ilg                     |     7 +
 doc/manual.ind                     |   280 +
 doc/manual.lab                     |   275 +
 doc/manual.mst                     |    16 +
 doc/manual.pdf                     |   Bin 0 -> 895936 bytes
 doc/manual.six                     |   506 +
 doc/manual.toc                     |     0
 guava.tst                          |   409 +
 guava_gapdoc.gap                   |    18 +
 guavapage/guava.jpg                |   Bin 0 -> 82455 bytes
 guavapage/guava.ps                 | 10502 +++++++++++++++
 guavapage/guava_light.jpg          |   Bin 0 -> 28349 bytes
 htm/chap0.html                     |   538 +
 htm/chap1.html                     |   119 +
 htm/chap2.html                     |   267 +
 htm/chap3.html                     |   504 +
 htm/chap4.html                     |  2103 +++
 htm/chap5.html                     |  2318 ++++
 htm/chap6.html                     |   983 ++
 htm/chap7.html                     |  1951 +++
 htm/chapBib.html                   |   224 +
 htm/chapInd.html                   |   437 +
 init.g                             |    67 +
 lib/bounds.gd                      |   116 +
 lib/bounds.gi                      |   792 ++
 lib/codecr.gd                      |   182 +
 lib/codecr.gi                      |  2015 +++
 lib/codecstr.gd                    |   113 +
 lib/codecstr.gi                    |  1136 ++
 lib/codefun.gd                     |    38 +
 lib/codefun.gi                     |   167 +
 lib/codegen.gd                     |   407 +
 lib/codegen.gi                     |  2731 ++++
 lib/codeman.gd                     |   235 +
 lib/codeman.gi                     |  2307 ++++
 lib/codemisc.gd                    |   117 +
 lib/codemisc.gi                    |   742 +
 lib/codenorm.gd                    |    71 +
 lib/codenorm.gi                    |   297 +
 lib/codeops.gd                     |   447 +
 lib/codeops.gi                     |  2670 ++++
 lib/codeword.gd                    |   102 +
 lib/codeword.gi                    |   836 ++
 lib/curves.gd                      |   383 +
 lib/curves.gi                      |  1198 ++
 lib/decoders.gd                    |   198 +
 lib/decoders.gi                    |   827 ++
 lib/matrices.gd                    |   111 +
 lib/matrices.gi                    |   542 +
 lib/nordrob.gd                     |    20 +
 lib/nordrob.gi                     |   552 +
 lib/setup.g                        |    34 +
 lib/tblgener.gd                    |    20 +
 lib/tblgener.gi                    |   445 +
 lib/toric.gd                       |    40 +
 lib/toric.gi                       |   107 +
 lib/util.gd                        |    77 +
 lib/util.gi                        |   249 +
 lib/util2.gd                       |   116 +
 lib/util2.gi                       |   484 +
 read.g                             |    41 +
 src/Makefile                       |    17 +
 src/ctjhai/README                  |    60 +
 src/ctjhai/config.h                |    50 +
 src/ctjhai/minimum-weight-gf2.c    |   732 +
 src/ctjhai/minimum-weight-gf2.h    |    32 +
 src/ctjhai/minimum-weight-gf3.c    |   809 ++
 src/ctjhai/minimum-weight-gf3.h    |    67 +
 src/ctjhai/minimum-weight.c        |   180 +
 src/ctjhai/popcount.c              |    82 +
 src/ctjhai/popcount.h              |    53 +
 src/ctjhai/types.h                 |    42 +
 src/defs.h                         |     7 +
 src/leon/Makefile                  |   183 +
 src/leon/Makefile.in               |   183 +
 src/leon/config.guess              |  1500 +++
 src/leon/config.sub                |  1608 +++
 src/leon/configure                 | 21666 ++++++++++++++++++++++++++++++
 src/leon/configure.in              |    19 +
 src/leon/doc/leon_guava_manual.pdf |   Bin 0 -> 270046 bytes
 src/leon/doc/manual.tex            |  3002 +++++
 src/leon/doc/readme                |     3 +
 src/leon/install-sh                |   323 +
 src/leon/missing                   |     0
 src/leon/src/Makefile              |   192 +
 src/leon/src/addsgen.c             |    59 +
 src/leon/src/addsgen.h             |    12 +
 src/leon/src/bitmanp.c             |    26 +
 src/leon/src/bitmanp.h             |     4 +
 src/leon/src/ccent.c               |  1066 ++
 src/leon/src/ccent.h               |    60 +
 src/leon/src/ccommut.c             |    97 +
 src/leon/src/ccommut.h             |    14 +
 src/leon/src/cdesauto.c            |   721 +
 src/leon/src/cdesauto.h            |    26 +
 src/leon/src/cent.c                |   625 +
 src/leon/src/cent.h                |     7 +
 src/leon/src/chbase.c              |   561 +
 src/leon/src/chbase.h              |    30 +
 src/leon/src/chbase.sh             |     3 +
 src/leon/src/cinter.c              |    78 +
 src/leon/src/cinter.h              |    12 +
 src/leon/src/cjper.sh              |     3 +
 src/leon/src/cjrndper.c            |   666 +
 src/leon/src/cjrndper.h            |     9 +
 src/leon/src/cmatauto.c            |   868 ++
 src/leon/src/cmatauto.h            |    26 +
 src/leon/src/code.c                |   148 +
 src/leon/src/code.h                |    19 +
 src/leon/src/codeauto.sh           |     3 +
 src/leon/src/codeiso.sh            |     3 +
 src/leon/src/commut.c              |   288 +
 src/leon/src/commut.h              |     7 +
 src/leon/src/compcrep.c            |   499 +
 src/leon/src/compcrep.h            |    25 +
 src/leon/src/compgrp.c             |   483 +
 src/leon/src/compgrp.h             |     7 +
 src/leon/src/compper.sh            |     3 +
 src/leon/src/compset.sh            |     4 +
 src/leon/src/compsg.c              |   603 +
 src/leon/src/compsg.h              |    25 +
 src/leon/src/conj.sh               |     3 +
 src/leon/src/copy.c                |   169 +
 src/leon/src/copy.h                |    12 +
 src/leon/src/cparstab.c            |   303 +
 src/leon/src/cparstab.h            |    38 +
 src/leon/src/cputime.c             |    29 +
 src/leon/src/cputime.h             |    12 +
 src/leon/src/csetstab.c            |   305 +
 src/leon/src/csetstab.h            |    24 +
 src/leon/src/cstborb.c             |   390 +
 src/leon/src/cstborb.h             |    42 +
 src/leon/src/cstrbas.c             |   242 +
 src/leon/src/cstrbas.h             |    13 +
 src/leon/src/cuprstab.c            |   732 +
 src/leon/src/cuprstab.h            |    34 +
 src/leon/src/desauto.c             |   851 ++
 src/leon/src/desauto.h             |     7 +
 src/leon/src/desiso.sh             |     3 +
 src/leon/src/enum.h                |    61 +
 src/leon/src/errmesg.c             |    79 +
 src/leon/src/errmesg.h             |    34 +
 src/leon/src/essentia.c            |   109 +
 src/leon/src/essentia.h            |    47 +
 src/leon/src/extname.h             |   266 +
 src/leon/src/factor.c              |   158 +
 src/leon/src/factor.h              |    28 +
 src/leon/src/factoria.h            |     3 +
 src/leon/src/field.c               |    98 +
 src/leon/src/field.h               |     8 +
 src/leon/src/fndelt.c              |   338 +
 src/leon/src/fndelt.h              |     7 +
 src/leon/src/fndinvol.h            |     3 +
 src/leon/src/gcent.sh              |     3 +
 src/leon/src/generate.c            |   597 +
 src/leon/src/generate.h            |     7 +
 src/leon/src/group.h               |   514 +
 src/leon/src/groupio.h             |    22 +
 src/leon/src/inform.c              |   291 +
 src/leon/src/inform.h              |    44 +
 src/leon/src/install               |    12 +
 src/leon/src/inter.c               |   428 +
 src/leon/src/inter.h               |     7 +
 src/leon/src/leon_config.h         |    59 +
 src/leon/src/leon_config.h.in      |    58 +
 src/leon/src/matauto.sh            |     3 +
 src/leon/src/matiso.sh             |     3 +
 src/leon/src/matrix.c              |    94 +
 src/leon/src/matrix.h              |    16 +
 src/leon/src/ncl.sh                |     3 +
 src/leon/src/new.c                 |   482 +
 src/leon/src/new.h                 |    77 +
 src/leon/src/oldcopy.c             |    47 +
 src/leon/src/oldcopy.h             |     9 +
 src/leon/src/optsvec.c             |   316 +
 src/leon/src/optsvec.h             |    33 +
 src/leon/src/orbdes.c              |   251 +
 src/leon/src/orbdes.h              |     7 +
 src/leon/src/orbit.c               |    59 +
 src/leon/src/orbit.h               |    14 +
 src/leon/src/orblist.c             |   676 +
 src/leon/src/orblist.h             |     7 +
 src/leon/src/orbrefn.c             |   788 ++
 src/leon/src/orbrefn.h             |    20 +
 src/leon/src/parimage.sh           |     3 +
 src/leon/src/parstab.sh            |     3 +
 src/leon/src/partn.c               |   159 +
 src/leon/src/partn.h               |    34 +
 src/leon/src/permgrp.c             |   684 +
 src/leon/src/permgrp.h             |   114 +
 src/leon/src/permut.c              |   386 +
 src/leon/src/permut.h              |    64 +
 src/leon/src/primes.c              |    38 +
 src/leon/src/primes.h              |     8 +
 src/leon/src/ptstab.sh             |     3 +
 src/leon/src/ptstbref.c            |   207 +
 src/leon/src/ptstbref.h            |    20 +
 src/leon/src/randgrp.c             |   117 +
 src/leon/src/randgrp.h             |    23 +
 src/leon/src/randobj.c             |   344 +
 src/leon/src/randobj.h             |    15 +
 src/leon/src/randpts.h             |     9 +
 src/leon/src/randschr.c            |   431 +
 src/leon/src/randschr.h            |    27 +
 src/leon/src/readdes.c             |   511 +
 src/leon/src/readdes.h             |    52 +
 src/leon/src/readgrp.c             |   784 ++
 src/leon/src/readgrp.h             |    78 +
 src/leon/src/readme                |     7 +
 src/leon/src/readpar.c             |   174 +
 src/leon/src/readpar.h             |    17 +
 src/leon/src/readper.c             |   179 +
 src/leon/src/readper.h             |    28 +
 src/leon/src/readpts.c             |   147 +
 src/leon/src/readpts.h             |    17 +
 src/leon/src/relator.c             |   823 ++
 src/leon/src/relator.h             |   103 +
 src/leon/src/repimg.h              |    33 +
 src/leon/src/repinimg.h            |    34 +
 src/leon/src/rprique.c             |   184 +
 src/leon/src/rprique.h             |    20 +
 src/leon/src/setimage.sh           |     3 +
 src/leon/src/setstab.c             |   683 +
 src/leon/src/setstab.h             |     7 +
 src/leon/src/settoinv.h            |    27 +
 src/leon/src/stamp-h1              |     1 +
 src/leon/src/stcs.c                |  1093 ++
 src/leon/src/stcs.h                |   102 +
 src/leon/src/storage.c             |   557 +
 src/leon/src/storage.h             |   133 +
 src/leon/src/swt.h                 |    72 +
 src/leon/src/token.c               |   310 +
 src/leon/src/token.h               |    33 +
 src/leon/src/util.c                |   109 +
 src/leon/src/util.h                |    21 +
 src/leon/src/wt.h                  |    64 +
 src/leon/src/wtdist.c              |   992 ++
 src/leon/src/wtdist.h              |    49 +
 src/leonconv                       |   Bin 0 -> 14416 bytes
 src/leonconv.c                     |   162 +
 tbl/bdtable2.g                     |  1071 ++
 tbl/bdtable3.g                     |  1015 ++
 tbl/bdtable4.g                     |  1065 ++
 tbl/codes2.g                       |  5899 ++++++++
 tbl/codes3.g                       |  6793 ++++++++++
 tbl/codes4.g                       |  8521 ++++++++++++
 tbl/refs.g                         |  1065 ++
 tbl/upperbd2.g                     |   650 +
 tbl/upperbd3.g                     |   911 ++
 tbl/upperbd4.g                     |   819 ++
 295 files changed, 201418 insertions(+)

diff --git a/CHANGES.guava b/CHANGES.guava
new file mode 100644
index 0000000..2c12453
--- /dev/null
+++ b/CHANGES.guava
@@ -0,0 +1,202 @@
+In this file we record the changes since the first GAP 4 release of
+the GUAVA package.
+
+Version 3.5 (04-2008):
+   o Minor changes (permission changes, etc)
+
+Version 3.4 (03-2008):
+   o Modified the configure file for the C code (R. Miller).
+   o Updated documentation.
+
+Version 3.3 (03-2008):
+   o Added new C code written by CJ and a new Guava function MinimumWeight
+     which is *much* faster than MinimumDistance (when the ground
+     field is GF(2) or GF(3)).
+   o Added Andreas Brouwer's patch for Leon's code to avoid some
+     memory problems.
+
+Version 3.2 (01-2008):
+   o Added a macro for malloc.h in leonconv.c to fix compilation error
+     under Mac OS X
+   o Added ExtendedReedSolomonCode, QuasiCyclicCode, CyclicMDSCode, 
+     FourNegacirculantSelfDualCode, ConstructionXCode, ConstructionXXCode,
+     BZCode, IsDoublyEvenCode, IsSinglyEvenCode and IsEvenCode functions.
+
+Version 3.1 (10-2007):
+   o Fixed a bug in MinimumDistance reported by Lappas Eleftherios.
+   o William Stein fixed a compilation bug.
+   o Fixed XML bugs pointed out by Frank Luebeck and Max Neunhoeffer
+
+Version 3.0: (7-2007) 
+   o Robert Miller and Tom Boothby added as authors. 
+   o Leon's code is now GPL'd (many thanks to Vera Pless 
+     and Steve Smith)! Robert and Tom are working on rewriting 
+     the code and have already fixed some bugs, compiling errors, 
+     and memory problems.
+   o Fixed several bugs reported by Punarbasu Purkayastha (a EE
+     grad student at the Univ of Maryland) in Decode, Decodeword
+     for ReedSolomon codes, as well as a problem in the
+     GUAVA documentation.
+   o Re-united the "odd" and "even" forks of the GUAVA code.
+
+Version 2.8: Forked off a branch of GUAVA which is entirely
+GPL'd code. (None of Leon's code is included.) Otherwise, same
+as 2.7. This branch is used in SAGE (sage.scipy.org).
+
+Version 2.7: (5-2005) 
+   o Cen Tjhai ("CJ") added as author.
+   o cjt: Complete rewrite of the files in the tbl subdirectory. 
+     There are (as of May 11, 2006) as updated as Brouwer's
+     online tables (www.win.tue.nl/~aeb/voorlincod.html).
+   o cjt: Created two functions in codeman.g*, SubCode and 
+     ConstructionB2Code. The ConstructionB2Code function is empty
+     and to be implemented in a future version.
+   o wdj: GUAVA Manual changes.
+
+Version 2.6: Forked off a branch of GUAVA which is entirely
+GPL'd code. (None of Leon's code is included.) Otherwise, same
+as 2.5. This branch is used in SAGE (sage.scipy.org).
+
+Version 2.5: (1-2006) 
+   o Fixed undesired feature in Decodeword (spotten by Cayanne 
+     McFarlane).
+   o Added MinimumWeightWords to manual; modified GAP code
+     for MinimumWeightWords to speed it up. 
+   o Modified CheckMatCode to "Set" *mutable* generator
+     and check matrices.
+   o Added BitFlipDecoder, a fast decoder for LDPC codes 
+     (written with Gordon McDonald).
+   o Added GuavaVersion and guava_version
+   o Added FerrorDesignCode, written with Peter Mayr at Linz
+     (one of the SONATA authors). This requires SONATA be
+     loaded.
+   o Added QQRCodeNC (written with Greg Coy).
+   o Miscellaneous additions to the GUAVA manual.
+
+Version 2.4: (6-2005) Minor bug fix - 
+   o In MatrixRepresentationOnRiemannRochSpaceP1,
+     cleaned up code and fixed a bug (GAP does not process 1 the 
+     same as x^0 in some cases).
+   o Fixed spelling error in guava.tst file.
+
+Version 2.3: (5-2005)
+   o added PermutationDecoderNC, CyclicDecoder
+   o change PermutationGroup in PermutationDecoder
+     to PermutationAutomorphismGroup 
+   o in codegen.gi, line 2066, replace C.GeneratorMat 
+     by C.EvaluationMat, and then add the existence of this extra 
+     record component to the documentation 
+   o classical Goppa = AG codes over P^1
+   o curve record data structure for plane curves 
+     and some associated functions
+   o divisor record data structure for curves (only used for P^1)
+     and some associated functions
+   o automorphism group of a divisor on P^1 (very slow)
+   o function computing matrix representation of group 
+     action on Riemann-Roch space (in P^1 case only, also
+     very slow)
+   o one point AG codes
+   o nicer evaluation codes in 2-d
+   o miscellaneous functions for multivariate polynomials
+   o new section on algebraic geometric codes in manual
+
+Version 2.0002 (5-2005)
+   o A renaming of GUAVA 2.0, for the GAP 4.4.5 release.
+
+Version 2.0001: (12-2004)
+   o Merely aded PolynomialByExtRepNC to GUAVA. (A *temporary* addition to 
+     last until GAP 4.4.5 was released.)
+
+Version 2.0: (12-2004)
+   o Changed `ViewObj` method for random linear codes, 
+     speeding up the implementation of the RandomLinearCode command.
+   o Modified BCHCode and RootsCode implementation.
+   o Corrected bug in UpperBoundElias.
+   o Rewrote GUAVA documentation into GAPDoc, with many revisions.
+   o Added EvaluationCode and related codes
+     (GeneralizedReedMullerCode, GeneralizedReedSolomonCode, 
+      OnePointAGCode, joint with Jason McGowan)
+   o Added interpolation decoding method for GeneralizedReedSolomonCode
+     (joint with Jason McGowan), GeneralizedReedSolomonDecoder.
+   o Added S. Gao decoding method for GeneralizedReedSolomonCode,
+     GeneralizedReedSolomonDecoderGao.
+   o Fixed bug in MinimumDistance (wrong result if G=(I|A)
+     and A had a row of 0s)
+   o MinimumDistanceRandom algorithm implemented in non-binary case
+     (joint with Wayne Irons).
+   o Added list-decoding algorithm GeneralizedReedSolomonListDecoder
+     (joint with Clifton Lennon) and related commands
+     (some undocumented). 
+   o Bug fix for SortedGaloisFieldElements (used to construct
+     Gabidulin codes).
+   o CalculateLinearCodeCoveringRadius changed to a slightly faster
+     algorithm.
+   o minor bug fix for ExhaustiveSearchCoveringRadius
+   o minor bug fix for IncreaseCoveringRadiusLowerBound
+   o Changed ConstantWeightSubcode so it does not call Leon's
+     program if wtdist is not installed. Moreover, the procedure 
+     interfacing with the binary had a bug, which was fixed.
+   o Added check in AutomorphismGroup: if Leon's desauto is not
+     compiled (e.g., on a windows machine) then it calls PermutationGroup 
+     command instead.
+   o Added Decodeword (which also works for non-linear codes)
+   o Added NearestNeighborDecodewords (for linear codes)
+   o Added NearestNeighborGRSDecodewords (for GRS codes)
+   o Added PermutationAutomorphismGroup (which will replace the
+     poorly named PermutationGroup command added in version 1.9)
+   o Moved several decoding commands from codeops.gi to decoders.gi
+     (with no change in functionality).
+   o Added LowerBoundGilbertVarshamov and LowerBoundSpherePacking.
+   o Added DivisorsMultivariatePolynomial and related commands
+     (some undocumented). 
+   o Released under the GNU GPL.
+
+Version 1.9: (3-2004)
+   o Faster MinimumDistance algorithm (joint with Aron Foster, a student).
+   o MinimumDistanceLeon algorithm (joint with Aron Foster) in 
+     binary case.
+   o Faster PutStandard form algorithm (with Frank Luebeck).
+   o New PermutationGroup command (for possibly non-binary codes).
+   o New PermutationDecode command.
+
+Version 1.82: (7-2003)
+   o Slight changes to prepare for the different loading 
+     mechanism for GAP packages used in the upcoming GAP 4.4.
+
+Version 1.8: 
+   o New commands for toric codes. 
+
+Version 1.7: (2-2003)
+   o Various typos in manual fixed.
+   o lib/codecstr.g[di]:
+       `AmalgamatedDirectSumCode' previously misspelt as 
+       `AmalgatedDirectSumCode' corrected.
+   o Version Id headers in doc/* and lib/* files added.
+   o README:
+       updated.
+   o init.g:
+       now checks the C code has been compiled and warns of
+       missing functionality if not compiled.
+   o banner.g, lib/setup.g:
+       banner split off as a separate file.
+   o PkgInfo.g, CHANGES (this file):
+       added.
+
+Version 1.6: (9-2001)
+   New maintainer: David Joyner.
+   o Bugs in `IsAffineCode' and `MinimumDistance' (reported by
+     Akihiro Munemasa, who also supplied a fix for the `IsAffineCode'
+     bug) fixed.
+   o Manual thoroughly reworked. HTML manual made available.
+
+Version 1.5:
+   GAP 4.2 version. Not compatible with GAP 4.1.
+
+Version 1.4:
+   First GAP4 version by Lea Ruscio. Created for GAP 4.1. 
+   Incompatible with GAP 4.2.
+
+Version 1.3:
+   Last GAP3 version.
+
+   - David Joyner -- April 25, 2008
diff --git a/COPYING.guava b/COPYING.guava
new file mode 100644
index 0000000..965be43
--- /dev/null
+++ b/COPYING.guava
@@ -0,0 +1,985 @@
+There are 2 parts to this software, both of which are now GPL'd.
+You may use version 2 or version 3 (at your preference).
+
+Part 1: Leon's C code.
+
+Part 2: GUAVA code.
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Part 1:
+
+For many years GUAVA has been released along with the ``backtracking'' 
+C programs of J. Leon. In one of his *.c files the following statements occur: 
+``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for 
+educational and research purposes. Any other use requires permission from the 
+author.''
+
+The following should be appended:
+``I, Jeffrey S. Leon, agree to license all the partition
+backtrack code which I have written under the GPL
+(www.fsf.org) as of this date, April 17, 2007.''
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Part 2:
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0214fe9
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,72 @@
+CC      = gcc
+CFLAGS  = -O2
+SRCDIR  = ../../src/leon/src
+CJSRCDIR= ../../src/ctjhai
+
+GAP_PATH=../..
+PKG_PATH=..
+SRCDISTFILE=guava
+
+all:
+	( test -d bin || mkdir bin; \
+	test -d bin/x86_64-unknown-linux-gnu-gcc || mkdir bin/x86_64-unknown-linux-gnu-gcc; cd bin/x86_64-unknown-linux-gnu-gcc; \
+	$(MAKE) -f ../../Makefile all2 CC="$(CC)" CFLAGS="$(CFLAGS)"; \
+	cd $(SRCDIR)/../; ./configure; $(MAKE); mkdir ../../bin/leon; \
+	cp cent ../../bin/leon; cp cjrndper ../../bin/leon; \
+	cp commut ../../bin/leon; cp compgrp ../../bin/leon; \
+	cp desauto ../../bin/leon; cp fndelt ../../bin/leon; \
+	cp generate ../../bin/leon; cp inter ../../bin/leon; \
+	cp orbdes ../../bin/leon; cp orblist ../../bin/leon; \
+	cp randobj ../../bin/leon; cp setstab ../../bin/leon; \
+	cp wtdist ../../bin/leon; cp src/*.sh ../../bin/leon; \
+	cp wtdist ../../bin; cp desauto ../../bin \
+	cp wtdist ../../bin/x86_64-unknown-linux-gnu-gcc; cp desauto ../../bin/x86_64-unknown-linux-gnu-gcc \
+	)
+# the last two for backwards compatibility?
+
+all2:	  leonconv minimum-weight
+
+# rules to make the executables, just link them together
+leonconv: leonconv.o
+	$(CC) $(CFLAGS) -o leonconv leonconv.o
+
+minimum-weight: minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o
+	$(CC) -lm -o minimum-weight \
+		minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o
+	
+# rules to make the .o files, just compile the .c file
+# cannot use implicit rule, because .c files are in a different directory
+leonconv.o: ../../src/leonconv.c
+	$(CC) -c $(CFLAGS) -o leonconv.o -c ../../src/leonconv.c
+
+minimum-weight.o: $(CJSRCDIR)/minimum-weight.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight.c
+minimum-weight-gf2.o: $(CJSRCDIR)/minimum-weight-gf2.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf2.c
+minimum-weight-gf3.o: $(CJSRCDIR)/minimum-weight-gf3.c $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf3.c
+popcount.o: $(CJSRCDIR)/popcount.c $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/popcount.c
+
+# pseudo targets
+clean:
+	( cd bin/x86_64-unknown-linux-gnu-gcc; rm -f *.o )
+
+distclean:
+	( rm -rf bin/x86_64-unknown-linux-gnu-gcc )
+
+# for GAP distribution
+src_dist:
+	@(cmp ${PKG_PATH}/guava/doc/guava.tex \
+         ${GAP_PATH}/doc/guava.tex \
+         || echo \
+         "*** WARNING: current 'guava.tex' and 'doc/guava.tex' differ ***")
+	@zoo ah ${SRCDISTFILE}.zoo \
+                ${PKG_PATH}/guava/Makefile \
+                ${PKG_PATH}/guava/doc/guava.tex \
+                ${PKG_PATH}/guava/init.g \
+                `find ${PKG_PATH}/guava/lib -name "*.g" -print` \
+                `find ${PKG_PATH}/guava/tbl -name "*.g" -print` \
+                `find ${PKG_PATH}/guava/src -print`
+	@zoo PE ${SRCDISTFILE}.zoo
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100755
index 0000000..2645019
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,72 @@
+CC      = gcc
+CFLAGS  = -O2
+SRCDIR  = ../../src/leon/src
+CJSRCDIR= ../../src/ctjhai
+
+GAP_PATH=../..
+PKG_PATH=..
+SRCDISTFILE=guava
+
+all:
+	( test -d bin || mkdir bin; \
+	test -d bin/@GAPARCH@ || mkdir bin/@GAPARCH@; cd bin/@GAPARCH@; \
+	$(MAKE) -f ../../Makefile all2 CC="$(CC)" CFLAGS="$(CFLAGS)"; \
+	cd $(SRCDIR)/../; ./configure; $(MAKE); mkdir ../../bin/leon; \
+	cp cent ../../bin/leon; cp cjrndper ../../bin/leon; \
+	cp commut ../../bin/leon; cp compgrp ../../bin/leon; \
+	cp desauto ../../bin/leon; cp fndelt ../../bin/leon; \
+	cp generate ../../bin/leon; cp inter ../../bin/leon; \
+	cp orbdes ../../bin/leon; cp orblist ../../bin/leon; \
+	cp randobj ../../bin/leon; cp setstab ../../bin/leon; \
+	cp wtdist ../../bin/leon; cp src/*.sh ../../bin/leon; \
+	cp wtdist ../../bin; cp desauto ../../bin \
+	cp wtdist ../../bin/@GAPARCH@; cp desauto ../../bin/@GAPARCH@ \
+	)
+# the last two for backwards compatibility?
+
+all2:	  leonconv minimum-weight
+
+# rules to make the executables, just link them together
+leonconv: leonconv.o
+	$(CC) $(CFLAGS) -o leonconv leonconv.o
+
+minimum-weight: minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o
+	$(CC) -lm -o minimum-weight \
+		minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o
+	
+# rules to make the .o files, just compile the .c file
+# cannot use implicit rule, because .c files are in a different directory
+leonconv.o: ../../src/leonconv.c
+	$(CC) -c $(CFLAGS) -o leonconv.o -c ../../src/leonconv.c
+
+minimum-weight.o: $(CJSRCDIR)/minimum-weight.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight.c
+minimum-weight-gf2.o: $(CJSRCDIR)/minimum-weight-gf2.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf2.c
+minimum-weight-gf3.o: $(CJSRCDIR)/minimum-weight-gf3.c $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf3.c
+popcount.o: $(CJSRCDIR)/popcount.c $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h
+	$(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/popcount.c
+
+# pseudo targets
+clean:
+	( cd bin/@GAPARCH@; rm -f *.o )
+
+distclean:
+	( rm -rf bin/@GAPARCH@ )
+
+# for GAP distribution
+src_dist:
+	@(cmp ${PKG_PATH}/guava/doc/guava.tex \
+         ${GAP_PATH}/doc/guava.tex \
+         || echo \
+         "*** WARNING: current 'guava.tex' and 'doc/guava.tex' differ ***")
+	@zoo ah ${SRCDISTFILE}.zoo \
+                ${PKG_PATH}/guava/Makefile \
+                ${PKG_PATH}/guava/doc/guava.tex \
+                ${PKG_PATH}/guava/init.g \
+                `find ${PKG_PATH}/guava/lib -name "*.g" -print` \
+                `find ${PKG_PATH}/guava/tbl -name "*.g" -print` \
+                `find ${PKG_PATH}/guava/src -print`
+	@zoo PE ${SRCDISTFILE}.zoo
+
diff --git a/PackageInfo.g b/PackageInfo.g
new file mode 100644
index 0000000..a461eae
--- /dev/null
+++ b/PackageInfo.g
@@ -0,0 +1,279 @@
+#############################################################################
+##
+#W  PackageInfo.g                GUAVA Package                   Greg Gamble
+#W                                                               Frank L�beck
+#W                                                               David Joyner
+##
+#H  @(#)$Id: PackageInfo.g,v 1.2 2003/02/14 02:39:41 gap Exp $
+
+SetPackageInfo( rec(
+
+  PackageName := "GUAVA",
+  Subtitle := "a GAP package for computing with error-correcting codes",
+  Version := "3.5",
+  Date    := "02/05/2008",
+  ArchiveURL 
+          := "http://sage.math.washington.edu/home/wdj/guava/guava3.5",
+  ArchiveFormats 
+          := ".tar.gz",
+  BannerString:=Concatenation(["\n   ____                          |\n",
+    "  /            \\           /   --+--  Version 3.5", "\n",
+    " /      |    | |\\\\        //|    |\n",
+    "|    _  |    | | \\\\      // |     GUAVA Group\n",
+    "|     \\ |    | |--\\\\    //--|     \n",
+    " \\     ||    | |   \\\\  //   |     \n",
+    "  \\___/  \\___/ |    \\\\//    |      \n",
+    "                                  \n\n"]),
+
+##    - if no 'TextFiles' or 'BinaryFiles' are given and a .zoo archive is
+##      provided, then the files in that archive with a "!TEXT!" comment are
+##      taken as text files
+##    - otherwise: exactly the files with names matching the regular expression
+##      ".*\(\.txt\|\.gi\|\.gd\|\.g\|\.c\|\.h\|\.htm\|\.html\|\.xml\|\.tex\|\.six\|\.bib\|\.tst\|README.*\|INSTALL.*\|Makefile\)"
+##      are taken as text files
+##  
+##  These entries are *optional*.
+#TextFiles := ["init.g", ......],
+#BinaryFiles := ["doc/manual.pdf", ......],
+
+
+  Persons := [ 
+    rec( 
+      LastName      := "Baart",
+      FirstNames    := "Reinald",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Place         := "Delft",
+      Institution   := "Delft University of Technology"
+    ),
+    rec( 
+      LastName      := "Boothby",
+      FirstNames    := "Tom",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Email         := "boothby at u.washington.edu",
+      Place         := "Seattle",
+      Institution   := "The University of Washington"
+    ),
+    rec( 
+      LastName      := "Cramwinckel",
+      FirstNames    := "Jasper",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Place         := "Delft",
+      Institution   := "Delft University of Technology"
+    ),
+    rec( 
+      LastName      := "Joyner",
+      FirstNames    := "David",
+      IsAuthor      := true,
+      IsMaintainer  := true,
+      Email         := "wdjoyner at gmail.com",
+      WWWHome       := "http://wdjoyner.org/",
+      PostalAddress := Concatenation( [
+                         "W. David Joyner\n",
+                         "Mathematics Department\n",
+                         "U. S. Naval Academy\n",
+                         "Annapolis, MD 21402\n",
+                         "USA" ] ),
+      Place         := "Annapolis",
+      Institution   := "U. S. Naval Academy"
+    ),
+    rec( 
+      LastName      := "Miller",
+      FirstNames    := "Robert",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Email         := "rlmillster at gmail.com",
+      Place         := "Seattle",
+      Institution   := "The University of Washington"
+    ),
+    rec( 
+      LastName      := "Minkes",
+      FirstNames    := "Eric",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Place         := "Delft",
+      Institution   := "Delft University of Technology"
+    ),
+    rec( 
+      LastName      := "Roijackers",
+      FirstNames    := "Erik",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Place         := "Delft",
+      Institution   := "Delft University of Technology"
+    ),
+    rec( 
+      LastName      := "Ruscio",
+      FirstNames    := "Lea",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Place         := "Edinburgh",
+      Institution   := "The University of Edinburgh"
+    ),
+    rec( 
+      LastName      := "Tjhai",
+      FirstNames    := "Cen",
+      IsAuthor      := true,
+      IsMaintainer  := false,
+      Email         := "cen.tjhai at plymouth.ac.uk",
+      WWWHome       := "http://www.plymouth.ac.uk/staff/ctjhai",
+      PostalAddress := Concatenation( [
+                         "Cen Tjhai\n",
+                         "School of Computing, Communications & Electronics\n",
+                         "B328, Portland Square,\n",
+                         "University of Plymouth\n",
+                         "Plymouth, Devon, PL4 8AA\n",
+                         "UK" ] ),
+      Place         := "Plymouth",
+      Institution   := "The University of Plymouth"
+    )
+  ],  
+
+  Status  := "accepted",
+  CommunicatedBy 
+          := "Charles Wright (Eugene)",
+  AcceptDate 
+          := "02/2003",
+
+##  For a central overview of all packages and a collection of all package
+##  archives it is necessary to have two files accessible which should be
+##  contained in each package:
+##     - A README file, containing a short abstract about the package
+##       content and installation instructions.
+##     - The file you are currently reading or editing!
+##  You must specify URLs for these two files, these allow to automate 
+##  the updating of package information on the GAP Website, and inclusion
+##  and updating of the package in the GAP distribution.
+##  
+
+  README_URL := "http://sage.math.washington.edu/home/wdj/guava/README.guava",
+  PackageInfoURL := "http://sage.math.washington.edu/home/wdj/guava/PackageInfo.g",
+
+##  Here you  must provide a short abstract explaining the package content 
+##  in HTML format (used on the package overview Web page) and an URL 
+##  for a Webpage with more detailed information about the package
+##  (not more than a few lines, less is ok):
+##  Please, use '<span class="pkgname">GAP</span>' and
+##  '<span class="pkgname">MyPKG</span>' for specifing package names.
+##  
+
+  AbstractHTML := 
+    "<span class=\"pkgname\">GUAVA</span> is a <span class=\"pkgname\">GAP</span> package for computing with codes. <span class=\"pkgname\">GUAVA</span> can construct unrestricted (non-linear), linear and cyclic codes; transform one code into another (for example by puncturing); construct a new code from two other codes (using direct sums for example); perform decoding/error-correction; and can calculate important data of codes (such as the minumim distance or covering radius) quickly. L [...]
+
+  PackageWWWHome := "http://sage.math.washington.edu/home/wdj/guava/",
+                  
+##  On the GAP Website there is an online version of all manuals in the
+##  GAP distribution. To handle the documentation of a package it is
+##  necessary to have:
+##     - an archive containing the package documentation (in at least one 
+##       of HTML or PDF-format, preferably both formats)
+##     - the start file of the HTML documentation (if provided), *relative to
+##       package root*
+##     - the PDF-file (if provided) *relative to the package root*
+##  For links to other package manuals or the GAP manuals one can assume 
+##  relative paths as in a standard GAP installation. 
+##  Also, provide the information which is currently given in your packages 
+##  init.g file in the command DeclarePackage(Auto)Documentation
+##  (for future simplification of the package loading mechanism).
+##  
+##  Please, don't include unnecessary files (.log, .aux, .dvi, .ps, ...) in
+##  the provided documentation archive.
+##  
+# in case of several help books give a list of such records here:
+
+  PackageDoc := rec(
+    # use same as in GAP            
+    BookName  := "GUAVA",
+    ArchiveURLSubset := ["doc", "htm"],
+    # format/extension can be one of .zoo, .tar.gz, .tar.bz2, -win.zip
+    #Archive   := "http://linear-ecc.googlecode.com/files/guava3.5.tar.gz",
+    HTMLStart := "htm/chap0.html",
+    PDFFile   := "doc/manual.pdf",
+    # the path to the .six file used by GAP's help system
+    SixFile   := "doc/manual.six",
+    # a longer title of the book, this together with the book name should
+    # fit on a single text line (appears with the '?books' command in GAP)
+    LongTitle := "GUAVA Coding Theory Package",
+    Subtitle := "error-correcting codes computations",
+    # Should this help book be autoloaded when GAP starts up? This should
+    # usually be 'true', otherwise say 'false'. 
+    Autoload := true
+  ),
+
+##  Are there restrictions on the operating system for this package? Or does
+##  the package need other packages to be available?
+
+  Dependencies := rec(
+    # GAP version, use version strings for specifying exact versions,
+    # prepend a '>=' for specifying a least version.
+    GAP := ">= 4.4.5",
+    # list of pairs [package name, (least) version],  package name is case
+    # insensitive, least version denoted with '>=' prepended to version string.
+    # without these, the package will not load
+    NeededOtherPackages := [],
+    # without these the package will issue a warning while loading
+    SuggestedOtherPackages := [["SONATA","2.3"]],
+    # needed external conditions (programs, operating system, ...)  provide 
+    # just strings as text or
+    # pairs [text, URL] where URL  provides further information
+    # about that point.
+    # (no automatic test will be done for this, do this in your 
+    # 'AvailabilityTest' function below)
+    ExternalConditions := []
+  ),
+
+## Provide a test function for the availability of this package, see
+## documentation of 'Declare(Auto)Package', this is the <tester> function.
+## For packages which will not fully work, use 'Info(InfoWarning, 1,
+## ".....")' statements. For packages containing nothing but GAP code,
+## just say 'ReturnTrue' here.
+## (When this is used for package loading in the future the availability
+## tests of other packages, as given above, will be done automatically and
+## need not be included here.)
+
+  AvailabilityTest := 
+    function()
+      local path;
+
+      # Test for existence of the compiled binary
+      path := DirectoriesPackagePrograms( "guava" );
+
+      if ForAny( ["desauto", "leonconv", "wtdist"], 
+                 f -> Filename( path, f ) = fail ) then
+          Info( InfoWarning, 1,
+                "Package ``GUAVA'': the C code programs are not compiled." );
+          Info( InfoWarning, 1,
+                "Some GUAVA functions, e.g. `IsEquivalent', ",
+                "will be unavailable. ");
+          Info( InfoWarning, 1,
+                "See ?Installing GUAVA" );
+      fi;
+      return true;
+    end,
+
+
+##  Suggest here if the package should be *automatically loaded* when GAP is 
+##  started.  This should usually be 'false'. Say 'true' only if your package 
+##  provides some improvements of the GAP library which are likely to enhance 
+##  the overall system performance for many users.
+
+  Autoload := false,
+
+##  *Optional*, but recommended: path relative to package root to a file which 
+##  contains as many tests of the package functionality as sensible.
+TestFile := "guava.tst",
+
+##  *Optional*: Here you can list some keyword related to the topic 
+##  of the package.
+
+  Keywords := [ "code", "codeword", "Hamming", "linear code", 
+"nonlinear code","minimum distance", 
+"error-correcting block codes", "decoding",
+"generator matrix", "check matrix","covering radius", 
+"weight distribution","automorphism group of code" ]
+
+));
+
+
diff --git a/README.guava b/README.guava
new file mode 100644
index 0000000..d8d3cb1
--- /dev/null
+++ b/README.guava
@@ -0,0 +1,128 @@
+                    The GUAVA Coding Theory Package
+                    -------------------------------
+
+GUAVA is a package that implements coding theory  algorithms  in  GAP.
+With GUAVA, codes can be created and manipulated and information about
+codes can be calculated.
+
+GUAVA consists of various files written in the GAP  language,  and  an
+external program from J.S. Leon for dealing with  automorphism  groups
+of codes and isomorphism testing functions.  Several  algorithms  that
+need the speed are integrated in the GAP kernel. Please send your  bug
+reports to support at gap-system.org. See the section "Bug reports"
+below.
+
+GUAVA was originally written in  GAP 3  by  Jasper  Cramwinckel,  Erik
+Roijackers, and Reinald Baart as a final project during their study of
+Mathematics at the Delft University of Technology, Department of  Pure
+Mathematics, and in Aachen, at Lehrstuhl D fuer Mathematik.
+
+In version 1.3 (still GAP 3), new functions were added by Eric Minkes,
+also from Delft University of Technology.
+
+Version 1.4 (the first GAP 4 version) of  GUAVA  was  created  by  Lea
+Ruscio who maintained it through to version 1.5.
+
+Versions of GUAVA since 1.6 have been maintained by David Joyner.
+Starting with Versions 2.5/2.6, GUAVA was forked: the "odd versions"
+(e.g., 2.5) include the code of J. S. Leon mentioned above (which is not
+licensed under the GPL at the time). The "even versions" (e.g., 2.6) 
+were entirely GPL'd, but were otherwise are basically the same as the 
+previous "odd version" (i.e., "2.6 = 2.5 - non-GPL'd code"). 
+
+Starting with Versions 2.7/2.8, Cen Tjhai, a PhD student in the
+School of Computing, Communications & Electronics at the University of 
+Plymouth, was added as an author. He completely updated the tables,
+which have not been updated since 1998, and added some new functions.
+
+Starting with Versions 3.0, Robert Miller, a PhD student in the
+Department of Mathematics at the University of Washington in Seattle, 
+and Tom Boothby, and undergraduate in the same department, 
+were added as authors. They will be revising Leon's code,
+which was GPL'd on April 17th, 2007:
+
+        I, Jeffrey S. Leon, agree to license all the partition
+        backtrack code which I have written under the GPL
+       (www.fsf.org) as of this date, April 17, 2007.
+
+The ``even''/``odd'' forks of the GUAVA code are now united.
+
+The current version is 3.5. 
+
+                            Installing GUAVA
+                            ----------------
+
+To install GUAVA (as a GAP4 Package) unpack  the  archive  file  in  a
+directory in the `pkg' hierarchy of your version of GAP4. (This  might
+be the `pkg' directory of the GAP4 home directory; it is however  also
+possible to  keep  an  additional  `pkg'  directory  in  your  private
+directories,  see  section  "Installing  GAP  Packages"  of  the  GAP4
+reference manual for details on how to do this.)
+
+After unpacking GUAVA the GAP-only part of  GUAVA  is  installed.  The
+parts of GUAVA depending on J. Leon's backtrack programs package  (for
+computing  automorphism  groups)  are  only  available   in   a   UNIX
+environment, where you should proceed as follows:
+
+Go to the  newly  created  `guava'  directory  and  call  `./configure
+<path>' where <path> is the path to the GAP  home  directory.  So  for
+example, if you install the package in the main `pkg' directory call
+
+  ./configure ../..
+
+(For rpm-based 64-bit linux machines, such as suse or redhat, you may 
+need "./configure ../.. --enable-libsuffix=64" instead.)
+This will fetch the architecture type for which GAP has been  compiled
+last and create a `Makefile'. Now call
+
+  make
+
+to compile the binary and to install it in the appropriate place.
+
+This completes the installation of GUAVA for a single architecture. If
+you use this installation of GUAVA on different hardware platforms you
+will have to compile the binaries for each platform  separately.  This
+is done by  calling  `configure'  and  `make'  for  the  package  anew
+immediately  after   compiling   GAP   itself   for   the   respective
+architecture. If your version of GAP is already compiled (and has last
+been compiled on the same architecture) you do not need to compile GAP
+again; it is sufficient to call the `configure' script in the GAP home
+directory.
+
+                             Loading GUAVA
+                             -------------
+
+After starting up GAP, the GUAVA package  needs  to  be  loaded.  Load
+GUAVA by typing at the GAP prompt:
+
+  gap> LoadPackage( "guava" );
+
+If GUAVA isn't already in memory,  it  is  loaded  and  its  beautiful
+banner is displayed.
+
+You may wish to test the installation by reading in the Guava test file:
+
+  gap> Read("full-path/guava.tst");
+
+If you  are a frequent user of  GUAVA, you might consider putting this
+line in your `.gaprc' file.
+
+                              Bug reports
+                              -----------
+
+When sending a bug report to support at gap-system.org, remember we
+will need to be able to reproduce the problem; so please include:
+
+ * The version of GAP you are using; either look at  the  header  when
+   you start up GAP, or at the gap> prompt type: VERSION;
+ * The operating system you are using e.g. Linux, SunOS 5.8 =  Solaris
+   2.8, IRIX 6.5, Windows, ...
+ * The compiler (if any) you used to compile the binaries and the options  
+   you used. Type: gcc -v or: cc -version.
+ * A script that demonstrates the bug, along with a description of why
+   it's a bug  (e.g.  by  adding  comments  to  the  script  -  recall
+   comments in GAP  begin with a #).
+
+  - David Joyner (wdjoyner at gmail.com)
+    March 31, 2008
+
diff --git a/configure b/configure
new file mode 100755
index 0000000..89ba495
--- /dev/null
+++ b/configure
@@ -0,0 +1,11 @@
+#!/bin/sh
+# usage: configure gappath
+# this script creates a `Makefile' from `Makefile.in' 
+rm -f Makefile sedfile
+cat $1/sysinfo.gap > Makefile
+echo "echo s/@GAPARCH@/\$GAParch/g >sedfile" >> Makefile
+chmod +x Makefile
+./Makefile
+rm -f Makefile
+sed -f sedfile Makefile.in >Makefile
+rm -f sedfile
diff --git a/doc/body.tmp b/doc/body.tmp
new file mode 100644
index 0000000..a5db545
--- /dev/null
+++ b/doc/body.tmp
@@ -0,0 +1,25247 @@
+%%Page: 1 1
+TeXDict begin HPSdict begin 1 0 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 0 a
+SDict begin [ /Producer (dvips + Distiller) /Title (Written with GAPDoc) /Subject () /Creator (LaTeX with hyperref package) /Author () /Keywords () /DOCINFO pdfmark end
+
+0 0 a Black 0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray
+0 TeXcolorgray 75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.1) cvn H.B /DEST pdfmark end
+ 75 100 a Black
+Black 75 307 a
+SDict begin [ /Page 1 /View [ /Fit ] /PageMode /UseNone /DOCVIEW pdfmark end
+ 75 307 a 75 307 a
+SDict begin [ {Catalog} << >> /PUT pdfmark end
+ 75 307 a 75 307 a
+SDict begin H.S end
+ 75
+307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (Doc-Start) cvn H.B /DEST pdfmark end
+ 75 307 a Black Black
+1622 445 a FN(GU)-9 b(A)-15 b(V)g(A)393 794 y FM(A)30
+b FL(GAP)p FM(4)f(P)o(ackage)h(f)m(or)f(computing)i(with)g(err)n(or)l
+(-corr)n(ecting)e(codes)1705 1143 y FK(V)-10 b(ersion)25
+b(3.1)1596 1492 y(October)f(20,)g(2007)1485 2427 y FJ(J)o(asper)h
+(Cramwinck)o(el)1586 2540 y(Erik)h(Roijack)o(ers)1625
+2653 y(Reinald)f(Baart)1390 2766 y(Eric)g(Mink)o(es,)h(Lea)f(Ruscio)
+1585 2882 y(Robert)g(L)h(Miller)1638 2998 y(T)-9 b(om)25
+b(Boothby)1554 3114 y(Cen)h(\(\223CJ\224\))e(Tjhai)1354
+3230 y(Da)n(vid)g(J)o(oyner)h(\(Maintainer\))75 4155
+y FI(Robert)20 b(L)h(Miller)75 4268 y FH(\227)g(Email:)p
+0.6179 0.0236 0.0894 TeXcolorrgb 426 4269 a
+SDict begin H.S end
+ 426 4269
+a 0.6179 0.0236 0.0894 TeXcolorrgb -1 x FF(rlm at robertlmiller.co)q(m)p
+0.6179 0.0236 0.0894 TeXcolorrgb 1309 4214 a
+SDict begin H.R end
+ 1309 4214
+a 1309 4268 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://rlm@robertlmiller.com) >> /Subtype /Link H.B /ANN pdfmark end
+ 1309 4268 a Black 75 4494 a FI(Cen)g(\(\223CJ\224\))d
+(Tjhai)75 4607 y FH(\227)j(Email:)p 0.6179 0.0236 0.0894
+TeXcolorrgb 426 4620 a
+SDict begin H.S end
+ 426 4620 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(cen.tjhai at plymouth.a)q(c.u)q(k)p
+0.6179 0.0236 0.0894 TeXcolorrgb 1436 4553 a
+SDict begin H.R end
+ 1436 4553
+a 1436 4607 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://cen.tjhai@plymouth.ac.uk) >> /Subtype /Link H.B /ANN pdfmark end
+ 1436 4607 a Black 75 4719 a FH(\227)g(Homepage:)p
+0.6179 0.0236 0.0894 TeXcolorrgb 587 4732 a
+SDict begin H.S end
+ 587 4732
+a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://www.plymouth)q(.ac)q
+(.uk)q(/st)q(aff)q(/ct)q(jh)q(ai)p 0.6179 0.0236 0.0894
+TeXcolorrgb 2190 4665 a
+SDict begin H.R end
+ 2190 4665 a 2190 4719 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.plymouth.ac.uk/staff/ctjhai) >> /Subtype /Link H.B /ANN pdfmark end
+ 2190
+4719 a Black 75 4945 a FI(Da)n(vid)f(J)o(oyner)f(\(Maintainer\))75
+5058 y FH(\227)i(Email:)p 0.6179 0.0236 0.0894 TeXcolorrgb
+426 5071 a
+SDict begin H.S end
+ 426 5071 a 0.6179 0.0236 0.0894 TeXcolorrgb
+468 5058 a FF(wdjoyner at gmail.com)p 0.6179 0.0236 0.0894
+TeXcolorrgb 1224 5004 a
+SDict begin H.R end
+ 1224 5004 a 1224 5058 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://\040wdjoyner@gmail.com) >> /Subtype /Link H.B /ANN pdfmark end
+ 1224
+5058 a Black 75 5171 a FH(\227)g(Homepage:)p 0.6179 0.0236 0.0894
+TeXcolorrgb 587 5184 a
+SDict begin H.S end
+ 587 5184 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(http://wdjoyner.goo)q(gle)q(pag)q(es.)q(com)q(/)p
+0.6179 0.0236 0.0894 TeXcolorrgb 1936 5117 a
+SDict begin H.R end
+ 1936 5117
+a 1936 5171 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://wdjoyner.googlepages.com/) >> /Subtype /Link H.B /ANN pdfmark end
+ 1936 5171 a Black 75 5284 a FH(\227)g(Address:)k
+(Mathematics)19 b(Department,)500 5384 y(U.)h(S.)h(Na)n(v)n(al)f
+(Academy)-5 b(,)500 5483 y(Annapolis,)18 b(MD,)500 5583
+y(21402)g(USA.)p Black Black eop end end
+%%Page: 2 2
+TeXDict begin HPSdict begin 2 1 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.2) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(2)p Black 75 399 a FM(Copyright)75 509
+y
+SDict begin H.S end
+ 75 509 a 75 509 a
+SDict begin 12 H.A end
+ 75 509 a 75 509 a
+SDict begin [ /View [/XYZ H.V] /Dest (section*.1) cvn H.B /DEST pdfmark end
+ 75 509 a 98 581
+a FH(c)75 584 y FD(\015)19 b FH(The)f(GU)m(A)-11 b(V)g(A)18
+b(Group:)23 b(1992-2003)15 b(Jasper)j(Cramwinck)o(el,)g(Erik)g(Roijack)
+o(ers,Reinald)f(Baart,)i(Eric)f(Mink)o(es,)h(Lea)f(Rus-)75
+684 y(cio)j(\(for)f(the)h(te)o(x)g(v)o(ersion\),)f(Jef)n(fre)o(y)f
+(Leon)1367 681 y(c)1344 684 y FD(\015)i FH(2004)f(Da)n(vid)h(Jo)o(yner)
+m(,)f(Cen)h(Tjhai,)g(Jasper)g(Cramwinck)o(el,)f(Erik)h(Roijack)o(ers,)
+75 783 y(Reinald)f(Baart,)g(Eric)g(Mink)o(es,)g(Lea)g(Ruscio.)1470
+780 y(c)1447 783 y FD(\015)g FH(2007)f(Robert)h(L)g(Miller)m(,)g(T)-7
+b(om)20 b(Boothby)216 883 y FC(GU)m(A)-5 b(V)f(A)72 b
+FH(is)h(released)e(under)g(the)h(GNU)g(General)g(Public)f(License)h
+(\(GPL\).)g(This)g(\002le)g(is)h(part)f(of)75 983 y FC(GU)m(A)-5
+b(V)f(A)p FH(,)54 b(though)f(as)j(documentation)51 b(it)56
+b(is)g(released)e(under)f(the)i(GNU)g(Free)g(Documentation)d(License)i
+(\(see)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 1095 a
+SDict begin H.S end
+ 75
+1095 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://www.gnu.org/l)q
+(ic)q(ens)q(es/)q(lic)q(ens)q(es.)q(htm)q(l#F)q(DL)p
+0.6179 0.0236 0.0894 TeXcolorrgb 1974 1028 a
+SDict begin H.R end
+ 1974 1028
+a 1974 1082 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.gnu.org/licenses/licenses.html#FDL) >> /Subtype /Link H.B /ANN pdfmark end
+ 1974 1082 a Black FH(\).)216 1182 y FC(GU)m(A)-5
+b(V)f(A)18 b FH(is)h(free)e(softw)o(are;)i(you)e(can)g(redistrib)n(ute)
+g(it)i(and/or)d(modify)h(it)h(under)f(the)h(terms)g(of)f(the)h(GNU)h
+(General)e(Public)75 1281 y(License)22 b(as)g(published)e(by)i(the)f
+(Free)h(Softw)o(are)f(F)o(oundation;)g(either)g(v)o(ersion)f(2)i(of)g
+(the)g(License,)f(or)h(\(at)g(your)e(option\))g(an)o(y)75
+1381 y(later)g(v)o(ersion.)216 1481 y FC(GU)m(A)-5 b(V)f(A)24
+b FH(is)g(distrib)n(uted)e(in)i(the)f(hope)g(that)g(it)h(will)h(be)e
+(useful,)g(b)n(ut)h(WITHOUT)f(ANY)h(W)-10 b(ARRANTY)i(;)25
+b(without)e(e)n(v)o(en)75 1580 y(the)c(implied)f(w)o(arranty)g(of)g
+(MERCHANT)-8 b(ABILITY)19 b(or)g(FITNESS)g(FOR)h(A)f(P)-8
+b(AR)j(TICULAR)20 b(PURPOSE.)g(See)f(the)g(GNU)75 1680
+y(General)h(Public)f(License)h(for)g(more)f(details.)216
+1780 y(Y)-9 b(ou)24 b(should)f(ha)n(v)o(e)h(recei)n(v)o(ed)f(a)i(cop)o
+(y)e(of)h(the)h(GNU)g(General)e(Public)i(License)f(along)f(with)i
+FC(GU)m(A)-5 b(V)f(A)p FH(;)24 b(if)h(not,)g(write)f(to)75
+1879 y(the)c(Free)g(Softw)o(are)g(F)o(oundation,)e(Inc.,)h(59)h(T)-6
+b(emple)19 b(Place,)i(Suite)f(330,)f(Boston,)h(MA)g(02111-1307)c(USA)
+216 1979 y(F)o(or)k(more)f(details,)i(see)p 0.6179 0.0236 0.0894
+TeXcolorrgb 927 1992 a
+SDict begin H.S end
+ 927 1992 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(http://www.fsf.org)q(/li)q(cen)q(ses)q(/gp)q(l.h)q
+(tml)p 0.6179 0.0236 0.0894 TeXcolorrgb 2446 1925 a
+SDict begin H.R end
+ 2446
+1925 a 2446 1979 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.fsf.org/licenses/gpl.html) >> /Subtype /Link H.B /ANN pdfmark end
+ 2446 1979 a Black FH(.)216 2078 y(F)o(or)g(man)o(y)f
+(years)h FC(GU)m(A)-5 b(V)f(A)21 b FH(has)g(been)g(released)f(along)h
+(with)g(the)g(\223backtracking\224)d(C)k(programs)e(of)h(J.)g(Leon.)27
+b(In)21 b(one)g(of)75 2178 y(his)27 b(*.c)f(\002les)i(the)e(follo)n
+(wing)f(statements)h(occur:)37 b(\223Cop)o(yright)25
+b(\(C\))i(1992)e(by)h(Jef)n(fre)o(y)f(S.)i(Leon.)43 b(This)27
+b(softw)o(are)f(may)g(be)75 2278 y(used)g(freely)f(for)g(educational)f
+(and)i(research)f(purposes.)41 b(An)o(y)25 b(other)g(use)i(requires)e
+(permission)g(from)f(the)i(author)-5 b(.)f(\224)42 b(The)75
+2377 y(follo)n(wing)20 b(should)g(no)n(w)h(be)g(appended:)k(\223I,)c
+(Jef)n(fre)o(y)f(S.)i(Leon,)f(agree)f(to)i(license)f(all)h(the)g
+(partition)e(backtrack)f(code)i(which)75 2477 y(I)f(ha)n(v)o(e)g
+(written)g(under)f(the)h(GPL)h(\(www)-5 b(.fsf.or)o(g\))16
+b(as)21 b(of)f(this)h(date,)f(April)g(17,)f(2007.)-6
+b(\224)75 3093 y FM(Ackno)o(wledgements)75 3203 y
+SDict begin H.S end
+ 75
+3203 a 75 3203 a
+SDict begin 12 H.A end
+ 75 3203 a 75 3203 a
+SDict begin [ /View [/XYZ H.V] /Dest (section*.2) cvn H.B /DEST pdfmark end
+ 75 3203 a 76 x FC(GU)m(A)h(V)f(A)
+23 b FH(w)o(as)g(originally)e(written)i(by)f(Jasper)h(Cramwinck)o(el,)f
+(Erik)g(Roijack)o(ers,)h(and)f(Reinald)g(Baart)h(in)g(the)g
+(early-to-mid)75 3378 y(1990')-5 b(s)22 b(as)h(a)h(\002nal)f(project)f
+(during)f(their)i(study)f(of)h(Mathematics)f(at)i(the)e(Delft)i(Uni)n
+(v)o(ersity)d(of)i(T)-6 b(echnology)h(,)20 b(Department)75
+3478 y(of)k(Pure)g(Mathematics,)h(under)e(the)i(direction)e(of)h
+(Professor)g(Juriaan)g(Simonis.)38 b(This)24 b(w)o(ork)g(w)o(as)i
+(continued)c(in)j(Aachen,)75 3577 y(at)k(Lehrstuhl)e(D)i(fur)f
+(Mathematik.)49 b(In)28 b(v)o(ersion)g(1.3,)h(ne)n(w)g(functions)e
+(were)h(added)f(by)i(Eric)f(Mink)o(es,)i(also)f(from)e(Delft)75
+3677 y(Uni)n(v)o(ersity)19 b(of)h(T)-6 b(echnology)h(.)216
+3777 y(JC,)22 b(ER)g(and)f(RB)h(w)o(ould)e(lik)o(e)i(to)f(thank)f(the)h
+FC(GAP)h FH(people)e(at)i(the)f(R)-5 b(WTH)22 b(Aachen)f(for)f(their)h
+(support,)f(A.E.)h(Brouwer)75 3876 y(for)f(his)g(advice)g(and)f(J.)i
+(Simonis)f(for)g(his)g(supervision.)216 3976 y(The)39
+b FC(GAP)h FH(4)f(v)o(ersion)f(of)h FC(GU)m(A)-5 b(V)f(A)39
+b FH(\(v)o(ersions)f(1.4)h(and)f(1.5\))g(w)o(as)i(created)f(by)g(Lea)g
+(Ruscio)g(and)g(\(since)g(2001,)75 4076 y(starting)i(with)g(v)o(ersion)
+e(1.6\))h(is)i(currently)d(maintained)h(by)g(Da)n(vid)h(Jo)o(yner)m(,)k
+(who)40 b(\(with)h(the)g(help)f(of)h(se)n(v)o(eral)f(stu-)75
+4175 y(dents\))h(has)h(added)e(se)n(v)o(eral)h(ne)n(w)g(functions.)88
+b(Starting)41 b(with)h(v)o(ersion)e(2.7,)46 b(the)c(\223best)f(linear)h
+(code\224)e(tables)i(ha)n(v)o(e)75 4275 y(been)h(updated.)95
+b(F)o(or)44 b(further)e(details,)50 b(see)45 b(the)f(CHANGES)h(\002le)f
+(in)h(the)f FC(GU)m(A)-5 b(V)f(A)44 b FH(directory)-5
+b(,)47 b(also)d(a)n(v)n(ailable)g(at)p 0.6179 0.0236 0.0894
+TeXcolorrgb 75 4387 a
+SDict begin H.S end
+ 75 4387 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(http://cadigweb.ew.u)q(sn)q(a.e)q(du/)q(\230wd)q
+(j/g)q(ap/)q(GUA)q(VA/)q(CHA)q(NGE)q(S.g)q(uav)q(a)p
+0.6179 0.0236 0.0894 TeXcolorrgb 2440 4320 a
+SDict begin H.R end
+ 2440 4320
+a 2440 4374 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/CHANGES.guava) >> /Subtype /Link H.B /ANN pdfmark end
+ 2440 4374 a Black FH(.)216 4474 y(This)24
+b(documentation)d(w)o(as)j(prepared)e(with)i(the)g FC(GAPDoc)g
+FH(package)e(of)i(Frank)f(L)7 b(\250)-35 b(ubeck)22 b(and)h(Max)h
+(Neunh)7 b(\250)-35 b(of)n(fer)-5 b(.)33 b(The)75 4574
+y(con)m(v)o(ersion)17 b(from)j(T)-6 b(eX)20 b(to)g FC(GAPDoc)p
+FH(')-5 b(s)21 b(XML)f(w)o(as)h(done)f(by)f(Da)n(vid)h(Jo)o(yner)g(in)g
+(2004.)216 4673 y(Please)30 b(send)f(b)n(ug)f(reports,)i(suggestions)e
+(and)h(other)f(comments)g(about)g FC(GU)m(A)-5 b(V)f(A)29
+b FH(to)p 0.6179 0.0236 0.0894 TeXcolorrgb 2798 4686
+a
+SDict begin H.S end
+ 2798 4686 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x
+FF(support at gap-system.o)q(rg)p 0.6179 0.0236 0.0894 TeXcolorrgb
+3723 4622 a
+SDict begin H.R end
+ 3723 4622 a 3723 4673 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://support@gap-system.org) >> /Subtype /Link H.B /ANN pdfmark end
+ 3723 4673 a Black
+FH(.)75 4773 y(Currently)46 b(kno)n(wn)g(b)n(ugs)i(and)f(suggested)f
+FC(GU)m(A)-5 b(V)f(A)48 b FH(projects)f(are)g(listed)h(on)f(the)h(b)n
+(ugs)f(and)g(projects)g(web)g(page)p 0.6179 0.0236 0.0894
+TeXcolorrgb 75 4886 a
+SDict begin H.S end
+ 75 4886 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(http://cadigweb.ew.u)q(sn)q(a.e)q(du/)q(\230wd)q
+(j/g)q(ap/)q(GUA)q(VA/)q(gua)q(va2)q(do.)q(htm)q(l)p
+0.6179 0.0236 0.0894 TeXcolorrgb 2440 4819 a
+SDict begin H.R end
+ 2440 4819
+a 2440 4873 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/guava2do.html) >> /Subtype /Link H.B /ANN pdfmark end
+ 2440 4873 a Black FH(.)35 b(Older)21 b(releases)h(and)f
+(further)f(history)h(can)75 4972 y(be)f(found)f(on)g(the)i
+FC(GU)m(A)-5 b(V)f(A)20 b FH(web)g(page)p 0.6179 0.0236 0.0894
+TeXcolorrgb 1219 4985 a
+SDict begin H.S end
+ 1219 4985 a 0.6179 0.0236 0.0894
+TeXcolorrgb -13 x FF(http://cadigweb.ew.)q(usn)q(a.e)q(du/)q(\230w)q
+(dj/)q(gap)q(/GU)q(AVA)q(/)p 0.6179 0.0236 0.0894 TeXcolorrgb
+3034 4918 a
+SDict begin H.R end
+ 3034 4918 a 3034 4972 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/) >> /Subtype /Link H.B /ANN pdfmark end
+ 3034 4972 a Black
+FH(.)216 5072 y FB(Contrib)n(utor)o(s)p FH(:)36 b(Other)26
+b(than)f(the)g(authors)g(listed)h(on)f(the)h(title)g(page,)g(the)g
+(follo)n(wing)e(people)h(ha)n(v)o(e)g(contrib)n(uted)e(code)75
+5171 y(to)31 b(the)f FC(GU)m(A)-5 b(V)f(A)31 b FH(project:)45
+b(Ale)o(xander)28 b(Hulpk)o(e,)k(Ste)n(v)o(e)e(Linton,)i(Frank)e(L)7
+b(\250)-35 b(ubeck,)31 b(Aron)f(F)o(oster)m(,)i(W)-7
+b(ayne)31 b(Irons,)h(Clifton)75 5271 y(\(\223Clipper\224\))19
+b(Lennon,)f(Jason)i(McGo)n(w)o(an,)f(Shuhong)f(Gao,)i(Gre)o(g)g
+(Gamble.)216 5384 y(F)o(or)g(documentation)d(on)j(Leon')-5
+b(s)20 b(programs,)e(see)j(the)f(src/leon/doc)e(subdirectory)g(of)i
+FC(GU)m(A)-5 b(V)f(A)p FH(.)p Black Black eop end end
+%%Page: 3 3
+TeXDict begin HPSdict begin 3 2 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.3) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(3)p Black Black Black eop end end
+%%Page: 4 4
+TeXDict begin HPSdict begin 4 3 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.4) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 963 x
+FA(Contents)75 1399 y
+SDict begin H.S end
+ 75 1399 a 75 1399 a
+SDict begin 13.6 H.A end
+ 75 1399 a 75
+1399 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter*.3) cvn H.B /DEST pdfmark end
+ 75 1399 a 0.0236 0.0894 0.6179 TeXcolorrgb 75
+1599 a
+SDict begin H.S end
+ 75 1599 a Fz(1)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Intr)n(oduction)p
+0.0236 0.0894 0.6179 TeXcolorrgb 703 1599 a
+SDict begin 13.6 H.L end
+ 703 1599
+a 703 1599 a
+SDict begin [ /Subtype /Link /Dest (chapter.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 703 1599 a Black 2956 w Fz(11)p 0.0236 0.0894 0.6179
+TeXcolorrgb 211 1711 a
+SDict begin H.S end
+ 211 1711 a FK(1.1)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Introduction)28 b(to)23 b(the)h Fy(GU)m(A)-6
+b(V)f(A)22 b FK(package)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1709 1711 a
+SDict begin 13.6 H.L end
+ 1709 1711 a 1709 1711 a
+SDict begin [ /Subtype /Link /Dest (section.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1709 1711 a Black
+93 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(11)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1824
+a
+SDict begin H.S end
+ 211 1824 a FK(1.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Installing)27
+b Fy(GU)m(A)-6 b(V)f(A)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1059 1824 a
+SDict begin 13.6 H.L end
+ 1059 1824 a 1059 1824 a
+SDict begin [ /Subtype /Link /Dest (section.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1059 1824 a Black
+61 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(11)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 1937 a
+SDict begin H.S end
+ 211 1937 a FK(1.3)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Loading)25 b Fy(GU)m(A)-6 b(V)f(A)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1018 1937 a
+SDict begin 13.6 H.L end
+ 1018 1937
+a 1018 1937 a
+SDict begin [ /Subtype /Link /Dest (section.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1018 1937 a Black 34 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+129 w(12)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75
+2141 a
+SDict begin H.S end
+ 75 2141 a Fz(2)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Coding)23
+b(theory)h(functions)g(in)e Fx(GAP)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1450 2141 a
+SDict begin 13.6 H.L end
+ 1450 2141 a 1450 2141 a
+SDict begin [ /Subtype /Link /Dest (chapter.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1450
+2141 a Black 2209 w Fz(13)p 0.0236 0.0894 0.6179 TeXcolorrgb
+211 2254 a
+SDict begin H.S end
+ 211 2254 a FK(2.1)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Distance)j(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1122 2254 a
+SDict begin 13.6 H.L end
+ 1122 2254 a 1122 2254 a
+SDict begin [ /Subtype /Link /Dest (section.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1122 2254 a Black
+67 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(13)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2367 a
+SDict begin H.S end
+ 420 2367 a FK(2.1.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(A)l(ClosestV)-10 b(ectorCombinations)q(MatFFEV)g
+(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 2381 2367 a
+SDict begin 13.6 H.L end
+
+2381 2367 a 2381 2367 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2381 2367 a Black 35 w FK(.)45
+b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(13)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2480 a
+SDict begin H.S end
+ 420 2480 a FK(2.1.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(A)l(ClosestV)-10 b(ectorComb)l(..MatFFEV)g(ecFFECoords)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2398 2480 a
+SDict begin 13.6 H.L end
+ 2398 2480
+a 2398 2480 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2398 2480 a Black 86 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(14)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2593 a
+SDict begin H.S end
+ 420
+2593 a FK(2.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistancesDistrib)n
+(utionMa)q(tFFEV)-10 b(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2095 2593 a
+SDict begin 13.6 H.L end
+ 2095 2593 a 2095 2593 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2095 2593 a Black
+48 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(14)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2706 a
+SDict begin H.S end
+ 420 2706 a FK(2.1.4)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(DistancesDistrib)n(utionV)-10 b(ec)q(FFEsV)g(ecFFE)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2120 2706 a
+SDict begin 13.6 H.L end
+ 2120 2706
+a 2120 2706 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2120 2706 a Black 91 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2819 a
+SDict begin H.S end
+ 420 2819 a FK(2.1.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(W)-7 b(eightV)d(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1264 2819 a
+SDict begin 13.6 H.L end
+ 1264 2819 a 1264 2819 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1264 2819 a Black
+61 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2932 a
+SDict begin H.S end
+ 420 2932 a FK(2.1.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DistanceV)-10 b(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1321 2932 a
+SDict begin 13.6 H.L end
+ 1321 2932 a 1321 2932 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1321 2932 a Black
+72 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 3044 a
+SDict begin H.S end
+ 211 3044 a FK(2.2)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Other)24 b(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1011 3044 a
+SDict begin 13.6 H.L end
+ 1011 3044 a 1011 3044 a
+SDict begin [ /Subtype /Link /Dest (section.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1011 3044 a Black
+41 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)p Black 129 w(16)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3157 a
+SDict begin H.S end
+ 420 3157 a FK(2.2.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Conw)o(ayPolynomial)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1429 3157 a
+SDict begin 13.6 H.L end
+ 1429 3157 a 1429 3157 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1429
+3157 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)p Black 129 w(16)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3270 a
+SDict begin H.S end
+ 420 3270 a FK(2.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(RandomPrimiti)n(v)o(ePolynomial)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1769 3270 a
+SDict begin 13.6 H.L end
+ 1769 3270 a 1769 3270 a
+SDict begin [ /Subtype /Link /Dest (subsection.2.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1769
+3270 a Black 33 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(17)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+75 3474 a
+SDict begin H.S end
+ 75 3474 a Fz(3)p 0.0 0.0 1.0 TeXcolorrgb 91
+w(Codew)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 649
+3474 a
+SDict begin 13.6 H.L end
+ 649 3474 a 649 3474 a
+SDict begin [ /Subtype /Link /Dest (chapter.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 649 3474 a Black 3010 w
+Fz(18)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 3587 a
+SDict begin H.S end
+ 211
+3587 a FK(3.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Construction)27
+b(of)c(Code)n(w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1420 3587 a
+SDict begin 13.6 H.L end
+ 1420 3587 a 1420 3587 a
+SDict begin [ /Subtype /Link /Dest (section.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1420 3587 a Black
+41 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(19)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3700 a
+SDict begin H.S end
+ 420 3700 a FK(3.1.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Code)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1085 3700 a
+SDict begin 13.6 H.L end
+ 1085 3700 a 1085 3700 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1085 3700 a Black
+35 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(19)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3813 a
+SDict begin H.S end
+ 420 3813 a FK(3.1.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Code)n(w)o(ordNr)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1181 3813 a
+SDict begin 13.6 H.L end
+ 1181 3813 a 1181 3813 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1181
+3813 a Black 76 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(20)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3926 a
+SDict begin H.S end
+ 420 3926 a FK(3.1.3)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsCode)n(w)o(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1150 3926 a
+SDict begin 13.6 H.L end
+ 1150 3926 a 1150 3926 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1150
+3926 a Black 39 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 4039 a
+SDict begin H.S end
+ 211 4039 a FK(3.2)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Comparisons)26 b(of)d(Code)n(w)o(ords)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1430 4039 a
+SDict begin 13.6 H.L end
+ 1430 4039
+a 1430 4039 a
+SDict begin [ /Subtype /Link /Dest (section.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1430 4039 a Black 31 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4152 a
+SDict begin H.S end
+ 420 4152 a FK(3.2.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(=)p 0.0236 0.0894 0.6179 TeXcolorrgb
+762 4152 a
+SDict begin 13.6 H.L end
+ 762 4152 a 762 4152 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 762 4152 a Black 86
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 4264 a
+SDict begin H.S end
+ 211 4264 a FK(3.3)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Arithmetic)25 b(Operations)h(for)d(Code)n(w)o(ords)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1796 4264 a
+SDict begin 13.6 H.L end
+ 1796 4264
+a 1796 4264 a
+SDict begin [ /Subtype /Link /Dest (section.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1796 4264 a Black 74 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4377 a
+SDict begin H.S end
+ 420 4377 a FK(3.3.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 4377 a
+SDict begin 13.6 H.L end
+
+762 4377 a 762 4377 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 762 4377 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4490 a
+SDict begin H.S end
+ 420 4490 a FK(3.3.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(-)p 0.0236 0.0894 0.6179 TeXcolorrgb 741 4490 a
+SDict begin 13.6 H.L end
+
+741 4490 a 741 4490 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 741 4490 a Black 39 w FK(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4603 a
+SDict begin H.S end
+ 420 4603 a FK(3.3.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 4603 a
+SDict begin 13.6 H.L end
+
+762 4603 a 762 4603 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 762 4603 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 4716 a
+SDict begin H.S end
+ 211 4716 a FK(3.4)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Functions)26 b(that)e(Con)l(v)o(ert)h(Code)n(w)o(ords)f(to)g(V)-10
+b(ectors)24 b(or)f(Polynomials)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2670 4716 a
+SDict begin 13.6 H.L end
+ 2670 4716 a 2670 4716 a
+SDict begin [ /Subtype /Link /Dest (section.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2670
+4716 a Black 87 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(23)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4829 a
+SDict begin H.S end
+ 420 4829 a FK(3.4.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(V)-10 b(ectorCode)n(w)o(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1321 4829 a
+SDict begin 13.6 H.L end
+ 1321 4829 a 1321 4829 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1321
+4829 a Black 72 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(23)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4942 a
+SDict begin H.S end
+ 420 4942 a FK(3.4.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(PolyCode)n(w)o(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1251 4942 a
+SDict begin 13.6 H.L end
+ 1251 4942 a 1251 4942 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1251
+4942 a Black 74 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 129 w(23)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 5055 a
+SDict begin H.S end
+ 211 5055 a FK(3.5)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Functions)26 b(that)e(Change)g(the)g(Display)h(F)o
+(orm)d(of)i(a)f(Code)n(w)o(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2479 5055 a
+SDict begin 13.6 H.L end
+ 2479 5055 a 2479 5055 a
+SDict begin [ /Subtype /Link /Dest (section.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2479
+5055 a Black 73 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 5168 a
+SDict begin H.S end
+ 420 5168 a FK(3.5.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(T)m(reatAsV)-10 b(ector)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1236 5168 a
+SDict begin 13.6 H.L end
+ 1236 5168 a 1236 5168 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1236
+5168 a Black 89 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 5281 a
+SDict begin H.S end
+ 420 5281 a FK(3.5.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(T)m(reatAsPoly)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1166 5281 a
+SDict begin 13.6 H.L end
+ 1166 5281 a 1166 5281 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1166
+5281 a Black 91 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 5394 a
+SDict begin H.S end
+ 211 5394 a FK(3.6)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Other)24 b(Code)n(w)o(ord)g(Functions)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1430 5394 a
+SDict begin 13.6 H.L end
+ 1430 5394
+a 1430 5394 a
+SDict begin [ /Subtype /Link /Dest (section.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1430 5394 a Black 31 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 5506 a
+SDict begin H.S end
+ 420 5506 a FK(3.6.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(NullW)-7 b(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1071 5506 a
+SDict begin 13.6 H.L end
+ 1071 5506 a 1071 5506 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1071
+5506 a Black 49 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black Black
+1890 5841 a(4)p Black eop end end
+%%Page: 5 5
+TeXDict begin HPSdict begin 5 4 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.5) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(5)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 399 a
+SDict begin H.S end
+ 420 399 a FK(3.6.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DistanceCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1401 399 a
+SDict begin 13.6 H.L end
+ 1401 399 a 1401 399 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1401 399 a Black 60
+w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(25)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 511 a
+SDict begin H.S end
+ 420 511 a FK(3.6.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Support)p 0.0236 0.0894 0.6179 TeXcolorrgb 997
+511 a
+SDict begin 13.6 H.L end
+ 997 511 a 997 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 997 511 a Black 55 w FK(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(25)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 624 a
+SDict begin H.S end
+ 420 624 a FK(3.6.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(W)-7 b(eightCode)n(w)o(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1344 624 a
+SDict begin 13.6 H.L end
+ 1344 624 a 1344 624 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1344 624
+a Black 49 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(26)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+75 828 a
+SDict begin H.S end
+ 75 828 a Fz(4)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Codes)p
+0.0236 0.0894 0.6179 TeXcolorrgb 448 828 a
+SDict begin 13.6 H.L end
+ 448 828 a
+448 828 a
+SDict begin [ /Subtype /Link /Dest (chapter.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 448 828 a Black 3211 w Fz(27)p 0.0236 0.0894 0.6179
+TeXcolorrgb 211 941 a
+SDict begin H.S end
+ 211 941 a FK(4.1)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Comparisons)26 b(of)d(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1247 941 a
+SDict begin 13.6 H.L end
+ 1247 941 a 1247 941 a
+SDict begin [ /Subtype /Link /Dest (section.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1247 941
+a Black 78 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(29)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1054 a
+SDict begin H.S end
+ 420 1054 a FK(4.1.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(=)p 0.0236 0.0894 0.6179 TeXcolorrgb
+762 1054 a
+SDict begin 13.6 H.L end
+ 762 1054 a 762 1054 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 762 1054 a Black 86
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(29)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 1167 a
+SDict begin H.S end
+ 211 1167 a FK(4.2)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Operations)26 b(for)e(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1221 1167 a
+SDict begin 13.6 H.L end
+ 1221 1167 a 1221 1167 a
+SDict begin [ /Subtype /Link /Dest (section.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1221
+1167 a Black 36 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1280 a
+SDict begin H.S end
+ 420 1280 a FK(4.2.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb
+762 1280 a
+SDict begin 13.6 H.L end
+ 762 1280 a 762 1280 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 762 1280 a Black 86
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1393 a
+SDict begin H.S end
+ 420 1393 a FK(4.2.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(*)p 0.0236 0.0894 0.6179 TeXcolorrgb
+756 1393 a
+SDict begin 13.6 H.L end
+ 756 1393 a 756 1393 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 756 1393 a Black 92
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1506 a
+SDict begin H.S end
+ 420 1506 a FK(4.2.3)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(*)p 0.0236 0.0894 0.6179 TeXcolorrgb
+756 1506 a
+SDict begin 13.6 H.L end
+ 756 1506 a 756 1506 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 756 1506 a Black 92
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1619 a
+SDict begin H.S end
+ 420 1619 a FK(4.2.4)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(InformationW)-7 b(ord)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1341 1619 a
+SDict begin 13.6 H.L end
+ 1341 1619 a 1341 1619 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1341
+1619 a Black 52 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 1731 a
+SDict begin H.S end
+ 211 1731 a FK(4.3)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Boolean)25 b(Functions)h(for)d(Codes)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1506 1731 a
+SDict begin 13.6 H.L end
+ 1506 1731
+a 1506 1731 a
+SDict begin [ /Subtype /Link /Dest (section.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1506 1731 a Black 24 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1844 a
+SDict begin H.S end
+ 420 1844 a FK(4.3.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(in)p 0.0236 0.0894 0.6179 TeXcolorrgb
+781 1844 a
+SDict begin 13.6 H.L end
+ 781 1844 a 781 1844 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 781 1844 a Black 67
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1957 a
+SDict begin H.S end
+ 420 1957 a FK(4.3.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsSubset)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1017 1957 a
+SDict begin 13.6 H.L end
+ 1017 1957 a 1017 1957 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1017 1957 a Black
+35 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2070 a
+SDict begin H.S end
+ 420 2070 a FK(4.3.3)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+967 2070 a
+SDict begin 13.6 H.L end
+ 967 2070 a 967 2070 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 967 2070 a Black 85
+w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2183 a
+SDict begin H.S end
+ 420 2183 a FK(4.3.4)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsLinearCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1203 2183 a
+SDict begin 13.6 H.L end
+ 1203 2183 a 1203 2183 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1203
+2183 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2296 a
+SDict begin H.S end
+ 420 2296 a FK(4.3.5)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsCyclicCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1203 2296 a
+SDict begin 13.6 H.L end
+ 1203 2296 a 1203 2296 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1203
+2296 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2409 a
+SDict begin H.S end
+ 420 2409 a FK(4.3.6)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsPerfectCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1223 2409 a
+SDict begin 13.6 H.L end
+ 1223 2409 a 1223 2409 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1223
+2409 a Black 34 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(33)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2522 a
+SDict begin H.S end
+ 420 2522 a FK(4.3.7)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(IsMDSCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1165 2522 a
+SDict begin 13.6 H.L end
+ 1165 2522 a 1165 2522 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1165 2522 a Black
+92 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(33)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2635 a
+SDict begin H.S end
+ 420 2635 a FK(4.3.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsSelfDualCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1289 2635 a
+SDict begin 13.6 H.L end
+ 1289 2635 a 1289 2635 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1289 2635 a Black
+36 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2748 a
+SDict begin H.S end
+ 420 2748 a FK(4.3.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsSelfOrthogonalCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1524 2748 a
+SDict begin 13.6 H.L end
+ 1524 2748 a 1524 2748 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1524 2748 a Black
+74 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2861 a
+SDict begin H.S end
+ 420 2861 a FK(4.3.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(IsSelfComplementaryCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1696 2861 a
+SDict begin 13.6 H.L end
+ 1696 2861 a 1696 2861 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1696 2861 a Black
+38 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2973
+a
+SDict begin H.S end
+ 420 2973 a FK(4.3.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsAf)n
+(\002neCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1197 2973
+a
+SDict begin 13.6 H.L end
+ 1197 2973 a 1197 2973 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1197 2973 a Black 60 w FK(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(35)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3086
+a
+SDict begin H.S end
+ 420 3086 a FK(4.3.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsAlmostAf)n
+(\002neCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1464 3086
+a
+SDict begin 13.6 H.L end
+ 1464 3086 a 1464 3086 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1464 3086 a Black 66 w FK(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(35)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 211 3199 a
+SDict begin H.S end
+ 211 3199
+a FK(4.4)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Equi)n(v)n(alence)26
+b(and)e(Isomorphism)i(of)d(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1893 3199 a
+SDict begin 13.6 H.L end
+ 1893 3199 a 1893 3199 a
+SDict begin [ /Subtype /Link /Dest (section.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1893
+3199 a Black 46 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+3312 a
+SDict begin H.S end
+ 420 3312 a FK(4.4.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsEqui)n(v)n(alent)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1163 3312 a
+SDict begin 13.6 H.L end
+ 1163 3312 a 1163 3312 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1163 3312 a Black
+94 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3425 a
+SDict begin H.S end
+ 420 3425 a FK(4.4.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CodeIsomorphism)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1379 3425 a
+SDict begin 13.6 H.L end
+ 1379 3425 a 1379 3425 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1379 3425 a Black
+82 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3538 a
+SDict begin H.S end
+ 420 3538 a FK(4.4.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AutomorphismGroup)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1490 3538 a
+SDict begin 13.6 H.L end
+ 1490 3538 a 1490 3538 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1490 3538 a Black
+40 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3651 a
+SDict begin H.S end
+ 420 3651 a FK(4.4.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(PermutationAutomorphismGroup)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1933 3651 a
+SDict begin 13.6 H.L end
+ 1933 3651 a 1933 3651 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1933
+3651 a Black 74 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(37)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 3764 a
+SDict begin H.S end
+ 211
+3764 a FK(4.5)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Domain)24
+b(Functions)h(for)f(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1496 3764 a
+SDict begin 13.6 H.L end
+ 1496 3764 a 1496 3764 a
+SDict begin [ /Subtype /Link /Dest (section.4.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1496 3764 a Black
+34 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3877 a
+SDict begin H.S end
+ 420 3877 a FK(4.5.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsFinite)p 0.0236 0.0894 0.6179 TeXcolorrgb 987
+3877 a
+SDict begin 13.6 H.L end
+ 987 3877 a 987 3877 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 987 3877 a Black 65 w FK(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3990 a
+SDict begin H.S end
+ 420 3990 a FK(4.5.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Size)p 0.0236 0.0894 0.6179 TeXcolorrgb 867 3990
+a
+SDict begin 13.6 H.L end
+ 867 3990 a 867 3990 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 867 3990 a Black 49 w FK(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4103 a
+SDict begin H.S end
+ 420 4103 a FK(4.5.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(LeftActingDomain)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1400 4103 a
+SDict begin 13.6 H.L end
+ 1400 4103 a 1400 4103 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1400 4103 a Black
+61 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4215 a
+SDict begin H.S end
+ 420 4215 a FK(4.5.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Dimension)p 0.0236 0.0894 0.6179 TeXcolorrgb 1108
+4215 a
+SDict begin 13.6 H.L end
+ 1108 4215 a 1108 4215 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1108 4215 a Black 81 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4328 a
+SDict begin H.S end
+ 420 4328 a FK(4.5.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AsSSortedList)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1240 4328 a
+SDict begin 13.6 H.L end
+ 1240 4328 a 1240 4328 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1240 4328 a Black
+85 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 4441 a
+SDict begin H.S end
+ 211 4441 a FK(4.6)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Printing)25 b(and)f(Displaying)i(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1562 4441 a
+SDict begin 13.6 H.L end
+ 1562 4441 a 1562 4441 a
+SDict begin [ /Subtype /Link /Dest (section.4.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1562
+4441 a Black 36 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4554 a
+SDict begin H.S end
+ 420 4554 a FK(4.6.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Print)p 0.0236 0.0894 0.6179 TeXcolorrgb 887 4554
+a
+SDict begin 13.6 H.L end
+ 887 4554 a 887 4554 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 887 4554 a Black 29 w FK(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4667 a
+SDict begin H.S end
+ 420 4667 a FK(4.6.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(String)p 0.0236 0.0894 0.6179 TeXcolorrgb 932 4667
+a
+SDict begin 13.6 H.L end
+ 932 4667 a 932 4667 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 932 4667 a Black 52 w FK(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(40)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4780 a
+SDict begin H.S end
+ 420 4780 a FK(4.6.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Display)p 0.0236 0.0894 0.6179 TeXcolorrgb 992
+4780 a
+SDict begin 13.6 H.L end
+ 992 4780 a 992 4780 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 992 4780 a Black 60 w FK(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(40)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4893 a
+SDict begin H.S end
+ 420 4893 a FK(4.6.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DisplayBoundsInfo)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1418 4893 a
+SDict begin 13.6 H.L end
+ 1418 4893 a 1418 4893 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1418 4893 a Black
+43 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 5006 a
+SDict begin H.S end
+ 211 5006 a FK(4.7)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Generating)26 b(\(Check\))f(Matrices)f(and)g(Polynomials)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2135 5006 a
+SDict begin 13.6 H.L end
+ 2135 5006
+a 2135 5006 a
+SDict begin [ /Subtype /Link /Dest (section.4.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2135 5006 a Black 76 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5119 a
+SDict begin H.S end
+ 420 5119 a FK(4.7.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneratorMat)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1218 5119 a
+SDict begin 13.6 H.L end
+ 1218 5119 a 1218 5119 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1218 5119 a Black
+39 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5232 a
+SDict begin H.S end
+ 420 5232 a FK(4.7.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CheckMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1088
+5232 a
+SDict begin 13.6 H.L end
+ 1088 5232 a 1088 5232 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1088 5232 a Black 32 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(42)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5345 a
+SDict begin H.S end
+ 420 5345 a FK(4.7.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneratorPol)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1193 5345 a
+SDict begin 13.6 H.L end
+ 1193 5345 a 1193 5345 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1193 5345 a Black
+64 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(42)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5457 a
+SDict begin H.S end
+ 420 5457 a FK(4.7.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CheckPol)p 0.0236 0.0894 0.6179 TeXcolorrgb 1063
+5457 a
+SDict begin 13.6 H.L end
+ 1063 5457 a 1063 5457 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1063 5457 a Black 57 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5570 a
+SDict begin H.S end
+ 420 5570 a FK(4.7.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(RootsOfCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1209 5570 a
+SDict begin 13.6 H.L end
+ 1209 5570 a 1209 5570 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1209 5570 a Black
+48 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(43)p Black Black Black eop end end
+%%Page: 6 6
+TeXDict begin HPSdict begin 6 5 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.6) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(6)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 399 a
+SDict begin H.S end
+ 211 399 a FK(4.8)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(P)o(arameters)25 b(of)e(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1194 399 a
+SDict begin 13.6 H.L end
+ 1194 399 a 1194 399 a
+SDict begin [ /Subtype /Link /Dest (section.4.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1194 399
+a Black 63 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 511 a
+SDict begin H.S end
+ 420 511 a FK(4.8.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(W)-7 b(ordLength)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1166 511 a
+SDict begin 13.6 H.L end
+ 1166 511 a 1166 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1166 511
+a Black 91 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 624 a
+SDict begin H.S end
+ 420 624 a FK(4.8.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Redundanc)o(y)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1161 624 a
+SDict begin 13.6 H.L end
+ 1161 624 a 1161 624 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1161 624
+a Black 28 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(44)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 737 a
+SDict begin H.S end
+ 420 737 a FK(4.8.3)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(MinimumDistance)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1390 737 a
+SDict begin 13.6 H.L end
+ 1390 737 a 1390 737 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1390 737
+a Black 71 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(44)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 850 a
+SDict begin H.S end
+ 420 850 a FK(4.8.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(MinimumDistanceLeon)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1576 850 a
+SDict begin 13.6 H.L end
+ 1576 850 a 1576 850 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1576 850 a Black 90
+w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(45)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 963
+a
+SDict begin H.S end
+ 420 963 a FK(4.8.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w
+(DecreaseMinimumDistanceUpperBo)q(und)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2190 963 a
+SDict begin 13.6 H.L end
+ 2190 963 a 2190 963 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2190 963
+a Black 90 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)p Black 129 w(46)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1076 a
+SDict begin H.S end
+ 420 1076 a FK(4.8.6)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(MinimumDistanceRandom)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1697 1076 a
+SDict begin 13.6 H.L end
+ 1697 1076 a 1697 1076 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1697
+1076 a Black 37 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(46)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1189 a
+SDict begin H.S end
+ 420 1189 a FK(4.8.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Co)o(v)o(eringRadius)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1296 1189 a
+SDict begin 13.6 H.L end
+ 1296 1189 a 1296 1189 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1296 1189 a Black
+29 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(48)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1302 a
+SDict begin H.S end
+ 420 1302 a FK(4.8.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(SetCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1412 1302 a
+SDict begin 13.6 H.L end
+ 1412 1302 a 1412 1302 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.8.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1412
+1302 a Black 49 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)p Black 129 w(49)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 1415 a
+SDict begin H.S end
+ 211 1415 a FK(4.9)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Distrib)n(utions)p 0.0236 0.0894 0.6179 TeXcolorrgb
+916 1415 a
+SDict begin 13.6 H.L end
+ 916 1415 a 916 1415 a
+SDict begin [ /Subtype /Link /Dest (section.4.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 916 1415 a Black 68
+w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)p Black 129 w(49)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1528 a
+SDict begin H.S end
+ 420 1528 a FK(4.9.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(MinimumW)-7 b(eightW)g(ords)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1567 1528 a
+SDict begin 13.6 H.L end
+ 1567 1528 a 1567 1528 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.9.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1567
+1528 a Black 31 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(49)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1641 a
+SDict begin H.S end
+ 420 1641 a FK(4.9.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(W)-7 b(eightDistrib)n(ution)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1404 1641 a
+SDict begin 13.6 H.L end
+ 1404 1641 a 1404 1641 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.9.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1404
+1641 a Black 57 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1753 a
+SDict begin H.S end
+ 420 1753 a FK(4.9.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(InnerDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1335 1753 a
+SDict begin 13.6 H.L end
+ 1335 1753 a 1335 1753 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.9.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1335 1753 a Black
+58 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1866 a
+SDict begin H.S end
+ 420 1866 a FK(4.9.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DistancesDistrib)n(ution)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1496 1866 a
+SDict begin 13.6 H.L end
+ 1496 1866 a 1496 1866 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.9.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1496
+1866 a Black 34 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1979 a
+SDict begin H.S end
+ 420 1979 a FK(4.9.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(OuterDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1351 1979 a
+SDict begin 13.6 H.L end
+ 1351 1979 a 1351 1979 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.9.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1351 1979 a Black
+42 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 2092 a
+SDict begin H.S end
+ 211 2092 a FK(4.10)p 0.0 0.0 1.0 TeXcolorrgb
+51 w(Decoding)26 b(Functions)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1178 2092 a
+SDict begin 13.6 H.L end
+ 1178 2092 a 1178 2092 a
+SDict begin [ /Subtype /Link /Dest (section.4.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1178 2092 a Black
+79 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2205 a
+SDict begin H.S end
+ 420 2205 a FK(4.10.1)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Decode)p 0.0236 0.0894 0.6179 TeXcolorrgb 987 2205
+a
+SDict begin 13.6 H.L end
+ 987 2205 a 987 2205 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 987 2205 a Black 65 w FK(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2318 a
+SDict begin H.S end
+ 420 2318 a FK(4.10.2)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Decode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1170 2318 a
+SDict begin 13.6 H.L end
+ 1170 2318 a 1170 2318 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1170 2318 a Black
+87 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(52)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2431 a
+SDict begin H.S end
+ 420 2431 a FK(4.10.3)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(GeneralizedReedSolomonDeco)q(der)q(Gao)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2119 2431 a
+SDict begin 13.6 H.L end
+ 2119 2431 a 2119 2431 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2119
+2431 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(53)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2544 a
+SDict begin H.S end
+ 420 2544
+a FK(4.10.4)p 0.0 0.0 1.0 TeXcolorrgb 65 w
+(GeneralizedReedSolomonListDec)q(ode)q(r)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2109 2544 a
+SDict begin 13.6 H.L end
+ 2109 2544 a 2109 2544 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2109
+2544 a Black 34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(54)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2657 a
+SDict begin H.S end
+ 420 2657
+a FK(4.10.5)p 0.0 0.0 1.0 TeXcolorrgb 65 w(BitFlipDecoder)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1274 2657 a
+SDict begin 13.6 H.L end
+ 1274 2657
+a 1274 2657 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1274 2657 a Black 51 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(54)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2770 a
+SDict begin H.S end
+ 420 2770
+a FK(4.10.6)p 0.0 0.0 1.0 TeXcolorrgb 65 w(NearestNeighborGRSDecode)n
+(w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 2000 2770
+a
+SDict begin 13.6 H.L end
+ 2000 2770 a 2000 2770 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2000 2770 a Black 75 w FK(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(55)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2883 a
+SDict begin H.S end
+ 420 2883 a FK(4.10.7)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(NearestNeighborDecode)n(w)o(ord)q(s)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1823 2883 a
+SDict begin 13.6 H.L end
+ 1823 2883 a 1823 2883 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1823
+2883 a Black 47 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+129 w(56)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+2995 a
+SDict begin H.S end
+ 420 2995 a FK(4.10.8)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Syndrome)p 0.0236 0.0894 0.6179 TeXcolorrgb 1083
+2995 a
+SDict begin 13.6 H.L end
+ 1083 2995 a 1083 2995 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1083 2995 a Black 37 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(57)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3108 a
+SDict begin H.S end
+ 420 3108 a FK(4.10.9)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(SyndromeT)-7 b(able)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1282 3108 a
+SDict begin 13.6 H.L end
+ 1282 3108 a 1282 3108 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1282 3108 a Black
+43 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(57)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3221 a
+SDict begin H.S end
+ 420 3221 a FK(4.10.10)p 0.0 0.0 1.0 TeXcolorrgb
+20 w(StandardArray)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1243 3221 a
+SDict begin 13.6 H.L end
+ 1243 3221 a 1243 3221 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1243 3221 a Black
+82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(58)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3334 a
+SDict begin H.S end
+ 420 3334 a FK(4.10.11)p 0.0 0.0 1.0 TeXcolorrgb
+20 w(PermutationDecode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1429 3334 a
+SDict begin 13.6 H.L end
+ 1429 3334 a 1429 3334 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1429 3334 a Black
+32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(58)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3447 a
+SDict begin H.S end
+ 420 3447 a FK(4.10.12)p 0.0 0.0 1.0 TeXcolorrgb
+20 w(PermutationDecodeNC)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1556 3447 a
+SDict begin 13.6 H.L end
+ 1556 3447 a 1556 3447 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.10.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1556 3447 a Black
+42 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(59)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+75 3651 a
+SDict begin H.S end
+ 75 3651 a Fz(5)p 0.0 0.0 1.0 TeXcolorrgb 91
+w(Generating)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+910 3651 a
+SDict begin 13.6 H.L end
+ 910 3651 a 910 3651 a
+SDict begin [ /Subtype /Link /Dest (chapter.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 910 3651 a Black 2749
+w Fz(60)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 3764 a
+SDict begin H.S end
+
+211 3764 a FK(5.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)i
+(Unrestricted)g(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1569 3764 a
+SDict begin 13.6 H.L end
+ 1569 3764 a 1569 3764 a
+SDict begin [ /Subtype /Link /Dest (section.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1569 3764 a Black
+29 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(60)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3877 a
+SDict begin H.S end
+ 420 3877 a FK(5.1.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ElementsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1239 3877 a
+SDict begin 13.6 H.L end
+ 1239 3877 a 1239 3877 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1239 3877 a Black
+86 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(60)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3990 a
+SDict begin H.S end
+ 420 3990 a FK(5.1.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(HadamardCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1279 3990 a
+SDict begin 13.6 H.L end
+ 1279 3990 a 1279 3990 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1279 3990 a Black
+46 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(61)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4103 a
+SDict begin H.S end
+ 420 4103 a FK(5.1.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ConferenceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1318 4103 a
+SDict begin 13.6 H.L end
+ 1318 4103 a 1318 4103 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1318 4103 a Black
+75 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(61)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4215 a
+SDict begin H.S end
+ 420 4215 a FK(5.1.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(MOLSCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1156
+4215 a
+SDict begin 13.6 H.L end
+ 1156 4215 a 1156 4215 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1156 4215 a Black 33 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(62)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4328 a
+SDict begin H.S end
+ 420 4328 a FK(5.1.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(RandomCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1209
+4328 a
+SDict begin 13.6 H.L end
+ 1209 4328 a 1209 4328 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1209 4328 a Black 48 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(63)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4441 a
+SDict begin H.S end
+ 420 4441 a FK(5.1.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(NordstromRobinsonCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1640 4441 a
+SDict begin 13.6 H.L end
+ 1640 4441 a 1640 4441 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1640 4441 a Black
+94 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(63)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4554
+a
+SDict begin H.S end
+ 420 4554 a FK(5.1.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GreedyCode)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1168 4554 a
+SDict begin 13.6 H.L end
+ 1168 4554
+a 1168 4554 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1168 4554 a Black 89 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(63)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 4667 a
+SDict begin H.S end
+ 420 4667
+a FK(5.1.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Le)o(xiCode)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1067 4667 a
+SDict begin 13.6 H.L end
+ 1067 4667
+a 1067 4667 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1067 4667 a Black 53 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(64)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4780 a
+SDict begin H.S end
+ 211
+4780 a FK(5.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)26
+b(Linear)e(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1357
+4780 a
+SDict begin 13.6 H.L end
+ 1357 4780 a 1357 4780 a
+SDict begin [ /Subtype /Link /Dest (section.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1357 4780 a Black 36 w
+FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(64)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4893 a
+SDict begin H.S end
+ 420 4893 a FK(5.2.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneratorMatCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1409 4893 a
+SDict begin 13.6 H.L end
+ 1409 4893 a 1409 4893 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1409 4893 a Black
+52 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(64)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5006 a
+SDict begin H.S end
+ 420 5006 a FK(5.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CheckMatCodeMutable)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1580 5006 a
+SDict begin 13.6 H.L end
+ 1580 5006 a 1580 5006 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1580 5006 a Black
+86 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+129 w(65)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+5119 a
+SDict begin H.S end
+ 420 5119 a FK(5.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CheckMatCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1279 5119 a
+SDict begin 13.6 H.L end
+ 1279 5119 a 1279 5119 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1279 5119 a Black
+46 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(65)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5232 a
+SDict begin H.S end
+ 420 5232 a FK(5.2.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(HammingCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1265 5232 a
+SDict begin 13.6 H.L end
+ 1265 5232 a 1265 5232 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1265 5232 a Black
+60 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5345 a
+SDict begin H.S end
+ 420 5345 a FK(5.2.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ReedMullerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1334 5345 a
+SDict begin 13.6 H.L end
+ 1334 5345 a 1334 5345 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1334 5345 a Black
+59 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5457 a
+SDict begin H.S end
+ 420 5457 a FK(5.2.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AlternantCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1243 5457 a
+SDict begin 13.6 H.L end
+ 1243 5457 a 1243 5457 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1243 5457 a Black
+82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5570 a
+SDict begin H.S end
+ 420 5570 a FK(5.2.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GoppaCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1143
+5570 a
+SDict begin 13.6 H.L end
+ 1143 5570 a 1143 5570 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1143 5570 a Black 46 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(67)p Black Black Black eop end end
+%%Page: 7 7
+TeXDict begin HPSdict begin 7 6 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.7) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(7)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 399 a
+SDict begin H.S end
+ 420 399 a FK(5.2.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneralizedSri)n(v)n(asta)n(v)n(aCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1707 399 a
+SDict begin 13.6 H.L end
+ 1707 399 a 1707 399 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1707 399
+a Black 95 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(67)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 511 a
+SDict begin H.S end
+ 420 511 a FK(5.2.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Sri)n(v)n(asta)n(v)n(aCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1270 511 a
+SDict begin 13.6 H.L end
+ 1270 511 a 1270 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1270 511
+a Black 55 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 624 a
+SDict begin H.S end
+ 420 624 a FK(5.2.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(CordaroW)-7 b(agnerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1477 624 a
+SDict begin 13.6 H.L end
+ 1477 624 a 1477 624 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1477 624 a Black 53
+w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 737 a
+SDict begin H.S end
+ 420 737 a FK(5.2.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(FerreroDesignCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1424 737 a
+SDict begin 13.6 H.L end
+ 1424 737 a 1424 737 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1424 737 a Black 37
+w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 850 a
+SDict begin H.S end
+ 420 850 a FK(5.2.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(RandomLinearCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1445 850 a
+SDict begin 13.6 H.L end
+ 1445 850 a 1445 850 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1445 850 a Black 85
+w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(69)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 963 a
+SDict begin H.S end
+ 420 963 a FK(5.2.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(OptimalityCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1294 963 a
+SDict begin 13.6 H.L end
+ 1294 963 a 1294 963 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1294 963 a Black 31
+w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(70)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1076 a
+SDict begin H.S end
+ 420 1076 a FK(5.2.14)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(BestKno)n(wnLinearCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1564 1076 a
+SDict begin 13.6 H.L end
+ 1564 1076 a 1564 1076 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.2.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1564 1076 a Black
+34 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(70)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 1189 a
+SDict begin H.S end
+ 211 1189 a FK(5.3)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Gabidulin)26 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1057 1189 a
+SDict begin 13.6 H.L end
+ 1057 1189 a 1057 1189 a
+SDict begin [ /Subtype /Link /Dest (section.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1057 1189 a Black
+63 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1302 a
+SDict begin H.S end
+ 420 1302 a FK(5.3.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(GabidulinCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1263 1302 a
+SDict begin 13.6 H.L end
+ 1263 1302 a 1263 1302 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1263
+1302 a Black 62 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1415 a
+SDict begin H.S end
+ 420 1415 a FK(5.3.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Enlar)n(gedGabidulinCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1587 1415 a
+SDict begin 13.6 H.L end
+ 1587 1415 a 1587 1415 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1587
+1415 a Black 79 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1528 a
+SDict begin H.S end
+ 420 1528 a FK(5.3.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Da)n(vydo)o(vCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1230 1528 a
+SDict begin 13.6 H.L end
+ 1230 1528 a 1230 1528 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1230 1528 a Black
+27 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1641 a
+SDict begin H.S end
+ 420 1641 a FK(5.3.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(T)-7 b(ombakCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1197 1641 a
+SDict begin 13.6 H.L end
+ 1197 1641 a 1197 1641 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1197 1641 a Black
+60 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1753 a
+SDict begin H.S end
+ 420 1753 a FK(5.3.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Enlar)n(gedT)-7 b(ombakCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1521 1753 a
+SDict begin 13.6 H.L end
+ 1521 1753 a 1521 1753 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1521
+1753 a Black 77 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 1866 a
+SDict begin H.S end
+ 211 1866 a FK(5.4)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Golay)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+915 1866 a
+SDict begin 13.6 H.L end
+ 915 1866 a 915 1866 a
+SDict begin [ /Subtype /Link /Dest (section.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 915 1866 a Black 69
+w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)p Black 129 w(73)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1979 a
+SDict begin H.S end
+ 420 1979 a FK(5.4.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(BinaryGolayCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1369 1979 a
+SDict begin 13.6 H.L end
+ 1369 1979 a 1369 1979 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1369
+1979 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)p Black 129 w(73)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2092 a
+SDict begin H.S end
+ 420 2092 a FK(5.4.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ExtendedBinaryGolayCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1710 2092 a
+SDict begin 13.6 H.L end
+ 1710 2092 a 1710 2092 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1710
+2092 a Black 92 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(73)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2205 a
+SDict begin H.S end
+ 420 2205 a FK(5.4.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(T)-6 b(ernaryGolayCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1403 2205 a
+SDict begin 13.6 H.L end
+ 1403 2205 a 1403 2205 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1403 2205 a Black
+58 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(74)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2318 a
+SDict begin H.S end
+ 420 2318 a FK(5.4.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ExtendedT)-6 b(ernaryGolayCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1744 2318 a
+SDict begin 13.6 H.L end
+ 1744 2318 a 1744 2318 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1744
+2318 a Black 58 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(74)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 2431 a
+SDict begin H.S end
+ 211 2431 a FK(5.5)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Generating)26 b(Cyclic)e(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1357 2431 a
+SDict begin 13.6 H.L end
+ 1357 2431 a 1357 2431 a
+SDict begin [ /Subtype /Link /Dest (section.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1357
+2431 a Black 36 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 129 w(74)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 2544 a
+SDict begin H.S end
+ 420 2544 a FK(5.5.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(GeneratorPolCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1384 2544 a
+SDict begin 13.6 H.L end
+ 1384 2544 a 1384 2544 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1384
+2544 a Black 77 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)p Black 129 w(75)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2657 a
+SDict begin H.S end
+ 420 2657 a FK(5.5.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CheckPolCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1254 2657 a
+SDict begin 13.6 H.L end
+ 1254 2657 a 1254 2657 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1254 2657 a Black
+71 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(76)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2770 a
+SDict begin H.S end
+ 420 2770 a FK(5.5.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(RootsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1113
+2770 a
+SDict begin 13.6 H.L end
+ 1113 2770 a 1113 2770 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1113 2770 a Black 76 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(76)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2883 a
+SDict begin H.S end
+ 420 2883 a FK(5.5.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(BCHCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090
+2883 a
+SDict begin 13.6 H.L end
+ 1090 2883 a 1090 2883 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1090 2883 a Black 30 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(77)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2995 a
+SDict begin H.S end
+ 420 2995 a FK(5.5.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ReedSolomonCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1415 2995 a
+SDict begin 13.6 H.L end
+ 1415 2995 a 1415 2995 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1415 2995 a Black
+46 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(78)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3108 a
+SDict begin H.S end
+ 420 3108 a FK(5.5.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(QRCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1029
+3108 a
+SDict begin 13.6 H.L end
+ 1029 3108 a 1029 3108 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1029 3108 a Black 91 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(78)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3221 a
+SDict begin H.S end
+ 420 3221 a FK(5.5.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(QQRCodeNC)p 0.0236 0.0894 0.6179 TeXcolorrgb 1222
+3221 a
+SDict begin 13.6 H.L end
+ 1222 3221 a 1222 3221 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1222 3221 a Black 35 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3334 a
+SDict begin H.S end
+ 420 3334 a FK(5.5.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(QQRCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1095
+3334 a
+SDict begin 13.6 H.L end
+ 1095 3334 a 1095 3334 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1095 3334 a Black 25 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3447 a
+SDict begin H.S end
+ 420 3447 a FK(5.5.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(FireCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1048
+3447 a
+SDict begin 13.6 H.L end
+ 1048 3447 a 1048 3447 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1048 3447 a Black 72 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3560 a
+SDict begin H.S end
+ 420 3560 a FK(5.5.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(WholeSpaceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1359 3560 a
+SDict begin 13.6 H.L end
+ 1359 3560 a 1359 3560 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1359 3560 a Black
+34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3673 a
+SDict begin H.S end
+ 420 3673 a FK(5.5.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(NullCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1063
+3673 a
+SDict begin 13.6 H.L end
+ 1063 3673 a 1063 3673 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1063 3673 a Black 57 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3786 a
+SDict begin H.S end
+ 420 3786 a FK(5.5.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(RepetitionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1278 3786 a
+SDict begin 13.6 H.L end
+ 1278 3786 a 1278 3786 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1278 3786 a Black
+47 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3899 a
+SDict begin H.S end
+ 420 3899 a FK(5.5.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(CyclicCodes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1173
+3899 a
+SDict begin 13.6 H.L end
+ 1173 3899 a 1173 3899 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1173 3899 a Black 84 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(81)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4012 a
+SDict begin H.S end
+ 420 4012 a FK(5.5.14)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(NrCyclicCodes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1269 4012 a
+SDict begin 13.6 H.L end
+ 1269 4012 a 1269 4012 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.5.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1269 4012 a Black
+56 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(81)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 4125 a
+SDict begin H.S end
+ 211 4125 a FK(5.6)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Ev)n(aluation)26 b(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1085 4125 a
+SDict begin 13.6 H.L end
+ 1085 4125 a 1085 4125 a
+SDict begin [ /Subtype /Link /Dest (section.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1085
+4125 a Black 35 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(82)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4237 a
+SDict begin H.S end
+ 420 4237 a FK(5.6.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Ev)n(aluationCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1291 4237 a
+SDict begin 13.6 H.L end
+ 1291 4237 a 1291 4237 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1291
+4237 a Black 34 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 129 w(82)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4350 a
+SDict begin H.S end
+ 420 4350 a FK(5.6.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(GeneralizedReedSolomonCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1852 4350 a
+SDict begin 13.6 H.L end
+ 1852 4350 a 1852 4350 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1852
+4350 a Black 87 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(82)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4463
+a
+SDict begin H.S end
+ 420 4463 a FK(5.6.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w
+(GeneralizedReedMullerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1771 4463 a
+SDict begin 13.6 H.L end
+ 1771 4463 a 1771 4463 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1771 4463 a Black
+31 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(83)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4576 a
+SDict begin H.S end
+ 420
+4576 a FK(5.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)-7
+b(oricPoints)p 0.0236 0.0894 0.6179 TeXcolorrgb 1126
+4576 a
+SDict begin 13.6 H.L end
+ 1126 4576 a 1126 4576 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1126 4576 a Black 63 w
+FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4689 a
+SDict begin H.S end
+ 420 4689 a FK(5.6.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(T)-7 b(oricCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1091 4689 a
+SDict begin 13.6 H.L end
+ 1091 4689 a 1091 4689 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.6.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1091 4689 a Black
+29 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 4802 a
+SDict begin H.S end
+ 211 4802 a FK(5.7)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Algebraic)26 b(geometric)f(codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1418 4802 a
+SDict begin 13.6 H.L end
+ 1418 4802 a 1418 4802 a
+SDict begin [ /Subtype /Link /Dest (section.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1418
+4802 a Black 43 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4915 a
+SDict begin H.S end
+ 420 4915 a FK(5.7.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Af)n(\002neCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1161 4915 a
+SDict begin 13.6 H.L end
+ 1161 4915 a 1161 4915 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1161 4915 a Black
+28 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5028 a
+SDict begin H.S end
+ 420 5028 a FK(5.7.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Af)n(\002nePointsOnCurv)o(e)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1498 5028 a
+SDict begin 13.6 H.L end
+ 1498 5028 a 1498 5028 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1498
+5028 a Black 32 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(85)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5141 a
+SDict begin H.S end
+ 420 5141 a FK(5.7.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GenusCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1162 5141 a
+SDict begin 13.6 H.L end
+ 1162 5141 a 1162 5141 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1162 5141 a Black
+27 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 129 w(86)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5254 a
+SDict begin H.S end
+ 420 5254 a FK(5.7.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GOrbitPoint)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1184 5254 a
+SDict begin 13.6 H.L end
+ 1184 5254 a 1184 5254 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1184 5254 a Black
+73 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 129 w(86)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5367 a
+SDict begin H.S end
+ 420 5367 a FK(5.7.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Di)n(visorOnAf)n(\002neCurv)o(e)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1541 5367 a
+SDict begin 13.6 H.L end
+ 1541 5367 a 1541 5367 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1541
+5367 a Black 57 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(87)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5479 a
+SDict begin H.S end
+ 420 5479 a FK(5.7.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Di)n(visorAddition)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1328 5479 a
+SDict begin 13.6 H.L end
+ 1328 5479 a 1328 5479 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1328 5479 a Black
+65 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5592 a
+SDict begin H.S end
+ 420 5592 a FK(5.7.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Di)n(visorDe)o(gree)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1266 5592 a
+SDict begin 13.6 H.L end
+ 1266 5592 a 1266 5592 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1266 5592 a Black
+59 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(88)p Black Black Black eop end end
+%%Page: 8 8
+TeXDict begin HPSdict begin 8 7 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.8) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(8)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 399 a
+SDict begin H.S end
+ 420 399 a FK(5.7.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Di)n(visorNe)o(gate)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1260 399 a
+SDict begin 13.6 H.L end
+ 1260 399 a 1260 399 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1260 399 a Black 65
+w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 511 a
+SDict begin H.S end
+ 420 511 a FK(5.7.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Di)n(visorIsZero)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1242 511 a
+SDict begin 13.6 H.L end
+ 1242 511 a 1242 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1242 511 a Black 83
+w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 624 a
+SDict begin H.S end
+ 420 624 a FK(5.7.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Di)n(visorsEqual)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1252 624 a
+SDict begin 13.6 H.L end
+ 1252 624 a 1252 624 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1252 624 a Black 73
+w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 737 a
+SDict begin H.S end
+ 420 737 a FK(5.7.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Di)n(visorGCD)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1196 737 a
+SDict begin 13.6 H.L end
+ 1196 737 a 1196 737 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1196 737 a Black 61
+w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 850 a
+SDict begin H.S end
+ 420 850 a FK(5.7.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Di)n(visorLCM)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1202 850 a
+SDict begin 13.6 H.L end
+ 1202 850 a 1202 850 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1202 850 a Black 55
+w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 963 a
+SDict begin H.S end
+ 420 963 a FK(5.7.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(RiemannRochSpaceBasisFunction)q(P1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2088 963 a
+SDict begin 13.6 H.L end
+ 2088 963 a 2088 963 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2088 963
+a Black 55 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(90)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1076 a
+SDict begin H.S end
+ 420 1076 a FK(5.7.14)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(Di)n(visorOfRationalFunctionP1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1828 1076 a
+SDict begin 13.6 H.L end
+ 1828 1076 a 1828 1076 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1828
+1076 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+129 w(91)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+1189 a
+SDict begin H.S end
+ 420 1189 a FK(5.7.15)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(RiemannRochSpaceBasisP1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1764 1189 a
+SDict begin 13.6 H.L end
+ 1764 1189 a 1764 1189 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1764 1189 a Black
+38 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(91)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1302 a
+SDict begin H.S end
+ 420
+1302 a FK(5.7.16)p 0.0 0.0 1.0 TeXcolorrgb 65 w(MoebiusT)m
+(ransformation)p 0.0236 0.0894 0.6179 TeXcolorrgb 1615
+1302 a
+SDict begin 13.6 H.L end
+ 1615 1302 a 1615 1302 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1615 1302 a Black 51 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(92)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1415
+a
+SDict begin H.S end
+ 420 1415 a FK(5.7.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ActionMoebiusT)m
+(ransformatio)q(nOnFun)q(ct)q(ion)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2296 1415 a
+SDict begin 13.6 H.L end
+ 2296 1415 a 2296 1415 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2296
+1415 a Black 52 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)p Black 129 w(93)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1528 a
+SDict begin H.S end
+ 420 1528 a FK(5.7.18)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(ActionMoebiusT)m(ransformatio)q(nOnDi)n(v)q(iso)q(rP1)
+p 0.0236 0.0894 0.6179 TeXcolorrgb 2340 1528 a
+SDict begin 13.6 H.L end
+ 2340 1528
+a 2340 1528 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.18) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2340 1528 a Black 76 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(93)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1641 a
+SDict begin H.S end
+ 420
+1641 a FK(5.7.19)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsActionMoebiusT)m
+(ransforma)q(tio)q(nOnDi)n(vis)q(or)q(De\002nedP1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2693 1641 a
+SDict begin 13.6 H.L end
+ 2693 1641 a 2693 1641 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.19) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2693
+1641 a Black 64 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(93)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1753 a
+SDict begin H.S end
+ 420 1753 a FK(5.7.20)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Di)n(visorAutomorphismGroupP1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1883 1753 a
+SDict begin 13.6 H.L end
+ 1883 1753 a 1883 1753 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.20) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1883
+1753 a Black 56 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129
+w(94)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1866
+a
+SDict begin H.S end
+ 420 1866 a FK(5.7.21)p 0.0 0.0 1.0 TeXcolorrgb 65 w
+(MatrixRepresentationOnRie)q(mann)q(RochSpa)q(ce)q(P1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2471 1866 a
+SDict begin 13.6 H.L end
+ 2471 1866
+a 2471 1866 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.21) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2471 1866 a Black 81 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(94)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1979 a
+SDict begin H.S end
+ 420 1979 a FK(5.7.22)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(GoppaCodeClassical)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1469 1979 a
+SDict begin 13.6 H.L end
+ 1469 1979 a 1469 1979 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.22) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1469
+1979 a Black 61 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(95)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2092 a
+SDict begin H.S end
+ 420 2092 a FK(5.7.23)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Ev)n(aluationBi)n(v)n(ariateCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1618 2092 a
+SDict begin 13.6 H.L end
+ 1618 2092 a 1618 2092 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.23) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1618
+2092 a Black 48 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(96)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2205 a
+SDict begin H.S end
+ 420 2205 a FK(5.7.24)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Ev)n(aluationBi)n(v)n(ariateCodeNC)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1745 2205 a
+SDict begin 13.6 H.L end
+ 1745 2205 a 1745 2205 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.24) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1745
+2205 a Black 57 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(96)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2318 a
+SDict begin H.S end
+ 420 2318 a FK(5.7.25)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(OnePointA)l(GCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1372 2318 a
+SDict begin 13.6 H.L end
+ 1372 2318 a 1372 2318 a
+SDict begin [ /Subtype /Link /Dest (subsection.5.7.25) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1372 2318 a Black
+89 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 129 w(97)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+75 2522 a
+SDict begin H.S end
+ 75 2522 a Fz(6)p 0.0 0.0 1.0 TeXcolorrgb 91
+w(Manipulating)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1002 2522 a
+SDict begin 13.6 H.L end
+ 1002 2522 a 1002 2522 a
+SDict begin [ /Subtype /Link /Dest (chapter.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1002 2522 a Black
+2657 w Fz(99)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 2635
+a
+SDict begin H.S end
+ 211 2635 a FK(6.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Functions)i(that)e
+(Generate)h(a)e(Ne)n(w)f(Code)i(from)f(a)g(Gi)n(v)o(en)g(Code)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2500 2635 a
+SDict begin 13.6 H.L end
+ 2500 2635
+a 2500 2635 a
+SDict begin [ /Subtype /Link /Dest (section.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2500 2635 a Black 52 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(99)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2748 a
+SDict begin H.S end
+ 420 2748
+a FK(6.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ExtendedCode)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1243 2748 a
+SDict begin 13.6 H.L end
+ 1243 2748
+a 1243 2748 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1243 2748 a Black 82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(99)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2861 a
+SDict begin H.S end
+ 420 2861
+a FK(6.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PuncturedCode)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1268 2861 a
+SDict begin 13.6 H.L end
+ 1268 2861
+a 1268 2861 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1268 2861 a Black 57 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(100)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2973 a
+SDict begin H.S end
+ 420 2973
+a FK(6.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Ev)o(enW)-7
+b(eightSubcode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1466
+2973 a
+SDict begin 13.6 H.L end
+ 1466 2973 a 1466 2973 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1466 2973 a Black 64 w
+FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(100)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3086 a
+SDict begin H.S end
+ 420 3086 a FK(6.1.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(PermutedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1249 3086 a
+SDict begin 13.6 H.L end
+ 1249 3086 a 1249 3086 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1249 3086 a Black
+76 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(101)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3199 a
+SDict begin H.S end
+ 420 3199 a FK(6.1.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Expur)n(gatedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1316 3199 a
+SDict begin 13.6 H.L end
+ 1316 3199 a 1316 3199 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1316 3199 a Black
+77 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(101)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3312 a
+SDict begin H.S end
+ 420 3312 a FK(6.1.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AugmentedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1324 3312 a
+SDict begin 13.6 H.L end
+ 1324 3312 a 1324 3312 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1324 3312 a Black
+69 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(102)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3425 a
+SDict begin H.S end
+ 420 3425 a FK(6.1.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Remo)o(v)o(edElementsCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1584 3425 a
+SDict begin 13.6 H.L end
+ 1584 3425 a 1584 3425 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1584
+3425 a Black 82 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(102)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3538 a
+SDict begin H.S end
+ 420 3538 a FK(6.1.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AddedElementsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1480 3538 a
+SDict begin 13.6 H.L end
+ 1480 3538 a 1480 3538 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1480 3538 a Black
+50 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(103)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3651 a
+SDict begin H.S end
+ 420 3651 a FK(6.1.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ShortenedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1268 3651 a
+SDict begin 13.6 H.L end
+ 1268 3651 a 1268 3651 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1268 3651 a Black
+57 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(103)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3764 a
+SDict begin H.S end
+ 420 3764 a FK(6.1.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(LengthenedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1328 3764 a
+SDict begin 13.6 H.L end
+ 1328 3764 a 1328 3764 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1328 3764 a Black
+65 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(104)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3877 a
+SDict begin H.S end
+ 420 3877 a FK(6.1.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(ResidueCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1193
+3877 a
+SDict begin 13.6 H.L end
+ 1193 3877 a 1193 3877 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1193 3877 a Black 64 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3990 a
+SDict begin H.S end
+ 420 3990 a FK(6.1.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(ConstructionBCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1429 3990 a
+SDict begin 13.6 H.L end
+ 1429 3990 a 1429 3990 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1429 3990 a Black
+32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4103 a
+SDict begin H.S end
+ 420 4103 a FK(6.1.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(DualCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1078
+4103 a
+SDict begin 13.6 H.L end
+ 1078 4103 a 1078 4103 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1078 4103 a Black 42 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4215 a
+SDict begin H.S end
+ 420 4215 a FK(6.1.14)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Con)l(v)o(ersionFieldCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1499 4215 a
+SDict begin 13.6 H.L end
+ 1499 4215 a 1499 4215 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1499
+4215 a Black 31 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(106)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4328 a
+SDict begin H.S end
+ 420 4328 a FK(6.1.15)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(T)m(raceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1105 4328 a
+SDict begin 13.6 H.L end
+ 1105 4328 a 1105 4328 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1105 4328 a Black
+84 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 84 w(106)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4441 a
+SDict begin H.S end
+ 420 4441 a FK(6.1.16)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(CosetCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1108
+4441 a
+SDict begin 13.6 H.L end
+ 1108 4441 a 1108 4441 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1108 4441 a Black 81 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(107)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4554 a
+SDict begin H.S end
+ 420 4554 a FK(6.1.17)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(ConstantW)-7 b(eightSubcode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1602 4554 a
+SDict begin 13.6 H.L end
+ 1602 4554 a 1602 4554 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1602
+4554 a Black 64 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(107)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4667 a
+SDict begin H.S end
+ 420 4667 a FK(6.1.18)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(StandardF)o(ormCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1419 4667 a
+SDict begin 13.6 H.L end
+ 1419 4667 a 1419 4667 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.18) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1419 4667 a Black
+42 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(108)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4780 a
+SDict begin H.S end
+ 420 4780 a FK(6.1.19)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Piece)n(wiseConstantCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1583 4780 a
+SDict begin 13.6 H.L end
+ 1583 4780 a 1583 4780 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.1.19) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1583
+4780 a Black 83 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(108)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 4893 a
+SDict begin H.S end
+ 211 4893 a FK(6.2)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Functions)26 b(that)e(Generate)h(a)e(Ne)n(w)f(Code)i(from)f(T)-7
+b(w)o(o)22 b(Gi)n(v)o(en)h(Codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2653 4893 a
+SDict begin 13.6 H.L end
+ 2653 4893 a 2653 4893 a
+SDict begin [ /Subtype /Link /Dest (section.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2653
+4893 a Black 36 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)p Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5006 a
+SDict begin H.S end
+ 420 5006 a FK(6.2.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1295 5006 a
+SDict begin 13.6 H.L end
+ 1295 5006 a 1295 5006 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1295 5006 a Black
+30 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5119 a
+SDict begin H.S end
+ 420 5119 a FK(6.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UUVCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1100
+5119 a
+SDict begin 13.6 H.L end
+ 1100 5119 a 1100 5119 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1100 5119 a Black 89 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5232 a
+SDict begin H.S end
+ 420 5232 a FK(6.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(DirectProductCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1409 5232 a
+SDict begin 13.6 H.L end
+ 1409 5232 a 1409 5232 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1409 5232 a Black
+52 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(110)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5345 a
+SDict begin H.S end
+ 420 5345 a FK(6.2.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IntersectionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1327 5345 a
+SDict begin 13.6 H.L end
+ 1327 5345 a 1327 5345 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1327 5345 a Black
+66 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(110)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5457 a
+SDict begin H.S end
+ 420 5457 a FK(6.2.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UnionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1128
+5457 a
+SDict begin 13.6 H.L end
+ 1128 5457 a 1128 5457 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1128 5457 a Black 61 w
+FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(111)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5570 a
+SDict begin H.S end
+ 420 5570 a FK(6.2.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(ExtendedDirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1636 5570 a
+SDict begin 13.6 H.L end
+ 1636 5570 a 1636 5570 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1636 5570 a Black
+30 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+84 w(111)p Black Black Black eop end end
+%%Page: 9 9
+TeXDict begin HPSdict begin 9 8 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.9) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1708 w FE(GU)n(A)l(V)-5
+b(A)1723 b FK(9)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 399 a
+SDict begin H.S end
+ 420 399 a FK(6.2.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(AmalgamatedDirectSumCode)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1803 399 a
+SDict begin 13.6 H.L end
+ 1803 399 a 1803 399 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1803 399
+a Black 67 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+84 w(112)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+511 a
+SDict begin H.S end
+ 420 511 a FK(6.2.8)p 0.0 0.0 1.0 TeXcolorrgb 110
+w(BlockwiseDirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1677 511 a
+SDict begin 13.6 H.L end
+ 1677 511 a 1677 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.6.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1677 511 a Black 57
+w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(112)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 715 a
+SDict begin H.S end
+ 75 715
+a Fz(7)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Bounds)22 b(on)h(codes,)g
+(special)i(matrices)g(and)d(miscellaneous)j(functions)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2653 715 a
+SDict begin 13.6 H.L end
+ 2653 715
+a 2653 715 a
+SDict begin [ /Subtype /Link /Dest (chapter.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2653 715 a Black 961 w Fz(114)p 0.0236 0.0894 0.6179
+TeXcolorrgb 211 828 a
+SDict begin H.S end
+ 211 828 a FK(7.1)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Distance)g(bounds)h(on)d(codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1390 828 a
+SDict begin 13.6 H.L end
+ 1390 828 a 1390 828 a
+SDict begin [ /Subtype /Link /Dest (section.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1390 828
+a Black 71 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(114)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 941 a
+SDict begin H.S end
+ 420 941 a FK(7.1.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundSingleton)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1524 941 a
+SDict begin 13.6 H.L end
+ 1524 941 a 1524 941 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1524 941 a Black 74
+w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+1054 a
+SDict begin H.S end
+ 420 1054 a FK(7.1.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundHamming)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1541 1054 a
+SDict begin 13.6 H.L end
+ 1541 1054 a 1541 1054 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1541 1054 a Black
+57 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1167 a
+SDict begin H.S end
+ 420 1167 a FK(7.1.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundJohnson)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1473 1167 a
+SDict begin 13.6 H.L end
+ 1473 1167 a 1473 1167 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1473 1167 a Black
+57 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1280 a
+SDict begin H.S end
+ 420 1280 a FK(7.1.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundPlotkin)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1439 1280 a
+SDict begin 13.6 H.L end
+ 1439 1280 a 1439 1280 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1439 1280 a Black
+91 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(116)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1393 a
+SDict begin H.S end
+ 420 1393 a FK(7.1.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundElias)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1359 1393 a
+SDict begin 13.6 H.L end
+ 1359 1393 a 1359 1393 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1359 1393 a Black
+34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(116)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1506 a
+SDict begin H.S end
+ 420 1506 a FK(7.1.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBoundGriesmer)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1515 1506 a
+SDict begin 13.6 H.L end
+ 1515 1506 a 1515 1506 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1515 1506 a Black
+83 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1619 a
+SDict begin H.S end
+ 420 1619 a FK(7.1.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsGriesmerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1304 1619 a
+SDict begin 13.6 H.L end
+ 1304 1619 a 1304 1619 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1304 1619 a Black
+89 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1731 a
+SDict begin H.S end
+ 420 1731 a FK(7.1.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(UpperBound)p 0.0236 0.0894 0.6179 TeXcolorrgb 1178
+1731 a
+SDict begin 13.6 H.L end
+ 1178 1731 a 1178 1731 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1178 1731 a Black 79 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1844 a
+SDict begin H.S end
+ 420 1844 a FK(7.1.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Lo)n(werBoundMinimumDistance)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1866 1844 a
+SDict begin 13.6 H.L end
+ 1866 1844 a 1866 1844 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1866
+1844 a Black 73 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1957
+a
+SDict begin H.S end
+ 420 1957 a FK(7.1.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n
+(werBoundGilbertV)-10 b(arshamo)o(v)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1849 1957 a
+SDict begin 13.6 H.L end
+ 1849 1957 a 1849 1957 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1849
+1957 a Black 90 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+84 w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+2070 a
+SDict begin H.S end
+ 420 2070 a FK(7.1.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Lo)n(werBoundSphereP)o(acking)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1728 2070 a
+SDict begin 13.6 H.L end
+ 1728 2070 a 1728 2070 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1728
+2070 a Black 74 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2183 a
+SDict begin H.S end
+ 420 2183 a FK(7.1.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(UpperBoundMinimumDistance)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1857 2183 a
+SDict begin 13.6 H.L end
+ 1857 2183 a 1857 2183 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1857
+2183 a Black 82 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(119)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2296
+a
+SDict begin H.S end
+ 420 2296 a FK(7.1.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w
+(BoundsMinimumDistance)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1666 2296 a
+SDict begin 13.6 H.L end
+ 1666 2296 a 1666 2296 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.1.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1666 2296 a Black
+68 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(119)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 2409
+a
+SDict begin H.S end
+ 211 2409 a FK(7.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Co)o(v)o(ering)25
+b(radius)g(bounds)g(on)f(codes)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1652 2409 a
+SDict begin 13.6 H.L end
+ 1652 2409 a 1652 2409 a
+SDict begin [ /Subtype /Link /Dest (section.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1652
+2409 a Black 82 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2522 a
+SDict begin H.S end
+ 420 2522 a FK(7.2.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(BoundsCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1572 2522 a
+SDict begin 13.6 H.L end
+ 1572 2522 a 1572 2522 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1572
+2522 a Black 94 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2635 a
+SDict begin H.S end
+ 420 2635 a FK(7.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IncreaseCo)o(v)o(eringRadiusLo)n(werBou)q(nd)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2074 2635 a
+SDict begin 13.6 H.L end
+ 2074 2635
+a 2074 2635 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2074 2635 a Black 69 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2748 a
+SDict begin H.S end
+ 420 2748 a FK(7.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Exhausti)n(v)o(eSearchCo)o(v)o(eringRadiu)q(s)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1941 2748 a
+SDict begin 13.6 H.L end
+ 1941 2748
+a 1941 2748 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1941 2748 a Black 66 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(121)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2861 a
+SDict begin H.S end
+ 420 2861 a FK(7.2.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneralLo)n(werBoundCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2059 2861 a
+SDict begin 13.6 H.L end
+ 2059 2861 a 2059 2861 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2059
+2861 a Black 84 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(122)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2973 a
+SDict begin H.S end
+ 420 2973
+a FK(7.2.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralUpperBoundCo)o(v)o
+(eringRad)q(iu)q(s)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2051 2973 a
+SDict begin 13.6 H.L end
+ 2051 2973 a 2051 2973 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2051 2973 a Black
+92 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)p Black 84 w(122)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3086 a
+SDict begin H.S end
+ 420 3086 a FK(7.2.6)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o(eringRadiusSphereCov)o(erin)q
+(g)p 0.0236 0.0894 0.6179 TeXcolorrgb 2359 3086 a
+SDict begin 13.6 H.L end
+ 2359
+3086 a 2359 3086 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2359 3086 a Black 57 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(123)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3199 a
+SDict begin H.S end
+ 420
+3199 a FK(7.2.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o
+(eringRadiusV)-10 b(anW)j(ee1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2117 3199 a
+SDict begin 13.6 H.L end
+ 2117 3199 a 2117 3199 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2117
+3199 a Black 94 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(123)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 3312 a
+SDict begin H.S end
+ 420 3312
+a FK(7.2.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o
+(eringRadiusV)-10 b(anW)j(ee2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2117 3312 a
+SDict begin 13.6 H.L end
+ 2117 3312 a 2117 3312 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2117
+3312 a Black 94 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(124)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 3425 a
+SDict begin H.S end
+ 420 3425
+a FK(7.2.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o
+(eringRadiusCounti)q(ngExc)q(es)q(s)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2362 3425 a
+SDict begin 13.6 H.L end
+ 2362 3425 a 2362 3425 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2362
+3425 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)p Black 84 w(124)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3538 a
+SDict begin H.S end
+ 420 3538 a FK(7.2.10)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(Lo)n(werBoundCo)o(v)o(eringRadiusEmbedded)q(1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2205 3538 a
+SDict begin 13.6 H.L end
+ 2205 3538
+a 2205 3538 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2205 3538 a Black 75 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(125)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3651
+a
+SDict begin H.S end
+ 420 3651 a FK(7.2.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n(werBoundCo)o
+(v)o(eringRadiusEmbedded)q(2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2205 3651 a
+SDict begin 13.6 H.L end
+ 2205 3651 a 2205 3651 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2205 3651 a Black
+75 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 84 w(125)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3764 a
+SDict begin H.S end
+ 420 3764 a FK(7.2.12)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(Lo)n(werBoundCo)o(v)o(eringRadiusIndu)q(cti)q(on)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2119 3764 a
+SDict begin 13.6 H.L end
+ 2119 3764
+a 2119 3764 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2119 3764 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black
+84 w(126)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420
+3877 a
+SDict begin H.S end
+ 420 3877 a FK(7.2.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(UpperBoundCo)o(v)o(eringRadiusRed)q(un)q(dan)q(c)o(y)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2216 3877 a
+SDict begin 13.6 H.L end
+ 2216 3877
+a 2216 3877 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2216 3877 a Black 64 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(126)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3990
+a
+SDict begin H.S end
+ 420 3990 a FK(7.2.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)
+o(eringRadiusDels)q(art)q(e)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2066 3990 a
+SDict begin 13.6 H.L end
+ 2066 3990 a 2066 3990 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2066 3990 a Black
+77 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)p Black 84 w(127)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4103 a
+SDict begin H.S end
+ 420 4103 a FK(7.2.15)p 0.0 0.0 1.0
+TeXcolorrgb 65 w(UpperBoundCo)o(v)o(eringRadiusStre)q(ng)q(th)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2071 4103 a
+SDict begin 13.6 H.L end
+ 2071 4103
+a 2071 4103 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2071 4103 a Black 72 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(127)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4215 a
+SDict begin H.S end
+ 420 4215 a FK(7.2.16)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(UpperBoundCo)o(v)o(eringRadiusGrie)q(smerLike)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2267 4215 a
+SDict begin 13.6 H.L end
+ 2267 4215
+a 2267 4215 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2267 4215 a Black 81 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(127)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4328 a
+SDict begin H.S end
+ 420
+4328 a FK(7.2.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)o
+(eringRadiusCyc)q(lic)q(Code)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2192 4328 a
+SDict begin 13.6 H.L end
+ 2192 4328 a 2192 4328 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.2.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2192 4328 a Black
+88 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)p Black 84 w(128)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 211 4441 a
+SDict begin H.S end
+ 211 4441 a FK(7.3)p 0.0 0.0 1.0
+TeXcolorrgb 96 w(Special)25 b(matrices)g(in)e Fy(GU)m(A)-6
+b(V)f(A)p 0.0236 0.0894 0.6179 TeXcolorrgb 1429 4441
+a
+SDict begin 13.6 H.L end
+ 1429 4441 a 1429 4441 a
+SDict begin [ /Subtype /Link /Dest (section.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1429 4441 a Black 32 w FK(.)46
+b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(128)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4554 a
+SDict begin H.S end
+ 420 4554 a FK(7.3.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Kra)o(wtchoukMat)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1303 4554 a
+SDict begin 13.6 H.L end
+ 1303 4554 a 1303 4554 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1303 4554 a Black
+90 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4667 a
+SDict begin H.S end
+ 420 4667 a FK(7.3.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GrayMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1038
+4667 a
+SDict begin 13.6 H.L end
+ 1038 4667 a 1038 4667 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1038 4667 a Black 82 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4780 a
+SDict begin H.S end
+ 420 4780 a FK(7.3.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(Sylv)o(esterMat)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1192 4780 a
+SDict begin 13.6 H.L end
+ 1192 4780 a 1192 4780 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1192 4780 a Black
+65 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4893 a
+SDict begin H.S end
+ 420 4893 a FK(7.3.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(HadamardMat)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1234 4893 a
+SDict begin 13.6 H.L end
+ 1234 4893 a 1234 4893 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1234 4893 a Black
+91 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(130)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5006 a
+SDict begin H.S end
+ 420 5006 a FK(7.3.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(V)-10 b(andermondeMat)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1359 5006 a
+SDict begin 13.6 H.L end
+ 1359 5006 a 1359 5006 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1359 5006 a Black
+34 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(130)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5119 a
+SDict begin H.S end
+ 420 5119 a FK(7.3.6)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(PutStandardF)o(orm)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1349 5119 a
+SDict begin 13.6 H.L end
+ 1349 5119 a 1349 5119 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1349 5119 a Black
+44 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(131)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5232 a
+SDict begin H.S end
+ 420 5232 a FK(7.3.7)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsInStandardF)o(orm)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1368 5232 a
+SDict begin 13.6 H.L end
+ 1368 5232 a 1368 5232 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1368 5232 a Black
+93 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5345 a
+SDict begin H.S end
+ 420 5345 a FK(7.3.8)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(PermutedCols)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1224 5345 a
+SDict begin 13.6 H.L end
+ 1224 5345 a 1224 5345 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1224 5345 a Black
+33 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+p Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5457 a
+SDict begin H.S end
+ 420 5457 a FK(7.3.9)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(V)-10 b(erticalCon)l(v)o(ersionFieldMat)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1736 5457 a
+SDict begin 13.6 H.L end
+ 1736 5457 a 1736 5457 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1736
+5457 a Black 66 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 5570 a
+SDict begin H.S end
+ 420 5570 a FK(7.3.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(HorizontalCon)l(v)o(ersionFie)q(ldMat)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1842 5570 a
+SDict begin 13.6 H.L end
+ 1842 5570 a 1842 5570 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1842
+5570 a Black 97 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(133)p Black Black Black eop end end
+%%Page: 10 10
+TeXDict begin HPSdict begin 10 9 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.10) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(10)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 399 a
+SDict begin H.S end
+ 420 399 a FK(7.3.11)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(MOLS)p 0.0236 0.0894 0.6179 TeXcolorrgb 965 399
+a
+SDict begin 13.6 H.L end
+ 965 399 a 965 399 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 965 399 a Black 87 w FK(.)45 b(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(133)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 511 a
+SDict begin H.S end
+ 420 511 a FK(7.3.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(IsLatinSquare)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1218 511 a
+SDict begin 13.6 H.L end
+ 1218 511 a 1218 511 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1218 511 a Black 39
+w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(134)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 624 a
+SDict begin H.S end
+ 420 624 a FK(7.3.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(AreMOLS)p 0.0236 0.0894 0.6179 TeXcolorrgb 1101
+624 a
+SDict begin 13.6 H.L end
+ 1101 624 a 1101 624 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.3.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1101 624 a Black 88 w FK(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(134)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 737 a
+SDict begin H.S end
+ 211 737 a FK(7.4)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Some)23 b(functions)j(related)f(to)f(the)g(norm)f(of)h(a)f(code)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2079 737 a
+SDict begin 13.6 H.L end
+ 2079 737
+a 2079 737 a
+SDict begin [ /Subtype /Link /Dest (section.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2079 737 a Black 64 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 850 a
+SDict begin H.S end
+ 420 850 a FK(7.4.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CoordinateNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1324 850 a
+SDict begin 13.6 H.L end
+ 1324 850 a 1324 850 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1324 850 a Black 69
+w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 963 a
+SDict begin H.S end
+ 420 963 a FK(7.4.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CodeNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1114
+963 a
+SDict begin 13.6 H.L end
+ 1114 963 a 1114 963 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1114 963 a Black 75 w FK(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1076 a
+SDict begin H.S end
+ 420 1076 a FK(7.4.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsCoordinateAcceptabl)q(e)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1584 1076 a
+SDict begin 13.6 H.L end
+ 1584 1076 a 1584 1076 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1584
+1076 a Black 82 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1189 a
+SDict begin H.S end
+ 420 1189 a FK(7.4.4)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(GeneralizedCodeNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1550 1189 a
+SDict begin 13.6 H.L end
+ 1550 1189 a 1550 1189 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1550 1189 a Black
+48 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1302 a
+SDict begin H.S end
+ 420 1302 a FK(7.4.5)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(IsNormalCode)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1244 1302 a
+SDict begin 13.6 H.L end
+ 1244 1302 a 1244 1302 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.4.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1244 1302 a Black
+81 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 1415 a
+SDict begin H.S end
+ 211 1415 a FK(7.5)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Miscellaneous)27 b(functions)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1329 1415 a
+SDict begin 13.6 H.L end
+ 1329 1415 a 1329 1415 a
+SDict begin [ /Subtype /Link /Dest (section.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1329
+1415 a Black 64 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)p Black 84 w(136)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 1528 a
+SDict begin H.S end
+ 420 1528 a FK(7.5.1)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(CodeW)-7 b(eightEnumerator)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1588 1528 a
+SDict begin 13.6 H.L end
+ 1588 1528 a 1588 1528 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1588
+1528 a Black 78 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 1641 a
+SDict begin H.S end
+ 420 1641 a FK(7.5.2)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(CodeDistanceEnumerator)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1645 1641 a
+SDict begin 13.6 H.L end
+ 1645 1641 a 1645 1641 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1645 1641 a Black
+89 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(137)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1753
+a
+SDict begin H.S end
+ 420 1753 a FK(7.5.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeMacW)l
+(illiamsT)m(ransform)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1770 1753 a
+SDict begin 13.6 H.L end
+ 1770 1753 a 1770 1753 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1770 1753 a Black
+32 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(137)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1866 a
+SDict begin H.S end
+ 420
+1866 a FK(7.5.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeDensity)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1183 1866 a
+SDict begin 13.6 H.L end
+ 1183 1866
+a 1183 1866 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1183 1866 a Black 74 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(137)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 1979 a
+SDict begin H.S end
+ 420 1979
+a FK(7.5.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(SphereContent)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1248 1979 a
+SDict begin 13.6 H.L end
+ 1248 1979
+a 1248 1979 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1248 1979 a Black 77 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2092 a
+SDict begin H.S end
+ 420 2092
+a FK(7.5.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Kra)o(wtchouk)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1157 2092 a
+SDict begin 13.6 H.L end
+ 1157 2092
+a 1157 2092 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1157 2092 a Black 32 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2205 a
+SDict begin H.S end
+ 420
+2205 a FK(7.5.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Primiti)n(v)o
+(eUnityRoot)p 0.0236 0.0894 0.6179 TeXcolorrgb 1427 2205
+a
+SDict begin 13.6 H.L end
+ 1427 2205 a 1427 2205 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1427 2205 a Black 34 w FK(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p Black
+0.0236 0.0894 0.6179 TeXcolorrgb 420 2318 a
+SDict begin H.S end
+ 420 2318
+a FK(7.5.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Primiti)n(v)o
+(ePolynomialsNr)p 0.0236 0.0894 0.6179 TeXcolorrgb 1593
+2318 a
+SDict begin 13.6 H.L end
+ 1593 2318 a 1593 2318 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1593 2318 a Black 73 w
+FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2431
+a
+SDict begin H.S end
+ 420 2431 a FK(7.5.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w
+(IrreduciblePolynomials)q(Nr)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1655 2431 a
+SDict begin 13.6 H.L end
+ 1655 2431 a 1655 2431 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1655 2431 a Black
+79 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2544
+a
+SDict begin H.S end
+ 420 2544 a FK(7.5.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w
+(MatrixRepresentationOfElemen)q(t)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1897 2544 a
+SDict begin 13.6 H.L end
+ 1897 2544 a 1897 2544 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1897
+2544 a Black 42 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2657
+a
+SDict begin H.S end
+ 420 2657 a FK(7.5.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w
+(ReciprocalPolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1519 2657 a
+SDict begin 13.6 H.L end
+ 1519 2657 a 1519 2657 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1519 2657 a Black
+79 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(140)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2770 a
+SDict begin H.S end
+ 420 2770 a FK(7.5.12)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(CyclotomicCosets)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1374 2770 a
+SDict begin 13.6 H.L end
+ 1374 2770 a 1374 2770 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1374 2770 a Black
+87 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(140)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2883 a
+SDict begin H.S end
+ 420 2883 a FK(7.5.13)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(W)-7 b(eightHistogram)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1352 2883 a
+SDict begin 13.6 H.L end
+ 1352 2883 a 1352 2883 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1352 2883 a Black
+41 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 2995 a
+SDict begin H.S end
+ 420 2995 a FK(7.5.14)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(MultiplicityInList)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1358 2995 a
+SDict begin 13.6 H.L end
+ 1358 2995 a 1358 2995 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1358 2995 a Black
+35 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3108 a
+SDict begin H.S end
+ 420 3108 a FK(7.5.15)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(MostCommonInList)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1451 3108 a
+SDict begin 13.6 H.L end
+ 1451 3108 a 1451 3108 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1451 3108 a Black
+79 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3221 a
+SDict begin H.S end
+ 420 3221 a FK(7.5.16)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(RotateList)p 0.0236 0.0894 0.6179 TeXcolorrgb 1088
+3221 a
+SDict begin 13.6 H.L end
+ 1088 3221 a 1088 3221 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1088 3221 a Black 32 w
+FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3334 a
+SDict begin H.S end
+ 420 3334 a FK(7.5.17)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(CirculantMatrix)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1293 3334 a
+SDict begin 13.6 H.L end
+ 1293 3334 a 1293 3334 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.5.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1293 3334 a Black
+32 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+211 3447 a
+SDict begin H.S end
+ 211 3447 a FK(7.6)p 0.0 0.0 1.0 TeXcolorrgb
+96 w(Miscellaneous)27 b(polynomial)f(functions)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1766 3447 a
+SDict begin 13.6 H.L end
+ 1766 3447 a 1766 3447 a
+SDict begin [ /Subtype /Link /Dest (section.7.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1766
+3447 a Black 36 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3560 a
+SDict begin H.S end
+ 420 3560 a FK(7.6.1)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(MatrixT)m(ransformationOnMulti)n(v)o(aria)q(tePoly)q(no)q(mial)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2519 3560 a
+SDict begin 13.6 H.L end
+ 2519 3560
+a 2519 3560 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 2519 3560 a Black 33 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 3673 a
+SDict begin H.S end
+ 420 3673 a FK(7.6.2)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(De)o(greeMulti)n(v)n(ariatePolynomial)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1831 3673 a
+SDict begin 13.6 H.L end
+ 1831 3673
+a 1831 3673 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1831 3673 a Black 39 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 3786 a
+SDict begin H.S end
+ 420 3786 a FK(7.6.3)p 0.0 0.0 1.0 TeXcolorrgb
+110 w(De)o(greesMulti)n(v)n(ariatePolynomia)q(l)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1866 3786 a
+SDict begin 13.6 H.L end
+ 1866 3786 a 1866 3786 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1866
+3786 a Black 73 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(143)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3899
+a
+SDict begin H.S end
+ 420 3899 a FK(7.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Coef)n
+(\002cientMulti)n(v)n(ariatePolyno)q(mial)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1971 3899 a
+SDict begin 13.6 H.L end
+ 1971 3899 a 1971 3899 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1971
+3899 a Black 36 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(143)p
+Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4012 a
+SDict begin H.S end
+ 420
+4012 a FK(7.6.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Solv)o(eLinearSystem)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1419 4012 a
+SDict begin 13.6 H.L end
+ 1419 4012
+a 1419 4012 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1419 4012 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4125 a
+SDict begin H.S end
+ 420 4125 a FK(7.6.6)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Gua)n(v)n(aV)-10 b(ersion)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1219 4125 a
+SDict begin 13.6 H.L end
+ 1219 4125 a 1219 4125 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1219
+4125 a Black 38 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4237 a
+SDict begin H.S end
+ 420 4237 a FK(7.6.7)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Coef)n(\002cientT)-7 b(oPolynomial)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1622 4237 a
+SDict begin 13.6 H.L end
+ 1622 4237
+a 1622 4237 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1622 4237 a Black 44 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4350 a
+SDict begin H.S end
+ 420 4350 a FK(7.6.8)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(Coef)n(\002cientT)-7 b(oPolynomial)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1622 4350 a
+SDict begin 13.6 H.L end
+ 1622 4350
+a 1622 4350 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1622 4350 a Black 44 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)h(.)f(.)p Black 84 w(145)p Black 0.0236 0.0894 0.6179
+TeXcolorrgb 420 4463 a
+SDict begin H.S end
+ 420 4463 a FK(7.6.9)p 0.0 0.0 1.0
+TeXcolorrgb 110 w(De)o(greesMonomialT)-6 b(erm)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1574 4463 a
+SDict begin 13.6 H.L end
+ 1574 4463 a 1574 4463 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1574
+4463 a Black 92 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p
+Black 84 w(145)p Black 0.0236 0.0894 0.6179 TeXcolorrgb
+420 4576 a
+SDict begin H.S end
+ 420 4576 a FK(7.6.10)p 0.0 0.0 1.0 TeXcolorrgb
+65 w(Di)n(visorsMulti)n(v)n(ariatePolyno)q(mial)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1875 4576 a
+SDict begin 13.6 H.L end
+ 1875 4576 a 1875 4576 a
+SDict begin [ /Subtype /Link /Dest (subsection.7.6.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end
+ 1875
+4576 a Black 64 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84
+w(146)p Black Black Black eop end end
+%%Page: 11 11
+TeXDict begin HPSdict begin 11 10 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.11) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.1) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(1)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Intr)l(oduction)p Black 75 1771 a
+SDict begin H.S end
+ 75 1771 a 75 1771
+a
+SDict begin 13.6 H.A end
+ 75 1771 a 75 1771 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.1.1) cvn H.B /DEST pdfmark end
+ 75 1771 a 147 x FM(1.1)p 0.0 0.0 1.0
+TeXcolorrgb 119 w(Intr)n(oduction)31 b(to)e(the)h FL(GU)-5
+b(A)c(V)g(A)29 b FM(package)p Black 75 2125 a FK(This)f(is)h(the)f
+(manual)i(of)e(the)h Fy(GAP)d FK(package)31 b Fy(GU)m(A)-6
+b(V)f(A)26 b FK(that)j(pro)o(vides)i(implementations)g(of)e(some)f
+(routines)j(de-)75 2238 y(signed)i(for)e(the)g(construction)k(and)c
+(analysis)j(of)d(in)g(the)g(theory)h(of)f(error)n(-correcting)36
+b(codes.)53 b(This)31 b(v)o(ersion)h(of)75 2351 y Fy(GU)m(A)-6
+b(V)f(A)22 b FK(requires)j Fy(GAP)d FK(4.4.5)h(or)h(later)-5
+b(.)216 2464 y(The)23 b(functions)j(can)e(be)g(di)n(vided)h(into)f
+(three)h(subcate)o(gories:)p Black 211 2651 a Fv(\017)p
+Black 46 w FK(Construction)i(of)d(codes:)32 b Fy(GU)m(A)-6
+b(V)f(A)22 b FK(can)j(construct)i(unrestricted,)g(linear)e(and)g(c)o
+(yclic)g(codes.)32 b(Information)302 2764 y(about)21
+b(the)g(code,)g(such)g(as)f(operations)i(applicable)h(to)d(the)g(code,)
+i(is)d(stored)j(in)e(a)f(record-lik)o(e)k(data)e(structure)302
+2877 y(called)k(a)e Fy(GAP)f FK(object.)p Black 211 3065
+a Fv(\017)p Black 46 w FK(Manipulations)34 b(of)c(codes:)44
+b(Manipulation)33 b(transforms)f(one)f(code)g(into)f(another)l(,)k(or)c
+(constructs)j(a)d(ne)n(w)302 3178 y(code)24 b(from)e(tw)o(o)h(codes.)29
+b(The)22 b(ne)n(w)h(code)g(can)g(pro\002t)g(from)f(the)h(data)h(in)e
+(the)h(record)h(of)f(the)g(old)g(code\(s\),)h(so)302
+3290 y(in)g(these)g(cases)h(calculation)h(time)e(decreases.)p
+Black 211 3478 a Fv(\017)p Black 46 w FK(Computations)h(of)d
+(information)j(about)f(codes:)29 b Fy(GU)m(A)-6 b(V)f(A)21
+b FK(can)i(calculate)h(important)g(parameters)h(of)d(codes)302
+3591 y(quickly)-6 b(.)31 b(The)23 b(results)i(are)f(stored)h(in)e(the)h
+(codes')h(object)g(components.)216 3779 y(Except)30 b(for)f(the)h
+(automorphism)i(group)e(and)g(isomorphism)h(testing)g(functions,)i
+(which)c(mak)o(e)h(use)f(of)h(J.S.)75 3892 y(Leon')-5
+b(s)21 b(programs)h(\(see)f([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 901 3894 a
+SDict begin H.S end
+ 901 3894 a 0.0236 0.6179 0.0894
+TeXcolorrgb -2 x FK(Leo91)p 0.0236 0.6179 0.0894 TeXcolorrgb
+1132 3830 a
+SDict begin H.R end
+ 1132 3830 a 1132 3892 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon91) cvn H.B /ANN pdfmark end
+ 1132 3892 a Black
+2 w FK(])f(and)h(the)g(documentation)j(in)c(the)h(')-5
+b(src')21 b(subdirectory)j(of)d(the)g('gua)n(v)n(a')h(directory)75
+4004 y(for)h(some)g(details\),)i Fy(GU)m(A)-6 b(V)f(A)21
+b FK(is)i(written)h(in)f(the)g Fy(GAP)e FK(language,)k(and)f(runs)f(on)
+h(an)o(y)f(system)g(supporting)k Fy(GAP)p FK(4.3)75 4117
+y(and)d(abo)o(v)o(e.)29 b(Se)n(v)o(eral)24 b(algorithms)i(that)e(need)g
+(the)g(speed)h(were)e(inte)o(grated)j(in)d(the)h Fy(GAP)e
+FK(k)o(ernel.)216 4230 y(Good)36 b(general)h(references)h(for)e(error)n
+(-correcting)k(codes)d(and)f(the)g(technical)i(terms)d(in)h(this)g
+(manual)g(are)75 4343 y(MacW)l(illiams)25 b(and)f(Sloane)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1043 4344 a
+SDict begin H.S end
+ 1043 4344
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894
+TeXcolorrgb 1265 4281 a
+SDict begin H.R end
+ 1265 4281 a 1265 4343 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end
+ 1265
+4343 a Black 1 w FK(])f(Huf)n(fman)g(and)h(Pless)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 2061 4344 a
+SDict begin H.S end
+ 2061 4344
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2268 4281 a
+SDict begin H.R end
+ 2268 4281 a 2268 4343 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 2268
+4343 a Black FK(].)75 4501 y
+SDict begin H.S end
+ 75 4501 a 75 4501 a
+SDict begin 13.6 H.A end
+ 75 4501
+a 75 4501 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.1.2) cvn H.B /DEST pdfmark end
+ 75 4501 a 135 x FM(1.2)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Installing)30 b FL(GU)-5 b(A)c(V)g(A)p Black 75
+4843 a FK(T)i(o)26 b(install)j Fy(GU)m(A)-6 b(V)f(A)25
+b FK(\(as)j(a)f Fy(GAP)e FK(4)i(P)o(ackage\))h(unpack)h(the)f(archi)n
+(v)o(e)g(\002le)f(in)g(a)g(directory)j(in)d(the)h(`pkg')g(hierarchy)75
+4956 y(of)23 b(your)i(v)o(ersion)g(of)e Fy(GAP)f FK(4.)216
+5069 y(After)f(unpacking)k Fy(GU)m(A)-6 b(V)f(A)19 b
+FK(the)j Fy(GAP)p FK(-only)f(part)h(of)f Fy(GU)m(A)-6
+b(V)f(A)19 b FK(is)i(installed.)31 b(The)20 b(parts)j(of)e
+Fy(GU)m(A)-6 b(V)f(A)19 b FK(depending)75 5182 y(on)k(J.)f(Leon')-5
+b(s)24 b(backtrack)i(programs)e(package)h(\(for)f(computing)h
+(automorphism)g(groups\))g(are)e(only)h(a)n(v)n(ailable)h(in)75
+5294 y(a)19 b(UNIX)f(en)l(vironment,)24 b(where)c(you)g(should)h
+(proceed)h(as)e(follo)n(ws:)28 b(Go)19 b(to)g(the)h(ne)n(wly)g(created)
+h(`gua)n(v)n(a')h(directory)75 5407 y(and)27 b(call)f
+Ft(`./configure)51 b(/gappath')29 b FK(where)e Ft(/gappath)h
+FK(is)e(the)h(path)g(to)f(the)g Fy(GAP)f FK(home)h(directory)-6
+b(.)40 b(So)25 b(for)75 5520 y(e)o(xample,)f(if)f(you)h(install)h(the)f
+(package)i(in)d(the)h(main)g(`pkg')g(directory)i(call)p
+Black 1867 5841 a(11)p Black eop end end
+%%Page: 12 12
+TeXDict begin HPSdict begin 12 11 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.12) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(12)p Black Black Black 168 399 a Ft(./configure)50
+b(../..)75 586 y FK(This)28 b(will)g(fetch)h(the)g(architecture)j(type)
+d(for)f(which)h Fy(GAP)d FK(has)j(been)g(compiled)h(last)f(and)g
+(create)h(a)d(`Mak)o(e\002le'.)75 699 y(No)n(w)22 b(call)p
+Black Black 168 887 a Ft(make)75 1074 y FK(to)d(compile)h(the)f(binary)
+i(and)e(to)g(install)i(it)d(in)h(the)h(appropriate)i(place.)28
+b(\(F)o(or)19 b(a)f(windo)n(ws)h(machine)i(with)d(CYGWIN)75
+1187 y(installed)23 b(-)e(see)p 0.6179 0.0236 0.0894
+TeXcolorrgb 590 1201 a
+SDict begin H.S end
+ 590 1201 a 0.6179 0.0236 0.0894
+TeXcolorrgb -14 x Ft(http://www.cygwin.)q(com)q(/)p 0.6179 0.0236 0.0894
+TeXcolorrgb 1604 1128 a
+SDict begin H.R end
+ 1604 1128 a 1604 1187 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.cygwin.com/) >> /Subtype /Link H.B /ANN pdfmark end
+ 1604
+1187 a Black 26 w FK(-)g(instructions)j(for)d(compiling)i(Leon')-5
+b(s)22 b(binaries)h(are)e(lik)o(ely)h(to)f(be)75 1300
+y(similar)k(to)g(those)h(abo)o(v)o(e.)33 b(On)24 b(a)g(64-bit)j(SUSE)22
+b(linux)k(computer)l(,)g(instead)h(of)e(the)g(con\002gure)h(command)f
+(abo)o(v)o(e)h(-)75 1413 y(which)e(will)f(only)h(compile)h(the)f
+(32-bit)h(binary)g(-)e(type)p Black Black 168 1601 a
+Ft(./configure)50 b(../..)e(--enable-libsuffix)q(=6)q(4)168
+1714 y(make)75 1901 y FK(to)36 b(compile)i(Leon')-5 b(s)37
+b(program)h(as)e(a)g(64)h(bit)f(nati)n(v)o(e)i(binary)-6
+b(.)69 b(This)36 b(may)g(also)h(w)o(ork)g(for)g(other)g(64-bit)h(linux)
+75 2014 y(distrib)n(utions)28 b(as)23 b(well.\))216 2127
+y(Starting)k(with)e(v)o(ersion)i(2.5,)f(you)g(must)g(also)g(install)h
+(the)f(GAP)e(package)k Fy(SONA)-10 b(T)g(A)23 b FK(to)j(load)g(GAP)-10
+b(.)23 b(Y)-10 b(ou)26 b(can)75 2240 y(do)n(wnload)f(this)f(from)g(the)
+f Fy(GAP)f FK(website)i(and)g(unpack)i(it)d(in)g(the)h(`pkg')h
+(subdirectory)-6 b(.)216 2353 y(This)33 b(completes)i(the)e
+(installation)j(of)d Fy(GU)m(A)-6 b(V)f(A)31 b FK(for)i(a)f(single)i
+(architecture.)60 b(If)33 b(you)g(use)g(this)h(installation)75
+2466 y(of)g Fy(GU)m(A)-6 b(V)f(A)33 b FK(on)h(dif)n(ferent)i(hardw)o
+(are)g(platforms)g(you)f(will)f(ha)n(v)o(e)h(to)f(compile)h(the)g
+(binary)g(for)g(each)g(platform)75 2579 y(separately)-6
+b(.)75 2742 y
+SDict begin H.S end
+ 75 2742 a 75 2742 a
+SDict begin 13.6 H.A end
+ 75 2742 a 75 2742 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.1.3) cvn H.B /DEST pdfmark end
+
+75 2742 a 129 x FM(1.3)p 0.0 0.0 1.0 TeXcolorrgb 119
+w(Loading)30 b FL(GU)-5 b(A)c(V)g(A)p Black 75 3078 a
+FK(After)28 b(starting)j(up)d Fy(GAP)p FK(,)f(the)h Fy(GU)m(A)-6
+b(V)f(A)27 b FK(package)j(needs)g(to)e(be)h(loaded.)45
+b(Load)28 b Fy(GU)m(A)-6 b(V)f(A)27 b FK(by)h(typing)i(at)e(the)h
+Fy(GAP)75 3191 y FK(prompt:)p 75 3289 1648 4 v 1764 3294
+a FF(Example)p 2102 3289 V 75 3314 4 25 v 3747 3314 V
+75 3413 4 100 v 188 3384 a(gap>)44 b(LoadPackage\()i("guava",)f("2.1")f
+(\);)p 3747 3413 V 75 3438 4 25 v 3747 3438 V 75 3441
+3675 4 v 75 3629 a FK(If)27 b Fy(GU)m(A)-6 b(V)f(A)25
+b FK(isn')n(t)j(already)h(in)e(memory)-6 b(,)29 b(it)d(is)h(loaded)i
+(and)f(the)f(author)i(information)g(is)e(displayed.)43
+b(If)27 b(you)g(are)h(a)75 3742 y(frequent)e(user)e(of)f
+Fy(GU)m(A)-6 b(V)f(A)p FK(,)22 b(you)i(might)g(consider)h(putting)h
+(this)e(line)g(in)f(your)i(`.gaprc')f(\002le.)p Black
+Black eop end end
+%%Page: 13 13
+TeXDict begin HPSdict begin 13 12 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.13) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.2) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(2)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Coding)52 b(theory)g(functions)f(in)h FN(GAP)p Black
+75 1881 a FK(This)31 b(chapter)h(will)f(recall)h(from)f(the)g
+Fy(GAP)p FK(4.4.5)f(manual)h(some)g(of)g(the)g Fy(GAP)e
+FK(coding)k(theory)f(and)f(\002nite)g(\002eld)75 1994
+y(functions)e(useful)e(for)f(coding)i(theory)-6 b(.)37
+b(Some)26 b(of)g(these)h(functions)h(are)e(partially)j(written)d(in)g
+(C)f(for)h(speed.)38 b(The)75 2107 y(main)24 b(functions)i(are)p
+Black 211 2295 a Fv(\017)p Black 46 w Ft(AClosestVectorComb)q(in)q(ati)
+q(ons)q(Mat)q(FF)q(EVe)q(cFF)q(E)p FK(,)p Black 211 2482
+a Fv(\017)p Black 46 w Ft(AClosestVectorComb)q(in)q(ati)q(ons)q(Mat)q
+(FF)q(EVe)q(cFF)q(ECo)q(or)q(ds)p FK(,)p Black 211 2670
+a Fv(\017)p Black 46 w Ft(CosetLeadersMatFFE)q FK(,)p
+Black 211 2858 a Fv(\017)p Black 46 w Ft(DistancesDistribut)q(io)q(nMa)
+q(tFF)q(EVe)q(cF)q(FE)p FK(,)p Black 211 3045 a Fv(\017)p
+Black 46 w Ft(DistancesDistribut)q(io)q(nVe)q(cFF)q(EsV)q(ec)q(FFE)q
+FK(,)p Black 211 3233 a Fv(\017)p Black 46 w Ft(DistanceVecFFE)i
+FK(and)c Ft(WeightVecFFE)p FK(,)p Black 211 3421 a Fv(\017)p
+Black 46 w Ft(ConwayPolynomial)29 b FK(and)24 b Ft(IsCheapConwayPolyno)
+q(mia)q(l)p FK(,)p Black 211 3608 a Fv(\017)p Black 46
+w Ft(IsPrimitivePolynom)q(ia)q(l)p FK(,)k(and)c Ft(RandomPrimitivePo)q
+(lyn)q(omi)q(al)p FK(.)75 3796 y(Ho)n(we)n(v)o(er)l(,)f(the)g
+Fy(GAP)e FK(command)j Ft(PrimitivePolynomial)29 b FK(returns)c(an)e
+(inte)o(ger)h(primiti)n(v)o(e)g(polynomial)h(not)f(the)75
+3909 y(\002nite)g(\002eld)f(kind.)75 4053 y
+SDict begin H.S end
+ 75 4053 a
+75 4053 a
+SDict begin 13.6 H.A end
+ 75 4053 a 75 4053 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.2.1) cvn H.B /DEST pdfmark end
+ 75 4053 a 148 x FM(2.1)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Distance)30 b(functions)p
+Black 75 4297 a
+SDict begin H.S end
+ 75 4297 a 75 4297 a
+SDict begin 13.6 H.A end
+ 75 4297 a 75 4297
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.1) cvn H.B /DEST pdfmark end
+ 75 4297 a 115 x FJ(2.1.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(A)-5 b(ClosestV)-10 b(ectorCombinationsMatFFEV)g(ecFFE)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4586 a Fs(\006)22 b
+Ft(AClosestVectorCom)q(bin)q(ati)q(ons)q(Ma)q(tFF)q(EVe)q(cFF)q(E\()53
+b(mat,)48 b(F,)f(vec,)h(r,)f(st)g(\))544 b Fr(\(function\))p
+Black 216 4812 a FK(This)21 b(command)h(runs)f(through)i(the)e
+Ft(F)q FK(-linear)h(combinations)i(of)d(the)g(v)o(ectors)i(in)e(the)g
+(ro)n(ws)f(of)h(the)g(matrix)h Ft(mat)75 4925 y FK(that)f(can)g(be)f
+(written)h(as)g(linear)g(combinations)j(of)c(e)o(xactly)i
+Ft(r)e FK(ro)n(ws)g(\(that)h(is)f(without)h(using)h(zero)f(as)f(a)g
+(coef)n(\002cient\))75 5038 y(and)29 b(returns)h(a)e(v)o(ector)i(from)f
+(these)g(that)g(is)g(closest)h(to)f(the)g(v)o(ector)g
+Ft(vec)q FK(.)43 b(The)29 b(length)h(of)e(the)h(ro)n(ws)f(of)h
+Ft(mat)g FK(and)75 5150 y(the)i(length)h(of)e Ft(vec)h
+FK(must)g(be)f(equal,)j(and)e(all)g(elements)h(must)e(lie)h(in)f
+Ft(F)q FK(.)49 b(The)30 b(ro)n(ws)g(of)g Ft(mat)h FK(must)g(be)f
+(linearly)75 5263 y(independent.)42 b(If)26 b(it)h(\002nds)g(a)f(v)o
+(ector)i(of)f(distance)h(at)f(most)g Ft(st)q FK(,)f(which)h(must)g(be)g
+(a)f(nonne)o(gati)n(v)o(e)j(inte)o(ger)l(,)g(then)e(it)75
+5376 y(stops)e(immediately)g(and)f(returns)h(this)f(v)o(ector)-5
+b(.)p Black 1867 5841 a(13)p Black eop end end
+%%Page: 14 14
+TeXDict begin HPSdict begin 14 13 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.14) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(14)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(F:=GF\(3\);;)p 3747 523 V 75 623 V 188
+593 a(gap>)g(x:=)f(Indeterminate\()k(F)c(\);;)g(pol:=)h(x\2102+1;)p
+3747 623 V 75 722 V 188 692 a(x_1\2102+Z\(3\)\2100)p
+3747 722 V 75 822 V 188 792 a(gap>)g(C)e(:=)h(GeneratorPolCode\(po)q
+(l,8)q(,F)q(\);)p 3747 822 V 75 922 V 188 892 a(a)g(cyclic)h
+([8,6,1..2]1..2)j(code)d(defined)h(by)e(generator)i(polynomial)h(over)d
+(GF\(3\))p 3747 922 V 75 1021 V 188 991 a(gap>)h
+(v:=Codeword\("12101111)q("\);)p 3747 1021 V 75 1121
+V 188 1091 a([)f(1)f(2)h(1)g(0)f(1)h(1)g(1)f(1)h(])p
+3747 1121 V 75 1220 V 188 1191 a(gap>)h(v:=VectorCodeword\(v\);)p
+3747 1220 V 75 1320 V 188 1290 a([)f(Z\(3\)\2100,)h(Z\(3\),)g
+(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,)f(Z\(3\)\2100,)
+h(Z\(3\)\2100)f(])p 3747 1320 V 75 1420 V 188 1390 a(gap>)g
+(G:=GeneratorMat\(C\);)p 3747 1420 V 75 1519 V 188 1489
+a([)f([)f(Z\(3\)\2100,)j(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h
+(0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\))h(],)p
+3747 1519 V 75 1619 V 273 1589 a([)d(0*Z\(3\),)j(Z\(3\)\2100,)g
+(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f
+(0*Z\(3\))h(],)p 3747 1619 V 75 1719 V 273 1689 a([)d(0*Z\(3\),)j
+(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g
+(0*Z\(3\),)f(0*Z\(3\))h(],)p 3747 1719 V 75 1818 V 273
+1788 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),)f(Z\(3\)\2100,)h
+(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\))h(],)p
+3747 1818 V 75 1918 V 273 1888 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),)
+f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\))h(],)p
+3747 1918 V 75 2017 V 273 1988 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),)
+f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(Z\(3\)\2100)h(])d
+(])p 3747 2017 V 75 2117 V 188 2087 a(gap>)i(AClosestVectorCombina)q
+(tio)q(nsM)q(at)q(FFE)q(Vec)q(FFE)q(\(G,)q(F,v)q(,1,)q(1\);)p
+3747 2117 V 75 2217 V 188 2187 a([)f(0*Z\(3\),)h(0*Z\(3\),)h(0*Z\(3\),)
+g(0*Z\(3\),)g(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100)f(])p
+3747 2217 V 75 2242 4 25 v 3747 2242 V 75 2245 3675 4
+v 75 2378 a
+SDict begin H.S end
+ 75 2378 a 75 2378 a
+SDict begin 13.6 H.A end
+ 75 2378 a 75 2378 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.2) cvn H.B /DEST pdfmark end
+ 75
+2378 a 116 x FJ(2.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5
+b(ClosestV)-10 b(ectorComb)l(..MatFFEV)g(ecFFECoords)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2668 a Fs(\006)22 b
+Ft(AClosestVectorCom)q(b..)q(Mat)q(FFE)q(Ve)q(cFF)q(ECo)q(ord)q(s\()53
+b(mat,)48 b(F,)f(vec,)h(r,)f(st)g(\))544 b Fr(\(function\))p
+Black 216 2894 a Ft(AClosestVectorComb)q(ina)q(tio)q(ns)q(Mat)q(FFE)q
+(Vec)q(FF)q(ECo)q(ord)q(s)32 b FK(returns)d(a)d(tw)o(o)g(element)i
+(list)f(containing)j(\(a\))75 3007 y(the)23 b(same)f(closest)j(v)o
+(ector)e(as)g(in)f Ft(AClosestVectorComb)q(in)q(ati)q(ons)q(Mat)q(FF)q
+(EVe)q(cFF)q(E)p FK(,)28 b(and)23 b(\(b\))f(a)h(v)o(ector)g
+Ft(v)f FK(with)75 3120 y(e)o(xactly)j Ft(r)e FK(non-zero)j(entries,)f
+(such)f(that)g Fq(v)13 b Fv(\003)g Fq(ma)n(t)29 b FK(is)24
+b(the)f(closest)i(v)o(ector)-5 b(.)p 75 3243 1648 4 v
+1764 3248 a FF(Example)p 2102 3243 V 75 3268 4 25 v 3747
+3268 V 75 3367 4 100 v 188 3337 a(gap>)44 b(F:=GF\(3\);;)p
+3747 3367 V 75 3467 V 188 3437 a(gap>)g(x:=)f(Indeterminate\()k(F)c
+(\);;)g(pol:=)h(x\2102+1;)p 3747 3467 V 75 3566 V 188
+3537 a(x_1\2102+Z\(3\)\2100)p 3747 3566 V 75 3666 V 188
+3636 a(gap>)g(C)e(:=)h(GeneratorPolCode\(po)q(l,8)q(,F)q(\);)p
+3747 3666 V 75 3766 V 188 3736 a(a)g(cyclic)h([8,6,1..2]1..2)j(code)d
+(defined)h(by)e(generator)i(polynomial)h(over)d(GF\(3\))p
+3747 3766 V 75 3865 V 188 3835 a(gap>)h(v:=Codeword\("12101111)q("\);)
+49 b(v:=VectorCodeword\(v)q(\);;)p 3747 3865 V 75 3965
+V 188 3935 a([)43 b(1)f(2)h(1)g(0)f(1)h(1)g(1)f(1)h(])p
+3747 3965 V 75 4065 V 188 4035 a(gap>)h(G:=GeneratorMat\(C\);;)p
+3747 4065 V 75 4164 V 188 4134 a(gap>)g(AClosestVectorCombina)q(tio)q
+(nsM)q(at)q(FFE)q(Vec)q(FFE)q(Coo)q(rds)q(\(G,)q(F,v)q(,1,)q(1\);)p
+3747 4164 V 75 4264 V 188 4234 a([)f([)f(0*Z\(3\),)j(0*Z\(3\),)g
+(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f
+(Z\(3\)\2100)h(],)p 3747 4264 V 75 4363 V 273 4334 a([)d(0*Z\(3\),)j
+(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100)f(])f(])p
+3747 4363 V 75 4388 4 25 v 3747 4388 V 75 4391 3675 4
+v 75 4525 a
+SDict begin H.S end
+ 75 4525 a 75 4525 a
+SDict begin 13.6 H.A end
+ 75 4525 a 75 4525 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.3) cvn H.B /DEST pdfmark end
+ 75
+4525 a 116 x FJ(2.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n
+(utionMatFFEV)-10 b(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4815 a Fs(\006)22 b Ft(DistancesDistribu)q(tio)q(nMa)q(tFF)q(EV)q
+(ecF)q(FE\()53 b(mat,)48 b(f,)f(vec)g(\))1101 b Fr(\(function\))p
+Black 216 5041 a Ft(DistancesDistribut)q(ion)q(Mat)q(FF)q(EVe)q(cFF)q
+(E)36 b FK(returns)c(the)f(distances)i(distrib)n(ution)h(of)c(the)h(v)o
+(ector)g Ft(vec)g FK(to)75 5154 y(the)g(v)o(ectors)i(in)e(the)g(v)o
+(ector)h(space)h(generated)g(by)f(the)f(ro)n(ws)g(of)g(the)g(matrix)h
+Ft(mat)f FK(o)o(v)o(er)g(the)h(\002nite)f(\002eld)g Ft(f)p
+FK(.)51 b(All)75 5267 y(v)o(ectors)25 b(must)g(ha)n(v)o(e)f(the)h(same)
+f(length,)h(and)g(all)f(elements)h(must)f(lie)g(in)g(a)g(common)h
+(\002eld.)30 b(The)23 b(distances)k(distri-)75 5380 y(b)n(ution)i(is)f
+(a)f(list)h Fq(d)k FK(of)c(length)h Fq(Leng)n(t)6 b(h)p
+Fo(\()p Fq(vec)p Fo(\))14 b(+)g FK(1,)31 b(such)e(that)f(the)g(v)n
+(alue)h Fq(d)5 b Fo([)p Fq(i)p Fo(])27 b FK(is)h(the)g(number)h(of)e(v)
+o(ectors)i(in)f(v)o(ecs)75 5493 y(that)c(ha)n(v)o(e)g(distance)i
+Fq(i)13 b Fo(+)g FK(1)22 b(to)i Ft(vec)q FK(.)p Black
+Black eop end end
+%%Page: 15 15
+TeXDict begin HPSdict begin 15 14 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.15) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(15)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h
+(0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f
+(];;)p 3747 523 V 75 623 V 188 593 a(gap>)g(vecs:=[)g([)f(Z\(3\)\2100,)
+i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f
+(0*Z\(3\),)h(0*Z\(3\))g(],)p 3747 623 V 75 722 V 188
+692 a(>)127 b([)43 b(0*Z\(3\),)i(Z\(3\)\2100,)f(0*Z\(3\),)h
+(Z\(3\)\2100,)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))f(],)p
+3747 722 V 75 822 V 188 792 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f
+(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\),)h
+(0*Z\(3\))f(],)p 3747 822 V 75 922 V 188 892 a(>)127
+b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g
+(Z\(3\)\2100,)f(0*Z\(3\),)h(0*Z\(3\))f(],)p 3747 922
+V 75 1021 V 188 991 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),)
+h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\))f(],)p
+3747 1021 V 75 1121 V 188 1091 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f
+(0*Z\(3\),)h(0*Z\(3\),)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h
+(Z\(3\)\2100)f(])f(];;)p 3747 1121 V 75 1220 V 188 1191
+a(gap>)h(DistancesDistribution)q(Mat)q(FFE)q(Ve)q(cFF)q(E\(v)q(ecs)q
+(,GF)q(\(3\))q(,v\))q(;)p 3747 1220 V 75 1320 V 188 1290
+a([)f(0,)g(4,)g(6,)g(60,)g(109,)h(216,)f(192,)h(112,)g(30)f(])p
+3747 1320 V 75 1345 4 25 v 3747 1345 V 75 1348 3675 4
+v 75 1481 a
+SDict begin H.S end
+ 75 1481 a 75 1481 a
+SDict begin 13.6 H.A end
+ 75 1481 a 75 1481 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.4) cvn H.B /DEST pdfmark end
+ 75
+1481 a 116 x FJ(2.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n
+(utionV)-10 b(ecFFEsV)g(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1772 a Fs(\006)22 b Ft(DistancesDistribu)q(tio)q(nVe)q(cFF)q(Es)q
+(Vec)q(FFE)q(\()52 b(vecs,)d(vec)e(\))1147 b Fr(\(function\))p
+Black 216 1998 a Ft(DistancesDistribut)q(ion)q(Vec)q(FF)q(EsV)q(ecF)q
+(FE)31 b FK(returns)c(the)f(distances)h(distrib)n(ution)i(of)d(the)f(v)
+o(ector)i Ft(vec)e FK(to)75 2110 y(the)32 b(v)o(ectors)h(in)e(the)h
+(list)g Ft(vecs)q FK(.)52 b(All)31 b(v)o(ectors)i(must)e(ha)n(v)o(e)i
+(the)e(same)h(length,)j(and)d(all)f(elements)i(must)f(lie)f(in)h(a)75
+2223 y(common)24 b(\002eld.)k(The)23 b(distances)j(distrib)n(ution)h
+(is)d(a)f(list)h Fq(d)j FK(of)d(length)h Fq(Leng)n(t)6
+b(h)p Fo(\()p Fq(vec)p Fo(\))13 b(+)g FK(1,)25 b(such)f(that)g(the)g(v)
+n(alue)g Fq(d)5 b Fo([)p Fq(i)p Fo(])75 2336 y FK(is)23
+b(the)h(number)h(of)e(v)o(ectors)i(in)e Ft(vecs)i FK(that)f(ha)n(v)o(e)
+g(distance)i Fq(i)13 b Fo(+)g FK(1)22 b(to)h Ft(vec)q
+FK(.)p 75 2447 1648 4 v 1764 2452 a FF(Example)p 2102
+2447 V 75 2472 4 25 v 3747 2472 V 75 2571 4 100 v 188
+2541 a(gap>)44 b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h
+(0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f
+(];;)p 3747 2571 V 75 2671 V 188 2641 a(gap>)g(vecs:=[)g([)f
+(Z\(3\)\2100,)i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g
+(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))g(],)p 3747 2671 V
+75 2770 V 188 2741 a(>)127 b([)43 b(0*Z\(3\),)i(Z\(3\)\2100,)f
+(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h
+(0*Z\(3\))f(],)p 3747 2770 V 75 2870 V 188 2840 a(>)127
+b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g
+(Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))f(],)p
+3747 2870 V 75 2970 V 188 2940 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f
+(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h
+(0*Z\(3\))f(],)p 3747 2970 V 75 3069 V 188 3039 a(>)127
+b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g
+(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\))f(],)p 3747 3069
+V 75 3169 V 188 3139 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f
+(0*Z\(3\),)h(0*Z\(3\),)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h
+(Z\(3\)\2100)f(])f(];;)p 3747 3169 V 75 3269 V 188 3239
+a(gap>)h(DistancesDistribution)q(Vec)q(FFE)q(sV)q(ecF)q(FE\()q(vec)q
+(s,v)q(\);)p 3747 3269 V 75 3368 V 188 3338 a([)f(0,)g(0,)g(0,)g(0,)g
+(0,)g(4,)g(0,)g(1,)g(1)f(])p 3747 3368 V 75 3393 4 25
+v 3747 3393 V 75 3396 3675 4 v 75 3529 a
+SDict begin H.S end
+ 75 3529 a 75
+3529 a
+SDict begin 13.6 H.A end
+ 75 3529 a 75 3529 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.5) cvn H.B /DEST pdfmark end
+ 75 3529 a 117 x FJ(2.1.5)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightV)c(ecFFE)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3820 a Fs(\006)22 b
+Ft(WeightVecFFE\()51 b(vec)d(\))2445 b Fr(\(function\))p
+Black 216 4046 a Ft(WeightVecFFE)23 b FK(returns)d(the)g(weight)g(of)f
+(the)g(\002nite)g(\002eld)g(v)o(ector)h Ft(vec)q FK(,)f(i.e.)27
+b(the)19 b(number)h(of)f(nonzero)i(entries.)p 75 4168
+1648 4 v 1764 4173 a FF(Example)p 2102 4168 V 75 4193
+4 25 v 3747 4193 V 75 4293 4 100 v 188 4263 a(gap>)44
+b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g
+(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f(];;)p
+3747 4293 V 75 4392 V 188 4363 a(gap>)g(WeightVecFFE\(v\);)p
+3747 4392 V 75 4492 V 188 4462 a(7)p 3747 4492 V 75 4517
+4 25 v 3747 4517 V 75 4520 3675 4 v 75 4753 a
+SDict begin H.S end
+ 75 4753
+a 75 4753 a
+SDict begin 13.6 H.A end
+ 75 4753 a 75 4753 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.6) cvn H.B /DEST pdfmark end
+ 75 4753 a 116 x FJ(2.1.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(DistanceV)-10 b(ecFFE)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5043 a Fs(\006)22 b
+Ft(DistanceVecFFE\()52 b(vec1,)c(vec2)g(\))2028 b Fr(\(function\))p
+Black 216 5269 a FK(The)23 b Fq(Hamming)g(metric)h FK(on)g
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))1374 5236 y Fm(n)1435
+5269 y FK(is)23 b(the)h(function)936 5473 y Fq(d)5 b(is)n(t)h
+Fo(\(\()p Fq(v)1185 5487 y Fr(1)1224 5473 y Fp(;)k(:::;)g
+Fq(v)1409 5487 y Fm(n)1448 5473 y Fo(\))p Fp(;)g Fo(\()p
+Fq(w)1614 5487 y Fr(1)1652 5473 y Fp(;)g(:::;)g Fq(w)1858
+5487 y Fm(n)1896 5473 y Fo(\)\))20 b(=)g Fv(jf)p Fq(i)h
+Fv(2)f Fo([)p FK(1)p Fp(::)p Fq(n)p Fo(])k Fv(j)f Fq(v)2576
+5487 y Fm(i)2619 5473 y Fv(6)p Fo(=)d Fq(w)2771 5487
+y Fm(i)2794 5473 y Fv(gj)p Fp(:)p Black Black eop end
+end
+%%Page: 16 16
+TeXDict begin HPSdict begin 16 15 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.16) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(16)p Black 75 399 a(This)61 b(is)h(also)g(called)h(the)e
+(\(Hamming\))h(distance)i(between)e Fq(v)42 b Fo(=)f(\()p
+Fq(v)2551 413 y Fr(1)2589 399 y Fp(;)10 b(:::;)g Fq(v)2774
+413 y Fm(n)2813 399 y Fo(\))61 b FK(and)h Fq(w)41 b Fo(=)g(\()p
+Fq(w)3411 413 y Fr(1)3448 399 y Fp(;)10 b(:::;)g Fq(w)3654
+413 y Fm(n)3692 399 y Fo(\))p FK(.)75 511 y Ft(DistanceVecFFE)40
+b FK(returns)e(the)e(distance)j(between)e(the)f(tw)o(o)g(v)o(ectors)h
+Ft(vec1)g FK(and)f Ft(vec2)r FK(,)i(which)e(must)h(ha)n(v)o(e)75
+624 y(the)22 b(same)h(length)g(and)g(whose)f(elements)i(must)e(lie)g
+(in)g(a)g(common)g(\002eld.)28 b(The)22 b(distance)i(is)e(the)h(number)
+g(of)f(places)75 737 y(where)i Ft(vec1)g FK(and)g Ft(vec2)g
+FK(dif)n(fer)-5 b(.)p 75 841 1648 4 v 1764 846 a FF(Example)p
+2102 841 V 75 866 4 25 v 3747 866 V 75 966 4 100 v 188
+936 a(gap>)44 b(v1:=[)g(Z\(3\)\2100,)g(Z\(3\),)g(Z\(3\)\2100,)h
+(0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100)f
+(];;)p 3747 966 V 75 1066 V 188 1036 a(gap>)g(v2:=[)g(Z\(3\),)g
+(Z\(3\)\2100,)g(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,)
+f(Z\(3\)\2100,)h(Z\(3\)\2100)f(];;)p 3747 1066 V 75 1165
+V 188 1135 a(gap>)g(DistanceVecFFE\(v1,v2\))q(;)p 3747
+1165 V 75 1265 V 188 1235 a(2)p 3747 1265 V 75 1290 4
+25 v 3747 1290 V 75 1293 3675 4 v 75 1436 a
+SDict begin H.S end
+ 75 1436 a
+75 1436 a
+SDict begin 13.6 H.A end
+ 75 1436 a 75 1436 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.2.2) cvn H.B /DEST pdfmark end
+ 75 1436 a 150 x FM(2.2)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Other)30 b(functions)p
+Black 75 1793 a FK(W)-7 b(e)26 b(basically)k(repeat,)f(with)e(minor)g
+(v)n(ariation,)j(the)d(material)i(in)e(the)g Fy(GAP)e
+FK(manual)j(or)f(from)g(Frank)g(Luebeck')-5 b(s)75 1906
+y(website)p 0.6179 0.0236 0.0894 TeXcolorrgb 390 1920
+a
+SDict begin H.S end
+ 390 1920 a 0.6179 0.0236 0.0894 TeXcolorrgb -14 x Ft
+(http://www.math.rwt)q(h-a)q(ach)q(en)q(.de)q(:80)q(01/)q(\230F)q(ran)q
+(k.L)q(ueb)q(ec)q(k/d)q(ata)q(/Co)q(nw)q(ayP)q(ol)p 0.6179 0.0236 0.0894
+TeXcolorrgb 3397 1849 a
+SDict begin H.R end
+ 3397 1849 a 3397 1906 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol) >> /Subtype /Link H.B /ANN pdfmark end
+ 3397
+1906 a Black 43 w FK(on)38 b(Con-)75 2019 y(w)o(ay)e(polynomials.)68
+b(The)38 b Fj(P)t(R)t(I)t(M)t(E)k(FI)t(E)t(L)t(D)t(S)r
+FK(:)57 b(If)43 b Fq(p)27 b Fv(\025)g FK(2)35 b(is)h(a)g(prime)g(then)h
+Fq(GF)6 b Fo(\()h Fq(p)p Fo(\))36 b FK(denotes)i(the)f(\002eld)e
+Fi(Z)p Fp(=)7 b Fq(p)p Fi(Z)p FK(,)75 2131 y(with)23
+b(addition)j(and)e(multiplication)j(performed)e(mod)31
+b Fq(p)p FK(.)216 2244 y(The)g Fj(P)t(R)t(I)t(M)t(E)j(P)t(O)r(W)t(E)t
+(R)g(FI)t(E)t(L)t(D)t(S)r FK(:)43 b(Suppose)30 b Fq(q)24
+b Fo(=)29 b Fq(p)1844 2211 y Fm(r)1904 2244 y FK(is)g(a)f(prime)h(po)n
+(wer)l(,)i Fq(r)25 b Fp(>)e FK(1,)30 b(and)f(put)g Fq(F)i
+Fo(=)22 b Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p FK(.)45 b(Let)75
+2357 y Fq(F)7 b Fo([)p Fq(x)p Fo(])25 b FK(denote)i(the)e(ring)g(of)g
+(all)g(polynomials)i(o)o(v)o(er)e Fq(F)32 b FK(and)25
+b(let)39 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))25 b FK(denote)i(a)d(monic)h
+(irreducible)j(polynomial)f(in)75 2470 y Fq(F)7 b Fo([)p
+Fq(x)p Fo(])29 b FK(of)f(de)o(gree)i Fq(r)r FK(.)43 b(The)28
+b(quotient)j Fq(E)e Fo(=)23 b Fq(F)7 b Fo([)p Fq(x)p
+Fo(])p Fp(=)p Fo(\()14 b Fq(f)f Fo(\()p Fq(x)p Fo(\)\))26
+b(=)d Fq(F)7 b Fo([)p Fq(x)p Fo(])p Fp(=)14 b Fq(f)f
+Fo(\()p Fq(x)p Fo(\))p Fq(F)d Fo([)p Fq(x)p Fo(])29 b
+FK(is)f(a)g(\002eld)h(with)f Fq(q)g FK(elements.)45 b(If)e
+Fq(f)13 b Fo(\()p Fq(x)p Fo(\))75 2583 y FK(and)31 b
+Fq(E)k FK(are)30 b(related)i(in)e(this)h(w)o(ay)-6 b(,)31
+b(we)f(say)g(that)45 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))30
+b FK(is)g(the)j Fj(D)t(E)t(FI)t(N)t(I)t(N)t(G)j(P)t(O)t(L)m(Y)t(N)t(O)t
+(M)t(I)t(A)t(L)f FK(of)30 b Fq(E)7 b FK(.)46 b(An)o(y)30
+b(de\002ning)75 2696 y(polynomial)c(f)o(actors)f(completely)h(into)e
+(distinct)h(linear)g(f)o(actors)g(o)o(v)o(er)f(the)g(\002eld)f(it)g
+(de\002nes.)216 2809 y(F)o(or)31 b(an)o(y)h(\002nite)f(\002eld)h
+Fq(F)7 b FK(,)32 b(the)g(multiplicati)n(v)o(e)j(group)d(of)g(non-zero)i
+(elements)f Fq(F)2856 2776 y Fh(\002)2943 2809 y FK(is)e(a)g(c)o(yclic)
+i(group.)54 b(An)75 2922 y Fu(a)21 b Fv(2)f Fq(F)30 b
+FK(is)24 b(called)h(a)h Fj(P)t(R)t(I)t(M)t(I)t(T)t(I)t(V)t(E)32
+b(E)t(L)t(E)t(M)t(E)t(N)t(T)e FK(if)24 b(it)g(is)g(a)f(generator)k(of)d
+Fq(F)2362 2889 y Fh(\002)2418 2922 y FK(.)29 b(A)23 b(de\002ning)i
+(polynomial)40 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))25 b
+FK(of)f Fq(F)30 b FK(is)75 3035 y(said)24 b(to)g(be)h
+Fj(P)t(R)t(I)t(M)t(I)t(T)t(I)t(V)t(E)30 b FK(if)23 b(it)h(has)f(a)h
+(root)g(in)f Fq(F)30 b FK(which)24 b(is)f(a)g(primiti)n(v)o(e)i
+(element.)75 3187 y
+SDict begin H.S end
+ 75 3187 a 75 3187 a
+SDict begin 13.6 H.A end
+ 75 3187 a 75
+3187 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.2.1) cvn H.B /DEST pdfmark end
+ 75 3187 a 97 x FJ(2.2.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(ConwayP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3458 a Fs(\006)d Ft(ConwayPolynomial\()53 b(p,)47
+b(n)g(\))2213 b Fr(\(function\))p Black 216 3684 a FK(A)26
+b(standard)k(notation)f(for)f(the)f(elements)i(of)e Fq(GF)7
+b Fo(\()g Fq(p)p Fo(\))27 b FK(is)g(gi)n(v)o(en)h(via)g(the)f
+(representati)n(v)o(es)k(0)p Fp(;)10 b(:::;)17 b Fq(p)d
+Fv(\000)g FK(1)29 b(of)e(the)75 3797 y(cosets)h(modulo)36
+b Fq(p)p FK(.)i(W)-7 b(e)26 b(order)j(these)f(elements)g(by)f(0)53
+b Fv(h)g FK(1)g Fv(h)g FK(2)g Fv(h)g Fp(:::)g Fv(h)59
+b Fq(p)14 b Fv(\000)g FK(1.)39 b(W)-7 b(e)26 b(introduce)k(an)d
+(ordering)75 3910 y(of)g(the)g(polynomials)j(of)d(de)o(gree)h
+Fq(r)g FK(o)o(v)o(er)f Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p
+FK(.)39 b(Let)26 b Fq(g)p Fo(\()p Fq(x)p Fo(\))e(=)e
+Fq(g)2184 3924 y Fm(r)2216 3910 y Fq(x)2256 3877 y Fm(r)2302
+3910 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(g)2606 3924 y Fr(0)2669
+3910 y FK(and)28 b Fq(h)p Fo(\()p Fq(x)p Fo(\))c(=)d
+Fq(h)3143 3924 y Fm(r)3175 3910 y Fq(x)3215 3877 y Fm(r)3261
+3910 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(h)3565 3924 y Fr(0)3629
+3910 y FK(\(by)75 4023 y(con)l(v)o(ention,)26 b Fq(g)564
+4037 y Fm(i)606 4023 y Fo(=)19 b Fq(h)741 4037 y Fm(i)784
+4023 y Fo(=)f FK(0)23 b(for)g Fq(i)43 b Fv(i)h Fq(r)r
+FK(\).)29 b(Then)22 b(we)g(de\002ne)h Fq(g)44 b Fv(h)g
+Fq(h)22 b FK(if)h(and)g(only)g(if)f(there)i(is)e(an)h(inde)o(x)g
+Fq(k)h FK(with)f Fq(g)3550 4037 y Fm(i)3592 4023 y Fo(=)c
+Fq(h)3727 4037 y Fm(i)75 4136 y FK(for)24 b Fq(i)45 b
+Fv(i)h Fq(k)25 b FK(and)f Fo(\()p Fv(\000)p FK(1)p Fo(\))760
+4103 y Fm(r)r Fh(\000)p Fm(k)874 4136 y Fq(g)919 4150
+y Fm(k)1000 4136 y Fv(h)46 b Fo(\()p Fv(\000)p FK(1)p
+Fo(\))1267 4103 y Fm(r)r Fh(\000)p Fm(k)1381 4136 y Fq(h)1426
+4150 y Fm(k)1461 4136 y FK(.)216 4249 y(The)31 b(C)t
+Fj(O)t(N)t(W)-5 b(A)l(Y)33 b(P)t(O)t(L)m(Y)t(N)t(O)t(M)t(I)t(A)t(L)47
+b Fq(f)1356 4263 y Fm(p)p Fl(;)p Fm(r)1439 4249 y Fo(\()p
+Fq(x)p Fo(\))30 b FK(for)f Fq(GF)7 b Fo(\()g Fq(p)1929
+4216 y Fm(r)1961 4249 y Fo(\))28 b FK(is)h(the)g(smallest)h(polynomial)
+i(of)d(de)o(gree)h Fq(r)g FK(with)f(re-)75 4361 y(spect)c(to)e(this)h
+(ordering)i(such)e(that:)p Black 211 4549 a Fv(\017)p
+Black 60 w Fq(f)348 4563 y Fm(p)p Fl(;)p Fm(r)432 4549
+y Fo(\()p Fq(x)p Fo(\))f FK(is)h(monic,)p Black 211 4737
+a Fv(\017)p Black 60 w Fq(f)348 4751 y Fm(p)p Fl(;)p
+Fm(r)432 4737 y Fo(\()p Fq(x)p Fo(\))18 b FK(is)h(primiti)n(v)o(e,)h
+(that)f(is,)g(an)o(y)g(zero)g(is)f(a)g(generator)j(of)e(the)g(\(c)o
+(yclic\))h(multiplicati)n(v)o(e)h(group)f(of)e Fq(GF)7
+b Fo(\()g Fq(p)3660 4704 y Fm(r)3692 4737 y Fo(\))p FK(,)p
+Black 211 4924 a Fv(\017)p Black 46 w FK(for)24 b(each)f(proper)i(di)n
+(visor)g Fq(m)d FK(of)h Fq(r)h FK(we)f(ha)n(v)o(e)g(that)38
+b Fq(f)1921 4938 y Fm(p)p Fl(;)p Fm(m)2025 4924 y Fo(\()p
+Fq(x)2100 4891 y Fk(\()5 b Fm(p)2164 4867 y Ff(r)2189
+4891 y Fh(\000)p Fr(1)p Fk(\))p Fl(=)p Fk(\()g Fm(p)2397
+4867 y Ff(m)2437 4891 y Fh(\000)p Fr(1)p Fk(\))2552 4924
+y Fo(\))20 b Fv(\021)g FK(0)91 b Fo(\()p FK(mod)35 b
+Fq(f)3097 4938 y Fm(p)p Fl(;)p Fm(r)3180 4924 y Fo(\()p
+Fq(x)p Fo(\)\))p FK(;)24 b(that)g(is,)f(the)302 5037
+y Fo(\()7 b Fq(p)389 5004 y Fm(r)434 5037 y Fv(\000)13
+b FK(1)p Fo(\))p Fp(=)p Fo(\()7 b Fq(p)730 5004 y Fm(m)796
+5037 y Fv(\000)13 b FK(1)p Fo(\))p FK(-th)23 b(po)n(wer)h(of)f(a)h
+(zero)g(of)37 b Fq(f)1816 5051 y Fm(p)p Fl(;)p Fm(r)1899
+5037 y Fo(\()p Fq(x)p Fo(\))24 b FK(is)g(a)f(zero)h(of)37
+b Fq(f)2503 5051 y Fm(p)p Fl(;)p Fm(m)2607 5037 y Fo(\()p
+Fq(x)p Fo(\))p FK(.)216 5225 y Ft(ConwayPolynomial\(p)q(,n\))29
+b FK(returns)d(the)d(polynomial)40 b Fq(f)2104 5239 y
+Fm(p)p Fl(;)p Fm(r)2188 5225 y Fo(\()p Fq(x)p Fo(\))24
+b FK(de\002ned)g(abo)o(v)o(e.)216 5338 y Ft(IsCheapConwayPolyn)q(omi)q
+(al\()q(p,)q(n\))36 b FK(returns)c(true)f(if)g Ft(ConwayPolynomial\()52
+b(p,)47 b(n)g(\))30 b FK(will)g(gi)n(v)o(e)h(a)f(re-)75
+5451 y(sult)22 b(in)g(reasonable)i(time.)k(This)21 b(is)h(either)h(the)
+e(case)i(when)e(this)h(polynomial)i(is)e(pre-computed,)i(or)e(if)f
+Fq(n)p Fp(;)c Fq(p)22 b FK(are)g(not)75 5564 y(too)i(big.)p
+Black Black eop end end
+%%Page: 17 17
+TeXDict begin HPSdict begin 17 16 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.17) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(17)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.2.2) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(2.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(RandomPrimiti)o(v)o(eP)n(olynomial)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 573 a Fs(\006)22 b Ft(RandomPrimitivePo)q(lyn)q(omi)q
+(al\()53 b(F,)47 b(n)g(\))1796 b Fr(\(function\))p Black
+216 799 a FK(F)o(or)22 b(a)f(\002nite)i(\002eld)f Ft(F)g
+FK(and)g(a)g(positi)n(v)o(e)i(inte)o(ger)f Ft(n)f FK(this)h(function)i
+(returns)e(a)f(primiti)n(v)o(e)h(polynomial)i(of)d(de)o(gree)i
+Ft(n)75 912 y FK(o)o(v)o(er)g Ft(F)p FK(,)e(that)i(is)g(a)f(zero)h(of)g
+(this)g(polynomial)i(has)d(maximal)h(multiplicati)n(v)o(e)j(order)d
+Fv(j)p Fq(F)7 b Fv(j)2859 879 y Fm(n)2910 912 y Fv(\000)13
+b FK(1.)216 1024 y Ft(IsPrimitivePolynom)q(ial)q(\(f\))36
+b FK(can)30 b(be)g(used)h(to)f(check)h(if)e(a)h(uni)n(v)n(ariate)i
+(polynomial)g Ft(f)e FK(is)f(primiti)n(v)o(e)i(or)75
+1137 y(not.)p Black Black eop end end
+%%Page: 18 18
+TeXDict begin HPSdict begin 18 17 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.18) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.3) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(3)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Codew)n(ords)p Black 75 1881 a FK(Let)24 b Fq(GF)7
+b Fo(\()p Fq(q)p Fo(\))24 b FK(denote)i(a)e(\002nite)g(\002eld)h(with)f
+Fq(q)g FK(\(a)g(prime)h(po)n(wer\))f(elements.)33 b(A)23
+b Fq(code)i FK(is)g(a)f(subset)c Fq(C)26 b FK(of)e(some)h(\002nite-)75
+1994 y(dimensional)f(v)o(ector)f(space)18 b Fq(V)32 b
+FK(o)o(v)o(er)22 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)28
+b(The)21 b Fq(length)j FK(of)16 b Fq(C)23 b FK(is)f(the)g(dimension)h
+(of)17 b Fq(V)11 b FK(.)28 b(Usually)-6 b(,)18 b Fq(V)30
+b Fo(=)18 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))3712 1961
+y Fm(n)75 2107 y FK(and)24 b(the)g(length)g(is)g(the)f(number)i(of)e
+(coordinate)j(entries.)31 b(When)18 b Fq(C)25 b FK(is)e(itself)i(a)e(v)
+o(ector)h(space)g(o)o(v)o(er)g Fq(GF)7 b Fo(\()p Fq(q)p
+Fo(\))23 b FK(then)h(it)75 2220 y(is)f(called)i(a)e Fq(linear)i(code)g
+FK(and)f(the)f Fq(dimension)j FK(of)18 b Fq(C)25 b FK(is)e(its)h
+(dimension)i(as)d(a)g(v)o(ector)i(space)f(o)o(v)o(er)g
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)216 2333 y(In)33
+b Fy(GU)m(A)-6 b(V)f(A)p FK(,)31 b(a)i(`code)n(w)o(ord')i(is)f(a)e
+Fy(GAP)g FK(record,)k(with)d(one)h(of)f(its)h(components)i(being)e(an)f
+(element)i(in)28 b Fq(V)11 b FK(.)75 2446 y(Lik)o(e)n(wise,)21
+b(a)g(`code')h(is)f(a)f Fy(GAP)f FK(record,)k(with)e(one)g(of)g(its)g
+(components)i(being)g(a)d(subset)i(\(or)g(subspace)h(with)e(gi)n(v)o
+(en)75 2559 y(basis,)j(if)19 b Fq(C)24 b FK(is)g(linear\))h(of)18
+b Fq(V)12 b FK(.)p 75 2653 1648 4 v 1764 2658 a FF(Example)p
+2102 2653 V 75 2678 4 25 v 3747 2678 V 75 2777 4 100
+v 273 2748 a(gap>)43 b(C:=RandomLinearCode)q(\(20)q(,10)q(,G)q(F\(4)q
+(\)\);)p 3747 2777 V 75 2877 V 273 2847 a(a)85 b([20,10,?])45
+b(randomly)g(generated)h(code)d(over)h(GF\(4\))p 3747
+2877 V 75 2977 V 273 2947 a(gap>)f(c:=Random\(C\);)p
+3747 2977 V 75 3076 V 273 3046 a([)f(1)h(a)g(0)f(0)h(0)g(1)f(1)h
+(a\2102)g(0)g(0)g(a)f(1)h(1)g(1)g(a)f(1)h(1)g(a)f(a)h(0)g(])p
+3747 3076 V 75 3176 V 273 3146 a(gap>)g(NamesOfComponents\(C)q(\);)p
+3747 3176 V 75 3276 V 273 3246 a([)f("LeftActingDomain",)49
+b("GeneratorsOfLeftOp)q(era)q(tor)q(Add)q(iti)q(veG)q(rou)q(p",)g
+("WordLength",)p 3747 3276 V 75 3375 V 357 3345 a("GeneratorMat",)f
+("name",)c("Basis",)i("NiceFreeLeftModule",)j("Dimension",)p
+3747 3375 V 75 3475 V 400 3445 a("Representative",)f("ZeroImmutable")f
+(])p 3747 3475 V 75 3574 V 273 3545 a(gap>)c(NamesOfComponents\(c)q
+(\);)p 3747 3574 V 75 3674 V 273 3644 a([)f("VectorCodeword",)48
+b("WordLength",)f("treatAsPoly")g(])p 3747 3674 V 75
+3774 V 273 3744 a(gap>)c(c!.VectorCodeword;)p 3747 3774
+V 75 3873 V 273 3843 a([)f(immutable)k(compressed)f(vector)g(length)f
+(20)f(over)h(GF\(4\))g(])p 3747 3873 V 75 3973 V 273
+3943 a(gap>)f(Display\(last\);)p 3747 3973 V 75 4073
+V 273 4043 a([)f(Z\(2\2102\),)j(Z\(2\2102\),)g(Z\(2\2102\),)f
+(Z\(2\)\2100,)h(Z\(2\2102\),)g(Z\(2\2102\)\2102,)g(0*Z\(2\),)g
+(Z\(2\2102\),)g(Z\(2\2102\),)p 3747 4073 V 75 4172 V
+357 4142 a(Z\(2\)\2100,)g(Z\(2\2102\)\2102,)g(0*Z\(2\),)g(0*Z\(2\),)g
+(Z\(2\2102\),)g(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g(Z\(2\2102\)\2102,)p
+3747 4172 V 75 4272 V 357 4242 a(Z\(2\)\2100,)g(0*Z\(2\))f(])p
+3747 4272 V 75 4371 V 273 4342 a(gap>)f(C!.Dimension;)p
+3747 4371 V 75 4471 V 273 4441 a(10)p 3747 4471 V 75
+4496 4 25 v 3747 4496 V 75 4499 3675 4 v 75 4687 a FK(Mathematically)-6
+b(,)60 b(a)50 b(`code)n(w)o(ord')j(is)d(an)g(element)i(of)e(a)h(code)46
+b Fq(C)r FK(,)56 b(b)n(ut)51 b(in)g Fy(GU)m(A)-6 b(V)f(A)48
+b FK(the)j Ft(Codeword)i FK(and)75 4800 y Ft(VectorCodeword)27
+b FK(commands)c(ha)n(v)o(e)h(implementations)i(which)c(do)h(not)g
+(check)h(if)e(the)h(code)n(w)o(ord)h(belongs)g(to)18
+b Fq(C)75 4913 y FK(\(i.e.,)j(are)f(independent)25 b(of)20
+b(the)h(code)h(itself\).)29 b(The)o(y)20 b(e)o(xist)i(primarily)g(to)f
+(mak)o(e)f(it)h(easier)h(for)f(the)g(user)g(to)g(construct)75
+5026 y(a)29 b(the)h(associated)j Fy(GAP)27 b FK(record.)49
+b(Using)30 b(these)h(commands,)h(one)e(can)g(enter)h(into)f(a)f
+Fy(GAP)f FK(both)i(a)f(code)n(w)o(ord)j Fq(c)75 5139
+y FK(\(belonging)d(to)20 b Fq(C)r FK(\))26 b(and)g(a)f(recei)n(v)o(ed)i
+(w)o(ord)f Fq(r)i FK(\(not)e(belonging)j(to)20 b Fq(C)r
+FK(\))25 b(using)i(the)f(same)g(command.)36 b(The)25
+b(user)i(can)75 5252 y(input)e(code)n(w)o(ords)g(in)f(dif)n(ferent)h
+(formats)f(\(as)g(strings,)h(v)o(ectors,)g(and)f(polynomials\),)i(and)e
+(output)h(information)h(is)75 5364 y(formatted)f(in)f(a)f(readable)i(w)
+o(ay)-6 b(.)216 5477 y(A)24 b(code)n(w)o(ord)j Fq(c)d
+FK(in)h(a)g(linear)h(code)21 b Fq(C)27 b FK(arises)f(in)f(practice)i
+(by)e(an)h(initial)g(encoding)i(of)d(a)f('block')j(message)g
+Fq(m)p FK(,)75 5590 y(adding)h(enough)g(redundanc)o(y)i(to)c(reco)o(v)o
+(er)i Fq(m)d FK(after)i Fq(c)f FK(is)g(transmitted)j(via)e(a)f('noisy')
+i(communication)h(medium.)p Black 1867 5841 a(18)p Black
+eop end end
+%%Page: 19 19
+TeXDict begin HPSdict begin 19 18 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.19) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(19)p Black 75 399 a(In)22 b Fy(GU)m(A)-6
+b(V)f(A)p FK(,)20 b(for)j(linear)h(codes,)f(the)g(map)f
+Fq(m)d Fv(7\000)-16 b(!)19 b Fq(c)j FK(is)g(computed)i(using)g(the)e
+(command)h Ft(c:=m*C)h FK(and)f(reco)o(v)o(ering)75 511
+y Fq(m)18 b FK(from)h Fq(c)g FK(is)g(obtained)i(by)f(the)f(command)h
+Ft(InformationWord\(C,c)q(\))p FK(.)33 b(These)19 b(commands)h(are)g(e)
+o(xplained)h(more)75 624 y(belo)n(w)-6 b(.)216 737 y(Man)o(y)25
+b(operations)i(are)e(a)n(v)n(ailable)i(on)e(code)n(w)o(ords)i(themselv)
+o(es,)f(although)h(code)n(w)o(ords)g(also)e(w)o(ork)g(together)75
+850 y(with)e(codes)i(\(see)f(chapter)p 0.0236 0.0894 0.6179
+TeXcolorrgb 948 850 a
+SDict begin H.S end
+ 948 850 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(4)p 0.0236 0.0894 0.6179 TeXcolorrgb 993
+788 a
+SDict begin H.R end
+ 993 788 a 993 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.4) cvn H.B /ANN pdfmark end
+ 993 850 a Black 24 w FK(on)f(Codes\).)216
+963 y(The)c(\002rst)h(section)h(describes)h(ho)n(w)d(code)n(w)o(ords)j
+(are)d(constructed)k(\(see)d Ft(Codeword)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2905 964 a
+SDict begin H.S end
+ 2905 964 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3086 901 a
+SDict begin H.R end
+ 3086 901 a 3086 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.1) cvn H.B /ANN pdfmark end
+ 3086 963 a Black FK(\))e(and)g
+Ft(IsCodeword)75 1076 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 1077 a
+SDict begin H.S end
+ 105 1077 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 1014 a
+SDict begin H.R end
+ 286 1014 a 286 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.3) cvn H.B /ANN pdfmark end
+ 286 1076 a Black FK(\)\).)55
+b(Sections)p 0.0236 0.0894 0.6179 TeXcolorrgb 764 1077
+a
+SDict begin H.S end
+ 764 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 877 1014 a
+SDict begin H.R end
+ 877 1014
+a 877 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.2) cvn H.B /ANN pdfmark end
+ 877 1076 a Black 32 w FK(and)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1071 1077 a
+SDict begin H.S end
+ 1071 1077 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1184 1014 a
+SDict begin H.R end
+ 1184 1014 a 1184 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.3) cvn H.B /ANN pdfmark end
+ 1184 1076 a Black
+32 w FK(describe)35 b(the)d(arithmetic)i(operations)h(applicable)g(to)d
+(code)n(w)o(ords.)56 b(Section)p 0.0236 0.0894 0.6179
+TeXcolorrgb 75 1190 a
+SDict begin H.S end
+ 75 1190 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+188 1127 a
+SDict begin H.R end
+ 188 1127 a 188 1189 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.4) cvn H.B /ANN pdfmark end
+ 188 1189 a Black 26
+w FK(describe)28 b(functions)g(that)f(con)l(v)o(ert)g(code)n(w)o(ords)h
+(back)f(to)f(v)o(ectors)h(or)f(polynomials)i(\(see)f
+Ft(VectorCodeword)75 1302 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 1303 a
+SDict begin H.S end
+ 105 1303 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 1240 a
+SDict begin H.R end
+ 286 1240 a 286 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.1) cvn H.B /ANN pdfmark end
+ 286 1302 a Black FK(\))i(and)f
+Ft(PolyCodeword)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1117 1303 a
+SDict begin H.S end
+ 1117 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(3.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1298
+1240 a
+SDict begin H.R end
+ 1298 1240 a 1298 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.2) cvn H.B /ANN pdfmark end
+ 1298 1302 a Black FK(\)\).)44
+b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 1725 1303
+a
+SDict begin H.S end
+ 1725 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.5)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1838 1240 a
+SDict begin H.R end
+ 1838 1240
+a 1838 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.5) cvn H.B /ANN pdfmark end
+ 1838 1302 a Black 28 w FK(describe)30 b(functions)h(that)
+e(change)h(the)e(w)o(ay)g(a)g(code)n(w)o(ord)75 1415
+y(is)d(displayed)i(\(see)f Ft(TreatAsVector)j FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1360 1416 a
+SDict begin H.S end
+ 1360 1416
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.5.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1541 1353 a
+SDict begin H.R end
+ 1541 1353 a 1541 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.5.1) cvn H.B /ANN pdfmark end
+ 1541
+1415 a Black FK(\))c(and)h Ft(TreatAsPoly)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2316 1416 a
+SDict begin H.S end
+ 2316 1416 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.5.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2497 1353 a
+SDict begin H.R end
+ 2497 1353 a 2497 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.5.2) cvn H.B /ANN pdfmark end
+ 2497 1415 a Black
+FK(\)\).)34 b(Finally)-6 b(,)26 b(Section)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3209 1416 a
+SDict begin H.S end
+ 3209 1416 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3322 1353 a
+SDict begin H.R end
+ 3322 1353 a 3322 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.6) cvn H.B /ANN pdfmark end
+ 3322 1415 a Black
+25 w FK(describes)i(a)75 1528 y(function)f(to)f(generate)h(a)e(null)h
+(w)o(ord)f(\(see)h Ft(NullWord)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1867 1529 a
+SDict begin H.S end
+ 1867 1529 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2048 1466 a
+SDict begin H.R end
+ 2048 1466 a 2048 1528 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.1) cvn H.B /ANN pdfmark end
+ 2048 1528 a Black
+FK(\)\))f(and)g(some)g(functions)h(for)f(e)o(xtracting)h(properties)75
+1641 y(of)c(code)n(w)o(ords)j(\(see)e Ft(DistanceCodeword)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1550 1642 a
+SDict begin H.S end
+
+1550 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1731 1579 a
+SDict begin H.R end
+ 1731 1579
+a 1731 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end
+ 1731 1641 a Black FK(\),)c Ft(Support)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2186 1642 a
+SDict begin H.S end
+
+2186 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2367 1579 a
+SDict begin H.R end
+ 2367 1579
+a 2367 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.3) cvn H.B /ANN pdfmark end
+ 2367 1641 a Black FK(\))e(and)g Ft(WeightCodeword)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3276 1642 a
+SDict begin H.S end
+
+3276 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3457 1579 a
+SDict begin H.R end
+ 3457 1579
+a 3457 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.4) cvn H.B /ANN pdfmark end
+ 3457 1641 a Black FK(\)\).)75 1800 y
+SDict begin H.S end
+ 75
+1800 a 75 1800 a
+SDict begin 13.6 H.A end
+ 75 1800 a 75 1800 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.1) cvn H.B /DEST pdfmark end
+ 75 1800 a 133 x
+FM(3.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Construction)k(of)e(Codew)o
+(ords)p Black 75 2029 a
+SDict begin H.S end
+ 75 2029 a 75 2029 a
+SDict begin 13.6 H.A end
+ 75 2029 a
+75 2029 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.1) cvn H.B /DEST pdfmark end
+ 75 2029 a 114 x FJ(3.1.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Codew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2318
+a Fs(\006)22 b Ft(Codeword\()50 b(obj[,)e(n][,][F])h(\))2121
+b Fr(\(function\))p Black 216 2544 a Ft(Codeword)24 b
+FK(returns)g(a)e(code)n(w)o(ord)i(or)e(a)g(list)g(of)g(code)n(w)o(ords)
+j(constructed)g(from)d Ft(obj)q FK(.)28 b(The)21 b(object)j
+Ft(obj)f FK(can)f(be)75 2656 y(a)h(v)o(ector)l(,)i(a)e(string,)h(a)f
+(polynomial)j(or)e(a)f(code)n(w)o(ord.)30 b(It)23 b(may)h(also)g(be)f
+(a)g(list)h(of)g(those)g(\(e)n(v)o(en)g(a)g(mix)o(ed)f(list\).)216
+2769 y(If)h(a)f(number)i Ft(n)f FK(is)g(speci\002ed,)h(all)f
+(constructed)k(code)n(w)o(ords)d(ha)n(v)o(e)g(length)h
+Ft(n)p FK(.)j(This)24 b(is)g(the)g(only)h(w)o(ay)f(to)g(mak)o(e)75
+2882 y(sure)g(that)g(all)f(elements)h(of)f Ft(obj)h FK(are)f(con)l(v)o
+(erted)j(to)d(code)n(w)o(ords)i(of)e(the)h(same)f(length.)30
+b(Elements)24 b(of)f Ft(obj)g FK(that)h(are)75 2995 y(longer)k(than)g
+Ft(n)f FK(are)g(reduced)i(in)d(length)j(by)e(cutting)h(of)f(the)h(last)
+f(positions.)41 b(Elements)28 b(of)f Ft(obj)g FK(that)g(are)h(shorter)
+75 3108 y(than)g Ft(n)f FK(are)h(lengthened)j(by)c(adding)i(zeros)g(at)
+e(the)h(end.)41 b(If)28 b(no)f Ft(n)g FK(is)h(speci\002ed,)h(each)g
+(constructed)h(code)n(w)o(ord)f(is)75 3221 y(handled)d(indi)n(vidually)
+-6 b(.)216 3334 y(If)25 b(a)g(Galois)h(\002eld)f Ft(F)g
+FK(is)g(speci\002ed,)h(all)g(code)n(w)o(ords)h(are)e(constructed)k(o)o
+(v)o(er)c(this)h(\002eld.)34 b(This)25 b(is)g(the)g(only)h(w)o(ay)75
+3447 y(to)g(mak)o(e)f(sure)i(that)f(all)g(elements)h(of)e
+Ft(obj)h FK(are)g(con)l(v)o(erted)i(to)e(the)g(same)f(\002eld)h
+Ft(F)f FK(\(otherwise)j(the)o(y)e(are)g(con)l(v)o(erted)75
+3560 y(one)g(by)g(one\).)35 b(Note)26 b(that)g(all)f(elements)i(of)f
+Ft(obj)g FK(must)f(ha)n(v)o(e)h(elements)h(o)o(v)o(er)f
+Ft(F)f FK(or)g(o)o(v)o(er)h(`Inte)o(gers'.)37 b(Con)l(v)o(erting)75
+3673 y(from)30 b(one)g(Galois)h(\002eld)e(to)h(another)i(is)e(not)g
+(allo)n(wed.)48 b(If)30 b(no)g Ft(F)f FK(is)h(speci\002ed,)j(v)o
+(ectors)e(or)f(strings)h(with)f(inte)o(ger)75 3786 y(elements)25
+b(will)e(be)h(con)l(v)o(erted)i(to)d(the)h(smallest)h(Galois)f(\002eld)
+f(possible.)216 3898 y(Note)i(that)h(a)f(signi\002cant)i(speed)f
+(increase)h(is)e(achie)n(v)o(ed)i(if)e Ft(F)g FK(is)g(speci\002ed,)h(e)
+n(v)o(en)g(when)f(all)g(elements)i(of)e Ft(obj)75 4011
+y FK(already)g(ha)n(v)o(e)f(elements)h(o)o(v)o(er)f Ft(F)p
+FK(.)216 4124 y(Ev)o(ery)h(v)o(ector)g(in)g Ft(obj)g
+FK(can)g(be)f(a)g(\002nite)h(\002eld)f(v)o(ector)i(o)o(v)o(er)e
+Ft(F)h FK(or)f(a)g(v)o(ector)i(o)o(v)o(er)e(`Inte)o(gers'.)34
+b(In)25 b(the)g(last)g(case,)75 4237 y(it)e(is)h(con)l(v)o(erted)i(to)d
+Ft(F)g FK(or)l(,)h(if)f(omitted,)h(to)g(the)g(smallest)g(Galois)h
+(\002eld)e(possible.)216 4350 y(Ev)o(ery)g(string)h(in)f
+Ft(obj)h FK(must)f(be)g(a)f(string)i(of)f(numbers,)h(without)g(spaces,)
+h(commas)e(or)g(an)o(y)g(other)h(characters.)75 4463
+y(These)i(numbers)h(must)e(be)h(from)f(0)g(to)h(9.)34
+b(The)25 b(string)i(is)e(con)l(v)o(erted)k(to)c(a)g(code)n(w)o(ord)i(o)
+o(v)o(er)f Ft(F)f FK(or)l(,)h(if)f Ft(F)g FK(is)g(omitted,)75
+4576 y(o)o(v)o(er)c(the)h(smallest)g(Galois)g(\002eld)e(possible.)31
+b(Note)21 b(that)g(since)h(all)g(numbers)g(in)f(the)h(string)g(are)f
+(interpreted)j(as)d(one-)75 4689 y(digit)k(numbers,)g(Galois)f
+(\002elds)g(of)g(size)g(lar)n(ger)h(than)g(10)f(are)g(not)g(properly)i
+(represented)h(when)d(using)h(strings.)31 b(In)75 4802
+y(f)o(act,)24 b(no)f(\002nite)h(\002eld)f(of)h(size)g(lar)n(ger)h(than)
+f(11)g(arises)h(in)e(this)h(f)o(ashion)i(at)d(all.)216
+4915 y(Ev)o(ery)f(polynomial)i(in)e Ft(obj)h FK(is)f(con)l(v)o(erted)i
+(to)e(a)g(code)n(w)o(ord)h(of)f(length)i Ft(n)d FK(or)l(,)h(if)g
+(omitted,)h(of)f(a)g(length)h(dictated)75 5028 y(by)h(the)f(de)o(gree)i
+(of)f(the)f(polynomial.)31 b(If)24 b Ft(F)f FK(is)g(speci\002ed,)i(a)e
+(polynomial)j(in)d Ft(obj)h FK(must)g(be)f(o)o(v)o(er)h
+Ft(F)p FK(.)216 5140 y(Ev)o(ery)29 b(element)h(of)f Ft(obj)h
+FK(that)g(is)f(already)i(a)d(code)n(w)o(ord)j(is)e(changed)i(to)e(a)g
+(code)n(w)o(ord)i(of)e(length)h Ft(n)q FK(.)44 b(If)29
+b(no)h Ft(n)75 5253 y FK(w)o(as)23 b(speci\002ed,)i(the)f(code)n(w)o
+(ord)h(doesn')n(t)g(change.)31 b(If)23 b Ft(F)g FK(is)g(speci\002ed,)i
+(the)f(code)n(w)o(ord)h(must)e(ha)n(v)o(e)i(base)f(\002eld)f
+Ft(F)q FK(.)p 75 5351 1648 4 v 1764 5356 a FF(Example)p
+2102 5351 V 75 5376 4 25 v 3747 5376 V 75 5476 4 100
+v 188 5446 a(gap>)44 b(c)e(:=)h(Codeword\([0,1,1,1,0)q(]\);)p
+3747 5476 V 75 5575 V 188 5545 a([)g(0)f(1)h(1)g(1)f(0)h(])p
+3747 5575 V Black Black eop end end
+%%Page: 20 20
+TeXDict begin HPSdict begin 20 19 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.20) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(20)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(VectorCodeword\()j(c)c(\);)p 3747 428 V 75 528 V 188
+498 a([)g(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\)\2100,)g(Z\(2\)\2100,)g
+(0*Z\(2\))f(])p 3747 528 V 75 628 V 188 598 a(gap>)g(c2)f(:=)g
+(Codeword\([0,1,1,1,0],)49 b(GF\(3\)\);)p 3747 628 V
+75 727 V 188 697 a([)43 b(0)f(1)h(1)g(1)f(0)h(])p 3747
+727 V 75 827 V 188 797 a(gap>)h(VectorCodeword\()j(c2)c(\);)p
+3747 827 V 75 927 V 188 897 a([)g(0*Z\(3\),)h(Z\(3\)\2100,)h
+(Z\(3\)\2100,)g(Z\(3\)\2100,)g(0*Z\(3\))f(])p 3747 927
+V 75 1026 V 188 996 a(gap>)g(Codeword\([c,)i(c2,)d("0110"]\);)p
+3747 1026 V 75 1126 V 188 1096 a([)g([)f(0)h(1)g(1)f(1)h(0)g(],)g([)f
+(0)h(1)g(1)f(1)h(0)g(],)g([)g(0)f(1)h(1)g(0)f(])h(])p
+3747 1126 V 75 1225 V 188 1196 a(gap>)h(p)e(:=)h(UnivariatePolynomia)q
+(l\(G)q(F\()q(2\),)49 b([Z\(2\)\2100,)c(0*Z\(2\),)g(Z\(2\)\2100]\);)p
+3747 1225 V 75 1325 V 188 1295 a(Z\(2\)\2100+x_1\2102)p
+3747 1325 V 75 1425 V 188 1395 a(gap>)f(Codeword\(p\);)p
+3747 1425 V 75 1524 V 188 1494 a(x\2102)f(+)g(1)p 3747
+1524 V 75 1549 4 25 v 3747 1549 V 75 1552 3675 4 v 216
+1738 a FK(This)20 b(command)h(can)f(also)g(be)g(called)h(using)h(the)e
+(syntax)h Ft(Codeword\(obj,C\))p FK(.)j(In)c(this)h(format,)g(the)f
+(elements)75 1851 y(of)26 b Ft(obj)h FK(are)g(con)l(v)o(erted)i(to)d
+(elements)i(of)f(the)f(same)h(ambient)h(v)o(ector)f(space)h(as)e(the)h
+(elements)h(of)e(a)g(code)h Ft(C)q FK(.)37 b(The)75 1964
+y(command)24 b Ft(Codeword\(c,C\))j FK(is)d(the)f(same)h(as)f(calling)i
+Ft(Codeword\(c,n,F\))p FK(,)j(where)23 b Ft(n)g FK(is)g(the)h(w)o(ord)g
+(length)g(of)g Ft(C)75 2077 y FK(and)g(the)g Ft(F)f FK(is)g(the)h
+(ground)h(\002eld)f(of)f Ft(C)q FK(.)p 75 2197 1648 4
+v 1764 2202 a FF(Example)p 2102 2197 V 75 2222 4 25 v
+3747 2222 V 75 2321 4 100 v 188 2291 a(gap>)44 b(C)e(:=)h
+(WholeSpaceCode\(7,GF)q(\(5\))q(\);)p 3747 2321 V 75
+2421 V 188 2391 a(a)g(cyclic)h([7,7,1]0)h(whole)f(space)g(code)g(over)g
+(GF\(5\))p 3747 2421 V 75 2521 V 188 2491 a(gap>)g
+(Codeword\(["0220110",)49 b([1,1,1]],)c(C\);)p 3747 2521
+V 75 2620 V 188 2590 a([)e([)f(0)h(2)g(2)f(0)h(1)g(1)f(0)h(],)g([)g(1)f
+(1)h(1)g(0)f(0)h(0)g(0)g(])f(])p 3747 2620 V 75 2720
+V 188 2690 a(gap>)i(Codeword\(["0220110",)49 b([1,1,1]],)c(7,)e
+(GF\(5\)\);)p 3747 2720 V 75 2819 V 188 2790 a([)g([)f(0)h(2)g(2)f(0)h
+(1)g(1)f(0)h(],)g([)g(1)f(1)h(1)g(0)f(0)h(0)g(0)g(])f(])p
+3747 2819 V 75 2919 V 188 2889 a(gap>)i(C:=RandomLinearCode\(1)q(0,5)q
+(,GF)q(\(3)q(\)\);)p 3747 2919 V 75 3019 V 188 2989 a(a)f(linear)h
+([10,5,1..3]3..5)j(random)e(linear)f(code)g(over)g(GF\(3\))p
+3747 3019 V 75 3118 V 188 3088 a(gap>)g(Codeword\("1000000000")q(,C\))q
+(;)p 3747 3118 V 75 3218 V 188 3188 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f
+(0)h(0)g(0)f(])p 3747 3218 V 75 3318 V 188 3288 a(gap>)i
+(Codeword\("1000000000")q(,10)q(,GF)q(\(3)q(\)\);)p 3747
+3318 V 75 3417 V 188 3387 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f
+(])p 3747 3417 V 75 3442 4 25 v 3747 3442 V 75 3445 3675
+4 v 75 3578 a
+SDict begin H.S end
+ 75 3578 a 75 3578 a
+SDict begin 13.6 H.A end
+ 75 3578 a 75 3578 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.2) cvn H.B /DEST pdfmark end
+
+75 3578 a 116 x FJ(3.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(Codew)o(ordNr)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3868
+a Fs(\006)22 b Ft(CodewordNr\()51 b(C,)c(list)h(\))2352
+b Fr(\(function\))p Black 216 4094 a Ft(CodewordNr)23
+b FK(returns)f(a)e(list)h(of)f(code)n(w)o(ords)i(of)f
+Ft(C)p FK(.)27 b Ft(list)21 b FK(may)f(be)g(a)g(list)h(of)f(inte)o
+(gers)i(or)f(a)e(single)j(inte)o(ger)-5 b(.)29 b(F)o(or)75
+4207 y(each)d(inte)o(ger)g(of)f Ft(list)r FK(,)f(the)h(corresponding)30
+b(code)n(w)o(ord)c(of)f Ft(C)g FK(is)g(returned.)35 b(The)25
+b(correspondence)30 b(of)25 b(a)f(number)75 4320 y Fq(i)k
+FK(with)h(a)f(code)n(w)o(ord)j(is)d(determined)j(as)e(follo)n(ws:)40
+b(if)29 b(a)f(list)i(of)e(elements)j(of)d Ft(C)h FK(is)f(a)n(v)n
+(ailable,)k(the)e Fq(i)3285 4287 y Fm(t)5 b(h)3374 4320
+y FK(element)29 b(is)75 4433 y(tak)o(en.)f(Otherwise,)20
+b(it)e(is)g(calculated)j(by)d(multiplication)k(of)c(the)g
+Fq(i)2147 4400 y Fm(t)5 b(h)2225 4433 y FK(information)21
+b(v)o(ector)e(by)g(the)f(generator)j(matrix)75 4546 y(or)28
+b(generator)j(polynomial,)g(where)e(the)f(information)j(v)o(ectors)e
+(are)g(ordered)h(le)o(xicographically)-6 b(.)47 b(In)29
+b(particular)l(,)75 4659 y(the)37 b(returned)i(code)n(w)o(ord\(s\))g
+(could)f(be)f(a)g(v)o(ector)g(or)g(a)g(polynomial.)71
+b(So)36 b Ft(CodewordNr\(C,)51 b(i\))37 b FK(is)f(equal)i(to)75
+4772 y Ft(AsSSortedList\(C\)[i)q(])p FK(,)d(described)c(in)e(the)g(ne)o
+(xt)g(chapter)-5 b(.)47 b(The)28 b(latter)i(function)h(\002rst)e
+(calculates)i(the)e(set)g(of)75 4885 y(all)f(the)f(elements)i(of)23
+b Fq(C)28 b FK(and)g(then)g(returns)h(the)f Fq(i)1648
+4852 y Fm(t)5 b(h)1736 4885 y FK(element)28 b(of)g(that)g(set,)g
+(whereas)h(the)e(former)h(only)h(calculates)75 4998 y(the)24
+b Fq(i)232 4965 y Fm(t)5 b(h)315 4998 y FK(code)n(w)o(ord.)p
+75 5099 1648 4 v 1764 5104 a FF(Example)p 2102 5099 V
+75 5124 4 25 v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44
+b(B)e(:=)h(BinaryGolayCode\(\);)p 3747 5224 V 75 5323
+V 188 5293 a(a)g(cyclic)h([23,12,7]3)i(binary)e(Golay)g(code)g(over)g
+(GF\(2\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)g(c)e(:=)h
+(CodewordNr\(B,)k(4\);)p 3747 5423 V 75 5523 V 188 5493
+a(x\21022)d(+)e(x\21020)i(+)f(x\21017)g(+)g(x\21014)h(+)e(x\21013)i(+)f
+(x\21012)h(+)e(x\21011)i(+)f(x\21010)p 3747 5523 V 75
+5622 V 188 5592 a(gap>)h(R)e(:=)h(ReedSolomonCode\(2,2)q(\);)p
+3747 5622 V Black Black eop end end
+%%Page: 21 21
+TeXDict begin HPSdict begin 21 20 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.21) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(21)p Black 75 428 4 100 v 188 399 a FF(a)43
+b(cyclic)h([2,1,2]1)h(Reed-Solomon)h(code)e(over)g(GF\(3\))p
+3747 428 V 75 528 V 188 498 a(gap>)g(AsSSortedList\(R\);)p
+3747 528 V 75 628 V 188 598 a([)f([)f(0)h(0)g(],)g([)f(1)h(1)g(],)g([)f
+(2)h(2)g(])f(])p 3747 628 V 75 727 V 188 697 a(gap>)i(CodewordNr\(R,)i
+([1,3]\);)p 3747 727 V 75 827 V 188 797 a([)d([)f(0)h(0)g(],)g([)f(2)h
+(2)g(])f(])p 3747 827 V 75 852 4 25 v 3747 852 V 75 855
+3675 4 v 75 986 a
+SDict begin H.S end
+ 75 986 a 75 986 a
+SDict begin 13.6 H.A end
+ 75 986 a 75 986 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.3) cvn H.B /DEST pdfmark end
+
+75 986 a 116 x FJ(3.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(IsCodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1276
+a Fs(\006)22 b Ft(IsCodeword\()51 b(obj)c(\))2538 b Fr(\(function\))p
+Black 216 1502 a Ft(IsCodeword)34 b FK(returns)e(`true')g(if)f
+Ft(obj)q FK(,)h(which)f(can)h(be)e(an)h(object)i(of)e(arbitrary)i
+(type,)g(is)e(of)g(the)g(code)n(w)o(ord)75 1615 y(type)24
+b(and)g(`f)o(alse')h(otherwise.)31 b(The)23 b(function)i(will)f(signal)
+h(an)e(error)h(if)g Ft(obj)g FK(is)f(an)g(unbound)j(v)n(ariable.)p
+75 1725 1648 4 v 1764 1730 a FF(Example)p 2102 1725 V
+75 1749 4 25 v 3747 1749 V 75 1849 4 100 v 188 1819 a(gap>)44
+b(IsCodeword\(1\);)p 3747 1849 V 75 1949 V 188 1919 a(false)p
+3747 1949 V 75 2048 V 188 2018 a(gap>)g(IsCodeword\(ReedMuller)q(Cod)q
+(e\(2)q(,3)q(\)\);)p 3747 2048 V 75 2148 V 188 2118 a(false)p
+3747 2148 V 75 2248 V 188 2218 a(gap>)g(IsCodeword\("11111"\);)p
+3747 2248 V 75 2347 V 188 2317 a(false)p 3747 2347 V
+75 2447 V 188 2417 a(gap>)g(IsCodeword\(Codeword\(")q(111)q(11")q(\)\))
+q(;)p 3747 2447 V 75 2546 V 188 2517 a(true)p 3747 2546
+V 75 2571 4 25 v 3747 2571 V 75 2574 3675 4 v 75 2716
+a
+SDict begin H.S end
+ 75 2716 a 75 2716 a
+SDict begin 13.6 H.A end
+ 75 2716 a 75 2716 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.2) cvn H.B /DEST pdfmark end
+ 75 2716 a 149
+x FM(3.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Comparisons)29
+b(of)h(Codew)o(ords)p Black 75 2984 a
+SDict begin H.S end
+ 75 2984 a 75 2984
+a
+SDict begin 13.6 H.A end
+ 75 2984 a 75 2984 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.2.1) cvn H.B /DEST pdfmark end
+ 75 2984 a 91 x FJ(3.2.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(=)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+3250 a Fs(\006)22 b Ft(=\()47 b(c1,)h(c2)f(\))2816 b
+Fr(\(function\))p Black 216 3476 a FK(The)29 b(equality)j(operator)f
+Ft(c1)47 b(=)g(c2)29 b FK(e)n(v)n(aluates)j(to)d(`true')h(if)g(the)f
+(code)n(w)o(ords)j Ft(c1)d FK(and)h Ft(c2)f FK(are)h(equal,)h(and)f(to)
+75 3588 y(`f)o(alse')d(otherwise.)37 b(Note)26 b(that)g(code)n(w)o
+(ords)i(are)e(equal)h(if)e(and)h(only)h(if)e(their)i(base)f(v)o(ectors)
+i(are)e(equal.)36 b(Whether)75 3701 y(the)o(y)24 b(are)g(represented)i
+(as)e(a)f(v)o(ector)h(or)g(polynomial)i(has)e(nothing)h(to)f(do)f(with)
+h(the)g(comparison.)216 3814 y(Comparing)i(code)n(w)o(ords)g(with)e
+(objects)i(of)e(other)h(types)h(is)e(not)g(recommended,)j(although)f
+(it)e(is)g(possible.)33 b(If)75 3927 y Ft(c2)d FK(is)g(the)g(code)n(w)o
+(ord,)j(the)e(other)g(object)g Ft(c1)f FK(is)g(\002rst)g(con)l(v)o
+(erted)j(to)d(a)g(code)n(w)o(ord,)j(after)d(which)h(comparison)h(is)75
+4040 y(possible.)51 b(This)30 b(w)o(ay)-6 b(,)32 b(a)e(code)n(w)o(ord)i
+(can)e(be)h(compared)h(with)e(a)g(v)o(ector)l(,)j(polynomial,)h(or)c
+(string.)50 b(If)31 b Ft(c1)f FK(is)g(the)75 4153 y(code)n(w)o(ord,)c
+(then)g(problems)g(may)f(arise)h(if)e Ft(c2)h FK(is)g(a)f(polynomial.)
+35 b(In)25 b(that)g(case,)h(the)f(comparison)i(al)o(w)o(ays)f(yields)75
+4266 y(a)d(`f)o(alse',)i(because)g(the)f(polynomial)i(comparison)g(is)d
+(called.)216 4379 y(The)k(equality)i(operator)h(is)d(also)h(denoted)h
+Ft(EQ)p FK(,)e(and)h Ft(EQ\(c1,c2\))i FK(is)d(the)h(same)f(as)g
+Ft(c1)47 b(=)g(c2)p FK(.)40 b(There)27 b(is)h(also)75
+4492 y(an)c(inequality)i(operator)l(,)g Fp(<)c(>)p FK(,)g(or)i
+Ft(not)47 b(EQ)p FK(.)p 75 4601 1648 4 v 1764 4606 a
+FF(Example)p 2102 4601 V 75 4626 4 25 v 3747 4626 V 75
+4726 4 100 v 188 4696 a(gap>)d(P)e(:=)h(UnivariatePolynomia)q(l\(G)q
+(F\()q(2\),)49 b(Z\(2\)*[1,0,0,1]\);)p 3747 4726 V 75
+4825 V 188 4795 a(Z\(2\)\2100+x_1\2103)p 3747 4825 V
+75 4925 V 188 4895 a(gap>)44 b(c)e(:=)h(Codeword\(P,)j(GF\(2\)\);)p
+3747 4925 V 75 5024 V 188 4995 a(x\2103)d(+)g(1)p 3747
+5024 V 75 5124 V 188 5094 a(gap>)h(P)e(=)h(c;)339 b(#)43
+b(codeword)i(operation)p 3747 5124 V 75 5224 V 188 5194
+a(true)p 3747 5224 V 75 5323 V 188 5293 a(gap>)f(c2)f(:=)g
+(Codeword\("1001",)k(GF\(2\)\);)p 3747 5323 V 75 5423
+V 188 5393 a([)c(1)f(0)h(0)g(1)f(])p 3747 5423 V 75 5523
+V 188 5493 a(gap>)i(c)e(=)h(c2;)p 3747 5523 V 75 5622
+V 188 5592 a(true)p 3747 5622 V Black Black eop end end
+%%Page: 22 22
+TeXDict begin HPSdict begin 22 21 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.22) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(22)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(C:=HammingCode\(3\);)p 3747 428 V 75 528 V 188 498
+a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p
+3747 528 V 75 628 V 188 598 a(gap>)h(c1:=Random\(C\);)p
+3747 628 V 75 727 V 188 697 a([)f(1)f(0)h(0)g(1)f(1)h(0)g(0)f(])p
+3747 727 V 75 827 V 188 797 a(gap>)i(c2:=Random\(C\);)p
+3747 827 V 75 927 V 188 897 a([)f(0)f(1)h(0)g(0)f(1)h(0)g(1)f(])p
+3747 927 V 75 1026 V 188 996 a(gap>)i(EQ\(c1,c2\);)p
+3747 1026 V 75 1126 V 188 1096 a(false)p 3747 1126 V
+75 1225 V 188 1196 a(gap>)g(not)f(EQ\(c1,c2\);)p 3747
+1225 V 75 1325 V 188 1295 a(true)p 3747 1325 V 75 1350
+4 25 v 3747 1350 V 75 1353 3675 4 v 75 1494 a
+SDict begin H.S end
+ 75 1494
+a 75 1494 a
+SDict begin 13.6 H.A end
+ 75 1494 a 75 1494 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.3) cvn H.B /DEST pdfmark end
+ 75 1494 a 150 x FM(3.3)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Arithmetic)31 b(Operations)f(f)m(or)f
+(Codew)o(ords)p Black 75 1762 a
+SDict begin H.S end
+ 75 1762 a 75 1762 a
+SDict begin 13.6 H.A end
+ 75
+1762 a 75 1762 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.1) cvn H.B /DEST pdfmark end
+ 75 1762 a 92 x FJ(3.3.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(+)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+2028 a Fs(\006)22 b Ft(+\()47 b(c1,)h(c2)f(\))2816 b
+Fr(\(function\))p Black 216 2254 a FK(The)22 b(follo)n(wing)h
+(operations)j(are)c(al)o(w)o(ays)h(a)n(v)n(ailable)h(for)f(code)n(w)o
+(ords.)30 b(The)22 b(operands)i(must)e(ha)n(v)o(e)h(a)f(common)75
+2367 y(base)i(\002eld,)f(and)h(must)g(ha)n(v)o(e)g(the)g(same)f
+(length.)31 b(No)22 b(implicit)j(con)l(v)o(ersions)i(are)d(performed.)
+216 2480 y(The)f(operator)j Ft(+)d FK(e)n(v)n(aluates)i(to)f(the)g(sum)
+f(of)g(the)h(code)n(w)o(ords)i Ft(c1)d FK(and)h Ft(c2)q
+FK(.)p 75 2591 1648 4 v 1764 2596 a FF(Example)p 2102
+2591 V 75 2615 4 25 v 3747 2615 V 75 2715 4 100 v 188
+2685 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(3)q(\)\);)p
+3747 2715 V 75 2815 V 188 2785 a(a)f(linear)h([10,5,1..3]3..5)j(random)
+e(linear)f(code)g(over)g(GF\(3\))p 3747 2815 V 75 2914
+V 188 2884 a(gap>)g(c:=Random\(C\);)p 3747 2914 V 75
+3014 V 188 2984 a([)f(1)f(0)h(2)g(2)f(2)h(2)g(1)f(0)h(2)g(0)f(])p
+3747 3014 V 75 3114 V 188 3084 a(gap>)i(Codeword\(c+"200000000)q(0"\))q
+(;)p 3747 3114 V 75 3213 V 188 3183 a([)f(0)f(0)h(2)g(2)f(2)h(2)g(1)f
+(0)h(2)g(0)f(])p 3747 3213 V 75 3313 V 188 3283 a(gap>)i
+(Codeword\(c+"100000000)q(0"\))q(;)p 3747 3313 V 75 3338
+4 25 v 3747 3338 V 75 3341 3675 4 v 75 3541 a FK(The)50
+b(last)h(command)g(returns)g(a)f Fy(GAP)e FK(ERR)l(OR)g(since)k(the)e
+(`code)n(w)o(ord')i(which)f Fy(GU)m(A)-6 b(V)f(A)48 b
+FK(associates)53 b(to)75 3654 y(\2241000000000\224)28
+b(belongs)e(to)d Fq(GF)7 b Fo(\()p FK(2)p Fo(\))24 b
+FK(and)g(not)f Fq(GF)7 b Fo(\()p FK(3)p Fo(\))p FK(.)75
+3808 y
+SDict begin H.S end
+ 75 3808 a 75 3808 a
+SDict begin 13.6 H.A end
+ 75 3808 a 75 3808 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.2) cvn H.B /DEST pdfmark end
+ 75 3808
+a 94 x FJ(3.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(-)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 4076 a Fs(\006)22 b Ft(-\()47
+b(c1,)h(c2)f(\))2816 b Fr(\(function\))p Black 216 4302
+a FK(Similar)24 b(to)f(addition:)31 b(the)24 b(operator)i
+Ft(-)d FK(e)n(v)n(aluates)i(to)f(the)g(dif)n(ference)i(of)d(the)h(code)
+n(w)o(ords)h Ft(c1)f FK(and)g Ft(c2)p FK(.)75 4452 y
+SDict begin H.S end
+
+75 4452 a 75 4452 a
+SDict begin 13.6 H.A end
+ 75 4452 a 75 4452 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.3) cvn H.B /DEST pdfmark end
+ 75 4452 a 97
+x FJ(3.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(+)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4723 a Fs(\006)e Ft(+\()47 b(v,)h(C)e(\))2909
+b Fr(\(function\))p Black 216 4949 a FK(The)18 b(operator)i
+Ft(v+C)f FK(e)n(v)n(aluates)h(to)e(the)h(coset)g(code)g(of)f(code)h
+Ft(C)f FK(after)h(adding)h(a)e(`code)n(w)o(ord')i Ft(v)e
+FK(to)g(all)g(code)n(w)o(ords)75 5062 y(in)25 b Ft(C)q
+FK(.)33 b(Note)26 b(that)g(if)f Fq(c)d Fv(2)15 b Fq(C)27
+b FK(then)f(mathematically)j Fq(c)13 b Fo(+)8 b Fq(C)24
+b Fo(=)16 b Fq(C)26 b FK(b)n(ut)g Fy(GU)m(A)-6 b(V)f(A)24
+b FK(only)i(sees)g(them)g(equal)g(as)g Fq(sets)p FK(.)35
+b(See)75 5175 y Ft(CosetCode)26 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 545 5176 a
+SDict begin H.S end
+ 545 5176 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+771 5113 a
+SDict begin H.R end
+ 771 5113 a 771 5175 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.16) cvn H.B /ANN pdfmark end
+ 771 5175 a Black FK(\).)216
+5288 y(Note)e(that)g(the)f(command)i Ft(C+v)f FK(returns)h(the)f(same)f
+(output)i(as)f(the)f(command)i Ft(v+C)p FK(.)p 75 5398
+1648 4 v 1764 5403 a FF(Example)p 2102 5398 V 75 5423
+4 25 v 3747 5423 V 75 5523 4 100 v 188 5493 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(\);)p 3747 5523 V 75
+5622 V 188 5592 a(a)85 b([10,5,?])45 b(randomly)g(generated)g(code)f
+(over)g(GF\(2\))p 3747 5622 V Black Black eop end end
+%%Page: 23 23
+TeXDict begin HPSdict begin 23 22 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.23) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(23)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(c:=Random\(C\);)p 3747 428 V 75 528 V 188 498 a([)f(0)f(0)h(0)g(0)f
+(0)h(0)g(0)f(0)h(0)g(0)f(])p 3747 528 V 75 628 V 188
+598 a(gap>)i(c+C;)p 3747 628 V 75 727 V 188 697 a([)f(add.)g(coset)h
+(of)f(a)85 b([10,5,?])45 b(randomly)h(generated)f(code)f(over)f
+(GF\(2\))h(])p 3747 727 V 75 827 V 188 797 a(gap>)g(c+C=C;)p
+3747 827 V 75 927 V 188 897 a(true)p 3747 927 V 75 1026
+V 188 996 a(gap>)g(IsLinearCode\(c+C\);)p 3747 1026 V
+75 1126 V 188 1096 a(false)p 3747 1126 V 75 1225 V 188
+1196 a(gap>)g(v:=Codeword\("10000000)q(0"\))q(;)p 3747
+1225 V 75 1325 V 188 1295 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(])p
+3747 1325 V 75 1425 V 188 1395 a(gap>)h(v+C;)p 3747 1425
+V 75 1524 V 188 1494 a([)f(add.)g(coset)h(of)f(a)85 b([10,5,?])45
+b(randomly)h(generated)f(code)f(over)f(GF\(2\))h(])p
+3747 1524 V 75 1624 V 188 1594 a(gap>)g(C=v+C;)p 3747
+1624 V 75 1724 V 188 1694 a(false)p 3747 1724 V 75 1823
+V 188 1793 a(gap>)g(C)e(:=)h(GeneratorMatCode\()48 b([)43
+b([1,)h(0,0,0],)g([0,)g(1,0,0])g(],)f(GF\(2\))h(\);)p
+3747 1823 V 75 1923 V 188 1893 a(a)f(linear)h([4,2,1]1)h(code)f
+(defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p
+3747 1923 V 75 2022 V 188 1993 a(gap>)g(Elements\(C\);)p
+3747 2022 V 75 2122 V 188 2092 a([)f([)f(0)h(0)g(0)f(0)h(],)g([)g(0)f
+(1)h(0)g(0)f(],)h([)g(1)g(0)g(0)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(])h(])p
+3747 2122 V 75 2222 V 188 2192 a(gap>)h(v:=Codeword\("0011"\);)p
+3747 2222 V 75 2321 V 188 2291 a([)f(0)f(0)h(1)g(1)f(])p
+3747 2321 V 75 2421 V 188 2391 a(gap>)i(C+v;)p 3747 2421
+V 75 2521 V 188 2491 a([)f(add.)g(coset)h(of)f(a)g(linear)h([4,2,4]1)i
+(code)d(defined)i(by)e(generator)i(matrix)g(over)e(GF\(2\))i(])p
+3747 2521 V 75 2620 V 188 2590 a(gap>)f(Elements\(C+v\);)p
+3747 2620 V 75 2720 V 188 2690 a([)f([)f(0)h(0)g(1)f(1)h(],)g([)g(0)f
+(1)h(1)g(1)f(],)h([)g(1)g(0)g(1)f(1)h(],)g([)g(1)f(1)h(1)g(1)f(])h(])p
+3747 2720 V 75 2745 4 25 v 3747 2745 V 75 2748 3675 4
+v 75 2937 a FK(In)29 b(general,)k(the)d(operations)i(just)e(described)j
+(can)d(also)g(be)f(performed)j(on)d(code)n(w)o(ords)j(e)o(xpressed)g
+(as)d(v)o(ectors,)75 3050 y(strings)j(or)e(polynomials,)35
+b(although)d(this)f(is)f(not)h(recommended.)51 b(The)30
+b(v)o(ector)l(,)j(string)f(or)e(polynomial)i(is)f(\002rst)75
+3163 y(con)l(v)o(erted)g(to)e(a)f(code)n(w)o(ord,)j(after)e(which)g
+(the)g(normal)g(operation)i(is)d(performed.)46 b(F)o(or)27
+b(this)j(to)e(go)h(right,)h(mak)o(e)75 3276 y(sure)h(that)g(at)f(least)
+h(one)f(of)g(the)h(operands)h(is)e(a)g(code)n(w)o(ord.)50
+b(Further)31 b(more,)h(it)e(will)g(not)g(w)o(ork)h(when)f(the)g(right)
+75 3389 y(operand)c(is)e(a)g(polynomial.)33 b(In)24 b(that)h(case,)g
+(the)g(polynomial)h(operations)h(\()p Ft(FiniteFieldPolyno)q(mia)q(lO)q
+(ps)p FK(\))j(are)75 3502 y(called,)25 b(instead)g(of)e(the)h(code)n(w)
+o(ord)h(operations)i(\()p Ft(CodewordOps)p FK(\).)216
+3615 y(Some)c(other)h(code-oriented)k(operations)e(with)e(code)n(w)o
+(ords)h(are)f(described)i(in)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2775 3616 a
+SDict begin H.S end
+ 2775 3616 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2888 3553
+a
+SDict begin H.R end
+ 2888 3553 a 2888 3615 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 2888 3615 a Black FK(.)75 3774
+y
+SDict begin H.S end
+ 75 3774 a 75 3774 a
+SDict begin 13.6 H.A end
+ 75 3774 a 75 3774 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.4) cvn H.B /DEST pdfmark end
+ 75 3774 a 130
+x FM(3.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31
+b(that)e(Con)-5 b(v)o(ert)31 b(Codew)o(ords)f(to)g(V)-12
+b(ectors)29 b(or)h(P)n(olynomials)p Black 75 4022 a
+SDict begin H.S end
+ 75
+4022 a 75 4022 a
+SDict begin 13.6 H.A end
+ 75 4022 a 75 4022 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4.1) cvn H.B /DEST pdfmark end
+ 75 4022 a 92 x FJ(3.4.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(V)-10 b(ectorCodew)o(ord)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4288 a Fs(\006)22 b
+Ft(VectorCodeword\()52 b(obj)c(\))2352 b Fr(\(function\))p
+Black 216 4514 a FK(Here)31 b Ft(obj)h FK(can)g(be)f(a)g(code)h(w)o
+(ord)g(or)f(a)g(list)h(of)f(code)i(w)o(ords.)52 b(This)32
+b(function)h(returns)g(the)f(corresponding)75 4627 y(v)o(ectors)25
+b(o)o(v)o(er)e(a)h(\002nite)f(\002eld.)p 75 4708 1648
+4 v 1764 4713 a FF(Example)p 2102 4708 V 75 4733 4 25
+v 3747 4733 V 75 4832 4 100 v 188 4802 a(gap>)44 b(a)e(:=)h
+(Codeword\("011011"\);)q(;)p 3747 4832 V 75 4932 V 188
+4902 a(gap>)h(VectorCodeword\(a\);)p 3747 4932 V 75 5032
+V 188 5002 a([)f(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\)\2100,)g(0*Z\(2\),)g
+(Z\(2\)\2100,)f(Z\(2\)\2100)h(])p 3747 5032 V 75 5056
+4 25 v 3747 5056 V 75 5059 3675 4 v 75 5189 a
+SDict begin H.S end
+ 75 5189
+a 75 5189 a
+SDict begin 13.6 H.A end
+ 75 5189 a 75 5189 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4.2) cvn H.B /DEST pdfmark end
+ 75 5189 a 116 x FJ(3.4.2)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(olyCodew)o(ord)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(PolyCodeword\()51
+b(obj)d(\))2445 b Fr(\(function\))p Black Black Black
+eop end end
+%%Page: 24 24
+TeXDict begin HPSdict begin 24 23 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.24) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(24)p Black 216 399 a Ft(PolyCodeword)31
+b FK(returns)d(a)f(polynomial)i(or)e(a)f(list)i(of)f(polynomials)i(o)o
+(v)o(er)e(a)g(Galois)g(\002eld,)h(con)l(v)o(erted)h(from)75
+511 y Ft(obj)q FK(.)f(The)23 b(object)i Ft(obj)f FK(can)g(be)f(a)g
+(code)n(w)o(ord,)i(or)f(a)f(list)h(of)f(code)n(w)o(ords.)p
+75 631 1648 4 v 1764 636 a FF(Example)p 2102 631 V 75
+656 4 25 v 3747 656 V 75 756 4 100 v 188 726 a(gap>)44
+b(a)e(:=)h(Codeword\("011011"\);)q(;)p 3747 756 V 75
+856 V 188 826 a(gap>)h(PolyCodeword\(a\);)p 3747 856
+V 75 955 V 188 925 a(x_1+x_1\2102+x_1\2104+x_1\210)q(5)p
+3747 955 V 75 980 4 25 v 3747 980 V 75 983 3675 4 v 75
+1126 a
+SDict begin H.S end
+ 75 1126 a 75 1126 a
+SDict begin 13.6 H.A end
+ 75 1126 a 75 1126 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.5) cvn H.B /DEST pdfmark end
+ 75 1126
+a 150 x FM(3.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31
+b(that)e(Change)i(the)g(Display)f(F)m(orm)f(of)h(a)f(Codew)o(ord)p
+Black 75 1394 a
+SDict begin H.S end
+ 75 1394 a 75 1394 a
+SDict begin 13.6 H.A end
+ 75 1394 a 75 1394
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.5.1) cvn H.B /DEST pdfmark end
+ 75 1394 a 92 x FJ(3.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(T)-7 b(r)n(eatAsV)d(ector)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1660 a Fs(\006)22 b Ft(TreatAsVector\()52 b(obj)47
+b(\))2399 b Fr(\(function\))p Black 216 1886 a Ft(TreatAsVector)30
+b FK(adapts)e(the)e(code)n(w)o(ords)i(in)e Ft(obj)g FK(to)h(mak)o(e)f
+(sure)h(the)o(y)f(are)g(printed)i(as)e(v)o(ectors.)38
+b Ft(obj)26 b FK(may)75 1999 y(be)e(a)g(code)n(w)o(ord)i(or)e(a)g(list)
+g(of)g(code)n(w)o(ords.)33 b(Elements)25 b(of)f Ft(obj)g
+FK(that)h(are)g(not)f(code)n(w)o(ords)i(are)f(ignored.)32
+b(After)25 b(this)75 2112 y(function)j(is)e(called,)i(the)e(code)n(w)o
+(ords)i(will)d(be)h(treated)i(as)e(v)o(ectors.)37 b(The)26
+b(v)o(ector)h(representation)j(is)c(obtained)i(by)75
+2225 y(using)d(the)f(coef)n(\002cient)h(list)f(of)f(the)h(polynomial.)
+216 2338 y(Note)30 b(that)h(this)g Fq(only)f FK(changes)i(the)f(w)o(ay)
+f(a)f(code)n(w)o(ord)j(is)e Fq(printed)p FK(.)50 b Ft(TreatAsVector)34
+b FK(returns)e(nothing,)h(it)75 2451 y(is)28 b(called)i(only)g(for)f
+(its)f(side)h(ef)n(fect.)45 b(The)28 b(function)j Ft(VectorCodeword)i
+FK(con)l(v)o(erts)e(code)n(w)o(ords)f(to)f(v)o(ectors)h(\(see)75
+2564 y Ft(VectorCodeword)e FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 777 2565 a
+SDict begin H.S end
+ 777 2565 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+958 2502 a
+SDict begin H.R end
+ 958 2502 a 958 2564 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.1) cvn H.B /ANN pdfmark end
+ 958 2564 a Black FK(\)\).)p
+75 2680 1648 4 v 1764 2685 a FF(Example)p 2102 2680 V
+75 2705 4 25 v 3747 2705 V 75 2805 4 100 v 188 2775 a(gap>)44
+b(B)e(:=)h(BinaryGolayCode\(\);)p 3747 2805 V 75 2904
+V 188 2874 a(a)g(cyclic)h([23,12,7]3)i(binary)e(Golay)g(code)g(over)g
+(GF\(2\))p 3747 2904 V 75 3004 V 188 2974 a(gap>)g(c)e(:=)h
+(CodewordNr\(B,)k(4\);)p 3747 3004 V 75 3103 V 188 3074
+a(x\21022)d(+)e(x\21020)i(+)f(x\21017)g(+)g(x\21014)h(+)e(x\21013)i(+)f
+(x\21012)h(+)e(x\21011)i(+)f(x\21010)p 3747 3103 V 75
+3203 V 188 3173 a(gap>)h(TreatAsVector\(c\);)p 3747 3203
+V 75 3303 V 188 3273 a(gap>)g(c;)p 3747 3303 V 75 3402
+V 188 3372 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(1)h(1)g(1)f(1)
+h(1)g(0)g(0)f(1)h(0)g(0)f(1)h(0)g(1)f(])p 3747 3402 V
+75 3427 4 25 v 3747 3427 V 75 3430 3675 4 v 75 3563 a
+SDict begin H.S end
+
+75 3563 a 75 3563 a
+SDict begin 13.6 H.A end
+ 75 3563 a 75 3563 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.5.2) cvn H.B /DEST pdfmark end
+ 75 3563 a 116
+x FJ(3.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-7 b(r)n(eatAsP)n(oly)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3854 a Fs(\006)22 b
+Ft(TreatAsPoly\()51 b(obj)d(\))2491 b Fr(\(function\))p
+Black 216 4079 a Ft(TreatAsPoly)23 b FK(adapts)f(the)e(code)n(w)o(ords)
+i(in)d Ft(obj)i FK(to)e(mak)o(e)i(sure)f(the)o(y)g(are)h(printed)g(as)f
+(polynomials.)30 b Ft(obj)20 b FK(may)75 4192 y(be)k(a)g(code)n(w)o
+(ord)i(or)e(a)g(list)g(of)g(code)n(w)o(ords.)33 b(Elements)25
+b(of)f Ft(obj)g FK(that)h(are)g(not)f(code)n(w)o(ords)i(are)f(ignored.)
+32 b(After)25 b(this)75 4305 y(function)31 b(is)e(called,)i(the)e(code)
+n(w)o(ords)i(will)d(be)h(treated)h(as)f(polynomials.)47
+b(The)29 b(\002nite)g(\002eld)f(v)o(ector)i(that)f(de\002nes)75
+4418 y(the)d(code)n(w)o(ord)h(is)e(used)h(as)g(a)f(coef)n(\002cient)i
+(list)f(of)f(the)h(polynomial)i(representation,)i(where)c(the)g
+(\002rst)f(element)h(of)75 4531 y(the)j(v)o(ector)i(is)e(the)g(coef)n
+(\002cient)i(of)e(de)o(gree)h(zero,)h(the)f(second)h(element)f(is)f
+(the)g(coef)n(\002cient)i(of)e(de)o(gree)h(one,)h(etc,)75
+4644 y(until)24 b(the)g(last)g(element,)h(which)e(is)h(the)g(coef)n
+(\002cient)h(of)e(highest)j(de)o(gree.)216 4757 y(Note)k(that)h(this)g
+Fq(only)g FK(changes)h(the)f(w)o(ay)f(a)g(code)n(w)o(ord)h(is)g
+Fq(printed)p FK(.)50 b Ft(TreatAsPoly)34 b FK(returns)e(nothing,)h(it)d
+(is)75 4870 y(called)f(only)g(for)g(its)f(side)h(ef)n(fect.)43
+b(The)28 b(function)i Ft(PolyCodeword)i FK(con)l(v)o(erts)e(code)n(w)o
+(ords)g(to)e(polynomials)j(\(see)75 4983 y Ft(PolyCodeword)c
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 684 4984 a
+SDict begin H.S end
+ 684
+4984 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 865 4921 a
+SDict begin H.R end
+ 865 4921
+a 865 4983 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.2) cvn H.B /ANN pdfmark end
+ 865 4983 a Black FK(\)\).)p 75 5099 1648
+4 v 1764 5104 a FF(Example)p 2102 5099 V 75 5124 4 25
+v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44 b(a)e(:=)h
+(Codeword\("00001",GF)q(\(2\))q(\);)p 3747 5224 V 75
+5323 V 188 5293 a([)g(0)f(0)h(0)g(0)f(1)h(])p 3747 5323
+V 75 5423 V 188 5393 a(gap>)h(TreatAsPoly\(a\);)j(a;)p
+3747 5423 V 75 5523 V 188 5493 a(x\2104)p 3747 5523 V
+75 5622 V 188 5592 a(gap>)d(b)e(:=)h(NullWord\(6,GF\(4\)\);)p
+3747 5622 V Black Black eop end end
+%%Page: 25 25
+TeXDict begin HPSdict begin 25 24 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.25) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(25)p Black 75 428 4 100 v 188 399 a FF([)43
+b(0)f(0)h(0)g(0)f(0)h(0)g(])p 3747 428 V 75 528 V 188
+498 a(gap>)h(TreatAsPoly\(b\);)j(b;)p 3747 528 V 75 628
+V 188 598 a(0)p 3747 628 V 75 653 4 25 v 3747 653 V 75
+656 3675 4 v 75 799 a
+SDict begin H.S end
+ 75 799 a 75 799 a
+SDict begin 13.6 H.A end
+ 75 799 a 75 799
+a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3.6) cvn H.B /DEST pdfmark end
+ 75 799 a 149 x FM(3.6)p 0.0 0.0 1.0 TeXcolorrgb 119
+w(Other)30 b(Codew)o(ord)h(Functions)p Black 75 1045
+a
+SDict begin H.S end
+ 75 1045 a 75 1045 a
+SDict begin 13.6 H.A end
+ 75 1045 a 75 1045 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.1) cvn H.B /DEST pdfmark end
+ 75 1045 a 114
+x FJ(3.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(NullW)-7 b(ord)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1333 a Fs(\006)22 b
+Ft(NullWord\()50 b(n,)d(F)g(\))2584 b Fr(\(function\))p
+Black 216 1559 a FK(Other)20 b(uses:)28 b Ft(NullWord\()50
+b(n)c(\))20 b FK(\(def)o(ault)h Fq(F)j Fo(=)16 b Fq(GF)7
+b Fo(\()p FK(2)p Fo(\))p FK(\))20 b(and)g Ft(NullWord\()50
+b(C)d(\))p FK(.)19 b Ft(NullWord)j FK(returns)f(a)e(code-)75
+1672 y(w)o(ord)j(of)h(length)h Ft(n)d FK(o)o(v)o(er)i(the)f(\002eld)h
+Ft(F)e FK(of)i(only)g(zeros.)29 b(The)22 b(inte)o(ger)i
+Ft(n)e FK(must)g(be)g(greater)i(then)f(zero.)29 b(If)22
+b(only)h(a)f(code)75 1785 y Ft(C)h FK(is)g(speci\002ed,)i
+Ft(NullWord)h FK(will)d(return)i(a)e(null)h(w)o(ord)g(with)f(both)h
+(the)g(w)o(ord)g(length)h(and)f(the)g(Galois)g(\002eld)f(of)h
+Ft(C)p FK(.)p 75 1907 1648 4 v 1764 1912 a FF(Example)p
+2102 1907 V 75 1932 4 25 v 3747 1932 V 75 2032 4 100
+v 188 2002 a(gap>)44 b(NullWord\(8\);)p 3747 2032 V 75
+2132 V 188 2102 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(])p
+3747 2132 V 75 2231 V 188 2201 a(gap>)h(Codeword\("0000"\))j(=)c
+(NullWord\(4\);)p 3747 2231 V 75 2331 V 188 2301 a(true)p
+3747 2331 V 75 2430 V 188 2401 a(gap>)h(NullWord\(5,GF\(16\)\);)p
+3747 2430 V 75 2530 V 188 2500 a([)f(0)f(0)h(0)g(0)f(0)h(])p
+3747 2530 V 75 2630 V 188 2600 a(gap>)h(NullWord\(ExtendedTern)q(ary)q
+(Gol)q(ay)q(Cod)q(e\(\))q(\);)p 3747 2630 V 75 2729 V
+188 2699 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(])p
+3747 2729 V 75 2754 4 25 v 3747 2754 V 75 2757 3675 4
+v 75 2890 a
+SDict begin H.S end
+ 75 2890 a 75 2890 a
+SDict begin 13.6 H.A end
+ 75 2890 a 75 2890 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.2) cvn H.B /DEST pdfmark end
+ 75
+2890 a 117 x FJ(3.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistanceCodew)o
+(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3181 a Fs(\006)22
+b Ft(DistanceCodeword\()53 b(c1,)47 b(c2)g(\))2121 b
+Fr(\(function\))p Black 216 3407 a Ft(DistanceCodeword)32
+b FK(returns)c(the)e(Hamming)h(distance)h(from)e Ft(c1)h
+FK(to)f Ft(c2)q FK(.)36 b(Both)27 b(v)n(ariables)h(must)f(be)f(code-)75
+3520 y(w)o(ords)e(with)f(equal)h(w)o(ord)f(length)i(o)o(v)o(er)e(the)g
+(same)h(Galois)f(\002eld.)29 b(The)22 b(Hamming)h(distance)j(between)e
+(tw)o(o)f(w)o(ords)75 3633 y(is)c(the)h(number)h(of)e(places)i(in)f
+(which)g(the)o(y)g(dif)n(fer)-5 b(.)28 b(As)19 b(a)g(result,)i
+Ft(DistanceCodeword)k FK(al)o(w)o(ays)20 b(returns)h(an)f(inte)o(ger)75
+3746 y(between)25 b(zero)f(and)g(the)g(w)o(ord)f(length)i(of)f(the)g
+(code)n(w)o(ords.)p 75 3868 1648 4 v 1764 3873 a FF(Example)p
+2102 3868 V 75 3893 4 25 v 3747 3893 V 75 3993 4 100
+v 188 3963 a(gap>)44 b(a)e(:=)h(Codeword\([0,)k(1,)c(2,)g(0,)g(1,)g
+(2]\);;)h(b)f(:=)g(NullWord\(6,)j(GF\(3\)\);;)p 3747
+3993 V 75 4092 V 188 4062 a(gap>)e(DistanceCodeword\(a,)k(b\);)p
+3747 4092 V 75 4192 V 188 4162 a(4)p 3747 4192 V 75 4292
+V 188 4262 a(gap>)c(DistanceCodeword\(b,)k(a\);)p 3747
+4292 V 75 4391 V 188 4361 a(4)p 3747 4391 V 75 4491 V
+188 4461 a(gap>)c(DistanceCodeword\(a,)k(a\);)p 3747
+4491 V 75 4590 V 188 4561 a(0)p 3747 4590 V 75 4615 4
+25 v 3747 4615 V 75 4618 3675 4 v 75 4752 a
+SDict begin H.S end
+ 75 4752 a
+75 4752 a
+SDict begin 13.6 H.A end
+ 75 4752 a 75 4752 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.3) cvn H.B /DEST pdfmark end
+ 75 4752 a 116 x FJ(3.6.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Support)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 5042 a Fs(\006)22 b Ft(Support\()50 b(c)c(\))2770
+b Fr(\(function\))p Black 216 5268 a Ft(Support)24 b
+FK(returns)f(a)e(set)h(of)g(inte)o(gers)h(indicating)i(the)d(positions)
+i(of)e(the)g(non-zero)i(entries)f(in)f(a)f(code)n(w)o(ord)i
+Ft(c)q FK(.)p 75 5391 1648 4 v 1764 5396 a FF(Example)p
+2102 5391 V 75 5415 4 25 v 3747 5415 V 75 5515 4 100
+v 188 5485 a(gap>)44 b(a)e(:=)h(Codeword\("012320023)q(002)q("\))q(;;)
+49 b(Support\(a\);)p 3747 5515 V 75 5615 V 188 5585 a([)43
+b(2,)g(3,)g(4,)g(5,)g(8,)g(9,)g(12)g(])p 3747 5615 V
+Black Black eop end end
+%%Page: 26 26
+TeXDict begin HPSdict begin 26 25 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.26) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(26)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(Support\(NullWord\(7\)\);)p 3747 428 V 75 528 V 188
+498 a([)85 b(])p 3747 528 V 75 553 4 25 v 3747 553 V
+75 556 3675 4 v 75 769 a FK(The)23 b(support)i(of)e(a)g(list)g(with)g
+(code)n(w)o(ords)i(can)f(be)f(calculated)j(by)d(taking)i(the)e(union)i
+(of)e(the)g(indi)n(vidual)j(supports.)75 882 y(The)d(weight)h(of)g(the)
+g(support)h(is)e(the)h(length)h(of)f(the)f(set.)p 75
+979 1648 4 v 1764 984 a FF(Example)p 2102 979 V 75 1004
+4 25 v 3747 1004 V 75 1104 4 100 v 188 1074 a(gap>)44
+b(L)e(:=)h(Codeword\(["000000",)49 b("101010",)d("222000"],)f
+(GF\(3\)\);;)p 3747 1104 V 75 1204 V 188 1174 a(gap>)f(S)e(:=)h
+(Union\(List\(L,)k(i)c(->)g(Support\(i\)\)\);)p 3747
+1204 V 75 1303 V 188 1273 a([)g(1,)g(2,)g(3,)g(5)f(])p
+3747 1303 V 75 1403 V 188 1373 a(gap>)i(Length\(S\);)p
+3747 1403 V 75 1502 V 188 1473 a(4)p 3747 1502 V 75 1527
+4 25 v 3747 1527 V 75 1530 3675 4 v 75 1664 a
+SDict begin H.S end
+ 75 1664
+a 75 1664 a
+SDict begin 13.6 H.A end
+ 75 1664 a 75 1664 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.4) cvn H.B /DEST pdfmark end
+ 75 1664 a 116 x FJ(3.6.4)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightCodew)o(ord)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1954 a Fs(\006)22 b
+Ft(WeightCodeword\()52 b(c)47 b(\))2445 b Fr(\(function\))p
+Black 216 2180 a Ft(WeightCodeword)31 b FK(returns)e(the)e(weight)g(of)
+g(a)f(code)n(w)o(ord)i Fq(c)p FK(,)f(the)g(number)h(of)f(non-zero)i
+(entries)f(in)f Ft(c)p FK(.)38 b(As)26 b(a)75 2293 y(result,)21
+b Ft(WeightCodeword)i FK(al)o(w)o(ays)d(returns)g(an)f(inte)o(ger)i
+(between)f(zero)f(and)h(the)f(w)o(ord)g(length)h(of)f(the)g(code)n(w)o
+(ord.)p 75 2415 1648 4 v 1764 2420 a FF(Example)p 2102
+2415 V 75 2440 4 25 v 3747 2440 V 75 2540 4 100 v 188
+2510 a(gap>)44 b(WeightCodeword\(Codewo)q(rd\()q("22)q(22)q(2"\))q(\);)
+p 3747 2540 V 75 2640 V 188 2610 a(5)p 3747 2640 V 75
+2739 V 188 2709 a(gap>)g(WeightCodeword\(NullWo)q(rd\()q(3\)\))q(;)p
+3747 2739 V 75 2839 V 188 2809 a(0)p 3747 2839 V 75 2939
+V 188 2909 a(gap>)g(C)e(:=)h(HammingCode\(3\);)p 3747
+2939 V 75 3038 V 188 3008 a(a)g(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f
+(code)g(over)f(GF\(2\))p 3747 3038 V 75 3138 V 188 3108
+a(gap>)h(Minimum\(List\(AsSSorte)q(dLi)q(st\()q(C\))q({[2)q(..S)q(ize)q
+(\(C\))q(]},)49 b(WeightCodeword)e(\))c(\);)p 3747 3138
+V 75 3237 V 188 3208 a(3)p 3747 3237 V 75 3262 4 25 v
+3747 3262 V 75 3265 3675 4 v Black Black eop end end
+%%Page: 27 27
+TeXDict begin HPSdict begin 27 26 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.27) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.4) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(4)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Codes)p Black 75 1881 a FK(A)30 b Fq(code)i FK(is)e(a)h(set)g(of)g
+(code)n(w)o(ords)i(\(recall)f(a)61 b(code)n(w)o(ord)32
+b(in)f Fy(GU)m(A)-6 b(V)f(A)29 b FK(is)i(simply)h(a)e(sequence)k(of)c
+(elements)j(of)e(a)75 1994 y(\002nite)26 b(\002eld)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)26 b(where)f Fq(q)g
+FK(is)h(a)f(prime)h(po)n(wer\).)34 b(W)-7 b(e)25 b(call)h(these)g(the)g
+Fq(elements)h FK(of)e(the)h(code.)36 b(Depending)27 b(on)75
+2107 y(the)h(type)g(of)f(code,)i(a)e(code)n(w)o(ord)i(can)f(be)f
+(interpreted)k(as)c(a)g(v)o(ector)i(or)e(as)g(a)g(polynomial.)43
+b(This)27 b(is)h(e)o(xplained)h(in)75 2220 y(more)24
+b(detail)g(in)g(Chapter)p 0.0236 0.0894 0.6179 TeXcolorrgb
+913 2221 a
+SDict begin H.S end
+ 913 2221 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(3)p 0.0236 0.0894 0.6179 TeXcolorrgb 958 2158
+a
+SDict begin H.R end
+ 958 2158 a 958 2220 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.3) cvn H.B /ANN pdfmark end
+ 958 2220 a Black FK(.)216 2333
+y(In)i Fy(GU)m(A)-6 b(V)f(A)p FK(,)24 b(codes)j(can)g(be)f(a)f(set)h
+(speci\002ed)i(by)e(its)g(elements)h(\(this)g(will)f(be)g(called)h(an)f
+Fq(unr)m(estricted)j(code)p FK(\),)75 2446 y(by)e(a)f(generator)j
+(matrix)e(listing)h(a)e(set)h(of)f(basis)i(elements)g(\(for)f(a)f
+(linear)i(code\))g(or)e(by)h(a)f(generator)j(polynomial)75
+2559 y(\(for)24 b(a)f(c)o(yclic)i(code\).)216 2672 y(An)o(y)e(code)h
+(can)g(be)g(de\002ned)g(by)g(its)f(elements.)31 b(If)23
+b(you)h(lik)o(e,)g(you)g(can)g(gi)n(v)o(e)f(the)h(code)h(a)e(name.)p
+75 2769 1648 4 v 1764 2774 a FF(Example)p 2102 2769 V
+75 2794 4 25 v 3747 2794 V 75 2894 4 100 v 188 2864 a(gap>)44
+b(C)e(:=)h(ElementsCode\(["1100)q(",)49 b("1010",)c("0001"],)g
+("example)g(code",)f(GF\(2\))g(\);)p 3747 2894 V 75 2994
+V 188 2964 a(a)f(\(4,3,1..4\)2..4)k(example)d(code)g(over)g(GF\(2\))p
+3747 2994 V 75 3018 4 25 v 3747 3018 V 75 3021 3675 4
+v 75 3209 a FK(An)27 b Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t
+Fp(;)g Fq(d)5 b Fo(\))28 b FK(code)g(is)f(a)g(code)h(with)g(w)o(ord)f
+Fq(length)i(n)p FK(,)f Fq(size)g(M)i FK(and)e Fq(minimum)f(distance)j
+(d)5 b FK(.)119 b(If)28 b(the)f(minimum)75 3322 y(distance)e(has)f(not)
+g(yet)g(been)g(calculated,)i(the)e(lo)n(wer)f(bound)i(and)f(upper)g
+(bound)h(are)f(printed)h(\(e)o(xcept)g(in)e(the)h(case)75
+3435 y(where)g(the)g(code)g(is)f(a)g(random)i(linear)g(codes,)f(where)g
+(these)g(are)g(not)g(printed)h(for)f(ef)n(\002cienc)o(y)h(reasons\).)30
+b(So)p Black Black 168 3623 a Ft(a)46 b(\(4,3,1..4\)2..4)52
+b(code)c(over)g(GF\(2\))75 3810 y FK(means)30 b(a)f(binary)i
+(unrestricted)i(code)d(of)g(length)h(4,)f(with)f(3)h(elements)h(and)f
+(the)f(minimum)h(distance)h(is)f(greater)75 3923 y(than)25
+b(or)g(equal)h(to)e(1)g(and)h(less)h(than)f(or)f(equal)i(to)f(4)f(and)h
+(the)g(co)o(v)o(ering)h(radius)g(is)e(greater)i(than)g(or)e(equal)i(to)
+e(2)h(and)75 4036 y(less)f(than)g(or)g(equal)g(to)g(4.)p
+75 4134 1648 4 v 1764 4139 a FF(Example)p 2102 4134 V
+75 4159 4 25 v 3747 4159 V 75 4259 4 100 v 188 4229 a(gap>)44
+b(C)e(:=)h(ElementsCode\(["1100)q(",)49 b("1010",)c("0001"],)g
+("example)g(code",)f(GF\(2\))g(\);)p 3747 4259 V 75 4358
+V 188 4328 a(a)f(\(4,3,1..4\)2..4)k(example)d(code)g(over)g(GF\(2\))p
+3747 4358 V 75 4458 V 188 4428 a(gap>)g(MinimumDistance\(C\);)p
+3747 4458 V 75 4557 V 188 4528 a(2)p 3747 4557 V 75 4657
+V 188 4627 a(gap>)g(C;)p 3747 4657 V 75 4757 V 188 4727
+a(a)f(\(4,3,2\)2..4)j(example)e(code)g(over)g(GF\(2\))p
+3747 4757 V 75 4782 4 25 v 3747 4782 V 75 4785 3675 4
+v 75 4973 a FK(If)27 b(the)h(set)g(of)f(elements)i(is)e(a)h(linear)g
+(subspace)i(of)e Fq(GF)6 b Fo(\()p Fq(q)p Fo(\))1969
+4940 y Fm(n)2008 4973 y FK(,)27 b(the)h(code)g(is)g(called)h
+Fq(linear)p FK(.)42 b(If)27 b(a)g(code)h(is)g(linear)l(,)h(it)75
+5085 y(can)21 b(be)g(de\002ned)h(by)f(its)f Fq(g)o(ener)o(ator)k
+(matrix)d FK(or)g Fq(parity)h(c)o(hec)n(k)g(matrix)p
+FK(.)56 b(By)20 b(de\002nition,)i(the)f(ro)n(ws)g(of)g(the)g(generator)
+75 5198 y(matrix)31 b(is)e(a)h(basis)h(for)f(the)g(code)h(\(as)f(a)g(v)
+o(ector)g(space)i(o)o(v)o(er)e Fq(GF)6 b Fo(\()p Fq(q)p
+Fo(\))p FK(\).)49 b(By)29 b(de\002nition,)k(the)d(ro)n(ws)g(of)g(the)g
+(parity)75 5311 y(check)25 b(matrix)f(is)f(a)g(basis)i(for)f(the)f
+(dual)i(space)f(of)g(the)g(code,)1084 5515 y Fq(C)1147
+5478 y Fh(\003)1204 5515 y Fo(=)c Fv(f)p Fq(v)h Fv(2)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))1726 5478 y Fm(n)1787
+5515 y Fv(j)23 b Fq(v)13 b Fv(\001)g Fq(c)20 b Fo(=)g
+FK(0)p Fp(;)47 b Fq(f)13 b(or)26 b(al)5 b(l)28 b(c)21
+b Fv(2)15 b Fq(C)r Fv(g)p Fp(:)p Black 1867 5841 a FK(27)p
+Black eop end end
+%%Page: 28 28
+TeXDict begin HPSdict begin 28 27 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.28) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(28)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(G)e(:=)h(GeneratorMatCode\([[)q(1,0)q(,1)q(],[)q(0,1)q
+(,2])q(],)49 b("demo)44 b(code",)g(GF\(3\))g(\);)p 3747
+523 V 75 623 V 188 593 a(a)f(linear)h([3,2,1..2]1)i(demo)e(code)f(over)
+h(GF\(3\))p 3747 623 V 75 648 4 25 v 3747 648 V 75 651
+3675 4 v 75 862 a FK(So)21 b(a)f(linear)j Fo([)p Fq(n)p
+Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])p Fq(r)24 b FK(code)e(is)g(a)f
+(code)h(with)f(w)o(ord)g Fq(length)i(n)p FK(,)e Fq(dimension)i(k)r
+FK(,)e Fq(minimum)g(distance)i(d)j FK(and)c Fq(co)o(vering)75
+975 y(r)o(adius)j(r)r FK(.)216 1088 y(If)k(the)g(code)h(is)f(linear)i
+(and)e(all)g(c)o(yclic)h(shifts)h(of)e(its)g(code)n(w)o(ords)i(\(re)o
+(garded)g(as)e Fq(n)p FK(-tuples\))i(are)e(again)h(code-)75
+1201 y(w)o(ords,)25 b(the)g(code)h(is)e(called)i Fq(cyclic)p
+FK(.)34 b(All)24 b(elements)i(of)f(a)f(c)o(yclic)i(code)g(are)e
+(multiples)j(of)e(the)g(monic)g(polynomial)75 1314 y(modulo)k(a)f
+(polynomial)j Fq(x)930 1281 y Fm(n)982 1314 y Fv(\000)14
+b FK(1,)29 b(where)f Fq(n)g FK(is)g(the)g(w)o(ord)h(length)g(of)g(the)f
+(code.)44 b(Such)28 b(a)g(polynomial)i(is)e(called)i(a)75
+1427 y Fq(g)o(ener)o(ator)e(polynomial)h FK(The)c(generator)j
+(polynomial)h(must)c(di)n(vide)j Fq(x)2357 1394 y Fm(n)2408
+1427 y Fv(\000)13 b FK(1)26 b(and)g(its)g(quotient)i(is)e(called)h(a)e
+Fq(c)o(hec)n(k)75 1540 y(polynomial)p FK(.)46 b(Multiplying)31
+b(a)e(code)n(w)o(ord)h(in)e(a)g(c)o(yclic)i(code)f(by)g(the)g(check)h
+(polynomial)h(yields)f(zero)f(\(modulo)75 1653 y(the)c(polynomial)h
+Fq(x)687 1620 y Fm(n)738 1653 y Fv(\000)13 b FK(1\).)31
+b(In)24 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)22 b(a)i(c)o(yclic)h(code)g(can)g
+(be)f(de\002ned)h(by)g(either)g(its)g(generator)i(polynomial)f(or)75
+1766 y(check)f(polynomial.)p 75 1862 1648 4 v 1764 1867
+a FF(Example)p 2102 1862 V 75 1887 4 25 v 3747 1887 V
+75 1987 4 100 v 188 1957 a(gap>)44 b(G)e(:=)h(GeneratorPolCode\(In)q
+(det)q(er)q(min)q(ate)q(\(GF)q(\(2\))q(\)+Z)q(\(2\))q(\2100,)49
+b(7,)43 b(GF\(2\))h(\);)p 3747 1987 V 75 2086 V 188 2057
+a(a)f(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i
+(polynomial)h(over)d(GF\(2\))p 3747 2086 V 75 2111 4
+25 v 3747 2111 V 75 2114 3675 4 v 75 2301 a FK(It)19
+b(is)h(possible)h(that)f Fy(GU)m(A)-6 b(V)f(A)18 b FK(does)i(not)g(kno)
+n(w)f(that)i(an)e(unrestricted)k(code)d(is)g(in)f(f)o(act)h(linear)-5
+b(.)29 b(This)19 b(situation)j(occurs)75 2414 y(for)28
+b(e)o(xample)h(when)f(a)f(code)i(is)f(generated)i(from)e(a)g(list)g(of)
+g(elements)h(with)f(the)g(function)i Ft(ElementsCode)i
+FK(\(see)75 2527 y Ft(ElementsCode)27 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 684 2528 a
+SDict begin H.S end
+ 684 2528 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+865 2465 a
+SDict begin H.R end
+ 865 2465 a 865 2527 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.1) cvn H.B /ANN pdfmark end
+ 865 2527 a Black FK(\)\).)i(By)23
+b(calling)i(the)e(function)j Ft(IsLinearCode)h FK(\(see)c
+Ft(IsLinearCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3191 2528 a
+SDict begin H.S end
+ 3191 2528 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3372
+2465 a
+SDict begin H.R end
+ 3372 2465 a 3372 2527 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.4) cvn H.B /ANN pdfmark end
+ 3372 2527 a Black FK(\)\),)d
+Fy(GU)m(A)-6 b(V)f(A)75 2640 y FK(tests)29 b(if)f(the)h(code)g(can)f
+(be)g(represented)k(by)c(a)g(generator)j(matrix.)43 b(If)28
+b(so,)h(the)f(code)i(record)f(and)g(the)f(operations)75
+2753 y(are)c(con)l(v)o(erted)i(accordingly)-6 b(.)p 75
+2850 1648 4 v 1764 2855 a FF(Example)p 2102 2850 V 75
+2875 4 25 v 3747 2875 V 75 2974 4 100 v 188 2944 a(gap>)44
+b(L)e(:=)h(Z\(2\)*[)i([0,0,0],)g([1,0,0],)g([0,1,1],)g([1,1,1])g(];;)p
+3747 2974 V 75 3074 V 188 3044 a(gap>)f(C)e(:=)h(ElementsCode\()k(L,)c
+(GF\(2\))h(\);)p 3747 3074 V 75 3174 V 188 3144 a(a)f(\(3,4,1..3\)1)j
+(user)d(defined)i(unrestricted)i(code)c(over)h(GF\(2\))p
+3747 3174 V 75 3273 V 188 3243 a(#)f(so)g(far,)g(GUAVA)h(does)g(not)f
+(know)h(what)g(kind)g(of)f(code)g(this)h(is)p 3747 3273
+V 75 3373 V 188 3343 a(gap>)g(IsLinearCode\()i(C)d(\);)p
+3747 3373 V 75 3472 V 188 3443 a(true)933 b(#)42 b(it)h(is)h(linear)p
+3747 3472 V 75 3572 V 188 3542 a(gap>)g(C;)p 3747 3572
+V 75 3672 V 188 3642 a(a)f(linear)h([3,2,1]1)h(user)f(defined)g
+(unrestricted)j(code)d(over)f(GF\(2\))p 3747 3672 V 75
+3697 4 25 v 3747 3697 V 75 3700 3675 4 v 75 3887 a FK(Of)20
+b(course)j(the)e(same)g(holds)h(for)f(unrestricted)k(codes)d(that)g(in)
+f(f)o(act)g(are)h(c)o(yclic,)g(or)f(codes,)h(de\002ned)g(by)f(a)g
+(generator)75 4000 y(matrix,)j(that)g(actually)h(are)f(c)o(yclic.)216
+4112 y(Codes)i(are)g(printed)i(simply)e(by)g(gi)n(ving)h(a)f(small)g
+(description)j(of)c(their)i(parameters,)h(the)e(w)o(ord)g(length,)i
+(size)75 4225 y(or)22 b(dimension)i(and)f(perhaps)h(the)e(minimum)g
+(distance,)j(follo)n(wed)e(by)f(a)g(short)h(description)i(and)e(the)f
+(base)h(\002eld)f(of)75 4338 y(the)27 b(code.)40 b(The)26
+b(function)j Ft(Display)g FK(gi)n(v)o(es)e(a)g(more)f(detailed)j
+(description,)i(sho)n(wing)d(the)f(construction)j(history)75
+4451 y(of)23 b(the)h(code.)216 4564 y Fy(GU)m(A)-6 b(V)f(A)28
+b FK(doesn')n(t)33 b(place)e(much)g(emphasis)h(on)e(the)g(actual)i
+(encoding)h(and)e(decoding)h(processes;)37 b(some)30
+b(al-)75 4677 y(gorithms)g(ha)n(v)o(e)f(been)h(included)h(though.)46
+b(Encoding)30 b(w)o(orks)f(simply)g(by)g(multiplying)i(an)e
+(information)i(v)o(ector)75 4790 y(with)26 b(a)f(code,)i(decoding)h(is)
+d(done)i(by)f(the)g(functions)i Ft(Decode)f FK(or)f Ft(Decodeword)p
+FK(.)38 b(F)o(or)25 b(more)h(information)i(about)75 4903
+y(encoding)e(and)e(decoding,)i(see)e(sections)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1418 4904 a
+SDict begin H.S end
+ 1418 4904 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1531 4841 a
+SDict begin H.R end
+ 1531 4841 a 1531 4903 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 1531 4903 a Black
+24 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 1709 4904
+a
+SDict begin H.S end
+ 1709 4904 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1935 4841 a
+SDict begin H.R end
+ 1935 4841
+a 1935 4903 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end
+ 1935 4903 a Black FK(.)p 75 5000 1648 4
+v 1764 5005 a FF(Example)p 2102 5000 V 75 5024 4 25 v
+3747 5024 V 75 5124 4 100 v 188 5094 a(gap>)44 b(R)e(:=)h
+(ReedMullerCode\()48 b(1,)43 b(3)f(\);)p 3747 5124 V
+75 5224 V 188 5194 a(a)h(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e
+(code)g(over)g(GF\(2\))p 3747 5224 V 75 5323 V 188 5293
+a(gap>)g(w)e(:=)h([)g(1,)g(0,)g(1,)g(1)g(])f(*)h(R;)p
+3747 5323 V 75 5423 V 188 5393 a([)g(1)f(0)h(0)g(1)f(1)h(0)g(0)f(1)h(])
+p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(Decode\()g(R,)f(w)g(\);)p
+3747 5523 V 75 5622 V 188 5592 a([)g(1)f(0)h(1)g(1)f(])p
+3747 5622 V Black Black eop end end
+%%Page: 29 29
+TeXDict begin HPSdict begin 29 28 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.29) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(29)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(Decode\()g(R,)f(w)g(+)g("10000000")i(\);)f(#)e(One)i(error)g(at)f
+(the)g(first)h(position)p 3747 428 V 75 528 V 188 498
+a([)f(1)f(0)h(1)g(1)f(])975 b(#)42 b(Corrected)k(by)d(Guava)p
+3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75
+714 a FK(Sections)p 0.0236 0.0894 0.6179 TeXcolorrgb
+424 715 a
+SDict begin H.S end
+ 424 715 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 537 652
+a
+SDict begin H.R end
+ 537 652 a 537 714 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.1) cvn H.B /ANN pdfmark end
+ 537 714 a Black 42 w FK(and)p 0.0236 0.0894 0.6179
+TeXcolorrgb 752 715 a
+SDict begin H.S end
+ 752 715 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+865 652 a
+SDict begin H.R end
+ 865 652 a 865 714 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 865 714 a Black 41 w FK(describe)i(the)d
+(operations)j(that)d(are)h(a)n(v)n(ailable)h(for)e(codes.)85
+b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3292 715
+a
+SDict begin H.S end
+ 3292 715 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3405 652 a
+SDict begin H.R end
+ 3405 652
+a 3405 714 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.3) cvn H.B /ANN pdfmark end
+ 3405 714 a Black 42 w FK(describe)75 826
+y(the)44 b(functions)j(that)e(tests)f(whether)i(an)e(object)h(is)f(a)g
+(code)g(and)h(what)f(kind)h(of)f(code)h(it)f(is)f(\(see)i
+Ft(IsCode)p FK(,)75 939 y Ft(IsLinearCode)d FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 699 940 a
+SDict begin H.S end
+ 699 940 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+880 877 a
+SDict begin H.R end
+ 880 877 a 880 939 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.4) cvn H.B /ANN pdfmark end
+ 880 939 a Black FK(\))d(and)g
+Ft(IsCyclicCode)p FK(\))k(and)c(v)n(arious)h(other)g(boolean)g
+(functions)i(for)c(codes.)75 b(Sec-)75 1052 y(tion)p
+0.0236 0.0894 0.6179 TeXcolorrgb 241 1053 a
+SDict begin H.S end
+ 241 1053
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4)p 0.0236 0.0894 0.6179
+TeXcolorrgb 354 990 a
+SDict begin H.R end
+ 354 990 a 354 1052 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.4) cvn H.B /ANN pdfmark end
+ 354 1052 a
+Black 24 w FK(describe)28 b(functions)f(about)f(equi)n(v)n(alence)i
+(and)e(isomorphism)h(of)e(codes)h(\(see)f Ft(IsEquivalent)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 1053 a
+SDict begin H.S end
+
+3515 1053 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3696 990 a
+SDict begin H.R end
+ 3696 990
+a 3696 1052 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end
+ 3696 1052 a Black FK(\),)75 1165 y Ft(CodeIsomorphism)38
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 833 1166 a
+SDict begin H.S end
+
+833 1166 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1014 1103 a
+SDict begin H.R end
+ 1014 1103
+a 1014 1165 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.2) cvn H.B /ANN pdfmark end
+ 1014 1165 a Black FK(\))d(and)f Ft(AutomorphismGroup)39
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2094 1166
+a
+SDict begin H.S end
+ 2094 1166 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2275 1103 a
+SDict begin H.R end
+ 2275 1103
+a 2275 1165 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.3) cvn H.B /ANN pdfmark end
+ 2275 1165 a Black FK(\)\).)61 b(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2724 1166 a
+SDict begin H.S end
+ 2724 1166
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2837 1103 a
+SDict begin H.R end
+ 2837 1103 a 2837 1165 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.5) cvn H.B /ANN pdfmark end
+ 2837
+1165 a Black 34 w FK(describes)36 b(functions)h(that)75
+1278 y(w)o(ork)28 b(on)g Fq(domains)i FK(\(see)e(Chapter)h(\224Domains)
+g(and)f(their)h(Elements\224)g(in)f(the)g Fy(GAP)e FK(Reference)k
+(Manual\).)43 b(Sec-)75 1391 y(tion)p 0.0236 0.0894 0.6179
+TeXcolorrgb 258 1392 a
+SDict begin H.S end
+ 258 1392 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+371 1329 a
+SDict begin H.R end
+ 371 1329 a 371 1391 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.6) cvn H.B /ANN pdfmark end
+ 371 1391 a Black 43
+w FK(describes)i(functions)g(for)e(printing)i(and)e(displaying)j
+(codes.)87 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2876 1392 a
+SDict begin H.S end
+ 2876 1392 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2989 1329
+a
+SDict begin H.R end
+ 2989 1329 a 2989 1391 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.7) cvn H.B /ANN pdfmark end
+ 2989 1391 a Black 42 w FK(describes)46
+b(functions)75 1504 y(that)33 b(return)h(the)e(matrices)i(and)f
+(polynomials)i(that)e(de\002ne)f(a)g(code)h(\(see)g Ft(GeneratorMat)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3110 1505 a
+SDict begin H.S end
+
+3110 1505 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3291 1442 a
+SDict begin H.R end
+ 3291 1442
+a 3291 1504 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.1) cvn H.B /ANN pdfmark end
+ 3291 1504 a Black FK(\),)f Ft(CheckMat)75
+1617 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1618
+a
+SDict begin H.S end
+ 105 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 1555 a
+SDict begin H.R end
+ 286 1555
+a 286 1617 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.2) cvn H.B /ANN pdfmark end
+ 286 1617 a Black FK(\),)24 b Ft(GeneratorPol)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 971 1618 a
+SDict begin H.S end
+ 971
+1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1152 1555 a
+SDict begin H.R end
+ 1152 1555
+a 1152 1617 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.3) cvn H.B /ANN pdfmark end
+ 1152 1617 a Black FK(\),)e Ft(CheckPol)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1653 1618 a
+SDict begin H.S end
+
+1653 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1834 1555 a
+SDict begin H.R end
+ 1834 1555
+a 1834 1617 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.4) cvn H.B /ANN pdfmark end
+ 1834 1617 a Black FK(\),)d Ft(RootsOfCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2473 1618 a
+SDict begin H.S end
+
+2473 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.5)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2654 1555 a
+SDict begin H.R end
+ 2654 1555
+a 2654 1617 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.5) cvn H.B /ANN pdfmark end
+ 2654 1617 a Black FK(\)\).)i(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3061 1618 a
+SDict begin H.S end
+ 3061 1618
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3174 1555 a
+SDict begin H.R end
+ 3174 1555 a 3174 1617 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.8) cvn H.B /ANN pdfmark end
+ 3174
+1617 a Black 23 w FK(describes)d(func-)75 1730 y(tions)36
+b(that)g(return)h(the)f(basic)g(parameters)i(of)d(codes)i(\(see)f
+Ft(WordLength)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2571 1731 a
+SDict begin H.S end
+ 2571 1731 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.8.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2752
+1668 a
+SDict begin H.R end
+ 2752 1668 a 2752 1730 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.1) cvn H.B /ANN pdfmark end
+ 2752 1730 a Black FK(\),)h
+Ft(Redundancy)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3372 1731 a
+SDict begin H.S end
+ 3372 1731 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.8.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3553
+1668 a
+SDict begin H.R end
+ 3553 1668 a 3553 1730 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.2) cvn H.B /ANN pdfmark end
+ 3553 1730 a Black FK(\))e(and)75
+1843 y Ft(MinimumDistance)30 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 825 1844 a
+SDict begin H.S end
+ 825 1844 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1006 1781 a
+SDict begin H.R end
+ 1006 1781 a 1006 1843 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end
+ 1006 1843 a Black
+FK(\)\).)37 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1423 1845 a
+SDict begin H.S end
+ 1423 1845 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(4.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 1536 1781
+a
+SDict begin H.R end
+ 1536 1781 a 1536 1843 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.9) cvn H.B /ANN pdfmark end
+ 1536 1843 a Black 26 w FK(describes)28
+b(functions)h(that)d(return)h(distance)h(and)e(weight)h(distrib)n(u-)75
+1956 y(tions)f(\(see)f Ft(WeightDistribution)31 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1335 1958 a
+SDict begin H.S end
+ 1335 1958
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1516 1894 a
+SDict begin H.R end
+ 1516 1894 a 1516 1956 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end
+ 1516
+1956 a Black FK(\),)25 b Ft(InnerDistribution)30 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2436 1958 a
+SDict begin H.S end
+ 2436 1958
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2617 1894 a
+SDict begin H.R end
+ 2617 1894 a 2617 1956 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end
+ 2617
+1956 a Black FK(\),)25 b Ft(OuterDistribution)31 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 3538 1958 a
+SDict begin H.S end
+ 3538 1958
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3719 1894 a
+SDict begin H.R end
+ 3719 1894 a 3719 1956 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.5) cvn H.B /ANN pdfmark end
+ 3719
+1956 a Black FK(\))75 2068 y(and)h Ft(DistancesDistributio)q(n)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1270 2070 a
+SDict begin H.S end
+
+1270 2070 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1451 2006 a
+SDict begin H.R end
+ 1451 2006
+a 1451 2068 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end
+ 1451 2068 a Black FK(\)\).)53 b(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1890 2069 a
+SDict begin H.S end
+ 1890 2069
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2048 2006 a
+SDict begin H.R end
+ 2048 2006 a 2048 2068 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.10) cvn H.B /ANN pdfmark end
+ 2048
+2068 a Black 31 w FK(describes)33 b(functions)h(that)e(are)f(related)i
+(to)e(decod-)75 2181 y(ing)k(\(see)g Ft(Decode)h FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 747 2182 a
+SDict begin H.S end
+ 747 2182
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 973 2119 a
+SDict begin H.R end
+ 973 2119 a 973 2181 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end
+ 973 2181
+a Black FK(\),)i Ft(Decodeword)g FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1592 2182 a
+SDict begin H.S end
+ 1592 2182 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1818 2119 a
+SDict begin H.R end
+ 1818 2119 a 1818 2181 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.2) cvn H.B /ANN pdfmark end
+ 1818 2181 a Black
+FK(\),)g Ft(Syndrome)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2343 2182 a
+SDict begin H.S end
+ 2343 2182 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.10.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 2569
+2119 a
+SDict begin H.R end
+ 2569 2119 a 2569 2181 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end
+ 2569 2181 a Black FK(\),)j
+Ft(SyndromeTable)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3327 2183 a
+SDict begin H.S end
+ 3327 2183 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(4.10.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3553
+2119 a
+SDict begin H.R end
+ 3553 2119 a 3553 2181 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.9) cvn H.B /ANN pdfmark end
+ 3553 2181 a Black FK(\))e(and)75
+2294 y Ft(StandardArray)e FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 737 2295 a
+SDict begin H.S end
+ 737 2295 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.10)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1008 2232 a
+SDict begin H.R end
+ 1008 2232 a 1008 2294 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.10) cvn H.B /ANN pdfmark end
+ 1008 2294 a Black
+FK(\)\).)50 b(In)30 b(Chapters)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1598 2295 a
+SDict begin H.S end
+ 1598 2295 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1643 2232 a
+SDict begin H.R end
+ 1643 2232 a 1643 2294 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.5) cvn H.B /ANN pdfmark end
+ 1643 2294 a Black
+30 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 1833 2295
+a
+SDict begin H.S end
+ 1833 2295 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1878 2232 a
+SDict begin H.R end
+ 1878 2232
+a 1878 2294 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.6) cvn H.B /ANN pdfmark end
+ 1878 2294 a Black 30 w FK(which)g(follo)n(w)-6
+b(,)32 b(we)d(describe)j(functions)h(that)d(generate)75
+2407 y(and)24 b(manipulate)i(codes.)75 2564 y
+SDict begin H.S end
+ 75 2564
+a 75 2564 a
+SDict begin 13.6 H.A end
+ 75 2564 a 75 2564 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.1) cvn H.B /DEST pdfmark end
+ 75 2564 a 130 x FM(4.1)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Comparisons)j(of)h(Codes)p
+Black 75 2812 a
+SDict begin H.S end
+ 75 2812 a 75 2812 a
+SDict begin 13.6 H.A end
+ 75 2812 a 75 2812
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.1.1) cvn H.B /DEST pdfmark end
+ 75 2812 a 92 x FJ(4.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(=)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3078 a Fs(\006)22
+b Ft(=\()47 b(C1,)h(C2)f(\))2816 b Fr(\(function\))p
+Black 216 3304 a FK(The)25 b(equality)i(operator)g Ft(C1)47
+b(=)g(C2)25 b FK(e)n(v)n(aluates)i(to)d(`true')j(if)d(the)i(codes)g
+Ft(C1)f FK(and)g Ft(C2)g FK(are)g(equal,)h(and)g(to)f(`f)o(alse')75
+3417 y(otherwise.)216 3530 y(The)i(equality)i(operator)h(is)d(also)h
+(denoted)h Ft(EQ)p FK(,)e(and)h Ft(Eq\(C1,C2\))i FK(is)d(the)h(same)f
+(as)g Ft(C1)47 b(=)g(C2)p FK(.)40 b(There)27 b(is)h(also)75
+3643 y(an)c(inequality)i(operator)l(,)g Fp(<)c(>)p FK(,)g(or)i
+Ft(not)47 b(EQ)p FK(.)216 3756 y(Note)19 b(that)h(codes)h(are)e(equal)i
+(if)e(and)h(only)g(if)f(their)h(set)g(of)f(elements)i(are)e(equal.)29
+b(Codes)19 b(can)h(also)g(be)g(compared)75 3869 y(with)j(objects)j(of)d
+(other)i(types.)k(Of)23 b(course)i(the)o(y)f(are)g(ne)n(v)o(er)g
+(equal.)p 75 3955 1648 4 v 1764 3960 a FF(Example)p 2102
+3955 V 75 3980 4 25 v 3747 3980 V 75 4080 4 100 v 188
+4050 a(gap>)44 b(M)e(:=)h([)g([0,)g(0],)h([1,)f(0],)g([0,)h(1],)f([1,)h
+(1])f(];;)p 3747 4080 V 75 4179 V 188 4149 a(gap>)h(C1)f(:=)g
+(ElementsCode\()j(M,)d(GF\(2\))i(\);)p 3747 4179 V 75
+4279 V 188 4249 a(a)e(\(2,4,1..2\)0)j(user)d(defined)i(unrestricted)i
+(code)c(over)h(GF\(2\))p 3747 4279 V 75 4378 V 188 4349
+a(gap>)g(M)e(=)h(C1;)p 3747 4378 V 75 4478 V 188 4448
+a(false)p 3747 4478 V 75 4578 V 188 4548 a(gap>)h(C2)f(:=)g
+(GeneratorMatCode\()48 b([)42 b([1,)i(0],)f([0,)h(1])f(],)g(GF\(2\))h
+(\);)p 3747 4578 V 75 4677 V 188 4647 a(a)f(linear)h([2,2,1]0)h(code)f
+(defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p
+3747 4677 V 75 4777 V 188 4747 a(gap>)g(C1)f(=)f(C2;)p
+3747 4777 V 75 4877 V 188 4847 a(true)p 3747 4877 V 75
+4976 V 188 4946 a(gap>)i(ReedMullerCode\()j(1,)c(3)g(\))f(=)h
+(HadamardCode\()k(8)c(\);)p 3747 4976 V 75 5076 V 188
+5046 a(true)p 3747 5076 V 75 5175 V 188 5146 a(gap>)h(WholeSpaceCode\()
+j(5,)c(GF\(4\))h(\))f(=)g(WholeSpaceCode\()k(5,)c(GF\(2\))h(\);)p
+3747 5175 V 75 5275 V 188 5245 a(false)p 3747 5275 V
+75 5300 4 25 v 3747 5300 V 75 5303 3675 4 v 75 5479 a
+FK(Another)32 b(w)o(ay)e(of)g(comparing)i(codes)g(is)e
+Ft(IsEquivalent)p FK(,)36 b(which)30 b(checks)i(if)f(tw)o(o)f(codes)h
+(are)g(equi)n(v)n(alent)i(\(see)75 5592 y Ft(IsEquivalent)43
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 700 5593 a
+SDict begin H.S end
+
+700 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 881 5530 a
+SDict begin H.R end
+ 881 5530
+a 881 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end
+ 881 5592 a Black FK(\)\).)76 b(By)38 b(the)i(w)o(ay)-6
+b(,)42 b(this)e(called)g Ft(CodeIsomorphism)p FK(.)80
+b(F)o(or)39 b(the)g(current)i(v)o(ersion)f(of)p Black
+Black eop end end
+%%Page: 30 30
+TeXDict begin HPSdict begin 30 29 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.30) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(30)p Black 75 399 a Fy(GU)m(A)-6 b(V)f(A)p
+FK(,)27 b(unless)k(one)f(of)g(the)g(codes)g(is)g(unrestricted,)k(this)c
+(calls)g(Leon')-5 b(s)30 b(C)f(program)h(\(which)h(only)f(w)o(orks)g
+(for)75 511 y(binary)25 b(linear)g(codes)f(and)g(only)h(on)e(a)h
+(unix/linux)i(computer\).)75 674 y
+SDict begin H.S end
+ 75 674 a 75 674 a
+SDict begin 13.6 H.A end
+
+75 674 a 75 674 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.2) cvn H.B /DEST pdfmark end
+ 75 674 a 130 x FM(4.2)p 0.0 0.0 1.0
+TeXcolorrgb 119 w(Operations)k(f)m(or)g(Codes)p Black
+75 922 a
+SDict begin H.S end
+ 75 922 a 75 922 a
+SDict begin 13.6 H.A end
+ 75 922 a 75 922 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.1) cvn H.B /DEST pdfmark end
+ 75 922 a
+92 x FJ(4.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(+)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 1189 a Fs(\006)22 b Ft(+\()47
+b(C1,)h(C2)f(\))2816 b Fr(\(function\))p Black 216 1414
+a FK(The)23 b(operator)j(`+')d(e)n(v)n(aluates)j(to)d(the)h(direct)h
+(sum)e(of)h(the)f(codes)i Ft(C1)f FK(and)g Ft(C2)p FK(.)k(See)23
+b Ft(DirectSumCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3513 1415 a
+SDict begin H.S end
+ 3513 1415 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3694 1352 a
+SDict begin H.R end
+ 3694 1352 a 3694 1414 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end
+ 3694 1414 a Black
+FK(\).)p 75 1537 1648 4 v 1764 1542 a FF(Example)p 2102
+1537 V 75 1562 4 25 v 3747 1562 V 75 1662 4 100 v 188
+1632 a(gap>)44 b(C1:=RandomLinearCode\()q(10,)q(5\);)p
+3747 1662 V 75 1761 V 188 1731 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 1761 V 75 1861
+V 188 1831 a(gap>)g(C2:=RandomLinearCode\()q(9,4)q(\);)p
+3747 1861 V 75 1960 V 188 1931 a(a)85 b([9,4,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 1960 V 75 2060
+V 188 2030 a(gap>)g(C1+C2;)p 3747 2060 V 75 2160 V 188
+2130 a(a)f(linear)h([10,9,1]0..10)j(unknown)d(linear)h(code)f(over)f
+(GF\(2\))p 3747 2160 V 75 2185 4 25 v 3747 2185 V 75
+2188 3675 4 v 75 2321 a
+SDict begin H.S end
+ 75 2321 a 75 2321 a
+SDict begin 13.6 H.A end
+ 75 2321 a
+75 2321 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.2) cvn H.B /DEST pdfmark end
+ 75 2321 a 116 x FJ(4.2.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(*)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2611 a Fs(\006)22
+b Ft(*\()47 b(C1,)h(C2)f(\))2816 b Fr(\(function\))p
+Black 216 2837 a FK(The)22 b(operator)j(`*')d(e)n(v)n(aluates)j(to)d
+(the)h(direct)g(product)i(of)d(the)h(codes)g Ft(C1)g
+FK(and)g Ft(C2)p FK(.)28 b(See)22 b Ft(DirectProductCode)75
+2950 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2951
+a
+SDict begin H.S end
+ 105 2951 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 2888 a
+SDict begin H.R end
+ 286 2888
+a 286 2950 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.3) cvn H.B /ANN pdfmark end
+ 286 2950 a Black FK(\).)p 75 3069 1648 4
+v 1764 3074 a FF(Example)p 2102 3069 V 75 3094 4 25 v
+3747 3094 V 75 3194 4 100 v 188 3164 a(gap>)44 b(C1)f(:=)g
+(GeneratorMatCode\()48 b([)42 b([1,)i(0,0,0],)h([0,)e(1,0,0])h(],)f
+(GF\(2\))h(\);)p 3747 3194 V 75 3293 V 188 3264 a(a)f(linear)h
+([4,2,1]1)h(code)f(defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p
+3747 3293 V 75 3393 V 188 3363 a(gap>)g(C2)f(:=)g(GeneratorMatCode\()48
+b([)42 b([0,0,1,)j(1],)f([0,0,0,)g(1])f(],)g(GF\(2\))h(\);)p
+3747 3393 V 75 3493 V 188 3463 a(a)f(linear)h([4,2,1]1)h(code)f
+(defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p
+3747 3493 V 75 3592 V 188 3562 a(gap>)g(C1*C2;)p 3747
+3592 V 75 3692 V 188 3662 a(a)f(linear)h([16,4,1]4..12)j(direct)d
+(product)h(code)p 3747 3692 V 75 3717 4 25 v 3747 3717
+V 75 3720 3675 4 v 75 3853 a
+SDict begin H.S end
+ 75 3853 a 75 3853 a
+SDict begin 13.6 H.A end
+ 75 3853
+a 75 3853 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.3) cvn H.B /DEST pdfmark end
+ 75 3853 a 116 x FJ(4.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(*)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4144 a Fs(\006)22
+b Ft(*\()47 b(m,)h(C)e(\))2909 b Fr(\(function\))p Black
+216 4369 a FK(The)20 b(operator)i Ft(m*C)f FK(e)n(v)n(aluates)h(to)f
+(the)f(element)i(of)e Ft(C)g FK(belonging)j(to)d(information)j(w)o(ord)
+e(\('message'\))h Ft(m)q FK(.)k(Here)75 4482 y Ft(m)g
+FK(may)h(be)f(a)g(v)o(ector)l(,)j(polynomial,)g(string)f(or)f(code)n(w)
+o(ord)h(or)e(a)h(list)g(of)f(those.)39 b(This)27 b(is)f(the)h(w)o(ay)f
+(to)h(do)g(encoding)75 4595 y(in)e Fy(GU)m(A)-6 b(V)f(A)p
+FK(.)23 b Ft(C)h FK(must)h(be)g(linear)l(,)h(because)h(in)e
+Fy(GU)m(A)-6 b(V)f(A)p FK(,)23 b(encoding)k(by)e(multiplication)k(is)24
+b(only)i(de\002ned)g(for)f(linear)75 4708 y(codes.)k(If)21
+b Ft(C)f FK(is)h(a)g(c)o(yclic)h(code,)g(this)g(multiplication)i(is)d
+(the)g(same)g(as)g(multiplying)j(an)d(information)i(polynomial)h
+Ft(m)75 4821 y FK(by)19 b(the)g(generator)i(polynomial)h(of)c
+Ft(C)q FK(.)26 b(If)19 b Ft(C)f FK(is)h(a)f(linear)i(code,)h(it)d(is)h
+(equal)h(to)f(the)g(multiplication)j(of)d(an)g(information)75
+4934 y(v)o(ector)25 b Ft(m)e FK(by)g(a)g(generator)j(matrix)e(of)g
+Ft(C)p FK(.)216 5047 y(T)-7 b(o)24 b(in)l(v)o(ert)j(this,)f(use)g(the)g
+(function)h Ft(InformationWord)j FK(\(see)c Ft(InformationWord)31
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2996 5048
+a
+SDict begin H.S end
+ 2996 5048 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3177 4985 a
+SDict begin H.R end
+ 3177 4985
+a 3177 5047 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.2.4) cvn H.B /ANN pdfmark end
+ 3177 5047 a Black FK(\),)26 b(which)f(simply)75
+5160 y(calls)f(the)g(function)i Ft(Decode)p FK(\).)p
+75 5279 1648 4 v 1764 5284 a FF(Example)p 2102 5279 V
+75 5304 4 25 v 3747 5304 V 75 5403 4 100 v 188 5374 a(gap>)44
+b(C)e(:=)h(GeneratorMatCode\()48 b([)43 b([1,)h(0,0,0],)g([0,)g(1,0,0])
+g(],)f(GF\(2\))h(\);)p 3747 5403 V 75 5503 V 188 5473
+a(a)f(linear)h([4,2,1]1)h(code)f(defined)g(by)g(generator)h(matrix)f
+(over)g(GF\(2\))p 3747 5503 V 75 5603 V 188 5573 a(gap>)g
+(m:=Codeword\("11"\);)p 3747 5603 V Black Black eop end
+end
+%%Page: 31 31
+TeXDict begin HPSdict begin 31 30 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.31) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(31)p Black 75 428 4 100 v 188 399 a FF([)43
+b(1)f(1)h(])p 3747 428 V 75 528 V 188 498 a(gap>)h(m*C;)p
+3747 528 V 75 628 V 188 598 a([)f(1)f(1)h(0)g(0)f(])p
+3747 628 V 75 653 4 25 v 3747 653 V 75 656 3675 4 v 75
+789 a
+SDict begin H.S end
+ 75 789 a 75 789 a
+SDict begin 13.6 H.A end
+ 75 789 a 75 789 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.4) cvn H.B /DEST pdfmark end
+ 75 789 a 116
+x FJ(4.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Inf)n(ormationW)-7
+b(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1079 a Fs(\006)22
+b Ft(InformationWord\()53 b(C,)47 b(c)f(\))2260 b Fr(\(function\))p
+Black 216 1305 a FK(Here)37 b Ft(C)f FK(is)g(a)h(linear)g(code)h(and)f
+Ft(c)f FK(is)h(a)f(code)n(w)o(ord)i(in)f(it.)68 b(The)36
+b(command)h Ft(InformationWord)42 b FK(returns)75 1418
+y(the)27 b(message)g(w)o(ord)g(\(or)f('information)k(digits'\))e
+Fq(m)d FK(satisfying)k Ft(c=m*C)p FK(.)e(This)g(command)g(simply)g
+(calls)g Ft(Decode)p FK(,)75 1531 y(pro)o(vided)f Ft(c)46
+b(in)h(C)23 b FK(is)h(true.)29 b(Otherwise,)24 b(it)f(returns)j(an)d
+(error)-5 b(.)216 1644 y(T)e(o)23 b(in)l(v)o(ert)h(this,)g(use)g(the)g
+(encoding)i(function)g Ft(*)d FK(\(see)h Ft(*)f FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2036 1645 a
+SDict begin H.S end
+ 2036 1645
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2217 1582 a
+SDict begin H.R end
+ 2217 1582 a 2217 1644 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.2.3) cvn H.B /ANN pdfmark end
+ 2217
+1644 a Black FK(\)\).)p 75 1767 1648 4 v 1764 1772 a
+FF(Example)p 2102 1767 V 75 1791 4 25 v 3747 1791 V 75
+1891 4 100 v 188 1861 a(gap>)44 b(C:=HammingCode\(3\);)p
+3747 1891 V 75 1991 V 188 1961 a(a)f(linear)h([7,4,3]1)h(Hamming)g
+(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 1991 V 75 2090
+V 188 2060 a(gap>)h(c:=Random\(C\);)p 3747 2090 V 75
+2190 V 188 2160 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p
+3747 2190 V 75 2290 V 188 2260 a(gap>)i(InformationWord\(C,c\);)p
+3747 2290 V 75 2389 V 188 2359 a([)f(0)f(1)h(1)g(1)f(])p
+3747 2389 V 75 2489 V 188 2459 a(gap>)i(c:=Codeword\("1111100")q(\);)p
+3747 2489 V 75 2588 V 188 2559 a([)f(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])p
+3747 2588 V 75 2688 V 188 2658 a(gap>)i(InformationWord\(C,c\);)p
+3747 2688 V 75 2788 V 188 2758 a("ERROR:)h(codeword)g(must)e(belong)i
+(to)e(code")p 3747 2788 V 75 2887 V 188 2857 a(gap>)h
+(C:=NordstromRobinsonC)q(ode)q(\(\);)p 3747 2887 V 75
+2987 V 188 2957 a(a)f(\(16,256,6\)4)j(Nordstrom-Robinson)i(code)c(over)
+g(GF\(2\))p 3747 2987 V 75 3087 V 188 3057 a(gap>)g(c:=Random\(C\);)p
+3747 3087 V 75 3186 V 188 3156 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(0)f(1)h(0)
+g(0)f(1)h(0)g(1)f(1)h(0)g(1)g(])p 3747 3186 V 75 3286
+V 188 3256 a(gap>)h(InformationWord\(C,c\);)p 3747 3286
+V 75 3385 V 188 3356 a("ERROR:)h(code)e(must)h(be)f(linear")p
+3747 3385 V 75 3410 4 25 v 3747 3410 V 75 3413 3675 4
+v 75 3557 a
+SDict begin H.S end
+ 75 3557 a 75 3557 a
+SDict begin 13.6 H.A end
+ 75 3557 a 75 3557 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.3) cvn H.B /DEST pdfmark end
+ 75
+3557 a 149 x FM(4.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Boolean)30
+b(Functions)g(f)m(or)g(Codes)p Black 75 3803 a
+SDict begin H.S end
+ 75 3803
+a 75 3803 a
+SDict begin 13.6 H.A end
+ 75 3803 a 75 3803 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.1) cvn H.B /DEST pdfmark end
+ 75 3803 a 114 x FJ(4.3.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(in)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4091 a Fs(\006)22 b Ft(in\()48 b(c,)f(C)g(\))2862
+b Fr(\(function\))p Black 216 4317 a FK(The)21 b(command)g
+Ft(c)47 b(in)g(C)21 b FK(e)n(v)n(aluates)h(to)f(`true')h(if)f
+Ft(C)f FK(contains)k(the)d(code)n(w)o(ord)h(or)f(list)g(of)g(code)n(w)o
+(ords)i(speci\002ed)75 4430 y(by)h Ft(c)p FK(.)k(Of)23
+b(course,)h Ft(c)f FK(and)h Ft(C)f FK(must)h(ha)n(v)o(e)g(the)g(same)g
+(w)o(ord)f(lengths)j(and)e(base)g(\002elds.)p 75 4552
+1648 4 v 1764 4557 a FF(Example)p 2102 4552 V 75 4577
+4 25 v 3747 4577 V 75 4677 4 100 v 188 4647 a(gap>)44
+b(C:=)f(HammingCode\()j(2)d(\);;)g(eC:=)h(AsSSortedList\()j(C)c(\);)p
+3747 4677 V 75 4776 V 188 4747 a([)g([)f(0)h(0)g(0)f(],)h([)g(1)g(1)f
+(1)h(])g(])p 3747 4776 V 75 4876 V 188 4846 a(gap>)h(eC[2])g(in)f(C;)p
+3747 4876 V 75 4976 V 188 4946 a(true)p 3747 4976 V 75
+5075 V 188 5045 a(gap>)h([)e(0)h(])g(in)g(C;)p 3747 5075
+V 75 5175 V 188 5145 a(false)p 3747 5175 V 75 5200 4
+25 v 3747 5200 V 75 5203 3675 4 v Black Black eop end
+end
+%%Page: 32 32
+TeXDict begin HPSdict begin 32 31 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.32) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(32)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.2) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.3.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(IsSubset)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(IsSubset\()50 b(C1,)d(C2)h(\))2491
+b Fr(\(function\))p Black 216 799 a FK(The)23 b(command)g
+Ft(IsSubset\(C1,C2\))28 b FK(returns)c(`true')g(if)f
+Ft(C2)g FK(is)f(a)h(subcode)i(of)e Ft(C1)p FK(,)f(i.e.)28
+b(if)23 b Ft(C1)g FK(contains)i(all)e(the)75 912 y(elements)i(of)e
+Ft(C2)q FK(.)p 75 1016 1648 4 v 1764 1021 a FF(Example)p
+2102 1016 V 75 1041 4 25 v 3747 1041 V 75 1141 4 100
+v 188 1111 a(gap>)44 b(IsSubset\()h(HammingCode\(3\),)i
+(RepetitionCode\()h(7)43 b(\))f(\);)p 3747 1141 V 75
+1240 V 188 1210 a(true)p 3747 1240 V 75 1340 V 188 1310
+a(gap>)i(IsSubset\()h(RepetitionCode\()i(7)c(\),)g(HammingCode\()k(3)42
+b(\))h(\);)p 3747 1340 V 75 1440 V 188 1410 a(false)p
+3747 1440 V 75 1539 V 188 1509 a(gap>)h(IsSubset\()h(WholeSpaceCode\()i
+(7)c(\),)g(HammingCode\()k(3)42 b(\))h(\);)p 3747 1539
+V 75 1639 V 188 1609 a(true)p 3747 1639 V 75 1664 4 25
+v 3747 1664 V 75 1667 3675 4 v 75 1800 a
+SDict begin H.S end
+ 75 1800 a 75
+1800 a
+SDict begin 13.6 H.A end
+ 75 1800 a 75 1800 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.3) cvn H.B /DEST pdfmark end
+ 75 1800 a 116 x FJ(4.3.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(IsCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2091 a Fs(\006)22 b Ft(IsCode\()49 b(obj)f(\))2723
+b Fr(\(function\))p Black 216 2316 a Ft(IsCode)26 b FK(returns)g
+(`true')f(if)f Ft(obj)q FK(,)g(which)g(can)h(be)f(an)h(object)g(of)g
+(arbitrary)h(type,)f(is)f(a)g(code)h(and)g(`f)o(alse')h(other)n(-)75
+2429 y(wise.)j(W)l(ill)23 b(cause)i(an)e(error)i(if)e
+Ft(obj)h FK(is)f(an)h(unbound)i(v)n(ariable.)p 75 2546
+1648 4 v 1764 2551 a FF(Example)p 2102 2546 V 75 2571
+4 25 v 3747 2571 V 75 2671 4 100 v 188 2641 a(gap>)44
+b(IsCode\()g(1)f(\);)p 3747 2671 V 75 2770 V 188 2741
+a(false)p 3747 2770 V 75 2870 V 188 2840 a(gap>)h(IsCode\()g
+(ReedMullerCode\()k(2,3)43 b(\))g(\);)p 3747 2870 V 75
+2970 V 188 2940 a(true)p 3747 2970 V 75 2995 4 25 v 3747
+2995 V 75 2998 3675 4 v 75 3131 a
+SDict begin H.S end
+ 75 3131 a 75 3131 a
+SDict begin 13.6 H.A end
+
+75 3131 a 75 3131 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.4) cvn H.B /DEST pdfmark end
+ 75 3131 a 116 x FJ(4.3.4)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(IsLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3421 a Fs(\006)22 b Ft(IsLinearCode\()51 b(obj)d(\))2445
+b Fr(\(function\))p Black 216 3647 a Ft(IsLinearCode)25
+b FK(checks)e(if)e(object)i Ft(obj)f FK(\(not)g(necessarily)i(a)d
+(code\))i(is)e(a)g(linear)h(code.)29 b(If)21 b(a)g(code)i(has)e
+(already)75 3760 y(been)33 b(mark)o(ed)h(as)e(linear)h(or)g(c)o(yclic,)
+i(the)e(function)h(automatically)i(returns)e(`true'.)56
+b(Otherwise,)35 b(the)e(function)75 3873 y(checks)j(if)f(a)f(basis)i
+Fq(G)e FK(of)h(the)g(elements)h(of)f Ft(obj)g FK(e)o(xists)h(that)f
+(generates)j(the)d(elements)h(of)f Ft(obj)q FK(.)62 b(If)34
+b(so,)k Fq(G)33 b FK(is)75 3986 y(recorded)j(as)e(a)f(generator)j
+(matrix)f(of)f Ft(obj)g FK(and)g(the)g(function)i(returns)g(`true'.)60
+b(If)34 b(not,)i(the)f(function)h(returns)75 4099 y(`f)o(alse'.)p
+75 4203 1648 4 v 1764 4208 a FF(Example)p 2102 4203 V
+75 4228 4 25 v 3747 4228 V 75 4327 4 100 v 188 4297 a(gap>)44
+b(C)e(:=)h(ElementsCode\()k([)c([0,0,0],[1,1,1])k(],)c(GF\(2\))h(\);)p
+3747 4327 V 75 4427 V 188 4397 a(a)f(\(3,2,1..3\)1)j(user)d(defined)i
+(unrestricted)i(code)c(over)h(GF\(2\))p 3747 4427 V 75
+4527 V 188 4497 a(gap>)g(IsLinearCode\()i(C)d(\);)p 3747
+4527 V 75 4626 V 188 4596 a(true)p 3747 4626 V 75 4726
+V 188 4696 a(gap>)h(IsLinearCode\()i(ElementsCode\()h([)c([1,1,1])i(],)
+e(GF\(2\))h(\))e(\);)p 3747 4726 V 75 4825 V 188 4796
+a(false)p 3747 4825 V 75 4925 V 188 4895 a(gap>)i(IsLinearCode\()i(1)d
+(\);)p 3747 4925 V 75 5025 V 188 4995 a(false)p 3747
+5025 V 75 5050 4 25 v 3747 5050 V 75 5053 3675 4 v 75
+5186 a
+SDict begin H.S end
+ 75 5186 a 75 5186 a
+SDict begin 13.6 H.A end
+ 75 5186 a 75 5186 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.5) cvn H.B /DEST pdfmark end
+ 75 5186
+a 116 x FJ(4.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsCyclicCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5476 a Fs(\006)22 b
+Ft(IsCyclicCode\()51 b(obj)d(\))2445 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 33 33
+TeXDict begin HPSdict begin 33 32 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.33) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(33)p Black 216 399 a Ft(IsCyclicCode)33
+b FK(checks)f(if)d(the)h(object)i Ft(obj)e FK(is)f(a)h(c)o(yclic)g
+(code.)49 b(If)29 b(a)h(code)g(has)g(already)i(been)f(mark)o(ed)f(as)75
+511 y(c)o(yclic,)35 b(the)e(function)h(automatically)i(returns)e
+(`true'.)56 b(Otherwise,)35 b(the)e(function)h(checks)g(if)e(a)g
+(polynomial)j Fq(g)75 624 y FK(e)o(xists)29 b(that)g(generates)i(the)d
+(elements)i(of)e Ft(obj)q FK(.)42 b(If)28 b(so,)h Fq(g)f
+FK(is)g(recorded)j(as)d(a)g(generator)i(polynomial)h(of)d
+Ft(obj)h FK(and)75 737 y(the)24 b(function)i(returns)f(`true'.)30
+b(If)23 b(not,)g(the)h(function)i(returns)f(`f)o(alse'.)p
+75 853 1648 4 v 1764 858 a FF(Example)p 2102 853 V 75
+878 4 25 v 3747 878 V 75 978 4 100 v 188 948 a(gap>)44
+b(C)e(:=)h(ElementsCode\()k([)c([0,0,0],)i([1,1,1])g(],)e(GF\(2\))h
+(\);)p 3747 978 V 75 1077 V 188 1047 a(a)f(\(3,2,1..3\)1)j(user)d
+(defined)i(unrestricted)i(code)c(over)h(GF\(2\))p 3747
+1077 V 75 1177 V 188 1147 a(gap>)g(#)e(GUAVA)i(does)g(not)f(know)h(the)
+f(code)h(is)f(cyclic)p 3747 1177 V 75 1276 V 188 1247
+a(gap>)h(IsCyclicCode\()i(C)d(\);)255 b(#)42 b(this)i(command)h(tells)f
+(GUAVA)g(to)f(find)h(out)p 3747 1276 V 75 1376 V 188
+1346 a(true)p 3747 1376 V 75 1476 V 188 1446 a(gap>)g(IsCyclicCode\()i
+(HammingCode\()h(4,)c(GF\(2\))h(\))f(\);)p 3747 1476
+V 75 1575 V 188 1545 a(false)p 3747 1575 V 75 1675 V
+188 1645 a(gap>)h(IsCyclicCode\()i(1)d(\);)p 3747 1675
+V 75 1775 V 188 1745 a(false)p 3747 1775 V 75 1799 4
+25 v 3747 1799 V 75 1802 3675 4 v 75 1936 a
+SDict begin H.S end
+ 75 1936 a
+75 1936 a
+SDict begin 13.6 H.A end
+ 75 1936 a 75 1936 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.6) cvn H.B /DEST pdfmark end
+ 75 1936 a 116 x FJ(4.3.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(IsP)n(erfectCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 2226 a Fs(\006)22 b Ft(IsPerfectCode\()52
+b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2452 a
+Ft(IsPerfectCode\(C\))33 b FK(returns)d(`true')f(if)f
+Ft(C)f FK(is)h(a)g(perfect)i(code.)43 b(If)23 b Fq(C)h
+Fv(\032)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2828 2419 y
+Fm(n)2893 2452 y FK(then,)30 b(by)e(de\002nition,)j(this)75
+2565 y(means)g(that)f(for)h(some)f(positi)n(v)o(e)i(inte)o(ger)d
+Fq(t)6 b FK(,)31 b(the)g(space)g Fq(GF)7 b Fo(\()p Fq(q)p
+Fo(\))2152 2532 y Fm(n)2220 2565 y FK(is)30 b(co)o(v)o(ered)h(by)g
+(non-o)o(v)o(erlapping)j(spheres)e(of)75 2678 y(\(Hamming\))20
+b(radius)f Fq(t)26 b FK(centered)21 b(at)f(the)g(code)n(w)o(ords)i(in)d
+Ft(C)q FK(.)27 b(F)o(or)18 b(a)i(code)g(with)g(odd)g(minimum)g
+(distance)i Fq(d)g Fo(=)16 b FK(2)n Fq(t)g Fo(+)9 b FK(1,)75
+2791 y(this)31 b(is)g(the)g(case)h(when)f(e)n(v)o(ery)h(w)o(ord)f(of)f
+(the)i(v)o(ector)g(space)g(of)e Ft(C)h FK(is)g(at)f(distance)k(at)c
+(most)f Fq(t)37 b FK(from)30 b(e)o(xactly)j(one)75 2904
+y(element)25 b(of)e Ft(C)p FK(.)28 b(Codes)c(with)g(e)n(v)o(en)f
+(minimum)h(distance)h(are)f(ne)n(v)o(er)g(perfect.)216
+3017 y(In)j(f)o(act,)h(a)f(code)h(that)f(is)g(not)g(\224tri)n(vially)i
+(perfect\224)g(\(the)f(binary)g(repetition)i(codes)e(of)f(odd)h
+(length,)h(the)e(codes)75 3130 y(consisting)32 b(of)e(one)g(w)o(ord,)g
+(and)g(the)g(codes)g(consisting)j(of)c(the)h(whole)g(v)o(ector)g
+(space\),)i(and)e(does)g(not)g(ha)n(v)o(e)g(the)75 3242
+y(parameters)c(of)d(a)g(Hamming)g(or)h(Golay)g(code,)g(cannot)h(be)f
+(perfect)h(\(see)f(section)h(1.12)f(in)f([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 3008 3243 a
+SDict begin H.S end
+ 3008 3243 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3215 3180 a
+SDict begin H.R end
+ 3215 3180 a 3215 3242 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 3215 3242 a Black
+1 w FK(]\).)p 75 3365 1648 4 v 1764 3370 a FF(Example)p
+2102 3365 V 75 3390 4 25 v 3747 3390 V 75 3490 4 100
+v 188 3460 a(gap>)44 b(H)e(:=)h(HammingCode\(2\);)p 3747
+3490 V 75 3589 V 188 3559 a(a)g(linear)h([3,1,3]1)h(Hamming)g(\(2,2\))f
+(code)g(over)f(GF\(2\))p 3747 3589 V 75 3689 V 188 3659
+a(gap>)h(IsPerfectCode\()j(H)42 b(\);)p 3747 3689 V 75
+3788 V 188 3759 a(true)p 3747 3788 V 75 3888 V 188 3858
+a(gap>)i(IsPerfectCode\()j(ElementsCode\([[1,1,0)q(],[)q(0,0)q(,1])q
+(],G)q(F\(2)q(\)\))i(\);)p 3747 3888 V 75 3988 V 188
+3958 a(true)p 3747 3988 V 75 4087 V 188 4057 a(gap>)44
+b(IsPerfectCode\()j(ReedSolomonCode\()h(6,)43 b(3)f(\))h(\);)p
+3747 4087 V 75 4187 V 188 4157 a(false)p 3747 4187 V
+75 4287 V 188 4257 a(gap>)h(IsPerfectCode\()j(BinaryGolayCode\(\))h
+(\);)p 3747 4287 V 75 4386 V 188 4356 a(true)p 3747 4386
+V 75 4411 4 25 v 3747 4411 V 75 4414 3675 4 v 75 4547
+a
+SDict begin H.S end
+ 75 4547 a 75 4547 a
+SDict begin 13.6 H.A end
+ 75 4547 a 75 4547 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.7) cvn H.B /DEST pdfmark end
+ 75 4547 a 117
+x FJ(4.3.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsMDSCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4838 a Fs(\006)22 b
+Ft(IsMDSCode\()50 b(C)d(\))2677 b Fr(\(function\))p Black
+216 5064 a Ft(IsMDSCode\(C\))29 b FK(returns)f(true)e(if)f
+Ft(C)g FK(is)h(a)f(maximum)h(distance)i(separable)g(\(MDS\))c(code.)36
+b(A)24 b(linear)j Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g
+Fq(d)5 b Fo(])p FK(-)75 5177 y(code)21 b(of)e(length)i
+Fq(n)p FK(,)f(dimension)i Fq(k)f FK(and)f(minimum)f(distance)j
+Fq(d)i FK(is)c(an)g(MDS)d(code)k(if)e Fq(k)g Fo(=)d Fq(n)9
+b Fv(\000)g Fq(d)14 b Fo(+)9 b FK(1,)20 b(in)g(other)h(w)o(ords)75
+5290 y(if)27 b Ft(C)f FK(meets)h(the)g(Singleton)h(bound)h(\(see)e
+Ft(UpperBoundSingleto)q(n)32 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2341 5291 a
+SDict begin H.S end
+ 2341 5291 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2522 5228 a
+SDict begin H.R end
+ 2522 5228 a 2522 5290 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end
+ 2522 5290 a Black
+FK(\)\).)39 b(An)26 b(unrestricted)k Fo(\()p Fq(n)p Fp(;)10
+b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))27 b FK(code)75 5402 y(is)f(called)i
+Fq(MDS)e FK(if)h Fq(k)c Fo(=)f Fq(n)14 b Fv(\000)g Fq(d)k
+Fo(+)c FK(1,)26 b(with)h Fq(k)g FK(equal)h(to)e(the)h(lar)n(gest)i
+(inte)o(ger)e(less)g(than)h(or)e(equal)i(to)e(the)h(logarithm)75
+5515 y(of)c Fq(M)k FK(with)c(base)h Fq(q)p FK(,)f(the)h(size)g(of)f
+(the)h(base)h(\002eld)e(of)g Ft(C)q FK(.)p Black Black
+eop end end
+%%Page: 34 34
+TeXDict begin HPSdict begin 34 33 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.34) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(34)p Black 216 399 a(W)-7 b(ell-kno)n(wn)35
+b(MDS)d(codes)k(include)f(the)g(repetition)h(codes,)i(the)c(whole)g
+(space)i(codes,)h(the)d(e)n(v)o(en)h(weight)75 511 y(codes)25
+b(\(these)g(are)e(the)h(only)g Fq(binary)i FK(MDS)21
+b(codes\))k(and)f(the)g(Reed-Solomon)h(codes.)p 75 634
+1648 4 v 1764 639 a FF(Example)p 2102 634 V 75 659 4
+25 v 3747 659 V 75 759 4 100 v 188 729 a(gap>)44 b(C1)f(:=)g
+(ReedSolomonCode\()k(6,)c(3)g(\);)p 3747 759 V 75 858
+V 188 828 a(a)g(cyclic)h([6,4,3]2)h(Reed-Solomon)h(code)e(over)g
+(GF\(7\))p 3747 858 V 75 958 V 188 928 a(gap>)g(IsMDSCode\()h(C1)e(\);)
+p 3747 958 V 75 1057 V 188 1028 a(true)171 b(#)42 b(6-3+1)i(=)f(4)p
+3747 1057 V 75 1157 V 188 1127 a(gap>)h(IsMDSCode\()h(QRCode\()g(23,)e
+(GF\(2\))i(\))d(\);)p 3747 1157 V 75 1257 V 188 1227
+a(false)p 3747 1257 V 75 1282 4 25 v 3747 1282 V 75 1285
+3675 4 v 75 1418 a
+SDict begin H.S end
+ 75 1418 a 75 1418 a
+SDict begin 13.6 H.A end
+ 75 1418 a 75 1418
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.8) cvn H.B /DEST pdfmark end
+ 75 1418 a 116 x FJ(4.3.8)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(IsSelfDualCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+1708 a Fs(\006)22 b Ft(IsSelfDualCode\()52 b(C)47 b(\))2445
+b Fr(\(function\))p Black 216 1934 a Ft(IsSelfDualCode\(C\))29
+b FK(returns)d(`true')f(if)f Ft(C)f FK(is)h(self-dual,)i(i.e.)j(when)24
+b Ft(C)f FK(is)h(equal)h(to)f(its)g(dual)g(code)h(\(see)g(also)75
+2047 y Ft(DualCode)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+498 2048 a
+SDict begin H.S end
+ 498 2048 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 724
+1985 a
+SDict begin H.R end
+ 724 1985 a 724 2047 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end
+ 724 2047 a Black FK(\)\).)k(A)22
+b(code)h(is)f(self-dual)j(if)e(it)f(contains)j(all)d(v)o(ectors)i(that)
+f(its)g(elements)h(are)f(orthogonal)i(to.)j(If)75 2160
+y(a)23 b(code)h(is)g(self-dual,)h(it)f(automatically)i(is)e
+(self-orthogonal)k(\(see)c Ft(IsSelfOrthogonalCod)q(e)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3181 2162
+a
+SDict begin H.S end
+ 3181 2162 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.3.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3362 2098 a
+SDict begin H.R end
+ 3362 2098
+a 3362 2160 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.9) cvn H.B /ANN pdfmark end
+ 3362 2160 a Black FK(\)\).)216 2273 y(If)36
+b Ft(C)g FK(is)h(a)f(non-linear)j(code,)h(it)c(cannot)i(be)f(self-dual)
+h(\(the)f(dual)g(code)h(is)e(al)o(w)o(ays)h(linear\),)k(so)36
+b(`f)o(alse')i(is)75 2386 y(returned.)31 b(A)22 b(linear)j(code)f(can)g
+(only)h(be)e(self-dual)j(when)e(its)f(dimension)j Fq(k)e
+FK(is)g(equal)g(to)g(the)g(redundanc)o(y)i Fq(r)r FK(.)p
+75 2508 1648 4 v 1764 2513 a FF(Example)p 2102 2508 V
+75 2533 4 25 v 3747 2533 V 75 2633 4 100 v 188 2603 a(gap>)44
+b(IsSelfDualCode\()j(ExtendedBinaryGolay)q(Cod)q(e\(\))i(\);)p
+3747 2633 V 75 2733 V 188 2703 a(true)p 3747 2733 V 75
+2832 V 188 2802 a(gap>)44 b(C)e(:=)h(ReedMullerCode\()48
+b(1,)43 b(3)f(\);)p 3747 2832 V 75 2932 V 188 2902 a(a)h(linear)h
+([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p
+3747 2932 V 75 3032 V 188 3002 a(gap>)g(DualCode\()h(C)e(\))f(=)h(C;)p
+3747 3032 V 75 3131 V 188 3101 a(true)p 3747 3131 V 75
+3156 4 25 v 3747 3156 V 75 3159 3675 4 v 75 3392 a
+SDict begin H.S end
+ 75
+3392 a 75 3392 a
+SDict begin 13.6 H.A end
+ 75 3392 a 75 3392 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.9) cvn H.B /DEST pdfmark end
+ 75 3392 a 116 x
+FJ(4.3.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsSelfOrthogonalCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3682 a Fs(\006)22 b
+Ft(IsSelfOrthogonalC)q(ode)q(\()52 b(C)47 b(\))2167 b
+Fr(\(function\))p Black 216 3908 a Ft(IsSelfOrthogonalCo)q(de\()q(C\))
+37 b FK(returns)c(`true')g(if)e Ft(C)g FK(is)h(self-orthogonal.)57
+b(A)30 b(code)j(is)e Fq(self-ortho)o(gonal)36 b FK(if)75
+4021 y(e)n(v)o(ery)26 b(element)g(of)g Ft(C)e FK(is)i(orthogonal)i(to)d
+(all)h(elements)h(of)e Ft(C)p FK(,)g(including)j(itself.)35
+b(\(In)26 b(the)g(linear)g(case,)h(this)e(simply)75 4134
+y(means)f(that)g(the)g(generator)i(matrix)e(of)f Ft(C)h
+FK(multiplied)h(with)e(its)h(transpose)i(yields)f(a)e(null)h(matrix.\))
+p 75 4257 1648 4 v 1764 4262 a FF(Example)p 2102 4257
+V 75 4282 4 25 v 3747 4282 V 75 4381 4 100 v 188 4351
+a(gap>)44 b(R)e(:=)h(ReedMullerCode\(1,4\))q(;)p 3747
+4381 V 75 4481 V 188 4451 a(a)g(linear)h([16,5,8]6)h(Reed-Muller)h
+(\(1,4\))f(code)e(over)h(GF\(2\))p 3747 4481 V 75 4581
+V 188 4551 a(gap>)g(IsSelfOrthogonalCode\()q(R\);)p 3747
+4581 V 75 4680 V 188 4650 a(true)p 3747 4680 V 75 4780
+V 188 4750 a(gap>)g(IsSelfDualCode\(R\);)p 3747 4780
+V 75 4879 V 188 4850 a(false)p 3747 4879 V 75 4904 4
+25 v 3747 4904 V 75 4907 3675 4 v 75 5140 a
+SDict begin H.S end
+ 75 5140 a
+75 5140 a
+SDict begin 13.6 H.A end
+ 75 5140 a 75 5140 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.10) cvn H.B /DEST pdfmark end
+ 75 5140 a 116 x FJ(4.3.10)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(IsSelfComplementaryCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5431 a Fs(\006)22 b
+Ft(IsSelfComplementa)q(ryC)q(ode)q(\()52 b(C)47 b(\))2028
+b Fr(\(function\))p Black Black Black eop end end
+%%Page: 35 35
+TeXDict begin HPSdict begin 35 34 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.35) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(35)p Black 216 399 a Ft(IsSelfComplementar)q(yCo)q(de)29
+b FK(returns)c(`true')g(if)1564 603 y Fq(v)c Fv(2)14
+b Fq(C)23 b Fv(\))d FK(1)13 b Fv(\000)g Fq(v)20 b Fv(2)15
+b Fq(C)r Fp(;)75 807 y FK(where)24 b(1)f(is)g(the)h(all-one)h(w)o(ord)f
+(of)f(length)i Fq(n)p FK(.)p 75 930 1648 4 v 1764 935
+a FF(Example)p 2102 930 V 75 955 4 25 v 3747 955 V 75
+1054 4 100 v 188 1024 a(gap>)44 b(IsSelfComplementaryCo)q(de\()49
+b(HammingCode\()e(3,)c(GF\(2\))h(\))e(\);)p 3747 1054
+V 75 1154 V 188 1124 a(true)p 3747 1154 V 75 1253 V 188
+1223 a(gap>)i(IsSelfComplementaryCo)q(de\()49 b(EvenWeightSubcode\()p
+3747 1253 V 75 1353 V 188 1323 a(>)43 b(HammingCode\()j(3,)d(GF\(2\))h
+(\))f(\))f(\);)p 3747 1353 V 75 1453 V 188 1423 a(false)p
+3747 1453 V 75 1478 4 25 v 3747 1478 V 75 1481 3675 4
+v 75 1713 a
+SDict begin H.S end
+ 75 1713 a 75 1713 a
+SDict begin 13.6 H.A end
+ 75 1713 a 75 1713 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.11) cvn H.B /DEST pdfmark end
+ 75
+1713 a 117 x FJ(4.3.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsAf\002neCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2004 a Fs(\006)22 b
+Ft(IsAffineCode\()51 b(C)c(\))2538 b Fr(\(function\))p
+Black 216 2230 a Ft(IsAffineCode)29 b FK(returns)e(`true')g(if)e
+Ft(C)g FK(is)h(an)f(af)n(\002ne)g(code.)36 b(A)24 b(code)j(is)e(called)
+i Fq(af)n(\002ne)g FK(if)e(it)g(is)g(an)h(af)n(\002ne)f(space.)75
+2343 y(In)e(other)i(w)o(ords,)f(a)f(code)h(is)g(af)n(\002ne)f(if)g(it)h
+(is)f(a)g(coset)i(of)e(a)g(linear)i(code.)p 75 2458 1648
+4 v 1764 2463 a FF(Example)p 2102 2458 V 75 2483 4 25
+v 3747 2483 V 75 2583 4 100 v 188 2553 a(gap>)44 b(IsAffineCode\()i
+(HammingCode\()h(3,)c(GF\(2\))h(\))f(\);)p 3747 2583
+V 75 2683 V 188 2653 a(true)p 3747 2683 V 75 2782 V 188
+2752 a(gap>)h(IsAffineCode\()i(CosetCode\()g(HammingCode\()h(3,)c
+(GF\(2\))h(\),)p 3747 2782 V 75 2882 V 188 2852 a(>)f([)f(1,)h(0,)g(0,)
+g(0,)g(0,)g(0,)g(0)g(])g(\))f(\);)p 3747 2882 V 75 2981
+V 188 2952 a(true)p 3747 2981 V 75 3081 V 188 3051 a(gap>)i
+(IsAffineCode\()i(NordstromRobinsonC)q(ode)q(\(\))j(\);)p
+3747 3081 V 75 3181 V 188 3151 a(false)p 3747 3181 V
+75 3206 4 25 v 3747 3206 V 75 3209 3675 4 v 75 3342 a
+SDict begin H.S end
+
+75 3342 a 75 3342 a
+SDict begin 13.6 H.A end
+ 75 3342 a 75 3342 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.12) cvn H.B /DEST pdfmark end
+ 75 3342 a 116
+x FJ(4.3.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsAlmostAf\002neCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3632 a Fs(\006)22 b
+Ft(IsAlmostAffineCod)q(e\()53 b(C)46 b(\))2260 b Fr(\(function\))p
+Black 216 3858 a Ft(IsAlmostAffineCode)32 b FK(returns)d(`true')e(if)f
+Ft(C)h FK(is)f(an)g(almost)i(af)n(\002ne)e(code.)39 b(A)25
+b(code)i(is)g(called)g Fq(almost)h(af)n(\002ne)75 3971
+y FK(if)c(the)g(size)g(of)g(an)o(y)g(punctured)i(code)f(of)e
+Ft(C)h FK(is)f Fq(q)1581 3938 y Fm(r)1636 3971 y FK(for)h(some)g
+Fq(r)r FK(,)f(where)i Fq(q)e FK(is)h(the)g(size)g(of)g(the)g(alphabet)i
+(of)e(the)g(code.)75 4084 y(Ev)o(ery)g(af)n(\002ne)g(code)h(is)f(also)h
+(almost)g(af)n(\002ne,)f(and)g(e)n(v)o(ery)h(code)g(o)o(v)o(er)f
+Fq(GF)7 b Fo(\()p FK(2)p Fo(\))24 b FK(and)h Fq(GF)7
+b Fo(\()p FK(3)p Fo(\))24 b FK(that)h(is)f(almost)g(af)n(\002ne)g(is)75
+4197 y(also)g(af)n(\002ne.)p 75 4301 1648 4 v 1764 4306
+a FF(Example)p 2102 4301 V 75 4326 4 25 v 3747 4326 V
+75 4425 4 100 v 188 4396 a(gap>)44 b(code)f(:=)g(ElementsCode\()k([)c
+([0,0,0],)i([0,1,1],)g([0,2,2],)g([0,3,3],)p 3747 4425
+V 75 4525 V 188 4495 a(>)1228 b([1,0,1],)45 b([1,1,0],)g([1,2,3],)g
+([1,3,2],)p 3747 4525 V 75 4625 V 188 4595 a(>)1228 b([2,0,2],)45
+b([2,1,3],)g([2,2,0],)g([2,3,1],)p 3747 4625 V 75 4724
+V 188 4694 a(>)1228 b([3,0,3],)45 b([3,1,2],)g([3,2,1],)g([3,3,0])g(],)
+p 3747 4724 V 75 4824 V 188 4794 a(>)1228 b(GF\(4\))44
+b(\);;)p 3747 4824 V 75 4924 V 188 4894 a(gap>)g(IsAlmostAffineCode\()k
+(code)c(\);)p 3747 4924 V 75 5023 V 188 4993 a(true)p
+3747 5023 V 75 5123 V 188 5093 a(gap>)g(IsAlmostAffineCode\()k
+(NordstromRobinsonC)q(ode)q(\(\))h(\);)p 3747 5123 V
+75 5223 V 188 5193 a(false)p 3747 5223 V 75 5247 4 25
+v 3747 5247 V 75 5250 3675 4 v Black Black eop end end
+%%Page: 36 36
+TeXDict begin HPSdict begin 36 35 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.36) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(36)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.4) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FM(4.4)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Equi)o(v)o(alence)31 b(and)g(Isomor)o(phism)d(of)h(Codes)p
+Black 75 517 a
+SDict begin H.S end
+ 75 517 a 75 517 a
+SDict begin 13.6 H.A end
+ 75 517 a 75 517 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.1) cvn H.B /DEST pdfmark end
+ 75
+517 a 92 x FJ(4.4.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsEqui)o(v)o(alent)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 783 a Fs(\006)22 b Ft(IsEquivalent\()
+51 b(C1,)d(C2)f(\))2306 b Fr(\(function\))p Black 216
+1009 a FK(W)-7 b(e)31 b(say)i(that)f Ft(C1)g FK(is)g
+Fq(permutation)j(equivalent)i FK(to)32 b Ft(C2)g FK(if)g
+Ft(C1)g FK(can)g(be)g(obtained)i(from)e Ft(C2)g FK(by)h(carrying)h(out)
+75 1122 y(column)e(permutations.)53 b Ft(IsEquivalent)35
+b FK(returns)d(true)g(if)e Ft(C1)h FK(and)g Ft(C2)g FK(are)g(equi)n(v)n
+(alent)i(codes.)52 b(At)30 b(this)i(time,)75 1235 y Ft(IsEquivalent)j
+FK(only)e(handles)h Fq(binary)f FK(codes.)55 b(\(The)31
+b(e)o(xternal)j(unix/linux)h(program)g Fj(D)t(E)t(S)t(AU)t(T)s(O)g
+FK(from)d(J.)f(S.)75 1348 y(Leon)24 b(is)f(called)i(by)e
+Ft(IsEquivalent)p FK(.\))33 b(Of)23 b(course,)h(if)g
+Ft(C1)f FK(and)h Ft(C2)f FK(are)h(equal,)h(the)o(y)e(are)h(also)g(equi)
+n(v)n(alent.)216 1461 y(Note)g(that)g(the)f(algorithm)j(is)d
+Fq(very)h(slow)g FK(for)f(non-linear)k(codes.)216 1573
+y(More)f(generally)-6 b(,)28 b(we)c(say)i(that)g Ft(C1)g
+FK(is)f Fq(equivalent)30 b FK(to)25 b Ft(C2)h FK(if)f
+Ft(C1)g FK(can)h(be)f(obtained)j(from)d Ft(C2)h FK(by)f(carrying)j(out)
+75 1686 y(column)c(permutations)j(and)d(a)f(permutation)j(of)e(the)f
+(alphabet.)p 75 1809 1648 4 v 1764 1814 a FF(Example)p
+2102 1809 V 75 1834 4 25 v 3747 1834 V 75 1934 4 100
+v 188 1904 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(pol:=)g
+(x\2103+x+1;)p 3747 1934 V 75 2033 V 188 2003 a
+(Z\(2\)\2100+x_1+x_1\2103)p 3747 2033 V 75 2133 V 188
+2103 a(gap>)g(H)e(:=)h(GeneratorPolCode\()48 b(pol,)c(7,)f(GF\(2\)\);)p
+3747 2133 V 75 2232 V 188 2203 a(a)g(cyclic)h([7,4,1..3]1)i(code)e
+(defined)h(by)e(generator)i(polynomial)h(over)d(GF\(2\))p
+3747 2232 V 75 2332 V 188 2302 a(gap>)h(H)e(=)h(HammingCode\(3,)k
+(GF\(2\)\);)p 3747 2332 V 75 2432 V 188 2402 a(false)p
+3747 2432 V 75 2531 V 188 2501 a(gap>)d(IsEquivalent\(H,)j
+(HammingCode\(3,)g(GF\(2\)\)\);)p 3747 2531 V 75 2631
+V 188 2601 a(true)1017 b(#)43 b(H)g(is)g(equivalent)j(to)d(a)f(Hamming)
+j(code)p 3747 2631 V 75 2731 V 188 2701 a(gap>)f(CodeIsomorphism\(H,)k
+(HammingCode\(3,)f(GF\(2\)\)\);)p 3747 2731 V 75 2830
+V 188 2800 a(\(3,4\)\(5,6,7\))p 3747 2830 V 75 2855 4
+25 v 3747 2855 V 75 2858 3675 4 v 75 2991 a
+SDict begin H.S end
+ 75 2991 a
+75 2991 a
+SDict begin 13.6 H.A end
+ 75 2991 a 75 2991 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.2) cvn H.B /DEST pdfmark end
+ 75 2991 a 117 x FJ(4.4.2)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(CodeIsomor)o(phism)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 3282 a Fs(\006)22 b Ft(CodeIsomorphism\()53
+b(C1,)47 b(C2)g(\))2167 b Fr(\(function\))p Black 216
+3508 a FK(If)45 b(the)g(tw)o(o)g(codes)h Ft(C1)f FK(and)g
+Ft(C2)g FK(are)g(permutation)i(equi)n(v)n(alent)h(codes)e(\(see)f
+Ft(IsEquivalent)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3485 3509 a
+SDict begin H.S end
+ 3485 3509 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666
+3446 a
+SDict begin H.R end
+ 3666 3446 a 3666 3508 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end
+ 3666 3508 a Black FK(\)\),)75
+3621 y Ft(CodeIsomorphism)37 b FK(returns)d(the)f(permutation)i(that)e
+(transforms)h Ft(C1)f FK(into)g Ft(C2)p FK(.)55 b(If)32
+b(the)h(codes)h(are)e(not)h(equi)n(v-)75 3734 y(alent,)24
+b(it)f(returns)j(`f)o(alse'.)216 3846 y(At)f(this)h(time,)g
+Ft(IsEquivalent)j FK(only)d(computes)i(isomorphisms)g(between)e
+Fq(binary)h FK(codes)g(on)f(a)f(linux/unix)75 3959 y(computer)g
+(\(since)g(it)e(calls)i(Leon')-5 b(s)24 b(C)e(program)27
+b Fj(D)t(E)t(S)t(AU)t(T)s(O)r FK(\).)p 75 4082 1648 4
+v 1764 4087 a FF(Example)p 2102 4082 V 75 4107 4 25 v
+3747 4107 V 75 4206 4 100 v 188 4177 a(gap>)44 b(x:=)f(Indeterminate\()
+k(GF\(2\))d(\);;)g(pol:=)g(x\2103+x+1;)p 3747 4206 V
+75 4306 V 188 4276 a(Z\(2\)\2100+x_1+x_1\2103)p 3747
+4306 V 75 4406 V 188 4376 a(gap>)g(H)e(:=)h(GeneratorPolCode\()48
+b(pol,)c(7,)f(GF\(2\)\);)p 3747 4406 V 75 4505 V 188
+4475 a(a)g(cyclic)h([7,4,1..3]1)i(code)e(defined)h(by)e(generator)i
+(polynomial)h(over)d(GF\(2\))p 3747 4505 V 75 4605 V
+188 4575 a(gap>)h(CodeIsomorphism\(H,)k(HammingCode\(3,)f(GF\(2\)\)\);)
+p 3747 4605 V 75 4705 V 188 4675 a(\(3,4\)\(5,6,7\))p
+3747 4705 V 75 4804 V 188 4774 a(gap>)d(PermutedCode\(H,)j
+(\(3,4\)\(5,6,7\)\))g(=)c(HammingCode\(3,)k(GF\(2\)\);)p
+3747 4804 V 75 4904 V 188 4874 a(true)p 3747 4904 V 75
+4929 4 25 v 3747 4929 V 75 4932 3675 4 v 75 5065 a
+SDict begin H.S end
+ 75
+5065 a 75 5065 a
+SDict begin 13.6 H.A end
+ 75 5065 a 75 5065 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.3) cvn H.B /DEST pdfmark end
+ 75 5065 a 116 x
+FJ(4.4.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(utomor)o(phismGr)n(oup)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5356 a Fs(\006)22 b
+Ft(AutomorphismGroup)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 37 37
+TeXDict begin HPSdict begin 37 36 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.37) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(37)p Black 216 399 a Ft(AutomorphismGroup)42
+b FK(returns)37 b(the)g(automorphism)h(group)g(of)e(a)f(linear)i(code)g
+Ft(C)q FK(.)65 b(F)o(or)35 b(a)h(binary)i(code,)75 511
+y(the)e(automorphism)j(group)e(is)f(the)g(lar)n(gest)i(permutation)g
+(group)f(of)f(de)o(gree)h Fq(n)f FK(such)g(that)h(each)g(permutation)75
+624 y(applied)g(to)e(the)g(columns)h(of)f Ft(C)g FK(again)h(yields)g
+Ft(C)p FK(.)63 b Fy(GU)m(A)-6 b(V)f(A)33 b FK(calls)j(the)f(e)o
+(xternal)i(program)h Fj(D)t(E)t(S)t(AU)t(T)s(O)g FK(written)75
+737 y(by)g(J.)f(S.)g(Leon,)k(if)d(it)g(e)o(xists,)k(to)c(compute)h(the)
+f(automorphism)j(group.)73 b(If)38 b(Leon')-5 b(s)39
+b(program)g(is)f(not)g(com-)75 850 y(piled)h(on)f(the)g(system)h(\(and)
+f(in)g(the)g(def)o(ault)i(directory\))g(then)f(it)e(calls)i(instead)h
+(the)e(much)g(slo)n(wer)g(program)75 963 y Ft(PermutationAutomor)q(phi)
+q(smG)q(rou)q(p)p FK(.)216 1076 y(See)29 b(Leon)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 621 1077 a
+SDict begin H.S end
+ 621 1077
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo82)p 0.0236 0.6179 0.0894
+TeXcolorrgb 852 1014 a
+SDict begin H.R end
+ 852 1014 a 852 1076 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon82) cvn H.B /ANN pdfmark end
+ 852 1076
+a Black 1 w FK(])g(for)g(a)g(more)g(precise)i(description)h(of)d(the)g
+(method,)j(and)d(the)g Ft(guava/src/leon/do)q(c)75 1189
+y FK(subdirectory)e(for)d(for)g(details)h(about)f(Leon')-5
+b(s)25 b(C)d(programs.)216 1302 y(The)h(function)j Ft(PermutedCode)h
+FK(permutes)e(the)f(columns)h(of)e(a)g(code)i(\(see)f
+Ft(PermutedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3240 1303 a
+SDict begin H.S end
+ 3240 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3421
+1240 a
+SDict begin H.R end
+ 3421 1240 a 3421 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.4) cvn H.B /ANN pdfmark end
+ 3421 1302 a Black FK(\)\).)p
+75 1424 1648 4 v 1764 1429 a FF(Example)p 2102 1424 V
+75 1449 4 25 v 3747 1449 V 75 1549 4 100 v 188 1519 a(gap>)44
+b(R)e(:=)h(RepetitionCode\(7,GF)q(\(2\))q(\);)p 3747
+1549 V 75 1649 V 188 1619 a(a)g(cyclic)h([7,1,7]3)h(repetition)h(code)e
+(over)f(GF\(2\))p 3747 1649 V 75 1748 V 188 1718 a(gap>)h
+(AutomorphismGroup\(R\);)p 3747 1748 V 75 1848 V 188
+1818 a(Sym\()g([)e(1)h(..)g(7)g(])f(\))p 3747 1848 V
+75 1947 V 1204 1918 a(#)h(every)h(permutation)i(keeps)e(R)f(identical)p
+3747 1947 V 75 2047 V 188 2017 a(gap>)h(C)e(:=)h(CordaroWagnerCode\(7)q
+(\);)p 3747 2047 V 75 2147 V 188 2117 a(a)g(linear)h([7,2,4]3)h
+(Cordaro-Wagner)i(code)d(over)g(GF\(2\))p 3747 2147 V
+75 2246 V 188 2216 a(gap>)g(AsSSortedList\(C\);)p 3747
+2246 V 75 2346 V 188 2316 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(],)g([)
+g(0)f(0)h(1)g(1)f(1)h(1)g(1)g(],)g([)f(1)h(1)g(0)f(0)h(0)g(1)f(1)h(],)g
+([)g(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])h(])p 3747 2346 V
+75 2446 V 188 2416 a(gap>)h(AutomorphismGroup\(C\);)p
+3747 2446 V 75 2545 V 188 2515 a(Group\([)h(\(3,4\),)f(\(4,5\),)g
+(\(1,6\)\(2,7\),)j(\(1,2\),)d(\(6,7\))g(]\))p 3747 2545
+V 75 2645 V 188 2615 a(gap>)g(C2)f(:=)85 b(PermutedCode\(C,)47
+b(\(1,6\)\(2,7\)\);)p 3747 2645 V 75 2744 V 188 2715
+a(a)c(linear)h([7,2,4]3)h(permuted)g(code)p 3747 2744
+V 75 2844 V 188 2814 a(gap>)f(AsSSortedList\(C2\);)p
+3747 2844 V 75 2944 V 188 2914 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h
+(],)g([)g(0)f(0)h(1)g(1)f(1)h(1)g(1)g(],)g([)f(1)h(1)g(0)f(0)h(0)g(1)f
+(1)h(],)g([)g(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])h(])p 3747
+2944 V 75 3043 V 188 3013 a(gap>)h(C2)f(=)f(C;)p 3747
+3043 V 75 3143 V 188 3113 a(true)p 3747 3143 V 75 3168
+4 25 v 3747 3168 V 75 3171 3675 4 v 75 3404 a
+SDict begin H.S end
+ 75 3404
+a 75 3404 a
+SDict begin 13.6 H.A end
+ 75 3404 a 75 3404 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.4) cvn H.B /DEST pdfmark end
+ 75 3404 a 116 x FJ(4.4.4)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutationA)-5 b(utomor)o(phismGr)n
+(oup)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3694 a Fs(\006)22
+b Ft(PermutationAutomo)q(rph)q(ism)q(Gro)q(up)q(\()52
+b(C)47 b(\))1796 b Fr(\(function\))p Black 216 3920 a
+Ft(PermutationAutomor)q(phi)q(smG)q(ro)q(up)29 b FK(returns)24
+b(the)g(permutation)h(automorphism)h(group)e(of)f(a)g(linear)h(code)75
+4033 y Ft(C)p FK(.)j(This)21 b(is)g(the)h(lar)n(gest)h(permutation)g
+(group)g(of)e(de)o(gree)h Fq(n)f FK(such)h(that)f(each)h(permutation)i
+(applied)f(to)e(the)g(columns)75 4146 y(of)i Ft(C)h FK(again)g(yields)h
+Ft(C)p FK(.)j(It)23 b(is)h(written)g(in)f Fy(GAP)p FK(,)f(so)h(is)g
+(much)h(slo)n(wer)g(than)g Ft(AutomorphismGroup)p FK(.)216
+4259 y(When)33 b Ft(C)e FK(is)h(binary)i Ft(PermutationAutomor)q(phi)q
+(smG)q(ro)q(up)k FK(does)33 b Fq(not)h FK(call)f Ft(AutomorphismGroup)p
+FK(,)39 b(e)n(v)o(en)75 4372 y(though)29 b(the)o(y)e(agree)h
+(mathematically)i(in)d(that)h(case.)40 b(This)27 b(w)o(ay)f
+Ft(PermutationAutomor)q(ph)q(ism)q(Gro)q(up)33 b FK(can)27
+b(be)75 4485 y(called)e(on)e(an)o(y)h(platform)h(which)f(runs)g
+Fy(GAP)p FK(.)216 4598 y(The)f(older)i(name)e(for)h(this)g(command,)g
+Ft(PermutationGroup)p FK(,)k(will)23 b(become)i(obsolete)h(in)d(the)h
+(ne)o(xt)g(v)o(ersion)75 4710 y(of)f Fy(GAP)p FK(.)p
+75 4815 1648 4 v 1764 4820 a FF(Example)p 2102 4815 V
+75 4840 4 25 v 3747 4840 V 75 4939 4 100 v 188 4909 a(gap>)44
+b(R)e(:=)h(RepetitionCode\(3,GF)q(\(3\))q(\);)p 3747
+4939 V 75 5039 V 188 5009 a(a)g(cyclic)h([3,1,3]2)h(repetition)h(code)e
+(over)f(GF\(3\))p 3747 5039 V 75 5139 V 188 5109 a(gap>)h
+(G:=PermutationAutomor)q(phi)q(smG)q(ro)q(up\()q(R\);)p
+3747 5139 V 75 5238 V 188 5208 a(Group\([)h(\(\),)e(\(1,3\),)h
+(\(1,2,3\),)h(\(2,3\),)g(\(1,3,2\),)g(\(1,2\))f(]\))p
+3747 5238 V 75 5338 V 188 5308 a(gap>)g(G=SymmetricGroup\(3\);)p
+3747 5338 V 75 5437 V 188 5408 a(true)p 3747 5437 V 75
+5462 4 25 v 3747 5462 V 75 5465 3675 4 v Black Black
+eop end end
+%%Page: 38 38
+TeXDict begin HPSdict begin 38 37 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.38) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(38)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.5) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FM(4.5)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Domain)30 b(Functions)h(f)m(or)e(Codes)p Black
+75 606 a FK(These)23 b(are)h(some)f Fy(GAP)e FK(functions)26
+b(that)d(w)o(ork)g(on)h(`Domains')g(in)f(general.)30
+b(Their)23 b(speci\002c)h(ef)n(fect)g(on)f(`Codes')h(is)75
+718 y(e)o(xplained)i(here.)75 871 y
+SDict begin H.S end
+ 75 871 a 75 871 a
+SDict begin 13.6 H.A end
+
+75 871 a 75 871 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.1) cvn H.B /DEST pdfmark end
+ 75 871 a 97 x FJ(4.5.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(IsFinite)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1142 a Fs(\006)c Ft(IsFinite\()50 b(C)d(\))2723 b
+Fr(\(function\))p Black 216 1368 a Ft(IsFinite)26 b FK(is)d(an)h
+(implementation)j(of)c(the)h Fy(GAP)e FK(domain)j(function)h
+Ft(IsFinite)p FK(.)31 b(It)24 b(returns)h(true)f(for)g(a)f(code)75
+1481 y Ft(C)p FK(.)p 75 1585 1648 4 v 1764 1590 a FF(Example)p
+2102 1585 V 75 1610 4 25 v 3747 1610 V 75 1710 4 100
+v 188 1680 a(gap>)44 b(IsFinite\()h(RepetitionCode\()i(1000,)e
+(GF\(11\))f(\))f(\);)p 3747 1710 V 75 1809 V 188 1780
+a(true)p 3747 1809 V 75 1834 4 25 v 3747 1834 V 75 1837
+3675 4 v 75 1971 a
+SDict begin H.S end
+ 75 1971 a 75 1971 a
+SDict begin 13.6 H.A end
+ 75 1971 a 75 1971
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.2) cvn H.B /DEST pdfmark end
+ 75 1971 a 116 x FJ(4.5.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Size)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2261 a Fs(\006)22
+b Ft(Size\()49 b(C)d(\))2909 b Fr(\(function\))p Black
+216 2487 a Ft(Size)23 b FK(returns)h(the)f(size)g(of)f
+Ft(C)q FK(,)f(the)i(number)g(of)g(elements)g(of)g(the)f(code.)30
+b(If)22 b(the)g(code)i(is)e(linear)l(,)i(the)f(size)g(of)f(the)75
+2600 y(code)i(is)g(equal)g(to)g Fq(q)711 2567 y Fm(k)746
+2600 y FK(,)e(where)i Fq(q)f FK(is)h(the)g(size)g(of)f(the)h(base)g
+(\002eld)g(of)f Ft(C)g FK(and)h Fq(k)h FK(is)e(the)h(dimension.)p
+75 2723 1648 4 v 1764 2728 a FF(Example)p 2102 2723 V
+75 2747 4 25 v 3747 2747 V 75 2847 4 100 v 188 2817 a(gap>)44
+b(Size\()g(RepetitionCode\()j(1000,)d(GF\(11\))h(\))d(\);)p
+3747 2847 V 75 2947 V 188 2917 a(11)p 3747 2947 V 75
+3046 V 188 3016 a(gap>)i(Size\()g(NordstromRobinsonCode)q(\(\))49
+b(\);)p 3747 3046 V 75 3146 V 188 3116 a(256)p 3747 3146
+V 75 3171 4 25 v 3747 3171 V 75 3174 3675 4 v 75 3307
+a
+SDict begin H.S end
+ 75 3307 a 75 3307 a
+SDict begin 13.6 H.A end
+ 75 3307 a 75 3307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.3) cvn H.B /DEST pdfmark end
+ 75 3307 a 116
+x FJ(4.5.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(LeftActingDomain)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3598 a Fs(\006)22 b
+Ft(LeftActingDomain\()53 b(C)47 b(\))2352 b Fr(\(function\))p
+Black 216 3823 a Ft(LeftActingDomain)30 b FK(returns)d(the)e(base)h
+(\002eld)e(of)h(a)g(code)g Ft(C)q FK(.)32 b(Each)25 b(element)h(of)f
+Ft(C)f FK(consists)j(of)e(elements)h(of)75 3936 y(this)31
+b(base)g(\002eld.)49 b(If)30 b(the)h(base)g(\002eld)g(is)f
+Fq(F)7 b FK(,)31 b(and)g(the)g(w)o(ord)f(length)i(of)e(the)h(code)g(is)
+f Fq(n)p FK(,)i(then)f(the)g(code)n(w)o(ords)h(are)75
+4049 y(elements)23 b(of)e Fq(F)578 4016 y Fm(n)616 4049
+y FK(.)27 b(If)21 b Ft(C)g FK(is)g(a)h(c)o(yclic)g(code,)g(its)g
+(elements)h(are)e(interpreted)k(as)c(polynomials)j(with)e(coef)n
+(\002cients)h(o)o(v)o(er)75 4162 y Fq(F)7 b FK(.)p 75
+4266 1648 4 v 1764 4271 a FF(Example)p 2102 4266 V 75
+4291 4 25 v 3747 4291 V 75 4391 4 100 v 188 4361 a(gap>)44
+b(C1)f(:=)g(ElementsCode\([[0,0,0])q(,)49 b([1,0,1],)c([0,1,0]],)g
+(GF\(4\)\);)p 3747 4391 V 75 4490 V 188 4460 a(a)e(\(3,3,1..3\)2..3)k
+(user)c(defined)i(unrestricted)i(code)c(over)h(GF\(4\))p
+3747 4490 V 75 4590 V 188 4560 a(gap>)g(LeftActingDomain\()k(C1)43
+b(\);)p 3747 4590 V 75 4690 V 188 4660 a(GF\(2\2102\))p
+3747 4690 V 75 4789 V 188 4759 a(gap>)h(LeftActingDomain\()k
+(HammingCode\()e(3,)d(GF\(9\))h(\))f(\);)p 3747 4789
+V 75 4889 V 188 4859 a(GF\(3\2102\))p 3747 4889 V 75
+4914 4 25 v 3747 4914 V 75 4917 3675 4 v 75 5050 a
+SDict begin H.S end
+ 75
+5050 a 75 5050 a
+SDict begin 13.6 H.A end
+ 75 5050 a 75 5050 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.4) cvn H.B /DEST pdfmark end
+ 75 5050 a 116 x
+FJ(4.5.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Dimension)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5341 a Fs(\006)22 b Ft(Dimension\()50
+b(C)d(\))2677 b Fr(\(function\))p Black Black Black eop
+end end
+%%Page: 39 39
+TeXDict begin HPSdict begin 39 38 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.39) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(39)p Black 216 399 a Ft(Dimension)26 b
+FK(returns)f(the)f(parameter)h Fq(k)g FK(of)e Ft(C)p
+FK(,)g(the)g(dimension)j(of)d(the)h(code,)g(or)f(the)h(number)g(of)g
+(information)75 511 y(symbols)38 b(in)f(each)g(code)n(w)o(ord.)70
+b(The)37 b(dimension)h(is)f(not)g(de\002ned)h(for)f(non-linear)i
+(codes;)45 b Ft(Dimension)39 b FK(then)75 624 y(returns)25
+b(an)f(error)-5 b(.)p 75 728 1648 4 v 1764 733 a FF(Example)p
+2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188
+823 a(gap>)44 b(Dimension\()h(NullCode\()h(5,)d(GF\(5\))h(\))f(\);)p
+3747 853 V 75 952 V 188 923 a(0)p 3747 952 V 75 1052
+V 188 1022 a(gap>)h(C)e(:=)h(BCHCode\()i(15,)f(4,)f(GF\(4\))h(\);)p
+3747 1052 V 75 1152 V 188 1122 a(a)f(cyclic)h([15,9,5]3..4)i(BCH)e
+(code,)g(delta=5,)h(b=1)e(over)h(GF\(4\))p 3747 1152
+V 75 1251 V 188 1221 a(gap>)g(Dimension\()h(C)e(\);)p
+3747 1251 V 75 1351 V 188 1321 a(9)p 3747 1351 V 75 1451
+V 188 1421 a(gap>)h(Size\()g(C)e(\))h(=)g(Size\()h(LeftActingDomain\()k
+(C)43 b(\))f(\))h(\210)g(Dimension\()i(C)e(\);)p 3747
+1451 V 75 1550 V 188 1520 a(true)p 3747 1550 V 75 1575
+4 25 v 3747 1575 V 75 1578 3675 4 v 75 1711 a
+SDict begin H.S end
+ 75 1711
+a 75 1711 a
+SDict begin 13.6 H.A end
+ 75 1711 a 75 1711 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.5) cvn H.B /DEST pdfmark end
+ 75 1711 a 117 x FJ(4.5.5)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(AsSSortedList)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2002 a Fs(\006)22 b Ft(AsSSortedList\()52
+b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2228 a
+Ft(AsSSortedList)33 b FK(\(as)c(strictly)h(sorted)g(list\))f(returns)i
+(an)d(immutable,)j(duplicate)g(free)e(list)g(of)g(the)g(elements)75
+2341 y(of)23 b Ft(C)q FK(.)28 b(F)o(or)22 b(a)h(\002nite)h(\002eld)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(generated)i(by)e(po)n(wers)g(of)
+f Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))p FK(,)23 b(the)h(ordering)h(on)1117
+2545 y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))21 b(=)f Fv(f)p
+FK(0)p Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))1769 2507
+y Fr(0)1808 2545 y Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p
+Fo(\))p Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))2220
+2507 y Fr(2)2258 2545 y Fp(;)10 b(:::)p Fq(Z)5 b Fo(\()p
+Fq(q)p Fo(\))2539 2507 y Fm(q)p Fh(\000)p Fr(2)2662 2545
+y Fv(g)75 2749 y FK(is)18 b(that)h(determined)i(by)d(the)h(e)o
+(xponents)h Fq(i)p FK(.)27 b(These)18 b(elements)i(are)f(of)f(the)g
+(type)i(code)n(w)o(ord)f(\(see)g Ft(Codeword)i FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 3485 2750 a
+SDict begin H.S end
+ 3485 2750
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3666 2687 a
+SDict begin H.R end
+ 3666 2687 a 3666 2749 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.1) cvn H.B /ANN pdfmark end
+ 3666
+2749 a Black FK(\)\).)75 2862 y(Note)30 b(that)g(for)g(lar)n(ge)g
+(codes,)i(generating)h(the)d(elements)h(may)e(be)h(v)o(ery)g(time-)g
+(and)g(memory-consuming.)50 b(F)o(or)75 2975 y(generating)25
+b(a)c(speci\002c)h(element)h(or)e(a)h(subset)h(of)e(the)h(elements,)h
+(use)f Ft(CodewordNr)j FK(\(see)d Ft(CodewordNr)i FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 3457 2976 a
+SDict begin H.S end
+ 3457 2976
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3638 2913 a
+SDict begin H.R end
+ 3638 2913 a 3638 2975 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.2) cvn H.B /ANN pdfmark end
+ 3638
+2975 a Black FK(\)\).)p 75 3098 1648 4 v 1764 3103 a
+FF(Example)p 2102 3098 V 75 3122 4 25 v 3747 3122 V 75
+3222 4 100 v 188 3192 a(gap>)44 b(C)e(:=)h(ConferenceCode\()48
+b(5)42 b(\);)p 3747 3222 V 75 3322 V 188 3292 a(a)h(\(5,12,2\)1..4)j
+(conference)g(code)d(over)h(GF\(2\))p 3747 3322 V 75
+3421 V 188 3391 a(gap>)g(AsSSortedList\()j(C)42 b(\);)p
+3747 3421 V 75 3521 V 188 3491 a([)h([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f
+(0)h(0)g(1)f(1)h(1)g(],)g([)g(0)f(1)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(1)g
+(0)f(1)h(],)g([)g(0)f(1)h(1)g(1)f(0)h(],)p 3747 3521
+V 75 3621 V 273 3591 a([)f(1)h(0)g(0)f(1)h(1)g(],)g([)f(1)h(0)g(1)f(0)h
+(1)g(],)g([)g(1)f(0)h(1)g(1)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(1)h(],)g([)g
+(1)f(1)h(0)g(1)f(0)h(],)p 3747 3621 V 75 3720 V 273 3690
+a([)f(1)h(1)g(1)f(0)h(0)g(],)g([)f(1)h(1)g(1)f(1)h(1)g(])f(])p
+3747 3720 V 75 3820 V 188 3790 a(gap>)i(CodewordNr\()i(C,)d([)f(1,)h(2)
+g(])g(\);)p 3747 3820 V 75 3919 V 188 3890 a([)g([)f(0)h(0)g(0)f(0)h(0)
+g(],)g([)f(0)h(0)g(1)f(1)h(1)g(])f(])p 3747 3919 V 75
+3944 4 25 v 3747 3944 V 75 3947 3675 4 v 75 4091 a
+SDict begin H.S end
+ 75
+4091 a 75 4091 a
+SDict begin 13.6 H.A end
+ 75 4091 a 75 4091 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.6) cvn H.B /DEST pdfmark end
+ 75 4091 a 149 x
+FM(4.6)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Printing)31 b(and)g(Displaying)f
+(Codes)p Black 75 4359 a
+SDict begin H.S end
+ 75 4359 a 75 4359 a
+SDict begin 13.6 H.A end
+ 75 4359
+a 75 4359 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.1) cvn H.B /DEST pdfmark end
+ 75 4359 a 92 x FJ(4.6.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Print)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4625 a
+Fs(\006)22 b Ft(Print\()49 b(C)e(\))2862 b Fr(\(function\))p
+Black 216 4851 a Ft(Print)25 b FK(prints)f(information)i(about)f
+Ft(C)q FK(.)i(This)d(is)f(the)h(same)g(as)f(typing)i(the)f
+(identi\002er)h Ft(C)e FK(at)g(the)h Fy(GAP)p FK(-prompt.)216
+4964 y(If)f(the)h(ar)n(gument)i(is)d(an)h(unrestricted)i(code,)f
+(information)h(in)d(the)h(form)p Black Black 168 5151
+a Ft(a)46 b(\(n,M,d\)r)k(...)d(code)h(over)g(GF\(q\))75
+5339 y FK(is)23 b(printed,)j(where)d Ft(n)h FK(is)f(the)h(w)o(ord)g
+(length,)h Ft(M)e FK(the)h(number)g(of)g(elements)h(of)e(the)h(code,)h
+Ft(d)e FK(the)h(minimum)f(distance)75 5452 y(and)h Ft(r)f
+FK(the)h(co)o(v)o(ering)h(radius.)216 5565 y(If)e(the)h(ar)n(gument)i
+(is)d(a)g(linear)i(code,)f(information)i(in)d(the)h(form)p
+Black Black eop end end
+%%Page: 40 40
+TeXDict begin HPSdict begin 40 39 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.40) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(40)p Black Black Black 168 399 a Ft(a)46
+b(linear)j([n,k,d]r)g(...)f(code)g(over)f(GF\(q\))75
+547 y FK(is)23 b(printed,)h(where)f Ft(n)g FK(is)g(the)g(w)o(ord)g
+(length,)h Ft(k)f FK(the)g(dimension)i(of)e(the)g(code,)h
+Ft(d)e FK(the)h(minimum)g(distance)i(and)e Ft(r)g FK(the)75
+660 y(co)o(v)o(ering)i(radius.)216 773 y(Except)31 b(for)g(codes)g
+(produced)i(by)d Ft(RandomLinearCode)p FK(,)37 b(if)30
+b Ft(d)g FK(is)g(not)h(yet)f(kno)n(wn,)j(it)d(is)g(displayed)j(in)d
+(the)75 886 y(form)p Black Black 168 1034 a Ft(lowerbound..upperbo)q
+(und)75 1183 y FK(and)k(if)f Ft(r)h FK(is)f(not)h(yet)g(kno)n(wn,)i(it)
+e(is)f(displayed)j(in)e(the)g(same)g(w)o(ay)-6 b(.)58
+b(F)o(or)33 b(certain)i(ranges)g(of)f Fq(n)p FK(,)i(the)d(v)n(alues)i
+(of)75 1296 y Ft(lowerbound)26 b FK(and)e Ft(upperbound)j
+FK(are)c(obtained)j(from)e(tables.)216 1409 y(The)f(function)j
+Ft(Display)f FK(gi)n(v)o(es)f(more)g(information.)31
+b(See)23 b Ft(Display)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2485 1410 a
+SDict begin H.S end
+ 2485 1410 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.6.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2666 1347 a
+SDict begin H.R end
+ 2666 1347 a 2666 1409 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.3) cvn H.B /ANN pdfmark end
+ 2666 1409 a Black
+FK(\).)p 75 1485 1648 4 v 1764 1490 a FF(Example)p 2102
+1485 V 75 1509 4 25 v 3747 1509 V 75 1609 4 100 v 188
+1579 a(gap>)44 b(C1)f(:=)g(ExtendedCode\()j(HammingCode\()h(3,)c
+(GF\(2\))h(\))f(\);)p 3747 1609 V 75 1709 V 188 1679
+a(a)g(linear)h([8,4,4]2)h(extended)g(code)p 3747 1709
+V 75 1808 V 188 1778 a(gap>)f(Print\()g("This)g(is)f(",)g
+(NordstromRobinsonCo)q(de\()q(\),)49 b(".)43 b(\\n"\);)p
+3747 1808 V 75 1908 V 188 1878 a(This)h(is)f(a)f(\(16,256,6\)4)k
+(Nordstrom-Robinson)j(code)44 b(over)f(GF\(2\).)p 3747
+1908 V 75 1933 4 25 v 3747 1933 V 75 1936 3675 4 v 75
+2061 a
+SDict begin H.S end
+ 75 2061 a 75 2061 a
+SDict begin 13.6 H.A end
+ 75 2061 a 75 2061 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.2) cvn H.B /DEST pdfmark end
+ 75 2061
+a 117 x FJ(4.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(String)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2352 a Fs(\006)22 b
+Ft(String\()49 b(C)e(\))2816 b Fr(\(function\))p Black
+216 2578 a Ft(String)25 b FK(returns)g(information)h(about)f
+Ft(C)e FK(in)g(a)h(string.)30 b(This)23 b(function)j(is)d(used)h(by)g
+Ft(Print)p FK(.)p 75 2654 1648 4 v 1764 2659 a FF(Example)p
+2102 2654 V 75 2678 4 25 v 3747 2678 V 75 2778 4 100
+v 188 2748 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(3\))d(\);;)g(pol:=)g
+(x\2102+1;)p 3747 2778 V 75 2878 V 188 2848 a(x_1\2102+Z\(3\)\2100)p
+3747 2878 V 75 2977 V 188 2947 a(gap>)g(Factors\(pol\);)p
+3747 2977 V 75 3077 V 188 3047 a([)f(x_1\2102+Z\(3\)\2100)j(])p
+3747 3077 V 75 3177 V 188 3147 a(gap>)e(H)e(:=)h(GeneratorPolCode\()48
+b(pol,)c(8,)f(GF\(3\)\);)p 3747 3177 V 75 3276 V 188
+3246 a(a)g(cyclic)h([8,6,1..2]1..2)j(code)d(defined)h(by)e(generator)i
+(polynomial)h(over)d(GF\(3\))p 3747 3276 V 75 3376 V
+188 3346 a(gap>)h(String\(H\);)p 3747 3376 V 75 3475
+V 188 3446 a("a)f(cyclic)h([8,6,1..2]1..2)j(code)d(defined)h(by)e
+(generator)i(polynomial)h(over)e(GF\(3\)")p 3747 3475
+V 75 3500 4 25 v 3747 3500 V 75 3503 3675 4 v 75 3629
+a
+SDict begin H.S end
+ 75 3629 a 75 3629 a
+SDict begin 13.6 H.A end
+ 75 3629 a 75 3629 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.3) cvn H.B /DEST pdfmark end
+ 75 3629 a 116
+x FJ(4.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Display)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 3919 a Fs(\006)22 b Ft(Display\()50
+b(C)c(\))2770 b Fr(\(function\))p Black 216 4145 a Ft(Display)26
+b FK(prints)f(the)f(method)h(of)f(construction)k(of)c(code)g
+Ft(C)q FK(.)29 b(W)l(ith)24 b(this)h(history)-6 b(,)25
+b(in)f(most)g(cases)h(an)f(equal)h(or)75 4258 y(equi)n(v)n(alent)30
+b(code)e(can)g(be)f(reconstructed.)45 b(If)27 b Ft(C)g
+FK(is)g(an)h(unmanipulated)j(code,)e(the)e(result)i(is)e(equal)i(to)e
+(output)i(of)75 4371 y(the)24 b(function)i Ft(Print)e
+FK(\(see)g Ft(Print)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1243 4372 a
+SDict begin H.S end
+ 1243 4372 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1424
+4309 a
+SDict begin H.R end
+ 1424 4309 a 1424 4371 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.1) cvn H.B /ANN pdfmark end
+ 1424 4371 a Black FK(\)\).)p
+75 4443 1648 4 v 1764 4448 a FF(Example)p 2102 4443 V
+75 4468 4 25 v 3747 4468 V 75 4568 4 100 v 188 4538 a(gap>)44
+b(Display\()h(RepetitionCode\()i(6,)c(GF\(3\))h(\))f(\);)p
+3747 4568 V 75 4667 V 188 4638 a(a)g(cyclic)h([6,1,6]4)h(repetition)h
+(code)e(over)f(GF\(3\))p 3747 4667 V 75 4767 V 188 4737
+a(gap>)h(C1)f(:=)g(ExtendedCode\()j(HammingCode\(2\))i(\);;)p
+3747 4767 V 75 4867 V 188 4837 a(gap>)c(C2)f(:=)g(PuncturedCode\()k
+(ReedMullerCode\()g(2,)c(3)g(\))g(\);;)p 3747 4867 V
+75 4966 V 188 4936 a(gap>)h(Display\()h(LengthenedCode\()i(UUVCode\()e
+(C1,)f(C2)f(\))f(\))h(\);)p 3747 4966 V 75 5066 V 188
+5036 a(a)g(linear)h([12,8,2]2..4)i(code,)e(lengthened)i(with)e(1)f
+(column\(s\))i(of)p 3747 5066 V 75 5166 V 188 5136 a(a)e(linear)h
+([11,8,1]1..2)i(U)d(U+V)g(construction)k(code)d(of)p
+3747 5166 V 75 5265 V 188 5235 a(U:)f(a)g(linear)h([4,1,4]2)h(extended)
+g(code)f(of)p 3747 5265 V 75 5365 V 315 5335 a(a)f(linear)h([3,1,3]1)h
+(Hamming)g(\(2,2\))f(code)g(over)f(GF\(2\))p 3747 5365
+V 75 5465 V 188 5435 a(V:)g(a)g(linear)h([7,7,1]0)h(punctured)g(code)f
+(of)p 3747 5465 V 75 5564 V 315 5534 a(a)f(cyclic)h([8,7,2]1)h
+(Reed-Muller)h(\(2,3\))e(code)g(over)g(GF\(2\))p 3747
+5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black
+Black eop end end
+%%Page: 41 41
+TeXDict begin HPSdict begin 41 40 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.41) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(41)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.4) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.6.4)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(DisplayBoundsInf)n(o)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(DisplayBoundsInfo)q(\()52 b(bds)c(\))2213
+b Fr(\(function\))p Black 216 799 a Ft(DisplayBoundsInfo)54
+b FK(prints)d(the)e(method)h(of)e(construction)53 b(of)c(the)g(code)c
+Fq(C)50 b FK(indicated)h(in)e Ft(bds:=)75 912 y(BoundsMinimumDista)q
+(nce)q(\()j(n,)47 b(k,)h(GF\(q\))g(\))p FK(.)p 75 1028
+1648 4 v 1764 1033 a FF(Example)p 2102 1028 V 75 1053
+4 25 v 3747 1053 V 75 1153 4 100 v 188 1123 a(gap>)c(bounds)g(:=)f
+(BoundsMinimumDistan)q(ce\()49 b(20,)43 b(17,)h(GF\(4\))g(\);)p
+3747 1153 V 75 1253 V 188 1223 a(gap>)g(DisplayBoundsInfo\(bou)q(nds)q
+(\);)p 3747 1253 V 75 1352 V 188 1322 a(an)f(optimal)i(linear)f
+([20,17,d])h(code)f(over)g(GF\(4\))g(has)f(d=3)p 3747
+1352 V 75 1452 V 188 1422 a(--------------------)q(---)q(---)q(---)q
+(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q
+(---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(--)p
+3747 1452 V 75 1551 V 188 1522 a(Lb\(20,17\)=3,)j(by)d(shortening)j
+(of:)p 3747 1551 V 75 1651 V 188 1621 a(Lb\(21,18\)=3,)g(by)d(applying)
+i(contruction)i(B)42 b(to)h(a)g([81,77,3])i(code)p 3747
+1651 V 75 1751 V 188 1721 a(Lb\(81,77\)=3,)h(by)d(shortening)j(of:)p
+3747 1751 V 75 1850 V 188 1820 a(Lb\(85,81\)=3,)g(reference:)g(Ham)p
+3747 1850 V 75 1950 V 188 1920 a(--------------------)q(---)q(---)q
+(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q
+(---)q(---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q
+(--)p 3747 1950 V 75 2050 V 188 2020 a(Ub\(20,17\)=3,)g(by)d
+(considering)j(shortening)g(to:)p 3747 2050 V 75 2149
+V 188 2119 a(Ub\(7,4\)=3,)g(by)d(considering)j(puncturing)g(to:)p
+3747 2149 V 75 2249 V 188 2219 a(Ub\(6,4\)=2,)g(by)d(construction)j(B)d
+(applied)i(to:)p 3747 2249 V 75 2349 V 188 2319 a(Ub\(2,1\)=2,)h
+(repetition)f(code)p 3747 2349 V 75 2448 V 188 2418 a
+(--------------------)q(---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q
+(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(--)q
+(---)q(---)q(---)q(---)q(---)q(---)q(--)p 3747 2448 V
+75 2548 V 188 2518 a(Reference)g(Ham:)p 3747 2548 V 75
+2647 V 188 2617 a(\045T)e(this)h(reference)h(is)e(unknown,)i(for)f
+(more)f(info)p 3747 2647 V 75 2747 V 188 2717 a(\045T)g(contact)i(A.E.)
+e(Brouwer)i(\(aeb at cwi.nl\))p 3747 2747 V 75 2772 4 25
+v 3747 2772 V 75 2775 3675 4 v 75 2918 a
+SDict begin H.S end
+ 75 2918 a 75
+2918 a
+SDict begin 13.6 H.A end
+ 75 2918 a 75 2918 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.7) cvn H.B /DEST pdfmark end
+ 75 2918 a 150 x FM(4.7)p 0.0 0.0 1.0
+TeXcolorrgb 119 w(Generating)31 b(\(Check\))g(Matrices)e(and)i(P)n
+(olynomials)p Black 75 3186 a
+SDict begin H.S end
+ 75 3186 a 75 3186 a
+SDict begin 13.6 H.A end
+ 75
+3186 a 75 3186 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.1) cvn H.B /DEST pdfmark end
+ 75 3186 a 92 x FJ(4.7.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(GeneratorMat)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3452 a Fs(\006)22 b Ft(GeneratorMat\()51 b(C)c(\))2538
+b Fr(\(function\))p Black 216 3678 a Ft(GeneratorMat)33
+b FK(returns)e(a)e(generator)j(matrix)e(of)g Ft(C)p FK(.)46
+b(The)29 b(code)h(consists)i(of)d(all)h(linear)h(combinations)h(of)75
+3791 y(the)24 b(ro)n(ws)f(of)g(this)i(matrix.)216 3904
+y(If)f(until)h(no)n(w)f(no)g(generator)j(matrix)e(of)f
+Ft(C)f FK(w)o(as)h(determined,)j(it)d(is)g(computed)i(from)e(either)h
+(the)g(parity)g(check)75 4017 y(matrix,)34 b(the)d(generator)j
+(polynomial,)i(the)31 b(check)i(polynomial)h(or)d(the)h(elements)h
+(\(if)e(possible\),)36 b(whiche)n(v)o(er)c(is)75 4130
+y(a)n(v)n(ailable.)216 4243 y(If)23 b Ft(C)g FK(is)h(a)f(non-linear)j
+(code,)e(the)g(function)i(returns)f(an)f(error)-5 b(.)p
+75 4359 1648 4 v 1764 4364 a FF(Example)p 2102 4359 V
+75 4383 4 25 v 3747 4383 V 75 4483 4 100 v 188 4453 a(gap>)44
+b(GeneratorMat\()i(HammingCode\()h(3,)c(GF\(2\))h(\))f(\);)p
+3747 4483 V 75 4583 V 188 4553 a([)g([)f(an)h(immutable)j(GF2)d(vector)
+h(of)f(length)i(7],)p 3747 4583 V 75 4682 V 273 4652
+a([)d(an)h(immutable)j(GF2)d(vector)h(of)f(length)i(7],)p
+3747 4682 V 75 4782 V 273 4752 a([)d(an)h(immutable)j(GF2)d(vector)h
+(of)f(length)i(7],)p 3747 4782 V 75 4882 V 273 4852 a([)d(an)h
+(immutable)j(GF2)d(vector)h(of)f(length)i(7])e(])p 3747
+4882 V 75 4981 V 188 4951 a(gap>)h(Display\(last\);)p
+3747 4981 V 75 5081 V 230 5051 a(1)f(1)g(1)f(.)h(.)g(.)f(.)p
+3747 5081 V 75 5181 V 230 5151 a(1)h(.)g(.)f(1)h(1)g(.)f(.)p
+3747 5181 V 75 5280 V 230 5250 a(.)h(1)g(.)f(1)h(.)g(1)f(.)p
+3747 5280 V 75 5380 V 230 5350 a(1)h(1)g(.)f(1)h(.)g(.)f(1)p
+3747 5380 V 75 5479 V 188 5449 a(gap>)i(GeneratorMat\()i
+(RepetitionCode\()i(5,)43 b(GF\(25\))h(\))f(\);)p 3747
+5479 V 75 5579 V 188 5549 a([)g([)f(Z\(5\)\2100,)j(Z\(5\)\2100,)g
+(Z\(5\)\2100,)f(Z\(5\)\2100,)h(Z\(5\)\2100)g(])d(])p
+3747 5579 V Black Black eop end end
+%%Page: 42 42
+TeXDict begin HPSdict begin 42 41 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.42) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(42)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(GeneratorMat\()i(NullCode\()g(14,)d(GF\(4\))h(\))f(\);)p
+3747 428 V 75 528 V 188 498 a([)85 b(])p 3747 528 V 75
+553 4 25 v 3747 553 V 75 556 3675 4 v 75 689 a
+SDict begin H.S end
+ 75 689
+a 75 689 a
+SDict begin 13.6 H.A end
+ 75 689 a 75 689 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.2) cvn H.B /DEST pdfmark end
+ 75 689 a 116 x FJ(4.7.2)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(CheckMat)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 980 a Fs(\006)22 b Ft(CheckMat\()50 b(C)d(\))2723
+b Fr(\(function\))p Black 216 1206 a Ft(CheckMat)30 b
+FK(returns)f(a)f(parity)g(check)h(matrix)g(of)e Ft(C)q
+FK(.)40 b(The)27 b(code)i(consists)h(of)d(all)h(w)o(ords)g(orthogonal)j
+(to)c(each)75 1318 y(of)e(the)g(ro)n(ws)g(of)g(this)g(matrix.)34
+b(The)24 b(transpose)k(of)d(the)g(matrix)h(is)e(a)h(right)h(in)l(v)o
+(erse)g(of)f(the)h(generator)h(matrix.)34 b(The)75 1431
+y(parity)22 b(check)g(matrix)g(is)e(computed)j(from)e(either)h(the)f
+(generator)i(matrix,)f(the)f(generator)i(polynomial,)h(the)d(check)75
+1544 y(polynomial)26 b(or)d(the)h(elements)h(of)f Ft(C)f
+FK(\(if)g(possible\),)j(whiche)n(v)o(er)f(is)e(a)n(v)n(ailable.)216
+1657 y(If)g Ft(C)g FK(is)h(a)f(non-linear)j(code,)e(the)g(function)i
+(returns)f(an)f(error)-5 b(.)p 75 1773 1648 4 v 1764
+1778 a FF(Example)p 2102 1773 V 75 1798 4 25 v 3747 1798
+V 75 1897 4 100 v 188 1868 a(gap>)44 b(CheckMat\()h(HammingCode\(3,)i
+(GF\(2\))d(\))f(\);)p 3747 1897 V 75 1997 V 188 1967
+a([)g([)f(0*Z\(2\),)j(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h
+(Z\(2\)\2100,)g(Z\(2\)\2100,)g(Z\(2\)\2100)f(],)p 3747
+1997 V 75 2097 V 273 2067 a([)e(0*Z\(2\),)j(Z\(2\)\2100,)g
+(Z\(2\)\2100,)f(0*Z\(2\),)h(0*Z\(2\),)g(Z\(2\)\2100,)g(Z\(2\)\2100)f
+(],)p 3747 2097 V 75 2196 V 273 2166 a([)e(Z\(2\)\2100,)j(0*Z\(2\),)g
+(Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100,)g(0*Z\(2\),)g(Z\(2\)\2100)f(])
+f(])p 3747 2196 V 75 2296 V 188 2266 a(gap>)h(Display\(last\);)p
+3747 2296 V 75 2396 V 230 2366 a(.)f(.)g(.)f(1)h(1)g(1)f(1)p
+3747 2396 V 75 2495 V 230 2465 a(.)h(1)g(1)f(.)h(.)g(1)f(1)p
+3747 2495 V 75 2595 V 230 2565 a(1)h(.)g(1)f(.)h(1)g(.)f(1)p
+3747 2595 V 75 2694 V 188 2665 a(gap>)i(CheckMat\()h(RepetitionCode\()i
+(5,)d(GF\(25\))g(\))f(\);)p 3747 2694 V 75 2794 V 188
+2764 a([)g([)f(Z\(5\)\2100,)j(Z\(5\)\2102,)g(0*Z\(5\),)f(0*Z\(5\),)h
+(0*Z\(5\))g(],)p 3747 2794 V 75 2894 V 273 2864 a([)d(0*Z\(5\),)j
+(Z\(5\)\2100,)g(Z\(5\)\2102,)f(0*Z\(5\),)h(0*Z\(5\))g(],)p
+3747 2894 V 75 2993 V 273 2963 a([)d(0*Z\(5\),)j(0*Z\(5\),)g
+(Z\(5\)\2100,)f(Z\(5\)\2102,)h(0*Z\(5\))g(],)p 3747 2993
+V 75 3093 V 273 3063 a([)d(0*Z\(5\),)j(0*Z\(5\),)g(0*Z\(5\),)f
+(Z\(5\)\2100,)h(Z\(5\)\2102)g(])d(])p 3747 3093 V 75
+3193 V 188 3163 a(gap>)i(CheckMat\()h(WholeSpaceCode\()i(12,)d(GF\(4\))
+g(\))f(\);)p 3747 3193 V 75 3292 V 188 3262 a([)85 b(])p
+3747 3292 V 75 3317 4 25 v 3747 3317 V 75 3320 3675 4
+v 75 3453 a
+SDict begin H.S end
+ 75 3453 a 75 3453 a
+SDict begin 13.6 H.A end
+ 75 3453 a 75 3453 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.3) cvn H.B /DEST pdfmark end
+ 75
+3453 a 117 x FJ(4.7.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorP)n(ol)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3744 a Fs(\006)22 b
+Ft(GeneratorPol\()51 b(C)c(\))2538 b Fr(\(function\))p
+Black 216 3970 a Ft(GeneratorPol)33 b FK(returns)e(the)f(generator)i
+(polynomial)g(of)d Ft(C)q FK(.)45 b(The)29 b(code)i(consists)g(of)f
+(all)f(multiples)j(of)d(the)75 4083 y(generator)i(polynomial)g(modulo)f
+Fq(x)1234 4050 y Fm(n)1287 4083 y Fv(\000)15 b FK(1,)28
+b(where)i Fq(n)e FK(is)h(the)g(w)o(ord)g(length)h(of)f
+Ft(C)p FK(.)44 b(The)28 b(generator)j(polynomial)g(is)75
+4196 y(determined)e(from)f(either)g(the)g(check)g(polynomial,)j(the)c
+(generator)j(or)d(check)i(matrix)f(or)f(the)g(elements)i(of)e
+Ft(C)g FK(\(if)75 4308 y(possible\),)f(whiche)n(v)o(er)e(is)g(a)n(v)n
+(ailable.)216 4421 y(If)f Ft(C)g FK(is)h(not)g(a)f(c)o(yclic)h(code,)g
+(the)g(function)i(returns)f(`f)o(alse'.)p 75 4544 1648
+4 v 1764 4549 a FF(Example)p 2102 4544 V 75 4569 4 25
+v 3747 4569 V 75 4669 4 100 v 188 4639 a(gap>)44 b
+(GeneratorPol\(Generato)q(rMa)q(tCo)q(de)q(\([[)q(1,)49
+b(1,)43 b(0],)g([0,)g(1,)g(1]],)h(GF\(2\)\)\);)p 3747
+4669 V 75 4768 V 188 4738 a(Z\(2\)\2100+x_1)p 3747 4768
+V 75 4868 V 188 4838 a(gap>)g(GeneratorPol\()i(WholeSpaceCode\()i(4,)43
+b(GF\(2\))h(\))f(\);)p 3747 4868 V 75 4967 V 188 4938
+a(Z\(2\)\2100)p 3747 4967 V 75 5067 V 188 5037 a(gap>)h(GeneratorPol\()
+i(NullCode\()g(7,)d(GF\(3\))h(\))f(\);)p 3747 5067 V
+75 5167 V 188 5137 a(-Z\(3\)\2100+x_1\2107)p 3747 5167
+V 75 5192 4 25 v 3747 5192 V 75 5195 3675 4 v Black Black
+eop end end
+%%Page: 43 43
+TeXDict begin HPSdict begin 43 42 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.43) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(43)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.4) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.7.4)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(CheckP)n(ol)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(CheckPol\()50 b(C)d(\))2723 b Fr(\(function\))p
+Black 216 799 a Ft(CheckPol)26 b FK(returns)f(the)f(check)g(polynomial)
+i(of)e Ft(C)p FK(.)k(The)23 b(code)i(consists)g(of)f(all)f(polynomials)
+41 b Fq(f)35 b FK(with)1513 1003 y Fq(f)26 b Fv(\001)13
+b Fq(h)20 b Fv(\021)g FK(0)j Fo(\()p FK(mod)h Fq(x)2086
+965 y Fm(n)2137 1003 y Fv(\000)13 b FK(1)p Fo(\))p Fp(;)75
+1207 y FK(where)28 b Fq(h)f FK(is)g(the)h(check)g(polynomial,)j(and)d
+Fq(n)f FK(is)g(the)h(w)o(ord)f(length)i(of)f Ft(C)p FK(.)40
+b(The)27 b(check)h(polynomial)i(is)d(computed)75 1320
+y(from)22 b(the)h(generator)i(polynomial,)g(the)e(generator)h(or)f
+(parity)h(check)f(matrix)g(or)g(the)f(elements)i(of)f
+Ft(C)f FK(\(if)g(possible\),)75 1433 y(whiche)n(v)o(er)j(is)e(a)n(v)n
+(ailable.)216 1546 y(If)g Ft(C)g FK(if)h(not)g(a)f(c)o(yclic)h(code,)g
+(the)g(function)i(returns)f(an)f(error)-5 b(.)p 75 1668
+1648 4 v 1764 1673 a FF(Example)p 2102 1668 V 75 1693
+4 25 v 3747 1693 V 75 1793 4 100 v 188 1763 a(gap>)44
+b(CheckPol\(GeneratorMat)q(Cod)q(e\([)q([1)q(,)k(1,)43
+b(0],)h([0,)f(1,)g(1]],)h(GF\(2\)\)\);)p 3747 1793 V
+75 1893 V 188 1863 a(Z\(2\)\2100+x_1+x_1\2102)p 3747
+1893 V 75 1992 V 188 1962 a(gap>)g(CheckPol\(WholeSpaceCo)q(de\()q(4,)
+49 b(GF\(2\)\)\);)p 3747 1992 V 75 2092 V 188 2062 a
+(Z\(2\)\2100+x_1\2104)p 3747 2092 V 75 2191 V 188 2162
+a(gap>)44 b(CheckPol\(NullCode\(7,G)q(F\(3)q(\)\)\))q(;)p
+3747 2191 V 75 2291 V 188 2261 a(Z\(3\)\2100)p 3747 2291
+V 75 2316 4 25 v 3747 2316 V 75 2319 3675 4 v 75 2452
+a
+SDict begin H.S end
+ 75 2452 a 75 2452 a
+SDict begin 13.6 H.A end
+ 75 2452 a 75 2452 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.5) cvn H.B /DEST pdfmark end
+ 75 2452 a 117
+x FJ(4.7.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RootsOfCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2743 a Fs(\006)22 b
+Ft(RootsOfCode\()51 b(C)c(\))2584 b Fr(\(function\))p
+Black 216 2969 a Ft(RootsOfCode)28 b FK(returns)f(a)d(list)h(of)g(all)g
+(zeros)h(of)f(the)g(generator)i(polynomial)g(of)e(a)f(c)o(yclic)i(code)
+g Ft(C)p FK(.)32 b(These)25 b(are)75 3082 y(\002nite)e(\002eld)g
+(elements)i(in)e(the)h(splitting)h(\002eld)e(of)g(the)h(generator)h
+(polynomial,)h Fq(GF)7 b Fo(\()p Fq(q)2811 3049 y Fm(m)2863
+3082 y Fo(\))p FK(,)23 b Fq(m)f FK(is)h(the)h(multiplicati)n(v)o(e)75
+3194 y(order)h(of)e(the)h(size)g(of)f(the)h(base)g(\002eld)g(of)f(the)h
+(code,)g(modulo)h(the)f(w)o(ord)f(length.)216 3307 y(The)29
+b(re)n(v)o(erse)i(process,)i(constructing)g(a)c(code)i(from)e(a)g(set)h
+(of)g(roots,)i(can)e(be)f(carried)i(out)f(by)g(the)g(function)75
+3420 y Ft(RootsCode)c FK(\(see)e Ft(RootsCode)i FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1154 3421 a
+SDict begin H.S end
+ 1154 3421
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1335 3358 a
+SDict begin H.R end
+ 1335 3358 a 1335 3420 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end
+ 1335
+3420 a Black FK(\)\).)p 75 3539 1648 4 v 1764 3544 a
+FF(Example)p 2102 3539 V 75 3564 4 25 v 3747 3564 V 75
+3664 4 100 v 188 3634 a(gap>)44 b(C1)f(:=)g(ReedSolomonCode\()k(16,)d
+(5)f(\);)p 3747 3664 V 75 3763 V 188 3734 a(a)g(cyclic)h([16,12,5]3..4)
+j(Reed-Solomon)f(code)e(over)g(GF\(17\))p 3747 3763 V
+75 3863 V 188 3833 a(gap>)g(RootsOfCode\()i(C1)d(\);)p
+3747 3863 V 75 3963 V 188 3933 a([)g(Z\(17\),)h(Z\(17\)\2102,)h
+(Z\(17\)\2103,)g(Z\(17\)\2104)g(])p 3747 3963 V 75 4062
+V 188 4032 a(gap>)f(C2)f(:=)g(RootsCode\()i(16,)f(last)f(\);)p
+3747 4062 V 75 4162 V 188 4132 a(a)g(cyclic)h([16,12,5]3..4)j(code)c
+(defined)i(by)e(roots)h(over)g(GF\(17\))p 3747 4162 V
+75 4262 V 188 4232 a(gap>)g(C1)f(=)f(C2;)p 3747 4262
+V 75 4361 V 188 4331 a(true)p 3747 4361 V 75 4386 4 25
+v 3747 4386 V 75 4389 3675 4 v 75 4533 a
+SDict begin H.S end
+ 75 4533 a 75
+4533 a
+SDict begin 13.6 H.A end
+ 75 4533 a 75 4533 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.8) cvn H.B /DEST pdfmark end
+ 75 4533 a 149 x FM(4.8)p 0.0 0.0 1.0
+TeXcolorrgb 119 w(P)o(arameters)29 b(of)g(Codes)p Black
+75 4778 a
+SDict begin H.S end
+ 75 4778 a 75 4778 a
+SDict begin 13.6 H.A end
+ 75 4778 a 75 4778 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.1) cvn H.B /DEST pdfmark end
+ 75
+4778 a 114 x FJ(4.8.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-7
+b(ordLength)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5067 a
+Fs(\006)22 b Ft(WordLength\()51 b(C)46 b(\))2631 b Fr(\(function\))p
+Black 216 5293 a Ft(WordLength)33 b FK(returns)g(the)d(parameter)i
+Fq(n)f FK(of)f Ft(C)p FK(,)h(the)g(w)o(ord)g(length)h(of)e(the)h
+(elements.)51 b(Elements)31 b(of)f(c)o(yclic)75 5405
+y(codes)25 b(are)e(polynomials)k(of)c(maximum)h(de)o(gree)g
+Fq(n)13 b Fv(\000)g FK(1,)23 b(as)g(calculations)k(are)d(carried)h(out)
+f(modulo)g Fq(x)3340 5372 y Fm(n)3391 5405 y Fv(\000)13
+b FK(1.)p Black Black eop end end
+%%Page: 44 44
+TeXDict begin HPSdict begin 44 43 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.44) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(44)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(WordLength\()i(NordstromRobinsonCod)q(e\(\))j(\);)p
+3747 523 V 75 623 V 188 593 a(16)p 3747 623 V 75 722
+V 188 692 a(gap>)44 b(WordLength\()i(PuncturedCode\()h
+(WholeSpaceCode\(7\))h(\))43 b(\);)p 3747 722 V 75 822
+V 188 792 a(6)p 3747 822 V 75 922 V 188 892 a(gap>)h(WordLength\()i
+(UUVCode\()f(WholeSpaceCode\(7\),)j(RepetitionCode\(7\))g(\))43
+b(\);)p 3747 922 V 75 1021 V 188 991 a(14)p 3747 1021
+V 75 1046 4 25 v 3747 1046 V 75 1049 3675 4 v 75 1181
+a
+SDict begin H.S end
+ 75 1181 a 75 1181 a
+SDict begin 13.6 H.A end
+ 75 1181 a 75 1181 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.2) cvn H.B /DEST pdfmark end
+ 75 1181 a 116
+x FJ(4.8.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Redundancy)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1471 a Fs(\006)22 b
+Ft(Redundancy\()51 b(C)46 b(\))2631 b Fr(\(function\))p
+Black 216 1697 a Ft(Redundancy)23 b FK(returns)f(the)f(redundanc)o(y)j
+Fq(r)e FK(of)e Ft(C)p FK(,)g(which)h(is)f(equal)i(to)e(the)h(number)g
+(of)g(check)g(symbols)h(in)e(each)75 1810 y(element.)30
+b(If)23 b Ft(C)g FK(is)g(not)h(a)f(linear)i(code)g(the)e(redundanc)o(y)
+k(is)c(not)h(de\002ned)g(and)g Ft(Redundancy)j FK(returns)e(an)f(error)
+-5 b(.)216 1923 y(If)23 b(a)g(linear)i(code)g Ft(C)e
+FK(has)h(dimension)h Fq(k)g FK(and)f(w)o(ord)f(length)i
+Fq(n)p FK(,)e(it)h(has)f(redundanc)o(y)k Fq(r)c Fo(=)c
+Fq(n)13 b Fv(\000)g Fq(k)r FK(.)p 75 2036 1648 4 v 1764
+2041 a FF(Example)p 2102 2036 V 75 2061 4 25 v 3747 2061
+V 75 2160 4 100 v 188 2130 a(gap>)44 b(C)e(:=)h(TernaryGolayCode\(\);)p
+3747 2160 V 75 2260 V 188 2230 a(a)g(cyclic)h([11,6,5]2)h(ternary)g
+(Golay)f(code)g(over)g(GF\(3\))p 3747 2260 V 75 2359
+V 188 2330 a(gap>)g(Redundancy\(C\);)p 3747 2359 V 75
+2459 V 188 2429 a(5)p 3747 2459 V 75 2559 V 188 2529
+a(gap>)g(Redundancy\()i(DualCode\(C\))g(\);)p 3747 2559
+V 75 2658 V 188 2628 a(6)p 3747 2658 V 75 2683 4 25 v
+3747 2683 V 75 2686 3675 4 v 75 2818 a
+SDict begin H.S end
+ 75 2818 a 75 2818
+a
+SDict begin 13.6 H.A end
+ 75 2818 a 75 2818 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.3) cvn H.B /DEST pdfmark end
+ 75 2818 a 116 x FJ(4.8.3)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(MinimumDistance)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3108 a Fs(\006)22 b Ft(MinimumDistance\()53
+b(C)46 b(\))2399 b Fr(\(function\))p Black 216 3334 a
+Ft(MinimumDistance)28 b FK(returns)c(the)f(minimum)g(distance)i(of)d
+Ft(C)q FK(,)g(the)h(lar)n(gest)i(inte)o(ger)f Fq(d)j
+FK(with)c(the)g(property)i(that)75 3447 y(e)n(v)o(ery)i(element)h(of)e
+Ft(C)g FK(has)h(at)g(least)g(a)g(Hamming)f(distance)j
+Fq(d)i FK(\(see)c Ft(DistanceCodeword)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3042 3448 a
+SDict begin H.S end
+ 3042 3448 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3223 3385 a
+SDict begin H.R end
+ 3223 3385 a 3223 3447 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end
+ 3223 3447 a Black
+FK(\)\))d(to)e(an)o(y)h(other)75 3560 y(element)i(of)f
+Ft(C)p FK(.)41 b(F)o(or)27 b(linear)i(codes,)g(the)f(minimum)g
+(distance)i(is)e(equal)g(to)g(the)g(minimum)g(weight.)42
+b(This)28 b(means)75 3673 y(that)34 b Fq(d)39 b FK(is)33
+b(also)i(the)f(smallest)h(positi)n(v)o(e)h(v)n(alue)e(with)g
+Fq(w)p Fo([)p Fq(d)21 b Fo(+)16 b FK(1)p Fo(])27 b Fv(6)p
+Fo(=)f FK(0,)36 b(where)e Fq(w)25 b Fo(=)h(\()p Fq(w)p
+Fo([)p FK(1)p Fo(])p Fp(;)10 b Fq(w)p Fo([)p FK(2)p Fo(])p
+Fp(;)g(:::;)g Fq(w)p Fo([)p Fq(n)p Fo(]\))36 b FK(is)e(the)75
+3786 y(weight)25 b(distrib)n(ution)i(of)d Ft(C)g FK(\(see)g
+Ft(WeightDistributio)q(n)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2012 3788 a
+SDict begin H.S end
+ 2012 3788 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(4.9.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2193 3724 a
+SDict begin H.R end
+ 2193 3724 a 2193 3786 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end
+ 2193 3786 a Black
+FK(\)\).)i(F)o(or)23 b(unrestricted)k(codes,)f Fq(d)i
+FK(is)c(the)g(smallest)75 3899 y(positi)n(v)o(e)34 b(v)n(alue)g(with)f
+Fq(w)p Fo([)p Fq(d)21 b Fo(+)16 b FK(1)p Fo(])26 b Fv(6)p
+Fo(=)f FK(0,)35 b(where)e Fq(w)f FK(is)g(the)h(inner)h(distrib)n(ution)
+j(of)c Ft(C)f FK(\(see)i Ft(InnerDistribution)75 4012
+y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4014 a
+SDict begin H.S end
+
+105 4014 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 3950 a
+SDict begin H.R end
+ 286 3950
+a 286 4012 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end
+ 286 4012 a Black FK(\)\).)216 4125 y(F)o(or)22
+b(codes)i(with)f(only)g(one)h(element,)f(the)h(minimum)e(distance)j(is)
+e(de\002ned)h(to)e(be)h(equal)h(to)f(the)g(w)o(ord)g(length.)216
+4237 y(F)o(or)d(linear)j(codes)f Ft(C)p FK(,)f(the)g(algorithm)i(used)f
+(is)f(the)g(follo)n(wing:)29 b(After)21 b(replacing)j
+Ft(C)d FK(by)g(a)f(permutation)k(equi)n(v)n(a-)75 4350
+y(lent)e Ft(C')p FK(,)f(one)h(may)e(assume)i(the)g(generator)h(matrix)f
+(has)g(the)f(follo)n(wing)i(form)e Fq(G)c Fo(=)h(\()p
+Fq(I)2814 4364 y Fm(k)2859 4350 y Fv(j)10 b Fq(A)p Fo(\))p
+FK(,)21 b(for)g(some)g Fq(k)12 b Fv(\002)e Fo(\()p Fq(n)g
+Fv(\000)g Fq(k)r Fo(\))75 4463 y FK(matrix)24 b Fq(A)p
+FK(.)j(If)c Fq(A)d Fo(=)g FK(0)j(then)h(return)h Fq(d)5
+b Fo(\()-5 b Fq(C)r Fo(\))21 b(=)e FK(1.)29 b(Ne)o(xt,)22
+b(\002nd)h(the)h(minimum)f(distance)j(of)d(the)h(code)g(spanned)h(by)f
+(the)75 4576 y(ro)n(ws)e(of)h Fq(A)p FK(.)k(Call)c(this)g(distance)i
+Fq(d)5 b Fo(\()p Fq(A)p Fo(\))p FK(.)28 b(Note)23 b(that)g
+Fq(d)5 b Fo(\()p Fq(A)p Fo(\))23 b FK(is)f(equal)i(to)f(the)g(the)g
+(Hamming)g(distance)i Fq(d)5 b Fo(\()p Fq(v)-7 b Fp(;)10
+b FK(0)p Fo(\))24 b FK(where)75 4689 y Fq(v)i FK(is)g(some)g(proper)i
+(linear)f(combination)i(of)d Fq(i)g FK(distinct)i(ro)n(ws)e(of)g
+Fq(A)p FK(.)36 b(Return)27 b Fq(d)5 b Fo(\()-5 b Fq(C)r
+Fo(\))22 b(=)g Fq(d)5 b Fo(\()p Fq(A)p Fo(\))14 b(+)g
+Fq(i)p FK(,)25 b(where)h Fq(i)g FK(is)g(as)g(in)75 4802
+y(the)e(pre)n(vious)h(step.)216 4915 y(This)36 b(command)i(may)e(also)h
+(be)f(called)i(using)g(the)f(syntax)h Ft(MinimumDistance\(C,)53
+b(w\))p FK(.)67 b(In)37 b(this)g(form,)75 5028 y Ft(MinimumDistance)31
+b FK(returns)d(the)f(minimum)g(distance)h(of)f(a)f(code)n(w)o(ord)i
+Ft(w)e FK(to)h(the)g(code)g Ft(C)p FK(,)g(also)g(called)h(the)f
+Fq(dis-)75 5141 y(tance)f(fr)l(om)f Fe(w)f Fq(to)h Ft(C)p
+FK(.)33 b(This)25 b(is)g(the)g(smallest)i(v)n(alue)f
+Fq(d)j FK(for)c(which)h(there)g(is)f(an)g(element)h Fq(c)f
+FK(of)g(the)g(code)h Ft(C)f FK(which)g(is)75 5254 y(at)e(distance)i
+Fq(d)j FK(from)23 b Ft(w)p FK(.)28 b(So)23 b Fq(d)k FK(is)c(also)h(the)
+g(minimum)f(v)n(alue)h(for)f(which)h Fq(D)p Fo([)p Fq(d)17
+b Fo(+)12 b FK(1)p Fo(])21 b Fv(6)p Fo(=)e FK(0,)k(where)g
+Fq(D)g FK(is)g(the)g(distance)75 5367 y(distrib)n(ution)k(of)d
+Ft(w)f FK(to)g Ft(C)g FK(\(see)h Ft(DistancesDistribu)q(tio)q(n)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2041 5369
+a
+SDict begin H.S end
+ 2041 5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2222 5305 a
+SDict begin H.R end
+ 2222 5305
+a 2222 5367 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end
+ 2222 5367 a Black FK(\)\).)216 5479 y(Note)d(that)h
+Ft(w)f FK(must)g(be)h(an)f(element)h(of)f(the)h(same)f(v)o(ector)i
+(space)f(as)f(the)h(elements)g(of)g Ft(C)p FK(.)36 b
+Ft(w)26 b FK(does)h(not)g(neces-)75 5592 y(sarily)e(belong)g(to)e(the)h
+(code)h(\(if)e(it)g(does,)h(the)g(minimum)g(distance)h(is)f(zero\).)p
+Black Black eop end end
+%%Page: 45 45
+TeXDict begin HPSdict begin 45 44 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.45) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(45)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(C)e(:=)h(MOLSCode\(7\);;)k(MinimumDistance\(C\);)p
+3747 523 V 75 623 V 188 593 a(3)p 3747 623 V 75 722 V
+188 692 a(gap>)d(WeightDistribution\(C\))q(;)p 3747 722
+V 75 822 V 188 792 a([)f(1,)g(0,)g(0,)g(24,)g(24)g(])p
+3747 822 V 75 922 V 188 892 a(gap>)h(MinimumDistance\()j
+(WholeSpaceCode\()h(5,)43 b(GF\(3\))h(\))f(\);)p 3747
+922 V 75 1021 V 188 991 a(1)p 3747 1021 V 75 1121 V 188
+1091 a(gap>)h(MinimumDistance\()j(NullCode\()f(4,)d(GF\(2\))h(\))f(\);)
+p 3747 1121 V 75 1220 V 188 1191 a(4)p 3747 1220 V 75
+1320 V 188 1290 a(gap>)h(C)e(:=)h(ConferenceCode\(9\);;)49
+b(MinimumDistance\(C\);)p 3747 1320 V 75 1420 V 188 1390
+a(4)p 3747 1420 V 75 1519 V 188 1489 a(gap>)44 b
+(InnerDistribution\(C\);)p 3747 1519 V 75 1619 V 188
+1589 a([)f(1,)g(0,)g(0,)g(0,)g(63/5,)h(9/5,)f(18/5,)h(0,)g(9/10,)g
+(1/10)f(])p 3747 1619 V 75 1719 V 188 1689 a(gap>)h(C)e(:=)h
+(MOLSCode\(7\);;)k(w)c(:=)g(CodewordNr\()j(C,)d(17)g(\);)p
+3747 1719 V 75 1818 V 188 1788 a([)g(3)f(3)h(6)g(2)f(])p
+3747 1818 V 75 1918 V 188 1888 a(gap>)i(MinimumDistance\()j(C,)c(w)g
+(\);)p 3747 1918 V 75 2017 V 188 1988 a(0)p 3747 2017
+V 75 2117 V 188 2087 a(gap>)h(C)e(:=)h(RemovedElementsCode)q(\()48
+b(C,)c(w)e(\);;)i(MinimumDistance\()j(C,)c(w)g(\);)p
+3747 2117 V 75 2217 V 188 2187 a(3)1143 b(#)43 b(so)g(w)g(no)g(longer)h
+(belongs)h(to)e(C)p 3747 2217 V 75 2242 4 25 v 3747 2242
+V 75 2245 3675 4 v 75 2455 a FK(See)23 b(also)h(the)g
+Fy(GU)m(A)-6 b(V)f(A)22 b FK(commands)i(relating)i(to)d(bounds)j(on)d
+(the)h(minimum)f(distance)j(in)d(section)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3240 2456 a
+SDict begin H.S end
+ 3240 2456 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3353 2393 a
+SDict begin H.R end
+ 3353 2393 a 3353 2455 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.1) cvn H.B /ANN pdfmark end
+ 3353 2455 a Black
+FK(.)75 2607 y
+SDict begin H.S end
+ 75 2607 a 75 2607 a
+SDict begin 13.6 H.A end
+ 75 2607 a 75 2607
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.4) cvn H.B /DEST pdfmark end
+ 75 2607 a 97 x FJ(4.8.4)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(MinimumDistanceLeon)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2878 a Fs(\006)f Ft(MinimumDistanceLe)q(on\()53 b(C)47
+b(\))2213 b Fr(\(function\))p Black 216 3104 a Ft(MinimumDistanceLeo)q
+(n)28 b FK(returns)c(the)f(\223probable\224)i(minimum)e(distance)h
+Fq(d)2686 3118 y Fm(Leon)2845 3104 y FK(of)f(a)f(linear)i(binary)g
+(code)f Ft(C)p FK(,)75 3217 y(using)g(an)g(implementation)i(of)d(Leon')
+-5 b(s)23 b(probabilistic)j(polynomial)f(time)d(algorithm.)30
+b(Brie\003y:)e(Let)22 b Ft(C)g FK(be)g(a)g(linear)75
+3330 y(code)j(of)f(dimension)i Fq(k)f FK(o)o(v)o(er)e
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(as)g(abo)o(v)o(e.)31
+b(The)23 b(algorithm)j(has)e(input)h(parameters)h Fq(s)e
+FK(and)g Fu(r)p FK(,)f(where)h Fq(s)f FK(is)h(an)75 3443
+y(inte)o(ger)h(between)f(2)g(and)g Fq(n)13 b Fv(\000)g
+Fq(k)r FK(,)21 b(and)j Fu(r)f FK(is)g(an)h(inte)o(ger)h(between)f(2)g
+(and)g Fq(k)r FK(.)p Black 211 3628 a Fv(\017)p Black
+46 w FK(Find)g(a)f(generator)j(matrix)e Fq(G)e FK(of)d
+Fq(C)r FK(.)p Black 211 3815 a Fv(\017)p Black 46 w FK(Randomly)25
+b(permute)f(the)g(columns)h(of)f Fq(G)p FK(.)p Black
+211 4002 a Fv(\017)p Black 46 w FK(Perform)j(Gaussian)g(elimination)i
+(on)d(the)h(permuted)h(matrix)f(to)f(obtain)i(a)d(ne)n(w)h(matrix)h(of)
+f(the)h(follo)n(wing)302 4115 y(form:)1770 4228 y Fq(G)20
+b Fo(=)g(\()p Fq(I)2010 4242 y Fm(k)2055 4228 y Fv(j)10
+b Fq(Z)15 b Fv(j)10 b Fq(B)p Fo(\))302 4393 y FK(with)29
+b Fq(Z)j FK(a)d Fq(k)16 b Fv(\002)f Fq(s)28 b FK(matrix.)46
+b(If)29 b Fo(\()p Fq(Z)5 b Fp(;)10 b Fq(B)p Fo(\))27
+b FK(is)i(the)g(zero)h(matrix)f(then)h(return)g(1)f(for)g(the)g
+(minimum)g(distance.)47 b(If)302 4506 y Fq(Z)22 b Fo(=)17
+b FK(0)k(b)n(ut)g(not)g Fq(B)f FK(then)h(either)h(choose)h(another)f
+(permutation)h(of)e(the)g(ro)n(ws)g(of)f Ft(C)h FK(or)f(return)i
+(`method)g(f)o(ails'.)p Black 211 4693 a Fv(\017)p Black
+46 w FK(Search)i Fq(Z)j FK(for)d(at)f(most)h Fu(r)e FK(ro)n(ws)i(that)g
+(lead)g(to)f(code)n(w)o(ords)j(of)d(weight)h(less)g(than)h
+Fu(r)p FK(.)p Black 211 4880 a Fv(\017)p Black 46 w FK(F)o(or)e(these)h
+(code)n(w)o(ords,)i(compute)e(the)g(weight)g(of)g(the)g(whole)g(w)o
+(ord)f(in)h Ft(C)p FK(.)k(Return)c(this)g(weight.)75
+5065 y(\(See)31 b(for)h(e)o(xample)g(J.)e(S.)g(Leon,)j([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1205 5066 a
+SDict begin H.S end
+ 1205 5066
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo88)p 0.0236 0.6179 0.0894
+TeXcolorrgb 1436 5003 a
+SDict begin H.R end
+ 1436 5003 a 1436 5065 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon88) cvn H.B /ANN pdfmark end
+ 1436
+5065 a Black 2 w FK(])e(for)g(more)h(details.\))54 b(Sometimes)31
+b(\(as)h(is)f(the)h(case)g(in)f Fy(GU)m(A)-6 b(V)f(A)p
+FK(\))30 b(this)75 5178 y(probabilistic)d(algorithm)f(is)d(repeated)j
+(se)n(v)o(eral)e(times)g(and)g(the)g(most)f(commonly)i(occurring)h(v)n
+(alue)e(is)g(tak)o(en.)p 75 5298 1648 4 v 1764 5303 a
+FF(Example)p 2102 5298 V 75 5323 4 25 v 3747 5323 V 75
+5423 4 100 v 188 5393 a(gap>)44 b(C:=RandomLinearCode\(5)q(0,2)q(2,G)q
+(F\()q(2\)\))q(;)p 3747 5423 V 75 5523 V 188 5493 a(a)85
+b([50,22,?])45 b(randomly)g(generated)h(code)e(over)f(GF\(2\))p
+3747 5523 V 75 5622 V 188 5592 a(gap>)h(MinimumDistanceLeon\(C)q(\);)49
+b(time;)p 3747 5622 V Black Black eop end end
+%%Page: 46 46
+TeXDict begin HPSdict begin 46 45 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.46) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(46)p Black 75 428 4 100 v 188 399 a FF(6)p
+3747 428 V 75 528 V 188 498 a(211)p 3747 528 V 75 628
+V 188 598 a(gap>)44 b(MinimumDistance\(C\);)k(time;)p
+3747 628 V 75 727 V 188 697 a(6)p 3747 727 V 75 827 V
+188 797 a(1204)p 3747 827 V 75 852 4 25 v 3747 852 V
+75 855 3675 4 v 75 988 a
+SDict begin H.S end
+ 75 988 a 75 988 a
+SDict begin 13.6 H.A end
+ 75 988 a 75
+988 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.5) cvn H.B /DEST pdfmark end
+ 75 988 a 116 x FJ(4.8.5)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Decr)n(easeMinimumDistanceUpperBound)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1279 a Fs(\006)22 b Ft(DecreaseMinimumDi)q(sta)q(nce)q
+(Upp)q(er)q(Bou)q(nd\()53 b(C,)47 b(t,)g(m)g(\))1286
+b Fr(\(function\))p Black 216 1504 a Ft(DecreaseMinimumDis)q(tan)q(ceU)
+q(pp)q(erB)q(oun)q(d)26 b FK(is)20 b(an)g(implementation)j(of)e(the)f
+(algorithm)i(for)f(the)f(minimum)75 1617 y(distance)25
+b(of)d(a)h(linear)g(binary)h(code)g Ft(C)e FK(by)h(Leon)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1651 1618 a
+SDict begin H.S end
+ 1651 1618
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo88)p 0.0236 0.6179 0.0894
+TeXcolorrgb 1882 1555 a
+SDict begin H.R end
+ 1882 1555 a 1882 1617 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon88) cvn H.B /ANN pdfmark end
+ 1882
+1617 a Black 1 w FK(].)28 b(This)22 b(algorithm)j(tries)e(to)g(\002nd)f
+(code)n(w)o(ords)j(with)d(small)75 1730 y(minimum)h(weights.)29
+b(The)23 b(parameter)h Ft(t)f FK(is)f(at)h(least)h(1)e(and)i(less)f
+(than)h(the)f(dimension)i(of)e Ft(C)p FK(.)28 b(The)22
+b(best)i(results)g(are)75 1843 y(obtained)i(if)d(it)g(is)g(close)i(to)e
+(the)h(dimension)h(of)f(the)g(code.)29 b(The)23 b(parameter)i
+Ft(m)e FK(gi)n(v)o(es)h(the)g(number)g(of)g(runs)g(that)g(the)75
+1956 y(algorithm)h(will)e(perform.)216 2069 y(The)61
+b(result)h(returned)h(is)d(a)h(record)h(with)f(tw)o(o)f(\002elds;)80
+b(the)61 b(\002rst,)70 b Ft(mindist)p FK(,)h(gi)n(v)o(es)62
+b(the)f(lo)n(west)75 2182 y(weight)53 b(found,)61 b(and)53
+b Ft(word)g FK(gi)n(v)o(es)g(the)g(corresponding)k(code)n(w)o(ord.)117
+b(\(This)52 b(w)o(as)g(implemented)j(before)75 2295 y
+Ft(MinimumDistanceLeo)q(n)f FK(b)n(ut)c(independently)-6
+b(.)109 b(The)48 b(older)i(manual)g(had)f(gi)n(v)o(en)h(the)f(command)h
+(incor)n(-)75 2408 y(rectly)-6 b(,)67 b(so)58 b(the)g(command)h(w)o(as)
+f(only)g(found)h(after)g(reading)h(all)e(the)g Fq(*.gi)g
+FK(\002les)f(in)h(the)g Fy(GU)m(A)-6 b(V)f(A)56 b FK(li-)75
+2521 y(brary)-6 b(.)83 b(Though)43 b(both)f Ft(MinimumDistance)k
+FK(and)c Ft(MinimumDistanceLeon)47 b FK(often)c(run)e(much)h(f)o(aster)
+g(than)75 2634 y Ft(DecreaseMinimumDis)q(tan)q(ceU)q(ppe)q(rB)q(oun)q
+(d)p FK(,)48 b Ft(DecreaseMinimumDis)q(tan)q(ce)q(Upp)q(erB)q(oun)q(d)d
+FK(appears)c(to)e(be)75 2746 y(more)24 b(accurate)h(than)f
+Ft(MinimumDistanceLe)q(on)p FK(.\))p 75 2865 1648 4 v
+1764 2870 a FF(Example)p 2102 2865 V 75 2890 4 25 v 3747
+2890 V 75 2990 4 100 v 188 2960 a(gap>)44 b(C:=RandomLinearCode\(5)q
+(,2,)q(GF\()q(2\))q(\);)p 3747 2990 V 75 3090 V 188 3060
+a(a)85 b([5,2,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p
+3747 3090 V 75 3189 V 188 3159 a(gap>)g(DecreaseMinimumDistan)q(ceU)q
+(ppe)q(rB)q(oun)q(d\(C)q(,1,)q(4\);)p 3747 3189 V 75
+3289 V 188 3259 a(rec\()g(mindist)g(:=)f(3,)g(word)h(:=)f([)g
+(0*Z\(2\),)i(Z\(2\)\2100,)f(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100)f(])
+f(\))p 3747 3289 V 75 3389 V 188 3359 a(gap>)h(MinimumDistance\(C\);)p
+3747 3389 V 75 3488 V 188 3458 a(3)p 3747 3488 V 75 3588
+V 188 3558 a(gap>)g(C:=RandomLinearCode\(8)q(,4,)q(GF\()q(2\))q(\);)p
+3747 3588 V 75 3687 V 188 3658 a(a)85 b([8,4,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 3687 V 75 3787
+V 188 3757 a(gap>)g(DecreaseMinimumDistan)q(ceU)q(ppe)q(rB)q(oun)q
+(d\(C)q(,3,)q(4\);)p 3747 3787 V 75 3887 V 188 3857 a(rec\()g(mindist)g
+(:=)f(2,)p 3747 3887 V 75 3986 V 273 3956 a(word)g(:=)g([)g
+(Z\(2\)\2100,)i(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)g
+(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100)f(])f(\))p 3747
+3986 V 75 4086 V 188 4056 a(gap>)h(MinimumDistance\(C\);)p
+3747 4086 V 75 4186 V 188 4156 a(2)p 3747 4186 V 75 4210
+4 25 v 3747 4210 V 75 4213 3675 4 v 75 4347 a
+SDict begin H.S end
+ 75 4347
+a 75 4347 a
+SDict begin 13.6 H.A end
+ 75 4347 a 75 4347 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.6) cvn H.B /DEST pdfmark end
+ 75 4347 a 116 x FJ(4.8.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(MinimumDistanceRandom)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4637 a Fs(\006)22 b
+Ft(MinimumDistanceRa)q(ndo)q(m\()53 b(C,)47 b(num,)h(s)e(\))1750
+b Fr(\(function\))p Black 216 4863 a Ft(MinimumDistanceRan)q(dom)35
+b FK(returns)30 b(an)f(upper)h(bound)g(for)f(the)g(minimum)g(distance)i
+Fq(d)3128 4877 y Fm(r)q(and)s(om)3371 4863 y FK(of)e(a)f(linear)75
+4976 y(binary)33 b(code)g Ft(C)p FK(,)g(using)g(a)e(probabilistic)k
+(polynomial)g(time)c(algorithm.)55 b(Brie\003y:)45 b(Let)32
+b Ft(C)f FK(be)h(a)f(linear)i(code)f(of)75 5089 y(dimension)k
+Fq(k)e FK(o)o(v)o(er)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))34
+b FK(as)f(abo)o(v)o(e.)60 b(The)33 b(algorithm)i(has)f(input)h
+(parameters)h Fq(num)d FK(and)h Fq(s)p FK(,)i(where)e
+Fq(s)f FK(is)g(an)75 5202 y(inte)o(ger)25 b(between)f(2)g(and)g
+Fq(n)13 b Fv(\000)g FK(1,)22 b(and)i Fq(num)f FK(is)h(an)f(inte)o(ger)i
+(greater)g(than)f(or)g(equal)g(to)g(1.)p Black 211 5389
+a Fv(\017)p Black 46 w FK(Find)g(a)f(generator)j(matrix)e
+Fq(G)e FK(of)d Fq(C)r FK(.)p Black 211 5577 a Fv(\017)p
+Black 46 w FK(Randomly)25 b(permute)f(the)g(columns)h(of)f
+Fq(G)p FK(,)e(written)i Fq(G)2050 5591 y Fm(p)2087 5577
+y FK(..)p Black Black eop end end
+%%Page: 47 47
+TeXDict begin HPSdict begin 47 46 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.47) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(47)p Black Black 211 399 a Fv(\017)p Black
+1829 598 a Fq(G)20 b Fo(=)g(\()p Fq(A)p Fp(;)10 b Fq(B)p
+Fo(\))302 798 y FK(with)24 b Fq(A)e FK(a)h Fq(k)14 b
+Fv(\002)f Fq(s)23 b FK(matrix.)29 b(If)23 b Fq(A)g FK(is)g(the)h(zero)g
+(matrix)g(then)g(return)h(`method)g(f)o(ails'.)p Black
+211 984 a Fv(\017)p Black 46 w FK(Search)h Fq(A)d FK(for)i(at)g(most)g
+(5)f(ro)n(ws)g(that)i(lead)f(to)g(code)n(w)o(ords,)i(in)d(the)h(code)c
+Fq(C)2689 998 y Fm(A)2757 984 y FK(with)k(generator)i(matrix)f
+Fq(A)p FK(,)d(of)302 1097 y(minimum)h(weight.)p Black
+211 1283 a Fv(\017)p Black 46 w FK(F)o(or)e(these)h(code)n(w)o(ords,)i
+(use)e(the)f(associated)k(linear)d(combination)j(to)c(compute)i(the)e
+(weight)i(of)e(the)h(whole)302 1396 y(w)o(ord)h(in)f
+Ft(C)q FK(.)28 b(Return)c(this)g(weight)g(and)g(code)n(w)o(ord.)75
+1580 y(This)f(probabilistic)j(algorithm)f(is)e(repeated)h
+Ft(num)g FK(times)f(\(with)g(dif)n(ferent)h(random)g(permutations)i(of)
+d(the)g(ro)n(ws)f(of)75 1693 y Fq(G)g FK(each)j(time\))e(and)h(the)g
+(weight)g(and)g(code)n(w)o(ord)h(of)f(the)g(lo)n(west)f(occurring)j
+(weight)f(is)e(tak)o(en.)p 75 1812 1648 4 v 1764 1817
+a FF(Example)p 2102 1812 V 75 1836 4 25 v 3747 1836 V
+75 1936 4 100 v 188 1906 a(gap>)44 b(C:=RandomLinearCode\(6)q(0,2)q
+(0,G)q(F\()q(2\)\))q(;)p 3747 1936 V 75 2036 V 188 2006
+a(a)85 b([60,20,?])45 b(randomly)g(generated)h(code)e(over)f(GF\(2\))p
+3747 2036 V 75 2135 V 188 2105 a(gap>)h(#mindist\(C\);time;)p
+3747 2135 V 75 2235 V 188 2205 a(gap>)g(#mindistleon\(C,10,30\))q(;ti)q
+(me;)49 b(#doesn't)c(work)f(well)p 3747 2235 V 75 2335
+V 188 2305 a(gap>)g(a:=MinimumDistanceRan)q(dom)q(\(C,)q(10)q(,30)q
+(\);t)q(ime)q(;)k(#)43 b(done)h(10)f(times)h(-with)g(fastest)g(time!!)p
+3747 2335 V 75 2434 V 3747 2434 V 75 2534 V 230 2504
+a(This)g(is)f(a)g(probabilistic)j(algorithm)g(which)e(may)f(return)i
+(the)e(wrong)h(answer.)p 3747 2534 V 75 2633 V 188 2604
+a([)f(12,)g([)g(0)f(0)h(0)g(0)f(0)h(0)g(1)f(0)h(1)g(0)f(0)h(0)g(0)g(0)f
+(0)h(0)g(1)f(1)h(0)g(0)f(1)h(0)g(0)f(0)h(1)g(0)f(0)h(0)g(0)f(0)h(0)g(1)
+f(0)h(0)p 3747 2633 V 75 2733 V 527 2703 a(1)f(0)h(0)g(0)f(0)h(0)g(0)f
+(0)h(0)g(0)f(1)h(0)g(0)g(0)f(1)h(0)g(0)f(0)h(0)g(1)f(0)h(0)g(0)f(0)h(1)
+g(0)f(])h(])p 3747 2733 V 75 2833 V 188 2803 a(130)p
+3747 2833 V 75 2932 V 188 2902 a(gap>)h(a[2])f(in)g(C;)p
+3747 2932 V 75 3032 V 188 3002 a(true)p 3747 3032 V 75
+3132 V 188 3102 a(gap>)h(b:=DecreaseMinimumDis)q(tan)q(ceU)q(pp)q(erB)q
+(oun)q(d\(C)q(,10)q(,1\))q(;)k(time;)c(#only)g(done)g(once!)p
+3747 3132 V 75 3231 V 188 3201 a(rec\()g(mindist)g(:=)f(12,)h(word)f
+(:=)g([)g(0*Z\(2\),)i(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g
+(0*Z\(2\),)p 3747 3231 V 75 3331 V 442 3301 a(Z\(2\)\2100,)g(0*Z\(2\),)
+f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h
+(0*Z\(2\),)g(0*Z\(2\),)p 3747 3331 V 75 3430 V 442 3401
+a(0*Z\(2\),)g(Z\(2\)\2100,)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g
+(Z\(2\)\2100,)f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)p 3747
+3430 V 75 3530 V 442 3500 a(Z\(2\)\2100,)g(0*Z\(2\),)f(0*Z\(2\),)h
+(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g
+(0*Z\(2\),)p 3747 3530 V 75 3630 V 442 3600 a(0*Z\(2\),)g(Z\(2\)\2100,)
+f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h
+(0*Z\(2\),)g(0*Z\(2\),)p 3747 3630 V 75 3729 V 442 3699
+a(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g
+(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)p 3747
+3729 V 75 3829 V 442 3799 a(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h
+(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g
+(0*Z\(2\))f(])f(\))p 3747 3829 V 75 3929 V 188 3899 a(649)p
+3747 3929 V 75 4028 V 188 3998 a(gap>)h(Codeword\(b!.word\))k(in)43
+b(C;)p 3747 4028 V 75 4128 V 188 4098 a(true)p 3747 4128
+V 75 4227 V 188 4198 a(gap>)h(MinimumDistance\(C\);ti)q(me;)p
+3747 4227 V 75 4327 V 188 4297 a(12)p 3747 4327 V 75
+4427 V 188 4397 a(196)p 3747 4427 V 75 4526 V 188 4496
+a(gap>)g(c:=MinimumDistanceLeo)q(n\(C)q(\);t)q(im)q(e;)p
+3747 4526 V 75 4626 V 188 4596 a(12)p 3747 4626 V 75
+4726 V 188 4696 a(66)p 3747 4726 V 75 4825 V 188 4795
+a(gap>)g(C:=RandomLinearCode\(3)q(0,1)q(0,G)q(F\()q(3\)\))q(;)p
+3747 4825 V 75 4925 V 188 4895 a(a)85 b([30,10,?])45
+b(randomly)g(generated)h(code)e(over)f(GF\(3\))p 3747
+4925 V 75 5024 V 188 4995 a(gap>)h(a:=MinimumDistanceRan)q(dom)q(\(C,)q
+(10)q(,10)q(\);t)q(ime)q(;)p 3747 5024 V 75 5124 V 3747
+5124 V 75 5224 V 230 5194 a(This)g(is)f(a)g(probabilistic)j(algorithm)g
+(which)e(may)f(return)i(the)e(wrong)h(answer.)p 3747
+5224 V 75 5323 V 188 5293 a([)f(13,)g([)g(0)f(0)h(0)g(1)f(0)h(0)g(0)f
+(0)h(0)g(0)f(1)h(0)g(2)g(2)f(1)h(1)g(0)f(2)h(2)g(0)f(1)h(0)g(2)f(1)h(0)
+g(0)f(0)h(1)g(0)f(2)h(])g(])p 3747 5323 V 75 5423 V 188
+5393 a(229)p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(a[2])f(in)g(C;)p
+3747 5523 V 75 5622 V 188 5592 a(true)p 3747 5622 V Black
+Black eop end end
+%%Page: 48 48
+TeXDict begin HPSdict begin 48 47 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.48) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(48)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(MinimumDistance\(C\);ti)q(me;)p 3747 428 V 75 528 V
+188 498 a(9)p 3747 528 V 75 628 V 188 598 a(45)p 3747
+628 V 75 727 V 188 697 a(gap>)g(c:=MinimumDistanceLeo)q(n\(C)q(\);)p
+3747 727 V 75 827 V 188 797 a(Code)g(must)f(be)g(binary.)i(Quitting.)p
+3747 827 V 75 927 V 188 897 a(0)p 3747 927 V 75 1026
+V 188 996 a(gap>)f(a:=MinimumDistanceRan)q(dom)q(\(C,)q(1,)q(29\))q
+(;ti)q(me;)p 3747 1026 V 75 1126 V 3747 1126 V 75 1225
+V 230 1196 a(This)g(is)f(a)g(probabilistic)j(algorithm)g(which)e(may)f
+(return)i(the)e(wrong)h(answer.)p 3747 1225 V 75 1325
+V 188 1295 a([)f(10,)g([)g(0)f(0)h(1)g(0)f(2)h(0)g(2)f(0)h(1)g(0)f(0)h
+(0)g(0)g(0)f(0)h(1)g(0)f(1)h(0)g(0)f(1)h(0)g(0)f(0)h(0)g(0)f(2)h(2)g(2)
+f(0)h(])g(])p 3747 1325 V 75 1425 V 188 1395 a(53)p 3747
+1425 V 75 1450 4 25 v 3747 1450 V 75 1453 3675 4 v 75
+1685 a
+SDict begin H.S end
+ 75 1685 a 75 1685 a
+SDict begin 13.6 H.A end
+ 75 1685 a 75 1685 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.7) cvn H.B /DEST pdfmark end
+ 75 1685
+a 117 x FJ(4.8.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Co)o(v)o(eringRadius)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1976 a Fs(\006)22 b
+Ft(CoveringRadius\()52 b(C)47 b(\))2445 b Fr(\(function\))p
+Black 216 2202 a Ft(CoveringRadius)35 b FK(returns)d(the)e
+Fq(co)o(vering)j(r)o(adius)f FK(of)e(a)g(linear)i(code)f
+Ft(C)p FK(.)49 b(This)30 b(is)g(the)h(smallest)g(number)h
+Fq(r)75 2315 y FK(with)25 b(the)h(property)h(that)f(each)g(element)g
+Fq(v)f FK(of)g(the)g(ambient)i(v)o(ector)f(space)g(of)f
+Ft(C)g FK(has)h(at)f(most)g(a)g(distance)i Fq(r)g FK(to)e(the)75
+2428 y(code)i Ft(C)p FK(.)35 b(So)26 b(for)g(each)g(v)o(ector)h
+Fq(v)f FK(there)h(must)f(be)g(an)g(element)h Fq(c)e FK(of)h
+Ft(C)g FK(with)g Fq(d)5 b Fo(\()p Fq(v)-7 b Fp(;)10 b
+Fq(c)p Fo(\))23 b Fv(\024)e Fq(r)r FK(.)36 b(The)25 b(smallest)j(co)o
+(v)o(ering)75 2541 y(radius)h(of)f(an)o(y)g Fo([)p Fq(n)p
+Fp(;)10 b Fq(k)r Fo(])28 b FK(binary)h(linear)g(code)g(is)e(denoted)h
+Fq(t)6 b Fo(\()p Fq(n)p Fp(;)k Fq(k)r Fo(\))p FK(.)42
+b(A)27 b(binary)i(linear)g(code)g(with)e(reasonable)k(small)75
+2653 y(co)o(v)o(ering)25 b(radius)g(is)e(called)i(a)e
+Fq(co)o(vering)j(code)p FK(.)216 2766 y(If)31 b Ft(C)g
+FK(is)h(a)f(perfect)i(code)f(\(see)g Ft(IsPerfectCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1873 2767 a
+SDict begin H.S end
+
+1873 2767 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.6)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2054 2704 a
+SDict begin H.R end
+ 2054 2704
+a 2054 2766 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.6) cvn H.B /ANN pdfmark end
+ 2054 2766 a Black FK(\)\),)e(the)d(co)o(v)o(ering)j
+(radius)e(is)g(equal)g(to)e Fq(t)6 b FK(,)32 b(the)g(num-)75
+2879 y(ber)43 b(of)g(errors)i(the)e(code)h(can)f(correct,)50
+b(where)43 b Fq(d)36 b Fo(=)31 b FK(2)n Fq(t)26 b Fo(+)20
+b FK(1,)47 b(with)c Fq(d)48 b FK(the)43 b(minimum)g(distance)i(of)e
+Ft(C)g FK(\(see)75 2992 y Ft(MinimumDistance)28 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 823 2993 a
+SDict begin H.S end
+ 823 2993
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1004 2930 a
+SDict begin H.R end
+ 1004 2930 a 1004 2992 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end
+ 1004
+2992 a Black FK(\)\).)216 3105 y(If)j(there)g(e)o(xists)h(a)e(function)
+j(called)f Ft(SpecialCoveringRadi)q(us)k FK(in)31 b(the)g(`operations')
+j(\002eld)c(of)h(the)g(code,)75 3218 y(then)36 b(this)f(function)i
+(will)e(be)g(called)h(to)f(compute)i(the)e(co)o(v)o(ering)h(radius)h
+(of)e(the)g(code.)64 b(At)34 b(the)h(moment,)j(no)75
+3331 y(code-speci\002c)26 b(functions)g(are)e(implemented.)216
+3444 y(If)34 b(the)f(length)j(of)d Ft(BoundsCoveringRadi)q(us)39
+b FK(\(see)c Ft(BoundsCoveringRadius)40 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2952 3445 a
+SDict begin H.S end
+ 2952 3445 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3133 3382 a
+SDict begin H.R end
+ 3133 3382 a 3133 3444 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.2.1) cvn H.B /ANN pdfmark end
+ 3133 3444 a Black
+FK(\)\),)c(is)e(1,)i(then)e(the)75 3557 y(v)n(alue)24
+b(in)p Black Black 168 3744 a Ft(C.boundsCoveringRad)q(ius)75
+3932 y FK(is)f(returned.)31 b(Otherwise,)24 b(the)g(function)p
+Black Black 168 4120 a Ft(C.operations.Coveri)q(ngR)q(adi)q(us)75
+4307 y FK(is)f(e)o(x)o(ecuted,)i(unless)g(the)f(redundanc)o(y)i(of)e
+Ft(C)f FK(is)g(too)h(lar)n(ge.)30 b(In)24 b(the)g(last)g(case,)f(a)h(w)
+o(arning)g(is)g(issued.)216 4420 y(The)f(algorithm)h(used)g(to)e
+(compute)j(the)e(co)o(v)o(ering)h(radius)g(is)f(the)g(follo)n(wing.)30
+b(First,)22 b Ft(CosetLeadersMatFF)q(E)75 4533 y FK(is)k(used)h(to)g
+(compute)g(the)g(list)g(of)f(coset)h(leaders)h(\(which)f(returns)h(a)e
+(code)n(w)o(ord)i(in)e(each)h(coset)h(of)e Fq(GF)7 b
+Fo(\()p Fq(q)p Fo(\))3507 4500 y Fm(n)3545 4533 y Fp(=)-5
+b Fq(C)28 b FK(of)75 4646 y(minimum)23 b(weight\).)29
+b(Then)23 b Ft(WeightVecFFE)j FK(is)d(used)h(to)e(compute)i(the)g
+(weight)f(of)g(each)g(of)g(these)h(coset)g(leaders.)75
+4759 y(The)f(program)i(returns)g(the)f(maximum)f(of)h(these)g(weights.)
+p 75 4881 1648 4 v 1764 4886 a FF(Example)p 2102 4881
+V 75 4906 4 25 v 3747 4906 V 75 5006 4 100 v 188 4976
+a(gap>)44 b(H)e(:=)h(RandomLinearCode\(10)q(,)48 b(5,)c(GF\(2\)\);)p
+3747 5006 V 75 5106 V 188 5076 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 5106 V 75 5205
+V 188 5175 a(gap>)g(CoveringRadius\(H\);)p 3747 5205
+V 75 5305 V 188 5275 a(3)p 3747 5305 V 75 5405 V 188
+5375 a(gap>)g(H)e(:=)h(HammingCode\(4,)k(GF\(2\)\);;)f
+(IsPerfectCode\(H\);)p 3747 5405 V 75 5504 V 188 5474
+a(true)p 3747 5504 V 75 5604 V 188 5574 a(gap>)e(CoveringRadius\(H\);)p
+3747 5604 V Black Black eop end end
+%%Page: 49 49
+TeXDict begin HPSdict begin 49 48 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.49) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(49)p Black 75 428 4 100 v 188 399 a FF(1)974
+b(#)43 b(Hamming)i(codes)f(have)f(minimum)i(distance)g(3)p
+3747 428 V 75 528 V 188 498 a(gap>)f(CoveringRadius\(ReedSo)q(lom)q
+(onC)q(od)q(e\(7)q(,4\))q(\);)p 3747 528 V 75 628 V 188
+598 a(3)p 3747 628 V 75 727 V 188 697 a(gap>)g(CoveringRadius\()j
+(BCHCode\()e(17,)f(3,)f(GF\(2\))h(\))e(\);)p 3747 727
+V 75 827 V 188 797 a(3)p 3747 827 V 75 927 V 188 897
+a(gap>)i(CoveringRadius\()j(HammingCode\()g(5,)c(GF\(2\))h(\))e(\);)p
+3747 927 V 75 1026 V 188 996 a(1)p 3747 1026 V 75 1126
+V 188 1096 a(gap>)i(C)e(:=)h(ReedMullerCode\()48 b(1,)43
+b(9)f(\);;)p 3747 1126 V 75 1225 V 188 1196 a(gap>)i(CoveringRadius\()j
+(C)c(\);)p 3747 1225 V 75 1325 V 188 1295 a(CoveringRadius:)k(warning,)
+e(the)f(covering)h(radius)f(of)p 3747 1325 V 75 1425
+V 188 1395 a(this)g(code)f(cannot)i(be)e(computed)i(straightforward.)p
+3747 1425 V 75 1524 V 188 1494 a(Try)e(to)g(use)h
+(IncreaseCoveringRadiu)q(sL)q(owe)q(rBo)q(und)q(\()k(code)c(\).)p
+3747 1524 V 75 1624 V 188 1594 a(\(see)g(the)f(manual)h(for)g(more)f
+(details\).)p 3747 1624 V 75 1724 V 188 1694 a(The)g(covering)i(radius)
+g(of)e(code)g(lies)h(in)f(the)h(interval:)p 3747 1724
+V 75 1823 V 188 1793 a([)f(240)g(..)g(248)g(])p 3747
+1823 V 75 1848 4 25 v 3747 1848 V 75 1851 3675 4 v 75
+2064 a FK(See)23 b(also)h(the)g Fy(GU)m(A)-6 b(V)f(A)22
+b FK(commands)i(relating)i(to)d(bounds)j(on)d(the)h(minimum)f(distance)
+j(in)d(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3240
+2065 a
+SDict begin H.S end
+ 3240 2065 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3353 2002
+a
+SDict begin H.R end
+ 3353 2002 a 3353 2064 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.2) cvn H.B /ANN pdfmark end
+ 3353 2064 a Black FK(.)75 2217
+y
+SDict begin H.S end
+ 75 2217 a 75 2217 a
+SDict begin 13.6 H.A end
+ 75 2217 a 75 2217 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.8) cvn H.B /DEST pdfmark end
+ 75 2217 a 96
+x FJ(4.8.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(SetCo)o(v)o(eringRadius)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2487 a Fs(\006)f Ft(SetCoveringRadius)
+q(\()52 b(C,)47 b(intlist)i(\))1889 b Fr(\(function\))p
+Black 216 2713 a Ft(SetCoveringRadius)28 b FK(enables)d(the)d(user)i
+(to)e(set)h(the)g(co)o(v)o(ering)h(radius)g(herself,)g(instead)g(of)f
+(letting)h Fy(GU)m(A)-6 b(V)f(A)75 2826 y FK(compute)27
+b(it.)35 b(If)25 b Ft(intlist)i FK(is)f(an)g(inte)o(ger)l(,)h
+Fy(GU)m(A)-6 b(V)f(A)24 b FK(will)h(simply)i(put)f(it)f(in)h(the)f
+(`boundsCo)o(v)o(eringRadius)q(')31 b(\002eld.)75 2939
+y(If)23 b(it)g(is)f(a)h(list)g(of)g(inte)o(gers,)i(ho)n(we)n(v)o(er)l
+(,)e(it)g(will)g(intersect)i(this)f(list)f(with)g(the)g(`boundsCo)o(v)o
+(eringRadius')29 b(\002eld,)22 b(thus)75 3052 y(taking)31
+b(the)e(best)h(of)f(both)h(lists.)47 b(If)29 b(this)g(w)o(ould)h(lea)n
+(v)o(e)g(an)f(empty)h(list,)h(the)e(\002eld)g(is)g(set)h(to)f
+Ft(intlist)r FK(.)45 b(Because)75 3165 y(some)26 b(other)g
+(computations)j(use)d(the)f(co)o(v)o(ering)i(radius)g(of)f(the)g(code,)
+g(it)f(is)h(important)h(that)f(the)g(entered)h(v)n(alue)f(is)75
+3278 y(not)e(wrong,)g(otherwise)h(ne)n(w)e(results)i(may)e(be)h(in)l(v)
+n(alid.)p 75 3400 1648 4 v 1764 3405 a FF(Example)p 2102
+3400 V 75 3425 4 25 v 3747 3425 V 75 3525 4 100 v 188
+3495 a(gap>)44 b(C)e(:=)h(BCHCode\()i(17,)f(3,)f(GF\(2\))h(\);;)p
+3747 3525 V 75 3625 V 188 3595 a(gap>)g(BoundsCoveringRadius\()49
+b(C)43 b(\);)p 3747 3625 V 75 3724 V 188 3694 a([)g(3)f(..)h(4)g(])p
+3747 3724 V 75 3824 V 188 3794 a(gap>)h(SetCoveringRadius\()k(C,)43
+b([)g(2)f(..)i(3)e(])h(\);)p 3747 3824 V 75 3923 V 188
+3894 a(gap>)h(BoundsCoveringRadius\()49 b(C)43 b(\);)p
+3747 3923 V 75 4023 V 188 3993 a([)g([)f(2)h(..)g(3)g(])f(])p
+3747 4023 V 75 4048 4 25 v 3747 4048 V 75 4051 3675 4
+v 75 4194 a
+SDict begin H.S end
+ 75 4194 a 75 4194 a
+SDict begin 13.6 H.A end
+ 75 4194 a 75 4194 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.9) cvn H.B /DEST pdfmark end
+ 75
+4194 a 150 x FM(4.9)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Distrib)n(utions)p
+Black 75 4440 a
+SDict begin H.S end
+ 75 4440 a 75 4440 a
+SDict begin 13.6 H.A end
+ 75 4440 a 75 4440
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.1) cvn H.B /DEST pdfmark end
+ 75 4440 a 114 x FJ(4.9.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(MinimumW)-6 b(eightW)f(ords)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4728 a Fs(\006)22 b Ft(MinimumWeightWord)q(s\()53
+b(C)46 b(\))2260 b Fr(\(function\))p Black 216 4954 a
+Ft(MinimumWeightWords)29 b FK(returns)d(the)d(list)h(of)g(minimum)f
+(weight)h(code)n(w)o(ords)i(of)d Ft(C)p FK(.)216 5067
+y(This)g(algorithm)j(is)d(written)h(in)g(GAP)d(is)j(slo)n(w)-6
+b(,)23 b(so)g(is)h(only)g(suitable)i(for)d(small)h(codes.)p
+75 5190 1648 4 v 1764 5195 a FF(Example)p 2102 5190 V
+75 5215 4 25 v 3747 5215 V 75 5314 4 100 v 188 5284 a(gap>)44
+b(C:=HammingCode\(3,GF\(2)q(\)\);)p 3747 5314 V 75 5414
+V 188 5384 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f
+(GF\(2\))p 3747 5414 V 75 5514 V 188 5484 a(gap>)h
+(MinimumWeightWords\(C\))q(;)p 3747 5514 V 75 5613 V
+188 5583 a([)f([)f(1)h(0)g(0)f(0)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(0)g(1)f
+(0)h(1)g(0)g(],)g([)f(0)h(1)g(0)f(0)h(1)g(0)f(1)h(],)g([)g(1)f(0)h(0)g
+(1)f(1)h(0)g(0)f(],)i([)e(0)h(0)g(1)f(0)h(1)g(1)f(0)h(],)p
+3747 5613 V Black Black eop end end
+%%Page: 50 50
+TeXDict begin HPSdict begin 50 49 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.50) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(50)p Black 75 428 4 100 v 273 399 a FF([)42
+b(0)h(0)g(1)f(1)h(0)g(0)f(1)h(],)g([)g(1)f(1)h(1)g(0)f(0)h(0)g(0)g(])f
+(])p 3747 428 V 75 528 V 3747 528 V 75 553 4 25 v 3747
+553 V 75 556 3675 4 v 75 687 a
+SDict begin H.S end
+ 75 687 a 75 687 a
+SDict begin 13.6 H.A end
+ 75 687
+a 75 687 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.2) cvn H.B /DEST pdfmark end
+ 75 687 a 116 x FJ(4.9.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(W)-6 b(eightDistrib)n(ution)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 978 a Fs(\006)22 b Ft(WeightDistributio)q(n\()53
+b(C)46 b(\))2260 b Fr(\(function\))p Black 216 1203 a
+Ft(WeightDistribution)37 b FK(returns)c(the)e(weight)h(distrib)n(ution)
+i(of)d Ft(C)q FK(,)h(as)f(a)f(v)o(ector)-5 b(.)53 b(The)30
+b Fq(i)3103 1170 y Fm(t)5 b(h)3195 1203 y FK(element)32
+b(of)f(this)75 1316 y(v)o(ector)20 b(contains)i(the)e(number)g(of)g
+(elements)h(of)e Ft(C)g FK(with)g(weight)h Fq(i)9 b Fv(\000)g
+FK(1.)27 b(F)o(or)19 b(linear)h(codes,)i(the)d(weight)i(distrib)n
+(ution)75 1429 y(is)k(equal)h(to)e(the)h(inner)h(distrib)n(ution)j
+(\(see)c Ft(InnerDistribution)30 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2275 1431 a
+SDict begin H.S end
+ 2275 1431 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(4.9.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2456 1367 a
+SDict begin H.R end
+ 2456 1367 a 2456 1429 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end
+ 2456 1429 a Black
+FK(\)\).)j(If)25 b Fq(w)f FK(is)g(the)h(weight)h(distrib)n(ution)i(of)
+75 1542 y(a)23 b(linear)i(code)f Ft(C)q FK(,)e(it)h(must)h(ha)n(v)o(e)g
+(the)g(zero)g(code)n(w)o(ord,)h(so)e Fq(w)p Fo([)p FK(1)p
+Fo(])e(=)f FK(1)j(\(one)h(w)o(ord)g(of)f(weight)h(0\).)216
+1655 y(Some)f(codes,)i(such)f(as)g(the)g(Hamming)f(codes,)i(ha)n(v)o(e)
+f(precomputed)j(weight)d(distrib)n(utions.)33 b(F)o(or)23
+b(others,)i(the)75 1768 y(program)c(W)-7 b(eightDistrib)n(ution)25
+b(calls)c(the)f Fy(GAP)e FK(program)k Ft(DistancesDistributi)q(onM)q
+(atF)q(FE)q(Vec)q(FFE)q FK(,)j(which)75 1881 y(is)e(written)i(in)e(C.)f
+(See)h(also)h Ft(CodeWeightEnumera)q(tor)q FK(.)p 75
+1985 1648 4 v 1764 1990 a FF(Example)p 2102 1985 V 75
+2010 4 25 v 3747 2010 V 75 2110 4 100 v 188 2080 a(gap>)44
+b(WeightDistribution\()k(ConferenceCode\(9\))h(\);)p
+3747 2110 V 75 2210 V 188 2180 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(18,)g
+(0,)g(0,)g(0,)g(1)g(])p 3747 2210 V 75 2309 V 188 2279
+a(gap>)h(WeightDistribution\()k(RepetitionCode\()g(7,)43
+b(GF\(4\))h(\))f(\);)p 3747 2309 V 75 2409 V 188 2379
+a([)g(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(3)f(])p 3747
+2409 V 75 2508 V 188 2479 a(gap>)i(WeightDistribution\()k
+(WholeSpaceCode\()g(5,)43 b(GF\(2\))h(\))f(\);)p 3747
+2508 V 75 2608 V 188 2578 a([)g(1,)g(5,)g(10,)g(10,)g(5,)g(1)g(])p
+3747 2608 V 75 2633 4 25 v 3747 2633 V 75 2636 3675 4
+v 75 2767 a
+SDict begin H.S end
+ 75 2767 a 75 2767 a
+SDict begin 13.6 H.A end
+ 75 2767 a 75 2767 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.3) cvn H.B /DEST pdfmark end
+ 75
+2767 a 116 x FJ(4.9.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(InnerDistrib)n
+(ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3058 a Fs(\006)22
+b Ft(InnerDistribution)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p
+Black 216 3284 a Ft(InnerDistribution)36 b FK(returns)c(the)f(inner)g
+(distrib)n(ution)j(of)d Ft(C)p FK(.)49 b(The)30 b Fq(i)2538
+3251 y Fm(t)5 b(h)2628 3284 y FK(element)32 b(of)e(the)h(v)o(ector)g
+(contains)75 3396 y(the)c(a)n(v)o(erage)h(number)g(of)f(elements)h(of)e
+Ft(C)h FK(at)f(distance)j Fq(i)14 b Fv(\000)g FK(1)26
+b(to)g(an)h(element)h(of)e Ft(C)q FK(.)37 b(F)o(or)26
+b(linear)i(codes,)g(the)f(inner)75 3509 y(distrib)n(ution)g(is)d(equal)
+g(to)g(the)f(weight)i(distrib)n(ution)i(\(see)d Ft(WeightDistribution)
+29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2812 3511
+a
+SDict begin H.S end
+ 2812 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2993 3447 a
+SDict begin H.R end
+ 2993 3447
+a 2993 3509 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end
+ 2993 3509 a Black FK(\)\).)216 3622 y(Suppose)h
+Fq(w)e FK(is)h(the)g(inner)h(distrib)n(ution)j(of)c Ft(C)p
+FK(.)45 b(Then)29 b Fq(w)p Fo([)p FK(1)p Fo(])24 b(=)e
+FK(1,)30 b(because)h(each)f(element)g(of)f Ft(C)f FK(has)i(e)o(xactly)
+75 3735 y(one)h(element)g(at)f(distance)j(zero)e(\(the)g(element)g
+(itself\).)51 b(The)30 b(minimum)g(distance)j(of)d Ft(C)g
+FK(is)g(the)h(smallest)g(v)n(alue)75 3848 y Fq(d)24 b
+Fp(>)18 b FK(0)k(with)g Fq(w)p Fo([)p Fq(d)16 b Fo(+)11
+b FK(1)p Fo(])19 b Fv(6)p Fo(=)f FK(0,)k(because)i(a)e(distance)i
+(between)f(zero)f(and)h Fq(d)j FK(ne)n(v)o(er)c(occurs.)30
+b(See)22 b Ft(MinimumDistance)75 3961 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 3962 a
+SDict begin H.S end
+ 105 3962 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 3899 a
+SDict begin H.R end
+ 286 3899 a 286 3961 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end
+ 286 3961 a Black FK(\).)p
+75 4068 1648 4 v 1764 4073 a FF(Example)p 2102 4068 V
+75 4093 4 25 v 3747 4093 V 75 4192 4 100 v 188 4162 a(gap>)44
+b(InnerDistribution\()k(ConferenceCode\(9\))g(\);)p 3747
+4192 V 75 4292 V 188 4262 a([)43 b(1,)g(0,)g(0,)g(0,)g(63/5,)h(9/5,)f
+(18/5,)h(0,)g(9/10,)g(1/10)f(])p 3747 4292 V 75 4391
+V 188 4362 a(gap>)h(InnerDistribution\()k(RepetitionCode\()g(7,)43
+b(GF\(4\))h(\))e(\);)p 3747 4391 V 75 4491 V 188 4461
+a([)h(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(3)f(])p 3747
+4491 V 75 4516 4 25 v 3747 4516 V 75 4519 3675 4 v 75
+4737 a
+SDict begin H.S end
+ 75 4737 a 75 4737 a
+SDict begin 13.6 H.A end
+ 75 4737 a 75 4737 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.4) cvn H.B /DEST pdfmark end
+ 75 4737
+a 117 x FJ(4.9.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n
+(ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5028 a Fs(\006)22
+b Ft(DistancesDistribu)q(tio)q(n\()53 b(C,)47 b(w)g(\))1981
+b Fr(\(function\))p Black 216 5254 a Ft(DistancesDistribut)q(ion)31
+b FK(returns)26 b(the)f(distrib)n(ution)j(of)d(the)g(distances)i(of)e
+(all)f(elements)i(of)f Ft(C)f FK(to)h(a)f(code-)75 5367
+y(w)o(ord)j Ft(w)f FK(in)h(the)g(same)g(v)o(ector)h(space.)40
+b(The)26 b Fq(i)1511 5334 y Fm(t)5 b(h)1598 5367 y FK(element)28
+b(of)f(the)g(distance)i(distrib)n(ution)i(is)26 b(the)i(number)f(of)g
+(code-)75 5479 y(w)o(ords)k(of)g Ft(C)f FK(that)i(ha)n(v)o(e)f
+(distance)i Fq(i)15 b Fv(\000)g FK(1)31 b(to)f Ft(w)q
+FK(.)49 b(The)31 b(smallest)h(v)n(alue)f Fq(d)36 b FK(with)30
+b Fq(w)p Fo([)p Fq(d)20 b Fo(+)15 b FK(1)p Fo(])25 b
+Fv(6)p Fo(=)f FK(0,)32 b(is)f(de\002ned)g(as)g(the)75
+5592 y Fq(distance)26 b(to)d Ft(C)g FK(\(see)h Ft(MinimumDistance)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1481 5593
+a
+SDict begin H.S end
+ 1481 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1662 5530 a
+SDict begin H.R end
+ 1662 5530
+a 1662 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end
+ 1662 5592 a Black FK(\)\).)p Black Black
+eop end end
+%%Page: 51 51
+TeXDict begin HPSdict begin 51 50 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.51) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(51)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(H)e(:=)h(HadamardCode\(20\);)p 3747 523
+V 75 623 V 188 593 a(a)g(\(20,40,10\)6..8)k(Hadamard)e(code)e(of)h
+(order)g(20)f(over)g(GF\(2\))p 3747 623 V 75 722 V 188
+692 a(gap>)h(c)e(:=)h(Codeword\("101101011)q(010)q(10)q(010)q(101)q(",)
+49 b(H\);)p 3747 722 V 75 822 V 188 792 a([)43 b(1)f(0)h(1)g(1)f(0)h(1)
+g(0)f(1)h(1)g(0)f(1)h(0)g(1)f(0)h(0)g(1)g(0)f(1)h(0)g(1)f(])p
+3747 822 V 75 922 V 188 892 a(gap>)i(DistancesDistribution)q(\(H,)49
+b(c\);)p 3747 922 V 75 1021 V 188 991 a([)43 b(0,)g(0,)g(0,)g(0,)g(0,)g
+(1,)g(0,)g(7,)g(0,)g(12,)g(0,)g(12,)h(0,)f(7,)g(0,)g(1,)g(0,)g(0,)g(0,)
+g(0,)g(0)f(])p 3747 1021 V 75 1121 V 188 1091 a(gap>)i
+(MinimumDistance\(H,)k(c\);)p 3747 1121 V 75 1220 V 188
+1191 a(5)1143 b(#)43 b(distance)i(to)e(H)p 3747 1220
+V 75 1245 4 25 v 3747 1245 V 75 1248 3675 4 v 75 1382
+a
+SDict begin H.S end
+ 75 1382 a 75 1382 a
+SDict begin 13.6 H.A end
+ 75 1382 a 75 1382 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.5) cvn H.B /DEST pdfmark end
+ 75 1382 a 116
+x FJ(4.9.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(OuterDistrib)n(ution)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1672 a Fs(\006)22 b
+Ft(OuterDistribution)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p
+Black 216 1898 a FK(The)24 b(function)i Ft(OuterDistribution)k
+FK(returns)c(a)e(list)g(of)g(length)i Fq(q)2388 1865
+y Fm(n)2426 1898 y FK(,)d(where)i Fq(q)e FK(is)h(the)h(size)g(of)f(the)
+g(base)h(\002eld)75 2011 y(of)33 b Ft(C)g FK(and)g Fq(n)g
+FK(is)g(the)g(w)o(ord)g(length.)59 b(The)33 b(elements)h(of)f(the)h
+(list)f(consist)i(of)e(pairs,)j(the)d(\002rst)g(coordinate)j(being)75
+2124 y(an)e(element)g(of)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))867
+2091 y Fm(n)938 2124 y FK(\(this)34 b(is)g(a)f(code)n(w)o(ord)i(type\))
+f(and)g(the)g(second)i(coordinate)g(being)f(a)e(distrib)n(ution)k(of)75
+2237 y(distances)30 b(to)e(the)g(code)g(\(a)f(list)h(of)g(inte)o
+(gers\).)43 b(This)27 b(table)i(is)e Fq(very)i FK(lar)n(ge,)g(and)f
+(for)g Fq(n)23 b Fp(>)f FK(20)28 b(it)f(will)h(not)g(\002t)e(in)i(the)
+75 2350 y(memory)23 b(of)f(most)h(computers.)30 b(The)22
+b(function)j Ft(DistancesDistributi)q(on)j FK(\(see)23
+b Ft(DistancesDistribu)q(tio)q(n)75 2462 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 2464 a
+SDict begin H.S end
+ 105 2464 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(4.9.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 2400 a
+SDict begin H.R end
+ 286 2400 a 286 2462 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end
+ 286 2462 a Black FK(\)\))h(can)g(be)g
+(used)g(to)g(calculate)h(one)f(entry)h(of)e(the)h(list.)p
+75 2585 1648 4 v 1764 2590 a FF(Example)p 2102 2585 V
+75 2610 4 25 v 3747 2610 V 75 2710 4 100 v 188 2680 a(gap>)44
+b(C)e(:=)h(RepetitionCode\()48 b(3,)43 b(GF\(2\))h(\);)p
+3747 2710 V 75 2809 V 188 2779 a(a)f(cyclic)h([3,1,3]1)h(repetition)h
+(code)e(over)f(GF\(2\))p 3747 2809 V 75 2909 V 188 2879
+a(gap>)h(OD)f(:=)g(OuterDistribution\(C\);)p 3747 2909
+V 75 3009 V 188 2979 a([)g([)f([)h(0)g(0)f(0)h(],)g([)g(1,)g(0,)g(0,)g
+(1)f(])h(],)g([)g([)g(1)f(1)h(1)g(],)g([)f(1,)h(0,)g(0,)g(1)g(])g(],)p
+3747 3009 V 75 3108 V 273 3078 a([)f([)h(0)g(0)f(1)h(],)g([)g(0,)g(1,)g
+(1,)g(0)f(])h(],)g([)g([)g(1)f(1)h(0)g(],)g([)f(0,)h(1,)g(1,)g(0)g(])g
+(],)p 3747 3108 V 75 3208 V 273 3178 a([)f([)h(1)g(0)f(0)h(],)g([)g(0,)
+g(1,)g(1,)g(0)f(])h(],)g([)g([)g(0)f(1)h(1)g(],)g([)f(0,)h(1,)g(1,)g(0)
+g(])g(],)p 3747 3208 V 75 3307 V 273 3278 a([)f([)h(0)g(1)f(0)h(],)g([)
+g(0,)g(1,)g(1,)g(0)f(])h(],)g([)g([)g(1)f(0)h(1)g(],)g([)f(0,)h(1,)g
+(1,)g(0)g(])g(])f(])p 3747 3307 V 75 3407 V 188 3377
+a(gap>)i(WeightDistribution\(C\))49 b(=)43 b(OD[1][2];)p
+3747 3407 V 75 3507 V 188 3477 a(true)p 3747 3507 V 75
+3606 V 188 3576 a(gap>)h(DistancesDistribution)q(\()k(C,)43
+b(Codeword\("110"\))48 b(\))43 b(=)f(OD[4][2];)p 3747
+3606 V 75 3706 V 188 3676 a(true)p 3747 3706 V 75 3731
+4 25 v 3747 3731 V 75 3734 3675 4 v 75 3877 a
+SDict begin H.S end
+ 75 3877
+a 75 3877 a
+SDict begin 13.6 H.A end
+ 75 3877 a 75 3877 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4.10) cvn H.B /DEST pdfmark end
+ 75 3877 a 150 x FM(4.10)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Decoding)31 b(Functions)p
+Black 75 4145 a
+SDict begin H.S end
+ 75 4145 a 75 4145 a
+SDict begin 13.6 H.A end
+ 75 4145 a 75 4145
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.1) cvn H.B /DEST pdfmark end
+ 75 4145 a 92 x FJ(4.10.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Decode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4411 a
+Fs(\006)22 b Ft(Decode\()49 b(C,)e(r)g(\))2677 b Fr(\(function\))p
+Black 216 4637 a Ft(Decode)24 b FK(decodes)h Ft(r)d FK(\(a)g(')-5
+b(recei)n(v)o(ed)25 b(w)o(ord'\))e(with)g(respect)h(to)e(code)i
+Ft(C)e FK(and)h(returns)h(the)f(`message)h(w)o(ord')f(\(i.e.,)75
+4750 y(the)c(information)i(digits)f(associated)i(to)c(the)h(code)n(w)o
+(ord)h Fq(c)c Fv(2)11 b Fq(C)19 b FK(closest)i(to)d Ft(r)q
+FK(\).)26 b(Here)19 b Ft(r)f FK(can)h(be)g(a)f Fy(GU)m(A)-6
+b(V)f(A)17 b FK(code)n(w)o(ord)75 4863 y(or)29 b(a)g(list)g(of)g(code)n
+(w)o(ords.)47 b(First,)30 b(possible)h(errors)f(in)f
+Ft(r)g FK(are)g(corrected,)k(then)c(the)h(code)n(w)o(ord)g(is)f
+(decoded)i(to)e(an)75 4976 y Fq(information)i(code)o(wor)m(d)h(m)27
+b FK(\(and)i(not)f(an)h(element)g(of)f Ft(C)q FK(\).)42
+b(If)28 b(the)h(code)g(record)h(has)e(a)g(\002eld)g(`specialDecoder',)
+75 5089 y(this)h(special)i(algorithm)g(is)d(used)i(to)f(decode)h(the)f
+(v)o(ector)-5 b(.)46 b(Hamming)29 b(codes,)i(BCH)c(codes,)k(c)o(yclic)f
+(codes,)h(and)75 5202 y(generalized)d(Reed-Solomon)e(ha)n(v)o(e)g(such)
+f(a)g(special)h(algorithm.)34 b(\(The)25 b(algorithm)h(used)g(for)f
+(BCH)d(codes)k(is)f(the)75 5315 y(Sugiyama)k(algorithm)h(described,)i
+(for)c(e)o(xample,)i(in)e(section)i(5.4.3)f(of)f([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 2464 5316 a
+SDict begin H.S end
+ 2464 5316
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2671 5253 a
+SDict begin H.R end
+ 2671 5253 a 2671 5315 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 2671
+5315 a Black FK(].)43 b(A)27 b(special)j(decoder)g(has)f(also)75
+5428 y(being)i(written)g(for)g(the)g(generalized)i(Reed-Solomon)f(code)
+f(using)h(the)e(interpolation)k(algorithm.)51 b(F)o(or)29
+b(c)o(yclic)75 5540 y(codes,)i(the)f(error)n(-trapping)j(algorithm)e
+(is)e(used.\))47 b(If)29 b Ft(C)f FK(is)h(linear)i(and)e(no)h(special)g
+(decoder)i(\002eld)c(has)i(been)g(set)p Black Black eop
+end end
+%%Page: 52 52
+TeXDict begin HPSdict begin 52 51 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.52) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(52)p Black 75 399 a(then)32 b(syndrome)h(decoding)g(is)e
+(used.)53 b(Otherwise)32 b(\(when)f Ft(C)g FK(is)g(non-linear\),)36
+b(the)31 b(nearest)i(neighbor)h(decoding)75 511 y(algorithm)25
+b(is)f(used)g(\(which)g(is)g(v)o(ery)f(slo)n(w\).)216
+624 y(A)g(special)i(decoder)g(can)f(be)g(created)h(by)e(de\002ning)i(a)
+e(function)p Black Black 168 810 a Ft(C!.SpecialDecoder)52
+b(:=)47 b(function\(C,)k(r\))c(...)g(end;)75 995 y FK(The)29
+b(function)i(uses)f(the)f(ar)n(guments)i Ft(C)e FK(\(the)h(code)f
+(record)i(itself\))f(and)g Ft(r)e FK(\(a)h(v)o(ector)h(of)f(the)h(code)
+n(w)o(ord)g(type\))g(to)75 1108 y(decode)k Ft(r)d FK(to)h(an)g
+(information)j(v)o(ector)-5 b(.)55 b(A)30 b(normal)j(decoder)h(w)o
+(ould)f(tak)o(e)f(a)g(code)n(w)o(ord)h Ft(r)f FK(of)g(the)g(same)g(w)o
+(ord)75 1221 y(length)23 b(and)f(\002eld)f(as)g Ft(C)q
+FK(,)f(and)i(w)o(ould)g(return)h(an)e(information)j(v)o(ector)f(of)e
+(length)i Fq(k)r FK(,)e(the)g(dimension)j(of)d Ft(C)p
+FK(.)28 b(The)21 b(user)75 1334 y(is)i(not)g(restricted)j(to)d(these)h
+(normal)f(demands)i(though,)f(and)g(can)f(for)g(instance)i(de\002ne)f
+(a)e(decoder)j(for)e(non-linear)75 1447 y(codes.)216
+1560 y(Encoding)i(is)f(done)g(by)g(multiplying)i(the)e(information)i(v)
+o(ector)e(with)g(the)f(code)i(\(see)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2947 1561 a
+SDict begin H.S end
+ 2947 1561 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3060 1498 a
+SDict begin H.R end
+ 3060 1498 a 3060 1560 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 3060 1560 a Black
+FK(\).)p 75 1680 1648 4 v 1764 1685 a FF(Example)p 2102
+1680 V 75 1705 4 25 v 3747 1705 V 75 1805 4 100 v 188
+1775 a(gap>)44 b(C)e(:=)h(HammingCode\(3\);)p 3747 1805
+V 75 1904 V 188 1874 a(a)g(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f
+(code)g(over)f(GF\(2\))p 3747 1904 V 75 2004 V 188 1974
+a(gap>)h(c)e(:=)h("1010"*C;)850 b(#)43 b(encoding)p 3747
+2004 V 75 2104 V 188 2074 a([)g(1)f(0)h(1)g(1)f(0)h(1)g(0)f(])p
+3747 2104 V 75 2203 V 188 2173 a(gap>)i(Decode\(C,)h(c\);)890
+b(#)43 b(decoding)p 3747 2203 V 75 2303 V 188 2273 a([)g(1)f(0)h(1)g(0)
+f(])p 3747 2303 V 75 2402 V 188 2373 a(gap>)i(Decode\(C,)h
+(Codeword\("0010101"\))q(\);)p 3747 2402 V 75 2502 V
+188 2472 a([)e(1)f(1)h(0)g(1)f(])1186 b(#)43 b(one)g(error)h(corrected)
+p 3747 2502 V 75 2602 V 188 2572 a(gap>)g(C!.SpecialDecoder)k(:=)43
+b(function\(C,)j(c\))p 3747 2602 V 75 2701 V 188 2671
+a(>)d(return)h(NullWord\(Dimension\(C)q(\)\);)p 3747
+2701 V 75 2801 V 188 2771 a(>)f(end;)p 3747 2801 V 75
+2901 V 188 2871 a(function)i(\()e(C,)g(c)f(\))h(...)g(end)p
+3747 2901 V 75 3000 V 188 2970 a(gap>)h(Decode\(C,)h(c\);)p
+3747 3000 V 75 3100 V 188 3070 a([)e(0)f(0)h(0)g(0)f(])466
+b(#)43 b(new)g(decoder)i(always)g(returns)f(null)g(word)p
+3747 3100 V 75 3125 4 25 v 3747 3125 V 75 3128 3675 4
+v 75 3261 a
+SDict begin H.S end
+ 75 3261 a 75 3261 a
+SDict begin 13.6 H.A end
+ 75 3261 a 75 3261 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.2) cvn H.B /DEST pdfmark end
+ 75
+3261 a 116 x FJ(4.10.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Decodew)o(ord)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3551 a Fs(\006)22 b
+Ft(Decodeword\()51 b(C,)c(r)g(\))2491 b Fr(\(function\))p
+Black 216 3777 a Ft(Decodeword)26 b FK(decodes)e Ft(r)f
+FK(\(a)f(')-5 b(recei)n(v)o(ed)25 b(w)o(ord'\))e(with)g(respect)h(to)f
+(code)g Ft(C)g FK(and)g(returns)h(the)f(code)n(w)o(ord)h
+Fq(c)c Fv(2)14 b Fq(C)75 3890 y FK(closest)28 b(to)f
+Ft(r)q FK(.)38 b(Here)26 b Ft(r)h FK(can)g(be)g(a)f Fy(GU)m(A)-6
+b(V)f(A)25 b FK(code)n(w)o(ord)j(or)f(a)g(list)g(of)g(code)n(w)o(ords.)
+40 b(If)27 b(the)g(code)g(record)i(has)e(a)f(\002eld)75
+4003 y(`specialDecoder',)35 b(this)c(special)h(algorithm)f(is)f(used)h
+(to)f(decode)h(the)g(v)o(ector)-5 b(.)49 b(Hamming)30
+b(codes,)i(generalized)75 4116 y(Reed-Solomon)d(codes,)g(and)f(BCH)e
+(codes)i(ha)n(v)o(e)g(such)g(a)f(special)i(algorithm.)42
+b(\(The)27 b(algorithm)i(used)g(for)e(BCH)75 4229 y(codes)i(is)g(the)f
+(Sugiyama)h(algorithm)h(described,)i(for)c(e)o(xample,)i(in)e(section)i
+(5.4.3)f(of)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2925
+4230 a
+SDict begin H.S end
+ 2925 4230 a 0.0236 0.6179 0.0894 TeXcolorrgb -1
+x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3132 4167
+a
+SDict begin H.R end
+ 3132 4167 a 3132 4229 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 3132 4229 a Black FK(].)43
+b(The)27 b(algorithm)75 4341 y(used)i(for)f(generalized)k(Reed-Solomon)
+e(codes)f(is)f(the)g(\223interpolation)33 b(algorithm\224)d(described)h
+(for)d(e)o(xample)h(in)75 4454 y(chapter)22 b(5)e(of)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 552 4455 a
+SDict begin H.S end
+ 552 4455
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894
+TeXcolorrgb 743 4392 a
+SDict begin H.R end
+ 743 4392 a 743 4454 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end
+ 743 4454
+a Black 2 w FK(].\))27 b(If)20 b Ft(C)g FK(is)g(linear)i(and)f(no)f
+(special)i(decoder)h(\002eld)d(has)g(been)i(set)e(then)h(syndrome)i
+(decoding)f(is)75 4567 y(used.)35 b(Otherwise,)26 b(when)f
+Ft(C)g FK(is)g(non-linear)l(,)k(the)c(nearest)i(neighbor)h(algorithm)f
+(has)e(been)h(implemented)i(\(which)75 4680 y(should)d(only)g(be)e
+(used)h(for)g(small-sized)i(codes\).)p 75 4800 1648 4
+v 1764 4805 a FF(Example)p 2102 4800 V 75 4825 4 25 v
+3747 4825 V 75 4925 4 100 v 188 4895 a(gap>)44 b(C)e(:=)h
+(HammingCode\(3\);)p 3747 4925 V 75 5024 V 188 4995 a(a)g(linear)h
+([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p
+3747 5024 V 75 5124 V 188 5094 a(gap>)h(c)e(:=)h("1010"*C;)850
+b(#)43 b(encoding)p 3747 5124 V 75 5224 V 188 5194 a([)g(1)f(0)h(1)g(1)
+f(0)h(1)g(0)f(])p 3747 5224 V 75 5323 V 188 5293 a(gap>)i
+(Decodeword\(C,)i(c\);)891 b(#)42 b(decoding)p 3747 5323
+V 75 5423 V 188 5393 a([)h(1)f(0)h(1)g(1)f(0)h(1)g(0)f(])p
+3747 5423 V 75 5523 V 188 5493 a(gap>)p 3747 5523 V 75
+5622 V 188 5592 a(gap>)i(R:=PolynomialRing\(GF\()q(11\))q(,[")q(t")q
+(]\);)p 3747 5622 V Black Black eop end end
+%%Page: 53 53
+TeXDict begin HPSdict begin 53 52 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.53) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(53)p Black 75 428 4 100 v 188 399 a FF(GF\(11\)[t])p
+3747 428 V 75 528 V 188 498 a(gap>)44 b(P:=List\([1,3,4,5,7],i)q(->Z)q
+(\(11)q(\)\210)q(i\);)p 3747 528 V 75 628 V 188 598 a([)f(Z\(11\),)h
+(Z\(11\)\2103,)h(Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p
+3747 628 V 75 727 V 188 697 a(gap>)f(C:=GeneralizedReedSol)q(omo)q(nCo)
+q(de)q(\(P,)q(3,R)q(\);)p 3747 727 V 75 827 V 188 797
+a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47 b(Reed-Solomon)f(code)e
+(over)f(GF\(11\))p 3747 827 V 75 927 V 188 897 a(gap>)h
+(MinimumDistance\(C\);)p 3747 927 V 75 1026 V 188 996
+a(3)p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(c:=Random\(C\);)p
+3747 1126 V 75 1225 V 188 1196 a([)f(0)f(9)h(6)g(2)f(1)h(])p
+3747 1225 V 75 1325 V 188 1295 a(gap>)h(v:=Codeword\("09620"\);)p
+3747 1325 V 75 1425 V 188 1395 a([)f(0)f(9)h(6)g(2)f(0)h(])p
+3747 1425 V 75 1524 V 188 1494 a(gap>)h(GeneralizedReedSolomo)q(nDe)q
+(cod)q(er)q(Gao)q(\(C,)q(v\);)p 3747 1524 V 75 1624 V
+188 1594 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 1624 V 75
+1724 V 188 1694 a(gap>)h(Decodeword\(C,v\);)j(#)c(calls)h(the)g
+(special)g(interpolation)j(decoder)p 3747 1724 V 75 1823
+V 188 1793 a([)c(0)f(9)h(6)g(2)f(1)h(])p 3747 1823 V
+75 1923 V 188 1893 a(gap>)h(G:=GeneratorMat\(C\);)p 3747
+1923 V 75 2022 V 188 1993 a([)f([)f(Z\(11\)\2100,)j(0*Z\(11\),)g
+(0*Z\(11\),)g(Z\(11\)\2108,)h(Z\(11\)\2109)e(],)p 3747
+2022 V 75 2122 V 273 2092 a([)e(0*Z\(11\),)j(Z\(11\)\2100,)g
+(0*Z\(11\),)g(Z\(11\)\2100,)h(Z\(11\)\2108)e(],)p 3747
+2122 V 75 2222 V 273 2192 a([)e(0*Z\(11\),)j(0*Z\(11\),)g
+(Z\(11\)\2100,)g(Z\(11\)\2103,)h(Z\(11\)\2108)e(])f(])p
+3747 2222 V 75 2321 V 188 2291 a(gap>)h(C1:=GeneratorMatCode\()q(G,G)q
+(F\(1)q(1\))q(\);)p 3747 2321 V 75 2421 V 188 2391 a(a)f(linear)h
+([5,3,1..3]2)i(code)e(defined)h(by)e(generator)i(matrix)f(over)g
+(GF\(11\))p 3747 2421 V 75 2521 V 188 2491 a(gap>)g(Decodeword\(C,v\);)
+j(#)c(calls)h(syndrome)h(decoding)p 3747 2521 V 75 2620
+V 188 2590 a([)e(0)f(9)h(6)g(2)f(1)h(])p 3747 2620 V
+75 2645 4 25 v 3747 2645 V 75 2648 3675 4 v 75 2781 a
+SDict begin H.S end
+
+75 2781 a 75 2781 a
+SDict begin 13.6 H.A end
+ 75 2781 a 75 2781 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.3) cvn H.B /DEST pdfmark end
+ 75 2781 a 117
+x FJ(4.10.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w
+(GeneralizedReedSolomonDecoderGao)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3072 a Fs(\006)22 b Ft(GeneralizedReedSo)q(lom)q(onD)q
+(eco)q(de)q(rGa)q(o\()53 b(C,)47 b(r)g(\))1471 b Fr(\(function\))p
+Black 216 3298 a Ft(GeneralizedReedSol)q(omo)q(nDe)q(co)q(der)q(Gao)33
+b FK(decodes)28 b Ft(r)e FK(\(a)h(')-5 b(recei)n(v)o(ed)29
+b(w)o(ord'\))e(to)f(a)g(code)n(w)o(ord)j Fq(c)22 b Fv(2)16
+b Fq(C)28 b FK(in)f(a)75 3411 y(generalized)k(Reed-Solomon)e(code)f
+Ft(C)f FK(\(see)h Ft(GeneralizedReedSo)q(lom)q(onC)q(ode)33
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2799 3412
+a
+SDict begin H.S end
+ 2799 3412 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2980 3349 a
+SDict begin H.R end
+ 2980 3349
+a 2980 3411 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end
+ 2980 3411 a Black FK(\)\),)d(closest)f(to)e
+Ft(r)q FK(.)39 b(Here)75 3524 y Ft(r)30 b FK(must)g(be)g(a)g
+Fy(GU)m(A)-6 b(V)f(A)28 b FK(code)n(w)o(ord.)50 b(If)30
+b(the)g(code)h(record)h(does)e(not)h(ha)n(v)o(e)g(name)f(`generalized)k
+(Reed-Solomon)75 3636 y(code')25 b(then)f(an)f(error)i(is)e(returned.)
+31 b(Otherwise,)24 b(the)g(Gao)f(decoder)j([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2292 3637 a
+SDict begin H.S end
+ 2292 3637 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(Gao03)p 0.0236 0.6179 0.0894 TeXcolorrgb
+2533 3574 a
+SDict begin H.R end
+ 2533 3574 a 2533 3636 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Gao03) cvn H.B /ANN pdfmark end
+ 2533 3636 a Black
+1 w FK(])d(is)h(used)g(to)f(compute)i Fq(c)p FK(.)216
+3749 y(F)o(or)53 b(long)i(codes,)62 b(this)55 b(method)g(is)e(f)o
+(aster)i(in)f(practice)i(than)f(the)f(interpolation)k(method)d(used)f
+(in)75 3862 y Ft(Decodeword)p FK(.)p 75 3966 1648 4 v
+1764 3971 a FF(Example)p 2102 3966 V 75 3991 4 25 v 3747
+3991 V 75 4091 4 100 v 188 4061 a(gap>)44 b(R:=PolynomialRing\(GF\()q
+(11\))q(,[")q(t")q(]\);)p 3747 4091 V 75 4190 V 188 4161
+a(GF\(11\)[t])p 3747 4190 V 75 4290 V 188 4260 a(gap>)g
+(P:=List\([1,3,4,5,7],i)q(->Z)q(\(11)q(\)\210)q(i\);)p
+3747 4290 V 75 4390 V 188 4360 a([)f(Z\(11\),)h(Z\(11\)\2103,)h
+(Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p 3747
+4390 V 75 4489 V 188 4459 a(gap>)f(C:=GeneralizedReedSol)q(omo)q(nCo)q
+(de)q(\(P,)q(3,R)q(\);)p 3747 4489 V 75 4589 V 188 4559
+a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47 b(Reed-Solomon)f(code)e
+(over)f(GF\(11\))p 3747 4589 V 75 4689 V 188 4659 a(gap>)h
+(MinimumDistance\(C\);)p 3747 4689 V 75 4788 V 188 4758
+a(3)p 3747 4788 V 75 4888 V 188 4858 a(gap>)g(c:=Random\(C\);)p
+3747 4888 V 75 4987 V 188 4958 a([)f(0)f(9)h(6)g(2)f(1)h(])p
+3747 4987 V 75 5087 V 188 5057 a(gap>)h(v:=Codeword\("09620"\);)p
+3747 5087 V 75 5187 V 188 5157 a([)f(0)f(9)h(6)g(2)f(0)h(])p
+3747 5187 V 75 5286 V 188 5256 a(gap>)h(GeneralizedReedSolomo)q(nDe)q
+(cod)q(er)q(Gao)q(\(C,)q(v\);)p 3747 5286 V 75 5386 V
+188 5356 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 5386 V 75
+5411 4 25 v 3747 5411 V 75 5414 3675 4 v Black Black
+eop end end
+%%Page: 54 54
+TeXDict begin HPSdict begin 54 53 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.54) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(54)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.4) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.10.4)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(GeneralizedReedSolomonListDecoder)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft
+(GeneralizedReedSo)q(lom)q(onL)q(ist)q(De)q(cod)q(er\()53
+b(C,)47 b(r,)g(tau)h(\))1193 b Fr(\(function\))p Black
+216 799 a Ft(GeneralizedReedSol)q(omo)q(nLi)q(st)q(Dec)q(ode)q(r)39
+b FK(implements)c(Sudans)f(list-decoding)j(algorithm)f(\(see)e(sec-)75
+912 y(tion)20 b(12.1)g(of)f([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 537 913 a
+SDict begin H.S end
+ 537 913 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb
+728 850 a
+SDict begin H.R end
+ 728 850 a 728 912 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end
+ 728 912 a Black 1 w FK(]\))g(for)h
+(\223lo)n(w)f(rate\224)h(Reed-Solomon)h(codes.)29 b(It)19
+b(returns)i(the)f(list)f(of)h(all)f(code)n(w)o(ords)i(in)f(C)e(which)75
+1024 y(are)k(a)g(distance)i(of)e(at)g(most)g Ft(tau)h
+FK(from)f Ft(r)f FK(\(a)h(')-5 b(recei)n(v)o(ed)25 b(w)o(ord'\).)k
+Ft(C)21 b FK(must)h(be)h(a)e(generalized)26 b(Reed-Solomon)d(code)75
+1137 y Ft(C)g FK(\(see)h Ft(GeneralizedReedSol)q(omo)q(nC)q(ode)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1571 1138
+a
+SDict begin H.S end
+ 1571 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1752 1075 a
+SDict begin H.R end
+ 1752 1075
+a 1752 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end
+ 1752 1137 a Black FK(\)\))c(and)f Ft(r)f
+FK(must)g(be)h(a)f Fy(GU)m(A)-6 b(V)f(A)22 b FK(code)n(w)o(ord.)p
+75 1256 1648 4 v 1764 1261 a FF(Example)p 2102 1256 V
+75 1281 4 25 v 3747 1281 V 75 1381 4 100 v 188 1351 a(gap>)44
+b(F:=GF\(16\);)p 3747 1381 V 75 1481 V 188 1451 a(GF\(2\2104\))p
+3747 1481 V 75 1580 V 188 1550 a(gap>)p 3747 1580 V 75
+1680 V 188 1650 a(gap>)g(a:=PrimitiveRoot\(F\);;)49 b(b:=a\2107;;)c
+(b\2104+b\2103+1;)p 3747 1680 V 75 1779 V 188 1750 a(0*Z\(2\))p
+3747 1779 V 75 1879 V 188 1849 a(gap>)f(Pts:=List\([0..14],i->)q
+(b\210i)q(\);)p 3747 1879 V 75 1979 V 188 1949 a([)f(Z\(2\)\2100,)h
+(Z\(2\2104\)\2107,)i(Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h
+(Z\(2\2104\)\21013,)g(Z\(2\2102\),)e(Z\(2\2104\)\21012,)i
+(Z\(2\2104\)\2104,)p 3747 1979 V 75 2078 V 273 2048 a
+(Z\(2\2104\)\21011,)f(Z\(2\2104\)\2103,)h(Z\(2\2102\)\2102,)f
+(Z\(2\2104\)\2102,)h(Z\(2\2104\)\2109,)f(Z\(2\2104\),)g
+(Z\(2\2104\)\2108)g(])p 3747 2078 V 75 2178 V 188 2148
+a(gap>)f(x:=X\(F\);;)p 3747 2178 V 75 2278 V 188 2248
+a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p 3747 2278
+V 75 2377 V 188 2347 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q
+(ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747 2377 V 75 2477 V
+188 2447 a(gap>)g(y:=X\(F,vars\);;)p 3747 2477 V 75 2576
+V 188 2547 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q(y]\))q(;;)p
+3747 2576 V 75 2676 V 188 2646 a(gap>)g(C:=GeneralizedReedSol)q(omo)q
+(nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p 3747 2676 V 75 2776
+V 188 2746 a(a)f(linear)h([15,3,1..13]10..12)91 b(generalized)46
+b(Reed-Solomon)g(code)e(over)g(GF\(16\))p 3747 2776 V
+75 2875 V 188 2845 a(gap>)g(MinimumDistance\(C\);)k(##)43
+b(6)g(error)h(correcting)p 3747 2875 V 75 2975 V 188
+2945 a(13)p 3747 2975 V 75 3075 V 188 3045 a(gap>)g(z:=Zero\(F\);;)p
+3747 3075 V 75 3174 V 188 3144 a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,)
+q(b\2102)q(,b)q(\2105,)q(b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)p
+3747 3174 V 75 3274 V 188 3244 a(gap>)g(r:=Codeword\(r\);)p
+3747 3274 V 75 3373 V 188 3344 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h
+(a\21012)h(a\21014)f(a\2105)h(a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p
+3747 3373 V 75 3473 V 188 3443 a(gap>)h(cs:=GeneralizedReedSo)q(lom)q
+(onL)q(is)q(tDe)q(cod)q(er\()q(C,r)q(,2\))q(;)k(time;)p
+3747 3473 V 75 3573 V 188 3543 a([)43 b([)f(0)h(a\2109)g(a\2103)h
+(a\21013)f(a\2106)h(a\21010)f(a\21011)h(a)f(a\21012)h(a\21014)f(a\2105)
+h(a\2108)f(a\2107)g(a\2104)h(a\2102)f(],)p 3747 3573
+V 75 3672 V 273 3642 a([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g
+(0)f(0)h(0)g(0)g(])f(])p 3747 3672 V 75 3772 V 188 3742
+a(250)p 3747 3772 V 75 3872 V 188 3842 a(gap>)i(c1:=cs[1];)h(c1)e(in)g
+(C;)p 3747 3872 V 75 3971 V 188 3941 a([)g(0)f(a\2109)i(a\2103)f
+(a\21013)h(a\2106)f(a\21010)h(a\21011)f(a)g(a\21012)h(a\21014)g(a\2105)
+f(a\2108)g(a\2107)h(a\2104)f(a\2102)g(])p 3747 3971 V
+75 4071 V 188 4041 a(true)p 3747 4071 V 75 4170 V 188
+4141 a(gap>)h(c2:=cs[2];)h(c2)e(in)g(C;)p 3747 4170 V
+75 4270 V 188 4240 a([)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)
+g(0)f(0)h(0)g(])p 3747 4270 V 75 4370 V 188 4340 a(true)p
+3747 4370 V 75 4469 V 188 4439 a(gap>)h(WeightCodeword\(c1-r\);)p
+3747 4469 V 75 4569 V 188 4539 a(7)p 3747 4569 V 75 4669
+V 188 4639 a(gap>)g(WeightCodeword\(c2-r\);)p 3747 4669
+V 75 4768 V 188 4738 a(7)p 3747 4768 V 75 4793 4 25 v
+3747 4793 V 75 4796 3675 4 v 75 4929 a
+SDict begin H.S end
+ 75 4929 a 75 4929
+a
+SDict begin 13.6 H.A end
+ 75 4929 a 75 4929 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.5) cvn H.B /DEST pdfmark end
+ 75 4929 a 117 x FJ(4.10.5)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(BitFlipDecoder)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5220 a Fs(\006)22 b Ft(BitFlipDecoder\()52 b(C,)47
+b(r)g(\))2306 b Fr(\(function\))p Black 216 5446 a FK(The)32
+b(iterati)n(v)o(e)i(decoding)h(method)e Ft(BitFlipDecoder)j
+FK(must)d(only)g(be)f(applied)i(to)f(LDPC)d(codes.)56
+b(These)75 5559 y(ha)n(v)o(e)25 b(not)f(been)h(implemented)h(in)e(GU)l
+(A)-12 b(V)g(A)22 b(\(b)n(ut)j(see)f Ft(FerreroDesignCode)30
+b FK(for)24 b(a)g(code)g(with)g(similar)h(proper)n(-)p
+Black Black eop end end
+%%Page: 55 55
+TeXDict begin HPSdict begin 55 54 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.55) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(55)p Black 75 399 a(ties\).)29 b(A)20 b(binary)i(lo)n(w)e
+(density)j(parity)g(check)f(\(LDPC\))d(code)j(of)f(length)h
+Fq(n)f FK(and)h(redundanc)o(y)i Fq(r)e FK(is)f(de\002ned)h(in)f(terms)
+75 511 y(of)i(its)h(check)h(matrix)f Fq(H)7 b FK(:)p
+Black 211 699 a Fv(\017)p Black 46 w FK(Each)24 b(ro)n(w)f(of)g
+Fq(H)29 b FK(has)24 b(e)o(xactly)h Fq(x)e FK(1')-5 b(s.)p
+Black 211 887 a Fv(\017)p Black 46 w FK(Each)24 b(column)g(has)g(e)o
+(xactly)h Fq(y)e FK(1')-5 b(s.)p Black 211 1074 a Fv(\017)p
+Black 46 w FK(The)23 b(number)i(of)e(1')-5 b(s)24 b(in)g(common)f
+(between)i(an)o(y)f(tw)o(o)f(columns)i(is)e(less)h(than)g(or)g(equal)h
+(to)e(one.)p Black 211 1262 a Fv(\017)p Black 46 w Fq(x)p
+Fp(=)p Fq(n)i FK(and)f Fq(y)p Fp(=)p Fq(r)i FK(are)d(')-5
+b(small'.)75 1450 y(F)o(or)25 b(these)i(codes,)g Ft(BitFlipDecoder)j
+FK(decodes)e(v)o(ery)e(quickly)-6 b(.)38 b(\(W)-7 b(arning:)35
+b(it)26 b(can)g(gi)n(v)o(e)g(wildly)g(wrong)h(results)75
+1562 y(for)c(arbitrary)i(binary)f(linear)g(codes.\))30
+b(The)22 b(bit)h(\003ipping)h(algorithm)g(is)f(described)i(for)e(e)o
+(xample)g(in)g(chapter)h(13)f(of)75 1675 y([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 105 1676 a
+SDict begin H.S end
+ 105 1676 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb
+296 1613 a
+SDict begin H.R end
+ 296 1613 a 296 1675 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end
+ 296 1675 a Black 1 w
+FK(].)p 75 1793 1648 4 v 1764 1798 a FF(Example)p 2102
+1793 V 75 1817 4 25 v 3747 1817 V 75 1917 4 100 v 188
+1887 a(gap>)44 b(C:=HammingCode\(4,GF\(2)q(\)\);)p 3747
+1917 V 75 2017 V 188 1987 a(a)f(linear)h([15,11,3]1)i(Hamming)e
+(\(4,2\))h(code)e(over)h(GF\(2\))p 3747 2017 V 75 2116
+V 188 2086 a(gap>)g(c:=Random\(C\);)p 3747 2116 V 75
+2216 V 188 2186 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0)g(1)f(1)h(0)g
+(1)f(0)h(1)g(])p 3747 2216 V 75 2316 V 188 2286 a(gap>)h(v:=List\(c\);)
+p 3747 2316 V 75 2415 V 188 2385 a([)f(0*Z\(2\),)h(0*Z\(2\),)h
+(0*Z\(2\),)g(Z\(2\)\2100,)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g
+(0*Z\(2\),)f(0*Z\(2\),)p 3747 2415 V 75 2515 V 273 2485
+a(Z\(2\)\2100,)g(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100,)g(0*Z\(2\),)f
+(Z\(2\)\2100)h(])p 3747 2515 V 75 2614 V 188 2585 a(gap>)f
+(v[1]:=Z\(2\)+v[1];)j(#)c(flip)h(1st)f(bit)h(of)f(c)f(to)h(create)i(an)
+e(error)p 3747 2614 V 75 2714 V 188 2684 a(Z\(2\)\2100)p
+3747 2714 V 75 2814 V 188 2784 a(gap>)h(v:=Codeword\(v\);)p
+3747 2814 V 75 2913 V 188 2883 a([)f(1)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0)
+g(1)f(1)h(0)g(1)f(0)h(1)g(])p 3747 2913 V 75 3013 V 188
+2983 a(gap>)h(BitFlipDecoder\(C,v\);)p 3747 3013 V 75
+3113 V 188 3083 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0)g(1)f(1)h(0)g
+(1)f(0)h(1)g(])p 3747 3113 V 75 3212 V 3747 3212 V 75
+3312 V 3747 3312 V 75 3337 4 25 v 3747 3337 V 75 3340
+3675 4 v 75 3473 a
+SDict begin H.S end
+ 75 3473 a 75 3473 a
+SDict begin 13.6 H.A end
+ 75 3473 a 75 3473
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.6) cvn H.B /DEST pdfmark end
+ 75 3473 a 116 x FJ(4.10.6)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Near)n(estNeighborGRSDecodew)o(ords)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3764 a Fs(\006)22 b Ft(NearestNeighborGR)q(SDe)q(cod)q
+(ewo)q(rd)q(s\()53 b(C,)47 b(v,)g(dist)h(\))1332 b Fr(\(function\))p
+Black 216 3989 a Ft(NearestNeighborGRS)q(Dec)q(ode)q(wo)q(rds)35
+b FK(\002nds)29 b(all)g(generalized)j(Reed-Solomon)f(code)n(w)o(ords)g
+(within)f(dis-)75 4102 y(tance)23 b Ft(dist)g FK(from)f
+Ft(v)g Fq(and)j FK(the)d(associated)j(polynomial,)f(using)g(\223brute)f
+(force\224.)30 b(Input:)f Ft(v)22 b FK(is)g(a)g(recei)n(v)o(ed)h(v)o
+(ector)g(\(a)75 4215 y Fy(GU)m(A)-6 b(V)f(A)24 b FK(code)n(w)o(ord\),)j
+Ft(C)f FK(is)f(a)g(GRS)f(code,)j Ft(dist)f FK(\277)f(0)h(is)f(the)h
+(distance)i(from)e Ft(v)f FK(to)g(search)i(in)f Ft(C)p
+FK(.)35 b(Output:)f(a)25 b(list)h(of)75 4328 y(pairs)e
+Fo([)p Fq(c)p Fp(;)g Fq(f)13 b Fo(\()p Fq(x)p Fo(\)])p
+FK(,)25 b(where)f Fq(w)n(t)6 b Fo(\()p Fq(c)13 b Fv(\000)g
+Fq(v)p Fo(\))20 b Fv(\024)g Fq(d)5 b(is)n(t)20 b Fv(\000)13
+b FK(1)22 b(and)i Fq(c)d Fo(=)f(\()14 b Fq(f)f Fo(\()p
+Fq(x)2074 4342 y Fr(1)2112 4328 y Fo(\))p Fp(;)d(:::;)24
+b Fq(f)13 b Fo(\()p Fq(x)2419 4342 y Fm(n)2459 4328 y
+Fo(\)\))p FK(.)p 75 4454 1648 4 v 1764 4459 a FF(Example)p
+2102 4454 V 75 4479 4 25 v 3747 4479 V 75 4578 4 100
+v 188 4548 a(gap>)44 b(F:=GF\(16\);)p 3747 4578 V 75
+4678 V 188 4648 a(GF\(2\2104\))p 3747 4678 V 75 4778
+V 188 4748 a(gap>)g(a:=PrimitiveRoot\(F\);;)49 b(b:=a\2107;)c
+(b\2104+b\2103+1;)p 3747 4778 V 75 4877 V 188 4847 a(Z\(2\2104\)\2107)p
+3747 4877 V 75 4977 V 188 4947 a(0*Z\(2\))p 3747 4977
+V 75 5076 V 188 5047 a(gap>)f(Pts:=List\([0..14],i->)q(b\210i)q(\);)p
+3747 5076 V 75 5176 V 188 5146 a([)f(Z\(2\)\2100,)h(Z\(2\2104\)\2107,)i
+(Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h(Z\(2\2104\)\21013,)g
+(Z\(2\2102\),)e(Z\(2\2104\)\21012,)p 3747 5176 V 75 5276
+V 273 5246 a(Z\(2\2104\)\2104,)h(Z\(2\2104\)\21011,)h
+(Z\(2\2104\)\2103,)f(Z\(2\2102\)\2102,)h(Z\(2\2104\)\2102,)f
+(Z\(2\2104\)\2109,)g(Z\(2\2104\),)p 3747 5276 V 75 5375
+V 273 5345 a(Z\(2\2104\)\2108)g(])p 3747 5375 V 75 5475
+V 188 5445 a(gap>)f(x:=X\(F\);;)p 3747 5475 V 75 5575
+V 188 5545 a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p
+3747 5575 V Black Black eop end end
+%%Page: 56 56
+TeXDict begin HPSdict begin 56 55 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.56) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(56)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)
+p 3747 428 V 75 528 V 188 498 a(gap>)g(y:=X\(F,vars\);;)p
+3747 528 V 75 628 V 188 598 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q
+(y]\))q(;;)p 3747 628 V 75 727 V 188 697 a(gap>)g
+(C:=GeneralizedReedSol)q(omo)q(nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p
+3747 727 V 75 827 V 188 797 a(a)f(linear)h([15,3,1..13]10..12)91
+b(generalized)46 b(Reed-Solomon)g(code)e(over)g(GF\(16\))p
+3747 827 V 75 927 V 188 897 a(gap>)g(MinimumDistance\(C\);)k(#)43
+b(6)g(error)h(correcting)p 3747 927 V 75 1026 V 188 996
+a(13)p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(z:=Zero\(F\);)p
+3747 1126 V 75 1225 V 188 1196 a(0*Z\(2\))p 3747 1225
+V 75 1325 V 188 1295 a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,)q(b\2102)q
+(,b)q(\2105,)q(b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)49
+b(#)43 b(7)f(errors)p 3747 1325 V 75 1425 V 188 1395
+a(gap>)i(r:=Codeword\(r\);)p 3747 1425 V 75 1524 V 188
+1494 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(a\21012)h(a\21014)f(a\2105)h
+(a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p 3747 1524 V
+75 1624 V 188 1594 a(gap>)h(cs:=NearestNeighborGR)q(SDe)q(cod)q(ew)q
+(ord)q(s\(C)q(,r,)q(7\);)p 3747 1624 V 75 1724 V 188
+1694 a([)f([)f([)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g
+(0)g(0)f(],)h(0*Z\(2\))i(],)p 3747 1724 V 75 1823 V 273
+1793 a([)d([)h(0)g(a\2109)g(a\2103)g(a\21013)h(a\2106)f(a\21010)h
+(a\21011)g(a)f(a\21012)g(a\21014)h(a\2105)f(a\2108)h(a\2107)f(a\2104)g
+(a\2102)h(],)f(x_1+Z\(2\)\2100)j(])c(])p 3746 1823 V
+75 1848 4 25 v 3747 1848 V 75 1851 3675 4 v 75 1984 a
+SDict begin H.S end
+
+75 1984 a 75 1984 a
+SDict begin 13.6 H.A end
+ 75 1984 a 75 1984 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.7) cvn H.B /DEST pdfmark end
+ 75 1984 a 116
+x FJ(4.10.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Near)n(estNeighborDecodew)o
+(ords)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2274 a Fs(\006)22
+b Ft(NearestNeighborDe)q(cod)q(ewo)q(rds)q(\()53 b(C,)47
+b(v,)g(dist)h(\))1471 b Fr(\(function\))p Black 216 2500
+a Ft(NearestNeighborDec)q(ode)q(wor)q(ds)27 b FK(\002nds)21
+b(all)g(code)n(w)o(ords)h(in)f(a)g(linear)h(code)g Ft(C)e
+FK(within)i(distance)h Ft(dist)e FK(from)75 2613 y Ft(v)p
+FK(,)i(using)i(\223brute)g(force\224.)30 b(Input:)h Ft(v)23
+b FK(is)g(a)g(recei)n(v)o(ed)i(v)o(ector)g(\(a)e Fy(GU)m(A)-6
+b(V)f(A)22 b FK(code)n(w)o(ord\),)j Ft(C)e FK(is)h(a)f(linear)i(code,)f
+Ft(dist)g FK(\277)g(0)75 2726 y(is)f(the)h(distance)i(from)d
+Ft(v)g FK(to)h(search)h(in)e Ft(C)q FK(.)k(Output:)j(a)24
+b(list)f(of)h Fq(c)c Fv(2)15 b Fq(C)r FK(,)23 b(where)h
+Fq(w)n(t)6 b Fo(\()p Fq(c)13 b Fv(\000)g Fq(v)p Fo(\))20
+b Fv(\024)g Fq(d)5 b(is)n(t)19 b Fv(\000)13 b FK(1.)p
+75 2849 1648 4 v 1764 2854 a FF(Example)p 2102 2849 V
+75 2874 4 25 v 3747 2874 V 75 2974 4 100 v 188 2944 a(gap>)44
+b(F:=GF\(16\);)p 3747 2974 V 75 3073 V 188 3044 a(GF\(2\2104\))p
+3747 3073 V 75 3173 V 188 3143 a(gap>)g(a:=PrimitiveRoot\(F\);;)49
+b(b:=a\2107;)c(b\2104+b\2103+1;)p 3747 3173 V 75 3273
+V 188 3243 a(Z\(2\2104\)\2107)p 3747 3273 V 75 3372 V
+188 3342 a(0*Z\(2\))p 3747 3372 V 75 3472 V 188 3442
+a(gap>)f(Pts:=List\([0..14],i->)q(b\210i)q(\);)p 3747
+3472 V 75 3572 V 188 3542 a([)f(Z\(2\)\2100,)h(Z\(2\2104\)\2107,)i
+(Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h(Z\(2\2104\)\21013,)g
+(Z\(2\2102\),)e(Z\(2\2104\)\21012,)p 3747 3572 V 75 3671
+V 273 3641 a(Z\(2\2104\)\2104,)h(Z\(2\2104\)\21011,)h
+(Z\(2\2104\)\2103,)f(Z\(2\2102\)\2102,)h(Z\(2\2104\)\2102,)f
+(Z\(2\2104\)\2109,)g(Z\(2\2104\),)p 3747 3671 V 75 3771
+V 273 3741 a(Z\(2\2104\)\2108)g(])p 3747 3771 V 75 3870
+V 188 3841 a(gap>)f(x:=X\(F\);;)p 3747 3870 V 75 3970
+V 188 3940 a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p
+3747 3970 V 75 4070 V 188 4040 a(gap>)g(vars:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747 4070 V
+75 4169 V 188 4139 a(gap>)g(y:=X\(F,vars\);;)p 3747 4169
+V 75 4269 V 188 4239 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q(y]\))q(;;)
+p 3747 4269 V 75 4369 V 188 4339 a(gap>)g(C:=GeneralizedReedSol)q(omo)q
+(nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p 3747 4369 V 75 4468
+V 188 4438 a(a)f(linear)h([15,3,1..13]10..12)91 b(generalized)46
+b(Reed-Solomon)g(code)e(over)g(GF\(16\))p 3747 4468 V
+75 4568 V 188 4538 a(gap>)g(MinimumDistance\(C\);)p 3747
+4568 V 75 4667 V 188 4638 a(13)p 3747 4667 V 75 4767
+V 188 4737 a(gap>)g(z:=Zero\(F\);)p 3747 4767 V 75 4867
+V 188 4837 a(0*Z\(2\))p 3747 4867 V 75 4966 V 188 4936
+a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,)q(b\2102)q(,b)q(\2105,)q
+(b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)p 3747 4966
+V 75 5066 V 188 5036 a(gap>)g(r:=Codeword\(r\);)p 3747
+5066 V 75 5166 V 188 5136 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h
+(a\21012)h(a\21014)f(a\2105)h(a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p
+3747 5166 V 75 5265 V 188 5235 a(gap>)h(cs:=NearestNeighborDe)q(cod)q
+(ewo)q(rd)q(s\(C)q(,r,)q(7\);)p 3747 5265 V 75 5365 V
+188 5335 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h
+(0)g(0)g(],)p 3747 5365 V 75 5465 V 273 5435 a([)f(0)h(a\2109)g(a\2103)
+h(a\21013)f(a\2106)h(a\21010)f(a\21011)h(a)f(a\21012)h(a\21014)f
+(a\2105)h(a\2108)f(a\2107)g(a\2104)h(a\2102)f(])g(])p
+3747 5465 V 75 5564 V 3747 5564 V 75 5589 4 25 v 3747
+5589 V 75 5592 3675 4 v Black Black eop end end
+%%Page: 57 57
+TeXDict begin HPSdict begin 57 56 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.57) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(57)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.8) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.10.8)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Syndr)n(ome)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(Syndrome\()50 b(C,)d(v)g(\))2584
+b Fr(\(function\))p Black 216 799 a Ft(Syndrome)27 b
+FK(returns)g(the)f(syndrome)g(of)f(w)o(ord)h Ft(v)e FK(with)h(respect)i
+(to)e(a)g(linear)h(code)g Ft(C)p FK(.)33 b Ft(v)25 b
+FK(is)g(a)f(code)n(w)o(ord)j(in)e(the)75 912 y(ambient)i(v)o(ector)g
+(space)g(of)f Ft(C)q FK(.)35 b(If)26 b Ft(v)g FK(is)g(an)g(element)h
+(of)f Ft(C)p FK(,)g(the)g(syndrome)i(is)e(a)f(zero)i(v)o(ector)-5
+b(.)37 b(The)26 b(syndrome)i(can)75 1024 y(be)j(used)g(for)g(looking)i
+(up)e(an)f(error)i(v)o(ector)g(in)e(the)h(syndrome)i(table)e(\(see)h
+Ft(SyndromeTable)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3205 1026 a
+SDict begin H.S end
+ 3205 1026 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(4.10.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3431
+962 a
+SDict begin H.R end
+ 3431 962 a 3431 1024 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.9) cvn H.B /ANN pdfmark end
+ 3431 1024 a Black FK(\)\))e(that)f(is)75
+1137 y(needed)25 b(to)f(correct)h(an)e(error)i(in)e Fq(v)p
+FK(.)216 1250 y(A)g(syndrome)i(is)e(not)h(de\002ned)g(for)g(non-linear)
+i(codes.)k Ft(Syndrome)c FK(then)e(returns)h(an)f(error)-5
+b(.)p 75 1373 1648 4 v 1764 1378 a FF(Example)p 2102
+1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188
+1468 a(gap>)44 b(C)e(:=)h(HammingCode\(4\);)p 3747 1497
+V 75 1597 V 188 1567 a(a)g(linear)h([15,11,3]1)i(Hamming)e(\(4,2\))h
+(code)e(over)h(GF\(2\))p 3747 1597 V 75 1697 V 188 1667
+a(gap>)g(v)e(:=)h(CodewordNr\()j(C,)d(7)g(\);)p 3747
+1697 V 75 1796 V 188 1766 a([)g(1)f(1)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f
+(0)h(0)g(1)f(1)h(0)g(])p 3747 1796 V 75 1896 V 188 1866
+a(gap>)h(Syndrome\()h(C,)e(v)g(\);)p 3747 1896 V 75 1996
+V 188 1966 a([)g(0)f(0)h(0)g(0)f(])p 3747 1996 V 75 2095
+V 188 2065 a(gap>)i(Syndrome\()h(C,)e(Codeword\()i("000000001100111")k
+(\))42 b(\);)p 3747 2095 V 75 2195 V 188 2165 a([)h(1)f(1)h(1)g(1)f(])p
+3747 2195 V 75 2294 V 188 2265 a(gap>)i(Syndrome\()h(C,)e(Codeword\()i
+("000000000000001")k(\))42 b(\);)p 3747 2294 V 75 2394
+V 188 2364 a([)h(1)f(1)h(1)g(1)f(])170 b(#)43 b(the)g(same)h(syndrome:)
+h(both)f(codewords)h(are)f(in)f(the)g(same)p 3747 2394
+V 75 2494 V 823 2464 a(#)g(coset)h(of)f(C)p 3747 2494
+V 75 2519 4 25 v 3747 2519 V 75 2522 3675 4 v 75 2655
+a
+SDict begin H.S end
+ 75 2655 a 75 2655 a
+SDict begin 13.6 H.A end
+ 75 2655 a 75 2655 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.9) cvn H.B /DEST pdfmark end
+ 75 2655 a 116
+x FJ(4.10.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Syndr)n(omeT)-9
+b(able)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2945 a Fs(\006)22
+b Ft(SyndromeTable\()52 b(C)47 b(\))2491 b Fr(\(function\))p
+Black 216 3171 a Ft(SyndromeTable)38 b FK(returns)d(a)f
+Fq(syndr)l(ome)h(table)g FK(of)f(a)f(linear)i(code)g
+Ft(C)p FK(,)h(consisting)g(of)e(tw)o(o)g(columns.)61
+b(The)75 3284 y(\002rst)27 b(column)i(consists)h(of)e(the)g(error)g(v)o
+(ectors)h(that)f(correspond)j(to)d(the)g(syndrome)h(v)o(ectors)h(in)d
+(the)h(second)i(col-)75 3397 y(umn.)36 b(These)26 b(v)o(ectors)h(both)g
+(are)f(of)g(the)g(code)n(w)o(ord)i(type.)36 b(After)26
+b(calculating)k(the)c(syndrome)h(of)f(a)g(w)o(ord)g Ft(v)f
+FK(with)75 3510 y Ft(Syndrome)f FK(\(see)f Ft(Syndrome)h
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1057 3511 a
+SDict begin H.S end
+
+1057 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1283 3448 a
+SDict begin H.R end
+ 1283 3448
+a 1283 3510 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end
+ 1283 3510 a Black FK(\)\),)f(the)g(error)g(v)o(ector)g
+(needed)h(to)e(correct)h Ft(v)f FK(can)h(be)f(found)h(in)f(the)g
+(syndrome)75 3623 y(table.)35 b(Subtracting)27 b(this)f(v)o(ector)g
+(from)f Ft(v)g FK(yields)h(an)g(element)g(of)f Ft(C)p
+FK(.)33 b(T)-7 b(o)24 b(mak)o(e)i(the)f(search)i(for)e(the)g(syndrome)i
+(as)75 3736 y(f)o(ast)d(as)g(possible,)h(the)f(syndrome)h(table)g(is)e
+(sorted)i(according)h(to)d(the)h(syndrome)i(v)o(ectors.)p
+75 3858 1648 4 v 1764 3863 a FF(Example)p 2102 3858 V
+75 3883 4 25 v 3747 3883 V 75 3983 4 100 v 188 3953 a(gap>)44
+b(H)e(:=)h(HammingCode\(2\);)p 3747 3983 V 75 4083 V
+188 4053 a(a)g(linear)h([3,1,3]1)h(Hamming)g(\(2,2\))f(code)g(over)f
+(GF\(2\))p 3747 4083 V 75 4182 V 188 4152 a(gap>)h(SyndromeTable\(H\);)
+p 3747 4182 V 75 4282 V 188 4252 a([)f([)f([)h(0)g(0)f(0)h(],)g([)g(0)f
+(0)h(])g(],)g([)f([)h(1)g(0)g(0)f(],)h([)g(0)g(1)f(])h(],)p
+3747 4282 V 75 4381 V 273 4351 a([)f([)h(0)g(1)f(0)h(],)g([)g(1)f(0)h
+(])g(],)g([)f([)h(0)g(0)g(1)f(],)h([)g(1)g(1)f(])h(])g(])p
+3747 4381 V 75 4481 V 188 4451 a(gap>)h(c)e(:=)h(Codeword\("101"\);)p
+3747 4481 V 75 4581 V 188 4551 a([)g(1)f(0)h(1)g(])p
+3747 4581 V 75 4680 V 188 4650 a(gap>)h(c)e(in)h(H;)p
+3747 4680 V 75 4780 V 188 4750 a(false)425 b(#)43 b(c)f(is)h(not)h(an)f
+(element)i(of)e(H)p 3747 4780 V 75 4880 V 188 4850 a(gap>)h
+(Syndrome\(H,c\);)p 3747 4880 V 75 4979 V 188 4949 a([)f(1)f(0)h(])339
+b(#)43 b(according)i(to)e(the)h(syndrome)h(table,)p 3747
+4979 V 75 5079 V 823 5049 a(#)e(the)g(error)h(vector)h([)d(0)h(1)g(0)f
+(])h(belongs)i(to)e(this)g(syndrome)p 3747 5079 V 75
+5178 V 188 5149 a(gap>)h(c)e(-)h(Codeword\("010"\))k(in)c(H;)p
+3747 5178 V 75 5278 V 188 5248 a(true)467 b(#)43 b(so)g(the)g
+(corrected)j(codeword)f(is)p 3747 5278 V 75 5378 V 823
+5348 a(#)e([)f(1)h(0)g(1)f(])h(-)g([)f(0)h(1)g(0)g(])f(=)h([)g(1)f(1)h
+(1)g(],)p 3747 5378 V 75 5477 V 823 5447 a(#)g(this)g(is)g(an)g
+(element)i(of)e(H)p 3747 5477 V 75 5502 4 25 v 3747 5502
+V 75 5505 3675 4 v Black Black eop end end
+%%Page: 58 58
+TeXDict begin HPSdict begin 58 57 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.58) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(58)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.10) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(4.10.10)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(StandardArray)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(StandardArray\()52 b(C)47 b(\))2491
+b Fr(\(function\))p Black 216 799 a Ft(StandardArray)37
+b FK(returns)e(the)f(standard)h(array)f(of)g(a)e(code)j
+Ft(C)p FK(.)57 b(This)33 b(is)g(a)g(matrix)h(with)f(elements)i(of)e
+(the)75 912 y(code)n(w)o(ord)27 b(type.)37 b(It)25 b(has)i
+Fq(q)942 879 y Fm(r)999 912 y FK(ro)n(ws)e(and)i Fq(q)1400
+879 y Fm(k)1460 912 y FK(columns,)g(where)g Fq(q)e FK(is)h(the)g(size)g
+(of)g(the)g(base)h(\002eld)f(of)f Ft(C)q FK(,)g Fq(r)f
+Fo(=)d Fq(n)13 b Fv(\000)g Fq(k)28 b FK(is)75 1024 y(the)f(redundanc)o
+(y)j(of)d Ft(C)q FK(,)g(and)g Fq(k)h FK(is)f(the)h(dimension)h(of)e
+Ft(C)p FK(.)38 b(The)27 b(\002rst)g(ro)n(w)f(contains)j(all)f(the)f
+(elements)h(of)f Ft(C)q FK(.)38 b(Each)75 1137 y(other)21
+b(ro)n(w)f(contains)i(w)o(ords)f(that)f(do)h(not)f(belong)i(to)e(the)g
+(code,)i(with)e(in)g(the)g(\002rst)g(column)h(their)g(syndrome)h(v)o
+(ector)75 1250 y(\(see)i Ft(Syndrome)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 668 1251 a
+SDict begin H.S end
+ 668 1251 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.8)p 0.0236 0.0894 0.6179 TeXcolorrgb
+894 1188 a
+SDict begin H.R end
+ 894 1188 a 894 1250 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end
+ 894 1250 a Black FK(\)\).)216
+1363 y(A)d(non-linear)j(code)e(does)h(not)e(ha)n(v)o(e)i(a)e(standard)i
+(array)-6 b(.)30 b Ft(StandardArray)e FK(then)c(returns)h(an)f(error)-5
+b(.)216 1476 y(Note)24 b(that)g(calculating)i(a)d(standard)j(array)f
+(can)e(be)h(v)o(ery)g(time-)g(and)g(memory-)g(consuming.)p
+75 1595 1648 4 v 1764 1600 a FF(Example)p 2102 1595 V
+75 1620 4 25 v 3747 1620 V 75 1720 4 100 v 188 1690 a(gap>)44
+b(StandardArray\(Repetit)q(ion)q(Cod)q(e\()q(3\)\))q(;)p
+3747 1720 V 75 1819 V 188 1789 a([)f([)f([)h(0)g(0)f(0)h(],)g([)g(1)f
+(1)h(1)g(])f(],)h([)g([)g(0)g(0)f(1)h(],)g([)g(1)f(1)h(0)g(])f(],)p
+3747 1819 V 75 1919 V 273 1889 a([)g([)h(0)g(1)f(0)h(],)g([)g(1)f(0)h
+(1)g(])f(],)h([)g([)g(1)g(0)f(0)h(],)g([)g(0)f(1)h(1)g(])f(])h(])p
+3747 1919 V 75 1944 4 25 v 3747 1944 V 75 1947 3675 4
+v 75 2079 a
+SDict begin H.S end
+ 75 2079 a 75 2079 a
+SDict begin 13.6 H.A end
+ 75 2079 a 75 2079 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.11) cvn H.B /DEST pdfmark end
+ 75
+2079 a 117 x FJ(4.10.11)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(P)n(ermutationDecode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2370 a Fs(\006)22 b Ft(PermutationDecode)q(\()52 b(C,)47
+b(v)g(\))2167 b Fr(\(function\))p Black 216 2596 a Ft
+(PermutationDecode)35 b FK(performs)c(permutation)h(decoding)g(when)d
+(possible)j(and)e(returns)h(original)g(v)o(ector)75 2709
+y(and)24 b(prints)h('f)o(ail')f(when)g(not)g(possible.)216
+2822 y(This)141 b(uses)h Ft(AutomorphismGroup)k FK(in)141
+b(the)g(binary)i(case,)171 b(and)141 b(\(the)h(slo)n(wer\))75
+2935 y Ft(PermutationAutomor)q(phi)q(smG)q(rou)q(p)40
+b FK(otherwise,)f(to)34 b(compute)i(the)f(permutation)i(automorphism)h
+(group)d Fq(P)75 3047 y FK(of)27 b Ft(C)q FK(.)39 b(The)27
+b(algorithm)i(runs)f(through)i(the)d(elements)36 b Fq(p)27
+b FK(of)g Fq(P)f FK(checking)k(if)d(the)h(weight)g(of)f
+Fq(H)7 b Fo(\()g Fq(p)14 b Fv(\001)g Fq(v)p Fo(\))27
+b FK(is)h(less)f(than)75 3160 y Fo(\()p Fq(d)22 b Fv(\000)17
+b FK(1)p Fo(\))p Fp(=)p FK(2.)63 b(If)35 b(it)f(is)h(then)g(the)g(v)o
+(ector)43 b Fq(p)17 b Fv(\001)g Fq(v)35 b FK(is)f(used)i(to)f(decode)h
+Fq(v)p FK(:)52 b(assuming)36 b Ft(C)e FK(is)h(in)g(standard)i(form)d
+(then)75 3273 y Fq(c)23 b Fo(=)30 b Fq(p)284 3240 y Fh(\000)p
+Fr(1)373 3273 y Fq(E)7 b(m)26 b FK(is)j(the)f(decoded)j(w)o(ord,)e
+(where)g Fq(m)e FK(is)h(the)h(information)i(digits)e(part)g(of)36
+b Fq(p)14 b Fv(\001)g Fq(v)p FK(.)44 b(If)28 b(no)g(such)36
+b Fq(p)28 b FK(e)o(xists)75 3386 y(then)23 b(\223f)o(ail\224)h(is)f
+(returned.)30 b(See,)23 b(for)f(e)o(xample,)i(section)g(10.2)f(of)g
+(Huf)n(fman)g(and)g(Pless)g([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2866 3387 a
+SDict begin H.S end
+ 2866 3387 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3073 3324 a
+SDict begin H.R end
+ 3073 3324 a 3073 3386 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 3073 3386 a Black
+FK(])f(for)h(more)g(details.)p 75 3505 1648 4 v 1764
+3510 a FF(Example)p 2102 3505 V 75 3530 4 25 v 3747 3530
+V 75 3630 4 100 v 188 3600 a(gap>)44 b(C0:=HammingCode\(3,GF\()q(2\)\))
+q(;)p 3747 3630 V 75 3729 V 188 3699 a(a)f(linear)h([7,4,3]1)h(Hamming)
+g(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 3729 V 75 3829
+V 188 3799 a(gap>)h(G0:=GeneratorMat\(C0\);)q(;)p 3747
+3829 V 75 3929 V 188 3899 a(gap>)g(G)e(:=)h(List\(G0,)i
+(ShallowCopy\);;)p 3747 3929 V 75 4028 V 188 3998 a(gap>)f
+(PutStandardForm\(G\);)p 3747 4028 V 75 4128 V 188 4098
+a(\(\))p 3747 4128 V 75 4227 V 188 4198 a(gap>)g(Display\(G\);)p
+3747 4227 V 75 4327 V 230 4297 a(1)f(.)g(.)f(.)h(.)g(1)f(1)p
+3747 4327 V 75 4427 V 230 4397 a(.)h(1)g(.)f(.)h(1)g(.)f(1)p
+3747 4427 V 75 4526 V 230 4496 a(.)h(.)g(1)f(.)h(1)g(1)f(.)p
+3747 4526 V 75 4626 V 230 4596 a(.)h(.)g(.)f(1)h(1)g(1)f(1)p
+3747 4626 V 75 4726 V 188 4696 a(gap>)i(H0:=CheckMat\(C0\);;)p
+3747 4726 V 75 4825 V 188 4795 a(gap>)g(Display\(H0\);)p
+3747 4825 V 75 4925 V 230 4895 a(.)f(.)g(.)f(1)h(1)g(1)f(1)p
+3747 4925 V 75 5024 V 230 4995 a(.)h(1)g(1)f(.)h(.)g(1)f(1)p
+3747 5024 V 75 5124 V 230 5094 a(1)h(.)g(1)f(.)h(1)g(.)f(1)p
+3747 5124 V 75 5224 V 188 5194 a(gap>)i(c0:=Random\(C0\);)p
+3747 5224 V 75 5323 V 188 5293 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p
+3747 5323 V 75 5423 V 188 5393 a(gap>)i(v01:=c0[1]+Z\(2\)\2102;;)p
+3747 5423 V 75 5523 V 188 5493 a(gap>)g(v1:=List\(c0,)i
+(ShallowCopy\);;)p 3747 5523 V 75 5622 V 188 5592 a(gap>)e
+(v1[1]:=v01;;)p 3747 5622 V Black Black eop end end
+%%Page: 59 59
+TeXDict begin HPSdict begin 59 58 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.59) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(59)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(v1:=Codeword\(v1\);)p 3747 428 V 75 528 V 188 498 a([)f(1)f(0)h(0)g
+(1)f(1)h(1)g(1)f(])p 3747 528 V 75 628 V 188 598 a(gap>)i
+(c1:=PermutationDecode)q(\(C0)q(,v1)q(\);)p 3747 628
+V 75 727 V 188 697 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p
+3747 727 V 75 827 V 188 797 a(gap>)i(c1=c0;)p 3747 827
+V 75 927 V 188 897 a(true)p 3747 927 V 75 951 4 25 v
+3747 951 V 75 954 3675 4 v 75 1088 a
+SDict begin H.S end
+ 75 1088 a 75 1088
+a
+SDict begin 13.6 H.A end
+ 75 1088 a 75 1088 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.12) cvn H.B /DEST pdfmark end
+ 75 1088 a 116 x FJ(4.10.12)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(P)n(ermutationDecodeNC)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1378 a Fs(\006)22 b Ft(PermutationDecode)q(NC\()53
+b(C,)47 b(v,)g(P)g(\))1935 b Fr(\(function\))p Black
+216 1604 a FK(Same)24 b(as)i Ft(PermutationDecode)k FK(e)o(xcept)c
+(that)g(one)g(may)e(enter)j(the)e(permutation)j(automorphism)f(group)g
+Ft(P)75 1717 y FK(in)e(as)h(an)f(ar)n(gument,)j(sa)n(ving)f(time.)35
+b(Here)25 b Ft(P)g FK(is)g(a)g(subgroup)j(of)e(the)f(symmetric)i(group)
+g(on)e Fq(n)g FK(letters,)i(where)f Fq(n)f FK(is)75 1830
+y(the)f(w)o(ord)f(length)i(of)f Ft(C)p FK(.)p Black Black
+eop end end
+%%Page: 60 60
+TeXDict begin HPSdict begin 60 59 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.60) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.5) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(5)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Generating)51 b(Codes)p Black 75 1881 a FK(In)23 b(this)i(chapter)g
+(we)e(describe)i(functions)h(for)e(generating)i(codes.)216
+1994 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512
+1995 a
+SDict begin H.S end
+ 512 1995 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(5.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 1932
+a
+SDict begin H.R end
+ 625 1932 a 625 1994 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.1) cvn H.B /ANN pdfmark end
+ 625 1994 a Black 23 w FK(describes)g(functions)
+g(for)e(generating)i(unrestricted)h(codes.)216 2107 y(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 512 2108 a
+SDict begin H.S end
+ 512 2108
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 625 2045 a
+SDict begin H.R end
+ 625 2045 a 625 2107 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.2) cvn H.B /ANN pdfmark end
+ 625 2107
+a Black 23 w FK(describes)f(functions)g(for)e(generating)i(linear)f
+(codes.)216 2220 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+522 2221 a
+SDict begin H.S end
+ 522 2221 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 635 2158
+a
+SDict begin H.R end
+ 635 2158 a 635 2220 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.3) cvn H.B /ANN pdfmark end
+ 635 2220 a Black 35 w FK(describes)37
+b(functions)g(for)d(constructing)k(certain)e(co)o(v)o(ering)g(codes,)i
+(such)d(as)g(the)f(Gabidulin)75 2333 y(codes.)216 2446
+y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 2447
+a
+SDict begin H.S end
+ 512 2447 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 625 2384 a
+SDict begin H.R end
+ 625 2384
+a 625 2446 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.4) cvn H.B /ANN pdfmark end
+ 625 2446 a Black 23 w FK(describes)26 b(functions)g(for)e
+(constructing)j(the)d(Golay)g(codes.)216 2559 y(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 512 2560 a
+SDict begin H.S end
+ 512 2560
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 625 2497 a
+SDict begin H.R end
+ 625 2497 a 625 2559 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end
+ 625 2559
+a Black 23 w FK(describes)i(functions)g(for)e(generating)i(c)o(yclic)f
+(codes.)216 2672 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+518 2673 a
+SDict begin H.S end
+ 518 2673 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 631 2610
+a
+SDict begin H.R end
+ 631 2610 a 631 2672 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.6) cvn H.B /ANN pdfmark end
+ 631 2672 a Black 29 w FK(describes)33
+b(functions)f(for)e(generating)j(codes)d(as)g(the)g(image)g(of)g(an)g
+(e)n(v)n(aluation)i(map)d(applied)75 2785 y(to)24 b(a)g(space)h(of)f
+(functions.)34 b(F)o(or)23 b(e)o(xample,)i(generalized)j(Reed-Solomon)e
+(codes)f(and)g(toric)g(codes)g(are)g(described)75 2897
+y(there.)75 3042 y
+SDict begin H.S end
+ 75 3042 a 75 3042 a
+SDict begin 13.6 H.A end
+ 75 3042 a 75 3042
+a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.1) cvn H.B /DEST pdfmark end
+ 75 3042 a 148 x FM(5.1)p 0.0 0.0 1.0 TeXcolorrgb 119
+w(Generating)31 b(Unr)n(estricted)f(Codes)p Black 75
+3397 a FK(In)20 b(this)g(section)i(we)d(start)i(with)f(functions)i
+(that)f(creating)h(code)f(from)f(user)g(de\002ned)h(matrices)g(or)f
+(special)i(matrices)75 3510 y(\(see)h Ft(ElementsCode)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 851 3511 a
+SDict begin H.S end
+ 851
+3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1032 3448 a
+SDict begin H.R end
+ 1032 3448
+a 1032 3510 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.1) cvn H.B /ANN pdfmark end
+ 1032 3510 a Black FK(\),)d Ft(HadamardCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1717 3511 a
+SDict begin H.S end
+
+1717 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1898 3448 a
+SDict begin H.R end
+ 1898 3448
+a 1898 3510 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.2) cvn H.B /ANN pdfmark end
+ 1898 3510 a Black FK(\),)c Ft(ConferenceCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2675 3511 a
+SDict begin H.S end
+
+2675 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2856 3448 a
+SDict begin H.R end
+ 2856 3448
+a 2856 3510 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.3) cvn H.B /ANN pdfmark end
+ 2856 3510 a Black FK(\))c(and)g Ft(MOLSCode)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 3511 a
+SDict begin H.S end
+
+3485 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3666 3448 a
+SDict begin H.R end
+ 3666 3448
+a 3666 3510 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.4) cvn H.B /ANN pdfmark end
+ 3666 3510 a Black FK(\)\).)75 3623 y(These)f(codes)h(are)
+e(unrestricted)k(codes;)e(the)o(y)f(may)f(later)i(be)e(disco)o(v)o
+(ered)j(to)d(be)h(linear)h(or)e(c)o(yclic.)216 3736 y(The)c(ne)o(xt)i
+(functions)h(generate)g(random)e(codes)h(\(see)g Ft(RandomCode)h
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2435 3737 a
+SDict begin H.S end
+
+2435 3737 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.5)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2616 3674 a
+SDict begin H.R end
+ 2616 3674
+a 2616 3736 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.5) cvn H.B /ANN pdfmark end
+ 2616 3736 a Black FK(\)\))f(and)f(the)g
+(Nordstrom-Robinson)75 3849 y(code)k(\(see)g Ft(NordstromRobinson)q
+(Cod)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1465 3850 a
+SDict begin H.S end
+ 1465 3850 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 1646
+3787 a
+SDict begin H.R end
+ 1646 3787 a 1646 3849 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.6) cvn H.B /ANN pdfmark end
+ 1646 3849 a Black FK(\)\),)24
+b(respecti)n(v)o(ely)-6 b(.)216 3962 y(Finally)g(,)27
+b(we)e(describe)j(tw)o(o)d(functions)k(for)c(generating)k(Greedy)e
+(codes.)36 b(These)26 b(are)g(codes)h(that)f(contructed)75
+4075 y(by)e(gathering)h(code)n(w)o(ords)h(from)d(a)g(space)i(\(see)f
+Ft(GreedyCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2140 4076 a
+SDict begin H.S end
+ 2140 4076 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2321
+4013 a
+SDict begin H.R end
+ 2321 4013 a 2321 4075 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.7) cvn H.B /ANN pdfmark end
+ 2321 4075 a Black FK(\))e(and)g
+Ft(LexiCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2953 4076 a
+SDict begin H.S end
+ 2953 4076 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 3134
+4013 a
+SDict begin H.R end
+ 3134 4013 a 3134 4075 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.8) cvn H.B /ANN pdfmark end
+ 3134 4075 a Black FK(\)\).)75
+4227 y
+SDict begin H.S end
+ 75 4227 a 75 4227 a
+SDict begin 13.6 H.A end
+ 75 4227 a 75 4227 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.1) cvn H.B /DEST pdfmark end
+ 75 4227
+a 97 x FJ(5.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ElementsCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4498 a Fs(\006)c Ft(ElementsCode\()51
+b(L[,)d(name,])g(F)f(\))2028 b Fr(\(function\))p Black
+216 4724 a Ft(ElementsCode)32 b FK(creates)e(an)e(unrestricted)k(code)d
+(of)f(the)h(list)f(of)g(elements)i Ft(L)p FK(,)f(in)f(the)h(\002eld)f
+Ft(F)p FK(.)42 b Ft(L)28 b FK(must)g(be)h(a)75 4837 y(list)24
+b(of)f(v)o(ectors,)i(strings,)g(polynomials)h(or)e(code)n(w)o(ords.)30
+b Ft(name)24 b FK(can)g(contain)i(a)d(short)h(description)j(of)c(the)h
+(code.)216 4950 y(If)f Ft(L)g FK(contains)j(a)d(code)n(w)o(ord)i(more)f
+(than)g(once,)g(it)f(is)h(remo)o(v)o(ed)g(from)f(the)h(list)g(and)g(a)f
+Fy(GAP)f FK(set)h(is)h(returned.)p 75 5065 1648 4 v 1764
+5070 a FF(Example)p 2102 5065 V 75 5090 4 25 v 3747 5090
+V 75 5190 4 100 v 188 5160 a(gap>)44 b(M)e(:=)h(Z\(3\)\2100)i(*)d([)h
+([1,)g(0,)g(1,)g(1],)h([2,)f(2,)g(0,)g(0],)h([0,)f(1,)g(2,)g(2])g(];;)p
+3747 5190 V 75 5290 V 188 5260 a(gap>)h(C)e(:=)h(ElementsCode\()k(M,)c
+("example)i(code",)g(GF\(3\))f(\);)p 3747 5290 V 75 5389
+V 188 5359 a(a)f(\(4,3,1..4\)2)j(example)e(code)g(over)g(GF\(3\))p
+3747 5389 V 75 5489 V 188 5459 a(gap>)g(MinimumDistance\()j(C)c(\);)p
+3747 5489 V 75 5588 V 188 5559 a(4)p 3747 5588 V Black
+1867 5841 a FK(60)p Black eop end end
+%%Page: 61 61
+TeXDict begin HPSdict begin 61 60 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.61) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(61)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(AsSSortedList\()j(C)42 b(\);)p 3747 428 V 75 528 V
+188 498 a([)h([)f(0)h(1)g(2)f(2)h(],)g([)g(1)f(0)h(1)g(1)f(],)h([)g(2)g
+(2)g(0)f(0)h(])g(])p 3747 528 V 75 553 4 25 v 3747 553
+V 75 556 3675 4 v 75 789 a
+SDict begin H.S end
+ 75 789 a 75 789 a
+SDict begin 13.6 H.A end
+ 75 789 a
+75 789 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.2) cvn H.B /DEST pdfmark end
+ 75 789 a 116 x FJ(5.1.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(HadamardCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+1079 a Fs(\006)22 b Ft(HadamardCode\()51 b(H[,)d(t])f(\))2306
+b Fr(\(function\))p Black 216 1305 a FK(The)68 b(four)i(forms)f(this)g
+(command)g(can)g(tak)o(e)h(are)f Ft(HadamardCode\(H,t\))p
+FK(,)85 b Ft(HadamardCode\(H\))p FK(,)75 1418 y Ft(HadamardCode\(n,t\))
+p FK(,)29 b(and)24 b Ft(HadamardCode\(n\))p FK(.)216
+1531 y(In)h(the)g(case)h(when)f(the)h(ar)n(guments)h
+Ft(H)e FK(and)g Ft(t)g FK(are)g(both)h(gi)n(v)o(en,)g
+Ft(HadamardCode)i FK(returns)f(a)d(Hadamard)i(code)75
+1644 y(of)d(the)f Fq(t)334 1611 y Fm(t)5 b(h)418 1644
+y FK(kind)24 b(from)g(the)f(Hadamard)i(matrix)f Ft(H)f
+FK(In)g(case)i(only)f Ft(H)f FK(is)g(gi)n(v)o(en,)f Fq(t)27
+b Fo(=)20 b FK(3)j(is)g(used.)216 1757 y(By)j(de\002nition,)j(a)e
+(Hadamard)g(matrix)h(is)e(a)h(square)h(matrix)f Ft(H)g
+FK(with)f Fq(H)20 b Fv(\001)14 b Fq(H)2618 1724 y Fm(T)2689
+1757 y Fo(=)21 b Fv(\000)p Fq(n)14 b Fv(\001)g Fq(I)2978
+1771 y Fm(n)3016 1757 y FK(,)26 b(where)h Fq(n)g FK(is)g(the)g(size)75
+1870 y(of)c Ft(H)q FK(.)28 b(The)23 b(entries)i(of)e
+Ft(H)g FK(are)h(either)h(1)e(or)h(-1.)216 1983 y(The)h(matrix)g
+Ft(H)g FK(is)g(\002rst)g(transformed)i(into)f(a)e(binary)j(matrix)e
+Fq(A)2232 1997 y Fm(n)2294 1983 y FK(by)g(replacing)i(the)f(1')-5
+b(s)25 b(by)g(0')-5 b(s)25 b(and)h(the)f Fv(\000)p FK(1')-5
+b(s)75 2096 y(by)24 b(1s\).)216 2208 y(The)e(Hadamard)i(matrix)f(of)f
+(the)h Fq(\002r)o(st)h(kind)h FK(\()n Fq(t)h Fo(=)19
+b FK(1\))k(is)f(created)i(by)f(using)h(the)f(ro)n(ws)f(of)g
+Fq(A)3059 2222 y Fm(n)3118 2208 y FK(as)h(elements,)g(after)75
+2321 y(deleting)29 b(the)d(\002rst)g(column.)39 b(This)26
+b(is)h(a)f Fo(\()p Fq(n)14 b Fv(\000)g FK(1)p Fp(;)c
+Fq(n)p Fp(;)g Fq(n)p Fp(=)p FK(2)p Fo(\))28 b FK(code.)39
+b(W)-7 b(e)25 b(use)i(this)g(code)g(for)g(creating)i(the)d(Hadamard)75
+2434 y(code)20 b(of)f(the)h Fq(second)g(kind)j FK(\()n
+Fq(t)f Fo(=)16 b FK(2\),)k(by)f(adding)i(all)e(the)h(complements)h(of)e
+(the)g(already)i(e)o(xisting)g(code)n(w)o(ords.)29 b(This)75
+2547 y(results)23 b(in)e(a)g Fo(\()p Fq(n)11 b Fv(\000)g
+FK(1)p Fp(;)f FK(2)p Fq(n)p Fp(;)g Fq(n)p Fp(=)p FK(2)h
+Fv(\000)g FK(1)p Fo(\))22 b FK(code.)29 b(The)21 b Fq(thir)m(d)h(kind)i
+FK(\()n Fq(t)h Fo(=)18 b FK(3\))j(is)g(created)i(by)e(using)i(the)e(ro)
+n(ws)g(of)h Fq(A)3385 2561 y Fm(n)3442 2547 y FK(\(without)75
+2660 y(cutting)29 b(a)f(column\))h(and)f(their)g(complements)i(as)e
+(elements.)42 b(This)28 b(w)o(ay)-6 b(,)28 b(we)f(ha)n(v)o(e)i(an)e
+Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fq(n)p Fp(;)g Fq(n)p
+Fp(=)p FK(2)p Fo(\))p FK(-code.)47 b(The)75 2773 y(returned)26
+b(code)e(is)f(generally)j(an)e(unrestricted)j(code,)d(b)n(ut)g(for)g
+Fq(n)c Fo(=)g FK(2)2284 2740 y Fm(r)2316 2773 y FK(,)j(the)g(code)i(is)
+e(linear)-5 b(.)216 2886 y(The)29 b(command)h Ft(HadamardCode\(n,t\))35
+b FK(returns)c(a)e(Hadamard)h(code)h(with)e(parameter)i
+Ft(n)e FK(of)g(the)f Fq(t)3476 2853 y Fm(t)5 b(h)3566
+2886 y FK(kind.)75 2999 y(F)o(or)23 b(the)g(command)i
+Ft(HadamardCode\(n\))p FK(,)h Fq(t)g Fo(=)20 b FK(3)j(is)g(used.)216
+3112 y(When)30 b(called)g(in)g(these)g(forms,)h Ft(HadamardCode)i
+FK(\002rst)c(creates)i(a)e(Hadamard)h(matrix)g(\(see)g
+Ft(HadamardMat)75 3225 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 3226 a
+SDict begin H.S end
+ 105 3226 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 3163 a
+SDict begin H.R end
+ 286 3163 a 286 3225 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end
+ 286 3225 a Black FK(\)\),)41
+b(of)c(size)g Ft(n)g FK(and)h(then)f(follo)n(ws)h(the)f(same)g
+(procedure)j(as)d(described)j(abo)o(v)o(e.)69 b(Therefore)39
+b(the)e(same)75 3338 y(restrictions)27 b(with)c(respect)i(to)f
+Ft(n)f FK(as)g(for)h(Hadamard)g(matrices)h(hold.)p 75
+3460 1648 4 v 1764 3465 a FF(Example)p 2102 3460 V 75
+3485 4 25 v 3747 3485 V 75 3585 4 100 v 188 3555 a(gap>)44
+b(H4)f(:=)g([[1,1,1,1],[1,-1,1,-1)q(],)q([1,)q(1,-)q(1,-)q(1],)q([1,)q
+(-1,)q(-1,)q(1]])q(;;)p 3747 3585 V 75 3684 V 188 3654
+a(gap>)h(HadamardCode\()i(H4,)e(1)e(\);)p 3747 3684 V
+75 3784 V 188 3754 a(a)h(\(3,4,2\)1)i(Hadamard)g(code)e(of)g(order)i(4)
+d(over)i(GF\(2\))p 3747 3784 V 75 3884 V 188 3854 a(gap>)g
+(HadamardCode\()i(H4,)e(2)e(\);)p 3747 3884 V 75 3983
+V 188 3953 a(a)h(\(3,8,1\)0)i(Hadamard)g(code)e(of)g(order)i(4)d(over)i
+(GF\(2\))p 3747 3983 V 75 4083 V 188 4053 a(gap>)g(HadamardCode\()i(H4)
+d(\);)p 3747 4083 V 75 4182 V 188 4153 a(a)g(\(4,8,2\)1)i(Hadamard)g
+(code)e(of)g(order)i(4)d(over)i(GF\(2\))p 3747 4182 V
+75 4282 V 188 4252 a(gap>)g(H4)f(:=)g([[1,1,1,1],[1,-1,1,-1)q(],)q([1,)
+q(1,-)q(1,-)q(1],)q([1,)q(-1,)q(-1,)q(1]])q(;;)p 3747
+4282 V 75 4382 V 188 4352 a(gap>)h(C)e(:=)h(HadamardCode\()k(4)c(\);)p
+3747 4382 V 75 4481 V 188 4451 a(a)g(\(4,8,2\)1)i(Hadamard)g(code)e(of)
+g(order)i(4)d(over)i(GF\(2\))p 3747 4481 V 75 4581 V
+188 4551 a(gap>)g(C)e(=)h(HadamardCode\()k(H4)c(\);)p
+3747 4581 V 75 4681 V 188 4651 a(true)p 3747 4681 V 75
+4705 4 25 v 3747 4705 V 75 4708 3675 4 v 75 4941 a
+SDict begin H.S end
+ 75
+4941 a 75 4941 a
+SDict begin 13.6 H.A end
+ 75 4941 a 75 4941 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.3) cvn H.B /DEST pdfmark end
+ 75 4941 a 117 x
+FJ(5.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Confer)n(enceCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5232 a Fs(\006)22 b
+Ft(ConferenceCode\()52 b(H)47 b(\))2445 b Fr(\(function\))p
+Black 216 5458 a Ft(ConferenceCode)24 b FK(returns)d(a)d(code)j(of)e
+(length)i Fq(n)9 b Fv(\000)g FK(1)18 b(constructed)23
+b(from)c(a)g(symmetric)h('conference)i(matrix')75 5571
+y Ft(H)p FK(.)32 b(A)24 b Fq(confer)m(ence)k(matrix)e
+Ft(H)e FK(is)h(a)f(symmetric)i(matrix)g(of)f(order)h
+Fq(n)p FK(,)e(which)i(satis\002es)g Fq(H)19 b Fv(\001)13
+b Fq(H)3000 5538 y Fm(T)3070 5571 y Fo(=)20 b(\(\()p
+Fq(n)13 b Fv(\000)g FK(1)p Fo(\))g Fv(\001)g Fq(I)5 b
+FK(,)26 b(with)p Black Black eop end end
+%%Page: 62 62
+TeXDict begin HPSdict begin 62 61 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.62) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(62)p Black 75 399 a Fq(n)23 b Fv(\021)e
+FK(2)92 b Fo(\()p FK(mod)21 b(4)p Fo(\))p FK(.)39 b(The)27
+b(ro)n(ws)f(of)1211 363 y Fr(1)p 1211 378 34 4 v 1211
+430 a(2)1255 399 y Fo(\()p Fq(H)20 b Fo(+)14 b Fq(I)k
+Fo(+)c Fq(J)5 b Fo(\))p FK(,)1734 363 y Fr(1)p 1734 378
+V 1734 430 a(2)1777 399 y Fo(\()p Fv(\000)p Fq(H)20 b
+Fo(+)14 b Fq(I)k Fo(+)c Fq(J)5 b Fo(\))p FK(,)26 b(plus)i(the)f(zero)h
+(and)g(all-ones)h(v)o(ectors)f(form)75 511 y(the)c(elements)h(of)e(a)g
+(binary)i(non-linear)i Fo(\()p Fq(n)13 b Fv(\000)g FK(1)p
+Fp(;)d FK(2)p Fq(n)p Fp(;)g Fo(\()p Fq(n)j Fv(\000)g
+FK(2)p Fo(\))p Fp(=)p FK(2)p Fo(\))25 b FK(code.)216
+624 y Fy(GU)m(A)-6 b(V)f(A)26 b FK(constructs)k(a)e(symmetric)g
+(conference)j(matrix)d(of)f(order)i Fq(n)14 b Fo(+)g
+FK(1)28 b(\()p Fq(n)23 b Fv(\021)f FK(1)91 b Fo(\()p
+FK(mod)22 b(4)p Fo(\))p FK(\))27 b(and)i(uses)f(the)75
+737 y(ro)n(ws)35 b(of)h(that)g(matrix,)i(plus)f(the)e(zero)h(and)g
+(all-ones)i(v)o(ectors,)h(to)d(construct)i(a)d(binary)i(non-linear)h
+Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fo(\()p Fq(n)19 b Fo(+)75
+850 y FK(1)p Fo(\))p Fp(;)10 b Fo(\()p Fq(n)j Fv(\000)g
+FK(1)p Fo(\))p Fp(=)p FK(2)p Fo(\))p FK(-code.)p 75 976
+1648 4 v 1764 981 a FF(Example)p 2102 976 V 75 1001 4
+25 v 3747 1001 V 75 1100 4 100 v 188 1070 a(gap>)44 b(H6)f(:=)g
+([[0,1,1,1,1,1],[1,0,1)q(,-)q(1,-)q(1,1)q(],[)q(1,1)q(,0,)q(1,-)q(1,-)q
+(1],)p 3747 1100 V 75 1200 V 188 1170 a(>)g([1,-1,1,0,1,-1],[1,-1)q
+(,-1)q(,1,)q(0,1)q(],)q([1,)q(1,-)q(1,-)q(1,1)q(,0])q(];;)p
+3747 1200 V 75 1300 V 188 1270 a(gap>)h(C1)f(:=)g(ConferenceCode\()k
+(H6)c(\);)p 3747 1300 V 75 1399 V 188 1369 a(a)g(\(5,12,2\)1..4)j
+(conference)g(code)d(over)h(GF\(2\))p 3747 1399 V 75
+1499 V 188 1469 a(gap>)g(IsLinearCode\()i(C1)d(\);)p
+3747 1499 V 75 1598 V 188 1569 a(false)p 3747 1598 V
+75 1698 V 188 1668 a(gap>)h(C2)f(:=)g(ConferenceCode\()k(5)c(\);)p
+3747 1698 V 75 1798 V 188 1768 a(a)g(\(5,12,2\)1..4)j(conference)g
+(code)d(over)h(GF\(2\))p 3747 1798 V 75 1897 V 188 1867
+a(gap>)g(AsSSortedList\()j(C2)c(\);)p 3747 1897 V 75
+1997 V 188 1967 a([)g([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g(1)f(1)h
+(1)g(],)g([)g(0)f(1)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(1)g(0)f(1)h(],)g([)g
+(0)f(1)h(1)g(1)f(0)h(],)p 3747 1997 V 75 2097 V 273 2067
+a([)f(1)h(0)g(0)f(1)h(1)g(],)g([)f(1)h(0)g(1)f(0)h(1)g(],)g([)g(1)f(0)h
+(1)g(1)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(1)h(],)g([)g(1)f(1)h(0)g(1)f(0)h
+(],)p 3747 2097 V 75 2196 V 273 2166 a([)f(1)h(1)g(1)f(0)h(0)g(],)g([)f
+(1)h(1)g(1)f(1)h(1)g(])f(])p 3747 2196 V 75 2221 4 25
+v 3747 2221 V 75 2224 3675 4 v 75 2357 a
+SDict begin H.S end
+ 75 2357 a 75
+2357 a
+SDict begin 13.6 H.A end
+ 75 2357 a 75 2357 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.4) cvn H.B /DEST pdfmark end
+ 75 2357 a 117 x FJ(5.1.4)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(MOLSCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2648 a Fs(\006)22 b Ft(MOLSCode\()50 b([n,])e(q)f(\))
+2491 b Fr(\(function\))p Black 216 2874 a Ft(MOLSCode)32
+b FK(returns)g(an)e Fo(\()p Fq(n)p Fp(;)10 b Fq(q)1173
+2841 y Fr(2)1212 2874 y Fp(;)g Fq(n)15 b Fv(\000)g FK(1)p
+Fo(\))30 b FK(code)h(o)o(v)o(er)f Fq(GF)7 b Fo(\()p Fq(q)p
+Fo(\))p FK(.)48 b(The)29 b(code)i(is)f(created)i(from)e
+Fq(n)15 b Fv(\000)g FK(2)29 b('Mutually)75 2987 y(Orthogonal)35
+b(Latin)e(Squares')h(\(MOLS\))d(of)i(size)g Fq(q)17 b
+Fv(\002)e Fq(q)p FK(.)56 b(The)33 b(def)o(ault)h(for)f
+Ft(n)g FK(is)f(4.)56 b Fy(GU)m(A)-6 b(V)f(A)31 b FK(can)i(construct)j
+(a)75 3100 y(MOLS)20 b(code)i(for)h Fq(n)11 b Fv(\000)g
+FK(2)19 b Fv(\024)g Fq(q)p FK(.)27 b(Here)22 b Ft(q)g
+FK(must)g(be)g(a)f(prime)h(po)n(wer)l(,)h Fq(q)c Fp(>)f
+FK(2.)28 b(If)22 b(there)h(are)f(no)g Fq(n)11 b Fv(\000)g
+FK(2)22 b(MOLS,)d(an)j(error)75 3212 y(is)h(signalled.)216
+3325 y(Since)h(each)g(of)f(the)h Fq(n)13 b Fv(\000)g
+FK(2)22 b(MOLS)f(is)j(a)f Fq(q)13 b Fv(\002)g Fq(q)22
+b FK(matrix,)i(we)e(can)i(create)h(a)e(code)h(of)f(size)h
+Fq(q)3066 3292 y Fr(2)3127 3325 y FK(by)f(listing)i(in)e(each)75
+3438 y(code)h(element)g(the)f(entries)i(that)f(are)f(in)g(the)g(same)g
+(position)j(in)d(each)g(of)g(the)h(MOLS.)c(W)-7 b(e)22
+b(precede)j(each)f(of)f(these)75 3551 y(lists)h(with)g(the)f(tw)o(o)h
+(coordinates)i(that)f(specify)g(this)f(position,)h(making)g(the)f(w)o
+(ord)f(length)i(become)g Fq(n)p FK(.)216 3664 y(The)e(MOLS)e(codes)k
+(are)f(MDS)e(codes)i(\(see)g Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2107 3665 a
+SDict begin H.S end
+ 2107 3665 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2288 3602 a
+SDict begin H.R end
+ 2288 3602 a 2288 3664 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end
+ 2288 3664 a Black
+FK(\)\).)p 75 3783 1648 4 v 1764 3788 a FF(Example)p
+2102 3783 V 75 3808 4 25 v 3747 3808 V 75 3908 4 100
+v 188 3878 a(gap>)44 b(C1)f(:=)g(MOLSCode\()i(6,)e(5)g(\);)p
+3747 3908 V 75 4007 V 188 3977 a(a)g(\(6,25,5\)3..4)j(code)e(generated)
+h(by)e(4)g(MOLS)h(of)f(order)h(5)e(over)i(GF\(5\))p 3747
+4007 V 75 4107 V 188 4077 a(gap>)g(mols)f(:=)g(List\()h([1)f(..)g
+(WordLength\(C1\))48 b(-)42 b(2)h(],)g(function\()i(nr)e(\))p
+3747 4107 V 75 4207 V 188 4177 a(>)297 b(local)44 b(ls,)f(el;)p
+3747 4207 V 75 4306 V 188 4276 a(>)297 b(ls)43 b(:=)g(NullMat\()i
+(Size\(LeftActingDomai)q(n\(C)q(1\)\))q(,)j(Size\(LeftActingDoma)q
+(in\()q(C1\))q(\))h(\);)p 3747 4306 V 75 4406 V 188 4376
+a(>)297 b(for)43 b(el)g(in)g(VectorCodeword\()48 b(AsSSortedList\()f
+(C1)c(\))f(\))h(do)p 3747 4406 V 75 4505 V 188 4476 a(>)424
+b(ls[IntFFE\(el[1]\)+1][I)q(nt)q(FFE)q(\(el)q([2])q(\)+1)q(])48
+b(:=)43 b(el[nr)h(+)f(2];)p 3747 4505 V 75 4605 V 188
+4575 a(>)297 b(od;)p 3747 4605 V 75 4705 V 188 4675 a(>)g(return)44
+b(ls;)p 3747 4705 V 75 4804 V 188 4774 a(>)170 b(end)43
+b(\);;)p 3747 4804 V 75 4904 V 188 4874 a(gap>)h(AreMOLS\()h(mols)e
+(\);)p 3747 4904 V 75 5004 V 188 4974 a(true)p 3747 5004
+V 75 5103 V 188 5073 a(gap>)h(C2)f(:=)g(MOLSCode\()i(11)e(\);)p
+3747 5103 V 75 5203 V 188 5173 a(a)g(\(4,121,3\)2)i(code)f(generated)h
+(by)e(2)g(MOLS)h(of)f(order)h(11)f(over)h(GF\(11\))p
+3747 5203 V 75 5228 4 25 v 3747 5228 V 75 5231 3675 4
+v Black Black eop end end
+%%Page: 63 63
+TeXDict begin HPSdict begin 63 62 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.63) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(63)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.5) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.1.5)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(RandomCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(RandomCode\()51 b(n,)c(M,)g(F)g(\))2352
+b Fr(\(function\))p Black 216 799 a Ft(RandomCode)31
+b FK(returns)f(a)d(random)i(unrestricted)j(code)c(of)g(size)h
+Ft(M)f FK(with)f(w)o(ord)i(length)g Ft(n)f FK(o)o(v)o(er)g
+Ft(F)p FK(.)42 b Ft(M)27 b FK(must)h(be)75 912 y(less)c(than)g(or)g
+(equal)g(to)g(the)g(number)g(of)g(elements)h(in)e(the)h(space)g
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2399 879 y Fm(n)2438 912
+y FK(.)216 1024 y(The)57 b(function)j Ft(RandomLinearCode)i
+FK(returns)e(a)d(random)h(linear)h(code)f(\(see)g Ft(RandomLinearCode)
+75 1137 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105
+1138 a
+SDict begin H.S end
+ 105 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(5.2.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 1075
+a
+SDict begin H.R end
+ 331 1075 a 331 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.12) cvn H.B /ANN pdfmark end
+ 331 1137 a Black FK(\)\).)p 75
+1210 1648 4 v 1764 1215 a FF(Example)p 2102 1210 V 75
+1235 4 25 v 3747 1235 V 75 1334 4 100 v 188 1304 a(gap>)44
+b(C1)f(:=)g(RandomCode\()j(6,)d(10,)g(GF\(8\))h(\);)p
+3747 1334 V 75 1434 V 188 1404 a(a)f(\(6,10,1..6\)4..6)k(random)d
+(unrestricted)j(code)d(over)f(GF\(8\))p 3747 1434 V 75
+1533 V 188 1504 a(gap>)h(MinimumDistance\(C1\);)p 3747
+1533 V 75 1633 V 188 1603 a(3)p 3747 1633 V 75 1733 V
+188 1703 a(gap>)g(C2)f(:=)g(RandomCode\()j(6,)d(10,)g(GF\(8\))h(\);)p
+3747 1733 V 75 1832 V 188 1802 a(a)f(\(6,10,1..6\)4..6)k(random)d
+(unrestricted)j(code)d(over)f(GF\(8\))p 3747 1832 V 75
+1932 V 188 1902 a(gap>)h(C1)f(=)f(C2;)p 3747 1932 V 75
+2032 V 188 2002 a(false)p 3747 2032 V 75 2056 4 25 v
+3747 2056 V 75 2059 3675 4 v 75 2238 a
+SDict begin H.S end
+ 75 2238 a 75 2238
+a
+SDict begin 13.6 H.A end
+ 75 2238 a 75 2238 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.6) cvn H.B /DEST pdfmark end
+ 75 2238 a 116 x FJ(5.1.6)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Nordstr)n(omRobinsonCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2528 a Fs(\006)22 b Ft(NordstromRobinson)q(Cod)q(e\()53
+b(\))2213 b Fr(\(function\))p Black 216 2754 a Ft(NordstromRobinsonC)q
+(ode)36 b FK(returns)c(a)e(Nordstrom-Robinson)k(code,)f(the)d(best)h
+(code)g(with)f(w)o(ord)h(length)75 2867 y Fq(n)21 b Fo(=)e
+FK(16)24 b(and)g(minimum)f(distance)j Fq(d)g Fo(=)19
+b FK(6)24 b(o)o(v)o(er)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p
+FK(.)29 b(This)23 b(is)h(a)f(non-linear)j Fo(\()p FK(16)p
+Fp(;)10 b FK(256)p Fp(;)g FK(6)p Fo(\))27 b FK(code.)p
+75 2946 1648 4 v 1764 2951 a FF(Example)p 2102 2946 V
+75 2971 4 25 v 3747 2971 V 75 3071 4 100 v 188 3041 a(gap>)44
+b(C)e(:=)h(NordstromRobinsonCo)q(de\()q(\);)p 3747 3071
+V 75 3170 V 188 3140 a(a)g(\(16,256,6\)4)j(Nordstrom-Robinson)i(code)c
+(over)g(GF\(2\))p 3747 3170 V 75 3270 V 188 3240 a(gap>)g
+(OptimalityCode\()j(C)c(\);)p 3747 3270 V 75 3369 V 188
+3340 a(0)p 3747 3369 V 75 3394 4 25 v 3747 3394 V 75
+3397 3675 4 v 75 3576 a
+SDict begin H.S end
+ 75 3576 a 75 3576 a
+SDict begin 13.6 H.A end
+ 75 3576 a
+75 3576 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.7) cvn H.B /DEST pdfmark end
+ 75 3576 a 116 x FJ(5.1.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Gr)n(eedyCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+3866 a Fs(\006)22 b Ft(GreedyCode\()51 b(L,)c(d,)g(F)g(\))2352
+b Fr(\(function\))p Black 216 4092 a Ft(GreedyCode)36
+b FK(returns)e(a)e(Greedy)i(code)f(with)g(design)h(distance)h
+Ft(d)d FK(o)o(v)o(er)h(the)g(\002nite)f(\002eld)h Ft(F)p
+FK(.)56 b(The)32 b(code)h(is)75 4205 y(constructed)f(using)f(the)e
+(greedy)i(algorithm)g(on)e(the)g(list)h(of)f(v)o(ectors)h
+Ft(L)q FK(.)44 b(\(The)29 b(greedy)i(algorithm)g(checks)f(each)75
+4318 y(v)o(ector)c(in)e Ft(L)h FK(and)g(adds)g(it)g(to)f(the)h(code)h
+(if)e(its)h(distance)i(to)e(the)g(current)h(code)g(is)e(greater)j(than)
+e(or)g(equal)g(to)g Ft(d)p FK(.)32 b(It)24 b(is)75 4431
+y(ob)o(vious)h(that)f(the)g(resulting)i(code)e(has)g(a)f(minimum)h
+(distance)h(of)f(at)f(least)i Ft(d)p FK(.)216 4544 y(Greedy)f(codes)h
+(are)f(often)g(linear)h(codes.)216 4657 y(The)34 b(function)j
+Ft(LexiCode)g FK(creates)f(a)e(greedy)i(code)g(from)e(a)h(basis)g
+(instead)i(of)d(an)h(enumerated)i(list)e(\(see)75 4770
+y Ft(LexiCode)26 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+499 4771 a
+SDict begin H.S end
+ 499 4771 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 680
+4708 a
+SDict begin H.R end
+ 680 4708 a 680 4770 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.8) cvn H.B /ANN pdfmark end
+ 680 4770 a Black FK(\)\).)p
+75 4842 1648 4 v 1764 4847 a FF(Example)p 2102 4842 V
+75 4867 4 25 v 3747 4867 V 75 4966 4 100 v 188 4936 a(gap>)44
+b(C1)f(:=)g(GreedyCode\()j(Tuples\()e(AsSSortedList\()k(GF\(2\))c(\),)f
+(5)f(\),)h(3,)g(GF\(2\))h(\);)p 3747 4966 V 75 5066 V
+188 5036 a(a)f(\(5,4,3..5\)2)j(Greedy)e(code,)g(user)g(defined)h(basis)
+f(over)f(GF\(2\))p 3747 5066 V 75 5166 V 188 5136 a(gap>)h(C2)f(:=)g
+(GreedyCode\()j(Permuted\()f(Tuples\()g(AsSSortedList\()i(GF\(2\))d
+(\),)f(5)g(\),)p 3747 5166 V 75 5265 V 188 5235 a(>)1059
+b(\(1,4\))44 b(\),)f(3,)g(GF\(2\))h(\);)p 3747 5265 V
+75 5365 V 188 5335 a(a)f(\(5,4,3..5\)2)j(Greedy)e(code,)g(user)g
+(defined)h(basis)f(over)f(GF\(2\))p 3747 5365 V 75 5465
+V 188 5435 a(gap>)h(C1)f(=)f(C2;)p 3747 5465 V 75 5564
+V 188 5534 a(false)p 3747 5564 V 75 5589 4 25 v 3747
+5589 V 75 5592 3675 4 v Black Black eop end end
+%%Page: 64 64
+TeXDict begin HPSdict begin 64 63 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.64) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(64)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.8) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.1.8)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(LexiCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(LexiCode\()50 b(n,)d(d,)g(F)g(\))2445
+b Fr(\(function\))p Black 216 799 a FK(In)30 b(this)h(format,)i
+Ft(Lexicode)f FK(returns)g(a)e(le)o(xicode)j(with)d(w)o(ord)g(length)i
+Ft(n)q FK(,)f(design)h(distance)g Ft(d)e FK(o)o(v)o(er)h
+Ft(F)p FK(.)49 b(The)75 912 y(code)28 b(is)e(constructed)k(using)e(the)
+g(greedy)g(algorithm)h(on)e(the)g(le)o(xicographically)k(ordered)e
+(list)e(of)g(all)g(v)o(ectors)h(of)75 1024 y(length)e
+Ft(n)f FK(o)o(v)o(er)g Ft(F)p FK(.)32 b(Ev)o(ery)25 b(time)g(a)f(v)o
+(ector)i(is)f(found)h(that)f(has)g(a)g(distance)i(to)e(the)g(current)h
+(code)g(of)f(at)g(least)g Ft(d)q FK(,)f(it)g(is)75 1137
+y(added)j(to)f(the)g(code.)37 b(This)25 b(results,)j(ob)o(viously)-6
+b(,)29 b(in)d(a)f(code)i(with)f(minimum)f(distance)j(greater)g(than)e
+(or)g(equal)h(to)75 1250 y Ft(d)p FK(.)216 1363 y(Another)46
+b(syntax)h(which)f(one)f(can)h(use)f(is)g Ft(LexiCode\()50
+b(B,)d(d,)g(F)g(\))p FK(.)d(When)i(called)g(in)f(this)h(format,)75
+1476 y Ft(LexiCode)28 b FK(uses)f(the)g(basis)g Ft(B)e
+FK(instead)j(of)e(the)h(standard)h(basis.)38 b Ft(B)25
+b FK(is)h(a)g(matrix)h(of)f(v)o(ectors)h(o)o(v)o(er)g
+Ft(F)p FK(.)36 b(The)25 b(code)i(is)75 1589 y(constructed)h(using)d
+(the)g(greedy)h(algorithm)g(on)f(the)g(list)g(of)f(v)o(ectors)i
+(spanned)g(by)f Ft(B)p FK(,)f(ordered)i(le)o(xicographically)75
+1702 y(with)d(respect)j(to)d Ft(B)p FK(.)216 1815 y(Note)h(that)g
+(binary)h(le)o(xicodes)g(are)f(al)o(w)o(ays)g(linear)-5
+b(.)p 75 1937 1648 4 v 1764 1942 a FF(Example)p 2102
+1937 V 75 1962 4 25 v 3747 1962 V 75 2062 4 100 v 188
+2032 a(gap>)44 b(C)e(:=)h(LexiCode\()j(4,)d(3,)g(GF\(5\))h(\);)p
+3747 2062 V 75 2162 V 188 2132 a(a)f(\(4,17,3..4\)2..4)k(lexicode)e
+(over)f(GF\(5\))p 3747 2162 V 75 2261 V 188 2231 a(gap>)g(B)e(:=)h([)g
+([Z\(2\)\2100,)i(0*Z\(2\),)g(0*Z\(2\)],)g([Z\(2\)\2100,)g(Z\(2\)\2100,)
+g(0*Z\(2\)])f(];;)p 3747 2261 V 75 2361 V 188 2331 a(gap>)g(C)e(:=)h
+(LexiCode\()j(B,)d(2,)g(GF\(2\))h(\);)p 3747 2361 V 75
+2460 V 188 2431 a(a)f(linear)h([3,1,2]1..2)i(lexicode)f(over)f(GF\(2\))
+p 3747 2460 V 75 2485 4 25 v 3747 2485 V 75 2488 3675
+4 v 75 2701 a FK(The)27 b(function)i Ft(GreedyCode)h
+FK(creates)f(a)e(greedy)h(code)g(that)g(is)f(not)h(restricted)h(to)e(a)
+g(le)o(xicographical)k(order)e(\(see)75 2814 y Ft(GreedyCode)d
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 591 2815 a
+SDict begin H.S end
+ 591
+2815 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.7)p
+0.0236 0.0894 0.6179 TeXcolorrgb 772 2752 a
+SDict begin H.R end
+ 772 2752
+a 772 2814 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.7) cvn H.B /ANN pdfmark end
+ 772 2814 a Black FK(\)\).)75 2973 y
+SDict begin H.S end
+ 75 2973
+a 75 2973 a
+SDict begin 13.6 H.A end
+ 75 2973 a 75 2973 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.2) cvn H.B /DEST pdfmark end
+ 75 2973 a 134 x FM(5.2)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31 b(Linear)f(Codes)p
+Black 75 3314 a FK(In)24 b(this)h(section)h(we)e(describe)i(functions)h
+(for)e(constructing)j(linear)d(codes.)33 b(A)23 b(linear)j(code)f(al)o
+(w)o(ays)g(has)g(a)f(gener)n(-)75 3427 y(ator)g(or)g(check)g(matrix.)
+216 3540 y(The)38 b(\002rst)g(tw)o(o)h(functions)i(generate)f(linear)g
+(codes)g(from)e(the)h(generator)i(matrix)e(\()p Ft(GeneratorMatCode)75
+3652 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3653
+a
+SDict begin H.S end
+ 105 3653 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 3590 a
+SDict begin H.R end
+ 286 3590
+a 286 3652 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.1) cvn H.B /ANN pdfmark end
+ 286 3652 a Black FK(\)\))e(or)e(check)i(matrix)g(\()p
+Ft(CheckMatCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1665 3653 a
+SDict begin H.S end
+ 1665 3653 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1846
+3590 a
+SDict begin H.R end
+ 1846 3590 a 1846 3652 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.3) cvn H.B /ANN pdfmark end
+ 1846 3652 a Black FK(\)\).)66
+b(All)35 b(linear)i(codes)g(can)g(be)e(constructed)40
+b(with)35 b(these)75 3765 y(functions.)216 3878 y(The)56
+b(ne)o(xt)h(functions)j(we)55 b(describe)k(generate)g(some)e(well-kno)n
+(wn)g(codes,)66 b(lik)o(e)58 b(Hamming)e(codes)75 3991
+y(\()p Ft(HammingCode)26 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 667 3992 a
+SDict begin H.S end
+ 667 3992 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.2.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+848 3929 a
+SDict begin H.R end
+ 848 3929 a 848 3991 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.4) cvn H.B /ANN pdfmark end
+ 848 3991 a Black FK(\)\),)d
+(Reed-Muller)i(codes)e(\()p Ft(ReedMullerCode)k FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2400 3992 a
+SDict begin H.S end
+ 2400 3992
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2581 3929 a
+SDict begin H.R end
+ 2581 3929 a 2581 3991 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.5) cvn H.B /ANN pdfmark end
+ 2581
+3991 a Black FK(\)\))d(and)f(the)g(e)o(xtended)h(Golay)f(codes)75
+4104 y(\()p Ft(ExtendedBinaryGola)q(yC)q(ode)29 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1224 4105 a
+SDict begin H.S end
+ 1224 4105
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1405 4042 a
+SDict begin H.R end
+ 1405 4042 a 1405 4104 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.2) cvn H.B /ANN pdfmark end
+ 1405
+4104 a Black FK(\))24 b(and)g Ft(ExtendedTernaryGo)q(lay)q(Cod)q(e)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2779 4105
+a
+SDict begin H.S end
+ 2779 4105 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2960 4042 a
+SDict begin H.R end
+ 2960 4042
+a 2960 4104 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.4) cvn H.B /ANN pdfmark end
+ 2960 4104 a Black FK(\)\).)216 4217 y(A)h(lar)n(ge)i(and)
+f(po)n(werful)h(f)o(amily)f(of)g(codes)g(are)g(alternant)i(codes.)52
+b(The)o(y)30 b(are)h(obtained)i(by)e(a)f(small)h(modi-)75
+4330 y(\002cation)e(of)f(the)g(parity)i(check)f(matrix)g(of)f(a)f(BCH)f
+(code)j(\(see)g Ft(AlternantCode)j FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2777 4331 a
+SDict begin H.S end
+ 2777 4331 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.2.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2958 4268 a
+SDict begin H.R end
+ 2958 4268 a 2958 4330 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.6) cvn H.B /ANN pdfmark end
+ 2958 4330 a Black
+FK(\),)d Ft(GoppaCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3515 4331 a
+SDict begin H.S end
+ 3515 4331 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.2.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3696 4268 a
+SDict begin H.R end
+ 3696 4268 a 3696 4330 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.7) cvn H.B /ANN pdfmark end
+ 3696 4330 a Black
+FK(\),)75 4443 y Ft(GeneralizedSrivast)q(ava)q(Cod)q(e)e
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1287 4444 a
+SDict begin H.S end
+
+1287 4444 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1468 4381 a
+SDict begin H.R end
+ 1468 4381
+a 1468 4443 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.8) cvn H.B /ANN pdfmark end
+ 1468 4443 a Black FK(\))24 b(and)g Ft(SrivastavaCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2378 4445 a
+SDict begin H.S end
+
+2378 4445 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(5.2.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2559 4381 a
+SDict begin H.R end
+ 2559 4381
+a 2559 4443 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.9) cvn H.B /ANN pdfmark end
+ 2559 4443 a Black FK(\)\).)216 4556 y(Finally)-6
+b(,)45 b(we)40 b(describe)i(a)e(function)i(for)e(generating)k(random)d
+(linear)g(codes)g(\(see)g Ft(RandomLinearCode)75 4669
+y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4670 a
+SDict begin H.S end
+
+105 4670 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 331 4607 a
+SDict begin H.R end
+ 331 4607
+a 331 4669 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.12) cvn H.B /ANN pdfmark end
+ 331 4669 a Black FK(\)\).)75 4818 y
+SDict begin H.S end
+ 75 4818
+a 75 4818 a
+SDict begin 13.6 H.A end
+ 75 4818 a 75 4818 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.1) cvn H.B /DEST pdfmark end
+ 75 4818 a 100 x FJ(5.2.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorMatCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5092 a Fs(\006)22 b Ft(GeneratorMatCode\()53
+b(G[,)47 b(name,])i(F)e(\))1842 b Fr(\(function\))p Black
+216 5318 a Ft(GeneratorMatCode)30 b FK(returns)d(a)e(linear)i(code)f
+(with)f(generator)j(matrix)e Ft(G)p FK(.)33 b Ft(G)25
+b FK(must)h(be)f(a)g(matrix)h(o)o(v)o(er)f(\002nite)75
+5431 y(\002eld)31 b Ft(F)q FK(.)52 b Ft(name)32 b FK(can)g(contain)h(a)
+e(short)h(description)j(of)d(the)f(code.)54 b(The)31
+b(generator)j(matrix)e(is)f(the)h(basis)g(of)g(the)p
+Black Black eop end end
+%%Page: 65 65
+TeXDict begin HPSdict begin 65 64 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.65) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(65)p Black 75 399 a(elements)32 b(of)e(the)h(code.)50
+b(The)30 b(resulting)j(code)e(has)g(w)o(ord)g(length)h
+Fq(n)p FK(,)f(dimension)i Fq(k)e FK(if)f Ft(G)g FK(is)h(a)f
+Fq(k)17 b Fv(\002)e Fq(n)p FK(-matrix.)50 b(If)75 511
+y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(is)f(the)h(\002eld)f(of)h(the)
+f(code,)h(the)g(size)g(of)g(the)g(code)g(will)f(be)h
+Fq(q)2236 478 y Fm(k)2271 511 y FK(.)216 624 y(If)33
+b(the)h(generator)i(matrix)f(does)f(not)g(ha)n(v)o(e)g(full)g(ro)n(w)f
+(rank,)k(the)d(linearly)h(dependent)i(ro)n(ws)c(are)h(remo)o(v)o(ed.)75
+737 y(This)24 b(is)g(done)g(by)h(the)f Fy(GAP)e FK(function)k
+Ft(BaseMat)g FK(and)e(results)i(in)d(an)h(equal)i(code.)k(The)24
+b(generator)i(matrix)f(can)f(be)75 850 y(retrie)n(v)o(ed)h(with)f(the)f
+(function)j Ft(GeneratorMat)h FK(\(see)d Ft(GeneratorMat)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2418 851 a
+SDict begin H.S end
+ 2418
+851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2599 788 a
+SDict begin H.R end
+ 2599 788
+a 2599 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.1) cvn H.B /ANN pdfmark end
+ 2599 850 a Black FK(\)\).)p 75 969 1648
+4 v 1764 974 a FF(Example)p 2102 969 V 75 994 4 25 v
+3747 994 V 75 1094 4 100 v 188 1064 a(gap>)44 b(G)e(:=)h(Z\(3\)\2100)i
+(*)d([[1,0,1,2,0],[0,1,)q(2,1)q(,1])q(,[0)q(,0,)q(1,2)q(,1])q(];;)p
+3747 1094 V 75 1193 V 188 1163 a(gap>)i(C1)f(:=)g(GeneratorMatCode\()48
+b(G,)43 b(GF\(3\))h(\);)p 3747 1193 V 75 1293 V 188 1263
+a(a)f(linear)h([5,3,1..2]1..2)j(code)d(defined)h(by)e(generator)i
+(matrix)f(over)g(GF\(3\))p 3747 1293 V 75 1393 V 188
+1363 a(gap>)g(C2)f(:=)g(GeneratorMatCode\()48 b(IdentityMat\()e(5,)d
+(GF\(2\))h(\),)f(GF\(2\))h(\);)p 3747 1393 V 75 1492
+V 188 1462 a(a)f(linear)h([5,5,1]0)h(code)f(defined)g(by)g(generator)h
+(matrix)f(over)g(GF\(2\))p 3747 1492 V 75 1592 V 188
+1562 a(gap>)g(GeneratorMatCode\()k(List\()c(AsSSortedList\()j
+(NordstromRobinsonCod)q(e\(\))i(\),)p 3747 1592 V 75
+1692 V 188 1662 a(>)43 b(x)f(->)h(VectorCodeword\()48
+b(x)42 b(\))h(\),)g(GF\()h(2)e(\))h(\);)p 3747 1692 V
+75 1791 V 188 1761 a(a)g(linear)h([16,11,1..4]2)j(code)c(defined)i(by)e
+(generator)j(matrix)e(over)g(GF\(2\))p 3747 1791 V 75
+1891 V 188 1861 a(#)f(This)g(is)g(the)h(smallest)h(linear)f(code)g
+(that)g(contains)h(the)e(N-R)g(code)p 3747 1891 V 75
+1916 4 25 v 3747 1916 V 75 1919 3675 4 v 75 2052 a
+SDict begin H.S end
+ 75
+2052 a 75 2052 a
+SDict begin 13.6 H.A end
+ 75 2052 a 75 2052 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.2) cvn H.B /DEST pdfmark end
+ 75 2052 a 116 x
+FJ(5.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckMatCodeMutable)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2342 a Fs(\006)22 b
+Ft(CheckMatCodeMutab)q(le\()53 b(H[,)47 b(name,])i(F)e(\))1703
+b Fr(\(function\))p Black 216 2568 a Ft(CheckMatCodeMutabl)q(e)27
+b FK(is)22 b(the)h(same)f(as)g Ft(CheckMatCode)j FK(e)o(xcept)e(that)g
+(the)f(check)i(matrix)e(and)h(generator)75 2681 y(matrix)h(are)g
+(mutable.)75 2815 y
+SDict begin H.S end
+ 75 2815 a 75 2815 a
+SDict begin 13.6 H.A end
+ 75 2815 a 75
+2815 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.3) cvn H.B /DEST pdfmark end
+ 75 2815 a 115 x FJ(5.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(CheckMatCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+3105 a Fs(\006)e Ft(CheckMatCode\()51 b(H[,)d(name,])g(F)f(\))2028
+b Fr(\(function\))p Black 216 3330 a Ft(CheckMatCode)33
+b FK(returns)f(a)d(linear)i(code)g(with)e(check)i(matrix)g
+Ft(H)p FK(.)47 b Ft(H)29 b FK(must)h(be)g(a)f(matrix)h(o)o(v)o(er)g
+(Galois)g(\002eld)75 3443 y Ft(F)p FK(.)41 b Ft([name.)29
+b FK(can)g(contain)g(a)f(short)g(description)j(of)d(the)g(code.)43
+b(The)27 b(parity)i(check)g(matrix)g(is)e(the)h(transposed)j(of)75
+3556 y(the)24 b(nullmatrix)i(of)e(the)h(generator)h(matrix)f(of)f(the)g
+(code.)31 b(Therefore,)26 b Fq(c)13 b Fv(\001)g Fq(H)2498
+3523 y Fm(T)2567 3556 y Fo(=)20 b FK(0)k(where)g Fq(c)g
+FK(is)g(an)g(element)h(of)f(the)75 3669 y(code.)30 b(If)23
+b Ft(H)g FK(is)g(a)g Fq(r)15 b Fv(\002)e Fq(n)p FK(-matrix,)24
+b(the)g(code)g(has)g(w)o(ord)g(length)h Fq(n)p FK(,)e(redundanc)o(y)j
+Fq(r)f FK(and)f(dimension)i Fq(n)13 b Fv(\000)g Fq(r)r
+FK(.)216 3782 y(If)24 b(the)g(check)i(matrix)f(does)f(not)h(ha)n(v)o(e)
+g(full)f(ro)n(w)g(rank,)h(the)f(linearly)i(dependent)h(ro)n(ws)d(are)g
+(remo)o(v)o(ed.)31 b(This)24 b(is)75 3895 y(done)i(by)g(the)f
+Fy(GAP)f FK(function)j Ft(BaseMat)p FK(.)36 b(and)26
+b(results)g(in)g(an)f(equal)h(code.)35 b(The)25 b(check)i(matrix)f(can)
+f(be)h(retrie)n(v)o(ed)75 4008 y(with)d(the)h(function)i
+Ft(CheckMat)g FK(\(see)e Ft(CheckMat)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1705 4009 a
+SDict begin H.S end
+ 1705 4009 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1886 3946 a
+SDict begin H.R end
+ 1886 3946 a 1886 4008 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.2) cvn H.B /ANN pdfmark end
+ 1886 4008 a Black
+FK(\)\).)p 75 4127 1648 4 v 1764 4132 a FF(Example)p
+2102 4127 V 75 4152 4 25 v 3747 4152 V 75 4252 4 100
+v 188 4222 a(gap>)44 b(G)e(:=)h(Z\(3\)\2100)i(*)d([[1,0,1,2,0],[0,1,)q
+(2,1)q(,1])q(,[0)q(,0,)q(1,2)q(,1])q(];;)p 3747 4252
+V 75 4351 V 188 4321 a(gap>)i(C1)f(:=)g(CheckMatCode\()j(G,)d(GF\(3\))i
+(\);)p 3747 4351 V 75 4451 V 188 4421 a(a)e(linear)h([5,2,1..2]2..3)j
+(code)d(defined)h(by)e(check)h(matrix)g(over)g(GF\(3\))p
+3747 4451 V 75 4550 V 188 4521 a(gap>)g(CheckMat\(C1\);)p
+3747 4550 V 75 4650 V 188 4620 a([)f([)f(Z\(3\)\2100,)j(0*Z\(3\),)g
+(Z\(3\)\2100,)f(Z\(3\),)h(0*Z\(3\))f(],)p 3747 4650 V
+75 4750 V 273 4720 a([)e(0*Z\(3\),)j(Z\(3\)\2100,)g(Z\(3\),)f
+(Z\(3\)\2100,)h(Z\(3\)\2100)f(],)p 3747 4750 V 75 4849
+V 273 4819 a([)e(0*Z\(3\),)j(0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\),)h
+(Z\(3\)\2100)f(])f(])p 3747 4849 V 75 4949 V 188 4919
+a(gap>)h(C2)f(:=)g(CheckMatCode\()j(IdentityMat\()h(5,)c(GF\(2\))h(\),)
+f(GF\(2\))h(\);)p 3747 4949 V 75 5049 V 188 5019 a(a)f(cyclic)h
+([5,0,5]5)h(code)f(defined)g(by)g(check)g(matrix)g(over)g(GF\(2\))p
+3747 5049 V 75 5073 4 25 v 3747 5073 V 75 5076 3675 4
+v Black Black eop end end
+%%Page: 66 66
+TeXDict begin HPSdict begin 66 65 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.66) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(66)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.4) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.2.4)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(HammingCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(HammingCode\()51 b(r,)c(F)g(\))2445
+b Fr(\(function\))p Black 216 799 a Ft(HammingCode)29
+b FK(returns)f(a)d(Hamming)h(code)h(with)f(redundanc)o(y)j
+Ft(r)c FK(o)o(v)o(er)h Ft(F)q FK(.)35 b(A)25 b(Hamming)g(code)i(is)f(a)
+g(single-)75 912 y(error)n(-correcting)g(code.)j(The)21
+b(parity)i(check)g(matrix)f(of)f(a)g(Hamming)g(code)i(has)e(all)h
+(nonzero)h(v)o(ectors)g(of)f(length)h Ft(r)75 1024 y
+FK(in)i(its)g(columns,)h(e)o(xcept)g(for)f(a)g(multiplication)j(f)o
+(actor)-5 b(.)34 b(The)24 b(decoding)k(algorithm)e(of)f(the)g(Hamming)g
+(code)h(\(see)75 1137 y Ft(Decode)f FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 406 1138 a
+SDict begin H.S end
+ 406 1138 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+632 1075 a
+SDict begin H.R end
+ 632 1075 a 632 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end
+ 632 1137 a Black FK(\)\))g(mak)o(es)f
+(use)g(of)f(this)h(property)-6 b(.)216 1250 y(If)21 b
+Fq(q)g FK(is)g(the)h(size)g(of)f(its)h(\002eld)f Ft(F)p
+FK(,)g(the)g(returned)j(Hamming)d(code)h(is)f(a)g(linear)i
+Fo([\()p Fq(q)2719 1217 y Fm(r)2762 1250 y Fv(\000)11
+b FK(1)p Fo(\))p Fp(=)p Fo(\()p Fq(q)g Fv(\000)g FK(1)p
+Fo(\))p Fp(;)f Fo(\()p Fq(q)3337 1217 y Fm(r)3381 1250
+y Fv(\000)h FK(1)p Fo(\))p Fp(=)p Fo(\()p Fq(q)g Fv(\000)75
+1363 y FK(1)p Fo(\))i Fv(\000)g Fq(r)-8 b Fp(;)10 b FK(3)p
+Fo(])24 b FK(code.)p 75 1489 1648 4 v 1764 1494 a FF(Example)p
+2102 1489 V 75 1514 4 25 v 3747 1514 V 75 1613 4 100
+v 188 1583 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4,)d(GF\(2\))h(\);)p
+3747 1613 V 75 1713 V 188 1683 a(a)f(linear)h([15,11,3]1)i(Hamming)e
+(\(4,2\))h(code)e(over)h(GF\(2\))p 3747 1713 V 75 1813
+V 188 1783 a(gap>)g(C2)f(:=)g(HammingCode\()j(3,)d(GF\(9\))h(\);)p
+3747 1813 V 75 1912 V 188 1882 a(a)f(linear)h([91,88,3]1)i(Hamming)e
+(\(3,9\))h(code)e(over)h(GF\(9\))p 3747 1912 V 75 1937
+4 25 v 3747 1937 V 75 1940 3675 4 v 75 2173 a
+SDict begin H.S end
+ 75 2173
+a 75 2173 a
+SDict begin 13.6 H.A end
+ 75 2173 a 75 2173 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.5) cvn H.B /DEST pdfmark end
+ 75 2173 a 116 x FJ(5.2.5)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(ReedMullerCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2464 a Fs(\006)22 b Ft(ReedMullerCode\()52
+b(r,)47 b(k)g(\))2306 b Fr(\(function\))p Black 216 2689
+a Ft(ReedMullerCode)35 b FK(returns)e(a)d(binary)i('Reed-Muller)h
+(code')f Ft(R\(r,)48 b(k\))30 b FK(with)h(dimension)i
+Ft(k)d FK(and)h(order)h Ft(r)p FK(.)75 2802 y(This)26
+b(is)h(a)f(code)i(with)e(length)i(2)1098 2769 y Fm(k)1159
+2802 y FK(and)f(minimum)g(distance)i(2)2065 2769 y Fm(k)q
+Fh(\000)p Fm(r)2205 2802 y FK(\(see)e(for)g(e)o(xample,)h(section)g
+(1.10)f(in)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3459
+2803 a
+SDict begin H.S end
+ 3459 2803 a 0.0236 0.6179 0.0894 TeXcolorrgb -1
+x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3666 2740
+a
+SDict begin H.R end
+ 3666 2740 a 3666 2802 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 3666 2802 a Black 1 w FK(]\).)75
+2915 y(By)e(de\002nition,)j(the)e Fq(r)771 2882 y Fm(t)5
+b(h)856 2915 y FK(order)25 b(binary)i(Reed-Muller)f(code)g(of)e(length)
+i Fq(n)c Fo(=)e FK(2)2565 2882 y Fm(m)2618 2915 y FK(,)k(for)h(0)c
+Fv(\024)g Fq(r)i Fv(\024)d Fq(m)p FK(,)k(is)g(the)i(set)e(of)h(all)75
+3028 y(v)o(ectors)39 b Fq(f)13 b FK(,)23 b(where)37 b
+Fq(f)f FK(is)24 b(a)f(Boolean)h(function)i(which)e(is)f(a)h(polynomial)
+h(of)f(de)o(gree)h(at)e(most)g Fq(r)r FK(.)p 75 3151
+1648 4 v 1764 3156 a FF(Example)p 2102 3151 V 75 3176
+4 25 v 3747 3176 V 75 3275 4 100 v 188 3245 a(gap>)44
+b(ReedMullerCode\()j(1,)c(3)g(\);)p 3747 3275 V 75 3375
+V 188 3345 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g
+(over)g(GF\(2\))p 3747 3375 V 75 3400 4 25 v 3747 3400
+V 75 3403 3675 4 v 75 3616 a FK(See)23 b Ft(GeneralizedReedMul)q(ler)29
+b FK(\()p Fz(??)r FK(\))23 b(for)g(a)g(more)h(general)h(construction.)
+75 3768 y
+SDict begin H.S end
+ 75 3768 a 75 3768 a
+SDict begin 13.6 H.A end
+ 75 3768 a 75 3768 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.6) cvn H.B /DEST pdfmark end
+ 75
+3768 a 97 x FJ(5.2.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Alter)o(nantCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4039 a Fs(\006)d Ft(AlternantCode\()52
+b(r,)47 b(Y[,)g(alpha,])i(F)e(\))1796 b Fr(\(function\))p
+Black 216 4265 a Ft(AlternantCode)25 b FK(returns)f(an)d('alternant)j
+(code',)f(with)e(parameters)i Ft(r)q FK(,)d Ft(Y)h FK(and)h
+Ft(alpha)h FK(\(optional\).)30 b Ft(F)21 b FK(denotes)75
+4378 y(the)30 b(\(\002nite\))h(base)g(\002eld.)49 b(Here,)31
+b Ft(r)f FK(is)g(the)h(design)g(redundanc)o(y)j(of)c(the)g(code.)50
+b Ft(Y)29 b FK(and)i Ft(alpha)g FK(are)g(both)g(v)o(ectors)75
+4491 y(of)d(length)i Ft(n)e FK(from)h(which)g(the)g(parity)g(check)h
+(matrix)f(is)g(constructed.)46 b(The)29 b(check)g(matrix)g(has)g(the)g
+(form)f Fq(H)h Fo(=)75 4604 y(\([)p Fq(a)190 4558 y Fm(j)180
+4629 y(i)215 4604 y Fq(y)255 4618 y Fm(i)278 4604 y Fo(]\))p
+FK(,)37 b(where)e(0)27 b Fv(\024)40 b Fq(j)28 b Fv(\024)e
+Fq(r)19 b Fv(\000)e FK(1,)36 b(1)27 b Fv(\024)f Fq(i)h
+Fv(\024)f Fq(n)p FK(,)36 b(and)g(where)e Fo([)p Fp(:::)p
+Fo(])h FK(is)g(as)f(in)h Ft(VerticalConversionFi)q(el)q(dMa)q(t)75
+4717 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4719
+a
+SDict begin H.S end
+ 105 4719 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 4655 a
+SDict begin H.R end
+ 286 4655
+a 286 4717 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end
+ 286 4717 a Black FK(\)\).)40 b(If)27 b(no)g
+Ft(alpha)h FK(is)f(speci\002ed,)i(the)e(v)o(ector)h Fo([)p
+FK(1)p Fp(;)10 b Fq(a)p Fp(;)g Fq(a)1950 4684 y Fr(2)1990
+4717 y Fp(;)g(::;)g Fq(a)2155 4684 y Fm(n)p Fh(\000)p
+Fr(1)2278 4717 y Fo(])27 b FK(is)f(used,)j(where)e Fq(a)g
+FK(is)g(a)f(primiti)n(v)o(e)i(element)75 4829 y(of)23
+b(a)h(Galois)g(\002eld)f Ft(F)p FK(.)p 75 4934 1648 4
+v 1764 4939 a FF(Example)p 2102 4934 V 75 4959 4 25 v
+3747 4959 V 75 5058 4 100 v 188 5028 a(gap>)44 b(Y)e(:=)h([)g(1,)g(1,)g
+(1,)g(1,)g(1,)g(1,)g(1];;)h(a)f(:=)g(PrimitiveUnityRoot\()48
+b(2,)43 b(7)g(\);;)p 3747 5058 V 75 5158 V 188 5128 a(gap>)h(alpha)g
+(:=)f(List\()h([0..6],)g(i)f(->)g(a\210i)h(\);;)p 3747
+5158 V 75 5257 V 188 5228 a(gap>)g(C)e(:=)h(AlternantCode\()k(2,)c(Y,)g
+(alpha,)i(GF\(8\))f(\);)p 3747 5257 V 75 5357 V 188 5327
+a(a)f(linear)h([7,3,3..4]3..4)j(alternant)f(code)d(over)h(GF\(8\))p
+3747 5357 V 75 5382 4 25 v 3747 5382 V 75 5385 3675 4
+v Black Black eop end end
+%%Page: 67 67
+TeXDict begin HPSdict begin 67 66 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.67) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(67)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.7) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.2.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(GoppaCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(GoppaCode\()50 b(G,)d(L)g(\))2538 b
+Fr(\(function\))p Black 216 799 a Ft(GoppaCode)21 b FK(returns)f(a)e
+(Goppa)h(code)g Ft(C)e FK(from)i(Goppa)g(polynomial)h
+Ft(g)q FK(,)e(ha)n(ving)i(coef)n(\002cients)g(in)e(a)g(Galois)h(Field)
+75 912 y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)43 b Ft(L)28
+b FK(must)g(be)g(a)g(list)g(of)h(elements)g(in)f Fq(GF)7
+b Fo(\()p Fq(q)p Fo(\))p FK(,)29 b(that)g(are)g(not)f(roots)h(of)g
+Ft(g)p FK(.)42 b(The)28 b(w)o(ord)g(length)i(of)e(the)g(code)75
+1024 y(is)f(equal)h(to)f(the)h(length)g(of)f Ft(L)q FK(.)38
+b(The)27 b(parity)h(check)h(matrix)e(has)h(the)f(form)g
+Fq(H)i Fo(=)21 b(\([)p Fq(a)2781 979 y Fm(j)2771 1050
+y(i)2807 1024 y Fp(=)p Fq(G)p Fo(\()p Fq(a)2998 1038
+y Fm(i)3021 1024 y Fo(\)]\))3116 1042 y Fr(0)p Fh(\024)10
+b Fm(j)r Fh(\024)p Fm(d)s(e)m(g)p Fk(\()p Fm(g)p Fk(\))p
+Fh(\000)p Fr(1)p Fl(;)25 b Fm(a)3624 1052 y Ff(i)3642
+1042 y Fh(2)p Fm(L)3727 1024 y FK(,)75 1137 y(where)32
+b Fq(a)373 1151 y Fm(i)421 1137 y Fv(2)24 b Fq(L)31 b
+FK(and)h Fo([)p Fp(:::)p Fo(])g FK(is)f(as)h(in)g Ft
+(VerticalConversionFi)q(el)q(dMa)q(t)37 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2473 1139 a
+SDict begin H.S end
+ 2473 1139 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2654 1075 a
+SDict begin H.R end
+ 2654 1075 a 2654 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end
+ 2654 1137 a Black
+FK(\),)d(so)e Fq(H)37 b FK(has)32 b(entries)h(in)e Fq(GF)7
+b Fo(\()p Fq(q)p Fo(\))p FK(,)75 1250 y Fq(q)21 b Fo(=)27
+b Fq(p)284 1217 y Fm(m)337 1250 y FK(.)i(It)24 b(is)g(kno)n(wn)h(that)f
+Fq(d)5 b Fo(\()-5 b Fq(C)r Fo(\))22 b Fv(\025)e Fq(d)5
+b(e)l(g)p Fo(\()p Fq(g)p Fo(\))13 b(+)g FK(1,)25 b(with)f(a)g(better)h
+(bound)h(in)e(the)g(binary)i(case)f(pro)o(vided)h Fq(g)e
+FK(has)g(no)75 1363 y(multiple)j(roots.)36 b(See)25 b(Huf)n(fman)h(and)
+g(Pless)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1547 1364
+a
+SDict begin H.S end
+ 1547 1364 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1754 1301 a
+SDict begin H.R end
+ 1754 1301
+a 1754 1363 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 1754 1363 a Black FK(])f(section)i(13.2.2,)g(and)f(MacW)l
+(illiams)h(and)f(Sloane)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3497 1364 a
+SDict begin H.S end
+ 3497 1364 a 0.0236 0.6179 0.0894 TeXcolorrgb
+-1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 3719
+1301 a
+SDict begin H.R end
+ 3719 1301 a 3719 1363 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end
+ 3719 1363 a Black 1 w
+FK(])75 1476 y(section)f(12.3,)f(for)g(more)f(details.)216
+1589 y(One)h(can)h(also)g(call)g Ft(GoppaCode)i FK(using)f(the)f
+(syntax)h Ft(GoppaCode\(g,n\))p FK(.)36 b(When)25 b(called)g(with)g
+(parameter)h Ft(n)p FK(,)75 1702 y Fy(GU)m(A)-6 b(V)f(A)22
+b FK(constructs)k(a)d(list)h Fq(L)f FK(of)g(length)i
+Ft(n)p FK(,)e(such)h(that)g(no)g(element)g(of)g Ft(L)f
+FK(is)g(a)g(root)i(of)e Ft(g)p FK(.)216 1815 y(This)g(is)h(a)f(special)
+i(case)f(of)g(an)f(alternant)j(code.)p 75 1896 1648 4
+v 1764 1901 a FF(Example)p 2102 1896 V 75 1920 4 25 v
+3747 1920 V 75 2020 4 100 v 188 1990 a(gap>)44 b
+(x:=Indeterminate\(GF\(8)q(\),")q(x"\))q(;)p 3747 2020
+V 75 2120 V 188 2090 a(x)p 3747 2120 V 75 2219 V 188
+2189 a(gap>)g(L:=Elements\(GF\(8\)\);)p 3747 2219 V 75
+2319 V 188 2289 a([)f(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\2103\),)g
+(Z\(2\2103\)\2102,)g(Z\(2\2103\)\2103,)h(Z\(2\2103\)\2104,)f
+(Z\(2\2103\)\2105,)g(Z\(2\2103\)\2106)g(])p 3747 2319
+V 75 2419 V 188 2389 a(gap>)f(g:=x\2102+x+1;)p 3747 2419
+V 75 2518 V 188 2488 a(x\2102+x+Z\(2\)\2100)p 3747 2518
+V 75 2618 V 188 2588 a(gap>)g(C:=GoppaCode\(g,L\);)p
+3747 2618 V 75 2717 V 188 2688 a(a)f(linear)h([8,2,5]3)h(Goppa)f(code)g
+(over)g(GF\(2\))p 3747 2717 V 75 2817 V 188 2787 a(gap>)g(xx)f(:=)g
+(Indeterminate\()k(GF\(2\),)d("xx")g(\);;)p 3747 2817
+V 75 2917 V 188 2887 a(gap>)g(gg)f(:=)g(xx\2102)g(+)g(xx)g(+)g(1;;)g(L)
+g(:=)g(AsSSortedList\()k(GF\(8\))d(\);;)p 3747 2917 V
+75 3016 V 188 2986 a(gap>)g(C1)f(:=)g(GoppaCode\()i(gg,)f(L)e(\);)p
+3747 3016 V 75 3116 V 188 3086 a(a)h(linear)h([8,2,5]3)h(Goppa)f(code)g
+(over)g(GF\(2\))p 3747 3116 V 75 3216 V 188 3186 a(gap>)g(y)e(:=)h
+(Indeterminate\()k(GF\(2\),)e("y")e(\);;)p 3747 3216
+V 75 3315 V 188 3285 a(gap>)h(h)e(:=)h(y\2102)h(+)e(y)h(+)g(1;;)p
+3747 3315 V 75 3415 V 188 3385 a(gap>)h(C2)f(:=)g(GoppaCode\()i(h,)e(8)
+g(\);)p 3747 3415 V 75 3514 V 188 3485 a(a)g(linear)h([8,2,5]3)h(Goppa)
+f(code)g(over)g(GF\(2\))p 3747 3514 V 75 3614 V 188 3584
+a(gap>)g(C1=C2;)p 3747 3614 V 75 3714 V 188 3684 a(true)p
+3747 3714 V 75 3813 V 188 3783 a(gap>)g(C=C1;)p 3747
+3813 V 75 3913 V 188 3883 a(true)p 3747 3913 V 75 3938
+4 25 v 3747 3938 V 75 3941 3675 4 v 75 4125 a
+SDict begin H.S end
+ 75 4125
+a 75 4125 a
+SDict begin 13.6 H.A end
+ 75 4125 a 75 4125 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.8) cvn H.B /DEST pdfmark end
+ 75 4125 a 116 x FJ(5.2.8)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedSri)o(v)o(asta)n(v)o(aCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4415 a Fs(\006)22 b
+Ft(GeneralizedSrivas)q(tav)q(aCo)q(de\()53 b(a,)47 b(w,)g(z[,)h(t,])f
+(F)g(\))1286 b Fr(\(function\))p Black 216 4641 a Ft
+(GeneralizedSrivast)q(ava)q(Cod)q(e)41 b FK(returns)c(a)e(generalized)k
+(Sri)n(v)n(asta)n(v)n(a)e(code)f(with)g(parameters)h
+Ft(a)q FK(,)g Ft(w)p FK(,)h Ft(z)p FK(,)75 4754 y Ft(t)p
+FK(.)56 b Fq(a)26 b Fo(=)f Fv(f)p Fq(a)457 4768 y Fr(1)495
+4754 y Fp(;)10 b(:::;)g Fq(a)685 4768 y Fm(n)724 4754
+y Fv(g)32 b FK(and)i Fq(w)25 b Fo(=)g Fv(f)p Fq(w)1253
+4768 y Fr(1)1290 4754 y Fp(;)10 b(:::;)g Fq(w)1496 4768
+y Fm(s)1527 4754 y Fv(g)32 b FK(are)h(lists)h(of)e Fq(n)17
+b Fo(+)e Fq(s)33 b FK(distinct)h(elements)h(of)d Fq(F)h
+Fo(=)25 b Fq(GF)7 b Fo(\()p Fq(q)3405 4721 y Fm(m)3457
+4754 y Fo(\))p FK(,)35 b Fq(z)d FK(is)h(a)75 4867 y(list)28
+b(of)g(length)h Fq(n)f FK(of)g(nonzero)i(elements)f(of)f
+Fq(GF)7 b Fo(\()p Fq(q)1728 4834 y Fm(m)1781 4867 y Fo(\))p
+FK(.)41 b(The)27 b(parameter)j Ft(t)d FK(determines)j(the)f(designed)h
+(distance:)75 4980 y Fq(d)25 b Fv(\025)20 b Fq(s)n(t)f
+Fo(+)13 b FK(1.)28 b(The)23 b(check)i(matrix)f(of)f(this)h(code)h(is)e
+(the)h(form)1556 5151 y Fq(H)i Fo(=)20 b(\([)1962 5089
+y Fq(z)1997 5103 y Fm(i)p 1809 5130 365 4 v 1809 5213
+a Fo(\()p Fq(a)1889 5227 y Fm(i)1925 5213 y Fv(\000)13
+b Fq(w)2080 5227 y Fm(j)2103 5213 y Fo(\))2138 5187 y
+Fm(k)2183 5151 y Fo(]\))p Fp(;)75 5367 y FK(1)21 b Fv(\024)g
+Fq(k)i Fv(\024)c Fq(t)6 b FK(,)24 b(where)h Fo([)p Fp(:::)p
+Fo(])g FK(is)g(as)g(in)g Ft(VerticalConversionF)q(iel)q(dMa)q(t)30
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2399 5369
+a
+SDict begin H.S end
+ 2399 5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2580 5305 a
+SDict begin H.R end
+ 2580 5305
+a 2580 5367 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end
+ 2580 5367 a Black FK(\).)k(W)-7 b(e)24
+b(use)h(this)h(de\002nition)g(of)f Fq(H)30 b FK(to)75
+5479 y(de\002ne)d(the)f(code.)38 b(The)26 b(def)o(ault)i(for)e
+Ft(t)g FK(is)g(1.)37 b(The)26 b(original)i(Sri)n(v)n(asta)n(v)n(a)g
+(codes)f(\(see)g Ft(SrivastavaCode)j FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3507 5481 a
+SDict begin H.S end
+ 3507 5481 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(5.2.9)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3688 5417 a
+SDict begin H.R end
+ 3688 5417 a 3688 5479 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.9) cvn H.B /ANN pdfmark end
+ 3688 5479 a Black
+FK(\)\))75 5592 y(are)24 b(a)f(special)i(case)d Fq(t)27
+b Fo(=)19 b FK(1,)k Fq(z)992 5606 y Fm(i)1035 5592 y
+Fo(=)d Fq(a)1171 5547 y Fm(\265)1171 5618 y(i)1209 5592
+y FK(,)j(for)g(some)h Fq(\265)p FK(.)p Black Black eop
+end end
+%%Page: 68 68
+TeXDict begin HPSdict begin 68 67 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.68) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(68)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(a)e(:=)h(Filtered\()j(AsSSortedList\()h(GF\(2\2106\))e
+(\),)e(e)f(->)h(e)g(in)g(GF\(2\2103\))i(\);;)p 3747 523
+V 75 623 V 188 593 a(gap>)f(w)e(:=)h([)g(Z\(2\2106\))h(];;)g(z)e(:=)h
+(List\()i([1..8],)f(e)f(->)g(1)g(\);;)p 3747 623 V 75
+722 V 188 692 a(gap>)h(C)e(:=)h(GeneralizedSrivasta)q(vaC)q(od)q(e\()49
+b(a,)43 b(w,)g(z,)g(1,)g(GF\(64\))h(\);)p 3747 722 V
+75 822 V 188 792 a(a)f(linear)h([8,2,2..5]3..4)j(generalized)f
+(Srivastava)g(code)e(over)f(GF\(2\))p 3747 822 V 75 847
+4 25 v 3747 847 V 75 850 3675 4 v 75 983 a
+SDict begin H.S end
+ 75 983 a 75
+983 a
+SDict begin 13.6 H.A end
+ 75 983 a 75 983 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.9) cvn H.B /DEST pdfmark end
+ 75 983 a 116 x FJ(5.2.9)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Sri)o(v)o(asta)n(v)o(aCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1274 a Fs(\006)22 b Ft(SrivastavaCode\()52
+b(a,)47 b(w[,)h(mu,])g(F)e(\))1889 b Fr(\(function\))p
+Black 216 1499 a Fq(S)q(r)r(ivas)n(t)6 b(ava)-5 b(C)r(od)5
+b(e)51 b FK(returns)e(a)d(Sri)n(v)n(asta)n(v)n(a)j(code)f(with)e
+(parameters)k Ft(a)p FK(,)i Ft(w)46 b FK(\(and)i(optionally)i
+Ft(mu)q FK(\).)99 b Fq(a)33 b Fo(=)75 1612 y Fv(f)p Fq(a)165
+1626 y Fr(1)203 1612 y Fp(;)10 b(:::;)g Fq(a)393 1626
+y Fm(n)432 1612 y Fv(g)35 b FK(and)h Fq(w)27 b Fo(=)f
+Fv(f)p Fq(w)969 1626 y Fr(1)1007 1612 y Fp(;)10 b(:::;)g
+Fq(w)1213 1626 y Fm(s)1243 1612 y Fv(g)35 b FK(are)h(lists)g(of)g
+Fq(n)17 b Fo(+)g Fq(s)35 b FK(distinct)i(elements)g(of)e
+Fq(F)f Fo(=)27 b Fq(GF)7 b Fo(\()p Fq(q)3148 1579 y Fm(m)3200
+1612 y Fo(\))p FK(.)64 b(The)35 b(def)o(ault)75 1725
+y(for)26 b Ft(mu)g FK(is)g(1.)35 b(The)26 b(Sri)n(v)n(asta)n(v)n(a)h
+(code)g(is)e(a)h(generalized)j(Sri)n(v)n(asta)n(v)n(a)e(code,)g(in)f
+(which)g Fq(z)2860 1739 y Fm(i)2905 1725 y Fo(=)21 b
+Fq(a)3042 1692 y Fm(mu)3042 1751 y(i)3153 1725 y FK(for)26
+b(some)g Ft(mu)g FK(and)73 1838 y Fq(t)g Fo(=)20 b FK(1.)216
+1951 y(J.)30 b(N.)f(Sri)n(v)n(asta)n(v)n(a)j(introduced)i(this)d(code)g
+(in)g(1967,)i(though)g(his)d(w)o(ork)h(w)o(as)f(not)i(published.)52
+b(See)30 b(Helgert)75 2064 y([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 105 2065 a
+SDict begin H.S end
+ 105 2065 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(Hel72)p 0.0236 0.6179 0.0894 TeXcolorrgb
+326 2002 a
+SDict begin H.R end
+ 326 2002 a 326 2064 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.He72) cvn H.B /ANN pdfmark end
+ 326 2064 a Black 1 w
+FK(])25 b(for)g(more)g(details)i(on)e(the)g(properties)j(of)d(this)h
+(code.)34 b(Related)26 b(reference:)35 b(G.)23 b(Roelofsen,)29
+b(O)t Fj(N)g FK(G)t Fj(O)t(P)t(P)m(A)77 2177 y(A)t(N)t(D)23
+b FK(G)t Fj(E)t(N)t(E)t(R)t(A)t(L)t(I)t(Z)t(E)t(D)28
+b FK(S)t Fj(R)t(I)t(V)-6 b(A)t(S)t(T)m(A)g(V)g(A)27 b
+FK(C)t Fj(O)t(D)t(E)t(S)c FK(PhD)18 b(thesis,)k(Dept.)27
+b(Math.)h(and)20 b(Comp.)27 b(Sci.,)19 b(Eindho)o(v)o(en)j(Uni)n(v)-6
+b(.)75 2290 y(of)23 b(T)-6 b(echnology)g(,)26 b(the)e(Netherlands,)h
+(1982.)p 75 2412 1648 4 v 1764 2417 a FF(Example)p 2102
+2412 V 75 2437 4 25 v 3747 2437 V 75 2537 4 100 v 188
+2507 a(gap>)44 b(a)e(:=)h(AsSSortedList\()k(GF\(11\))e(\){[2..8]};;)p
+3747 2537 V 75 2637 V 188 2607 a(gap>)f(w)e(:=)h(AsSSortedList\()k
+(GF\(11\))e(\){[9..10]};;)p 3747 2637 V 75 2736 V 188
+2706 a(gap>)f(C)e(:=)h(SrivastavaCode\()48 b(a,)43 b(w,)g(2,)g
+(GF\(11\))h(\);)p 3747 2736 V 75 2836 V 188 2806 a(a)f(linear)h
+([7,5,3]2)h(Srivastava)h(code)e(over)f(GF\(11\))p 3747
+2836 V 75 2935 V 188 2906 a(gap>)h(IsMDSCode\()h(C)e(\);)p
+3747 2935 V 75 3035 V 188 3005 a(true)171 b(#)42 b(Always)j(true)e(if)g
+(F)g(is)g(a)g(prime)h(field)p 3747 3035 V 75 3060 4 25
+v 3747 3060 V 75 3063 3675 4 v 75 3296 a
+SDict begin H.S end
+ 75 3296 a 75
+3296 a
+SDict begin 13.6 H.A end
+ 75 3296 a 75 3296 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.10) cvn H.B /DEST pdfmark end
+ 75 3296 a 116 x FJ(5.2.10)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Cordar)n(oW)-6 b(agnerCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3586 a Fs(\006)22 b
+Ft(CordaroWagnerCode)q(\()52 b(n)47 b(\))2306 b Fr(\(function\))p
+Black 216 3812 a Ft(CordaroWagnerCode)42 b FK(returns)d(a)e(binary)h
+(Cordaro-W)-7 b(agner)40 b(code.)70 b(This)37 b(is)f(a)h(code)h(of)f
+(length)h Ft(n)f FK(and)75 3925 y(dimension)24 b(2)e(ha)n(ving)i(the)e
+(best)h(possible)h(minimum)e(distance)i Fq(d)5 b FK(.)28
+b(This)21 b(code)i(is)f(just)h(a)e(little)i(bit)g(less)f(tri)n(vial)h
+(than)75 4038 y Ft(RepetitionCode)28 b FK(\(see)c Ft(RepetitionCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1618 4039 a
+SDict begin H.S end
+
+1618 4039 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1844 3976 a
+SDict begin H.R end
+ 1844 3976
+a 1844 4038 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.12) cvn H.B /ANN pdfmark end
+ 1844 4038 a Black FK(\)\).)p 75 4157 1648
+4 v 1764 4162 a FF(Example)p 2102 4157 V 75 4182 4 25
+v 3747 4182 V 75 4282 4 100 v 188 4252 a(gap>)44 b(C)e(:=)h
+(CordaroWagnerCode\()49 b(11)43 b(\);)p 3747 4282 V 75
+4381 V 188 4351 a(a)g(linear)h([11,2,7]5)h(Cordaro-Wagner)j(code)43
+b(over)h(GF\(2\))p 3747 4381 V 75 4481 V 188 4451 a(gap>)g
+(AsSSortedList\(C\);)p 3747 4481 V 75 4581 V 188 4551
+a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g
+(0)g(0)f(1)h(1)g(1)f(1)h(1)g(1)f(1)h(],)p 3747 4581 V
+75 4680 V 273 4650 a([)f(1)h(1)g(1)f(1)h(0)g(0)f(0)h(1)g(1)f(1)h(1)g
+(],)g([)f(1)h(1)g(1)g(1)f(1)h(1)g(1)f(0)h(0)g(0)f(0)h(])g(])p
+3747 4680 V 75 4705 4 25 v 3747 4705 V 75 4708 3675 4
+v 75 4841 a
+SDict begin H.S end
+ 75 4841 a 75 4841 a
+SDict begin 13.6 H.A end
+ 75 4841 a 75 4841 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.11) cvn H.B /DEST pdfmark end
+ 75
+4841 a 117 x FJ(5.2.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(F)n(err)n(er)n
+(oDesignCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5132
+a Fs(\006)22 b Ft(FerreroDesignCode)q(\()52 b(P,)47 b(m)g(\))2167
+b Fr(\(function\))p Black 216 5358 a Fq(Requir)m(es)25
+b(the)e(GAP)f(pac)n(ka)o(g)o(e)k(SON)n(A)m(T)-5 b(A)216
+5471 y FK(A)22 b(group)i Fq(K)i FK(together)f(with)e(a)f(group)i(of)f
+(automorphism)i Fq(H)j FK(of)23 b Fq(K)j FK(such)e(that)f(the)g
+(semidirect)i(product)g Fq(K)5 b(H)27 b FK(is)75 5583
+y(a)e(Frobenius)h(group)h(with)e(complement)h Fq(H)k
+FK(is)25 b(called)i(a)d(Ferrero)i(pair)g Fo(\()p Fq(K)5
+b Fp(;)10 b Fq(H)d Fo(\))23 b FK(in)i(SON)m(A)-10 b(T)i(A.)21
+b(T)-7 b(ak)o(e)25 b(a)f(Frobenius)p Black Black eop
+end end
+%%Page: 69 69
+TeXDict begin HPSdict begin 69 68 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.69) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(69)p Black 75 399 a Fo(\()p Fq(G)p Fp(;)10
+b Fo(+\))22 b FK(group)i(with)e(k)o(ernel)j Fq(K)h FK(and)d(complement)
+i Fq(H)7 b FK(.)26 b(Consider)e(the)f(design)i Fq(D)c
+FK(with)i(point)h(set)e Fq(K)27 b FK(and)c(block)h(set)75
+511 y Fv(f)p Fq(a)165 478 y Fm(H)235 511 y Fo(+)12 b
+Fq(b)23 b Fv(j)g Fq(a)p Fp(;)10 b Fq(b)21 b Fv(2)f Fq(K)5
+b Fp(;)10 b Fq(a)20 b Fv(6)p Fo(=)g FK(0)p Fv(g)p FK(.)29
+b(Here)23 b Fq(a)1304 478 y Fm(H)1384 511 y FK(denotes)i(the)f(orbit)g
+(of)f(a)g(under)i(conjugation)h(by)d(elements)i(of)e
+Fq(H)7 b FK(.)27 b(Ev)o(ery)75 624 y(planar)h(near)n(-ring)i(design)f
+(of)e(type)g(\224*\224)h(can)f(be)g(obtained)j(in)d(this)g(w)o(ay)g
+(from)g(groups.)41 b(These)27 b(designs)i(\(from)f(a)75
+737 y(Frobenius)h(k)o(ernel)g(of)e(order)h Fq(v)f FK(and)h(a)e
+(Frobenius)k(complement)e(of)g(order)g Fq(k)r FK(\))e(ha)n(v)o(e)i
+Fq(v)p Fo(\()p Fq(v)14 b Fv(\000)g FK(1)p Fo(\))p Fp(=)p
+Fq(k)30 b FK(distinct)g(blocks)75 850 y(and)23 b(the)o(y)g(are)f(all)h
+(of)f(size)i Fq(k)r FK(.)j(Moreo)o(v)o(er)c(each)h(of)e(the)h
+Fq(v)f FK(points)i(occurs)g(in)e(e)o(xactly)i Fq(v)12
+b Fv(\000)g FK(1)21 b(distinct)k(blocks.)30 b(Hence)75
+963 y(the)24 b(ro)n(ws)f(and)h(the)g(columns)h(of)e(the)h(incidence)i
+(matrix)e Fq(M)i FK(of)e(the)f(design)j(are)d(al)o(w)o(ays)i(of)e
+(constant)j(weight.)216 1076 y Ft(FerreroDesignCode)33
+b FK(constructs)d(binary)e(linear)h(code)f(arising)h(from)e(the)g
+(incdence)j(matrix)e(of)f(a)g(design)75 1189 y(associated)22
+b(to)c(a)g(\224Ferrero)i(pair\224)g(arising)g(from)f(a)f(\002x)o
+(ed-point-free)k(\(fpf\))e(automorphism)h(groups)f(and)f(Frobenius)75
+1302 y(group.)216 1415 y(INPUT)-5 b(:)21 b Fq(P)g FK(is)h(a)g(list)h
+(of)f(prime)h(po)n(wers)g(describing)i(an)e(abelian)h(group)f
+Fq(G)p FK(.)k Fq(m)19 b Fp(>)g FK(0)j(is)g(an)h(inte)o(ger)g(such)g
+(that)g Fq(G)75 1528 y FK(admits)j(a)g(c)o(yclic)g(fpf)g(automorphism)i
+(group)f(of)f(size)g Fq(m)p FK(.)34 b(This)26 b(means)g(that)g(for)g
+(all)g Fq(q)c Fo(=)28 b Fq(p)3019 1495 y Fm(k)3075 1528
+y Fv(2)21 b Fq(P)p FK(,)k(OrderMod\()7 b Fq(p)p FK(,)75
+1641 y Fq(m)p FK(\))23 b(must)g(di)n(vide)i Fq(q)e FK(\(see)h(the)g
+(SON)m(A)-10 b(T)i(A)20 b(documentation)27 b(for)c Ft
+(FpfAutomorphismGr)q(oup)q(sCy)q(cl)q(ic)p FK(\))q(.)216
+1753 y(OUTPUT)-5 b(:)23 b(The)i(binary)j(linear)e(code)h(whose)f
+(generator)i(matrix)e(is)g(the)g(incidence)i(matrix)e(of)g(a)f(design)i
+(as-)75 1866 y(sociated)d(to)e(a)f(\224Ferrero)i(pair\224)f(arising)i
+(from)e(the)g(\002x)o(ed-point-free)j(\(fpf\))d(automorphism)j(group)e
+(of)e Fq(G)p FK(.)27 b(The)22 b(pair)75 1979 y Fo(\()p
+Fq(H)7 b Fp(;)j Fq(K)5 b Fo(\))23 b FK(is)i(called)g(a)g(Ferraro)g
+(pair)g(and)g(the)g(semidirect)h(product)h Fq(K)5 b(H)29
+b FK(is)c(a)f(Frobenius)i(group)g(with)f(complement)75
+2092 y Fq(H)7 b FK(.)216 2205 y(A)-5 b(UTHORS:)20 b(Peter)k(Mayr)g(and)
+g(Da)n(vid)g(Jo)o(yner)p 75 2328 1648 4 v 1764 2333 a
+FF(Example)p 2102 2328 V 75 2353 4 25 v 3747 2353 V 75
+2452 4 100 v 188 2422 a(gap>)44 b(G:=AbelianGroup\([5,5])49
+b(\);)p 3747 2452 V 75 2552 V 230 2522 a([)43 b(pc)g(group)h(of)f(size)
+h(25)f(with)g(2)g(generators)j(])p 3747 2552 V 75 2651
+V 188 2622 a(gap>)e(FpfAutomorphismGroups)q(Max)q(Siz)q(e\()49
+b(G)43 b(\);)p 3747 2651 V 75 2751 V 188 2721 a([)g(24,)g(2)g(])p
+3747 2751 V 75 2851 V 188 2821 a(gap>)h(L:=FpfAutomorphismGro)q(ups)q
+(Cyc)q(li)q(c\()49 b([5,5],)44 b(3)f(\);)p 3747 2851
+V 75 2950 V 188 2920 a([)g([)f([)h(f1,)g(f2)g(])g(->)g([)g(f1*f2\2102,)
+i(f1*f2\2103)g(])d(],)p 3747 2950 V 75 3050 V 273 3020
+a([)g(pc)h(group)h(of)f(size)h(25)f(with)h(2)e(generators)k(])d(])p
+3747 3050 V 75 3150 V 188 3120 a(gap>)h(D)e(:=)h(DesignFromFerreroPa)q
+(ir\()49 b(L[2],)44 b(Group\(L[1][1]\),)k("*")43 b(\);)p
+3747 3150 V 75 3249 V 230 3219 a([)g(a)g(2)f(-)h(\()g(25,)g(3,)g(2)g
+(\))f(nearring)j(generated)h(design)e(])p 3747 3249 V
+75 3349 V 188 3319 a(gap>)g(M:=IncidenceMat\()j(D)c(\);;)g
+(Length\(M\);)j(Length\(TransposedMa)q(t\(M)q(\)\);)p
+3747 3349 V 75 3448 V 188 3419 a(25)p 3747 3448 V 75
+3548 V 188 3518 a(200)p 3747 3548 V 75 3648 V 188 3618
+a(gap>)e(C1:=GeneratorMatCode\()q(M*Z)q(\(2\))q(,G)q(F\(2)q(\)\);)p
+3747 3648 V 75 3747 V 188 3717 a(a)f(linear)h([200,25,1..24]62..10)q(0)
+k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p
+3747 3747 V 75 3847 V 188 3817 a(gap>)h(MinimumDistance\(C1\);)p
+3747 3847 V 75 3947 V 188 3917 a(24)p 3747 3947 V 75
+4046 V 188 4016 a(gap>)g(C2:=FerreroDesignCode)q(\()k([5,5],3\);)p
+3747 4046 V 75 4146 V 188 4116 a(a)43 b(linear)h([200,25,1..24]62..10)q
+(0)k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p
+3747 4146 V 75 4246 V 188 4216 a(gap>)h(C1=C2;)p 3747
+4246 V 75 4345 V 188 4315 a(true)p 3747 4345 V 75 4445
+V 3747 4445 V 75 4470 4 25 v 3747 4470 V 75 4473 3675
+4 v 75 4606 a
+SDict begin H.S end
+ 75 4606 a 75 4606 a
+SDict begin 13.6 H.A end
+ 75 4606 a 75 4606 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.12) cvn H.B /DEST pdfmark end
+
+75 4606 a 116 x FJ(5.2.12)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(RandomLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+4896 a Fs(\006)22 b Ft(RandomLinearCode\()53 b(n,)47
+b(k,)g(F)g(\))2074 b Fr(\(function\))p Black 216 5122
+a Ft(RandomLinearCode)33 b FK(returns)d(a)e(random)h(linear)g(code)g
+(with)f(w)o(ord)h(length)g Ft(n)q FK(,)f(dimension)i
+Ft(k)e FK(o)o(v)o(er)g(\002eld)g Ft(F)p FK(.)75 5235
+y(The)22 b(method)h(used)g(is)g(to)f(\002rst)g(construct)j(a)d
+Fq(k)13 b Fv(\002)f Fq(n)21 b FK(matrix)i(of)g(the)f(block)i(form)e
+Fo(\()p Fq(I)5 b Fp(;)10 b Fq(A)p Fo(\))p FK(,)22 b(where)g
+Fq(I)27 b FK(is)22 b(a)g Fq(k)13 b Fv(\002)f Fq(k)23
+b FK(identity)75 5348 y(matrix)k(and)g Fq(A)e FK(is)h(a)h
+Fq(k)15 b Fv(\002)f Fo(\()p Fq(n)g Fv(\000)g Fq(k)r Fo(\))25
+b FK(matrix)i(constructed)j(using)e Ft(Random\(F\))h
+FK(repeatedly)-6 b(.)40 b(Then)26 b(the)h(columns)h(are)75
+5461 y(permuted)d(using)g(a)e(randomly)i(selected)h(element)e(of)g
+Ft(SymmetricGroup\(n\))p FK(.)216 5574 y(T)-7 b(o)23
+b(create)h(a)f(random)i(unrestricted)i(code,)d(use)g
+Ft(RandomCode)i FK(\(see)e Ft(RandomCode)j FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2921 5575 a
+SDict begin H.S end
+ 2921 5575 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3102 5512 a
+SDict begin H.R end
+ 3102 5512 a 3102 5574 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.5) cvn H.B /ANN pdfmark end
+ 3102 5574 a Black
+FK(\)\).)p Black Black eop end end
+%%Page: 70 70
+TeXDict begin HPSdict begin 70 69 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.70) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(70)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(C)e(:=)h(RandomLinearCode\()48 b(15,)c(4,)f(GF\(3\))h
+(\);)p 3747 523 V 75 623 V 188 593 a(a)85 b([15,4,?])45
+b(randomly)g(generated)g(code)f(over)g(GF\(3\))p 3747
+623 V 75 722 V 188 692 a(gap>)g(Display\(C\);)p 3747
+722 V 75 822 V 188 792 a(a)f(linear)h([15,4,1..6]6..10)k(random)c
+(linear)h(code)e(over)h(GF\(3\))p 3747 822 V 75 847 4
+25 v 3747 847 V 75 850 3675 4 v 75 1063 a FK(The)25 b(method)h
+Fy(GU)m(A)-6 b(V)f(A)23 b FK(chooses)k(to)f(output)g(the)g(result)g(of)
+f(a)g Ft(RandomLinearCode)30 b FK(command)c(is)f(dif)n(ferent)i(than)75
+1176 y(other)j(codes.)47 b(F)o(or)28 b(e)o(xample,)j(the)f(bounds)h(on)
+e(the)h(minimum)f(distance)i(is)e(not)g(displayed.)49
+b(Ho)n(weer)l(,)30 b(you)g(can)75 1289 y(use)d(the)f
+Ft(Display)i FK(command)f(to)f(print)i(this)f(information.)39
+b(This)26 b(ne)n(w)g(display)i(method)f(w)o(as)f(added)i(in)e(v)o
+(ersion)75 1401 y(1.9)d(to)f(speed)i(up)f(the)g(command)h(\(if)f
+Fq(n)f FK(is)h(about)h(80)f(and)g Fq(k)h FK(about)g(40,)e(for)h(e)o
+(xample,)h(the)f(time)g(it)f(took)i(to)e(look)i(up)75
+1514 y(and/or)h(calculate)h(the)e(bounds)h(on)f(the)f(minimum)h
+(distance)h(w)o(as)f(too)g(long\).)75 1667 y
+SDict begin H.S end
+ 75 1667
+a 75 1667 a
+SDict begin 13.6 H.A end
+ 75 1667 a 75 1667 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.13) cvn H.B /DEST pdfmark end
+ 75 1667 a 97 x FJ(5.2.13)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(OptimalityCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1938 a Fs(\006)e Ft(OptimalityCode\()52
+b(C)47 b(\))2445 b Fr(\(function\))p Black 216 2164 a
+Ft(OptimalityCode)31 b FK(returns)c(the)g(dif)n(ference)h(between)g
+(the)e(smallest)h(kno)n(wn)g(upper)g(bound)h(and)e(the)h(actual)75
+2277 y(size)k(of)g(the)g(code.)51 b(Note)30 b(that)h(the)g(v)n(alue)h
+(of)e(the)h(function)i Ft(UpperBound)h FK(is)c(not)h(al)o(w)o(ays)h
+(equal)f(to)g(the)g(actual)75 2389 y(upper)25 b(bound)g
+Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))23 b FK(thus)i(the)f
+(result)g(may)g(not)f(be)h(equal)h(to)e(0)g(e)n(v)o(en)h(if)f(the)h
+(code)g(is)g(optimal!)216 2502 y Ft(OptimalityLinearCo)q(de)29
+b FK(is)23 b(similar)i(b)n(ut)f(applies)h(only)f(to)g(linear)h(codes.)
+75 2655 y
+SDict begin H.S end
+ 75 2655 a 75 2655 a
+SDict begin 13.6 H.A end
+ 75 2655 a 75 2655 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.14) cvn H.B /DEST pdfmark end
+ 75
+2655 a 97 x FJ(5.2.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BestKno)o
+(wnLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2926
+a Fs(\006)d Ft(BestKnownLinearCo)q(de\()53 b(n,)47 b(k,)g(F)g(\))1935
+b Fr(\(function\))p Black 216 3152 a Ft(BestKnownLinearCod)q(e)41
+b FK(returns)d(the)f(best)g(kno)n(wn)f(\(as)h(of)f(11)g(May)g(2006\))i
+(linear)f(code)g(of)f(length)i Ft(n)p FK(,)75 3265 y(dimension)24
+b Ft(k)e FK(o)o(v)o(er)h(\002eld)f Ft(F)p FK(.)28 b(The)21
+b(function)k(uses)e(the)g(tables)g(described)i(in)d(section)i
+Ft(BoundsMinimumDist)q(anc)q(e)75 3377 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 3378 a
+SDict begin H.S end
+ 105 3378 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb
+331 3315 a
+SDict begin H.R end
+ 331 3315 a 331 3377 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 331 3377 a Black FK(\))h(to)e
+(construct)j(this)e(code.)216 3490 y(This)k(command)h(can)g(also)g(be)f
+(called)i(using)f(the)g(syntax)h Ft(BestKnownLinearCode\()53
+b(rec)48 b(\))p FK(,)28 b(where)h Ft(rec)75 3603 y FK(must)i(be)h(a)f
+(record)h(containing)j(the)c(\002elds)h(`lo)n(werBound',)j
+(`upperBound')f(and)e(`construction'.)57 b(It)31 b(uses)h(the)75
+3716 y(information)g(in)e(this)g(\002eld)f(to)h(construct)i(a)d(code.)
+48 b(This)29 b(form)h(is)f(meant)h(to)g(be)g(used)g(together)i(with)d
+(the)h(func-)75 3829 y(tion)k Ft(BoundsMinimumDistanc)q(e)k
+FK(\(see)c Ft(BoundsMinimumDistan)q(ce)39 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2469 3830 a
+SDict begin H.S end
+ 2469 3830 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2695 3767 a
+SDict begin H.R end
+ 2695 3767 a 2695 3829 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 2695 3829 a Black
+FK(\)\),)d(if)c(the)i(bounds)g(are)f(already)75 3942
+y(calculated.)p 75 4046 1648 4 v 1764 4051 a FF(Example)p
+2102 4046 V 75 4071 4 25 v 3747 4071 V 75 4171 4 100
+v 188 4141 a(gap>)44 b(C1)f(:=)g(BestKnownLinearCode\()49
+b(23,)43 b(12,)h(GF\(2\))g(\);)p 3747 4171 V 75 4270
+V 188 4240 a(a)f(linear)h([23,12,7]3)i(punctured)f(code)p
+3747 4270 V 75 4370 V 188 4340 a(gap>)f(C1)f(=)f(BinaryGolayCode\(\);)p
+3747 4370 V 75 4469 V 188 4439 a(false)213 b(#)43 b(it's)h(constructed)
+i(differently)p 3747 4469 V 75 4569 V 188 4539 a(gap>)e(C1)f(:=)g
+(BestKnownLinearCode\()49 b(23,)43 b(12,)h(GF\(2\))g(\);)p
+3747 4569 V 75 4669 V 188 4639 a(a)f(linear)h([23,12,7]3)i(punctured)f
+(code)p 3747 4669 V 75 4768 V 188 4738 a(gap>)f(G1)f(:=)g
+(MutableCopyMat\(Genera)q(to)q(rMa)q(t\(C)q(1\)\))q(;;)p
+3747 4768 V 75 4868 V 188 4838 a(gap>)h(PutStandardForm\(G1\);)p
+3747 4868 V 75 4968 V 188 4938 a(\(\))p 3747 4968 V 75
+5067 V 188 5037 a(gap>)g(Display\(G1\);)p 3747 5067 V
+75 5167 V 230 5137 a(1)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1)p 3747 5167 V
+75 5266 V 230 5237 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(.)p 3747 5266 V
+75 5366 V 230 5336 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p 3747 5366 V
+75 5466 V 230 5436 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(.)p 3747 5466 V
+75 5565 V 230 5535 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(1)p 3747 5565 V
+Black Black eop end end
+%%Page: 71 71
+TeXDict begin HPSdict begin 71 70 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.71) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(71)p Black 75 428 4 100 v 230 399 a FF(.)43
+b(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g
+(1)f(.)h(1)g(1)f(1)p 3747 428 V 75 528 V 230 498 a(.)h(.)g(.)f(.)h(.)g
+(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1)
+p 3747 528 V 75 628 V 230 598 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.)h
+(.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p
+3747 628 V 75 727 V 230 697 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.)h
+(.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p
+3747 727 V 75 827 V 230 797 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h
+(.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g(.)f(1)h(1)g(1)f(.)p
+3747 827 V 75 927 V 230 897 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
+(1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(1)p
+3747 927 V 75 1026 V 230 996 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p
+3747 1026 V 75 1126 V 188 1096 a(gap>)i(C2)f(:=)g(BinaryGolayCode\(\);)
+p 3747 1126 V 75 1225 V 188 1196 a(a)g(cyclic)h([23,12,7]3)i(binary)e
+(Golay)g(code)g(over)g(GF\(2\))p 3747 1225 V 75 1325
+V 188 1295 a(gap>)g(G2)f(:=)g(MutableCopyMat\(Genera)q(to)q(rMa)q(t\(C)
+q(2\)\))q(;;)p 3747 1325 V 75 1425 V 188 1395 a(gap>)h
+(PutStandardForm\(G2\);)p 3747 1425 V 75 1524 V 188 1494
+a(\(\))p 3747 1524 V 75 1624 V 188 1594 a(gap>)g(Display\(G2\);)p
+3747 1624 V 75 1724 V 230 1694 a(1)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1)p
+3747 1724 V 75 1823 V 230 1793 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(1)p
+3747 1823 V 75 1923 V 230 1893 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p
+3747 1923 V 75 2022 V 230 1993 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(1)p
+3747 2022 V 75 2122 V 230 2092 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(.)p
+3747 2122 V 75 2222 V 230 2192 a(.)h(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.)
+h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g(1)f(.)h(1)g(1)f(.)p
+3747 2222 V 75 2321 V 230 2291 a(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.)
+h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1)p
+3747 2321 V 75 2421 V 230 2391 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.)
+h(.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p
+3747 2421 V 75 2521 V 230 2491 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.)
+h(.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p
+3747 2521 V 75 2620 V 230 2590 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)
+h(.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g(.)f(1)h(1)g(1)f(1)p
+3747 2620 V 75 2720 V 230 2690 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(.)p
+3747 2720 V 75 2819 V 230 2790 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p
+3747 2819 V 75 2919 V 188 2889 a(##)h(Despite)i(their)f(generator)h
+(matrices)g(are)f(different,)h(they)f(are)f(equivalent)j(codes,)f(see)e
+(below.)p 3747 2919 V 75 3019 V 188 2989 a(gap>)h
+(IsEquivalent\(C1,C2\);)p 3747 3019 V 75 3118 V 188 3088
+a(true)p 3747 3118 V 75 3218 V 188 3188 a(gap>)g
+(CodeIsomorphism\(C1,C2)q(\);)p 3747 3218 V 75 3318 V
+188 3288 a(\(4,14,6,12,5\)\(7,17,1)q(8,1)q(1,1)q(9\)\()q(8,2)q(2,)q
+(13,)q(21,)q(16\))q(\(10)q(,23)q(,15)q(,20)q(\))p 3747
+3318 V 75 3417 V 188 3387 a(gap>)g(Display\()h(BestKnownLinearCode\()k
+(81,)43 b(77,)h(GF\(4\))g(\))e(\);)p 3747 3417 V 75 3517
+V 188 3487 a(a)h(linear)h([81,77,3]2..3)j(shortened)e(code)f(of)p
+3747 3517 V 75 3616 V 188 3587 a(a)f(linear)h([85,81,3]1)i(Hamming)e
+(\(4,4\))h(code)e(over)h(GF\(4\))p 3747 3616 V 75 3716
+V 188 3686 a(gap>)g(C:=BestKnownLinearCod)q(e\(1)q(74,)q(72)q(\);)p
+3747 3716 V 75 3816 V 188 3786 a(a)f(linear)h([174,72,31..36]26..8)q(7)
+k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p
+3747 3816 V 75 3915 V 188 3885 a(gap>)h(bounds)g(:=)f
+(BoundsMinimumDistan)q(ce\()49 b(81,)43 b(77,)h(GF\(4\))g(\);)p
+3747 3915 V 75 4015 V 188 3985 a(rec\()g(n)e(:=)h(81,)h(k)e(:=)h(77,)h
+(q)e(:=)h(4,)p 3747 4015 V 75 4115 V 273 4085 a(references)i(:=)e
+(rec\()h(Ham)f(:=)g([)g("\045T)h(this)f(reference)j(is)d(unknown,)i
+(for)e(more)h(info",)p 3747 4115 V 75 4214 V 611 4184
+a("\045T)g(contact)g(A.E.)g(Brouwer)h(\(aeb at cwi.nl\)")i(],)p
+3747 4214 V 75 4314 V 442 4284 a(cap)c(:=)g([)g("\045T)g(this)h
+(reference)i(is)d(unknown,)i(for)e(more)h(info",)p 3747
+4314 V 75 4413 V 611 4384 a("\045T)g(contact)g(A.E.)g(Brouwer)h
+(\(aeb at cwi.nl\)")i(])42 b(\),)p 3747 4413 V 75 4513 V
+273 4483 a(construction)k(:=)d([)g(\(Operation)i("ShortenedCode"\),)p
+3747 4513 V 75 4613 V 442 4583 a([)e([)f(\(Operation)k
+("HammingCode"\),)i([)42 b(4,)h(4)g(])g(],)g([)f(1,)h(2,)g(3,)g(4)g(])g
+(])f(],)p 3747 4613 V 75 4712 V 273 4682 a(lowerBound)j(:=)e(3,)p
+3747 4712 V 75 4812 V 273 4782 a(lowerBoundExplanation)49
+b(:=)43 b([)g("Lb\(81,77\)=3,)k(by)c(shortening)i(of:",)p
+3747 4812 V 75 4912 V 442 4882 a("Lb\(85,81\)=3,)i(reference:)e(Ham")f
+(],)f(upperBound)j(:=)d(3,)p 3747 4912 V 75 5011 V 273
+4981 a(upperBoundExplanation)49 b(:=)43 b([)g("Ub\(81,77\)=3,)k(by)c
+(considering)j(shortening)f(to:",)p 3747 5011 V 75 5111
+V 442 5081 a("Ub\(18,14\)=3,)i(reference:)e(cap")f(])f(\))p
+3747 5111 V 75 5210 V 188 5181 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q
+(\()48 b(bounds)d(\);)p 3747 5210 V 75 5310 V 188 5280
+a(a)e(linear)h([81,77,3]2..3)j(shortened)e(code)p 3747
+5310 V 75 5410 V 188 5380 a(gap>)f(C)e(=)h(BestKnownLinearCode\()q(81,)
+49 b(77,)44 b(GF\(4\))g(\);)p 3747 5410 V 75 5509 V 188
+5479 a(true)p 3747 5509 V 75 5534 4 25 v 3747 5534 V
+75 5537 3675 4 v Black Black eop end end
+%%Page: 72 72
+TeXDict begin HPSdict begin 72 71 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.72) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(72)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.3) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FM(5.3)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Gabidulin)32 b(Codes)p Black 75 606 a FK(These)40
+b(\002)n(v)o(e)f(binary)-6 b(,)46 b(linear)41 b(codes)g(are)g(deri)n(v)
+o(ed)g(from)f(an)g(article)h(by)g(Gabidulin,)k(Da)n(vydo)o(v)d(and)e(T)
+-7 b(ombak)75 718 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb
+105 720 a
+SDict begin H.S end
+ 105 720 a 0.0236 0.6179 0.0894 TeXcolorrgb
+-2 x FK(GDT91)p 0.0236 0.6179 0.0894 TeXcolorrgb 383
+656 a
+SDict begin H.R end
+ 383 656 a 383 718 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GDT91) cvn H.B /ANN pdfmark end
+ 383 718 a Black FK(].)67 b(All)35
+b(these)j(codes)f(are)g(de\002ned)g(by)f(check)i(matrices.)68
+b(Exact)37 b(de\002nitions)h(can)f(be)f(found)i(in)e(the)75
+831 y(article.)k(The)26 b(Gabidulin)i(code,)g(the)f(enlar)n(ged)j
+(Gabidulin)e(code,)g(the)f(Da)n(vydo)o(v)h(code,)g(the)f(T)-7
+b(ombak)27 b(code,)h(and)75 944 y(the)c(enlar)n(ged)i(T)-7
+b(ombak)23 b(code,)h(correspond)j(with)c(theorem)i(1,)e(2,)g(3,)g(4,)g
+(and)h(5,)f(respecti)n(v)o(ely)j(in)d(the)h(article.)216
+1057 y(Lik)o(e)h(the)g(Hamming)g(codes,)h(these)g(codes)g(ha)n(v)o(e)f
+(\002x)o(ed)g(minimum)f(distance)j(and)f(co)o(v)o(ering)g(radius,)g(b)n
+(ut)g(can)75 1170 y(be)e(arbitrarily)i(long.)75 1323
+y
+SDict begin H.S end
+ 75 1323 a 75 1323 a
+SDict begin 13.6 H.A end
+ 75 1323 a 75 1323 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.1) cvn H.B /DEST pdfmark end
+ 75 1323 a 96
+x FJ(5.3.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GabidulinCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1594 a Fs(\006)c Ft(GabidulinCode\()52
+b(m,)47 b(w1,)g(w2)g(\))2121 b Fr(\(function\))p Black
+216 1819 a Ft(GabidulinCode)33 b FK(yields)d(a)e(code)i(of)e(length)j
+(5)d(.)44 b(2)1904 1786 y Fm(m)p Fh(\000)p Fr(2)2056
+1819 y Fv(\000)15 b FK(1,)28 b(redundanc)o(y)k(2)p Fq(m)15
+b Fv(\000)g FK(1,)28 b(minimum)h(distance)i(3)75 1932
+y(and)24 b(co)o(v)o(ering)h(radius)g(2.)j Ft(w1)c FK(and)g
+Ft(w2)f FK(should)i(be)f(elements)h(of)e Fq(GF)7 b Fo(\()p
+FK(2)2320 1899 y Fm(m)p Fh(\000)p Fr(2)2458 1932 y Fo(\))p
+FK(.)75 2088 y
+SDict begin H.S end
+ 75 2088 a 75 2088 a
+SDict begin 13.6 H.A end
+ 75 2088 a 75 2088
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.2) cvn H.B /DEST pdfmark end
+ 75 2088 a 93 x FJ(5.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(Enlar)o(gedGabidulinCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2356 a Fs(\006)22 b Ft(EnlargedGabidulin)q(Cod)q(e\()53
+b(m,)47 b(w1,)g(w2,)h(e)e(\))1611 b Fr(\(function\))p
+Black 216 2582 a Ft(EnlargedGabidulinC)q(ode)25 b FK(yields)c(a)e(code)
+h(of)f(length)i(7.)27 b(2)2173 2549 y Fm(m)p Fh(\000)p
+Fr(2)2319 2582 y Fv(\000)9 b FK(2,)19 b(redundanc)o(y)j(2)p
+Fq(m)p FK(,)d(minimum)g(distance)75 2694 y(3)k(and)h(co)o(v)o(ering)h
+(radius)g(2.)k Ft(w1)23 b FK(and)h Ft(w2)f FK(are)h(elements)h(of)f
+Fq(GF)6 b Fo(\()p FK(2)2148 2661 y Fm(m)p Fh(\000)p Fr(2)2286
+2694 y Fo(\))p FK(.)28 b Ft(e)23 b FK(is)h(an)f(element)i(of)e
+Fq(GF)7 b Fo(\()p FK(2)3251 2661 y Fm(m)3304 2694 y Fo(\))p
+FK(.)75 2850 y
+SDict begin H.S end
+ 75 2850 a 75 2850 a
+SDict begin 13.6 H.A end
+ 75 2850 a 75 2850
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.3) cvn H.B /DEST pdfmark end
+ 75 2850 a 94 x FJ(5.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(Da)n(vydo)o(vCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+3118 a Fs(\006)22 b Ft(DavydovCode\()51 b(r,)c(v,)g(ei,)h(ej)f(\))2074
+b Fr(\(function\))p Black 216 3344 a Ft(DavydovCode)28
+b FK(yields)e(a)f(code)g(of)g(length)h(2)1647 3311 y
+Fm(v)1694 3344 y Fo(+)13 b FK(2)1823 3311 y Fm(r)r Fh(\000)p
+Fm(v)1949 3344 y Fv(\000)g FK(3,)25 b(redundanc)o(y)i
+Ft(r)q FK(,)d(minimum)g(distance)j(4)e(and)g(co)o(v-)75
+3457 y(ering)g(radius)h(2.)k Ft(v)23 b FK(is)h(an)g(inte)o(ger)i
+(between)f(2)f(and)g Fq(r)15 b Fv(\000)e FK(2.)30 b Ft(ei)24
+b FK(and)h Ft(ej)f FK(are)g(elements)i(of)e Fq(GF)6 b
+Fo(\()p FK(2)3122 3424 y Fm(v)3157 3457 y Fo(\))23 b
+FK(and)i Fq(GF)7 b Fo(\()p FK(2)3579 3424 y Fm(r)r Fh(\000)p
+Fm(v)3692 3457 y Fo(\))p FK(,)75 3570 y(respecti)n(v)o(ely)-6
+b(.)75 3722 y
+SDict begin H.S end
+ 75 3722 a 75 3722 a
+SDict begin 13.6 H.A end
+ 75 3722 a 75 3722 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.4) cvn H.B /DEST pdfmark end
+
+75 3722 a 97 x FJ(5.3.4)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(T)d(ombakCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3993
+a Fs(\006)22 b Ft(TombakCode\()51 b(m,)c(e,)g(beta,)h(gamma,)h(w1,)e
+(w2)g(\))1518 b Fr(\(function\))p Black 216 4219 a Ft(TombakCode)27
+b FK(yields)f(a)d(code)i(of)g(length)g(15)13 b Fv(\001)g
+FK(2)1738 4186 y Fm(m)p Fh(\000)p Fr(3)1889 4219 y Fv(\000)g
+FK(3,)24 b(redundanc)o(y)j(2)p Fq(m)p FK(,)c(minimum)h(distance)i(4)e
+(and)h(co)o(v-)75 4332 y(ering)f(radius)f(2.)28 b Ft(e)23
+b FK(is)f(an)g(element)i(of)e Fq(GF)7 b Fo(\()p FK(2)1497
+4299 y Fm(m)1550 4332 y Fo(\))p FK(.)28 b Ft(beta)23
+b FK(and)g Ft(gamma)h FK(are)e(elements)i(of)f Fq(GF)7
+b Fo(\()p FK(2)3034 4299 y Fm(m)p Fh(\000)p Fr(1)3171
+4332 y Fo(\))p FK(.)28 b Ft(w1)23 b FK(and)g Ft(w2)f
+FK(are)75 4445 y(elements)j(of)e Fq(GF)7 b Fo(\()p FK(2)728
+4412 y Fm(m)p Fh(\000)p Fr(3)866 4445 y Fo(\))p FK(.)75
+4600 y
+SDict begin H.S end
+ 75 4600 a 75 4600 a
+SDict begin 13.6 H.A end
+ 75 4600 a 75 4600 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.5) cvn H.B /DEST pdfmark end
+ 75 4600
+a 94 x FJ(5.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Enlar)o(gedT)-9
+b(ombakCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4868 a
+Fs(\006)22 b Ft(EnlargedTombakCod)q(e\()53 b(m,)47 b(e,)g(beta,)h
+(gamma,)h(w1,)e(w2,)g(u)g(\))1008 b Fr(\(function\))p
+Black 216 5094 a Ft(EnlargedTombakCode)34 b FK(yields)c(a)f(code)g(of)f
+(length)i(23)14 b Fv(\001)g FK(2)2137 5061 y Fm(m)p Fh(\000)p
+Fr(4)2291 5094 y Fv(\000)g FK(3,)30 b(redundanc)o(y)h(2)p
+Fq(m)14 b Fv(\000)g FK(1,)30 b(minimum)f(dis-)75 5207
+y(tance)39 b(4)f(and)g(co)o(v)o(ering)i(radius)f(2.)72
+b(The)37 b(parameters)j Ft(m)q FK(,)g Ft(e)p FK(,)h Ft(beta)q
+FK(,)g Ft(gamma)r FK(,)f Ft(w1)e FK(and)h Ft(w2)e FK(are)i(de\002ned)f
+(as)g(in)75 5320 y Ft(TombakCode)p FK(.)32 b Ft(u)23
+b FK(is)g(an)h(element)g(of)g Fq(GF)6 b Fo(\()p FK(2)1468
+5287 y Fm(m)p Fh(\000)p Fr(1)1606 5320 y Fo(\))p FK(.)p
+Black Black eop end end
+%%Page: 73 73
+TeXDict begin HPSdict begin 73 72 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.73) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(73)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(GabidulinCode\()j(4,)c(Z\(4\)\2100,)h(Z\(4\)\2101)h
+(\);)p 3747 523 V 75 623 V 188 593 a(a)e(linear)h([19,12,3]2)i
+(Gabidulin)f(code)f(\(m=4\))g(over)g(GF\(2\))p 3747 623
+V 75 722 V 188 692 a(gap>)g(EnlargedGabidulinCode)q(\()k(4,)43
+b(Z\(4\)\2100,)i(Z\(4\)\2101,)g(Z\(16\)\21011)g(\);)p
+3747 722 V 75 822 V 188 792 a(a)e(linear)h([26,18,3]2)i(enlarged)f
+(Gabidulin)g(code)f(\(m=4\))g(over)g(GF\(2\))p 3747 822
+V 75 922 V 188 892 a(gap>)g(DavydovCode\()i(6,)d(3,)g(Z\(8\)\2101,)i
+(Z\(8\)\2105)f(\);)p 3747 922 V 75 1021 V 188 991 a(a)f(linear)h
+([13,7,4]2)h(Davydov)g(code)f(\(r=6,)g(v=3\))g(over)f(GF\(2\))p
+3747 1021 V 75 1121 V 188 1091 a(gap>)h(TombakCode\()i(5,)d
+(Z\(32\)\2106,)i(Z\(16\)\21014,)g(Z\(16\)\21010,)h(Z\(4\)\2100,)e
+(Z\(4\)\2101)h(\);)p 3747 1121 V 75 1220 V 188 1191 a(a)e(linear)h
+([57,47,4]2)i(Tombak)e(code)g(\(m=5\))g(over)g(GF\(2\))p
+3747 1220 V 75 1320 V 188 1290 a(gap>)g(EnlargedTombakCode\()k(6,)43
+b(Z\(32\)\2106,)j(Z\(16\)\21014,)f(Z\(16\)\21010,)p 3747
+1320 V 75 1420 V 188 1390 a(>)e(Z\(4\)\2100,)h(Z\(4\)\2100,)h
+(Z\(32\)\21023)g(\);)p 3747 1420 V 75 1519 V 188 1489
+a(a)e(linear)h([89,78,4]2)i(enlarged)f(Tombak)f(code)g(\(m=6\))g(over)g
+(GF\(2\))p 3747 1519 V 75 1544 4 25 v 3747 1544 V 75
+1547 3675 4 v 75 1689 a
+SDict begin H.S end
+ 75 1689 a 75 1689 a
+SDict begin 13.6 H.A end
+ 75 1689 a
+75 1689 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.4) cvn H.B /DEST pdfmark end
+ 75 1689 a 150 x FM(5.4)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Golay)29 b(Codes)p Black 75 2046 a FK(\223)19 b(The)f(Golay)i
+(code)f(is)g(probably)j(the)d(most)g(important)i(of)e(all)g(codes)h
+(for)f(both)h(practical)h(and)f(theoretical)i(reasons.)75
+2158 y(\224)50 b(\([)p 0.0236 0.6179 0.0894 TeXcolorrgb
+225 2159 a
+SDict begin H.S end
+ 225 2159 a 0.0236 0.6179 0.0894 TeXcolorrgb
+-1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 447 2096
+a
+SDict begin H.R end
+ 447 2096 a 447 2158 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end
+ 447 2158 a Black 1 w FK(],)32
+b(pg.)51 b(64\).)f(Though)32 b(born)g(in)f(Switzerland,)i(M.)d(J.)g(E.)
+f(Golay)i(\(1902-1989\))k(w)o(ork)o(ed)d(for)f(the)g(US)75
+2271 y(Army)20 b(Labs)h(for)g(most)g(of)g(his)g(career)-5
+b(.)29 b(F)o(or)20 b(more)h(information)i(on)e(his)g(life,)h(see)f(his)
+g(obit)h(in)e(the)i(June)f(1990)h(IEEE)75 2384 y(Information)k(Society)
+e(Ne)n(wsletter)-5 b(.)75 2535 y
+SDict begin H.S end
+ 75 2535 a 75 2535 a
+SDict begin 13.6 H.A end
+
+75 2535 a 75 2535 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.1) cvn H.B /DEST pdfmark end
+ 75 2535 a 97 x FJ(5.4.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(BinaryGolayCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2806 a Fs(\006)22 b Ft(BinaryGolayCode\()53
+b(\))2491 b Fr(\(function\))p Black 216 3032 a Ft(BinaryGolayCode)27
+b FK(returns)d(a)f(binary)h(Golay)e(code.)30 b(This)22
+b(is)g(a)h(perfect)h Fo([)p FK(23)p Fp(;)10 b FK(12)p
+Fp(;)g FK(7)p Fo(])25 b FK(code.)k(It)22 b(is)g(also)i(c)o(yclic,)75
+3145 y(and)36 b(has)f(generator)j(polynomial)f Fq(g)p
+Fo(\()p Fq(x)p Fo(\))28 b(=)f FK(1)17 b Fo(+)f Fq(x)1692
+3112 y Fr(2)1747 3145 y Fo(+)h Fq(x)1875 3112 y Fr(4)1930
+3145 y Fo(+)f Fq(x)2057 3112 y Fr(5)2112 3145 y Fo(+)h
+Fq(x)2240 3112 y Fr(6)2295 3145 y Fo(+)f Fq(x)2422 3112
+y Fr(10)2510 3145 y Fo(+)h Fq(x)2638 3112 y Fr(11)2709
+3145 y FK(.)63 b(Extending)37 b(it)e(results)h(in)f(an)75
+3258 y(e)o(xtended)26 b(Golay)f(code)g(\(see)g Ft(ExtendedBinaryGolay)q
+(Cod)q(e)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2156 3259 a
+SDict begin H.S end
+ 2156 3259 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2337
+3196 a
+SDict begin H.R end
+ 2337 3196 a 2337 3258 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.2) cvn H.B /ANN pdfmark end
+ 2337 3258 a Black FK(\)\).)h(There')-5
+b(s)25 b(also)g(the)g(ternary)h(Golay)e(code)75 3371
+y(\(see)g Ft(TernaryGolayCode)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1039 3372 a
+SDict begin H.S end
+ 1039 3372 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1220 3309 a
+SDict begin H.R end
+ 1220 3309 a 1220 3371 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end
+ 1220 3371 a Black
+FK(\)\).)p 75 3480 1648 4 v 1764 3485 a FF(Example)p
+2102 3480 V 75 3505 4 25 v 3747 3505 V 75 3605 4 100
+v 188 3575 a(gap>)44 b(C:=BinaryGolayCode\(\);)p 3747
+3605 V 75 3704 V 188 3675 a(a)f(cyclic)h([23,12,7]3)i(binary)e(Golay)g
+(code)g(over)g(GF\(2\))p 3747 3704 V 75 3804 V 188 3774
+a(gap>)g(ExtendedBinaryGolayCo)q(de\()q(\))k(=)43 b
+(ExtendedCode\(Binary)q(Gol)q(ayC)q(ode)q(\(\)\))q(;)p
+3747 3804 V 75 3904 V 188 3874 a(true)p 3747 3904 V 75
+4003 V 188 3973 a(gap>)h(IsPerfectCode\(C\);)p 3747 4003
+V 75 4103 V 188 4073 a(true)p 3747 4103 V 75 4203 V 188
+4173 a(gap>)g(IsCyclicCode\(C\);)p 3747 4203 V 75 4302
+V 188 4272 a(true)p 3747 4302 V 75 4327 4 25 v 3747 4327
+V 75 4330 3675 4 v 75 4462 a
+SDict begin H.S end
+ 75 4462 a 75 4462 a
+SDict begin 13.6 H.A end
+ 75 4462
+a 75 4462 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.2) cvn H.B /DEST pdfmark end
+ 75 4462 a 116 x FJ(5.4.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(ExtendedBinaryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4752 a Fs(\006)22 b Ft(ExtendedBinaryGol)q(ayC)q(ode)q(\()52
+b(\))2121 b Fr(\(function\))p Black 216 4978 a Ft(ExtendedBinaryGola)q
+(yCo)q(de)36 b FK(returns)d(an)d(e)o(xtended)j(binary)f(Golay)f(code.)
+51 b(This)31 b(is)f(a)h Fo([)p FK(24)p Fp(;)10 b FK(12)p
+Fp(;)g FK(8)p Fo(])33 b FK(code.)75 5091 y(Puncturing)25
+b(in)e(the)g(last)h(position)h(results)g(in)e(a)f(perfect)j(binary)f
+(Golay)g(code)f(\(see)h Ft(BinaryGolayCode)k FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 3485 5092 a
+SDict begin H.S end
+ 3485 5092
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3666 5029 a
+SDict begin H.R end
+ 3666 5029 a 3666 5091 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end
+ 3666
+5091 a Black FK(\)\).)75 5204 y(The)23 b(code)h(is)g(self-dual.)p
+75 5298 1648 4 v 1764 5303 a FF(Example)p 2102 5298 V
+75 5323 4 25 v 3747 5323 V 75 5423 4 100 v 188 5393 a(gap>)44
+b(C)e(:=)h(ExtendedBinaryGolay)q(Cod)q(e\()q(\);)p 3747
+5423 V 75 5523 V 188 5493 a(a)g(linear)h([24,12,8]4)i(extended)f
+(binary)f(Golay)g(code)g(over)g(GF\(2\))p 3747 5523 V
+75 5622 V 188 5592 a(gap>)g(IsSelfDualCode\(C\);)p 3747
+5622 V Black Black eop end end
+%%Page: 74 74
+TeXDict begin HPSdict begin 74 73 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.74) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(74)p Black 75 428 4 100 v 188 399 a FF(true)p
+3747 428 V 75 528 V 188 498 a(gap>)44 b(P)e(:=)h(PuncturedCode\(C\);)p
+3747 528 V 75 628 V 188 598 a(a)g(linear)h([23,12,7]3)i(punctured)f
+(code)p 3747 628 V 75 727 V 188 697 a(gap>)f(P)e(=)h
+(BinaryGolayCode\(\);)p 3747 727 V 75 827 V 188 797 a(true)p
+3747 827 V 75 927 V 188 897 a(gap>)h(IsCyclicCode\(C\);)p
+3747 927 V 75 1026 V 188 996 a(false)p 3747 1026 V 75
+1126 V 3747 1126 V 75 1151 4 25 v 3747 1151 V 75 1154
+3675 4 v 75 1366 a
+SDict begin H.S end
+ 75 1366 a 75 1366 a
+SDict begin 13.6 H.A end
+ 75 1366 a 75 1366
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.3) cvn H.B /DEST pdfmark end
+ 75 1366 a 117 x FJ(5.4.3)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(T)-9 b(er)o(naryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1657 a Fs(\006)22 b Ft(TernaryGolayCode\()53 b(\))2445
+b Fr(\(function\))p Black 216 1883 a Ft(TernaryGolayCode)41
+b FK(returns)c(a)f(ternary)h(Golay)g(code.)66 b(This)36
+b(is)f(a)h(perfect)h Fo([)p FK(11)p Fp(;)10 b FK(6)p
+Fp(;)g FK(5)p Fo(])38 b FK(code.)66 b(It)36 b(is)g(also)75
+1996 y(c)o(yclic,)22 b(and)f(has)h(generator)h(polynomial)g
+Fq(g)p Fo(\()p Fq(x)p Fo(\))d(=)d FK(2)10 b Fo(+)g Fq(x)1863
+1963 y Fr(2)1912 1996 y Fo(+)g FK(2)p Fq(x)2078 1963
+y Fr(3)2127 1996 y Fo(+)g Fq(x)2248 1963 y Fr(4)2296
+1996 y Fo(+)g Fq(x)2417 1963 y Fr(5)2454 1996 y FK(.)27
+b(Extending)c(it)e(results)h(in)f(an)g(e)o(xtended)75
+2109 y(Golay)37 b(code)g(\(see)g Ft(ExtendedTernaryGol)q(ay)q(Cod)q(e)
+42 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1901 2110
+a
+SDict begin H.S end
+ 1901 2110 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2082 2047 a
+SDict begin H.R end
+ 2082 2047
+a 2082 2109 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.4) cvn H.B /ANN pdfmark end
+ 2082 2109 a Black FK(\)\).)68 b(There')-5
+b(s)38 b(also)f(the)f(binary)i(Golay)f(code)h(\(see)75
+2222 y Ft(BinaryGolayCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 823 2223 a
+SDict begin H.S end
+ 823 2223 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1004 2160 a
+SDict begin H.R end
+ 1004 2160 a 1004 2222 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end
+ 1004 2222 a Black
+FK(\)\).)p 75 2323 1648 4 v 1764 2328 a FF(Example)p
+2102 2323 V 75 2348 4 25 v 3747 2348 V 75 2448 4 100
+v 188 2418 a(gap>)44 b(C:=TernaryGolayCode\(\))q(;)p
+3747 2448 V 75 2548 V 188 2518 a(a)f(cyclic)h([11,6,5]2)h(ternary)g
+(Golay)f(code)g(over)g(GF\(3\))p 3747 2548 V 75 2647
+V 188 2617 a(gap>)g(ExtendedTernaryGolayC)q(ode)q(\(\))49
+b(=)43 b(ExtendedCode\(TernaryG)q(ola)q(yCo)q(de\()q(\)\);)p
+3747 2647 V 75 2747 V 188 2717 a(true)p 3747 2747 V 75
+2846 V 188 2817 a(gap>)h(IsCyclicCode\(C\);)p 3747 2846
+V 75 2946 V 188 2916 a(true)p 3747 2946 V 75 2971 4 25
+v 3747 2971 V 75 2974 3675 4 v 75 3104 a
+SDict begin H.S end
+ 75 3104 a 75
+3104 a
+SDict begin 13.6 H.A end
+ 75 3104 a 75 3104 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.4) cvn H.B /DEST pdfmark end
+ 75 3104 a 117 x FJ(5.4.4)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedT)-9 b(er)o(naryGolayCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3395 a Fs(\006)22 b
+Ft(ExtendedTernaryGo)q(lay)q(Cod)q(e\()53 b(\))2074 b
+Fr(\(function\))p Black 216 3621 a Ft(ExtendedTernaryGol)q(ayC)q(ode)35
+b FK(returns)30 b(an)f(e)o(xtended)h(ternary)h(Golay)e(code.)45
+b(This)28 b(is)h(a)f Fo([)p FK(12)p Fp(;)10 b FK(6)p
+Fp(;)g FK(6)p Fo(])31 b FK(code.)75 3734 y(Puncturing)h(this)e(code)h
+(results)h(in)d(a)h(perfect)h(ternary)h(Golay)e(code)h(\(see)f
+Ft(TernaryGolayCode)35 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3296 3735 a
+SDict begin H.S end
+ 3296 3735 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3477 3672 a
+SDict begin H.R end
+ 3477 3672 a 3477 3734 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end
+ 3477 3734 a Black
+FK(\)\).)49 b(The)75 3847 y(code)24 b(is)g(self-dual.)p
+75 3933 1648 4 v 1764 3938 a FF(Example)p 2102 3933 V
+75 3958 4 25 v 3747 3958 V 75 4058 4 100 v 188 4028 a(gap>)44
+b(C)e(:=)h(ExtendedTernaryGola)q(yCo)q(de)q(\(\);)p 3747
+4058 V 75 4157 V 188 4128 a(a)g(linear)h([12,6,6]3)h(extended)g
+(ternary)g(Golay)f(code)g(over)g(GF\(3\))p 3747 4157
+V 75 4257 V 188 4227 a(gap>)g(IsSelfDualCode\(C\);)p
+3747 4257 V 75 4357 V 188 4327 a(true)p 3747 4357 V 75
+4456 V 188 4426 a(gap>)g(P)e(:=)h(PuncturedCode\(C\);)p
+3747 4456 V 75 4556 V 188 4526 a(a)g(linear)h([11,6,5]2)h(punctured)h
+(code)p 3747 4556 V 75 4656 V 188 4626 a(gap>)e(P)e(=)h
+(TernaryGolayCode\(\);)p 3747 4656 V 75 4755 V 188 4725
+a(true)p 3747 4755 V 75 4855 V 188 4825 a(gap>)h(IsCyclicCode\(C\);)p
+3747 4855 V 75 4954 V 188 4925 a(false)p 3747 4954 V
+75 4979 4 25 v 3747 4979 V 75 4982 3675 4 v 75 5123 a
+SDict begin H.S end
+
+75 5123 a 75 5123 a
+SDict begin 13.6 H.A end
+ 75 5123 a 75 5123 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.5) cvn H.B /DEST pdfmark end
+ 75 5123 a 149
+x FM(5.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31
+b(Cyclic)f(Codes)p Black 75 5479 a FK(The)18 b(elements)h(of)f(a)g(c)o
+(yclic)h(code)14 b Fq(C)19 b FK(are)g(all)f(multiples)i(of)e(a)f
+(\('generator'\))22 b(polynomial)f Fq(g)p Fo(\()p Fq(x)p
+Fo(\))p FK(,)e(where)g(calculations)75 5592 y(are)27
+b(carried)h(out)f(modulo)h Fq(x)976 5559 y Fm(n)1028
+5592 y Fv(\000)14 b FK(1.)37 b(Therefore,)29 b(as)e(polynomials)i(in)e
+Fq(x)p FK(,)g(the)g(elements)h(al)o(w)o(ays)f(ha)n(v)o(e)h(de)o(gree)g
+(less)p Black Black eop end end
+%%Page: 75 75
+TeXDict begin HPSdict begin 75 74 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.75) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(75)p Black 75 399 a(than)25 b Fq(n)p FK(.)32
+b(A)24 b(c)o(yclic)h(code)h(is)e(an)h(ideal)g(in)g(the)g(ring)g
+Fq(F)7 b Fo([)p Fq(x)p Fo(])p Fp(=)p Fo(\()p Fq(x)1947
+366 y Fm(n)2000 399 y Fv(\000)13 b FK(1)p Fo(\))24 b
+FK(of)h(polynomials)i(modulo)f Fq(x)3103 366 y Fm(n)3154
+399 y Fv(\000)13 b FK(1.)31 b(The)25 b(unique)75 511
+y(monic)32 b(polynomial)i(of)e(least)g(de)o(gree)h(that)f(generates)d
+Fq(C)k FK(is)e(called)i(the)f Fq(g)o(ener)o(ator)i(polynomial)g
+FK(of)27 b Fq(C)r FK(.)52 b(It)31 b(is)h(a)75 624 y(di)n(visor)25
+b(of)e(the)h(polynomial)i Fq(x)1057 591 y Fm(n)1108 624
+y Fv(\000)13 b FK(1.)216 737 y(The)22 b Fq(c)o(hec)n(k)h(polynomial)i
+FK(is)d(the)h(polynomial)h Fq(h)p Fo(\()p Fq(x)p Fo(\))f
+FK(with)f Fq(g)p Fo(\()p Fq(x)p Fo(\))p Fq(h)p Fo(\()p
+Fq(x)p Fo(\))h(=)18 b Fq(x)2508 704 y Fm(n)2558 737 y
+Fv(\000)11 b FK(1.)28 b(Therefore)c(it)e(is)g(also)h(a)f(di)n(visor)75
+850 y(of)h Fq(x)213 817 y Fm(n)264 850 y Fv(\000)13 b
+FK(1.)28 b(The)23 b(check)i(polynomial)g(has)f(the)g(property)i(that)
+1386 1044 y Fq(c)p Fo(\()p Fq(x)p Fo(\))p Fq(h)p Fo(\()p
+Fq(x)p Fo(\))e Fv(\021)19 b FK(0)92 b Fo(\()p FK(mod)21
+b Fq(x)2199 1007 y Fm(n)2250 1044 y Fv(\000)13 b FK(1)p
+Fo(\))p Fp(;)75 1238 y FK(for)24 b(e)n(v)o(ery)g(code)n(w)o(ord)h
+Fq(c)p Fo(\()p Fq(x)p Fo(\))c Fv(2)15 b Fq(C)r FK(.)216
+1351 y(The)31 b(\002rst)h(tw)o(o)f(functions)j(described)g(belo)n(w)e
+(generate)i(c)o(yclic)e(codes)h(from)f(a)f(gi)n(v)o(en)h(generator)i
+(or)e(check)75 1464 y(polynomial.)f(All)23 b(c)o(yclic)h(codes)h(can)f
+(be)g(constructed)i(using)f(these)g(functions.)216 1577
+y(T)-7 b(w)o(o)50 b(of)h(the)g(Golay)g(codes)h(already)h(described)g
+(are)e(c)o(yclic)h(\(see)g Ft(BinaryGolayCode)j FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 3356 1578 a
+SDict begin H.S end
+ 3356 1578
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3537 1515 a
+SDict begin H.R end
+ 3537 1515 a 3537 1577 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end
+ 3537
+1577 a Black FK(\))d(and)75 1690 y Ft(TernaryGolayCode)34
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 875 1691 a
+SDict begin H.S end
+
+875 1691 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1056 1628 a
+SDict begin H.R end
+ 1056 1628
+a 1056 1690 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end
+ 1056 1690 a Black FK(\)\).)46 b(F)o(or)28
+b(e)o(xample,)i(the)g Fy(GU)m(A)-6 b(V)f(A)27 b FK(record)j(for)f(a)f
+(binary)j(Golay)e(code)h(contains)h(the)75 1803 y(generator)26
+b(polynomial:)p 75 1892 1648 4 v 1764 1897 a FF(Example)p
+2102 1892 V 75 1917 4 25 v 3747 1917 V 75 2017 4 100
+v 188 1987 a(gap>)44 b(C)e(:=)h(BinaryGolayCode\(\);)p
+3747 2017 V 75 2116 V 188 2086 a(a)g(cyclic)h([23,12,7]3)i(binary)e
+(Golay)g(code)g(over)g(GF\(2\))p 3747 2116 V 75 2216
+V 188 2186 a(gap>)g(NamesOfComponents\(C\);)p 3747 2216
+V 75 2316 V 188 2286 a([)f("LeftActingDomain",)48 b("GeneratorsOfLeftO)
+q(per)q(ato)q(rAd)q(dit)q(ive)q(Gro)q(up")q(,)g("WordLength",)p
+3747 2316 V 75 2415 V 273 2385 a("GeneratorMat",)f("GeneratorPol",)h
+("Dimension",)e("Redundancy",)h("Size",)d("name",)p 3747
+2415 V 75 2515 V 273 2485 a("lowerBoundMinimumDis)q(tan)q(ce")q(,)k
+("upperBoundMinimum)q(Dis)q(tan)q(ce")q(,)g("WeightDistributio)q(n",)p
+3747 2515 V 75 2614 V 273 2584 a("boundsCoveringRadius)q(",)h
+("MinimumWeightOfGene)q(rat)q(ors)q(",)p 3747 2614 V
+75 2714 V 273 2684 a("UpperBoundOptimalMin)q(imu)q(mDi)q(sta)q(nc)q(e")
+g(])p 3747 2714 V 75 2814 V 188 2784 a(gap>)44 b(C!.GeneratorPol;)p
+3747 2814 V 75 2913 V 188 2883 a(x_1\21011+x_1\21010+x_1\2106+)q(x_1)q
+(\2105+)q(x_1)q(\2104+)q(x_)q(1\2102)q(+Z\()q(2\)\210)q(0)p
+3747 2913 V 75 2938 4 25 v 3747 2938 V 75 2941 3675 4
+v 75 3121 a FK(Then)26 b(functions)j(that)e(generate)i(c)o(yclic)e
+(codes)h(from)e(a)g(prescribed)j(set)e(of)f(roots)i(of)e(the)h
+(generator)i(polynomial)75 3234 y(are)22 b(described,)i(including)h
+(the)c(BCH)f(codes)j(\(see)f Ft(RootsCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2166 3235 a
+SDict begin H.S end
+ 2166 3235 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2347 3172 a
+SDict begin H.R end
+ 2347 3172 a 2347 3234 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end
+ 2347 3234 a Black
+FK(\),)f Ft(BCHCode)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2798 3235 a
+SDict begin H.S end
+ 2798 3235 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2979
+3172 a
+SDict begin H.R end
+ 2979 3172 a 2979 3234 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.4) cvn H.B /ANN pdfmark end
+ 2979 3234 a Black FK(\),)g
+Ft(ReedSolomonCode)75 3346 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 3347 a
+SDict begin H.S end
+ 105 3347 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 3284 a
+SDict begin H.R end
+ 286 3284 a 286 3346 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.5) cvn H.B /ANN pdfmark end
+ 286 3346 a Black FK(\))h(and)g
+Ft(QRCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+825 3347 a
+SDict begin H.S end
+ 825 3347 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 1006
+3284 a
+SDict begin H.R end
+ 1006 3284 a 1006 3346 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.6) cvn H.B /ANN pdfmark end
+ 1006 3346 a Black FK(\)\).)216
+3459 y(Finally)56 b(we)e(describe)i(the)f(tri)n(vial)h(codes)g(\(see)f
+Ft(WholeSpaceCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2672 3460 a
+SDict begin H.S end
+ 2672 3460 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 2898
+3397 a
+SDict begin H.R end
+ 2898 3397 a 2898 3459 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.10) cvn H.B /ANN pdfmark end
+ 2898 3459 a Black FK(\),)64
+b Ft(NullCode)56 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3469 3460 a
+SDict begin H.S end
+ 3469 3460 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 3695
+3397 a
+SDict begin H.R end
+ 3695 3397 a 3695 3459 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.11) cvn H.B /ANN pdfmark end
+ 3695 3459 a Black FK(\),)75
+3572 y Ft(RepetitionCode)73 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 822 3573 a
+SDict begin H.S end
+ 822 3573 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5.12)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1048 3510 a
+SDict begin H.R end
+ 1048 3510 a 1048 3572 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.12) cvn H.B /ANN pdfmark end
+ 1048 3572 a Black
+FK(\)\),)81 b(and)70 b(the)f(command)g Ft(CyclicCodes)j
+FK(which)e(lists)f(all)g(c)o(yclic)h(codes)75 3685 y(\()p
+Ft(CyclicCodes)27 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+668 3686 a
+SDict begin H.S end
+ 668 3686 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 894
+3623 a
+SDict begin H.R end
+ 894 3623 a 894 3685 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.13) cvn H.B /ANN pdfmark end
+ 894 3685 a Black FK(\)\).)75
+3833 y
+SDict begin H.S end
+ 75 3833 a 75 3833 a
+SDict begin 13.6 H.A end
+ 75 3833 a 75 3833 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.1) cvn H.B /DEST pdfmark end
+ 75 3833
+a 100 x FJ(5.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorP)n(olCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4107 a Fs(\006)22 b
+Ft(GeneratorPolCode\()53 b(g,)47 b(n[,)g(name,])i(F)e(\))1703
+b Fr(\(function\))p Black 216 4333 a Ft(GeneratorPolCode)32
+b FK(creates)d(a)e(c)o(yclic)h(code)h(with)e(a)g(generator)j
+(polynomial)f Ft(g)q FK(,)e(w)o(ord)g(length)i Ft(n)p
+FK(,)f(o)o(v)o(er)f Ft(F)p FK(.)75 4446 y Ft(name)d FK(can)g(contain)h
+(a)f(short)g(description)j(of)c(the)h(code.)216 4559
+y(If)i Ft(g)f FK(is)h(not)g(a)g(di)n(visor)h(of)f Fq(x)1082
+4526 y Fm(n)1134 4559 y Fv(\000)14 b FK(1,)25 b(it)g(cannot)j(be)e(a)f
+(generator)k(polynomial.)38 b(In)26 b(that)h(case,)f(a)g(code)h(is)f
+(created)75 4672 y(with)f(generator)k(polynomial)f Fq(gcd)5
+b Fo(\()p Fq(g)o Fp(;)10 b Fq(x)1358 4639 y Fm(n)1411
+4672 y Fv(\000)j FK(1)p Fo(\))p FK(,)26 b(i.e.)35 b(the)26
+b(greatest)h(common)f(di)n(visor)h(of)f Ft(g)f FK(and)h
+Fq(x)3199 4639 y Fm(n)3251 4672 y Fv(\000)13 b FK(1.)35
+b(This)25 b(is)h(a)75 4784 y(v)n(alid)e(generator)i(polynomial)g(that)e
+(generates)i(the)e(ideal)h Fo(\()p Fq(g)p Fo(\))p FK(.)j(See)23
+b Ft(Generating)50 b(Cyclic)f(Codes)25 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3379 4785 a
+SDict begin H.S end
+ 3379 4785 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3492 4722 a
+SDict begin H.R end
+ 3492 4722 a 3492 4784 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end
+ 3492 4784 a Black
+FK(\).)p 75 4900 1648 4 v 1764 4905 a FF(Example)p 2102
+4900 V 75 4925 4 25 v 3747 4925 V 75 5024 4 100 v 188
+4995 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(P:=)f
+(x\2102+1;)p 3747 5024 V 75 5124 V 188 5094 a(Z\(2\)\2100+x\2102)p
+3747 5124 V 75 5224 V 188 5194 a(gap>)h(C1)f(:=)g(GeneratorPolCode\(P,)
+48 b(7,)c(GF\(2\)\);)p 3747 5224 V 75 5323 V 188 5293
+a(a)f(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i
+(polynomial)h(over)d(GF\(2\))p 3747 5323 V 75 5423 V
+188 5393 a(gap>)h(GeneratorPol\()i(C1)d(\);)p 3747 5423
+V 75 5523 V 188 5493 a(Z\(2\)\2100+x)p 3747 5523 V 75
+5622 V 188 5592 a(gap>)h(C2)f(:=)g(GeneratorPolCode\()48
+b(x+1,)c(7,)f(GF\(2\)\);)p 3747 5622 V Black Black eop
+end end
+%%Page: 76 76
+TeXDict begin HPSdict begin 76 75 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.76) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(76)p Black 75 428 4 100 v 188 399 a FF(a)43
+b(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i(polynomial)h
+(over)d(GF\(2\))p 3747 428 V 75 528 V 188 498 a(gap>)h(GeneratorPol\()i
+(C2)d(\);)p 3747 528 V 75 628 V 188 598 a(Z\(2\)\2100+x)p
+3747 628 V 75 653 4 25 v 3747 653 V 75 656 3675 4 v 75
+787 a
+SDict begin H.S end
+ 75 787 a 75 787 a
+SDict begin 13.6 H.A end
+ 75 787 a 75 787 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.2) cvn H.B /DEST pdfmark end
+ 75 787 a 117
+x FJ(5.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckP)n(olCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1078 a Fs(\006)22 b
+Ft(CheckPolCode\()51 b(h,)d(n[,)f(name,])i(F)d(\))1889
+b Fr(\(function\))p Black 216 1304 a Ft(CheckPolCode)28
+b FK(creates)d(a)f(c)o(yclic)h(code)g(with)f(a)f(check)i(polynomial)i
+Ft(h)p FK(,)c(w)o(ord)h(length)i Ft(n)p FK(,)d(o)o(v)o(er)h
+Ft(F)q FK(.)29 b Ft(name)c FK(can)75 1417 y(contain)g(a)e(short)i
+(description)i(of)c(the)h(code)g(\(as)g(a)f(string\).)216
+1530 y(If)h Ft(h)f FK(is)g(not)h(a)f(di)n(visor)j(of)d
+Fq(x)1066 1497 y Fm(n)1117 1530 y Fv(\000)13 b FK(1,)22
+b(it)i(cannot)h(be)e(a)h(check)h(polynomial.)31 b(In)24
+b(that)g(case,)g(a)f(code)i(is)e(created)i(with)75 1643
+y(check)32 b(polynomial)i Fq(gcd)5 b Fo(\()p Fq(h)p Fp(;)10
+b Fq(x)1052 1610 y Fm(n)1107 1643 y Fv(\000)15 b FK(1)p
+Fo(\))p FK(,)33 b(i.e.)51 b(the)31 b(greatest)i(common)f(di)n(visor)g
+(of)f Ft(h)g FK(and)g Fq(x)2958 1610 y Fm(n)3012 1643
+y Fv(\000)15 b FK(1.)51 b(This)31 b(is)g(a)f(v)n(alid)75
+1755 y(check)25 b(polynomial)h(that)e(yields)h(the)e(same)h(elements)h
+(as)e(the)h(ideal)h Fo(\()p Fq(h)p Fo(\))p FK(.)k(See)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2588 1756 a
+SDict begin H.S end
+ 2588 1756
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2701 1693 a
+SDict begin H.R end
+ 2701 1693 a 2701 1755 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end
+ 2701
+1755 a Black FK(.)p 75 1873 1648 4 v 1764 1878 a FF(Example)p
+2102 1873 V 75 1898 4 25 v 3747 1898 V 75 1997 4 100
+v 188 1967 a(gap>)86 b(x:=)43 b(Indeterminate\()k(GF\(3\))d(\);;)g(P:=)
+f(x\2102+2;)p 3747 1997 V 75 2097 V 188 2067 a(-Z\(3\)\2100+x_1\2102)p
+3747 2097 V 75 2197 V 188 2167 a(gap>)h(H)e(:=)h(CheckPolCode\(P,)48
+b(7,)43 b(GF\(3\)\);)p 3747 2197 V 75 2296 V 188 2266
+a(a)g(cyclic)h([7,1,7]4)h(code)f(defined)g(by)g(check)g(polynomial)h
+(over)f(GF\(3\))p 3747 2296 V 75 2396 V 188 2366 a(gap>)g
+(CheckPol\(H\);)p 3747 2396 V 75 2496 V 188 2466 a(-Z\(3\)\2100+x_1)p
+3747 2496 V 75 2595 V 188 2565 a(gap>)g(Gcd\(P,)g
+(X\(GF\(3\)\)\2107-1\);)p 3747 2595 V 75 2695 V 188 2665
+a(-Z\(3\)\2100+x_1)p 3747 2695 V 75 2720 4 25 v 3747
+2720 V 75 2723 3675 4 v 75 2855 a
+SDict begin H.S end
+ 75 2855 a 75 2855 a
+SDict begin 13.6 H.A end
+
+75 2855 a 75 2855 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.3) cvn H.B /DEST pdfmark end
+ 75 2855 a 116 x FJ(5.5.3)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(RootsCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3145 a Fs(\006)22 b Ft(RootsCode\()50 b(n,)d(list)h(\))2399
+b Fr(\(function\))p Black 216 3371 a FK(This)26 b(is)h(the)f
+(generalization)31 b(of)c(the)f(BCH,)f(Reed-Solomon)j(and)f(quadratic)i
+(residue)f(codes)f(\(see)g Ft(BCHCode)75 3484 y FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 105 3485 a
+SDict begin H.S end
+ 105 3485
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.4)p 0.0236 0.0894 0.6179
+TeXcolorrgb 286 3422 a
+SDict begin H.R end
+ 286 3422 a 286 3484 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.4) cvn H.B /ANN pdfmark end
+ 286 3484
+a Black FK(\),)e Ft(ReedSolomonCode)30 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1114 3485 a
+SDict begin H.S end
+ 1114 3485 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1295 3422 a
+SDict begin H.R end
+ 1295 3422 a 1295 3484 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.5) cvn H.B /ANN pdfmark end
+ 1295 3484 a Black
+FK(\))25 b(and)g Ft(QRCode)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1837 3485 a
+SDict begin H.S end
+ 1837 3485 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2018 3422 a
+SDict begin H.R end
+ 2018 3422 a 2018 3484 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.6) cvn H.B /ANN pdfmark end
+ 2018 3484 a Black
+FK(\)\).)34 b(The)24 b(user)h(can)h(gi)n(v)o(e)e(a)h(length)h(of)f(the)
+g(code)g Ft(n)g FK(and)75 3597 y(a)i(prescribed)i(set)f(of)f(zeros.)40
+b(The)27 b(ar)n(gument)i Ft(list)e FK(must)g(be)g(a)g(v)n(alid)h(list)f
+(of)g(primiti)n(v)o(e)h Fq(n)3002 3564 y Fm(t)5 b(h)3089
+3597 y FK(roots)29 b(of)e(unity)h(in)f(a)75 3710 y(splitting)h(\002eld)
+e Fq(GF)7 b Fo(\()p Fq(q)794 3677 y Fm(m)847 3710 y Fo(\))p
+FK(.)35 b(The)26 b(resulting)i(code)f(will)f(be)g(o)o(v)o(er)g(the)g
+(\002eld)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)36 b(The)26
+b(function)i(will)e(return)h(the)75 3823 y(lar)n(gest)f(possible)g(c)o
+(yclic)f(code)g(for)g(which)f(the)g(list)h Ft(list)g
+FK(is)f(a)f(subset)j(of)e(the)g(roots)h(of)f(the)h(code.)31
+b(From)23 b(this)i(list,)75 3935 y Fy(GU)m(A)-6 b(V)f(A)22
+b FK(calculates)k(the)e(entire)g(set)g(of)g(roots.)216
+4048 y(This)31 b(command)g(can)g(also)h(be)f(called)h(with)e(the)h
+(syntax)i Ft(RootsCode\()50 b(n,)d(list,)h(q)f(\))p FK(.)j(In)30
+b(this)i(second)75 4161 y(form,)e(the)g(second)h(ar)n(gument)g(is)e(a)f
+(list)i(of)f(inte)o(gers,)j(ranging)f(from)e(0)g(to)g
+Fq(n)15 b Fv(\000)g FK(1.)45 b(The)29 b(resulting)i(code)f(will)f(be)75
+4274 y(o)o(v)o(er)23 b(a)f(\002eld)h Fq(GF)7 b Fo(\()p
+Fq(q)p Fo(\))p FK(.)29 b Fy(GU)m(A)-6 b(V)f(A)20 b FK(calculates)26
+b(a)c(primiti)n(v)o(e)i Fq(n)1928 4241 y Fm(t)5 b(h)2011
+4274 y FK(root)24 b(of)f(unity)-6 b(,)24 b Fu(a)p FK(,)e(in)h(the)g(e)o
+(xtension)i(\002eld)e(of)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p
+FK(.)75 4387 y(It)23 b(uses)i(the)e(set)h(of)g(the)f(po)n(wers)h(of)g
+Fu(a)f FK(in)g(the)h(list)g(as)g(a)f(prescribed)j(set)e(of)f(zeros.)p
+75 4501 1648 4 v 1764 4506 a FF(Example)p 2102 4501 V
+75 4526 4 25 v 3747 4526 V 75 4626 4 100 v 188 4596 a(gap>)44
+b(a)e(:=)h(PrimitiveUnityRoot\()49 b(3,)43 b(14)g(\);)p
+3747 4626 V 75 4726 V 188 4696 a(Z\(3\2106\)\21052)p
+3747 4726 V 75 4825 V 188 4795 a(gap>)h(C1)f(:=)g(RootsCode\()i(14,)f
+([)e(a\2100,)i(a,)f(a\2103)h(])e(\);)p 3747 4825 V 75
+4925 V 188 4895 a(a)h(cyclic)h([14,7,3..6]3..7)j(code)d(defined)h(by)e
+(roots)h(over)g(GF\(3\))p 3747 4925 V 75 5024 V 188 4995
+a(gap>)g(MinimumDistance\()j(C1)c(\);)p 3747 5024 V 75
+5124 V 188 5094 a(4)p 3747 5124 V 75 5224 V 188 5194
+a(gap>)h(b)e(:=)h(PrimitiveUnityRoot\()49 b(2,)43 b(15)g(\);)p
+3747 5224 V 75 5323 V 188 5293 a(Z\(2\2104\))p 3747 5323
+V 75 5423 V 188 5393 a(gap>)h(C2)f(:=)g(RootsCode\()i(15,)f([)e(b,)h
+(b\2102,)h(b\2103,)g(b\2104)f(])g(\);)p 3747 5423 V 75
+5523 V 188 5493 a(a)g(cyclic)h([15,7,5]3..5)i(code)e(defined)h(by)e
+(roots)h(over)g(GF\(2\))p 3747 5523 V 75 5622 V 188 5592
+a(gap>)g(C2)f(=)f(BCHCode\()j(15,)f(5,)f(GF\(2\))h(\);)p
+3747 5622 V Black Black eop end end
+%%Page: 77 77
+TeXDict begin HPSdict begin 77 76 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.77) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(77)p Black 75 428 4 100 v 188 399 a FF(true)p
+3747 428 V 75 528 V 188 498 a(C3)43 b(:=)g(RootsCode\()j(4,)d([)f(1,)h
+(2)g(],)g(5)g(\);)p 3747 528 V 75 628 V 188 598 a(RootsOfCode\()j(C3)d
+(\);)p 3747 628 V 75 727 V 188 697 a(C3)g(=)g(ReedSolomonCode\()k(4,)c
+(3)g(\);)p 3747 727 V 75 827 V 3747 827 V 75 852 4 25
+v 3747 852 V 75 855 3675 4 v 75 1076 a
+SDict begin H.S end
+ 75 1076 a 75 1076
+a
+SDict begin 13.6 H.A end
+ 75 1076 a 75 1076 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.4) cvn H.B /DEST pdfmark end
+ 75 1076 a 117 x FJ(5.5.4)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(BCHCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1367 a Fs(\006)22 b Ft(BCHCode\()50 b(n[,)d(b,])h(delta,)g(F)f(\))
+2074 b Fr(\(function\))p Black 216 1593 a FK(The)30 b(function)j
+Ft(BCHCode)g FK(returns)f(a)f('Bose-Chaudhuri-Hock)o(engh)q(em)36
+b(code')c(\(or)f Fq(BCH)e(code)i FK(for)g(short\).)75
+1706 y(This)23 b(is)f(the)h(lar)n(gest)i(possible)g(c)o(yclic)f(code)f
+(of)g(length)h Ft(n)f FK(o)o(v)o(er)f(\002eld)h Ft(F)p
+FK(,)f(whose)i(generator)h(polynomial)g(has)e(zeros)1503
+1900 y Fq(a)1548 1863 y Fm(b)1586 1900 y Fp(;)10 b Fq(a)1666
+1863 y Fm(b)p Fk(+)p Fr(1)1789 1900 y Fp(;)g(:::;)g Fq(a)1979
+1863 y Fm(b)p Fk(+)p Fm(d)s(el)q(t)5 b(a)p Fh(\000)p
+Fr(2)2297 1900 y Fp(;)75 2095 y FK(where)20 b Fq(a)g
+FK(is)g(a)g(primiti)n(v)o(e)h Fq(n)913 2062 y Fm(t)5
+b(h)993 2095 y FK(root)21 b(of)f(unity)h(in)f(the)h(splitting)h
+(\002eld)e Fq(GF)7 b Fo(\()p Fq(q)2388 2062 y Fm(m)2441
+2095 y Fo(\))p FK(,)19 b Ft(b)h FK(is)g(an)g(inte)o(ger)i(0)17
+b Fv(\024)g Fq(b)g Fv(\024)g Fq(n)9 b Fv(\000)g Fq(d)c(el)s(t)h(a)j
+Fo(+)75 2207 y FK(1)25 b(and)h Fq(m)e FK(is)h(the)g(multiplicati)n(v)o
+(e)j(order)e(of)f Fq(q)g FK(modulo)h Ft(n)q FK(.)32 b(\(The)25
+b(inte)o(gers)i Fv(f)p Fq(b)p Fp(;)10 b(:::;)g Fq(b)j
+Fo(+)g Fq(d)5 b(el)s(t)h(a)13 b Fv(\000)g FK(2)p Fv(g)29
+b FK(typically)f(lie)d(in)75 2320 y(the)g(range)h Fv(f)p
+FK(1)p Fp(;)10 b(:::;)g Fq(n)j Fv(\000)g FK(1)p Fv(g)p
+FK(.\))35 b(Def)o(ault)25 b(v)n(alue)h(for)f Ft(b)f FK(is)h(1,)f
+(though)i(the)f(algorithm)i(allo)n(ws)e Fq(b)c Fo(=)g
+FK(0.)32 b(The)24 b(length)i Ft(n)e FK(of)75 2433 y(the)g(code)g(and)g
+(the)g(size)h Fq(q)e FK(of)g(the)h(\002eld)g(must)f(be)h(relati)n(v)o
+(ely)i(prime.)j(The)23 b(generator)j(polynomial)g(is)e(equal)g(to)g
+(the)75 2546 y(least)g(common)g(multiple)h(of)f(the)f(minimal)h
+(polynomials)i(of)1503 2741 y Fq(a)1548 2703 y Fm(b)1586
+2741 y Fp(;)10 b Fq(a)1666 2703 y Fm(b)p Fk(+)p Fr(1)1789
+2741 y Fp(;)g(:::;)g Fq(a)1979 2703 y Fm(b)p Fk(+)p Fm(d)s(el)q(t)5
+b(a)p Fh(\000)p Fr(2)2297 2741 y Fp(:)75 2935 y FK(The)23
+b(set)h(of)f(zeroes)i(of)f(the)f(generator)j(polynomial)g(is)e(equal)g
+(to)g(the)g(union)g(of)g(the)g(sets)1664 3130 y Fv(f)p
+Fq(a)1754 3092 y Fm(x)1812 3130 y Fv(j)f Fq(x)e Fv(2)14
+b Fq(C)2055 3144 y Fm(k)2090 3130 y Fv(g)p Fp(;)75 3324
+y FK(where)i Fq(C)371 3338 y Fm(k)425 3324 y FK(is)k(the)h
+Fq(k)676 3291 y Fm(t)5 b(h)756 3324 y FK(c)o(yclotomic)22
+b(coset)g(of)e Fq(q)g FK(modulo)i Fq(n)e FK(and)g Fq(b)e
+Fv(\024)f Fq(k)i Fv(\024)e Fq(b)10 b Fo(+)g Fq(d)5 b(el)s(t)h(a)k
+Fv(\000)g FK(2)20 b(\(see)h Ft(CyclotomicCosets)75 3437
+y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3438 a
+SDict begin H.S end
+
+105 3438 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 331 3375 a
+SDict begin H.R end
+ 331 3375
+a 331 3437 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.12) cvn H.B /ANN pdfmark end
+ 331 3437 a Black FK(\)\).)216 3550 y(Special)30
+b(cases)h(are)e Fq(b)24 b Fo(=)f FK(1)29 b(\(resulting)j(codes)f(are)e
+(called)i('narro)n(w-sense')h(BCH)c(codes\),)k(and)e
+Fq(n)24 b Fo(=)f Fq(q)3552 3517 y Fm(m)3619 3550 y Fv(\000)15
+b FK(1)75 3663 y(\(kno)n(wn)25 b(as)g('primiti)n(v)o(e')h(BCH)c
+(codes\).)33 b Fy(GU)m(A)-6 b(V)f(A)23 b FK(calculates)k(the)e(lar)n
+(gest)i(v)n(alue)e(of)f Fq(d)29 b FK(for)c(which)g(the)g(BCH)d(code)75
+3776 y(with)k(designed)j(distance)g Fq(d)i FK(coincides)e(with)d(the)h
+(BCH)d(code)k(with)e(designed)j(distance)f Ft(delta)r
+FK(.)37 b(This)26 b(distance)75 3889 y Fq(d)33 b FK(is)28
+b(called)h(the)g Fq(Bose)f(distance)j FK(of)d(the)g(code.)44
+b(The)28 b(true)h(minimum)f(distance)i(of)f(the)f(code)h(is)f(greater)i
+(than)f(or)75 4002 y(equal)c(to)e(the)h(Bose)f(distance.)216
+4114 y(Printed)h(are)g(the)g(designed)i(distance)g(\(to)d(be)h
+(precise,)h(the)f(Bose)f(distance\))j Fq(d)5 b FK(,)23
+b(and)h(the)f(starting)j(po)n(wer)e Fq(b)p FK(.)216 4227
+y(The)f(Sugiyama)i(decoding)h(algorithm)f(has)f(been)g(implemented)i
+(for)d(this)h(code)h(\(see)f Ft(Decode)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3312 4228 a
+SDict begin H.S end
+ 3312 4228 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3538 4165 a
+SDict begin H.R end
+ 3538 4165 a 3538 4227 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end
+ 3538 4227 a Black
+FK(\)\).)p 75 4340 1648 4 v 1764 4345 a FF(Example)p
+2102 4340 V 75 4365 4 25 v 3747 4365 V 75 4465 4 100
+v 188 4435 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(3,)g(5,)g(GF\(2\))h
+(\);)p 3747 4465 V 75 4564 V 188 4534 a(a)f(cyclic)h([15,5,7]5)h(BCH)f
+(code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p 3747 4564
+V 75 4664 V 188 4634 a(gap>)g(DesignedDistance\()k(C1)43
+b(\);)p 3747 4664 V 75 4764 V 188 4734 a(7)p 3747 4764
+V 75 4863 V 188 4833 a(gap>)h(C2)f(:=)g(BCHCode\()i(23,)e(2,)g(GF\(2\))
+h(\);)p 3747 4863 V 75 4963 V 188 4933 a(a)f(cyclic)h([23,12,5..7]3)j
+(BCH)c(code,)h(delta=5,)h(b=1)f(over)f(GF\(2\))p 3747
+4963 V 75 5062 V 188 5033 a(gap>)h(DesignedDistance\()k(C2)43
+b(\);)p 3747 5062 V 75 5162 V 188 5132 a(5)p 3747 5162
+V 75 5262 V 188 5232 a(gap>)h(MinimumDistance\(C2\);)p
+3747 5262 V 75 5361 V 188 5331 a(7)p 3747 5361 V 75 5386
+4 25 v 3747 5386 V 75 5389 3675 4 v 75 5592 a FK(See)23
+b Ft(RootsCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+699 5593 a
+SDict begin H.S end
+ 699 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 880
+5530 a
+SDict begin H.R end
+ 880 5530 a 880 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end
+ 880 5592 a Black FK(\))e(for)g(a)f(more)g
+(general)j(construction.)p Black Black eop end end
+%%Page: 78 78
+TeXDict begin HPSdict begin 78 77 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.78) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(78)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.5) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.5.5)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(ReedSolomonCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(ReedSolomonCode\()53 b(n,)47
+b(d)f(\))2260 b Fr(\(function\))p Black 216 799 a Ft(ReedSolomonCode)35
+b FK(returns)d(a)d('Reed-Solomon)j(code')g(of)e(length)h
+Ft(n)q FK(,)g(designed)h(distance)g Ft(d)q FK(.)47 b(This)30
+b(code)75 912 y(is)e(a)g(primiti)n(v)o(e)h(narro)n(w-sense)h(BCH)d
+(code)i(o)o(v)o(er)f(the)g(\002eld)g Fq(GF)7 b Fo(\()p
+Fq(q)p Fo(\))p FK(,)29 b(where)g Fq(q)23 b Fo(=)f Fq(n)14
+b Fo(+)g FK(1.)43 b(The)28 b(dimension)i(of)e(an)75 1024
+y(RS)j(code)j(is)f Fq(n)16 b Fv(\000)g Fq(d)21 b Fo(+)16
+b FK(1.)57 b(According)35 b(to)d(the)i(Singleton)g(bound)h(\(see)e
+Ft(UpperBoundSingleto)q(n)38 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3364 1025 a
+SDict begin H.S end
+ 3364 1025 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3545 962 a
+SDict begin H.R end
+ 3545 962 a 3545 1024 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end
+ 3545 1024 a Black FK(\)\))c(the)75
+1137 y(dimension)28 b(cannot)f(be)e(greater)i(than)f(this,)h(so)e(the)h
+(true)g(minimum)f(distance)j(of)e(an)f(RS)f(code)i(is)g(equal)g(to)g
+Ft(d)f FK(and)75 1250 y(the)f(code)g(is)g(maximum)f(distance)j
+(separable)g(\(see)e Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2204 1251 a
+SDict begin H.S end
+ 2204 1251 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2385 1188 a
+SDict begin H.R end
+ 2385 1188 a 2385 1250 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end
+ 2385 1250 a Black
+FK(\)\).)p 75 1373 1648 4 v 1764 1378 a FF(Example)p
+2102 1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100
+v 188 1468 a(gap>)44 b(C1)f(:=)g(ReedSolomonCode\()k(3,)c(2)g(\);)p
+3747 1497 V 75 1597 V 188 1567 a(a)g(cyclic)h([3,2,2]1)h(Reed-Solomon)h
+(code)e(over)g(GF\(4\))p 3747 1597 V 75 1697 V 188 1667
+a(gap>)g(IsCyclicCode\(C1\);)p 3747 1697 V 75 1796 V
+188 1766 a(true)p 3747 1796 V 75 1896 V 188 1866 a(gap>)g(C2)f(:=)g
+(ReedSolomonCode\()k(4,)c(3)g(\);)p 3747 1896 V 75 1996
+V 188 1966 a(a)g(cyclic)h([4,2,3]2)h(Reed-Solomon)h(code)e(over)g
+(GF\(5\))p 3747 1996 V 75 2095 V 188 2065 a(gap>)g(RootsOfCode\()i(C2)d
+(\);)p 3747 2095 V 75 2195 V 188 2165 a([)g(Z\(5\),)h(Z\(5\)\2102)g(])p
+3747 2195 V 75 2294 V 188 2265 a(gap>)g(IsMDSCode\(C2\);)p
+3747 2294 V 75 2394 V 188 2364 a(true)p 3747 2394 V 75
+2419 4 25 v 3747 2419 V 75 2422 3675 4 v 75 2635 a FK(See)23
+b Ft(GeneralizedReedSol)q(omo)q(nCo)q(de)29 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1487 2636 a
+SDict begin H.S end
+ 1487 2636
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1668 2573 a
+SDict begin H.R end
+ 1668 2573 a 1668 2635 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end
+ 1668
+2635 a Black FK(\))24 b(for)g(a)f(more)h(general)h(construction.)75
+2787 y
+SDict begin H.S end
+ 75 2787 a 75 2787 a
+SDict begin 13.6 H.A end
+ 75 2787 a 75 2787 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.6) cvn H.B /DEST pdfmark end
+ 75 2787
+a 97 x FJ(5.5.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(QRCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3058 a Fs(\006)d Ft(QRCode\()49
+b(n,)e(F)g(\))2677 b Fr(\(function\))p Black 216 3284
+a Ft(QRCode)26 b FK(returns)f(a)f(quadratic)i(residue)g(code.)31
+b(If)24 b Ft(F)g FK(is)f(a)h(\002eld)g Fq(GF)7 b Fo(\()p
+Fq(q)p Fo(\))p FK(,)24 b(then)h Fq(q)e FK(must)h(be)g(a)g(quadratic)i
+(residue)75 3397 y(modulo)31 b Ft(n)q FK(.)49 b(That)30
+b(is,)i(an)e Fq(x)g FK(e)o(xists)i(with)e Fq(x)1464 3364
+y Fr(2)1526 3397 y Fv(\021)24 b Fq(q)91 b Fo(\()p FK(mod)21
+b Fq(n)p Fo(\))p FK(.)50 b(Both)30 b Ft(n)g FK(and)h
+Fq(q)f FK(must)h(be)f(primes.)50 b(Its)31 b(generator)75
+3510 y(polynomial)k(is)e(the)g(product)h(of)f(the)g(polynomials)i
+Fq(x)17 b Fv(\000)e Fq(a)1986 3477 y Fm(i)2009 3510 y
+FK(.)56 b Fq(a)32 b FK(is)h(a)f(primiti)n(v)o(e)i Fq(n)2735
+3477 y Fm(t)5 b(h)2828 3510 y FK(root)33 b(of)f(unity)-6
+b(,)36 b(and)e Fq(i)e FK(is)g(an)75 3623 y(inte)o(ger)25
+b(in)e(the)h(set)g(of)f(quadratic)j(residues)g(modulo)e
+Ft(n)q FK(.)p 75 3745 1648 4 v 1764 3750 a FF(Example)p
+2102 3745 V 75 3770 4 25 v 3747 3770 V 75 3870 4 100
+v 188 3840 a(gap>)44 b(C1)f(:=)g(QRCode\()h(7,)f(GF\(2\))h(\);)p
+3747 3870 V 75 3970 V 188 3940 a(a)f(cyclic)h([7,4,3]1)h(quadratic)g
+(residue)g(code)f(over)g(GF\(2\))p 3747 3970 V 75 4069
+V 188 4039 a(gap>)g(IsEquivalent\()i(C1,)e(HammingCode\()i(3,)d
+(GF\(2\))h(\))f(\);)p 3747 4069 V 75 4169 V 188 4139
+a(true)p 3747 4169 V 75 4268 V 188 4239 a(gap>)h(IsCyclicCode\(C1\);)p
+3747 4268 V 75 4368 V 188 4338 a(true)p 3747 4368 V 75
+4468 V 188 4438 a(gap>)g(IsCyclicCode\(HammingC)q(ode)q(\()k(3,)c
+(GF\(2\))g(\)\);)p 3747 4468 V 75 4567 V 188 4537 a(false)p
+3747 4567 V 75 4667 V 188 4637 a(gap>)g(C2)f(:=)g(QRCode\()h(11,)g
+(GF\(3\))g(\);)p 3747 4667 V 75 4767 V 188 4737 a(a)f(cyclic)h
+([11,6,4..5]2)i(quadratic)g(residue)f(code)e(over)h(GF\(3\))p
+3747 4767 V 75 4866 V 188 4836 a(gap>)g(C2)f(=)f(TernaryGolayCode\(\);)
+p 3747 4866 V 75 4966 V 188 4936 a(true)p 3747 4966 V
+75 5065 V 188 5036 a(gap>)i(Q1)f(:=)g(QRCode\()h(7,)f(GF\(2\)\);)p
+3747 5065 V 75 5165 V 188 5135 a(a)g(cyclic)h([7,4,3]1)h(quadratic)g
+(residue)g(code)f(over)g(GF\(2\))p 3747 5165 V 75 5265
+V 188 5235 a(gap>)g(P1:=AutomorphismGroup)q(\(Q1)q(\);)49
+b(IdGroup\(P1\);)p 3747 5265 V 75 5364 V 188 5334 a(Group\([)c
+(\(1,2\)\(5,7\),)h(\(2,3\)\(4,7\),)g(\(2,4\)\(5,6\),)g(\(3,5\)\(6,7\),)
+g(\(3,7\)\(5,6\))g(]\))p 3747 5364 V 75 5464 V 188 5434
+a([)d(168,)g(42)g(])p 3747 5464 V 75 5489 4 25 v 3747
+5489 V 75 5492 3675 4 v Black Black eop end end
+%%Page: 79 79
+TeXDict begin HPSdict begin 79 78 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.79) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(79)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.7) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.5.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(QQRCodeNC)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573
+a Fs(\006)22 b Ft(QQRCodeNC\()50 b(p)d(\))2677 b Fr(\(function\))p
+Black 216 799 a Ft(QQRCodeNC)52 b FK(is)d(the)g(same)h(as)f
+Ft(QQRCode)p FK(,)57 b(e)o(xcept)50 b(that)g(it)f(uses)h
+Ft(GeneratorMatCodeNC)55 b FK(instead)c(of)75 912 y Ft
+(GeneratorMatCode)p FK(.)75 1046 y
+SDict begin H.S end
+ 75 1046 a 75 1046
+a
+SDict begin 13.6 H.A end
+ 75 1046 a 75 1046 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.8) cvn H.B /DEST pdfmark end
+ 75 1046 a 115 x FJ(5.5.8)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(QQRCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1335 a Fs(\006)22 b Ft(QQRCode\()50 b(p)c(\))2770
+b Fr(\(function\))p Black 216 1561 a Ft(QQRCode)36 b
+FK(returns)g(a)d(quasi-quadratic)39 b(residue)d(code,)h(as)d(de\002ned)
+h(by)f(Proposition)j(2.2)c(in)h(Bazzi-Mittel)75 1674
+y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 1674 a
+SDict begin H.S end
+ 105
+1674 a 0.0236 0.6179 0.0894 TeXcolorrgb FK(BMIT)p 0.0236 0.6179 0.0894
+TeXcolorrgb 333 1613 a
+SDict begin H.R end
+ 333 1613 a 333 1674 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.BM03) cvn H.B /ANN pdfmark end
+ 333 1674
+a Black FK(].)28 b(The)23 b(parameter)i Ft(p)e FK(must)g(be)h(a)f
+(prime.)29 b(Its)24 b(generator)i(matrix)e(has)f(the)h(block)h(form)e
+Fq(G)d Fo(=)g(\()p Fq(Q)p Fp(;)10 b Fq(N)c Fo(\))p FK(.)27
+b(Here)75 1787 y Fq(Q)20 b FK(is)h(a)28 b Fq(p)p Fv(\002)21
+b FK(circulant)i(matrix)f(whose)g(top)f(ro)n(w)g(is)g
+Fo(\()p FK(0)p Fp(;)10 b Fq(x)1828 1801 y Fr(1)1867 1787
+y Fp(;)g(:::;)g Fq(x)2057 1801 y Fm(p)p Fh(\000)p Fr(1)2181
+1787 y Fo(\))p FK(,)20 b(where)i Fq(x)2542 1801 y Fm(i)2583
+1787 y Fo(=)c FK(1)j(if)g(and)h(only)g(if)f Fq(i)g FK(is)g(a)g
+(quadratic)75 1900 y(residue)k(mod)30 b Fq(p)p FK(,)22
+b(and)i Fq(N)j FK(is)c(a)30 b Fq(p)p Fv(\002)22 b FK(circulant)k
+(matrix)e(whose)f(top)h(ro)n(w)e(is)h Fo(\()p FK(0)p
+Fp(;)10 b Fq(y)2567 1914 y Fr(1)2606 1900 y Fp(;)g(:::;)g
+Fq(y)2796 1914 y Fm(p)p Fh(\000)p Fr(1)2920 1900 y Fo(\))p
+FK(,)22 b(where)i Fq(x)3285 1914 y Fm(i)3320 1900 y Fo(+)12
+b Fq(y)3443 1914 y Fm(i)3486 1900 y Fo(=)19 b FK(1)k(for)75
+2012 y(all)h Fq(i)p FK(.)k(\(In)c(f)o(act,)f(this)h(matrix)h(can)e(be)h
+(reco)o(v)o(ered)h(as)f(the)g(component)h Ft(DoublyCirculant)k
+FK(of)23 b(the)h(code.\))p 75 2135 1648 4 v 1764 2140
+a FF(Example)p 2102 2135 V 75 2160 4 25 v 3747 2160 V
+75 2260 4 100 v 188 2230 a(gap>)44 b(C1)f(:=)g(QQRCode\()i(7\);)p
+3747 2260 V 75 2359 V 188 2329 a(a)e(linear)h([14,7,1..4]3..5)j(code)d
+(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p
+3747 2359 V 75 2459 V 188 2429 a(gap>)h(G1:=GeneratorMat\(C1\);)q(;)p
+3747 2459 V 75 2558 V 188 2529 a(gap>)g(Display\(G1\);)p
+3747 2558 V 75 2658 V 230 2628 a(.)f(1)g(1)f(.)h(1)g(.)f(.)h(.)g(.)f(.)
+h(1)g(.)f(1)h(1)p 3747 2658 V 75 2758 V 230 2728 a(1)g(.)g(1)f(1)h(1)g
+(.)f(.)h(.)g(.)f(1)h(1)g(1)f(.)h(1)p 3747 2758 V 75 2857
+V 230 2827 a(.)g(.)g(.)f(1)h(1)g(.)f(1)h(.)g(1)f(1)h(.)g(.)f(.)h(1)p
+3747 2857 V 75 2957 V 230 2927 a(.)g(.)g(1)f(.)h(1)g(1)f(1)h(1)g(.)f(1)
+h(.)g(.)f(1)h(1)p 3747 2957 V 75 3057 V 230 3027 a(.)g(.)g(.)f(.)h(.)g
+(.)f(.)h(1)g(.)f(.)h(1)g(1)f(1)h(.)p 3747 3057 V 75 3156
+V 230 3126 a(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(1)g(1)f(.)h(1)p
+3747 3156 V 75 3256 V 230 3226 a(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.)
+h(.)g(1)f(1)h(1)p 3747 3256 V 75 3355 V 188 3326 a(gap>)h
+(Display\(C1!.DoublyCir)q(cul)q(ant)q(\);)p 3747 3355
+V 75 3455 V 230 3425 a(.)f(1)g(1)f(.)h(1)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f
+(1)h(1)p 3747 3455 V 75 3555 V 230 3525 a(1)g(1)g(.)f(1)h(.)g(.)f(.)h
+(.)g(.)f(1)h(.)g(1)f(1)h(.)p 3747 3555 V 75 3654 V 230
+3624 a(1)g(.)g(1)f(.)h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)f(.)h(.)p
+3747 3654 V 75 3754 V 230 3724 a(.)g(1)g(.)f(.)h(.)g(1)f(1)h(1)g(.)f(1)
+h(1)g(.)f(.)h(.)p 3747 3754 V 75 3854 V 230 3824 a(1)g(.)g(.)f(.)h(1)g
+(1)f(.)h(.)g(1)f(1)h(.)g(.)f(.)h(1)p 3747 3854 V 75 3953
+V 230 3923 a(.)g(.)g(.)f(1)h(1)g(.)f(1)h(1)g(1)f(.)h(.)g(.)f(1)h(.)p
+3747 3953 V 75 4053 V 230 4023 a(.)g(.)g(1)f(1)h(.)g(1)f(.)h(1)g(.)f(.)
+h(.)g(1)f(.)h(1)p 3747 4053 V 75 4152 V 188 4123 a(gap>)h
+(MinimumDistance\(C1\);)p 3747 4152 V 75 4252 V 188 4222
+a(4)p 3747 4252 V 75 4352 V 188 4322 a(gap>)g(C2)f(:=)g(QQRCode\()i
+(29\);)e(MinimumDistance\(C2)q(\);)p 3747 4352 V 75 4451
+V 188 4421 a(a)g(linear)h([58,28,1..14]8..29)k(code)c(defined)h(by)e
+(generator)i(matrix)g(over)e(GF\(2\))p 3747 4451 V 75
+4551 V 188 4521 a(12)p 3747 4551 V 75 4651 V 188 4621
+a(gap>)h(Aut2:=AutomorphismGro)q(up\()q(C2\))q(;)49 b(IdGroup\(Aut2\);)
+p 3747 4651 V 75 4750 V 188 4720 a([)43 b(permutation)j(group)e(of)f
+(size)g(812)h(with)g(4)e(generators)k(])p 3747 4750 V
+75 4850 V 188 4820 a([)d(812,)g(7)g(])p 3747 4850 V 75
+4875 4 25 v 3747 4875 V 75 4878 3675 4 v 75 5111 a
+SDict begin H.S end
+ 75
+5111 a 75 5111 a
+SDict begin 13.6 H.A end
+ 75 5111 a 75 5111 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.9) cvn H.B /DEST pdfmark end
+ 75 5111 a 116 x
+FJ(5.5.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Fir)n(eCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5401 a Fs(\006)22 b
+Ft(FireCode\()50 b(g,)d(b)g(\))2584 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 80 80
+TeXDict begin HPSdict begin 80 79 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.80) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(80)p Black 216 399 a Ft(FireCode)30 b FK(constructs)g(a)d
+(\(binary\))j(Fire)d(code.)41 b Ft(g)27 b FK(is)h(a)f(primiti)n(v)o(e)h
+(polynomial)i(of)d(de)o(gree)i Fq(m)p FK(,)e(and)h(a)f(f)o(actor)75
+511 y(of)e Fq(x)215 478 y Fm(r)261 511 y Fv(\000)13 b
+FK(1.)34 b Ft(b)25 b FK(an)h(inte)o(ger)g(0)c Fv(\024)f
+Fq(b)h Fv(\024)f Fq(m)j FK(not)i(di)n(visible)h(by)f
+Fq(r)r FK(,)f(that)h(determines)i(the)e(b)n(urst)g(length)h(of)e(a)h
+(single)g(error)75 624 y(b)n(urst)35 b(that)g(can)f(be)g(corrected.)62
+b(The)34 b(ar)n(gument)i Ft(g)d FK(can)h(be)g(a)g(polynomial)i(with)e
+(base)h(ring)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(,)36
+b(or)e(a)g(list)75 737 y(of)d(coef)n(\002cients)j(in)d
+Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)52 b(The)31 b(generator)j
+(polynomial)g(of)d(the)h(code)g(is)f(de\002ned)h(as)g(the)f(product)j
+(of)d Ft(g)g FK(and)75 850 y Fq(x)115 817 y Fr(2)p Fm(b)p
+Fh(\000)p Fr(1)284 850 y Fo(+)13 b FK(1.)216 963 y(Here)35
+b(is)f(the)h(general)h(de\002nition)g(of)f('Fire)f(code',)k(named)e
+(after)f(P)-10 b(.)33 b(Fire,)k(who)d(introduced)j(these)f(codes)75
+1076 y(in)f(1959)i(in)e(order)h(to)g(correct)g(b)n(urst)h(errors.)65
+b(First,)38 b(a)d(de\002nition.)66 b(If)35 b Fq(F)f Fo(=)27
+b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))35 b FK(and)50 b Fq(f)40
+b Fv(2)26 b Fq(F)7 b Fo([)p Fq(x)p Fo(])36 b FK(then)g(we)75
+1189 y(say)45 b Fq(f)f FK(has)31 b Fq(or)m(der)j(e)d
+FK(if)45 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))p Fv(j)p Fo(\()p
+Fq(x)1110 1156 y Fm(e)1161 1189 y Fv(\000)i FK(1)p Fo(\))p
+FK(.)51 b(A)30 b Fq(F)l(ir)m(e)h(code)h FK(is)e(a)h(c)o(yclic)h(code)g
+(o)o(v)o(er)f Fq(F)37 b FK(with)31 b(generator)j(polynomial)75
+1302 y Fq(g)p Fo(\()p Fq(x)p Fo(\))23 b(=)e(\()p Fq(x)420
+1269 y Fr(2)n Fm(t)5 b Fh(\000)p Fr(1)578 1302 y Fv(\000)13
+b FK(1)p Fo(\))7 b Fq(p)p Fo(\()p Fq(x)p Fo(\))p FK(,)27
+b(where)33 b Fq(p)p Fo(\()p Fq(x)p Fo(\))26 b FK(does)g(not)g(di)n
+(vide)h Fq(x)2011 1269 y Fr(2)n Fm(t)5 b Fh(\000)p Fr(1)2168
+1302 y Fv(\000)13 b FK(1)25 b(and)h(satis\002es)h Fq(d)5
+b(e)l(g)p Fo(\()i Fq(p)p Fo(\()p Fq(x)p Fo(\)\))25 b
+Fv(\025)19 b Fq(t)6 b FK(.)34 b(The)25 b(length)75 1415
+y(of)e(such)i(a)e(code)h(is)g(the)f(order)i(of)e Fq(g)p
+Fo(\()p Fq(x)p Fo(\))p FK(.)30 b(Non-binary)c(Fire)d(codes)i(ha)n(v)o
+(e)f(not)g(been)g(implemented.)216 1528 y(.)p 75 1582
+1648 4 v 1764 1587 a FF(Example)p 2102 1582 V 75 1606
+4 25 v 3747 1606 V 75 1706 4 100 v 188 1676 a(gap>)44
+b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(G:=)f(x\2103+x\2102+1;)p
+3747 1706 V 75 1806 V 188 1776 a(Z\(2\)\2100+x\2102+x\2103)p
+3747 1806 V 75 1905 V 188 1875 a(gap>)h(Factors\()h(G)d(\);)p
+3747 1905 V 75 2005 V 188 1975 a([)h(Z\(2\)\2100+x\2102+x\2103)k(])p
+3747 2005 V 75 2105 V 188 2075 a(gap>)d(C)e(:=)h(FireCode\()j(G,)d(3)f
+(\);)p 3747 2105 V 75 2204 V 188 2174 a(a)h(cyclic)h([35,27,1..4]2..6)k
+(3)42 b(burst)j(error)f(correcting)h(fire)f(code)g(over)f(GF\(2\))p
+3747 2204 V 75 2304 V 188 2274 a(gap>)h(MinimumDistance\()j(C)c(\);)p
+3747 2304 V 75 2403 V 188 2374 a(4)212 b(#)43 b(Still)h(it)f(can)g
+(correct)i(bursts)f(of)f(length)i(3)p 3747 2403 V 75
+2428 4 25 v 3747 2428 V 75 2431 3675 4 v 75 2560 a
+SDict begin H.S end
+ 75
+2560 a 75 2560 a
+SDict begin 13.6 H.A end
+ 75 2560 a 75 2560 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.10) cvn H.B /DEST pdfmark end
+ 75 2560 a 116 x
+FJ(5.5.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(WholeSpaceCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2850 a Fs(\006)22 b
+Ft(WholeSpaceCode\()52 b(n,)47 b(F)g(\))2306 b Fr(\(function\))p
+Black 216 3076 a Ft(WholeSpaceCode)26 b FK(returns)e(the)e(c)o(yclic)h
+(whole)f(space)h(code)g(of)f(length)h Ft(n)f FK(o)o(v)o(er)g
+Ft(F)p FK(.)28 b(This)21 b(code)i(consists)h(of)e(all)75
+3189 y(polynomials)k(of)e(de)o(gree)g(less)g(than)h Ft(n)e
+FK(and)h(coef)n(\002cients)h(in)f Ft(F)p FK(.)p 75 3281
+1648 4 v 1764 3286 a FF(Example)p 2102 3281 V 75 3306
+4 25 v 3747 3306 V 75 3406 4 100 v 188 3376 a(gap>)44
+b(C)e(:=)h(WholeSpaceCode\()48 b(5,)43 b(GF\(3\))h(\);)p
+3747 3406 V 75 3506 V 188 3476 a(a)f(cyclic)h([5,5,1]0)h(whole)f(space)
+g(code)g(over)g(GF\(3\))p 3747 3506 V 75 3530 4 25 v
+3747 3530 V 75 3533 3675 4 v 75 3662 a
+SDict begin H.S end
+ 75 3662 a 75 3662
+a
+SDict begin 13.6 H.A end
+ 75 3662 a 75 3662 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.11) cvn H.B /DEST pdfmark end
+ 75 3662 a 116 x FJ(5.5.11)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(NullCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3952 a Fs(\006)22 b Ft(NullCode\()50 b(n,)d(F)g(\))2584
+b Fr(\(function\))p Black 216 4178 a Ft(NullCode)33 b
+FK(returns)g(the)e(zero-dimensional)36 b(nullcode)d(with)e(length)i
+Ft(n)d FK(o)o(v)o(er)i Ft(F)p FK(.)50 b(This)31 b(code)h(has)g(only)g
+(one)75 4291 y(w)o(ord:)d(the)24 b(all)g(zero)g(w)o(ord.)29
+b(It)23 b(is)g(c)o(yclic)i(though!)p 75 4383 1648 4 v
+1764 4388 a FF(Example)p 2102 4383 V 75 4408 4 25 v 3747
+4408 V 75 4508 4 100 v 188 4478 a(gap>)44 b(C)e(:=)h(NullCode\()j(5,)d
+(GF\(3\))h(\);)p 3747 4508 V 75 4608 V 188 4578 a(a)f(cyclic)h
+([5,0,5]5)h(nullcode)g(over)f(GF\(3\))p 3747 4608 V 75
+4707 V 188 4677 a(gap>)g(AsSSortedList\()j(C)42 b(\);)p
+3747 4707 V 75 4807 V 188 4777 a([)h([)f(0)h(0)g(0)f(0)h(0)g(])f(])p
+3747 4807 V 75 4832 4 25 v 3747 4832 V 75 4835 3675 4
+v 75 4963 a
+SDict begin H.S end
+ 75 4963 a 75 4963 a
+SDict begin 13.6 H.A end
+ 75 4963 a 75 4963 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.12) cvn H.B /DEST pdfmark end
+ 75
+4963 a 116 x FJ(5.5.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RepetitionCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5254 a Fs(\006)22 b
+Ft(RepetitionCode\()52 b(n,)47 b(F)g(\))2306 b Fr(\(function\))p
+Black 216 5479 a Ft(RepetitionCode)37 b FK(returns)d(the)f(c)o(yclic)g
+(repetition)i(code)e(of)g(length)h Ft(n)e FK(o)o(v)o(er)g
+Ft(F)p FK(.)55 b(The)32 b(code)h(has)g(as)f(man)o(y)75
+5592 y(elements)25 b(as)e Ft(F)q FK(,)f(because)k(each)e(code)n(w)o
+(ord)h(consists)h(of)d(a)g(repetition)j(of)e(one)g(of)f(these)i
+(elements.)p Black Black eop end end
+%%Page: 81 81
+TeXDict begin HPSdict begin 81 80 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.81) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(81)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(C)e(:=)h(RepetitionCode\()48 b(3,)43
+b(GF\(5\))h(\);)p 3747 523 V 75 623 V 188 593 a(a)f(cyclic)h([3,1,3]2)h
+(repetition)h(code)e(over)f(GF\(5\))p 3747 623 V 75 722
+V 188 692 a(gap>)h(AsSSortedList\()j(C)42 b(\);)p 3747
+722 V 75 822 V 188 792 a([)h([)f(0)h(0)g(0)f(],)h([)g(1)g(1)f(1)h(],)g
+([)g(2)f(2)h(2)g(],)g([)g(4)f(4)h(4)g(],)g([)f(3)h(3)g(3)f(])h(])p
+3747 822 V 75 922 V 188 892 a(gap>)h(IsPerfectCode\()j(C)42
+b(\);)p 3747 922 V 75 1021 V 188 991 a(false)p 3747 1021
+V 75 1121 V 188 1091 a(gap>)i(IsMDSCode\()h(C)e(\);)p
+3747 1121 V 75 1220 V 188 1191 a(true)p 3747 1220 V 75
+1245 4 25 v 3747 1245 V 75 1248 3675 4 v 75 1382 a
+SDict begin H.S end
+ 75
+1382 a 75 1382 a
+SDict begin 13.6 H.A end
+ 75 1382 a 75 1382 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.13) cvn H.B /DEST pdfmark end
+ 75 1382 a 116 x
+FJ(5.5.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CyclicCodes)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1672 a Fs(\006)22 b
+Ft(CyclicCodes\()51 b(n,)c(F)g(\))2445 b Fr(\(function\))p
+Black 216 1898 a Ft(CyclicCodes)31 b FK(returns)f(a)e(list)g(of)g(all)h
+(c)o(yclic)g(codes)g(of)f(length)h Ft(n)f FK(o)o(v)o(er)g
+Ft(F)q FK(.)41 b(It)28 b(constructs)j(all)d(possible)i(gen-)75
+2011 y(erator)g(polynomials)i(from)d(the)g(f)o(actors)i(of)e
+Fq(x)1556 1978 y Fm(n)1608 2011 y Fv(\000)15 b FK(1.)44
+b(Each)29 b(combination)j(of)d(these)h(f)o(actors)h(yields)f(a)f
+(generator)75 2124 y(polynomial)d(after)e(multiplication.)p
+75 2246 1648 4 v 1764 2251 a FF(Example)p 2102 2246 V
+75 2271 4 25 v 3747 2271 V 75 2371 4 100 v 188 2341 a(gap>)44
+b(CyclicCodes\(3,GF\(3\)\);)p 3747 2371 V 75 2471 V 188
+2441 a([)f(a)f(cyclic)j([3,3,1]0)g(enumerated)g(code)f(over)g(GF\(3\),)
+p 3747 2471 V 75 2570 V 188 2540 a(a)f(cyclic)h([3,2,1..2]1)i
+(enumerated)g(code)e(over)f(GF\(3\),)p 3747 2570 V 75
+2670 V 188 2640 a(a)g(cyclic)h([3,1,3]2)h(enumerated)h(code)e(over)f
+(GF\(3\),)p 3747 2670 V 75 2769 V 188 2740 a(a)g(cyclic)h([3,0,3]3)h
+(enumerated)h(code)e(over)f(GF\(3\))h(])p 3747 2769 V
+75 2794 4 25 v 3747 2794 V 75 2797 3675 4 v 75 2931 a
+SDict begin H.S end
+
+75 2931 a 75 2931 a
+SDict begin 13.6 H.A end
+ 75 2931 a 75 2931 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.14) cvn H.B /DEST pdfmark end
+ 75 2931 a 116
+x FJ(5.5.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(NrCyclicCodes)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3221 a Fs(\006)22 b
+Ft(NrCyclicCodes\()52 b(n,)47 b(F)g(\))2352 b Fr(\(function\))p
+Black 216 3447 a FK(The)23 b(function)j Ft(NrCyclicCodes)h
+FK(calculates)g(the)c(number)i(of)e(c)o(yclic)i(codes)f(of)g(length)h
+Ft(n)e FK(o)o(v)o(er)h(\002eld)f Ft(F)p FK(.)p 75 3570
+1648 4 v 1764 3575 a FF(Example)p 2102 3570 V 75 3594
+4 25 v 3747 3594 V 75 3694 4 100 v 188 3664 a(gap>)44
+b(NrCyclicCodes\()j(23,)c(GF\(2\))h(\);)p 3747 3694 V
+75 3794 V 188 3764 a(8)p 3747 3794 V 75 3893 V 188 3863
+a(gap>)g(codelist)h(:=)e(CyclicCodes\()j(23,)e(GF\(2\))g(\);)p
+3747 3893 V 75 3993 V 188 3963 a([)f(a)f(cyclic)j([23,23,1]0)g
+(enumerated)h(code)e(over)g(GF\(2\),)p 3747 3993 V 75
+4093 V 273 4063 a(a)e(cyclic)j([23,22,1..2]1)h(enumerated)g(code)e
+(over)g(GF\(2\),)p 3747 4093 V 75 4192 V 273 4162 a(a)e(cyclic)j
+([23,11,1..8]4..7)i(enumerated)f(code)e(over)g(GF\(2\),)p
+3747 4192 V 75 4292 V 273 4262 a(a)e(cyclic)j([23,0,23]23)h(enumerated)
+g(code)d(over)h(GF\(2\),)p 3747 4292 V 75 4391 V 273
+4362 a(a)e(cyclic)j([23,11,1..8]4..7)i(enumerated)f(code)e(over)g
+(GF\(2\),)p 3747 4391 V 75 4491 V 273 4461 a(a)e(cyclic)j
+([23,12,1..7]3)h(enumerated)g(code)e(over)g(GF\(2\),)p
+3747 4491 V 75 4591 V 273 4561 a(a)e(cyclic)j([23,1,23]11)h(enumerated)
+g(code)d(over)h(GF\(2\),)p 3747 4591 V 75 4690 V 273
+4660 a(a)e(cyclic)j([23,12,1..7]3)h(enumerated)g(code)e(over)g(GF\(2\))
+g(])p 3747 4690 V 75 4790 V 188 4760 a(gap>)g(BinaryGolayCode\(\))k(in)
+43 b(codelist;)p 3747 4790 V 75 4890 V 188 4860 a(true)p
+3747 4890 V 75 4989 V 188 4959 a(gap>)h(RepetitionCode\()j(23,)c
+(GF\(2\))h(\))f(in)g(codelist;)p 3747 4989 V 75 5089
+V 188 5059 a(true)p 3747 5089 V 75 5188 V 188 5159 a(gap>)h
+(CordaroWagnerCode\()k(23)43 b(\))g(in)g(codelist;)p
+3747 5188 V 75 5288 V 188 5258 a(false)171 b(#)43 b(This)g(code)h(is)f
+(not)g(cyclic)p 3747 5288 V 75 5313 4 25 v 3747 5313
+V 75 5316 3675 4 v Black Black eop end end
+%%Page: 82 82
+TeXDict begin HPSdict begin 82 81 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.82) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(82)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.6) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FM(5.6)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Ev)o(aluation)30 b(Codes)p Black 75 495 a
+SDict begin H.S end
+ 75 495
+a 75 495 a
+SDict begin 13.6 H.A end
+ 75 495 a 75 495 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.1) cvn H.B /DEST pdfmark end
+ 75 495 a 114 x FJ(5.6.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(aluationCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 783 a Fs(\006)22 b Ft(EvaluationCode\()52
+b(P,)47 b(L,)g(R)g(\))2167 b Fr(\(function\))p Black
+216 1009 a FK(Input:)31 b Ft(F)23 b FK(is)g(a)g(\002nite)h(\002eld,)f
+Ft(L)g FK(is)g(a)g(list)h(of)g(rational)h(functions)h(in)e
+Fq(R)c Fo(=)f Fq(F)8 b Fo([)p Fq(x)2592 1023 y Fr(1)2629
+1009 y Fp(;)i(:::;)g Fq(x)2814 1023 y Fm(r)2847 1009
+y Fo(])p FK(,)23 b Ft(P)g FK(is)h(a)f(list)h(of)f Fq(n)g
+FK(points)i(in)75 1122 y Fq(F)138 1089 y Fm(r)192 1122
+y FK(at)f(which)g(all)f(of)h(the)g(functions)i(in)d Ft(L)g
+FK(are)h(de\002ned.)75 1235 y(Output:)30 b(The)23 b('e)n(v)n(aluation)j
+(code')20 b Fq(C)r FK(,)i(which)i(is)g(the)g(image)f(of)h(the)g(e)n(v)n
+(alation)h(map)1492 1435 y Fq(E)7 b(val)1665 1449 y Fm(P)1730
+1435 y FK(:)21 b Fq(s)7 b(pan)p Fo(\()p Fq(L)p Fo(\))22
+b Fv(!)e Fq(F)2270 1397 y Fm(n)2308 1435 y Fp(;)75 1635
+y FK(gi)n(v)o(en)31 b(by)45 b Fq(f)37 b Fv(7\000)-15
+b(!)24 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)845 1649 y
+Fr(1)883 1635 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7
+b Fq(p)1202 1649 y Fm(n)1242 1635 y Fo(\)\))p FK(,)32
+b(where)e Fq(P)24 b Fo(=)g Fv(f)7 b Fq(p)1890 1649 y
+Fr(1)1928 1635 y Fp(;)j(:::;)17 b Fq(p)2125 1649 y Fm(n)2164
+1635 y Fv(g)30 b FK(and)45 b Fq(f)38 b Fv(2)23 b Fq(L)p
+FK(.)49 b(The)31 b(generator)i(matrix)e(of)25 b Fq(C)32
+b FK(is)75 1748 y Fq(G)20 b Fo(=)g(\()14 b Fq(f)328 1762
+y Fm(i)351 1748 y Fo(\()7 b Fq(p)448 1762 y Fm(j)473
+1748 y Fo(\)\))553 1762 y Fm(f)573 1772 y Ff(i)591 1762
+y Fh(2)p Fm(L)p Fl(;)e Fm(p)735 1772 y Ff(j)756 1762
+y Fh(2)p Fm(P)845 1748 y FK(.)216 1861 y(This)84 b(command)h(returns)h
+(a)e(\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o
+(xtra)e(components)j(\(type)75 1974 y Ft(NamesOfComponents\()q(C\))51
+b FK(to)45 b(see)g(them)h(all\):)73 b Ft(C!.EvaluationMat)50
+b FK(\(not)c(the)g(same)f(as)g(the)h(generator)75 2087
+y(matrix)24 b(in)g(general\),)h Ft(C!.points)h FK(\(namely)e
+Ft(P)q FK(\),)f Ft(C!.basis)i FK(\(namely)g Ft(L)p FK(\),)e(and)h
+Ft(C!.ring)h FK(\(namely)g Ft(R)p FK(\).)p 75 2205 1648
+4 v 1764 2210 a FF(Example)p 2102 2205 V 75 2230 4 25
+v 3747 2230 V 75 2330 4 100 v 188 2300 a(gap>)44 b(F:=GF\(11\);)p
+3747 2330 V 75 2430 V 188 2400 a(GF\(11\))p 3747 2430
+V 75 2529 V 188 2499 a(gap>)g(R)e(:=)h(PolynomialRing\(F,2\))q(;;)p
+3747 2529 V 75 2629 V 188 2599 a(gap>)h(indets)g(:=)f
+(IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q(R\);)q(;)p
+3747 2629 V 75 2728 V 188 2699 a(gap>)h(x:=indets[1];;)j
+(y:=indets[2];;)p 3747 2728 V 75 2828 V 188 2798 a(gap>)d
+(L:=[x\2102*y,x*y,x\2105,x\2104)q(,x\210)q(3,x)q(\2102)q(,x,)q(x\2100)q
+(];;)p 3747 2828 V 75 2928 V 188 2898 a(gap>)g(Pts:=[)g([)f
+(Z\(11\)\2109,)i(Z\(11\))f(],)f([)g(Z\(11\)\2108,)i(Z\(11\))f(],)f([)f
+(Z\(11\)\2107,)j(0*Z\(11\))g(],)p 3747 2928 V 75 3027
+V 315 2997 a([)e(Z\(11\)\2106,)i(0*Z\(11\))f(],)f([)g(Z\(11\)\2105,)i
+(0*Z\(11\))g(],)e([)g(Z\(11\)\2104,)i(0*Z\(11\))f(],)p
+3747 3027 V 75 3127 V 315 3097 a([)f(Z\(11\)\2103,)i(Z\(11\))f(],)f([)f
+(Z\(11\)\2102,)k(0*Z\(11\))e(],)f([)g(Z\(11\),)h(0*Z\(11\))h(],)p
+3747 3127 V 75 3227 V 315 3197 a([)e(Z\(11\)\2100,)i(0*Z\(11\))f(],)f
+([)g(0*Z\(11\),)i(Z\(11\))f(])f(];;)p 3747 3227 V 75
+3326 V 188 3296 a(gap>)h(C:=EvaluationCode\(Pts)q(,L,)q(R\);)p
+3747 3326 V 75 3426 V 188 3396 a(a)f(linear)h([11,8,1..3]2..3)90
+b(evaluation)46 b(code)d(over)h(GF\(11\))p 3747 3426
+V 75 3525 V 188 3496 a(gap>)g(MinimumDistance\(C\);)p
+3747 3525 V 75 3625 V 188 3595 a(3)p 3747 3625 V 75 3725
+V 3747 3725 V 75 3750 4 25 v 3747 3750 V 75 3753 3675
+4 v 75 3885 a
+SDict begin H.S end
+ 75 3885 a 75 3885 a
+SDict begin 13.6 H.A end
+ 75 3885 a 75 3885 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.2) cvn H.B /DEST pdfmark end
+
+75 3885 a 116 x FJ(5.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(GeneralizedReedSolomonCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4176 a Fs(\006)22 b Ft(GeneralizedReedSo)q(lom)q(onC)q(ode)q(\()53
+b(P,)47 b(k,)g(R)f(\))1611 b Fr(\(function\))p Black
+216 4402 a FK(Input:)30 b(R=F[x],)23 b(where)h Ft(F)f
+FK(is)h(a)f(\002nite)g(\002eld,)g Ft(k)h FK(is)f(a)g(positi)n(v)o(e)i
+(inte)o(ger)l(,)g Ft(P)e FK(is)g(a)g(list)h(of)g Fq(n)f
+FK(points)i(in)e Fq(F)8 b FK(.)75 4514 y(Output:)30 b(The)18
+b Fq(C)25 b FK(which)f(is)f(the)h(image)g(of)f(the)h(e)n(v)n(aluation)i
+(map)1548 4715 y Fq(E)7 b(val)1721 4729 y Fm(P)1786 4715
+y FK(:)20 b Fq(F)8 b Fo([)p Fq(x)p Fo(])1985 4729 y Fm(k)2040
+4715 y Fv(!)21 b Fq(F)2215 4677 y Fm(n)2252 4715 y Fp(;)75
+4915 y FK(gi)n(v)o(en)29 b(by)42 b Fq(f)36 b Fv(7\000)-15
+b(!)22 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)837 4929 y
+Fr(1)876 4915 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7
+b Fq(p)1195 4929 y Fm(n)1234 4915 y Fo(\)\))p FK(,)29
+b(where)g Fq(P)22 b Fo(=)g Fv(f)7 b Fq(p)1874 4929 y
+Fr(1)1913 4915 y Fp(;)j(:::;)17 b Fq(p)2110 4929 y Fm(n)2148
+4915 y Fv(g)24 b(\032)e Fq(F)35 b FK(and)42 b Fq(f)f
+FK(ranges)30 b(o)o(v)o(er)e(the)h(space)g Fq(F)7 b Fo([)p
+Fq(x)p Fo(])3611 4929 y Fm(k)3674 4915 y FK(of)75 5028
+y(all)24 b(polynomials)i(of)d(de)o(gree)i(less)f(than)g
+Fq(k)r FK(.)216 5141 y(This)84 b(command)h(returns)h(a)e
+(\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e
+(components)j(\(type)75 5254 y Ft(NamesOfComponents\()q(C\))62
+b FK(to)56 b(see)h(them)g(all\):)95 b Ft(C!.points)59
+b FK(\(namely)f Ft(P)p FK(\),)64 b Ft(C!.degree)59 b
+FK(\(namely)f Ft(k)p FK(\),)75 5367 y(and)24 b Ft(C!.ring)h
+FK(\(namely)g Ft(R)p FK(\).)216 5479 y(This)36 b(code)g(can)g(be)g
+(decoded)i(using)f Ft(Decodeword)p FK(,)k(which)36 b(applies)i(the)e
+(special)h(decoder)h(method)f(\(the)75 5592 y(interpolation)31
+b(method\),)d(or)f(using)h Ft(GeneralizedReedSol)q(omo)q(nDe)q(co)q
+(der)q(Gao)33 b FK(which)27 b(applies)i(an)d(algorithm)p
+Black Black eop end end
+%%Page: 83 83
+TeXDict begin HPSdict begin 83 82 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.83) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(83)p Black 75 399 a(of)32 b(S.)f(Gao)h(\(see)h
+Ft(GeneralizedReedSolom)q(on)q(Dec)q(ode)q(rGa)q(o)38
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2193 400 a
+SDict begin H.S end
+
+2193 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2419 337 a
+SDict begin H.R end
+ 2419 337
+a 2419 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.3) cvn H.B /ANN pdfmark end
+ 2419 399 a Black FK(\)\).)56 b(This)32 b(code)h(has)g(a)e
+(special)j(decoder)75 511 y(record)23 b(which)f(implements)h(the)e
+(interpolation)26 b(algorithm)d(described)h(in)d(section)j(5.2)d(of)g
+(Justesen)j(and)e(Hoholdt)75 624 y([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 105 625 a
+SDict begin H.S end
+ 105 625 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb
+296 562 a
+SDict begin H.R end
+ 296 562 a 296 624 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end
+ 296 624 a Black 1 w FK(].)28
+b(See)23 b Ft(Decode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+863 625 a
+SDict begin H.S end
+ 863 625 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1089
+562 a
+SDict begin H.R end
+ 1089 562 a 1089 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end
+ 1089 624 a Black FK(\))g(and)f
+Ft(Decodeword)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1814 625 a
+SDict begin H.S end
+ 1814 625 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.10.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2040
+562 a
+SDict begin H.R end
+ 2040 562 a 2040 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.2) cvn H.B /ANN pdfmark end
+ 2040 624 a Black FK(\))f(for)e(more)h
+(details.)216 737 y(The)242 b(weighted)i(v)o(ersion)g(has)f
+(implemented)h(with)f(the)g(option)75 850 y Ft(GeneralizedReedSol)q
+(omo)q(nCo)q(de\()q(P,)q(k,R)q(,wt)q(s\))p FK(,)59 b(where)47
+b Fq(w)n(t)6 b(s)34 b Fo(=)f([)p Fq(v)2462 864 y Fr(1)2500
+850 y Fp(;)10 b(:::;)g Fq(v)2685 864 y Fm(n)2724 850
+y Fo(])46 b FK(is)i(a)e(sequence)k(of)d Fq(n)g FK(non-)75
+963 y(zero)29 b(elements)g(from)f(the)g(base)h(\002eld)f
+Fq(F)35 b FK(of)28 b Ft(R)p FK(.)41 b(See)28 b(also)h(the)f
+(generalized)j(Reed\226Solomon)f(code)f Fq(GRS)3504 977
+y Fm(k)3538 963 y Fo(\()p Fq(P)-12 b Fp(;)5 b Fq(V)12
+b Fo(\))75 1076 y FK(described)26 b(in)e([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 570 1077 a
+SDict begin H.S end
+ 570 1077 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb
+792 1014 a
+SDict begin H.R end
+ 792 1014 a 792 1076 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end
+ 792 1076 a Black FK(],)f(p.303.)216
+1189 y(The)i(list-decoding)k(algorithm)f(of)d(Sudan-Gurasw)o(ami)i
+(\(described)i(in)c(section)i(12.1)f(of)f([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 3155 1190 a
+SDict begin H.S end
+ 3155 1190 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3346 1127 a
+SDict begin H.R end
+ 3346 1127 a 3346 1189 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end
+ 3346 1189 a Black
+1 w FK(]\))h(has)f(been)75 1302 y(implemented)38 b(for)d(generalized)k
+(Reed-Solomon)f(codes.)66 b(See)35 b Ft(GeneralizedReedSol)q(omo)q(nLi)
+q(stD)q(ec)q(ode)q(r)75 1415 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 1416 a
+SDict begin H.S end
+ 105 1416 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.10.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+331 1353 a
+SDict begin H.R end
+ 331 1353 a 331 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.4) cvn H.B /ANN pdfmark end
+ 331 1415 a Black FK(\).)p
+75 1534 1648 4 v 1764 1539 a FF(Example)p 2102 1534 V
+75 1559 4 25 v 3747 1559 V 75 1658 4 100 v 188 1628 a(gap>)44
+b(R:=PolynomialRing\(GF\()q(11\))q(,[")q(t")q(]\);)p
+3747 1658 V 75 1758 V 188 1728 a(GF\(11\)[t])p 3747 1758
+V 75 1858 V 188 1828 a(gap>)g(P:=List\([1,3,4,5,7],i)q(->Z)q(\(11)q
+(\)\210)q(i\);)p 3747 1858 V 75 1957 V 188 1927 a([)f(Z\(11\),)h
+(Z\(11\)\2103,)h(Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p
+3747 1957 V 75 2057 V 188 2027 a(gap>)f(C:=GeneralizedReedSol)q(omo)q
+(nCo)q(de)q(\(P,)q(3,R)q(\);)p 3747 2057 V 75 2156 V
+188 2127 a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47
+b(Reed-Solomon)f(code)e(over)f(GF\(11\))p 3747 2156 V
+75 2256 V 188 2226 a(gap>)h(MinimumDistance\(C\);)p 3747
+2256 V 75 2356 V 188 2326 a(3)p 3747 2356 V 75 2455 V
+188 2425 a(gap>)g(V:=[Z\(11\)\2100,Z\(11\)\2100,Z)q(\(11)q(\)\2100)q
+(,Z)q(\(11)q(\)\2100)q(,Z\()q(11\))q(];)p 3747 2455 V
+75 2555 V 188 2525 a([)f(Z\(11\)\2100,)i(Z\(11\)\2100,)g(Z\(11\)\2100,)
+g(Z\(11\)\2100,)g(Z\(11\))f(])p 3747 2555 V 75 2655 V
+188 2625 a(gap>)g(C:=GeneralizedReedSol)q(omo)q(nCo)q(de)q(\(P,)q(3,R)q
+(,V\))q(;)p 3747 2655 V 75 2754 V 188 2724 a(a)f(linear)h([5,3,1..3]2)
+88 b(weighted)45 b(generalized)i(Reed-Solomon)f(code)e(over)f(GF\(11\))
+p 3747 2754 V 75 2854 V 188 2824 a(gap>)h(MinimumDistance\(C\);)p
+3747 2854 V 75 2953 V 188 2924 a(3)p 3747 2953 V 75 2978
+4 25 v 3747 2978 V 75 2981 3675 4 v 75 3194 a FK(See)23
+b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 931 3195 a
+SDict begin H.S end
+ 931 3195 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1112 3132 a
+SDict begin H.R end
+ 1112 3132 a 1112 3194 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end
+ 1112 3194 a Black
+FK(\))c(for)g(a)f(more)g(general)j(construction.)75 3347
+y
+SDict begin H.S end
+ 75 3347 a 75 3347 a
+SDict begin 13.6 H.A end
+ 75 3347 a 75 3347 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.3) cvn H.B /DEST pdfmark end
+ 75 3347 a 96
+x FJ(5.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedReedMullerCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3618 a Fs(\006)c Ft(GeneralizedReedMu)
+q(lle)q(rCo)q(de\()53 b(Pts,)48 b(r,)f(F)g(\))1564 b
+Fr(\(function\))p Black 216 3843 a Ft(GeneralizedReedMul)q(ler)q(Cod)q
+(e)41 b FK(returns)d(a)d('Reed-Muller)j(code')32 b Fq(C)37
+b FK(with)e(length)i Fv(j)p Fq(P)n(t)6 b(s)p Fv(j)36
+b FK(and)g(order)h Fq(r)r FK(.)75 3956 y(One)29 b(considers)j(\(a\))e
+(a)f(basis)i(of)e(monomials)i(for)f(the)g(v)o(ector)h(space)f(o)o(v)o
+(er)g Fq(F)h Fo(=)23 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))30
+b FK(of)f(all)h(polynomials)i(in)75 4069 y Fq(F)7 b Fo([)p
+Fq(x)203 4083 y Fr(1)241 4069 y Fp(;)j(:::;)g Fq(x)426
+4083 y Fm(d)468 4069 y Fo(])27 b FK(of)h(de)o(gree)g(at)f(most)h
+Fq(r)r FK(,)g(and)g(\(b\))f(a)g(set)h Fq(P)n(t)6 b(s)27
+b FK(of)g(points)i(in)e Fq(F)2418 4036 y Fm(d)2458 4069
+y FK(.)40 b(The)27 b(generator)j(matrix)e(of)f(the)h(asso-)75
+4182 y(ciated)k Fq(Reed-Muller)g(code)26 b(C)31 b FK(is)f
+Fq(G)24 b Fo(=)g(\()14 b Fq(f)f Fo(\()7 b Fq(p)p Fo(\)\))1628
+4196 y Fm(f)j Fh(2)p Fm(B)p Fl(;)5 b Fm(p)p Fh(2)p Fm(P)n(t)g(s)1935
+4182 y FK(.)48 b(This)30 b(code)c Fq(C)32 b FK(is)e(constructed)j
+(using)f(the)e(command)75 4295 y Ft(GeneralizedReedMul)q(ler)q(Cod)q
+(e\(P)q(ts)q(,r,)q(F\))p FK(.)i(When)27 b Fq(P)n(t)6
+b(s)26 b FK(is)g(the)h(set)g(of)g(all)f Fq(q)2702 4262
+y Fm(d)2769 4295 y FK(points)i(in)f Fq(F)3177 4262 y
+Fm(d)3244 4295 y FK(then)g(the)g(com-)75 4408 y(mand)g
+Ft(GeneralizedReedMul)q(ler)q(\(d)q(,r,)q(F\))33 b FK(yields)28
+b(the)f(code.)40 b(When)27 b Fq(P)n(t)6 b(s)27 b FK(is)f(the)i(set)f
+(of)g(all)g Fo(\()p Fq(q)14 b Fv(\000)g FK(1)p Fo(\))3460
+4375 y Fm(d)3528 4408 y FK(points)75 4521 y(with)31 b(no)g(coordinate)j
+(equal)f(to)e(0)f(then)i(this)g(is)f(can)g(be)h(constructed)i(using)e
+(the)g Ft(ToricCode)h FK(command)f(\(as)g(a)75 4634 y(special)25
+b(case\).)216 4747 y(This)84 b(command)h(returns)h(a)e(\224record\224)i
+(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e(components)j
+(\(type)75 4860 y Ft(NamesOfComponents\()q(C\))53 b FK(to)48
+b(see)h(them)f(all\):)78 b Ft(C!.points)51 b FK(\(namely)e
+Ft(Pts)q FK(\))e(and)i Ft(C!.degree)h FK(\(namely)75
+4973 y Ft(r)p FK(\).)p 75 5092 1648 4 v 1764 5097 a FF(Example)p
+2102 5092 V 75 5117 4 25 v 3747 5117 V 75 5216 4 100
+v 188 5186 a(gap>)44 b(Pts:=ToricPoints\(2,GF)q(\(5\))q(\);)p
+3747 5216 V 75 5316 V 188 5286 a([)f([)f(Z\(5\)\2100,)j(Z\(5\)\2100)f
+(],)f([)g(Z\(5\)\2100,)i(Z\(5\))f(],)f([)f(Z\(5\)\2100,)j(Z\(5\)\2102)f
+(],)f([)g(Z\(5\)\2100,)i(Z\(5\)\2103)f(],)p 3747 5316
+V 75 5415 V 273 5386 a([)e(Z\(5\),)i(Z\(5\)\2100)h(],)e([)f(Z\(5\),)i
+(Z\(5\))g(],)f([)g(Z\(5\),)h(Z\(5\)\2102)g(],)f([)g(Z\(5\),)h
+(Z\(5\)\2103)g(],)p 3747 5415 V 75 5515 V 273 5485 a([)e(Z\(5\)\2102,)j
+(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2102,)i(Z\(5\))f(],)f([)f(Z\(5\)\2102,)j
+(Z\(5\)\2102)f(],)f([)g(Z\(5\)\2102,)i(Z\(5\)\2103)f(],)p
+3747 5515 V 75 5615 V 273 5585 a([)e(Z\(5\)\2103,)j(Z\(5\)\2100)f(],)f
+([)g(Z\(5\)\2103,)i(Z\(5\))f(],)f([)f(Z\(5\)\2103,)j(Z\(5\)\2102)f(],)f
+([)g(Z\(5\)\2103,)i(Z\(5\)\2103)f(])f(])p 3747 5615 V
+Black Black eop end end
+%%Page: 84 84
+TeXDict begin HPSdict begin 84 83 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.84) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(84)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(C:=GeneralizedReedMul)q(ler)q(Cod)q(e\()q(Pts)q(,2,)q(GF\()q(5\)\))q
+(;)p 3747 428 V 75 528 V 188 498 a(a)f(linear)h([16,6,1..11]6..10)90
+b(generalized)47 b(Reed-Muller)f(code)d(over)h(GF\(5\))p
+3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75
+760 a FK(See)23 b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 931 761 a
+SDict begin H.S end
+ 931 761 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1112 698 a
+SDict begin H.R end
+ 1112 698 a 1112 760 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end
+ 1112 760 a Black FK(\))c(for)g(a)f
+(more)g(general)j(construction.)75 911 y
+SDict begin H.S end
+ 75 911 a 75
+911 a
+SDict begin 13.6 H.A end
+ 75 911 a 75 911 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.4) cvn H.B /DEST pdfmark end
+ 75 911 a 97 x FJ(5.6.4)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(T)-9 b(oricP)n(oints)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1182 a Fs(\006)22 b Ft(ToricPoints\()51
+b(n,)c(F)g(\))2445 b Fr(\(function\))p Black 216 1408
+a Ft(ToricPoints\(n,F\))29 b FK(returns)c(the)f(points)h(in)e
+Fo(\()p Fq(F)1827 1375 y Fh(\002)1882 1408 y Fo(\))1917
+1375 y Fm(n)1955 1408 y FK(.)p 75 1524 1648 4 v 1764
+1529 a FF(Example)p 2102 1524 V 75 1549 4 25 v 3747 1549
+V 75 1649 4 100 v 188 1619 a(gap>)44 b(ToricPoints\(2,GF\(5\)\);)p
+3747 1649 V 75 1749 V 188 1719 a([)f([)f(Z\(5\)\2100,)j(Z\(5\)\2100)f
+(],)f([)g(Z\(5\)\2100,)i(Z\(5\))f(],)f([)f(Z\(5\)\2100,)j(Z\(5\)\2102)f
+(],)p 3747 1749 V 75 1848 V 273 1818 a([)e(Z\(5\)\2100,)j(Z\(5\)\2103)f
+(],)f([)g(Z\(5\),)h(Z\(5\)\2100)h(],)e([)f(Z\(5\),)i(Z\(5\))g(],)f([)g
+(Z\(5\),)h(Z\(5\)\2102)g(],)p 3747 1848 V 75 1948 V 273
+1918 a([)e(Z\(5\),)i(Z\(5\)\2103)h(],)e([)f(Z\(5\)\2102,)j(Z\(5\)\2100)
+g(],)e([)f(Z\(5\)\2102,)j(Z\(5\))f(],)f([)f(Z\(5\)\2102,)j(Z\(5\)\2102)
+f(],)p 3747 1948 V 75 2047 V 273 2017 a([)e(Z\(5\)\2102,)j(Z\(5\)\2103)
+f(],)f([)g(Z\(5\)\2103,)i(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2103,)i(Z\(5\))
+e(],)p 3747 2047 V 75 2147 V 273 2117 a([)f(Z\(5\)\2103,)j(Z\(5\)\2102)
+f(],)f([)g(Z\(5\)\2103,)i(Z\(5\)\2103)f(])f(])p 3747
+2147 V 75 2172 4 25 v 3747 2172 V 75 2175 3675 4 v 75
+2397 a
+SDict begin H.S end
+ 75 2397 a 75 2397 a
+SDict begin 13.6 H.A end
+ 75 2397 a 75 2397 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.5) cvn H.B /DEST pdfmark end
+ 75 2397
+a 117 x FJ(5.6.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-9
+b(oricCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2688 a
+Fs(\006)22 b Ft(ToricCode\()50 b(L,)d(F)g(\))2538 b Fr(\(function\))p
+Black 216 2914 a FK(This)22 b(function)j(returns)f(the)f(toric)g(codes)
+h(as)e(in)h(D.)e(Jo)o(yner)j([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2141 2933 a
+SDict begin H.S end
+ 2141 2933 a 0.0236 0.6179 0.0894
+TeXcolorrgb -19 x FK(Jo)o(y04)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2355 2852 a
+SDict begin H.R end
+ 2355 2852 a 2355 2914 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Jo04) cvn H.B /ANN pdfmark end
+ 2355
+2914 a Black 3 w FK(])e(\(see)h(also)g(J.)e(P)-10 b(.)21
+b(Hansen)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3235
+2916 a
+SDict begin H.S end
+ 3235 2916 a 0.0236 0.6179 0.0894 TeXcolorrgb -2
+x FK(Han99)p 0.0236 0.6179 0.0894 TeXcolorrgb 3476 2852
+a
+SDict begin H.R end
+ 3476 2852 a 3476 2914 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Han99) cvn H.B /ANN pdfmark end
+ 3476 2914 a Black 1 w FK(]\).)k(This)75
+3027 y(is)g(a)g(truncated)j(\(generalized\))h(Reed-Muller)e(code.)45
+b(Here)28 b Ft(L)g FK(is)g(a)g(list)h(of)f(inte)o(gral)i(v)o(ectors)g
+(and)f Ft(F)f FK(is)g(the)h(\002nite)75 3140 y(\002eld.)g(The)23
+b(size)h(of)f Ft(F)g FK(must)h(be)f(dif)n(ferent)j(from)d(2.)216
+3252 y(This)h(command)g(returns)h(a)f(record)h(object)g
+Ft(C)e FK(with)g(an)h(e)o(xtra)g(component)i(\(type)f
+Ft(NamesOfComponents\(C)q(\))75 3365 y FK(to)e(see)h(them)g(all\):)29
+b Ft(C!.exponents)f FK(\(namely)c Ft(L)q FK(\).)p 75
+3479 1648 4 v 1764 3484 a FF(Example)p 2102 3479 V 75
+3504 4 25 v 3747 3504 V 75 3604 4 100 v 188 3574 a(gap>)44
+b(C:=ToricCode\([[1,0],[)q(3,4)q(]],)q(GF)q(\(3\))q(\);)p
+3747 3604 V 75 3703 V 188 3673 a(a)f(linear)h([4,1,4]2)h(toric)f(code)g
+(over)g(GF\(3\))p 3747 3703 V 75 3803 V 188 3773 a(gap>)g
+(Display\(GeneratorMat\()q(C\)\))q(;)p 3747 3803 V 75
+3902 V 230 3873 a(1)f(1)g(2)f(2)p 3747 3902 V 75 4002
+V 188 3972 a(gap>)i(Elements\(C\);)p 3747 4002 V 75 4102
+V 188 4072 a([)f([)f(0)h(0)g(0)f(0)h(],)g([)g(1)f(1)h(2)g(2)f(],)h([)g
+(2)g(2)g(1)f(1)h(])g(])p 3747 4102 V 75 4127 4 25 v 3747
+4127 V 75 4130 3675 4 v 75 4333 a FK(See)23 b Ft(EvaluationCode)28
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 931 4334 a
+SDict begin H.S end
+
+931 4334 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1112 4271 a
+SDict begin H.R end
+ 1112 4271
+a 1112 4333 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end
+ 1112 4333 a Black FK(\))c(for)g(a)f(more)g(general)j
+(construction.)75 4495 y
+SDict begin H.S end
+ 75 4495 a 75 4495 a
+SDict begin 13.6 H.A end
+ 75 4495
+a 75 4495 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5.7) cvn H.B /DEST pdfmark end
+ 75 4495 a 130 x FM(5.7)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Algebraic)31 b(geometric)e(codes)p Black 75 4832
+a FK(Certain)24 b Fy(GU)m(A)-6 b(V)f(A)22 b FK(functions)k(related)f
+(to)f(algebraic)i(geometric)f(codes)g(are)e(described)j(in)e(this)g
+(section.)75 4983 y
+SDict begin H.S end
+ 75 4983 a 75 4983 a
+SDict begin 13.6 H.A end
+ 75 4983 a 75
+4983 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.1) cvn H.B /DEST pdfmark end
+ 75 4983 a 96 x FJ(5.7.1)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Af\002neCur)o(v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5254 a Fs(\006)e Ft(AffineCurve\()51 b(poly,)d(ring)g(\))2167
+b Fr(\(function\))p Black 216 5479 a FK(This)21 b(function)j(simply)e
+(de\002nes)g(the)g(data)g(structure)i(of)d(an)h(af)n(\002ne)f(plane)h
+(curv)o(e.)29 b(In)21 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)20
+b(an)h(af)n(\002ne)g(curv)o(e)75 5592 y(is)e(a)h(record)h
+Ft(crv)f FK(ha)n(ving)h(tw)o(o)e(components:)30 b(a)19
+b(polynomial)j Ft(poly)r FK(,)d(accessed)j(in)e Fy(GU)m(A)-6
+b(V)f(A)17 b FK(by)j Ft(crv.polynomial)5 b FK(,)p Black
+Black eop end end
+%%Page: 85 85
+TeXDict begin HPSdict begin 85 84 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.85) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(85)p Black 75 399 a(and)29 b(a)f(polynomial)j(ring)e(o)o
+(v)o(er)f(a)g(\002eld)h Fq(F)35 b FK(in)28 b(tw)o(o)g(v)n(ariables)j
+Ft(ring)q FK(,)e(accessed)h(in)f Fy(GU)m(A)-6 b(V)f(A)26
+b FK(by)j Ft(crv.ring)s FK(,)f(con-)75 511 y(taining)d
+Ft(poly)r FK(.)j(Y)-10 b(ou)23 b(use)h(this)g(function)i(to)d(de\002ne)
+h(a)f(curv)o(e)h(in)g Fy(GU)m(A)-6 b(V)f(A)p FK(.)216
+624 y(F)o(or)23 b(e)o(xample,)i(for)f(the)h(ring,)f(one)h(could)g(tak)o
+(e)g Fi(Q)p Fo([)p Fq(x)p Fp(;)10 b Fq(y)p Fo(])p FK(,)25
+b(and)f(for)g(the)h(polynomial)h(one)f(could)g(tak)o(e)39
+b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))22 b(=)75
+737 y Fq(x)115 704 y Fr(2)166 737 y Fo(+)13 b Fq(y)290
+704 y Fr(2)339 737 y Fv(\000)g FK(1.)28 b(F)o(or)22 b(the)i(af)n
+(\002ne)g(line,)g(simply)g(taking)h Fi(Q)p Fo([)p Fq(x)p
+Fp(;)10 b Fq(y)p Fo(])24 b FK(for)g(the)f(ring)i(and)38
+b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))22 b(=)e
+Fq(y)j FK(for)g(the)h(polynomial.)216 850 y(\(Not)f(sure)i(if)e
+Fq(F)30 b FK(neeeds)25 b(to)e(be)h(a)f(\002eld)g(in)h(f)o(act)g(...\))
+216 963 y(T)-7 b(o)23 b(compute)h(its)g(de)o(gree,)g(simply)h(use)f
+(the)f Ft(DegreeMultivariat)q(ePo)q(lyn)q(omi)q(al)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2962 964 a
+SDict begin H.S end
+
+2962 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.6.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3143 901 a
+SDict begin H.R end
+ 3143 901
+a 3143 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.6.2) cvn H.B /ANN pdfmark end
+ 3143 963 a Black FK(\))24 b(command.)p 75
+1072 1648 4 v 1764 1077 a FF(Example)p 2102 1072 V 75
+1097 4 25 v 3747 1097 V 75 1197 4 100 v 188 1167 a(gap>)p
+3747 1197 V 75 1296 V 188 1267 a(gap>)44 b(F:=GF\(11\);;)p
+3747 1296 V 75 1396 V 188 1366 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p
+3747 1396 V 75 1496 V 188 1466 a(PolynomialRing\(...,)49
+b([)42 b(x_1,)i(x_2)f(]\))p 3747 1496 V 75 1595 V 188
+1565 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q
+(g\(R)q(2\);)q(;)p 3747 1595 V 75 1695 V 188 1665 a(gap>)g
+(x:=vars[1];;)i(y:=vars[2];;)p 3747 1695 V 75 1795 V
+188 1765 a(gap>)e(poly:=y;;)h(crvP1:=AffineCurve\()q(pol)q(y,R)q(2\);)p
+3747 1795 V 75 1894 V 188 1864 a(rec\()f(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d
+(x_2)g(\))p 3747 1894 V 75 1994 V 188 1964 a(gap>)h
+(degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q(ePo)q(lyn)q(omi)q(al\()q(pol)
+q(y,R)q(2\);)p 3747 1994 V 75 2093 V 188 2064 a(1)p 3747
+2093 V 75 2193 V 188 2163 a(gap>)g(poly:=y\2102-x*\(x\2102-1\);;)49
+b(ell_crv:=AffineCurv)q(e\(p)q(oly)q(,R2)q(\);)p 3747
+2193 V 75 2293 V 188 2263 a(rec\()44 b(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d
+(-x_1\2103+x_2\2102+x_1)48 b(\))p 3747 2293 V 75 2392
+V 188 2362 a(gap>)c(degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q(ePo)q(lyn)
+q(omi)q(al\()q(pol)q(y,R)q(2\);)p 3747 2392 V 75 2492
+V 188 2462 a(3)p 3747 2492 V 75 2592 V 188 2562 a(gap>)g
+(poly:=x\2102+y\2102-1;;)k(circle:=AffineCurve\()q(pol)q(y,R)q(2\);)p
+3747 2592 V 75 2691 V 188 2661 a(rec\()c(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d
+(x_1\2102+x_2\2102-Z\(11\)\2100)49 b(\))p 3747 2691 V
+75 2791 V 188 2761 a(gap>)44 b(degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q
+(ePo)q(lyn)q(omi)q(al\()q(pol)q(y,R)q(2\);)p 3747 2791
+V 75 2890 V 188 2861 a(2)p 3747 2890 V 75 2990 V 188
+2960 a(gap>)g(q:=3;;)p 3747 2990 V 75 3090 V 188 3060
+a(gap>)g(F:=GF\(q\2102\);;)p 3747 3090 V 75 3189 V 188
+3159 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747 3189
+V 75 3289 V 188 3259 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q
+(ial)q(Rin)q(g\(R)q(\);)p 3747 3289 V 75 3389 V 188 3359
+a([)f(x_1,)g(x_2)h(])p 3747 3389 V 75 3488 V 188 3458
+a(gap>)g(x:=vars[1];)p 3747 3488 V 75 3588 V 188 3558
+a(x_1)p 3747 3588 V 75 3687 V 188 3658 a(gap>)g(y:=vars[2];)p
+3747 3687 V 75 3787 V 188 3757 a(x_2)p 3747 3787 V 75
+3887 V 188 3857 a(gap>)g(crv:=AffineCurve\(y\210q+)q(y-x)q(\210\(q)q
+(+1)q(\),R)q(\);)p 3747 3887 V 75 3986 V 188 3956 a(rec\()g(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d
+(-x_1\2104+x_2\2103+x_2)48 b(\))p 3747 3986 V 75 4086
+V 188 4056 a(gap>)p 3747 4086 V 75 4111 4 25 v 3747 4111
+V 75 4114 3675 4 v 75 4313 a FK(In)27 b Fy(GAP)p FK(,)e(a)i
+Fq(point)j FK(on)d(a)g(curv)o(e)h(de\002ned)g(by)41 b
+Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))25 b(=)c
+FK(0)27 b(is)g(simply)h(a)f(list)h Ft([a,b])g FK(of)f(elements)i(of)e
+Fq(F)33 b FK(satisfying)75 4426 y(this)24 b(polynomial)i(equation.)75
+4577 y
+SDict begin H.S end
+ 75 4577 a 75 4577 a
+SDict begin 13.6 H.A end
+ 75 4577 a 75 4577 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.2) cvn H.B /DEST pdfmark end
+ 75 4577
+a 96 x FJ(5.7.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Af\002neP)n(ointsOnCur)o
+(v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4847 a Fs(\006)c
+Ft(AffinePointsOnCur)q(ve\()53 b(f,)47 b(R,)g(E)g(\))1935
+b Fr(\(function\))p Black 216 5073 a Ft(AffinePointsOnCurv)q(e\(f)q
+(,R,)q(E\))27 b FK(returns)c(the)f(points)h Fo(\()p Fq(x)p
+Fp(;)10 b Fq(y)p Fo(\))20 b Fv(2)e Fq(E)2437 5040 y Fr(2)2494
+5073 y FK(satisying)38 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d
+Fq(y)p Fo(\))20 b(=)e FK(0,)j(where)h Ft(f)f FK(is)g(an)75
+5186 y(element)k(of)e Fq(R)d Fo(=)g Fq(F)7 b Fo([)p Fq(x)p
+Fp(;)j Fq(y)p Fo(])p FK(.)p 75 5298 1648 4 v 1764 5303
+a FF(Example)p 2102 5298 V 75 5323 4 25 v 3747 5323 V
+75 5423 4 100 v 188 5393 a(gap>)44 b(F:=GF\(11\);;)p
+3747 5423 V 75 5523 V 188 5493 a(gap>)g(R)e(:=)h(PolynomialRing\(F,[")q
+(x",)q("y)q("]\))q(;)p 3747 5523 V 75 5622 V 188 5592
+a(PolynomialRing\(...,)49 b([)42 b(x,)h(y)g(]\))p 3747
+5622 V Black Black eop end end
+%%Page: 86 86
+TeXDict begin HPSdict begin 86 85 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.86) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(86)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(indets)g(:=)f(IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q(R\);)q
+(;)p 3747 428 V 75 528 V 188 498 a(gap>)h(x:=indets[1];;)j
+(y:=indets[2];;)p 3747 528 V 75 628 V 188 598 a(gap>)d
+(P:=AffinePointsOnCurv)q(e\(y)q(\2102-)q(x\210)q(11+)q(x,R)q(,F\))q(;)p
+3747 628 V 75 727 V 188 697 a([)f([)f(Z\(11\)\2109,)j(0*Z\(11\))g(],)e
+([)g(Z\(11\)\2108,)i(0*Z\(11\))g(],)e([)f(Z\(11\)\2107,)j(0*Z\(11\))g
+(],)p 3747 727 V 75 827 V 273 797 a([)d(Z\(11\)\2106,)j(0*Z\(11\))g(],)
+e([)g(Z\(11\)\2105,)i(0*Z\(11\))g(],)e([)f(Z\(11\)\2104,)j(0*Z\(11\))g
+(],)p 3747 827 V 75 927 V 273 897 a([)d(Z\(11\)\2103,)j(0*Z\(11\))g(],)
+e([)g(Z\(11\)\2102,)i(0*Z\(11\))g(],)e([)f(Z\(11\),)j(0*Z\(11\))f(],)p
+3747 927 V 75 1026 V 273 996 a([)e(Z\(11\)\2100,)j(0*Z\(11\))g(],)e([)g
+(0*Z\(11\),)i(0*Z\(11\))g(])d(])p 3747 1026 V 75 1051
+4 25 v 3747 1051 V 75 1054 3675 4 v 75 1186 a
+SDict begin H.S end
+ 75 1186
+a 75 1186 a
+SDict begin 13.6 H.A end
+ 75 1186 a 75 1186 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.3) cvn H.B /DEST pdfmark end
+ 75 1186 a 117 x FJ(5.7.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(GenusCur)o(v)o(e)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 1477 a Fs(\006)22 b Ft(GenusCurve\()51
+b(crv)c(\))2538 b Fr(\(function\))p Black 216 1703 a
+FK(If)35 b Ft(crv)g FK(represents)52 b Fq(f)13 b Fo(\()p
+Fq(x)p Fp(;)d Fq(y)p Fo(\))28 b(=)e FK(0,)37 b(where)50
+b Fq(f)d FK(is)35 b(a)f(polynomial)j(of)e(de)o(gree)h
+Fq(d)5 b FK(,)37 b(then)f(this)f(function)i(simply)75
+1816 y(returns)24 b Fo(\()p Fq(d)17 b Fv(\000)11 b FK(1)p
+Fo(\)\()p Fq(d)17 b Fv(\000)11 b FK(2)p Fo(\))p Fp(=)p
+FK(2.)30 b(At)21 b(the)h(present,)i(the)f(function)h(does)f(not)g
+(check)h(if)d(the)i(curv)o(e)g(is)f(singular)i(\(in)f(which)75
+1929 y(case)h(the)g(result)h(may)e(be)h(f)o(alse\).)p
+75 2046 1648 4 v 1764 2051 a FF(Example)p 2102 2046 V
+75 2071 4 25 v 3747 2071 V 75 2170 4 100 v 188 2140 a(gap>)44
+b(q:=4;;)p 3747 2170 V 75 2270 V 188 2240 a(gap>)g(F:=GF\(q\2102\);;)p
+3747 2270 V 75 2370 V 188 2340 a(gap>)g(a:=X\(F\);;)p
+3747 2370 V 75 2469 V 188 2439 a(gap>)g(R1:=PolynomialRing\(F,)q([a])q
+(\);;)p 3747 2469 V 75 2569 V 188 2539 a(gap>)g(var1:=IndeterminatesO)q
+(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747
+2569 V 75 2668 V 188 2639 a(gap>)g(b:=X\(F\);;)p 3747
+2668 V 75 2768 V 188 2738 a(gap>)g(R2:=PolynomialRing\(F,)q([a,)q(b]\))
+q(;;)p 3747 2768 V 75 2868 V 188 2838 a(gap>)g(var2:=IndeterminatesO)q
+(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747
+2868 V 75 2967 V 188 2937 a(gap>)g(crv:=AffineCurve\(b\210q+)q(b-a)q
+(\210\(q)q(+1)q(\),R)q(2\);)q(;)p 3747 2967 V 75 3067
+V 188 3037 a(gap>)g(crv:=AffineCurve\(b\210q+)q(b-a)q(\210\(q)q(+1)q
+(\),R)q(2\);)p 3747 3067 V 75 3167 V 188 3137 a(rec\()g(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_1)f(]\),)g(polynomial)j(:=)d
+(x_1\2105+x_1\2104+x_1)48 b(\))p 3747 3167 V 75 3266
+V 188 3236 a(gap>)c(GenusCurve\(crv\);)p 3747 3266 V
+75 3366 V 188 3336 a(36)p 3747 3366 V 75 3465 V 3747
+3465 V 75 3490 4 25 v 3747 3490 V 75 3493 3675 4 v 75
+3626 a
+SDict begin H.S end
+ 75 3626 a 75 3626 a
+SDict begin 13.6 H.A end
+ 75 3626 a 75 3626 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.4) cvn H.B /DEST pdfmark end
+ 75 3626
+a 116 x FJ(5.7.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GOrbitP)n(oint)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3916 a Fs(\006)22 b
+Ft(GOrbitPoint)51 b(\()46 b(G,)i(P)e(\))2399 b Fr(\(function\))p
+Black 216 4142 a Ft(P)30 b FK(must)g(be)g(a)g(point)i(in)e(projecti)n
+(v)o(e)i(space)f Fi(P)1676 4109 y Fm(n)1713 4142 y Fo(\()p
+Fq(F)8 b Fo(\))p FK(,)31 b Ft(G)f FK(must)g(be)g(a)g(\002nite)g
+(subgroup)j(of)d Fq(GL)p Fo(\()p Fq(n)15 b Fo(+)g FK(1)p
+Fp(;)10 b Fq(F)e Fo(\))p FK(,)31 b(This)75 4255 y(function)26
+b(returns)f(all)f(\(representati)n(v)o(es)j(of)d(projecti)n(v)o(e\))i
+(points)f(in)e(the)h(orbit)g Fq(G)13 b Fv(\001)g Fq(P)p
+FK(.)216 4368 y(The)26 b(e)o(xample)h(belo)n(w)g(computes)h(the)f
+(orbit)g(of)f(the)h(automorphism)i(group)f(on)e(the)h(Klein)f(quartic)i
+(o)o(v)o(er)f(the)75 4481 y(\002eld)c Fq(GF)7 b Fo(\()p
+FK(43)p Fo(\))24 b FK(on)g(the)g(\223point)h(at)e(in\002nity\224.)p
+75 4601 1648 4 v 1764 4606 a FF(Example)p 2102 4601 V
+75 4626 4 25 v 3747 4626 V 75 4726 4 100 v 188 4696 a(gap>)44
+b(R:=)f(PolynomialRing\()k(GF\(43\),)e(3)e(\);;)p 3747
+4726 V 75 4825 V 188 4795 a(gap>)h(vars:=)g(IndeterminatesOfPoly)q(no)q
+(mia)q(lRi)q(ng\()q(R\);)q(;)p 3747 4825 V 75 4925 V
+188 4895 a(gap>)g(x:=)f(vars[1];;)i(y:=)f(vars[2];;)h(z:=)f(vars[3];;)p
+3747 4925 V 75 5024 V 188 4995 a(gap>)g(zz:=Z\(43\)\2106;)p
+3747 5024 V 75 5124 V 188 5094 a(Z\(43\)\2106)p 3747
+5124 V 75 5224 V 188 5194 a(gap>)g(zzz:=Z\(43\);)p 3747
+5224 V 75 5323 V 188 5293 a(Z\(43\))p 3747 5323 V 75
+5423 V 188 5393 a(gap>)g(rho1:=zz\2100*[[zz\2104,0,0)q(],[)q(0,z)q
+(z\210)q(2,0)q(],[)q(0,0)q(,zz)q(]];)p 3747 5423 V 75
+5523 V 188 5493 a([)f([)f(Z\(43\)\21024,)k(0*Z\(43\),)f(0*Z\(43\))f(],)
+p 3747 5523 V 75 5622 V 188 5592 a([)f(0*Z\(43\),)i(Z\(43\)\21012,)g
+(0*Z\(43\))g(],)p 3747 5622 V Black Black eop end end
+%%Page: 87 87
+TeXDict begin HPSdict begin 87 86 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.87) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(87)p Black 75 428 4 100 v 188 399 a FF([)43
+b(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2106)f(])f(])p 3747
+428 V 75 528 V 188 498 a(gap>)h(rho2:=zz\2100*[[0,1,0],[)q(0,0)q(,1])q
+(,[)q(1,0)q(,0])q(];)p 3747 528 V 75 628 V 188 598 a([)f([)f
+(0*Z\(43\),)j(Z\(43\)\2100,)g(0*Z\(43\))g(],)p 3747 628
+V 75 727 V 188 697 a([)e(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2100)f(],)p
+3747 727 V 75 827 V 188 797 a([)f(Z\(43\)\2100,)i(0*Z\(43\),)g
+(0*Z\(43\))f(])f(])p 3747 827 V 75 927 V 188 897 a(gap>)h
+(rho3:=\(-1\)*[[\(zz-zz\2106)49 b(\)/zzz\2107,\()d(zz\2102-zz\2105)f
+(\)/)e(zzz\2107,)h(\()f(zz\2104-zz\2103)i(\)/)e(zzz\2107],)p
+3747 927 V 75 1026 V 188 996 a(>)551 b([\()43 b(zz\2102-zz\2105)i(\)/)e
+(zzz\2107,)i(\()d(zz\2104-zz\2103)k(\)/)d(zzz\2107,)h(\()f(zz-zz\2106)h
+(\)/)f(zzz\2107],)p 3747 1026 V 75 1126 V 188 1096 a(>)551
+b([\()43 b(zz\2104-zz\2103)i(\)/)e(zzz\2107,)i(\()d(zz-zz\2106)j(\)/)e
+(zzz\2107,)h(\()f(zz\2102-zz\2105)i(\)/)e(zzz\2107]];)p
+3747 1126 V 75 1225 V 188 1196 a([)g([)f(Z\(43\)\2109,)j
+(Z\(43\)\21028,)h(Z\(43\)\21012)f(],)p 3747 1225 V 75
+1325 V 188 1295 a([)e(Z\(43\)\21028,)i(Z\(43\)\21012,)g(Z\(43\)\2109)g
+(],)p 3747 1325 V 75 1425 V 188 1395 a([)e(Z\(43\)\21012,)i
+(Z\(43\)\2109,)g(Z\(43\)\21028)g(])e(])p 3747 1425 V
+75 1524 V 188 1494 a(gap>)h(G:=Group\([rho1,rho2,r)q(ho3)q(]\);)q(;)49
+b(#PSL\(2,7\))p 3747 1524 V 75 1624 V 188 1594 a(gap>)44
+b(Size\(G\);)p 3747 1624 V 75 1724 V 188 1694 a(168)p
+3747 1724 V 75 1823 V 188 1793 a(gap>)g(P:=[1,0,0]*zzz\2100;)p
+3747 1823 V 75 1923 V 188 1893 a([)f(Z\(43\)\2100,)i(0*Z\(43\),)g
+(0*Z\(43\))f(])p 3747 1923 V 75 2022 V 188 1993 a(gap>)g
+(O:=GOrbitPoint\(G,P\);)p 3747 2022 V 75 2122 V 188 2092
+a([)f([)f(Z\(43\)\2100,)j(0*Z\(43\),)g(0*Z\(43\))g(],)e([)g(0*Z\(43\),)
+i(Z\(43\)\2100,)g(0*Z\(43\))g(],)p 3747 2122 V 75 2222
+V 188 2192 a([)e(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2100)f(],)f([)g
+(Z\(43\)\2100,)i(Z\(43\)\21039,)h(Z\(43\)\21016)f(],)p
+3747 2222 V 75 2321 V 188 2291 a([)e(Z\(43\)\2100,)i(Z\(43\)\21033,)g
+(Z\(43\)\21028)g(],)e([)g(Z\(43\)\2100,)i(Z\(43\)\21027,)g
+(Z\(43\)\21040)g(],)p 3747 2321 V 75 2421 V 188 2391
+a([)e(Z\(43\)\2100,)i(Z\(43\)\21021,)g(Z\(43\)\21010)g(],)e([)g
+(Z\(43\)\2100,)i(Z\(43\)\21015,)g(Z\(43\)\21022)g(],)p
+3747 2421 V 75 2521 V 188 2491 a([)e(Z\(43\)\2100,)i(Z\(43\)\2109,)g
+(Z\(43\)\21034)g(],)e([)g(Z\(43\)\2100,)i(Z\(43\)\2103,)g(Z\(43\)\2104)
+f(],)p 3747 2521 V 75 2620 V 188 2590 a([)f(Z\(43\)\2103,)i
+(Z\(43\)\21022,)g(Z\(43\)\2106)g(],)e([)g(Z\(43\)\2103,)i
+(Z\(43\)\21016,)g(Z\(43\)\21018)g(],)p 3747 2620 V 75
+2720 V 188 2690 a([)e(Z\(43\)\2103,)i(Z\(43\)\21010,)g(Z\(43\)\21030)g
+(],)e([)g(Z\(43\)\2103,)i(Z\(43\)\2104,)g(Z\(43\)\2100)g(],)p
+3747 2720 V 75 2819 V 188 2790 a([)e(Z\(43\)\2103,)i(Z\(43\)\21040,)g
+(Z\(43\)\21012)g(],)e([)g(Z\(43\)\2103,)i(Z\(43\)\21034,)g
+(Z\(43\)\21024)g(],)p 3747 2819 V 75 2919 V 188 2889
+a([)e(Z\(43\)\2103,)i(Z\(43\)\21028,)g(Z\(43\)\21036)g(],)e([)g
+(Z\(43\)\2104,)i(Z\(43\)\21030,)g(Z\(43\)\21027)g(],)p
+3747 2919 V 75 3019 V 188 2989 a([)e(Z\(43\)\2104,)i(Z\(43\)\21024,)g
+(Z\(43\)\21039)g(],)e([)g(Z\(43\)\2104,)i(Z\(43\)\21018,)g
+(Z\(43\)\2109)g(],)p 3747 3019 V 75 3118 V 188 3088 a([)e
+(Z\(43\)\2104,)i(Z\(43\)\21012,)g(Z\(43\)\21021)g(],)e([)g
+(Z\(43\)\2104,)i(Z\(43\)\2106,)g(Z\(43\)\21033)g(],)p
+3747 3118 V 75 3218 V 188 3188 a([)e(Z\(43\)\2104,)i(Z\(43\)\2100,)g
+(Z\(43\)\2103)f(],)f([)g(Z\(43\)\2104,)i(Z\(43\)\21036,)h
+(Z\(43\)\21015)f(])d(])p 3747 3218 V 75 3318 V 188 3288
+a(gap>)i(Length\(O\);)p 3747 3318 V 75 3417 V 188 3387
+a(24)p 3747 3417 V 75 3517 V 3747 3517 V 75 3542 4 25
+v 3747 3542 V 75 3545 3675 4 v 75 3758 a FK(Informally)-6
+b(,)34 b(a)29 b Fq(divisor)34 b FK(on)d(a)f(curv)o(e)h(is)f(a)f(formal)
+i(inte)o(ger)h(linear)f(combination)i(of)d(points)i(on)e(the)g(curv)o
+(e,)j Fq(D)23 b Fo(=)75 3870 y Fq(m)141 3884 y Fr(1)178
+3870 y Fq(P)225 3884 y Fr(1)278 3870 y Fo(+)16 b Fp(:::)g
+Fo(+)g Fq(m)609 3884 y Fm(k)643 3870 y Fq(P)690 3884
+y Fm(k)725 3870 y FK(,)34 b(where)f(the)g Fq(m)1245 3884
+y Fm(i)1299 3870 y FK(are)g(inte)o(gers)i(\(the)e(\223multiplicity\224)
+j(of)d Fq(P)2626 3884 y Fm(i)2680 3870 y FK(in)g Fq(D)p
+FK(\))f(and)h Fq(P)3121 3884 y Fm(i)3175 3870 y FK(are)g(\()p
+Fq(F)8 b FK(-rational\))75 3983 y(points)34 b(on)e(the)h(af)n(\002ne)f
+(plane)h(curv)o(e.)56 b(In)32 b(other)h(w)o(ords,)i(a)d(di)n(visor)i
+(is)e(an)g(element)h(of)g(the)f(free)h(abelian)h(group)75
+4096 y(generated)e(by)d(the)g Fq(F)7 b FK(-rational)31
+b(af)n(\002ne)e(points)h(on)g(the)f(curv)o(e.)46 b(The)28
+b Fq(support)33 b FK(of)c(a)f(di)n(visor)i Fq(D)e FK(is)h(simply)h(the)
+f(set)75 4209 y(of)f(points)i(which)e(occurs)i(in)d(the)i(sum)f
+(de\002ning)h Fq(D)e FK(with)h(non-zero)i(\223multiplicity\224.)46
+b(The)27 b(data)i(structure)h(for)f(a)75 4322 y(di)n(visor)c(on)f(an)f
+(af)n(\002ne)h(plane)g(curv)o(e)h(is)e(a)g(record)i(ha)n(ving)g(the)f
+(follo)n(wing)h(components:)p Black 211 4510 a Fv(\017)p
+Black 46 w FK(the)f(coef)n(\002cients)i(\(the)e(inte)o(ger)h(weights)f
+(of)g(the)f(points)i(in)f(the)g(support\),)p Black 211
+4697 a Fv(\017)p Black 46 w FK(the)g(support,)p Black
+211 4885 a Fv(\017)p Black 46 w FK(the)g(curv)o(e,)g(itself)h(a)e
+(record)i(which)f(has)f(components:)32 b(polynomial)26
+b(and)e(polynomial)i(ring.)75 5038 y
+SDict begin H.S end
+ 75 5038 a 75 5038
+a
+SDict begin 13.6 H.A end
+ 75 5038 a 75 5038 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.5) cvn H.B /DEST pdfmark end
+ 75 5038 a 96 x FJ(5.7.5)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Di)o(visorOnAf\002neCur)o(v)o(e)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5308 a Fs(\006)c Ft(DivisorOnAffineCu)q(rve)
+q(\()52 b(cdiv,)d(sdiv,)f(crv)f(\))1518 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 88 88
+TeXDict begin HPSdict begin 88 87 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.88) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(88)p Black 216 399 a(This)25 b(is)f(the)h(command)h(you)f
+(use)h(to)e(de\002ne)h(a)g(di)n(visor)h(in)f Fy(GU)m(A)-6
+b(V)f(A)p FK(.)22 b(Of)i(course,)j Ft(crv)e FK(is)f(the)h(curv)o(e)h
+(on)f(which)75 511 y(the)h(di)n(visor)h(li)n(v)o(es,)f
+Ft(cdiv)g FK(is)f(the)h(list)g(of)g(coef)n(\002cients)h(\(or)f
+(\223multiplicities\224\),)k Ft(sdiv)c FK(is)f(the)h(list)g(of)f
+(points)i(on)f Ft(crv)75 624 y FK(in)d(the)h(support.)p
+75 682 1648 4 v 1764 687 a FF(Example)p 2102 682 V 75
+707 4 25 v 3747 707 V 75 807 4 100 v 188 777 a(gap>)44
+b(q:=5;)p 3747 807 V 75 906 V 188 876 a(5)p 3747 906
+V 75 1006 V 188 976 a(gap>)g(F:=GF\(q\);)p 3747 1006
+V 75 1106 V 188 1076 a(GF\(5\))p 3747 1106 V 75 1205
+V 188 1175 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747
+1205 V 75 1305 V 188 1275 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q
+(om)q(ial)q(Rin)q(g\(R)q(\);)p 3747 1305 V 75 1404 V
+188 1375 a([)f(x_1,)g(x_2)h(])p 3747 1404 V 75 1504 V
+188 1474 a(gap>)g(x:=vars[1];)p 3747 1504 V 75 1604 V
+188 1574 a(x_1)p 3747 1604 V 75 1703 V 188 1673 a(gap>)g(y:=vars[2];)p
+3747 1703 V 75 1803 V 188 1773 a(x_2)p 3747 1803 V 75
+1903 V 188 1873 a(gap>)g(crv:=AffineCurve\(y\2103-)q(x\2103)q(-x-)q(1,)
+q(R\);)p 3747 1903 V 75 2002 V 188 1972 a(rec\()g(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)p
+3747 2002 V 75 2102 V 400 2072 a(polynomial)i(:=)e
+(-x_1\2103+x_2\2103-x_1-Z)q(\(5\))q(\2100)49 b(\))p 3747
+2102 V 75 2201 V 188 2172 a(gap>)44 b(Pts:=AffinePointsOnCu)q(rve)q
+(\(cr)q(v,)q(R,F)q(\);;)p 3747 2201 V 75 2301 V 188 2271
+a(gap>)g(supp:=[Pts[1],Pts[2]])q(;)p 3747 2301 V 75 2401
+V 188 2371 a([)f([)f(0*Z\(5\),)j(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2100,)i
+(Z\(5\))f(])e(])p 3747 2401 V 75 2500 V 188 2470 a(gap>)i
+(D:=DivisorOnAffineCur)q(ve\()q([1,)q(-1)q(],s)q(upp)q(,cr)q(v\);)p
+3747 2500 V 75 2600 V 188 2570 a(rec\()g(coeffs)g(:=)f([)g(1,)g(-1)g
+(],)p 3747 2600 V 75 2700 V 400 2670 a(support)h(:=)f([)g([)g
+(0*Z\(5\),)h(Z\(5\)\2100)h(],)e([)g(Z\(5\)\2100,)h(Z\(5\))g(])f(],)p
+3747 2700 V 75 2799 V 400 2769 a(curve)h(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(x_1,)g(x_2)h(]\),)p
+3747 2799 V 75 2899 V 992 2869 a(polynomial)i(:=)d
+(-x_1\2103+x_2\2103-x_1-Z\()q(5\)\210)q(0)48 b(\))43
+b(\))p 3747 2899 V 75 2998 V 3747 2998 V 75 3023 4 25
+v 3747 3023 V 75 3026 3675 4 v 75 3152 a
+SDict begin H.S end
+ 75 3152 a 75
+3152 a
+SDict begin 13.6 H.A end
+ 75 3152 a 75 3152 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.6) cvn H.B /DEST pdfmark end
+ 75 3152 a 116 x FJ(5.7.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorAddition)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 3442 a Fs(\006)22 b Ft(DivisorAddition)52
+b(\()47 b(D1,)g(D2)g(\))2121 b Fr(\(function\))p Black
+216 3668 a FK(If)26 b Fq(D)368 3682 y Fr(1)427 3668 y
+Fo(=)21 b Fq(m)585 3682 y Fr(1)622 3668 y Fq(P)669 3682
+y Fr(1)719 3668 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(m)1044
+3682 y Fm(k)1077 3668 y Fq(P)1124 3682 y Fm(k)1184 3668
+y FK(and)26 b Fq(D)1406 3682 y Fr(2)1465 3668 y Fo(=)21
+b Fq(n)1602 3682 y Fr(1)1640 3668 y Fq(P)1687 3682 y
+Fr(1)1737 3668 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(n)2041
+3682 y Fm(k)2075 3668 y Fq(P)2122 3682 y Fm(k)2181 3668
+y FK(are)27 b(di)n(visors)g(then)g Fq(D)2876 3682 y Fr(1)2927
+3668 y Fo(+)14 b Fq(D)3078 3682 y Fr(2)3136 3668 y Fo(=)21
+b(\()p Fq(m)3329 3682 y Fr(1)3380 3668 y Fo(+)14 b Fq(n)3510
+3682 y Fr(1)3547 3668 y Fo(\))p Fq(P)3629 3682 y Fr(1)3679
+3668 y Fo(+)75 3781 y Fp(:::)f Fo(+)g(\()p Fq(m)348 3795
+y Fm(k)395 3781 y Fo(+)g Fq(n)524 3795 y Fm(k)558 3781
+y Fo(\))p Fq(P)640 3795 y Fm(k)675 3781 y FK(.)75 3929
+y
+SDict begin H.S end
+ 75 3929 a 75 3929 a
+SDict begin 13.6 H.A end
+ 75 3929 a 75 3929 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.7) cvn H.B /DEST pdfmark end
+ 75 3929 a 93
+x FJ(5.7.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorDegr)n(ee)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4197 a Fs(\006)22 b
+Ft(DivisorDegree)51 b(\()c(D)g(\))2445 b Fr(\(function\))p
+Black 216 4422 a FK(If)23 b Fq(D)d Fo(=)g Fq(m)542 4436
+y Fr(1)579 4422 y Fq(P)626 4436 y Fr(1)676 4422 y Fo(+)13
+b Fp(:::)g Fo(+)g Fq(m)998 4436 y Fm(k)1031 4422 y Fq(P)1078
+4436 y Fm(k)1135 4422 y FK(is)23 b(a)g(di)n(visor)i(then)f(the)g
+Fq(de)l(gr)m(ee)h FK(is)f Fq(m)2280 4436 y Fr(1)2329
+4422 y Fo(+)13 b Fp(:::)g Fo(+)g Fq(m)2651 4436 y Fm(k)2684
+4422 y FK(.)75 4566 y
+SDict begin H.S end
+ 75 4566 a 75 4566 a
+SDict begin 13.6 H.A end
+ 75 4566 a 75
+4566 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.8) cvn H.B /DEST pdfmark end
+ 75 4566 a 98 x FJ(5.7.8)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Di)o(visorNegate)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4838 a Fs(\006)22 b Ft(DivisorNegate)51 b(\()c(D)g(\))2445
+b Fr(\(function\))p Black 216 5064 a FK(Self-e)o(xplanatory)-6
+b(.)75 5209 y
+SDict begin H.S end
+ 75 5209 a 75 5209 a
+SDict begin 13.6 H.A end
+ 75 5209 a 75 5209 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.9) cvn H.B /DEST pdfmark end
+
+75 5209 a 96 x FJ(5.7.9)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(Di)o(visorIsZer)n(o)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5479 a Fs(\006)22 b Ft(DivisorIsZero)51 b(\()c(D)g(\))2445
+b Fr(\(function\))p Black Black Black eop end end
+%%Page: 89 89
+TeXDict begin HPSdict begin 89 88 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.89) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(89)p Black 216 399 a(Self-e)o(xplanatory)-6
+b(.)75 551 y
+SDict begin H.S end
+ 75 551 a 75 551 a
+SDict begin 13.6 H.A end
+ 75 551 a 75 551 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.10) cvn H.B /DEST pdfmark end
+ 75 551
+a 97 x FJ(5.7.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorsEqual)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 822 a Fs(\006)22 b Ft(DivisorsEqual)51
+b(\()c(D1,)h(D2)f(\))2213 b Fr(\(function\))p Black 216
+1048 a FK(Self-e)o(xplanatory)-6 b(.)75 1200 y
+SDict begin H.S end
+ 75 1200
+a 75 1200 a
+SDict begin 13.6 H.A end
+ 75 1200 a 75 1200 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.11) cvn H.B /DEST pdfmark end
+ 75 1200 a 97 x FJ(5.7.11)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorGCD)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1471 a Fs(\006)22 b Ft(DivisorGCD)50 b(\()d(D1,)h(D2)f
+(\))2352 b Fr(\(function\))p Black 216 1697 a FK(If)49
+b Fq(m)34 b Fo(=)41 b Fq(p)582 1655 y Fm(e)611 1665 y
+Fd(1)582 1724 y Fr(1)644 1697 y Fp(:::)7 b Fq(p)771 1654
+y Fm(e)800 1665 y Ff(k)771 1725 y Fm(k)881 1697 y FK(and)49
+b Fq(n)35 b Fo(=)41 b Fq(p)1307 1651 y Fm(f)1327 1661
+y Fd(1)1297 1724 y Fr(1)1361 1697 y Fp(:::)7 b Fq(p)1498
+1651 y Fm(f)1518 1662 y Ff(k)1488 1725 y Fm(k)1598 1697
+y FK(are)49 b(tw)o(o)f(inte)o(gers)j(then)e(their)h(greatest)h(common)e
+(di)n(visor)h(is)75 1833 y Fq(G)-5 b(C)r(D)p Fo(\()p
+Fq(m)p Fp(;)10 b Fq(n)p Fo(\))30 b(=)37 b Fq(p)664 1784
+y Fm(min)p Fk(\()p Fm(e)818 1794 y Fd(1)848 1784 y Fl(;)10
+b Fm(f)896 1794 y Fd(1)926 1784 y Fk(\))664 1860 y Fr(1)956
+1833 y Fp(:::)d Fq(p)1083 1784 y Fm(min)p Fk(\()p Fm(e)1237
+1795 y Ff(k)1265 1784 y Fl(;)j Fm(f)1313 1795 y Ff(k)1341
+1784 y Fk(\))1083 1861 y Fm(k)1371 1833 y FK(.)81 b(A)40
+b(similar)i(de\002nition)h(w)o(orks)f(for)f(tw)o(o)g(di)n(visors)i(on)e
+(a)g(curv)o(e.)82 b(If)75 1946 y Fq(D)141 1960 y Fr(1)197
+1946 y Fo(=)18 b Fq(e)326 1960 y Fr(1)364 1946 y Fq(P)411
+1960 y Fr(1)459 1946 y Fo(+)11 b Fp(:::)g Fo(+)g Fq(e)749
+1960 y Fm(k)785 1946 y Fq(P)832 1960 y Fm(k)888 1946
+y FK(and)22 b Fq(D)1106 1960 y Fr(2)1143 1946 y Fq(n)e
+Fo(=)32 b Fq(f)1338 1960 y Fr(1)1376 1946 y Fq(P)1423
+1960 y Fr(1)1471 1946 y Fo(+)11 b Fp(:::)g Fo(+)25 b
+Fq(f)1762 1960 y Fm(k)1797 1946 y Fq(P)1844 1960 y Fm(k)1900
+1946 y FK(are)d(tw)o(o)g(di)n(visors)i(on)e(a)g(curv)o(e)h(then)f
+(their)h Fq(gr)m(eatest)h(com-)75 2059 y(mon)d(divisor)j
+FK(is)d Fq(G)-5 b(C)r(D)p Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p
+Fo(\))18 b(=)f Fq(min)p Fo(\()p Fq(e)1330 2073 y Fr(1)1369
+2059 y Fp(;)24 b Fq(f)1445 2073 y Fr(1)1482 2059 y Fo(\))p
+Fq(P)1564 2073 y Fr(1)1612 2059 y Fo(+)10 b Fp(:::)g
+Fo(+)g Fq(min)p Fo(\()p Fq(e)2070 2073 y Fm(k)2106 2059
+y Fp(;)24 b Fq(f)2182 2073 y Fm(k)2217 2059 y Fo(\))p
+Fq(P)2299 2073 y Fm(k)2333 2059 y FK(.)j(This)21 b(function)i(computes)
+g(this)e(quantity)-6 b(.)75 2214 y
+SDict begin H.S end
+ 75 2214 a 75 2214
+a
+SDict begin 13.6 H.A end
+ 75 2214 a 75 2214 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.12) cvn H.B /DEST pdfmark end
+ 75 2214 a 94 x FJ(5.7.12)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Di)o(visorLCM)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2482 a Fs(\006)22 b Ft(DivisorLCM)50 b(\()d(D1,)h(D2)f(\))2352
+b Fr(\(function\))p Black 216 2708 a FK(If)18 b Fq(m)d
+Fo(=)22 b Fq(p)513 2666 y Fm(e)542 2676 y Fd(1)513 2735
+y Fr(1)576 2708 y Fp(:::)7 b Fq(p)703 2664 y Fm(e)732
+2675 y Ff(k)703 2736 y Fm(k)781 2708 y FK(and)19 b Fq(n)d
+Fo(=)22 b Fq(p)1139 2662 y Fm(f)1159 2672 y Fd(1)1129
+2735 y Fr(1)1192 2708 y Fp(:::)7 b Fq(p)1329 2662 y Fm(f)1349
+2673 y Ff(k)1319 2736 y Fm(k)1399 2708 y FK(are)18 b(tw)o(o)g(inte)o
+(gers)h(then)g(their)g(least)g(common)g(multiple)g(is)f
+Fq(L)-5 b(C)r(M)t Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))15
+b(=)82 2844 y Fq(p)127 2795 y Fm(max)p Fk(\()p Fm(e)292
+2805 y Fd(1)322 2795 y Fl(;)10 b Fm(f)370 2805 y Fd(1)400
+2795 y Fk(\))127 2871 y Fr(1)430 2844 y Fp(:::)d Fq(p)557
+2795 y Fm(max)p Fk(\()p Fm(e)722 2806 y Ff(k)751 2795
+y Fl(;)j Fm(f)799 2806 y Ff(k)827 2795 y Fk(\))557 2872
+y Fm(k)856 2844 y FK(.)27 b(A)20 b(similar)i(de\002nition)h(w)o(orks)e
+(for)g(tw)o(o)g(di)n(visors)h(on)f(a)g(curv)o(e.)29 b(If)20
+b Fq(D)3031 2858 y Fr(1)3086 2844 y Fo(=)d Fq(e)3214
+2858 y Fr(1)3252 2844 y Fq(P)3299 2858 y Fr(1)3346 2844
+y Fo(+)10 b Fp(:::)g Fo(+)g Fq(e)3633 2858 y Fm(k)3669
+2844 y Fq(P)3716 2858 y Fm(k)75 2957 y FK(and)19 b Fq(D)290
+2971 y Fr(2)343 2957 y Fo(=)30 b Fq(f)471 2971 y Fr(1)508
+2957 y Fq(P)555 2971 y Fr(1)600 2957 y Fo(+)8 b Fp(:::)g
+Fo(+)22 b Fq(f)882 2971 y Fm(k)918 2957 y Fq(P)965 2971
+y Fm(k)1017 2957 y FK(are)d(tw)o(o)f(di)n(visors)j(on)e(a)f(curv)o(e)i
+(then)f(their)h Fq(least)g(common)f(multiple)h FK(is)e
+Fq(L)-5 b(C)r(M)t Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))16
+b(=)75 3069 y Fq(max)p Fo(\()p Fq(e)301 3083 y Fr(1)340
+3069 y Fp(;)24 b Fq(f)416 3083 y Fr(1)454 3069 y Fo(\))p
+Fq(P)536 3083 y Fr(1)585 3069 y Fo(+)13 b Fp(:::)g Fo(+)g
+Fq(max)p Fo(\()p Fq(e)1067 3083 y Fm(k)1102 3069 y Fp(;)24
+b Fq(f)1178 3083 y Fm(k)1213 3069 y Fo(\))p Fq(P)1295
+3083 y Fm(k)1330 3069 y FK(.)k(This)23 b(function)j(computes)f(this)f
+(quantity)-6 b(.)p 75 3170 1648 4 v 1764 3175 a FF(Example)p
+2102 3170 V 75 3195 4 25 v 3747 3195 V 75 3295 4 100
+v 188 3265 a(gap>)44 b(F:=GF\(11\);)p 3747 3295 V 75
+3394 V 188 3364 a(GF\(11\))p 3747 3394 V 75 3494 V 188
+3464 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p
+3747 3494 V 75 3594 V 188 3564 a(gap>)g(var1:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p
+3747 3594 V 75 3693 V 188 3663 a(gap>)c(b:=X\(F,"b",var1\);)p
+3747 3693 V 75 3793 V 188 3763 a(b)p 3747 3793 V 75 3892
+V 188 3863 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 3892 V 75 3992 V 188 3962 a([)f(a,)g(b)f(])p 3747
+3992 V 75 4092 V 188 4062 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 4092 V 75 4191 V 188 4161 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 4191 V 75 4291 V 188 4261
+a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 4291
+V 75 4391 V 188 4361 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49
+b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747
+4391 V 75 4490 V 188 4460 a(gap>)i(div1:=DivisorOnAffine)q(Cur)q(ve\()q
+([1)q(,2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q
+(11\))q(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP)q(1\);)p 3747
+4490 V 75 4590 V 188 4560 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4)
+f(],)p 3747 4590 V 75 4689 V 400 4660 a(support)i(:=)f([)g
+(Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p
+3747 4689 V 75 4789 V 400 4759 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 4789 V 75 4889 V 188 4859 a(gap>)h
+(DivisorDegree\(div1\);)p 3747 4889 V 75 4988 V 188 4958
+a(10)p 3747 4988 V 75 5088 V 188 5058 a(gap>)g(div2:=DivisorOnAffine)q
+(Cur)q(ve\()q([1)q(,2,)q(3,4)q(],[)q(Z\(1)q(1\),)q(Z\(1)q(1\)\210)q
+(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q(\2104])q(,cr)q(vP)q(1\);)p
+3747 5088 V 75 5188 V 188 5158 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g
+(3,)g(4)f(],)p 3747 5188 V 75 5287 V 400 5257 a(support)i(:=)f([)g
+(Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104)f(],)p
+3747 5287 V 75 5387 V 400 5357 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 5387 V 75 5487 V 188 5457 a(gap>)h
+(DivisorDegree\(div2\);)p 3747 5487 V 75 5586 V 188 5556
+a(10)p 3747 5586 V Black Black eop end end
+%%Page: 90 90
+TeXDict begin HPSdict begin 90 89 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.90) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(90)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(div3:=DivisorAddition)q(\(di)q(v1,)q(di)q(v2\))q(;)p
+3747 428 V 75 528 V 188 498 a(rec\()g(coeffs)g(:=)f([)g(5,)g(3,)g(5,)g
+(4,)g(3)f(],)p 3747 528 V 75 628 V 400 598 a(support)i(:=)f([)g
+(Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g
+(Z\(11\)\2107)f(],)p 3747 628 V 75 727 V 400 697 a(curve)g(:=)f(rec\()g
+(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i
+(polynomial)h(:=)e(b)g(\))g(\))p 3747 727 V 75 827 V
+188 797 a(gap>)h(DivisorDegree\(div3\);)p 3747 827 V
+75 927 V 188 897 a(20)p 3747 927 V 75 1026 V 188 996
+a(gap>)g(DivisorIsEffective\(di)q(v1\))q(;)p 3747 1026
+V 75 1126 V 188 1096 a(true)p 3747 1126 V 75 1225 V 188
+1196 a(gap>)g(DivisorIsEffective\(di)q(v2\))q(;)p 3747
+1225 V 75 1325 V 188 1295 a(true)p 3747 1325 V 75 1425
+V 188 1395 a(gap>)p 3747 1425 V 75 1524 V 188 1494 a(gap>)g
+(ndiv1:=DivisorNegate\()q(div)q(1\);)p 3747 1524 V 75
+1624 V 188 1594 a(rec\()g(coeffs)g(:=)f([)g(-1,)g(-2,)g(-3,)h(-4)f(],)p
+3747 1624 V 75 1724 V 400 1694 a(support)h(:=)f([)g(Z\(11\)\2102,)i
+(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747
+1724 V 75 1823 V 400 1793 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 1823 V 75 1923 V 188 1893 a(gap>)h
+(zdiv:=DivisorAddition)q(\(di)q(v1,)q(nd)q(iv1)q(\);)p
+3747 1923 V 75 2022 V 188 1993 a(rec\()g(coeffs)g(:=)f([)g(0,)g(0,)g
+(0,)g(0)f(],)p 3747 2022 V 75 2122 V 400 2092 a(support)i(:=)f([)g
+(Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2107)f(],)p
+3747 2122 V 75 2222 V 400 2192 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 2222 V 75 2321 V 188 2291 a(gap>)h
+(DivisorIsZero\(zdiv\);)p 3747 2321 V 75 2421 V 188 2391
+a(true)p 3747 2421 V 75 2521 V 188 2491 a(gap>)g
+(div_gcd:=DivisorGCD\(d)q(iv1)q(,di)q(v2)q(\);)p 3747
+2521 V 75 2620 V 188 2590 a(rec\()g(coeffs)g(:=)f([)g(1,)g(1,)g(2,)g
+(0,)g(0)f(],)p 3747 2620 V 75 2720 V 400 2690 a(support)i(:=)f([)g
+(Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g
+(Z\(11\)\2107)f(],)p 3747 2720 V 75 2819 V 400 2790 a(curve)g(:=)f
+(rec\()g(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i
+(polynomial)h(:=)e(b)g(\))g(\))p 3747 2819 V 75 2919
+V 188 2889 a(gap>)h(div_lcm:=DivisorLCM\(d)q(iv1)q(,di)q(v2)q(\);)p
+3747 2919 V 75 3019 V 188 2989 a(rec\()g(coeffs)g(:=)f([)g(4,)g(2,)g
+(3,)g(4,)g(3)f(],)p 3747 3019 V 75 3118 V 400 3088 a(support)i(:=)f([)g
+(Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g
+(Z\(11\)\2107)f(],)p 3747 3118 V 75 3218 V 400 3188 a(curve)g(:=)f
+(rec\()g(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i
+(polynomial)h(:=)e(b)g(\))g(\))p 3747 3218 V 75 3318
+V 188 3288 a(gap>)h(DivisorDegree\(div_gcd)q(\);)p 3747
+3318 V 75 3417 V 188 3387 a(4)p 3747 3417 V 75 3517 V
+188 3487 a(gap>)g(DivisorDegree\(div_lcm)q(\);)p 3747
+3517 V 75 3616 V 188 3587 a(16)p 3747 3616 V 75 3716
+V 188 3686 a(gap>)g(DivisorEqual\(div3,Div)q(iso)q(rAd)q(di)q(tio)q
+(n\(d)q(iv_)q(gcd)q(,di)q(v_l)q(cm\))q(\);)p 3747 3716
+V 75 3816 V 188 3786 a(true)p 3747 3816 V 75 3915 V 3747
+3915 V 75 3940 4 25 v 3747 3940 V 75 3943 3675 4 v 216
+4131 a FK(Let)33 b Fq(G)g FK(denote)i(a)e(\002nite)h(subgroup)i(of)d
+Fq(PGL)p Fo(\()p FK(2)p Fp(;)10 b Fq(F)e Fo(\))33 b FK(and)h(let)f
+Fq(D)g FK(denote)i(a)e(di)n(visor)i(on)f(the)g(projecti)n(v)o(e)i(line)
+75 4244 y Fi(P)131 4211 y Fr(1)168 4244 y Fo(\()p Fq(F)7
+b Fo(\))p FK(.)49 b(If)31 b Fq(G)e FK(lea)n(v)o(es)j
+Fq(D)d FK(unchanged)k(\(it)e(may)f(permute)i(the)f(points)h(in)e(the)h
+(support)h(of)f Fq(D)e FK(b)n(ut)i(must)f(preserv)o(e)75
+4357 y(their)h(sum)g(in)f Fq(D)p FK(\))g(then)h(the)g(Riemann-Roch)h
+(space)g Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(is)g(a)g Fq(G)p
+FK(-module.)51 b(The)30 b(commands)i(in)e(this)h(section)75
+4470 y(help)24 b(e)o(xplore)h(the)f Fq(G)p FK(-module)g(structure)i(of)
+e Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(in)i(the)g(case)g(then)g(the)g
+(ground)h(\002eld)f Fq(F)30 b FK(is)23 b(\002nite.)75
+4626 y
+SDict begin H.S end
+ 75 4626 a 75 4626 a
+SDict begin 13.6 H.A end
+ 75 4626 a 75 4626 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.13) cvn H.B /DEST pdfmark end
+ 75 4626
+a 93 x FJ(5.7.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w
+(RiemannRochSpaceBasisFunctionP1)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4893 a Fs(\006)f Ft(RiemannRochSpaceB)q(asi)q(sFu)q(nct)
+q(io)q(nP1)53 b(\()47 b(P,)g(k,)g(R2)g(\))1286 b Fr(\(function\))p
+Black 216 5119 a FK(Input:)36 b Ft(R2)26 b FK(is)h(a)f(polynomial)i
+(ring)f(in)g(tw)o(o)f(v)n(ariables,)i(say)f Fq(F)7 b
+Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])p FK(;)29 b Ft(P)d FK(is)g(an)h
+(element)g(of)f(the)h(base)g(\002eld,)g(say)75 5232 y
+Fq(F)7 b FK(;)23 b Ft(k)g FK(is)h(an)f(inte)o(ger)-5
+b(.)30 b(Output:)g(1)p Fp(=)p Fo(\()p Fq(x)13 b Fv(\000)g
+Fq(P)p Fo(\))1403 5199 y Fm(k)p Black Black eop end end
+%%Page: 91 91
+TeXDict begin HPSdict begin 91 90 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.91) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(91)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75
+307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.14) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(5.7.14)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Di)o(visorOfRationalFunctionP1)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(DivisorOfRational)q
+(Fun)q(cti)q(onP)q(1)53 b(\()46 b(f,)h(R)g(\))1657 b
+Fr(\(function\))p Black 216 799 a FK(Here)23 b Fq(R)d
+Fo(=)f Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])24 b
+FK(is)f(a)g(polynomial)j(ring)e(in)f(the)g(v)n(ariables)i
+Fq(x)p Fp(;)10 b Fq(y)24 b FK(and)38 b Fq(f)d FK(is)23
+b(a)g(rational)i(function)h(of)d Fq(x)p FK(.)28 b(Simply)75
+912 y(returns)d(the)f(principal)i(di)n(visor)f(on)f Fi(P)1273
+879 y Fr(1)1332 912 y FK(associated)j(to)37 b Fq(f)13
+b FK(.)p 75 1009 1648 4 v 1764 1014 a FF(Example)p 2102
+1009 V 75 1034 4 25 v 3747 1034 V 75 1134 4 100 v 3747
+1134 V 75 1233 V 188 1204 a(gap>)44 b(F:=GF\(11\);)p
+3747 1233 V 75 1333 V 188 1303 a(GF\(11\))p 3747 1333
+V 75 1433 V 188 1403 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)
+p 3747 1433 V 75 1532 V 188 1502 a(gap>)g(var1:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p
+3747 1532 V 75 1632 V 188 1602 a(gap>)c(b:=X\(F,"b",var1\);)p
+3747 1632 V 75 1732 V 188 1702 a(b)p 3747 1732 V 75 1831
+V 188 1801 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 1831 V 75 1931 V 188 1901 a([)f(a,)g(b)f(])p 3747
+1931 V 75 2030 V 188 2001 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 2030 V 75 2130 V 188 2100 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 2130 V 75 2230 V 188 2200
+a(gap>)h(pt:=Z\(11\);)p 3747 2230 V 75 2329 V 188 2299
+a(Z\(11\))p 3747 2329 V 75 2429 V 188 2399 a(gap>)g
+(f:=RiemannRochSpaceBa)q(sis)q(Fun)q(ct)q(ion)q(P1\()q(pt,)q(2,R)q
+(2\);)p 3747 2429 V 75 2529 V 188 2499 a
+(\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q(\2107*)q(a+Z)q(\(11)q(\)\2102)q
+(\))p 3747 2529 V 75 2628 V 188 2598 a(gap>)g(Df:=DivisorOfRational)q
+(Fun)q(cti)q(on)q(P1\()q(f,R)q(2\);)p 3747 2628 V 75
+2728 V 188 2698 a(rec\()g(coeffs)g(:=)f([)g(-2)g(],)g(support)h(:=)g([)
+e(Z\(11\))i(],)p 3747 2728 V 75 2827 V 400 2798 a(curve)g(:=)f(rec\()g
+(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i
+(polynomial)h(:=)e(a)g(\))p 3747 2827 V 75 2927 V 315
+2897 a(\))p 3747 2927 V 75 3027 V 188 2997 a(gap>)h(Df.support;)p
+3747 3027 V 75 3126 V 188 3096 a([)f(Z\(11\))h(])p 3747
+3126 V 75 3226 V 188 3196 a(gap>)g(F:=GF\(11\);;)p 3747
+3226 V 75 3326 V 188 3296 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p
+3747 3326 V 75 3425 V 188 3395 a(gap>)g(vars:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(\);;)p 3747 3425 V 75
+3525 V 188 3495 a(gap>)g(a:=vars[1];;)p 3747 3525 V 75
+3624 V 188 3595 a(gap>)g(b:=vars[2];;)p 3747 3624 V 75
+3724 V 188 3694 a(gap>)g(f:=\(a\2104+Z\(11\)\2106*a\2103-a)q(\2102+)q
+(Z\(1)q(1\))q(\2107*)q(a+Z)q(\(11)q(\)\2100)q(\)/\()q(a\2104)q(+Z\()q
+(11\))q(*a\210)q(2+Z)q(\(11)q(\)\2107)q(*a+)q(Z\(1)q(1\))q(\);;)p
+3747 3724 V 75 3824 V 188 3794 a(gap>)g(divf:=DivisorOfRation)q(alF)q
+(unc)q(ti)q(onP)q(1\(f)q(,R\))q(;)p 3747 3824 V 75 3923
+V 188 3893 a(rec\()g(coeffs)g(:=)f([)g(3,)g(1)f(],)h(support)i(:=)e([)g
+(Z\(11\),)h(Z\(11\)\2107)h(],)p 3747 3923 V 75 4023 V
+273 3993 a(curve)f(:=)f(rec\()g(ring)h(:=)f(PolynomialRing\(...,)49
+b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(a)g(\))g(\))p
+3747 4023 V 75 4123 V 188 4093 a(gap>)h(denf:=DenominatorOfRa)q(tio)q
+(nal)q(Fu)q(nct)q(ion)q(\(f\))q(;)k(RootsOfUPol\(denf\);)p
+3747 4123 V 75 4222 V 188 4192 a(a\2104+Z\(11\)*a\2102+Z\(11\)\210)q
+(7*a)q(+Z\()q(11\))p 3747 4222 V 75 4322 V 188 4292 a([)85
+b(])p 3747 4322 V 75 4421 V 188 4392 a(gap>)44 b(numf:=NumeratorOfRati)
+q(ona)q(lFu)q(nc)q(tio)q(n\(f)q(\);)49 b(RootsOfUPol\(numf\);)p
+3747 4421 V 75 4521 V 188 4491 a(a\2104+Z\(11\)\2106*a\2103-a\2102+)q
+(Z\(1)q(1\)\210)q(7*a)q(+Z\()q(11)q(\)\2100)p 3747 4521
+V 75 4621 V 188 4591 a([)43 b(Z\(11\)\2107,)i(Z\(11\),)f(Z\(11\),)g
+(Z\(11\))g(])p 3747 4621 V 75 4720 V 3747 4720 V 75 4745
+4 25 v 3747 4745 V 75 4748 3675 4 v 75 4881 a
+SDict begin H.S end
+ 75 4881
+a 75 4881 a
+SDict begin 13.6 H.A end
+ 75 4881 a 75 4881 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.15) cvn H.B /DEST pdfmark end
+ 75 4881 a 117 x FJ(5.7.15)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(RiemannRochSpaceBasisP1)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5172 a Fs(\006)22 b
+Ft(RiemannRochSpaceB)q(asi)q(sP1)53 b(\()47 b(D)g(\))1981
+b Fr(\(function\))p Black 216 5398 a FK(This)19 b(returns)h(the)f
+(basis)h(of)e(the)h(Riemann-Roch)i(space)f Fq(L)p Fo(\()p
+Fq(D)p Fo(\))e FK(associated)j(to)e(the)g(di)n(visor)h
+Ft(D)e FK(on)h(the)g(projecti)n(v)o(e)75 5511 y(line)24
+b Fi(P)290 5478 y Fr(1)327 5511 y FK(.)p Black Black
+eop end end
+%%Page: 92 92
+TeXDict begin HPSdict begin 92 91 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.92) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(92)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(F:=GF\(11\);)p 3747 523 V 75 623 V 188
+593 a(GF\(11\))p 3747 623 V 75 722 V 188 692 a(gap>)g
+(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 722
+V 75 822 V 188 792 a(gap>)g(var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q
+(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 822
+V 75 922 V 188 892 a(gap>)c(b:=X\(F,"b",var1\);)p 3747
+922 V 75 1021 V 188 991 a(b)p 3747 1021 V 75 1121 V 188
+1091 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 1121 V 75 1220 V 188 1191 a([)f(a,)g(b)f(])p 3747
+1220 V 75 1320 V 188 1290 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 1320 V 75 1420 V 188 1390 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 1420 V 75 1519 V 188 1489
+a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 1519
+V 75 1619 V 188 1589 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49
+b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747
+1619 V 75 1719 V 188 1689 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q
+(2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q
+(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 1719 V
+75 1818 V 188 1788 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4)f(],)p
+3747 1818 V 75 1918 V 400 1888 a(support)i(:=)f([)g(Z\(11\)\2102,)i
+(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747
+1918 V 75 2017 V 400 1988 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 2017 V 75 2117 V 188 2087 a(gap>)h
+(B:=RiemannRochSpaceBa)q(sis)q(P1\()q(D\))q(;)p 3747
+2117 V 75 2217 V 188 2187 a([)f(Z\(11\)\2100,)i
+(\(Z\(11\)\2100\)/\(a+Z\(11\)\2107\))q(,)k
+(\(Z\(11\)\2100\)/\(a+Z\(11\)\2108\))q(,)p 3747 2217
+V 75 2316 V 188 2286 a(\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q(\2109*)q
+(a+Z)q(\(11)q(\)\2106)q(\),)g(\(Z\(11\)\2100\)/\(a+Z\(11\)\2102)q(\),)p
+3747 2316 V 75 2416 V 188 2386 a(\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q
+(\2103*)q(a+Z)q(\(11)q(\)\2104)q(\),)g
+(\(Z\(11\)\2100\)/\(a\2103+a\2102+Z)q(\(11)q(\)\2102)q(*a+)q(Z\(1)q
+(1\)\210)q(6\),)p 3747 2416 V 75 2516 V 273 2486 a
+(\(Z\(11\)\2100\)/\(a+Z\(11\)\2106\))q(,)f
+(\(Z\(11\)\2100\)/\(a\2102+Z\(1)q(1\)\210)q(7*a)q(+Z\()q(11\))q
+(\2102\))q(,)p 3747 2516 V 75 2615 V 188 2585 a
+(\(Z\(11\)\2100\)/\(a\2103+Z\(11\))q(\2104*)q(a\2102)q(+a+)q(Z\(1)q
+(1\))q(\2108\))q(,)p 3747 2615 V 75 2715 V 188 2685 a
+(\(Z\(11\)\2100\)/\(a\2104+Z\(11\))q(\2108*)q(a\2103)q(+Z\()q(11\))q
+(*a)q(\2102+)q(a+Z)q(\(11)q(\)\2104)q(\))g(])p 3747 2715
+V 75 2814 V 188 2785 a(gap>)c(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q
+([1])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 2814 V 75 2914
+V 188 2884 a([)85 b(])p 3747 2914 V 75 3014 V 188 2984
+a(gap>)44 b(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([2])q(,R2)q(\).s)
+q(upp)q(ort)q(;)p 3747 3014 V 75 3113 V 188 3083 a([)f(Z\(11\)\2102)h
+(])p 3747 3113 V 75 3213 V 188 3183 a(gap>)g(DivisorOfRationalFunc)q
+(tio)q(nP1)q(\(B)q([3])q(,R2)q(\).s)q(upp)q(ort)q(;)p
+3747 3213 V 75 3313 V 188 3283 a([)f(Z\(11\)\2103)h(])p
+3747 3313 V 75 3412 V 188 3382 a(gap>)g(DivisorOfRationalFunc)q(tio)q
+(nP1)q(\(B)q([4])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747
+3412 V 75 3512 V 188 3482 a([)f(Z\(11\)\2103)h(])p 3747
+3512 V 75 3611 V 188 3582 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q
+(\(B)q([5])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3611 V
+75 3711 V 188 3681 a([)f(Z\(11\)\2107)h(])p 3747 3711
+V 75 3811 V 188 3781 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q
+([6])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3811 V 75 3910
+V 188 3880 a([)f(Z\(11\)\2107)h(])p 3747 3910 V 75 4010
+V 188 3980 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([7])q
+(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 4010 V 75 4110 V 188
+4080 a([)f(Z\(11\)\2107)h(])p 3747 4110 V 75 4209 V 188
+4179 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([8])q(,R2)q
+(\).s)q(upp)q(ort)q(;)p 3747 4209 V 75 4309 V 188 4279
+a([)f(Z\(11\))h(])p 3747 4309 V 75 4408 V 188 4379 a(gap>)g
+(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([9])q(,R2)q(\).s)q(upp)q
+(ort)q(;)p 3747 4408 V 75 4508 V 188 4478 a([)f(Z\(11\))h(])p
+3747 4508 V 75 4608 V 188 4578 a(gap>)g(DivisorOfRationalFunc)q(tio)q
+(nP1)q(\(B)q([10)q(],R)q(2\).)q(sup)q(por)q(t;)p 3747
+4608 V 75 4707 V 188 4677 a([)f(Z\(11\))h(])p 3747 4707
+V 75 4807 V 188 4777 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q
+([11)q(],R)q(2\).)q(sup)q(por)q(t;)p 3747 4807 V 75 4907
+V 188 4877 a([)f(Z\(11\))h(])p 3747 4907 V 75 5006 V
+3747 5006 V 75 5031 4 25 v 3747 5031 V 75 5034 3675 4
+v 75 5167 a
+SDict begin H.S end
+ 75 5167 a 75 5167 a
+SDict begin 13.6 H.A end
+ 75 5167 a 75 5167 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.16) cvn H.B /DEST pdfmark end
+ 75
+5167 a 117 x FJ(5.7.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MoebiusT)-7
+b(ransf)n(ormation)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+5458 a Fs(\006)22 b Ft(MoebiusTransforma)q(tio)q(n)52
+b(\()47 b(A,)g(R)g(\))1935 b Fr(\(function\))p Black
+Black Black eop end end
+%%Page: 93 93
+TeXDict begin HPSdict begin 93 92 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.93) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(93)p Black 216 399 a(The)37 b(ar)n(guments)i(are)e(a)f(2)
+18 b Fv(\002)f FK(2)37 b(matrix)g Fq(A)f FK(with)h(entries)h(in)f(a)f
+(\002eld)h Fq(F)43 b FK(and)37 b(a)g(polynomial)i(ring)f
+Ft(R)p FK(of)f(one)75 511 y(v)n(ariable,)f(say)d Fq(F)7
+b Fo([)p Fq(x)p Fo(])p FK(.)56 b(This)32 b(function)j(returns)f(the)e
+(linear)i(fractional)h(transformatio)g(associated)h(to)c
+Ft(A)p FK(.)55 b(These)75 624 y(transformations)27 b(can)d(be)g
+(composed)h(with)f(each)g(other)g(using)h Fy(GAP)p FK(')-5
+b(s)22 b Ft(Value)j FK(command.)75 776 y
+SDict begin H.S end
+ 75 776 a 75
+776 a
+SDict begin 13.6 H.A end
+ 75 776 a 75 776 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.17) cvn H.B /DEST pdfmark end
+ 75 776 a 96 x FJ(5.7.17)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(ActionMoebiusT)-7 b(ransf)n(ormationOnFunction)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1047 a Fs(\006)22 b
+Ft(ActionMoebiusTran)q(sfo)q(rma)q(tio)q(nO)q(nFu)q(nct)q(ion)53
+b(\()47 b(A,)g(f,)g(R2)g(\))1008 b Fr(\(function\))p
+Black 216 1272 a FK(The)23 b(ar)n(guments)j(are)e(a)f(2)13
+b Fv(\002)g FK(2)23 b(matrix)h Fq(A)f FK(with)g(entries)i(in)f(a)f
+(\002eld)g Fq(F)8 b FK(,)22 b(a)h(rational)j(function)g
+Ft(f)d FK(of)h(one)g(v)n(ariable,)75 1385 y(say)29 b(in)g
+Fq(F)7 b Fo(\()p Fq(x)p Fo(\))p FK(,)30 b(and)f(a)f(polynomial)j(ring)e
+Ft(R2)q FK(,)g(say)g Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p
+Fo(])p FK(.)45 b(This)28 b(function)j(simply)f(returns)g(the)f
+(composition)i(of)75 1498 y(the)24 b(function)i Ft(f)d
+FK(with)g(the)h(M)8 b(\250)-38 b(obius)24 b(transformation)j(of)d
+Ft(A)p FK(.)75 1631 y
+SDict begin H.S end
+ 75 1631 a 75 1631 a
+SDict begin 13.6 H.A end
+ 75 1631 a 75
+1631 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.18) cvn H.B /DEST pdfmark end
+ 75 1631 a 115 x FJ(5.7.18)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(ActionMoebiusT)-7 b(ransf)n(ormationOnDi)o(visorP1)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1921 a Fs(\006)22 b
+Ft(ActionMoebiusTran)q(sfo)q(rma)q(tio)q(nO)q(nDi)q(vis)q(orP)q(1)53
+b(\()46 b(A,)h(D)g(\))1147 b Fr(\(function\))p Black
+216 2146 a FK(A)30 b(M)8 b(\250)-38 b(obius)33 b(transformation)i(may)c
+(be)g(re)o(garded)i(as)e(an)h(automorphism)i(of)d(the)h(projecti)n(v)o
+(e)h(line)f Fi(P)3477 2113 y Fr(1)3514 2146 y FK(.)51
+b(This)75 2259 y(function)36 b(simply)f(returns)g(the)f(image)h(of)f
+(the)g(di)n(visor)h Ft(D)f FK(under)h(the)f(M)8 b(\250)-38
+b(obius)35 b(transformation)i(de\002ned)e(by)f Ft(A)p
+FK(,)75 2372 y(pro)o(vided)26 b(that)e Ft(IsActionMoebiusTran)q(sfo)q
+(rma)q(tio)q(nO)q(nDi)q(vis)q(orD)q(ef)q(ine)q(dP1)q(\(A,)q(D\))29
+b FK(returns)c(true.)75 2524 y
+SDict begin H.S end
+ 75 2524 a 75 2524 a
+SDict begin 13.6 H.A end
+ 75
+2524 a 75 2524 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.19) cvn H.B /DEST pdfmark end
+ 75 2524 a 96 x FJ(5.7.19)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(IsActionMoebiusT)-7 b(ransf)n(ormationOnDi)o
+(visorDe\002nedP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+2794 a Fs(\006)22 b Ft(IsActionMoebiusTr)q(ans)q(for)q(mat)q(io)q(nOn)q
+(Div)q(iso)q(rD)q(efi)q(ned)q(P1)53 b(\()47 b(A,)g(D)f(\))730
+b Fr(\(function\))p Black 216 3020 a FK(Returns)27 b(true)g(of)g(none)g
+(of)f(the)h(points)g(in)g(the)f(support)j(of)d(the)g(di)n(visor)i
+Ft(D)e FK(is)g(the)h(pole)g(of)f(the)h(M)8 b(\250)-38
+b(obius)27 b(trans-)75 3133 y(formation.)p 75 3206 1648
+4 v 1764 3211 a FF(Example)p 2102 3206 V 75 3231 4 25
+v 3747 3231 V 75 3331 4 100 v 188 3301 a(gap>)44 b(F:=GF\(11\);)p
+3747 3331 V 75 3430 V 188 3401 a(GF\(11\))p 3747 3430
+V 75 3530 V 188 3500 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)
+p 3747 3530 V 75 3630 V 188 3600 a(gap>)g(var1:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p
+3747 3630 V 75 3729 V 188 3699 a(gap>)c(b:=X\(F,"b",var1\);)p
+3747 3729 V 75 3829 V 188 3799 a(b)p 3747 3829 V 75 3929
+V 188 3899 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 3929 V 75 4028 V 188 3998 a([)f(a,)g(b)f(])p 3747
+4028 V 75 4128 V 188 4098 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 4128 V 75 4227 V 188 4198 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 4227 V 75 4327 V 188 4297
+a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 4327
+V 75 4427 V 188 4397 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49
+b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747
+4427 V 75 4526 V 188 4496 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q
+(2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q
+(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 4526 V
+75 4626 V 188 4596 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4)f(],)p
+3747 4626 V 75 4726 V 400 4696 a(support)i(:=)f([)g(Z\(11\)\2102,)i
+(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747
+4726 V 75 4825 V 400 4795 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 4825 V 75 4925 V 188 4895 a(gap>)h
+(A:=Z\(11\)\2100*[[1,2],[1,)q(4]])q(;)p 3747 4925 V 75
+5024 V 188 4995 a([)f([)f(Z\(11\)\2100,)j(Z\(11\))f(],)f([)g
+(Z\(11\)\2100,)i(Z\(11\)\2102)g(])e(])p 3747 5024 V 75
+5124 V 188 5094 a(gap>)h(ActionMoebiusTransfor)q(mat)q(ion)q(On)q(Div)q
+(iso)q(rDe)q(fin)q(edP)q(1\(A)q(,D\))q(;)p 3747 5124
+V 75 5224 V 188 5194 a(false)p 3747 5224 V 75 5323 V
+188 5293 a(gap>)g(A:=Z\(11\)\2100*[[1,2],[3,)q(4]])q(;)p
+3747 5323 V 75 5423 V 188 5393 a([)f([)f(Z\(11\)\2100,)j(Z\(11\))f(],)f
+([)g(Z\(11\)\2108,)i(Z\(11\)\2102)g(])e(])p 3747 5423
+V 75 5523 V 188 5493 a(gap>)h(ActionMoebiusTransfor)q(mat)q(ion)q(On)q
+(Div)q(iso)q(rDe)q(fin)q(edP)q(1\(A)q(,D\))q(;)p 3747
+5523 V 75 5622 V 188 5592 a(true)p 3747 5622 V Black
+Black eop end end
+%%Page: 94 94
+TeXDict begin HPSdict begin 94 93 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.94) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(94)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(ActionMoebiusTransfor)q(mat)q(ion)q(On)q(Div)q(iso)q(rP1)q(\(A,)q
+(D\);)p 3747 428 V 75 528 V 188 498 a(rec\()g(coeffs)g(:=)f([)g(1,)g
+(2,)g(3,)g(4)f(],)p 3747 528 V 75 628 V 400 598 a(support)i(:=)f([)g
+(Z\(11\)\2105,)i(Z\(11\)\2106,)g(Z\(11\)\2108,)g(Z\(11\)\2107)g(],)p
+3747 628 V 75 727 V 400 697 a(curve)f(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 727 V 75 827 V 188 797 a(gap>)h(f:=MoebiusTransformat)q
+(ion)q(\(A,)q(R1)q(\);)p 3747 827 V 75 927 V 188 897
+a(\(a+Z\(11\)\)/\(Z\(11\)\2108*a)q(+Z\()q(11\))q(\2102\))p
+3747 927 V 75 1026 V 188 996 a(gap>)g(ActionMoebiusTransfor)q(mat)q
+(ion)q(On)q(Fun)q(cti)q(on\()q(A,f)q(,R1)q(\);)p 3747
+1026 V 75 1126 V 188 1096 a(-Z\(11\)\2100+Z\(11\)\2103*a\210-)q(1)p
+3747 1126 V 75 1225 V 3747 1225 V 75 1250 4 25 v 3747
+1250 V 75 1253 3675 4 v 75 1387 a
+SDict begin H.S end
+ 75 1387 a 75 1387 a
+SDict begin 13.6 H.A end
+
+75 1387 a 75 1387 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.20) cvn H.B /DEST pdfmark end
+ 75 1387 a 116 x FJ(5.7.20)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Di)o(visorA)-5 b(utomor)o(phismGr)n(oupP1)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1677 a Fs(\006)22 b
+Ft(DivisorAutomorphi)q(smG)q(rou)q(pP1)53 b(\()47 b(D)g(\))1842
+b Fr(\(function\))p Black 216 1903 a FK(Input:)45 b(A)30
+b(di)n(visor)i Ft(D)f FK(on)g Fi(P)1106 1870 y Fr(1)1143
+1903 y Fo(\()p Fq(F)7 b Fo(\))p FK(,)32 b(where)f Fq(F)38
+b FK(is)30 b(a)h(\002nite)g(\002eld.)50 b(Output:)45
+b(A)30 b(subgroup)j Fq(A)n(u)n(t)6 b Fo(\()p Fq(D)p Fo(\))25
+b Fv(\032)f Fq(A)n(u)n(t)6 b Fo(\()p Fi(P)3677 1870 y
+Fr(1)3715 1903 y Fo(\))75 2016 y FK(preserving)26 b Ft(D)q
+FK(.)216 2129 y(V)-10 b(ery)23 b(slo)n(w)-6 b(.)p 75
+2226 1648 4 v 1764 2231 a FF(Example)p 2102 2226 V 75
+2251 4 25 v 3747 2251 V 75 2351 4 100 v 188 2321 a(gap>)44
+b(F:=GF\(11\);)p 3747 2351 V 75 2451 V 188 2421 a(GF\(11\))p
+3747 2451 V 75 2550 V 188 2520 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q
+("]\))q(;;)p 3747 2550 V 75 2650 V 188 2620 a(gap>)g
+(var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k
+(a:=var1[1];;)p 3747 2650 V 75 2749 V 188 2720 a(gap>)c
+(b:=X\(F,"b",var1\);)p 3747 2749 V 75 2849 V 188 2819
+a(b)p 3747 2849 V 75 2949 V 188 2919 a(gap>)g(var2:=Concatenation\(v)q
+(ar1)q(,[b)q(]\))q(;)p 3747 2949 V 75 3048 V 188 3018
+a([)f(a,)g(b)f(])p 3747 3048 V 75 3148 V 188 3118 a(gap>)i
+(R2:=PolynomialRing\(F,)q(var)q(2\);)p 3747 3148 V 75
+3248 V 188 3218 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p
+3747 3248 V 75 3347 V 188 3317 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q
+(;)p 3747 3347 V 75 3447 V 188 3417 a(rec\()g(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f
+(\))p 3747 3447 V 75 3547 V 188 3517 a(gap>)i(D:=DivisorOnAffineCur)q
+(ve\()q([1,)q(2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q
+(,Z\()q(11\))q(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p
+3747 3547 V 75 3646 V 188 3616 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g
+(3,)g(4)f(],)p 3747 3646 V 75 3746 V 400 3716 a(support)i(:=)f([)g
+(Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p
+3747 3746 V 75 3845 V 400 3815 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 3845 V 75 3945 V 188 3915 a(gap>)h
+(agp:=DivisorAutomorph)q(ism)q(Gro)q(up)q(P1\()q(D\);)q(;)k(time;)p
+3747 3945 V 75 4045 V 188 4015 a(7305)p 3747 4045 V 75
+4144 V 188 4114 a(gap>)c(IdGroup\(agp\);)p 3747 4144
+V 75 4244 V 188 4214 a([)f(10,)g(2)g(])p 3747 4244 V
+75 4344 V 3747 4344 V 75 4368 4 25 v 3747 4368 V 75 4371
+3675 4 v 75 4505 a
+SDict begin H.S end
+ 75 4505 a 75 4505 a
+SDict begin 13.6 H.A end
+ 75 4505 a 75 4505
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.21) cvn H.B /DEST pdfmark end
+ 75 4505 a 116 x FJ(5.7.21)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(MatrixRepr)n(esentationOnRiemannRochSpaceP1)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 4795 a Fs(\006)22 b Ft(MatrixRepresentat)q
+(ion)q(OnR)q(iem)q(an)q(nRo)q(chS)q(pac)q(eP)q(1)52 b(\()47
+b(g,)g(D)g(\))1054 b Fr(\(function\))p Black 216 5021
+a FK(Input:)30 b(An)23 b(element)i Ft(g)e FK(in)g Fq(G)p
+FK(,)f(a)h(subgroup)j(of)e Fq(A)n(u)n(t)6 b Fo(\()p Fq(D)p
+Fo(\))20 b Fv(\032)g Fq(A)n(u)n(t)6 b Fo(\()p Fi(P)2296
+4988 y Fr(1)2334 5021 y Fo(\))p FK(,)22 b(and)i(a)f(di)n(visor)i
+Ft(D)e FK(on)h Fi(P)3143 4988 y Fr(1)3180 5021 y Fo(\()p
+Fq(F)7 b Fo(\))p FK(,)23 b(where)h Fq(F)29 b FK(is)75
+5134 y(a)23 b(\002nite)h(\002eld.)k(Output:)i(a)23 b
+Fq(d)18 b Fv(\002)13 b Fq(d)27 b FK(matrix,)d(where)g
+Fq(d)h Fo(=)20 b Fq(d)5 b(im)10 b(L)p Fo(\()p Fq(D)p
+Fo(\))p FK(,)23 b(representing)k(the)d(action)h(of)e
+Ft(g)g FK(on)h Fq(L)p Fo(\()p Fq(D)p Fo(\))p FK(.)216
+5247 y(Note:)29 b Ft(g)23 b FK(sends)i Fq(L)p Fo(\()p
+Fq(D)p Fo(\))e FK(to)g Fq(r)15 b Fv(\001)e Fq(L)p Fo(\()p
+Fq(D)p Fo(\))p FK(,)23 b(where)g Fq(r)j FK(is)d(a)g(polynomial)j(of)d
+(de)o(gree)i(1)e(depending)k(on)c Ft(g)g FK(and)h Ft(D)q
+FK(.)216 5360 y(Also)g(v)o(ery)f(slo)n(w)-6 b(.)216 5473
+y(The)25 b Fy(GAP)e FK(command)j Ft(BrauerCharacterVa)q(lue)31
+b FK(can)26 b(be)f(used)h(to)g(\223lift\224)g(the)g(eigen)l(v)n(alues)i
+(of)e(this)g(matrix)75 5586 y(to)d(the)h(comple)o(x)h(numbers.)p
+Black Black eop end end
+%%Page: 95 95
+TeXDict begin HPSdict begin 95 94 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.95) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(95)p Black 75 399 1648 4 v 1764 404 a FF(Example)p
+2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188
+493 a(gap>)44 b(F:=GF\(11\);)p 3747 523 V 75 623 V 188
+593 a(GF\(11\))p 3747 623 V 75 722 V 188 692 a(gap>)g
+(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 722
+V 75 822 V 188 792 a(gap>)g(var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q
+(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 822
+V 75 922 V 188 892 a(gap>)c(b:=X\(F,"b",var1\);)p 3747
+922 V 75 1021 V 188 991 a(b)p 3747 1021 V 75 1121 V 188
+1091 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 1121 V 75 1220 V 188 1191 a([)f(a,)g(b)f(])p 3747
+1220 V 75 1320 V 188 1290 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 1320 V 75 1420 V 188 1390 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 1420 V 75 1519 V 188 1489
+a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 1519
+V 75 1619 V 188 1589 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49
+b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747
+1619 V 75 1719 V 188 1689 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q
+(1,)q(1,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q
+(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 1719 V
+75 1818 V 188 1788 a(rec\()g(coeffs)g(:=)f([)g(1,)g(1,)g(1,)g(4)f(],)p
+3747 1818 V 75 1918 V 400 1888 a(support)i(:=)f([)g(Z\(11\)\2102,)i
+(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747
+1918 V 75 2017 V 400 1988 a(curve)g(:=)f(rec\()g(ring)h(:=)f
+(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g
+(\))g(\))p 3747 2017 V 75 2117 V 188 2087 a(gap>)h
+(agp:=DivisorAutomorph)q(ism)q(Gro)q(up)q(P1\()q(D\);)q(;)k(time;)p
+3747 2117 V 75 2217 V 188 2187 a(7198)p 3747 2217 V 75
+2316 V 188 2286 a(gap>)c(IdGroup\(agp\);)p 3747 2316
+V 75 2416 V 188 2386 a([)f(20,)g(5)g(])p 3747 2416 V
+75 2516 V 188 2486 a(gap>)h(g:=Random\(agp\);)p 3747
+2516 V 75 2615 V 188 2585 a([)f([)f(Z\(11\)\2104,)j(Z\(11\)\2109)g(],)e
+([)g(Z\(11\)\2100,)i(Z\(11\)\2109)g(])d(])p 3747 2615
+V 75 2715 V 188 2685 a(gap>)i(rho:=MatrixRepresenta)q(tio)q(nOn)q(Ri)q
+(ema)q(nnR)q(och)q(Spa)q(ceP)q(1\(g)q(,D\))q(;)p 3747
+2715 V 75 2814 V 188 2785 a([)f([)f(Z\(11\)\2100,)j(0*Z\(11\),)g
+(0*Z\(11\),)g(0*Z\(11\),)h(0*Z\(11\),)f(0*Z\(11\),)g(0*Z\(11\),)g
+(0*Z\(11\))f(],)p 3747 2814 V 75 2914 V 188 2884 a([)f(Z\(11\)\2100,)i
+(0*Z\(11\),)g(0*Z\(11\),)g(Z\(11\),)f(0*Z\(11\),)h(0*Z\(11\),)g
+(0*Z\(11\),)g(0*Z\(11\))g(],)p 3747 2914 V 75 3014 V
+273 2984 a([)d(Z\(11\)\2107,)j(0*Z\(11\),)g(Z\(11\)\2105,)g(0*Z\(11\),)
+h(0*Z\(11\),)f(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\))f(],)p
+3747 3014 V 75 3113 V 188 3083 a([)f(Z\(11\)\2104,)i(Z\(11\)\2109,)g
+(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g
+(0*Z\(11\))g(],)p 3747 3113 V 75 3213 V 273 3183 a([)d(Z\(11\)\2102,)j
+(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)h(Z\(11\)\2105,)f(0*Z\(11\),)g
+(0*Z\(11\),)g(0*Z\(11\))f(],)p 3747 3213 V 75 3313 V
+188 3283 a([)f(Z\(11\)\2104,)i(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g
+(Z\(11\)\2108,)g(Z\(11\)\2100,)g(0*Z\(11\),)g(0*Z\(11\))g(],)p
+3747 3313 V 75 3412 V 273 3382 a([)d(Z\(11\)\2106,)j(0*Z\(11\),)g
+(0*Z\(11\),)g(0*Z\(11\),)h(Z\(11\)\2107,)f(Z\(11\)\2100,)g
+(Z\(11\)\2105,)g(0*Z\(11\))f(],)p 3747 3412 V 75 3512
+V 188 3482 a([)f(Z\(11\)\2108,)i(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g
+(Z\(11\)\2103,)g(Z\(11\)\2103,)g(Z\(11\)\2109,)g(Z\(11\)\2100)g(])d(])p
+3747 3512 V 75 3611 V 188 3582 a(gap>)i(Display\(rho\);)p
+3747 3611 V 75 3711 V 273 3681 a(1)85 b(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+3747 3711 V 75 3811 V 273 3781 a(1)g(.)g(.)g(2)g(.)g(.)g(.)g(.)p
+3747 3811 V 75 3910 V 273 3880 a(7)g(.)42 b(10)86 b(.)f(.)g(.)g(.)g(.)p
+3747 3910 V 75 4010 V 273 3980 a(5)g(6)g(.)g(.)g(.)g(.)g(.)g(.)p
+3747 4010 V 75 4110 V 273 4080 a(4)g(.)g(.)g(.)42 b(10)86
+b(.)f(.)g(.)p 3747 4110 V 75 4209 V 273 4179 a(5)g(.)g(.)g(.)g(3)g(1)g
+(.)g(.)p 3747 4209 V 75 4309 V 273 4279 a(9)g(.)g(.)g(.)g(7)g(1)42
+b(10)86 b(.)p 3747 4309 V 75 4408 V 273 4379 a(3)f(.)g(.)g(.)g(8)g(8)g
+(6)g(1)p 3747 4408 V 75 4508 V 3747 4508 V 75 4533 4
+25 v 3747 4533 V 75 4536 3675 4 v 75 4666 a
+SDict begin H.S end
+ 75 4666 a
+75 4666 a
+SDict begin 13.6 H.A end
+ 75 4666 a 75 4666 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.22) cvn H.B /DEST pdfmark end
+ 75 4666 a 116 x FJ(5.7.22)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(GoppaCodeClassical)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 4956 a Fs(\006)22 b Ft(GoppaCodeClassica)q
+(l\()53 b(div,)47 b(pts)h(\))1935 b Fr(\(function\))p
+Black 216 5182 a FK(Input:)47 b(A)31 b(di)n(visor)j Ft(div)e
+FK(on)g(the)g(projecti)n(v)o(e)i(line)f Fi(P)1906 5149
+y Fr(1)1943 5182 y Fo(\()p Fq(F)7 b Fo(\))32 b FK(o)o(v)o(er)g(a)f
+(\002nite)h(\002eld)g Fq(F)38 b FK(and)33 b(a)e(list)i
+Ft(pts)f FK(of)g(points)75 5295 y Fv(f)p Fq(P)167 5309
+y Fr(1)204 5295 y Fp(;)10 b(:::;)g Fq(P)396 5309 y Fm(n)434
+5295 y Fv(g)21 b(\032)f Fq(F)30 b FK(disjoint)25 b(from)f(the)f
+(support)j(of)d Ft(div)q FK(.)75 5408 y(Output:)30 b(The)23
+b(classical)j(\(e)n(v)n(aluation\))g(Goppa)e(code)h(associated)h(to)e
+(this)g(data.)29 b(This)23 b(is)h(the)g(code)1219 5592
+y Fq(C)f Fo(=)d Fv(f)p Fo(\()14 b Fq(f)f Fo(\()p Fq(P)1608
+5606 y Fr(1)1646 5592 y Fo(\))p Fp(;)d(:::;)24 b Fq(f)13
+b Fo(\()p Fq(P)1960 5606 y Fm(n)1998 5592 y Fo(\)\))24
+b Fv(j)36 b Fq(f)e Fv(2)20 b Fq(L)p Fo(\()p Fq(D)p Fo(\))2480
+5606 y Fm(F)2530 5592 y Fv(g)p Fp(:)p Black Black eop
+end end
+%%Page: 96 96
+TeXDict begin HPSdict begin 96 95 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.96) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(96)p Black 75 501 1648 4 v 1764 506 a FF(Example)p
+2102 501 V 75 526 4 25 v 3747 526 V 75 626 4 100 v 188
+596 a(gap>)44 b(F:=GF\(11\);;)p 3747 626 V 75 726 V 188
+696 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)q(;)p 3747
+726 V 75 825 V 188 795 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)
+q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 825 V 75 925 V 188
+895 a(gap>)g(a:=vars[1];;b:=vars[2)q(];;)p 3747 925 V
+75 1024 V 188 995 a(gap>)g(cdiv:=[)g(1,)f(2,)g(-1,)h(-2)f(];)p
+3747 1024 V 75 1124 V 188 1094 a([)g(1,)g(2,)g(-1,)g(-2)g(])p
+3747 1124 V 75 1224 V 188 1194 a(gap>)h(sdiv:=[)g(Z\(11\)\2102,)h
+(Z\(11\)\2103,)g(Z\(11\)\2106,)h(Z\(11\)\2109)e(];)p
+3747 1224 V 75 1323 V 188 1293 a([)f(Z\(11\)\2102,)i(Z\(11\)\2103,)g
+(Z\(11\)\2106,)g(Z\(11\)\2109)g(])p 3747 1323 V 75 1423
+V 188 1393 a(gap>)f(crv:=rec\(polynomial:=)q(b,r)q(ing)q(:=)q(R2\))q(;)
+p 3747 1423 V 75 1523 V 188 1493 a(rec\()g(polynomial)h(:=)e(x_2,)h
+(ring)g(:=)f(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))g(\))p
+3747 1523 V 75 1622 V 188 1592 a(gap>)h(div:=DivisorOnAffineC)q(urv)q
+(e\(c)q(di)q(v,s)q(div)q(,cr)q(v\);)p 3747 1622 V 75
+1722 V 188 1692 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(-1,)g(-2)g(],)g
+(support)i(:=)e([)g(Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2106,)g
+(Z\(11\)\2109)g(],)p 3747 1722 V 75 1822 V 273 1792 a(curve)f(:=)f
+(rec\()g(polynomial)j(:=)d(x_2,)h(ring)g(:=)f(PolynomialRing\(...,)48
+b([)43 b(x_1,)h(x_2)f(]\))g(\))g(\))p 3747 1822 V 75
+1921 V 188 1891 a(gap>)h(pts:=Difference\(Eleme)q(nts)q(\(GF)q(\(1)q
+(1\)\))q(,di)q(v.s)q(upp)q(ort)q(\);)p 3747 1921 V 75
+2021 V 188 1991 a([)f(0*Z\(11\),)i(Z\(11\)\2100,)g(Z\(11\),)f
+(Z\(11\)\2104,)h(Z\(11\)\2105,)g(Z\(11\)\2107,)g(Z\(11\)\2108)g(])p
+3747 2021 V 75 2120 V 188 2090 a(gap>)f(C:=GoppaCodeClassical)q(\(di)q
+(v,p)q(ts)q(\);)p 3747 2120 V 75 2220 V 188 2190 a(a)f(linear)h
+([7,2,1..6]4..5)j(code)d(defined)h(by)e(generator)i(matrix)f(over)g
+(GF\(11\))p 3747 2220 V 75 2320 V 188 2290 a(gap>)g
+(MinimumDistance\(C\);)p 3747 2320 V 75 2419 V 188 2389
+a(6)p 3747 2419 V 75 2444 4 25 v 3747 2444 V 75 2447
+3675 4 v 75 2580 a
+SDict begin H.S end
+ 75 2580 a 75 2580 a
+SDict begin 13.6 H.A end
+ 75 2580 a 75 2580
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.23) cvn H.B /DEST pdfmark end
+ 75 2580 a 117 x FJ(5.7.23)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Ev)o(aluationBi)o(v)o(ariateCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2871 a Fs(\006)22 b Ft(EvaluationBivaria)q(teC)q(ode)q
+(\()52 b(pts,)c(L,)f(crv)h(\))1564 b Fr(\(function\))p
+Black 216 3097 a FK(Input:)30 b Ft(pts)24 b FK(is)g(a)f(set)g(of)h(af)n
+(\002ne)f(points)i(on)f Ft(crv)p FK(,)g Ft(L)f FK(is)g(a)g(list)h(of)f
+(rational)j(functions)g(on)e Ft(crv)p FK(.)75 3210 y(Output:)43
+b(The)29 b(e)n(v)n(aluation)k(code)e(associated)h(to)e(the)h(points)g
+(in)f Ft(pts)g FK(and)h(functions)h(in)e Ft(L)p FK(,)f(b)n(ut)i
+(speci\002cally)h(for)75 3323 y(af)n(\002ne)25 b(plane)h(curv)o(es)g
+(and)f(this)g(function)i(checks)f(if)f(points)h(are)f(\223bad\224)h
+(\(if)f(so)g(remo)o(v)o(es)g(them)g(from)g(the)g(list)g
+Ft(pts)75 3435 y FK(automatically\).)47 b(A)27 b(point)i(is)f
+(\223bad\224)i(if)e(either)i(it)e(does)h(not)g(lie)f(on)g(the)h(set)g
+(of)f(non-singular)k Fq(F)7 b FK(-rational)31 b(points)75
+3548 y(\(places)25 b(of)f(de)o(gree)g(1\))g(on)f(the)h(curv)o(e.)216
+3661 y(V)-10 b(ery)21 b(similar)h(to)e Ft(EvaluationCode)26
+b FK(\(see)21 b Ft(EvaluationCode)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2306 3662 a
+SDict begin H.S end
+ 2306 3662 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2487 3599 a
+SDict begin H.R end
+ 2487 3599 a 2487 3661 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end
+ 2487 3661 a Black
+FK(\))d(for)f(a)g(more)g(general)h(construction\).)75
+3814 y
+SDict begin H.S end
+ 75 3814 a 75 3814 a
+SDict begin 13.6 H.A end
+ 75 3814 a 75 3814 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.24) cvn H.B /DEST pdfmark end
+ 75 3814
+a 97 x FJ(5.7.24)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(aluationBi)o(v)o
+(ariateCodeNC)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4085
+a Fs(\006)g Ft(EvaluationBivaria)q(teC)q(ode)q(NC\()53
+b(pts,)48 b(L,)f(crv)h(\))1471 b Fr(\(function\))p Black
+216 4311 a FK(As)23 b(in)g Ft(EvaluationBivariat)q(eC)q(ode)29
+b FK(b)n(ut)24 b(does)h(not)f(check)g(if)g(the)g(points)h(are)e
+(\223bad\224.)216 4424 y(Input:)30 b Ft(pts)24 b FK(is)g(a)f(set)g(of)h
+(af)n(\002ne)f(points)i(on)f Ft(crv)p FK(,)g Ft(L)f FK(is)g(a)g(list)h
+(of)f(rational)j(functions)g(on)e Ft(crv)p FK(.)75 4536
+y(Output:)30 b(The)23 b(e)n(v)n(aluation)j(code)e(associated)j(to)c
+(the)h(points)h(in)e Ft(pts)h FK(and)g(functions)i(in)e
+Ft(L)p FK(.)p 75 4659 1648 4 v 1764 4664 a FF(Example)p
+2102 4659 V 75 4684 4 25 v 3747 4684 V 75 4784 4 100
+v 188 4754 a(gap>)44 b(q:=4;;)p 3747 4784 V 75 4883 V
+188 4853 a(gap>)g(F:=GF\(q\2102\);;)p 3747 4883 V 75
+4983 V 188 4953 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p
+3747 4983 V 75 5082 V 188 5053 a(gap>)g(vars:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(\);;)p 3747 5082 V 75
+5182 V 188 5152 a(gap>)g(x:=vars[1];;)p 3747 5182 V 75
+5282 V 188 5252 a(gap>)g(y:=vars[2];;)p 3747 5282 V 75
+5381 V 188 5351 a(gap>)g(crv:=AffineCurve\(y\210q+)q(y-x)q(\210\(q)q
+(+1)q(\),R)q(\);)p 3747 5381 V 75 5481 V 188 5451 a(rec\()g(ring)f(:=)g
+(PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d
+(x_1\2105+x_2\2104+x_2)48 b(\))p 3747 5481 V 75 5581
+V 188 5551 a(gap>)c(L:=[)f(x\2100,)h(x,)f(x\2102*y\210-1)i(];)p
+3747 5581 V Black Black eop end end
+%%Page: 97 97
+TeXDict begin HPSdict begin 97 96 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.97) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(97)p Black 75 428 4 100 v 188 399 a FF([)43
+b(Z\(2\)\2100,)h(x_1,)g(x_1\2102/x_2)h(])p 3747 428 V
+75 528 V 188 498 a(gap>)f(Pts:=AffinePointsOnCu)q(rve)q(\(cr)q(v.)q
+(pol)q(yno)q(mia)q(l,c)q(rv.)q(rin)q(g,F)q(\);;)p 3747
+528 V 75 628 V 188 598 a(gap>)g(C1:=EvaluationBivaria)q(teC)q(ode)q
+(\(P)q(ts,)q(L,c)q(rv\))q(;)k(time;)p 3747 628 V 75 727
+V 3747 727 V 75 827 V 3747 827 V 75 927 V 230 897 a(Automatically)f
+(removed)e(the)e(following)j('bad')e(points)g(\(either)h(a)d(pole)i(or)
+f(not)p 3747 927 V 75 1026 V 230 996 a(on)g(the)h(curve\):)p
+3747 1026 V 75 1126 V 188 1096 a([)f([)f(0*Z\(2\),)j(0*Z\(2\))f(])f(])p
+3747 1126 V 75 1225 V 3747 1225 V 75 1325 V 188 1295
+a(a)g(linear)h([63,3,1..60]51..59)91 b(evaluation)46
+b(code)d(over)h(GF\(16\))p 3747 1325 V 75 1425 V 188
+1395 a(52)p 3747 1425 V 75 1524 V 188 1494 a(gap>)g
+(P:=Difference\(Pts,[[)49 b(0*Z\(2\2104\)\2100,)d(0*Z\(2\)\2100)f
+(]]\);;)p 3747 1524 V 75 1624 V 188 1594 a(gap>)f
+(C2:=EvaluationBivaria)q(teC)q(ode)q(NC)q(\(P,)q(L,c)q(rv\))q(;)k
+(time;)p 3747 1624 V 75 1724 V 188 1694 a(a)43 b(linear)h
+([63,3,1..60]51..59)91 b(evaluation)46 b(code)d(over)h(GF\(16\))p
+3747 1724 V 75 1823 V 188 1793 a(48)p 3747 1823 V 75
+1923 V 188 1893 a(gap>)g(C3:=EvaluationCode\(P,)q(L,R)q(\);)49
+b(time;)p 3747 1923 V 75 2022 V 188 1993 a(a)43 b(linear)h
+([63,3,1..56]51..59)91 b(evaluation)46 b(code)d(over)h(GF\(16\))p
+3747 2022 V 75 2122 V 188 2092 a(58)p 3747 2122 V 75
+2222 V 188 2192 a(gap>)g(MinimumDistance\(C1\);)p 3747
+2222 V 75 2321 V 188 2291 a(56)p 3747 2321 V 75 2421
+V 188 2391 a(gap>)g(MinimumDistance\(C2\);)p 3747 2421
+V 75 2521 V 188 2491 a(56)p 3747 2521 V 75 2620 V 188
+2590 a(gap>)g(MinimumDistance\(C3\);)p 3747 2620 V 75
+2720 V 188 2690 a(56)p 3747 2720 V 75 2819 V 188 2790
+a(gap>)p 3747 2819 V 75 2844 4 25 v 3747 2844 V 75 2847
+3675 4 v 75 2979 a
+SDict begin H.S end
+ 75 2979 a 75 2979 a
+SDict begin 13.6 H.A end
+ 75 2979 a 75 2979
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.25) cvn H.B /DEST pdfmark end
+ 75 2979 a 116 x FJ(5.7.25)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(OneP)n(ointA)-5 b(GCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3269 a Fs(\006)22 b Ft(OnePointAGCode\()52 b(f,)47
+b(P,)g(m,)g(R)g(\))2028 b Fr(\(function\))p Black 216
+3495 a FK(Input:)30 b Ft(f)21 b FK(is)g(a)g(polynomial)j(in)e
+(R=F[x,y],)f(where)h Ft(F)f FK(is)g(a)h(\002nite)f(\002eld,)h
+Ft(m)f FK(is)g(a)g(positi)n(v)o(e)i(inte)o(ger)g(\(the)f(multiplic-)75
+3608 y(ity)i(of)f(the)h(`point)h(at)e(in\002nity')i Fu(\245)e
+FK(on)g(the)h(curv)o(e)38 b Fq(f)13 b Fo(\()p Fq(x)p
+Fp(;)d Fq(y)p Fo(\))22 b(=)e FK(0\),)j Ft(P)h FK(is)f(a)g(list)h(of)f
+Fq(n)h FK(points)h(on)e(the)h(curv)o(e)g(o)o(v)o(er)g
+Fq(F)7 b FK(.)75 3721 y(Output:)30 b(The)18 b Fq(C)25
+b FK(which)f(is)f(the)h(image)g(of)f(the)h(e)n(v)n(aluation)i(map)1491
+3915 y Fq(E)7 b(val)1664 3929 y Fm(P)1729 3915 y FK(:)21
+b Fq(L)p Fo(\()p Fq(m)13 b Fv(\001)g Fu(\245)p Fo(\))19
+b Fv(!)h Fq(F)2271 3878 y Fm(n)2309 3915 y Fp(;)75 4110
+y FK(gi)n(v)o(en)27 b(by)42 b Fq(f)35 b Fv(7\000)-16
+b(!)22 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)833 4124 y
+Fr(1)872 4110 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7
+b Fq(p)1191 4124 y Fm(n)1230 4110 y Fo(\)\))p FK(,)27
+b(where)35 b Fq(p)1651 4124 y Fm(i)1696 4110 y Fv(2)21
+b Fq(P)p FK(.)38 b(Here)27 b Fq(L)p Fo(\()p Fq(m)14 b
+Fv(\001)g Fu(\245)p Fo(\))26 b FK(denotes)i(the)g(Riemann-Roch)g(space)
+g(of)75 4223 y(the)e(di)n(visor)h Fq(m)13 b Fv(\001)g
+Fu(\245)26 b FK(on)g(the)g(curv)o(e.)37 b(This)25 b(has)i(a)e(basis)i
+(consisting)i(of)c(monomials)j Fq(x)2774 4190 y Fm(i)2797
+4223 y Fq(y)2847 4190 y Fm(j)2871 4223 y FK(,)e(where)g
+Fo(\()p Fq(i)p Fp(;)e Fq(j)r Fo(\))i FK(range)h(o)o(v)o(er)75
+4336 y(a)i(polygon)i(depending)h(on)d Fq(m)f FK(and)43
+b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))p FK(.)47
+b(F)o(or)28 b(more)h(details)h(on)f(the)h(Riemann-Roch)g(space)g(of)f
+(the)h(di)n(visor)75 4449 y Fq(m)13 b Fv(\001)g Fu(\245)22
+b FK(see)h(Proposition)j(III.10.5)f(in)e(Stichtenoth)j([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1715 4451 a
+SDict begin H.S end
+ 1715 4451
+a 0.0236 0.6179 0.0894 TeXcolorrgb -2 x FK(Sti93)p 0.0236 0.6179 0.0894
+TeXcolorrgb 1906 4387 a
+SDict begin H.R end
+ 1906 4387 a 1906 4449 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.St93) cvn H.B /ANN pdfmark end
+ 1906
+4449 a Black 1 w FK(].)216 4561 y(This)84 b(command)h(returns)h(a)e
+(\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e
+(components)j(\(type)75 4674 y Ft(NamesOfComponents\()q(C\))50
+b FK(to)44 b(see)h(them)g(all\):)71 b Ft(C!.points)47
+b FK(\(namely)f Ft(P)p FK(\),)j Ft(C!.multiplicity)g
+FK(\(namely)75 4787 y Ft(m)p FK(\),)23 b Ft(C!.curve)j
+FK(\(namely)e Ft(f)q FK(\))f(and)h Ft(C!.ring)h FK(\(namely)g
+Ft(R)p FK(\).)p 75 4900 1648 4 v 1764 4905 a FF(Example)p
+2102 4900 V 75 4925 4 25 v 3747 4925 V 75 5024 4 100
+v 188 4995 a(gap>)44 b(F:=GF\(11\);)p 3747 5024 V 75
+5124 V 188 5094 a(GF\(11\))p 3747 5124 V 75 5224 V 188
+5194 a(gap>)g(R)e(:=)h(PolynomialRing\(F,[")q(x",)q("y)q("]\))q(;)p
+3747 5224 V 75 5323 V 188 5293 a(PolynomialRing\(...,)49
+b([)42 b(x,)h(y)g(]\))p 3747 5323 V 75 5423 V 188 5393
+a(gap>)h(indets)g(:=)f(IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q
+(R\);)p 3747 5423 V 75 5523 V 188 5493 a([)g(x,)g(y)f(])p
+3747 5523 V 75 5622 V 188 5592 a(gap>)i(x:=indets[1];)i(y:=indets[2];)p
+3747 5622 V Black Black eop end end
+%%Page: 98 98
+TeXDict begin HPSdict begin 98 97 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.98) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1685 w FE(GU)n(A)l(V)-5
+b(A)1700 b FK(98)p Black 75 428 4 100 v 188 399 a FF(x)p
+3747 428 V 75 528 V 188 498 a(y)p 3747 528 V 75 628 V
+188 598 a(gap>)44 b(P:=AffinePointsOnCurv)q(e\(y)q(\2102-)q(x\210)q
+(11+)q(x,R)q(,F\))q(;;)p 3747 628 V 75 727 V 188 697
+a(gap>)g(C:=OnePointAGCode\(y\2102)q(-x\210)q(11+)q(x,)q(P,1)q(5,R)q
+(\);)p 3747 727 V 75 827 V 188 797 a(a)f(linear)h([11,8,1..0]2..3)90
+b(one-point)45 b(AG)e(code)h(over)g(GF\(11\))p 3747 827
+V 75 927 V 188 897 a(gap>)g(MinimumDistance\(C\);)p 3747
+927 V 75 1026 V 188 996 a(4)p 3747 1026 V 75 1126 V 188
+1096 a(gap>)g(Pts:=List\([1,2,4,6,7,)q(8,9)q(,10)q(,1)q(1],)q(i->)q
+(P[i)q(]\);)q(;)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g
+(C:=OnePointAGCode\(y\2102)q(-x\210)q(11+)q(x,)q(PT,)q(10,)q(R\);)p
+3747 1225 V 75 1325 V 188 1295 a(a)f(linear)h([9,6,1..4]2..3)j
+(one-point)f(AG)d(code)g(over)h(GF\(11\))p 3747 1325
+V 75 1425 V 188 1395 a(gap>)g(MinimumDistance\(C\);)p
+3747 1425 V 75 1524 V 188 1494 a(4)p 3747 1524 V 75 1549
+4 25 v 3747 1549 V 75 1552 3675 4 v 75 1765 a FK(See)23
+b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 931 1766 a
+SDict begin H.S end
+ 931 1766 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1112 1703 a
+SDict begin H.R end
+ 1112 1703 a 1112 1765 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end
+ 1112 1765 a Black
+FK(\))c(for)g(a)f(more)g(general)j(construction.)p Black
+Black eop end end
+%%Page: 99 99
+TeXDict begin HPSdict begin 99 98 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.99) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.6) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(6)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Manipulating)53 b(Codes)p Black 75 1881 a FK(In)20
+b(this)h(chapter)h(we)e(describe)i(se)n(v)o(eral)g(functions)g
+Fy(GU)m(A)-6 b(V)f(A)19 b FK(uses)i(to)f(manipulate)j(codes.)29
+b(Some)19 b(of)h(the)h(best)g(codes)75 1994 y(are)j(obtained)i(by)d
+(starting)j(with)d(for)h(e)o(xample)g(a)f(BCH)f(code,)i(and)g
+(manipulating)i(it.)216 2107 y(In)d(some)g(cases,)h(it)e(is)h(f)o
+(aster)h(to)f(perform)h(calculations)j(with)22 b(a)h(manipulated)i
+(code)f(than)g(to)f(use)g(the)g(original)75 2220 y(code.)50
+b(F)o(or)30 b(e)o(xample,)j(if)d(the)h(dimension)h(of)f(the)f(code)i
+(is)e(lar)n(ger)i(than)f(half)g(the)g(w)o(ord)g(length,)i(it)d(is)h
+(generally)75 2333 y(f)o(aster)d(to)f(compute)h(the)f(weight)h(distrib)
+n(ution)j(by)c(\002rst)f(calculating)k(the)d(weight)h(distrib)n(ution)j
+(of)26 b(the)i(dual)f(code)75 2446 y(than)g(by)g(directly)i
+(calculating)h(the)d(weight)g(distrib)n(ution)k(of)26
+b(the)h(original)i(code.)39 b(The)26 b(size)i(of)e(the)h(dual)h(code)f
+(is)75 2559 y(smaller)d(in)g(these)g(cases.)216 2672
+y(Because)35 b Fy(GU)m(A)-6 b(V)f(A)31 b FK(k)o(eeps)j(all)g
+(information)i(in)d(a)g(code)h(record,)i(in)e(some)f(cases)h(the)g
+(information)i(can)d(be)75 2785 y(preserv)o(ed)26 b(after)e
+(manipulations.)32 b(Therefore,)25 b(computations)i(do)c(not)h(al)o(w)o
+(ays)g(ha)n(v)o(e)h(to)e(start)h(from)g(scratch.)216
+2897 y(In)47 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+657 2898 a
+SDict begin H.S end
+ 657 2898 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 2835
+a
+SDict begin H.R end
+ 770 2835 a 770 2897 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.6.1) cvn H.B /ANN pdfmark end
+ 770 2897 a Black FK(,)53 b(we)46
+b(describe)j(functions)h(that)d(tak)o(e)h(a)f(code)g(with)g(certain)i
+(parameters,)55 b(modify)47 b(it)75 3010 y(in)g(some)f(w)o(ay)h(and)g
+(return)g(a)g(dif)n(ferent)h(code)f(\(see)h Ft(ExtendedCode)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2550 3011 a
+SDict begin H.S end
+
+2550 3011 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2731 2948 a
+SDict begin H.R end
+ 2731 2948
+a 2731 3010 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end
+ 2731 3010 a Black FK(\),)i Ft(PuncturedCode)f
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 3011 a
+SDict begin H.S end
+
+3515 3011 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3696 2948 a
+SDict begin H.R end
+ 3696 2948
+a 3696 3010 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.2) cvn H.B /ANN pdfmark end
+ 3696 3010 a Black FK(\),)75 3123 y Ft(EvenWeightSubcode)g
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 938 3124 a
+SDict begin H.S end
+ 938
+3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1119 3061 a
+SDict begin H.R end
+ 1119 3061
+a 1119 3123 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end
+ 1119 3123 a Black FK(\),)g Ft(PermutedCode)e
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1854 3124 a
+SDict begin H.S end
+
+1854 3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.4)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2035 3061 a
+SDict begin H.R end
+ 2035 3061
+a 2035 3123 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.4) cvn H.B /ANN pdfmark end
+ 2035 3123 a Black FK(\),)i Ft(ExpurgatedCode)e
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2862 3124 a
+SDict begin H.S end
+
+2862 3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.5)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3043 3061 a
+SDict begin H.R end
+ 3043 3061
+a 3043 3123 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.5) cvn H.B /ANN pdfmark end
+ 3043 3123 a Black FK(\),)i Ft(AugmentedCode)75
+3236 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3237
+a
+SDict begin H.S end
+ 105 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.6)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 3174 a
+SDict begin H.R end
+ 286 3174
+a 286 3236 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end
+ 286 3236 a Black FK(\),)62 b Ft(RemovedElementsCod)q(e)d
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1365 3237 a
+SDict begin H.S end
+
+1365 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.7)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1546 3174 a
+SDict begin H.R end
+ 1546 3174
+a 1546 3236 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end
+ 1546 3236 a Black FK(\),)j Ft(AddedElementsCode)e
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2533 3237 a
+SDict begin H.S end
+
+2533 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2714 3174 a
+SDict begin H.R end
+ 2714 3174
+a 2714 3236 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end
+ 2714 3236 a Black FK(\),)i Ft(ShortenedCode)c
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 3238 a
+SDict begin H.S end
+
+3515 3238 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3696 3174 a
+SDict begin H.R end
+ 3696 3174
+a 3696 3236 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end
+ 3696 3236 a Black FK(\),)75 3349 y Ft(LengthenedCode)71
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 820 3350 a
+SDict begin H.S end
+
+820 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.10)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1046 3287 a
+SDict begin H.R end
+ 1046 3287
+a 1046 3349 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.10) cvn H.B /ANN pdfmark end
+ 1046 3349 a Black FK(\),)77 b Ft(ResidueCode)70
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1782 3350
+a
+SDict begin H.S end
+ 1782 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.11)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2008 3287 a
+SDict begin H.R end
+ 2008 3287
+a 2008 3349 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.11) cvn H.B /ANN pdfmark end
+ 2008 3349 a Black FK(\),)78 b Ft(ConstructionBCode)71
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3022 3350
+a
+SDict begin H.S end
+ 3022 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3248 3287 a
+SDict begin H.R end
+ 3248 3287
+a 3248 3349 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.12) cvn H.B /ANN pdfmark end
+ 3248 3349 a Black FK(\),)78 b Ft(DualCode)75
+3462 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3463
+a
+SDict begin H.S end
+ 105 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.13)p
+0.0236 0.0894 0.6179 TeXcolorrgb 331 3400 a
+SDict begin H.R end
+ 331 3400
+a 331 3462 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end
+ 331 3462 a Black FK(\),)32 b Ft(ConversionFieldCode)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1355 3463 a
+SDict begin H.S end
+
+1355 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.14)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1581 3400 a
+SDict begin H.R end
+ 1581 3400
+a 1581 3462 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.14) cvn H.B /ANN pdfmark end
+ 1581 3462 a Black FK(\),)c Ft(ConstantWeightSub)q(cod)q
+(e)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2698 3463
+a
+SDict begin H.S end
+ 2698 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.17)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2924 3400 a
+SDict begin H.R end
+ 2924 3400
+a 2924 3462 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.17) cvn H.B /ANN pdfmark end
+ 2924 3462 a Black FK(\),)c Ft(StandardFormCode)75
+3575 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3576
+a
+SDict begin H.S end
+ 105 3576 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.18)p
+0.0236 0.0894 0.6179 TeXcolorrgb 331 3513 a
+SDict begin H.R end
+ 331 3513
+a 331 3575 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.18) cvn H.B /ANN pdfmark end
+ 331 3575 a Black FK(\))46 b(and)g Ft(CosetCode)i
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1075 3576 a
+SDict begin H.S end
+
+1075 3576 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.16)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1301 3513 a
+SDict begin H.R end
+ 1301 3513
+a 1301 3575 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.16) cvn H.B /ANN pdfmark end
+ 1301 3575 a Black FK(\)\).)95 b(In)45 b(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1916 3576 a
+SDict begin H.S end
+ 1916 3576
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2029 3513 a
+SDict begin H.R end
+ 2029 3513 a 2029 3575 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.6.2) cvn H.B /ANN pdfmark end
+ 2029
+3575 a Black FK(,)50 b(we)45 b(describe)i(functions)h(that)e(generate)h
+(a)e(ne)n(w)75 3688 y(code)30 b(out)f(of)g(tw)o(o)f(codes)j(\(see)e
+Ft(DirectSumCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1757 3689 a
+SDict begin H.S end
+ 1757 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1938
+3626 a
+SDict begin H.R end
+ 1938 3626 a 1938 3688 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end
+ 1938 3688 a Black FK(\),)d
+Ft(UUVCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2404 3689 a
+SDict begin H.S end
+ 2404 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.2.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2585
+3626 a
+SDict begin H.R end
+ 2585 3626 a 2585 3688 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.2) cvn H.B /ANN pdfmark end
+ 2585 3688 a Black FK(\),)g
+Ft(DirectProductCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3515 3689 a
+SDict begin H.S end
+ 3515 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696
+3626 a
+SDict begin H.R end
+ 3696 3626 a 3696 3688 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.3) cvn H.B /ANN pdfmark end
+ 3696 3688 a Black FK(\),)75
+3801 y Ft(IntersectionCode)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 870 3802 a
+SDict begin H.S end
+ 870 3802 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.2.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1051 3739 a
+SDict begin H.R end
+ 1051 3739 a 1051 3801 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.4) cvn H.B /ANN pdfmark end
+ 1051 3801 a Black
+FK(\))24 b(and)g Ft(UnionCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1729 3802 a
+SDict begin H.S end
+ 1729 3802 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.2.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1910 3739 a
+SDict begin H.R end
+ 1910 3739 a 1910 3801 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.5) cvn H.B /ANN pdfmark end
+ 1910 3801 a Black
+FK(\)\).)75 3960 y
+SDict begin H.S end
+ 75 3960 a 75 3960 a
+SDict begin 13.6 H.A end
+ 75 3960 a 75 3960
+a
+SDict begin [ /View [/XYZ H.V] /Dest (section.6.1) cvn H.B /DEST pdfmark end
+ 75 3960 a 133 x FM(6.1)p 0.0 0.0 1.0 TeXcolorrgb 119
+w(Functions)31 b(that)e(Generate)i(a)e(New)i(Code)g(fr)n(om)e(a)g(Gi)o
+(v)o(en)h(Code)p Black 75 4190 a
+SDict begin H.S end
+ 75 4190 a 75 4190 a
+SDict begin 13.6 H.A end
+
+75 4190 a 75 4190 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.1) cvn H.B /DEST pdfmark end
+ 75 4190 a 114 x FJ(6.1.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(ExtendedCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4478 a Fs(\006)22 b Ft(ExtendedCode\()51 b(C[,)d(i])f(\))2306
+b Fr(\(function\))p Black 216 4704 a Ft(ExtendedCode)31
+b FK(e)o(xtends)d(the)f(code)h Ft(C)e(i)g FK(times)i(and)f(returns)h
+(the)f(result.)40 b Ft(i)27 b FK(is)f(equal)i(to)f(1)f(by)h(def)o
+(ault.)41 b(Ex-)75 4817 y(tending)22 b(is)e(done)h(by)g(adding)h(a)d
+(parity)j(check)f(bit)g(after)g(the)f(last)h(coordinate.)31
+b(The)19 b(coordinates)24 b(of)c(all)g(code)n(w)o(ords)75
+4930 y(no)n(w)j(add)h(up)g(to)f(zero.)29 b(In)24 b(the)g(binary)h
+(case,)f(each)g(code)n(w)o(ord)h(has)f(e)n(v)o(en)g(weight.)216
+5043 y(The)k(w)o(ord)g(length)i(increases)h(by)d Ft(i)q
+FK(.)42 b(The)28 b(size)h(of)f(the)h(code)g(remains)g(the)g(same.)43
+b(In)29 b(the)f(binary)i(case,)g(the)75 5155 y(minimum)23
+b(distance)j(increases)g(by)e(one)g(if)f(it)g(w)o(as)g(odd.)30
+b(In)23 b(other)i(cases,)f(that)g(is)f(not)h(al)o(w)o(ays)h(true.)216
+5268 y(A)e(c)o(yclic)h(code)g(in)g(general)h(is)e(no)h(longer)h(c)o
+(yclic)f(after)h(e)o(xtending.)p 75 5391 1648 4 v 1764
+5396 a FF(Example)p 2102 5391 V 75 5416 4 25 v 3747 5416
+V 75 5515 4 100 v 188 5486 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(3,)d
+(GF\(2\))h(\);)p 3747 5515 V 75 5615 V 188 5585 a(a)f(linear)h
+([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p
+3747 5615 V Black 1867 5841 a FK(99)p Black eop end end
+%%Page: 100 100
+TeXDict begin HPSdict begin 100 99 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.100) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(100)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(C2)f(:=)g(ExtendedCode\()j(C1)d(\);)p 3747 428 V 75
+528 V 188 498 a(a)g(linear)h([8,4,4]2)h(extended)g(code)p
+3747 528 V 75 628 V 188 598 a(gap>)f(IsEquivalent\()i(C2,)e
+(ReedMullerCode\()j(1,)c(3)g(\))g(\);)p 3747 628 V 75
+727 V 188 697 a(true)p 3747 727 V 75 827 V 188 797 a(gap>)h(List\()g
+(AsSSortedList\()j(C2)c(\),)g(WeightCodeword)k(\);)p
+3747 827 V 75 927 V 188 897 a([)c(0,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g
+(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(8)g(])p 3747
+927 V 75 1026 V 188 996 a(gap>)h(C3)f(:=)g(EvenWeightSubcode\()48
+b(C1)43 b(\);)p 3747 1026 V 75 1126 V 188 1096 a(a)g(linear)h
+([7,3,4]2..3)i(even)e(weight)g(subcode)p 3747 1126 V
+75 1151 4 25 v 3747 1151 V 75 1154 3675 4 v 75 1361 a
+FK(T)-7 b(o)75 b(undo)h(e)o(xtending,)91 b(call)76 b
+Ft(PuncturedCode)k FK(\(see)c Ft(PuncturedCode)k FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2781 1362 a
+SDict begin H.S end
+ 2781 1362
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.2)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2962 1299 a
+SDict begin H.R end
+ 2962 1299 a 2962 1361 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.2) cvn H.B /ANN pdfmark end
+ 2962
+1361 a Black FK(\)\).)186 b(The)75 b(function)75 1474
+y Ft(EvenWeightSubcode)36 b FK(\(see)c Ft(EvenWeightSubcode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1918 1475 a
+SDict begin H.S end
+
+1918 1475 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2099 1412 a
+SDict begin H.R end
+ 2099 1412
+a 2099 1474 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end
+ 2099 1474 a Black FK(\)\))31 b(also)h(returns)g(a)f
+(related)h(code)g(with)e(only)i(e)n(v)o(en)75 1587 y(weights,)24
+b(b)n(ut)g(without)h(changing)h(its)e(w)o(ord)f(length.)75
+1738 y
+SDict begin H.S end
+ 75 1738 a 75 1738 a
+SDict begin 13.6 H.A end
+ 75 1738 a 75 1738 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.2) cvn H.B /DEST pdfmark end
+ 75 1738
+a 97 x FJ(6.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Punctur)n(edCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2009 a Fs(\006)f Ft(PuncturedCode\()52
+b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2235 a
+Ft(PuncturedCode)28 b FK(punctures)e Ft(C)d FK(in)g(the)h(last)g
+(column,)h(and)f(returns)h(the)f(result.)30 b(Puncturing)c(is)d(done)h
+(simply)75 2348 y(by)30 b(cutting)i(of)n(f)e(the)g(last)g(column)h
+(from)f(each)h(code)n(w)o(ord.)49 b(This)30 b(means)h(the)f(w)o(ord)g
+(length)h(decreases)i(by)d(one.)75 2461 y(The)23 b(minimum)g(distance)j
+(in)e(general)h(also)f(decrease)i(by)d(one.)216 2574
+y(This)46 b(command)h(can)g(also)g(be)f(called)i(with)e(the)g(syntax)i
+Ft(PuncturedCode\()j(C,)d(L)e(\))p FK(.)g(In)g(this)h(case,)75
+2686 y Ft(PuncturedCode)38 b FK(punctures)e Ft(C)d FK(in)h(the)g
+(columns)h(speci\002ed)g(by)f Ft(L)p FK(,)h(a)e(list)h(of)g(inte)o
+(gers.)61 b(All)33 b(columns)i(speci-)75 2799 y(\002ed)21
+b(by)h Ft(L)g FK(are)g(omitted)h(from)f(each)g(code)n(w)o(ord.)30
+b(If)21 b Fq(l)26 b FK(is)c(the)g(length)h(of)f Ft(L)g
+FK(\(so)g(the)g(number)h(of)e(remo)o(v)o(ed)i(columns\),)75
+2912 y(the)h(w)o(ord)f(length)i(decreases)h(by)e Fq(l)5
+b FK(.)28 b(The)23 b(minimum)g(distance)j(can)e(also)g(decrease)i(by)d
+Fq(l)28 b FK(or)23 b(less.)216 3025 y(Puncturing)32 b(a)e(c)o(yclic)h
+(code)g(in)f(general)h(results)h(in)e(a)f(non-c)o(yclic)k(code.)49
+b(If)30 b(the)g(code)h(is)e(punctured)k(in)d(all)75 3138
+y(the)c(columns)g(where)g(a)e(w)o(ord)i(of)f(minimal)h(weight)g(is)f
+(unequal)i(to)e(zero,)h(the)g(dimension)h(of)e(the)h(resulting)h(code)
+75 3251 y(decreases.)p 75 3349 1648 4 v 1764 3354 a FF(Example)p
+2102 3349 V 75 3374 4 25 v 3747 3374 V 75 3474 4 100
+v 188 3444 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(5,)g(GF\(2\))h(\);)p
+3747 3474 V 75 3573 V 188 3543 a(a)f(cyclic)h([15,7,5]3..5)i(BCH)e
+(code,)g(delta=5,)h(b=1)e(over)h(GF\(2\))p 3747 3573
+V 75 3673 V 188 3643 a(gap>)g(C2)f(:=)g(PuncturedCode\()k(C1)c(\);)p
+3747 3673 V 75 3773 V 188 3743 a(a)g(linear)h([14,7,4]3..5)i(punctured)
+g(code)p 3747 3773 V 75 3872 V 188 3842 a(gap>)e(ExtendedCode\()i(C2)d
+(\))g(=)g(C1;)p 3747 3872 V 75 3972 V 188 3942 a(false)p
+3747 3972 V 75 4071 V 188 4042 a(gap>)h(PuncturedCode\()j(C1,)c
+([1,2,3,4,5,6,7])48 b(\);)p 3747 4071 V 75 4171 V 188
+4141 a(a)43 b(linear)h([8,7,1]1)h(punctured)g(code)p
+3747 4171 V 75 4271 V 188 4241 a(gap>)f(PuncturedCode\()j
+(WholeSpaceCode\()g(4,)c(GF\(5\))h(\))f(\);)p 3747 4271
+V 75 4370 V 188 4340 a(a)g(linear)h([3,3,1]0)h(punctured)g(code)87
+b(#)42 b(The)i(dimension)h(decreased)g(from)f(4)f(to)g(3)p
+3747 4370 V 75 4395 4 25 v 3747 4395 V 75 4398 3675 4
+v 75 4605 a Ft(ExtendedCode)27 b FK(e)o(xtends)e(the)f(code)g(again)g
+(\(see)g Ft(ExtendedCode)j FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2278 4606 a
+SDict begin H.S end
+ 2278 4606 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2459 4543 a
+SDict begin H.R end
+ 2459 4543 a 2459 4605 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end
+ 2459 4605 a Black
+FK(\)\),)d(although)i(in)d(general)j(this)e(does)g(not)75
+4718 y(result)h(in)e(the)h(old)g(code.)75 4851 y
+SDict begin H.S end
+ 75 4851
+a 75 4851 a
+SDict begin 13.6 H.A end
+ 75 4851 a 75 4851 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.3) cvn H.B /DEST pdfmark end
+ 75 4851 a 115 x FJ(6.1.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(enW)-6 b(eightSubcode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b
+Ft(EvenWeightSubcode)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p
+Black 216 5367 a Ft(EvenWeightSubcode)29 b FK(returns)c(the)e(e)n(v)o
+(en)h(weight)g(subcode)h(of)e Ft(C)p FK(,)g(consisting)j(of)d(all)g
+(code)n(w)o(ords)i(of)f Ft(C)e FK(with)75 5479 y(e)n(v)o(en)e(weight.)
+28 b(If)20 b Ft(C)f FK(is)h(a)f(linear)j(code)e(and)h(contains)h(w)o
+(ords)e(of)g(odd)g(weight,)h(the)f(resulting)j(code)d(has)h(a)e
+(dimension)75 5592 y(of)29 b(one)h(less.)47 b(The)29
+b(minimum)g(distance)j(al)o(w)o(ays)e(increases)i(with)d(one)h(if)f(it)
+g(w)o(as)g(odd.)47 b(If)29 b Ft(C)g FK(is)g(a)g(binary)i(c)o(yclic)p
+Black Black eop end end
+%%Page: 101 101
+TeXDict begin HPSdict begin 101 100 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.101) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(101)p Black 75 399 a(code,)27 b(and)g Fq(g)p
+Fo(\()p Fq(x)p Fo(\))g FK(is)f(its)g(generator)j(polynomial,)g(the)d(e)
+n(v)o(en)g(weight)h(subcode)h(either)g(has)e(generator)j(polynomial)75
+511 y Fq(g)p Fo(\()p Fq(x)p Fo(\))24 b FK(\(if)g Fq(g)p
+Fo(\()p Fq(x)p Fo(\))g FK(is)g(di)n(visible)h(by)f Fq(x)13
+b Fv(\000)g FK(1\))23 b(or)g Fq(g)p Fo(\()p Fq(x)p Fo(\))13
+b Fv(\001)g Fo(\()p Fq(x)g Fv(\000)g FK(1)p Fo(\))25
+b FK(\(if)e(no)h(f)o(actor)h Fq(x)13 b Fv(\000)g FK(1)23
+b(w)o(as)g(present)i(in)f Fq(g)p Fo(\()p Fq(x)p Fo(\))p
+FK(\).)29 b(So)23 b(the)h(e)n(v)o(en)75 624 y(weight)g(subcode)i(is)d
+(again)h(c)o(yclic.)216 737 y(Of)f(course,)h(if)g(all)f(code)n(w)o
+(ords)j(of)d Ft(C)g FK(are)h(already)h(of)f(e)n(v)o(en)f(weight,)h(the)
+g(returned)i(code)e(is)g(equal)g(to)g Ft(C)p FK(.)p 75
+860 1648 4 v 1764 865 a FF(Example)p 2102 860 V 75 885
+4 25 v 3747 885 V 75 984 4 100 v 188 955 a(gap>)44 b(C1)f(:=)g
+(EvenWeightSubcode\()48 b(BCHCode\()d(8,)e(4,)g(GF\(3\))h(\))f(\);)p
+3747 984 V 75 1084 V 188 1054 a(an)g(\(8,33,4..8\)3..8)k(even)d(weight)
+g(subcode)p 3747 1084 V 75 1184 V 188 1154 a(gap>)g(List\()g
+(AsSSortedList\()j(C1)c(\),)g(WeightCodeword)k(\);)p
+3747 1184 V 75 1283 V 188 1253 a([)c(0,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g
+(6,)g(4,)g(4,)g(4,)g(4,)g(6,)g(4,)g(4,)g(6,)g(4,)g(4,)g(8,)g(6,)g(4,)g
+(6,)g(8,)g(4,)g(4,)p 3747 1283 V 75 1383 V 273 1353 a(4,)g(6,)g(4,)g
+(6,)g(8,)g(4,)g(6,)g(8)f(])p 3747 1383 V 75 1483 V 188
+1453 a(gap>)i(EvenWeightSubcode\()k(ReedMullerCode\()g(1,)43
+b(3)f(\))h(\);)p 3747 1483 V 75 1582 V 188 1552 a(a)g(linear)h
+([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p
+3747 1582 V 75 1607 4 25 v 3747 1607 V 75 1610 3675 4
+v 75 1823 a Ft(ExtendedCode)31 b FK(also)d(returns)h(a)e(related)i
+(code)g(of)e(only)h(e)n(v)o(en)g(weights,)h(b)n(ut)f(without)h
+(reducing)h(its)d(dimension)75 1936 y(\(see)d Ft(ExtendedCode)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 853 1937 a
+SDict begin H.S end
+ 853
+1937 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1034 1874 a
+SDict begin H.R end
+ 1034 1874
+a 1034 1936 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end
+ 1034 1936 a Black FK(\)\).)75 2085 y
+SDict begin H.S end
+ 75
+2085 a 75 2085 a
+SDict begin 13.6 H.A end
+ 75 2085 a 75 2085 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.4) cvn H.B /DEST pdfmark end
+ 75 2085 a 100 x
+FJ(6.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutedCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2359 a Fs(\006)22 b
+Ft(PermutedCode\()51 b(C,)d(L)e(\))2399 b Fr(\(function\))p
+Black 216 2585 a Ft(PermutedCode)38 b FK(returns)d Ft(C)f
+FK(after)h(column)g(permutations.)63 b Ft(L)34 b FK(\(in)g
+Fy(GAP)e FK(disjoint)k(c)o(ycle)f(notation\))h(is)e(the)75
+2698 y(permutation)j(to)d(be)g(e)o(x)o(ecuted)i(on)e(the)g(columns)i
+(of)e Ft(C)p FK(.)60 b(If)34 b Ft(C)f FK(is)h(c)o(yclic,)k(the)c
+(result)i(in)e(general)i(is)d(no)i(longer)75 2811 y(c)o(yclic.)i(If)26
+b(a)f(permutation)k(results)e(in)f(the)g(same)g(code)h(as)f
+Ft(C)p FK(,)g(this)g(permutation)j(belongs)f(to)d(the)i(automorphism)75
+2924 y(group)i(of)e Ft(C)g FK(\(see)h Ft(AutomorphismGroup)33
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1507 2925
+a
+SDict begin H.S end
+ 1507 2925 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1688 2862 a
+SDict begin H.R end
+ 1688 2862
+a 1688 2924 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.3) cvn H.B /ANN pdfmark end
+ 1688 2924 a Black FK(\)\).)42 b(In)27 b(an)o(y)h(case,)h
+(the)f(returned)h(code)g(is)e(equi)n(v)n(alent)j(to)e
+Ft(C)f FK(\(see)75 3037 y Ft(IsEquivalent)g FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 684 3038 a
+SDict begin H.S end
+ 684 3038 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+865 2975 a
+SDict begin H.R end
+ 865 2975 a 865 3037 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end
+ 865 3037 a Black FK(\)\).)p
+75 3156 1648 4 v 1764 3161 a FF(Example)p 2102 3156 V
+75 3181 4 25 v 3747 3181 V 75 3280 4 100 v 188 3250 a(gap>)44
+b(C1)f(:=)g(PuncturedCode\()k(ReedMullerCode\()g(1,)c(4)g(\))g(\);)p
+3747 3280 V 75 3380 V 188 3350 a(a)g(linear)h([15,5,7]5)h(punctured)h
+(code)p 3747 3380 V 75 3480 V 188 3450 a(gap>)e(C2)f(:=)g(BCHCode\()i
+(15,)e(7,)g(GF\(2\))h(\);)p 3747 3480 V 75 3579 V 188
+3549 a(a)f(cyclic)h([15,5,7]5)h(BCH)f(code,)g(delta=7,)h(b=1)e(over)h
+(GF\(2\))p 3747 3579 V 75 3679 V 188 3649 a(gap>)g(C2)f(=)f(C1;)p
+3747 3679 V 75 3778 V 188 3749 a(false)p 3747 3778 V
+75 3878 V 188 3848 a(gap>)i(p)e(:=)h(CodeIsomorphism\()48
+b(C1,)43 b(C2)h(\);)p 3747 3878 V 75 3978 V 188 3948
+a(\()f(2,)g(4,14,)h(9,13,)g(7,11,10,)h(6,)e(8,12,)h(5\))p
+3747 3978 V 75 4077 V 188 4047 a(gap>)g(C3)f(:=)g(PermutedCode\()j(C1,)
+e(p)e(\);)p 3747 4077 V 75 4177 V 188 4147 a(a)h(linear)h([15,5,7]5)h
+(permuted)g(code)p 3747 4177 V 75 4277 V 188 4247 a(gap>)f(C2)f(=)f
+(C3;)p 3747 4277 V 75 4376 V 188 4346 a(true)p 3747 4376
+V 75 4401 4 25 v 3747 4401 V 75 4404 3675 4 v 75 4537
+a
+SDict begin H.S end
+ 75 4537 a 75 4537 a
+SDict begin 13.6 H.A end
+ 75 4537 a 75 4537 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.5) cvn H.B /DEST pdfmark end
+ 75 4537 a 117
+x FJ(6.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Expur)o(gatedCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4828 a Fs(\006)22 b
+Ft(ExpurgatedCode\()52 b(C,)47 b(L)g(\))2306 b Fr(\(function\))p
+Black 216 5054 a Ft(ExpurgatedCode)25 b FK(e)o(xpur)n(gates)e(the)d
+(code)i Ft(C)p FK(\277)e(by)g(thro)n(wing)i(a)o(w)o(ay)e(code)n(w)o
+(ords)i(in)e(list)h Ft(L)q FK(.)26 b Ft(C)20 b FK(must)h(be)f(a)g
+(linear)75 5167 y(code.)39 b Ft(L)27 b FK(must)g(be)f(a)h(list)g(of)g
+(code)n(w)o(ord)h(input.)39 b(The)27 b(generator)i(matrix)e(of)g(the)g
+(ne)n(w)f(code)i(no)f(longer)h(is)f(a)f(basis)75 5280
+y(for)g(the)h(code)n(w)o(ords)h(speci\002ed)f(by)g Ft(L)p
+FK(.)36 b(Since)26 b(the)h(returned)h(code)f(is)f(still)h(linear)l(,)h
+(it)e(is)g(v)o(ery)h(lik)o(ely)g(that,)g(besides)75 5392
+y(the)d(w)o(ords)g(of)f Ft(L)q FK(,)f(more)i(code)n(w)o(ords)h(of)e
+Ft(C)h FK(are)f(no)h(longer)h(in)e(the)h(ne)n(w)f(code.)p
+Black Black eop end end
+%%Page: 102 102
+TeXDict begin HPSdict begin 102 101 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.102) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(102)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4)d(\);;)g
+(WeightDistribution\()49 b(C1)43 b(\);)p 3747 523 V 75
+623 V 188 593 a([)g(1,)g(0,)g(0,)g(35,)g(105,)h(168,)f(280,)h(435,)g
+(435,)g(280,)f(168,)h(105,)g(35,)f(0,)g(0,)g(1)g(])p
+3747 623 V 75 722 V 188 692 a(gap>)h(L)e(:=)h(Filtered\()j
+(AsSSortedList\(C1\),)i(i)43 b(->)g(WeightCodeword\(i\))48
+b(=)43 b(3)f(\);;)p 3747 722 V 75 822 V 188 792 a(gap>)i(C2)f(:=)g
+(ExpurgatedCode\()k(C1,)c(L)g(\);)p 3747 822 V 75 922
+V 188 892 a(a)g(linear)h([15,4,3..4]5..11)k(code,)c(expurgated)i(with)d
+(7)g(word\(s\))p 3747 922 V 75 1021 V 188 991 a(gap>)h
+(WeightDistribution\()k(C2)43 b(\);)p 3747 1021 V 75
+1121 V 188 1091 a([)g(1,)g(0,)g(0,)g(0,)g(14,)g(0,)g(0,)g(0,)g(1,)g(0,)
+g(0,)g(0,)g(0,)g(0,)g(0,)g(0)g(])p 3747 1121 V 75 1146
+4 25 v 3747 1146 V 75 1149 3675 4 v 75 1362 a FK(This)29
+b(function)j(does)e(not)g(w)o(ork)f(on)h(non-linear)i(codes.)48
+b(F)o(or)28 b(remo)o(ving)j(w)o(ords)f(from)f(a)g(non-linear)j(code,)g
+(use)75 1474 y Ft(RemovedElementsCod)q(e)27 b FK(\(see)c
+Ft(RemovedElementsCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2077 1475 a
+SDict begin H.S end
+ 2077 1475 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2258 1412 a
+SDict begin H.R end
+ 2258 1412 a 2258 1474 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end
+ 2258 1474 a Black
+FK(\)\).)h(F)o(or)21 b(e)o(xpur)n(gating)k(a)d(code)h(of)f(all)g(w)o
+(ords)g(of)75 1587 y(odd)i(weight,)g(use)g(`Ev)o(enW)-7
+b(eightSubcode')27 b(\(see)d Ft(EvenWeightSubcode)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2523 1588
+a
+SDict begin H.S end
+ 2523 1588 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2704 1525 a
+SDict begin H.R end
+ 2704 1525
+a 2704 1587 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end
+ 2704 1587 a Black FK(\)\).)75 1740 y
+SDict begin H.S end
+ 75
+1740 a 75 1740 a
+SDict begin 13.6 H.A end
+ 75 1740 a 75 1740 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.6) cvn H.B /DEST pdfmark end
+ 75 1740 a 97 x FJ(6.1.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(ugmentedCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 2011 a Fs(\006)22 b Ft(AugmentedCode\()52
+b(C,)47 b(L)g(\))2352 b Fr(\(function\))p Black 216 2237
+a Ft(AugmentedCode)26 b FK(returns)e Ft(C)e FK(after)h(augmenting.)31
+b Ft(C)22 b FK(must)g(be)g(a)g(linear)i(code,)f Ft(L)e
+FK(must)i(be)f(a)g(list)h(of)f(code)n(w)o(ord)75 2350
+y(inputs.)30 b(The)21 b(generator)k(matrix)d(of)g(the)g(ne)n(w)g(code)h
+(is)e(a)h(basis)h(for)f(the)g(code)n(w)o(ords)i(speci\002ed)g(by)e
+Ft(L)f FK(as)h(well)g(as)g(the)75 2462 y(w)o(ords)i(that)h(were)e
+(already)j(in)e(code)g Ft(C)q FK(.)29 b(Note)24 b(that)g(the)g(ne)n(w)f
+(code)i(in)f(general)h(will)f(consist)h(of)f(more)g(w)o(ords)g(than)75
+2575 y(only)g(the)g(code)n(w)o(ords)i(of)d Ft(C)g FK(and)h(the)g(w)o
+(ords)g Ft(L)p FK(.)k(The)23 b(returned)j(code)e(is)g(also)g(a)f
+(linear)i(code.)216 2688 y(This)d(command)h(can)g(also)g(be)f(called)h
+(with)f(the)h(syntax)h Ft(AugmentedCode\(C\))p FK(.)j(When)22
+b(called)i(without)f(a)f(list)75 2801 y(of)29 b(code)n(w)o(ords,)j
+Ft(AugmentedCode)h FK(returns)e Ft(C)d FK(after)i(adding)h(the)e
+(all-ones)j(v)o(ector)e(to)f(the)g(generator)j(matrix.)46
+b Ft(C)75 2914 y FK(must)20 b(be)g(a)f(linear)j(code.)28
+b(If)20 b(the)g(all-ones)i(v)o(ector)f(w)o(as)e(already)j(in)e(the)g
+(code,)h(nothing)h(happens)g(and)f(a)e(cop)o(y)i(of)f(the)75
+3027 y(ar)n(gument)j(is)f(returned.)30 b(If)21 b Ft(C)g
+FK(is)g(a)g(binary)i(code)f(which)g(does)h(not)e(contain)j(the)d
+(all-ones)j(v)o(ector)l(,)f(the)f(complement)75 3140
+y(of)h(all)h(code)n(w)o(ords)h(is)f(added.)p 75 3244
+1648 4 v 1764 3249 a FF(Example)p 2102 3244 V 75 3269
+4 25 v 3747 3269 V 75 3369 4 100 v 188 3339 a(gap>)44
+b(C31)f(:=)g(ReedMullerCode\()k(1,)c(3)g(\);)p 3747 3369
+V 75 3468 V 188 3438 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e
+(code)g(over)g(GF\(2\))p 3747 3468 V 75 3568 V 188 3538
+a(gap>)g(C32)f(:=)g(AugmentedCode\(C31,[")q(00)q(000)q(011)q(",")q(000)
+q(001)q(01")q(,"0)q(001)q(000)q(1"])q(\);)p 3747 3568
+V 75 3668 V 188 3638 a(a)g(linear)h([8,7,1..2]1)i(code,)e(augmented)i
+(with)d(3)g(word\(s\))p 3747 3668 V 75 3767 V 188 3737
+a(gap>)h(C32)f(=)g(ReedMullerCode\()k(2,)c(3)g(\);)p
+3747 3767 V 75 3867 V 188 3837 a(true)p 3747 3867 V 75
+3966 V 188 3937 a(gap>)h(C1)f(:=)g(CordaroWagnerCode\(6\);)p
+3747 3966 V 75 4066 V 188 4036 a(a)g(linear)h([6,2,4]2..3)i
+(Cordaro-Wagner)h(code)d(over)g(GF\(2\))p 3747 4066 V
+75 4166 V 188 4136 a(gap>)g(Codeword\()h([0,0,1,1,1,1])i(\))42
+b(in)i(C1;)p 3747 4166 V 75 4265 V 188 4235 a(true)p
+3747 4265 V 75 4365 V 188 4335 a(gap>)g(C2)f(:=)g(AugmentedCode\()k(C1)
+c(\);)p 3747 4365 V 75 4465 V 188 4435 a(a)g(linear)h([6,3,1..2]2..3)j
+(code,)d(augmented)i(with)d(1)g(word\(s\))p 3747 4465
+V 75 4564 V 188 4534 a(gap>)h(Codeword\()h([1,1,0,0,0,0])i(\))42
+b(in)i(C2;)p 3747 4564 V 75 4664 V 188 4634 a(true)p
+3747 4664 V 75 4689 4 25 v 3747 4689 V 75 4692 3675 4
+v 75 4905 a FK(The)34 b(function)i Ft(AddedElementsCode)k
+FK(adds)35 b(elements)h(to)e(the)h(code)n(w)o(ords)h(instead)g(of)e
+(adding)i(them)f(to)f(the)75 5018 y(basis)25 b(\(see)f
+Ft(AddedElementsCode)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1290 5019 a
+SDict begin H.S end
+ 1290 5019 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1471 4956 a
+SDict begin H.R end
+ 1471 4956 a 1471 5018 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end
+ 1471 5018 a Black
+FK(\)\).)75 5167 y
+SDict begin H.S end
+ 75 5167 a 75 5167 a
+SDict begin 13.6 H.A end
+ 75 5167 a 75 5167
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.7) cvn H.B /DEST pdfmark end
+ 75 5167 a 100 x FJ(6.1.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Remo)o(v)o(edElementsCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5441 a Fs(\006)22 b Ft(RemovedElementsCo)q(de\()53
+b(C,)47 b(L)g(\))2074 b Fr(\(function\))p Black Black
+Black eop end end
+%%Page: 103 103
+TeXDict begin HPSdict begin 103 102 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.103) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(103)p Black 216 399 a Ft(RemovedElementsCod)q(e)30
+b FK(returns)d(code)f Ft(C)f FK(after)h(remo)o(ving)g(a)f(list)h(of)f
+(code)n(w)o(ords)i Ft(L)d FK(from)h(its)h(elements.)35
+b Ft(L)75 511 y FK(must)24 b(be)f(a)g(list)h(of)g(code)n(w)o(ord)h
+(input.)k(The)23 b(result)i(is)f(an)f(unrestricted)k(code.)p
+75 633 1648 4 v 1764 638 a FF(Example)p 2102 633 V 75
+658 4 25 v 3747 658 V 75 758 4 100 v 188 728 a(gap>)44
+b(C1)f(:=)g(HammingCode\()j(4)d(\);;)g(WeightDistribution\()49
+b(C1)43 b(\);)p 3747 758 V 75 858 V 188 828 a([)g(1,)g(0,)g(0,)g(35,)g
+(105,)h(168,)f(280,)h(435,)g(435,)g(280,)f(168,)h(105,)g(35,)f(0,)g(0,)
+g(1)g(])p 3747 858 V 75 957 V 188 927 a(gap>)h(L)e(:=)h(Filtered\()j
+(AsSSortedList\(C1\),)i(i)43 b(->)g(WeightCodeword\(i\))48
+b(=)43 b(3)f(\);;)p 3747 957 V 75 1057 V 188 1027 a(gap>)i(C2)f(:=)g
+(RemovedElementsCode\()49 b(C1,)43 b(L)g(\);)p 3747 1057
+V 75 1156 V 188 1127 a(a)g(\(15,2013,3..15\)2..15)49
+b(code)43 b(with)h(35)f(word\(s\))i(removed)p 3747 1156
+V 75 1256 V 188 1226 a(gap>)f(WeightDistribution\()k(C2)43
+b(\);)p 3747 1256 V 75 1356 V 188 1326 a([)g(1,)g(0,)g(0,)g(0,)g(105,)g
+(168,)h(280,)g(435,)g(435,)f(280,)h(168,)g(105,)f(35,)h(0,)f(0,)g(1)f
+(])p 3747 1356 V 75 1455 V 188 1425 a(gap>)i(MinimumDistance\()j(C2)c
+(\);)p 3747 1455 V 75 1555 V 188 1525 a(3)339 b(#)43
+b(C2)g(is)g(not)g(linear,)i(so)e(the)g(minimum)i(weight)f(does)g(not)f
+(have)h(to)p 3747 1555 V 75 1655 V 569 1625 a(#)f(be)g(equal)h(to)f
+(the)g(minimum)i(distance)p 3747 1655 V 75 1679 4 25
+v 3747 1679 V 75 1682 3675 4 v 75 1895 a FK(Adding)29
+b(elements)h(to)e(a)g(code)i(is)e(done)h(by)g(the)f(function)j
+Ft(AddedElementsCode)j FK(\(see)29 b Ft(AddedElementsCode)75
+2008 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2009
+a
+SDict begin H.S end
+ 105 2009 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 1946 a
+SDict begin H.R end
+ 286 1946
+a 286 2008 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end
+ 286 2008 a Black FK(\)\).)116 b(T)-7 b(o)52
+b(remo)o(v)o(e)g(code)n(w)o(ords)j(from)d(the)h(base)g(of)f(a)g(linear)
+i(code,)60 b(use)53 b Ft(ExpurgatedCode)k FK(\(see)75
+2120 y Ft(ExpurgatedCode)28 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 777 2121 a
+SDict begin H.S end
+ 777 2121 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+958 2058 a
+SDict begin H.R end
+ 958 2058 a 958 2120 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.5) cvn H.B /ANN pdfmark end
+ 958 2120 a Black FK(\)\).)75
+2269 y
+SDict begin H.S end
+ 75 2269 a 75 2269 a
+SDict begin 13.6 H.A end
+ 75 2269 a 75 2269 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.8) cvn H.B /DEST pdfmark end
+ 75 2269
+a 101 x FJ(6.1.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(AddedElementsCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2544 a Fs(\006)22 b
+Ft(AddedElementsCode)q(\()52 b(C,)47 b(L)g(\))2167 b
+Fr(\(function\))p Black 216 2770 a Ft(AddedElementsCode)30
+b FK(returns)c(code)f Ft(C)f FK(after)h(adding)i(a)d(list)g(of)h(code)n
+(w)o(ords)h Ft(L)e FK(to)g(its)h(elements.)33 b Ft(L)24
+b FK(must)g(be)75 2883 y(a)f(list)h(of)f(code)n(w)o(ord)i(input.)30
+b(The)23 b(result)i(is)e(an)h(unrestricted)j(code.)p
+75 3004 1648 4 v 1764 3009 a FF(Example)p 2102 3004 V
+75 3029 4 25 v 3747 3029 V 75 3129 4 100 v 188 3099 a(gap>)44
+b(C1)f(:=)g(NullCode\()i(6,)e(GF\(2\))h(\);)p 3747 3129
+V 75 3229 V 188 3199 a(a)f(cyclic)h([6,0,6]6)h(nullcode)g(over)f
+(GF\(2\))p 3747 3229 V 75 3328 V 188 3298 a(gap>)g(C2)f(:=)g
+(AddedElementsCode\()48 b(C1,)c([)e("111111")j(])e(\);)p
+3747 3328 V 75 3428 V 188 3398 a(a)g(\(6,2,1..6\)3)j(code)d(with)h(1)f
+(word\(s\))i(added)p 3747 3428 V 75 3528 V 188 3498 a(gap>)f
+(IsCyclicCode\()i(C2)d(\);)p 3747 3528 V 75 3627 V 188
+3597 a(true)p 3747 3627 V 75 3727 V 188 3697 a(gap>)h(C3)f(:=)g
+(AddedElementsCode\()48 b(C2,)c([)e("101010",)k("010101")f(])d(\);)p
+3747 3727 V 75 3826 V 188 3797 a(a)h(\(6,4,1..6\)2)j(code)d(with)h(2)f
+(word\(s\))i(added)p 3747 3826 V 75 3926 V 188 3896 a(gap>)f
+(IsCyclicCode\()i(C3)d(\);)p 3747 3926 V 75 4026 V 188
+3996 a(true)p 3747 4026 V 75 4051 4 25 v 3747 4051 V
+75 4054 3675 4 v 75 4266 a FK(T)-7 b(o)25 b(remo)o(v)o(e)h(elements)h
+(from)f(a)g(code,)h(use)f Ft(RemovedElementsCod)q(e)31
+b FK(\(see)c Ft(RemovedElementsCode)32 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3485 4267 a
+SDict begin H.S end
+ 3485 4267 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3666 4204 a
+SDict begin H.R end
+ 3666 4204 a 3666 4266 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end
+ 3666 4266 a Black
+FK(\)\).)75 4379 y(T)-7 b(o)22 b(add)i(elements)h(to)f(the)g(base)g(of)
+f(a)g(linear)i(code,)f(use)g Ft(AugmentedCode)k FK(\(see)c
+Ft(AugmentedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3305 4380 a
+SDict begin H.S end
+ 3305 4380 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 3486
+4317 a
+SDict begin H.R end
+ 3486 4317 a 3486 4379 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end
+ 3486 4379 a Black FK(\)\).)75
+4528 y
+SDict begin H.S end
+ 75 4528 a 75 4528 a
+SDict begin 13.6 H.A end
+ 75 4528 a 75 4528 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.9) cvn H.B /DEST pdfmark end
+ 75 4528
+a 100 x FJ(6.1.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ShortenedCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4802 a Fs(\006)22 b
+Ft(ShortenedCode\()52 b(C[,)47 b(L])g(\))2260 b Fr(\(function\))p
+Black 216 5028 a Ft(ShortenedCode\()52 b(C)46 b(\))21
+b FK(returns)h(the)g(code)f Ft(C)g FK(shortened)j(by)d(taking)h(a)e
+(cross)i(section.)30 b(If)21 b Ft(C)f FK(is)h(a)f(linear)j(code,)75
+5141 y(this)g(is)f(done)i(by)e(remo)o(ving)i(all)f(code)n(w)o(ords)h
+(that)f(start)g(with)g(a)f(non-zero)i(entry)-6 b(,)24
+b(after)f(which)g(the)g(\002rst)f(column)h(is)75 5254
+y(cut)j(of)n(f.)35 b(If)26 b Ft(C)f FK(w)o(as)g(a)h Fo([)p
+Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])26 b FK(code,)h(the)f
+(shortened)i(code)f(generally)h(is)d(a)h Fo([)p Fq(n)13
+b Fv(\000)g FK(1)p Fp(;)d Fq(k)15 b Fv(\000)e FK(1)p
+Fp(;)d Fq(d)5 b Fo(])28 b FK(code.)36 b(It)25 b(is)h(possible)75
+5367 y(that)e(the)g(dimension)h(remains)g(the)f(same;)g(it)f(is)g(also)
+h(possible)i(that)e(the)g(minimum)f(distance)j(increases.)216
+5479 y(If)21 b Ft(C)g FK(is)g(a)g(non-linear)j(code,)e
+Ft(ShortenedCode)j FK(\002rst)c(checks)i(which)f(\002nite)f(\002eld)g
+(element)h(occurs)h(most)e(often)75 5592 y(in)j(the)g(\002rst)f(column)
+i(of)f(the)g(code)n(w)o(ords.)31 b(The)24 b(code)n(w)o(ords)h(not)f
+(starting)i(with)e(this)g(element)h(are)f(remo)o(v)o(ed)g(from)p
+Black Black eop end end
+%%Page: 104 104
+TeXDict begin HPSdict begin 104 103 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.104) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(104)p Black 75 399 a(the)29 b(code,)i(after)e(which)h
+(the)f(\002rst)f(column)i(is)e(cut)i(of)n(f.)44 b(The)28
+b(resulting)k(shortened)f(code)f(has)f(at)f(least)i(the)f(same)75
+511 y(minimum)23 b(distance)j(as)d Ft(C)q FK(.)216 624
+y(This)31 b(command)i(can)f(also)g(be)f(called)i(using)g(the)f(syntax)h
+Ft(ShortenedCode\(C,L\))p FK(.)k(When)31 b(called)i(in)f(this)75
+737 y(format,)37 b Ft(ShortenedCode)i FK(repeats)d(the)e(shortening)k
+(process)e(on)f(each)g(of)f(the)h(columns)g(speci\002ed)h(by)f
+Ft(L)p FK(.)61 b Ft(L)75 850 y FK(therefore)39 b(is)e(a)g(list)g(of)g
+(inte)o(gers.)71 b(The)37 b(column)h(numbers)g(in)f Ft(L)g
+FK(are)g(the)g(numbers)i(as)e(the)o(y)g(are)g(before)i(the)75
+963 y(shortening)29 b(process.)39 b(If)26 b Ft(L)g FK(has)g
+Fq(l)31 b FK(entries,)d(the)e(returned)j(code)e(has)f(a)g(w)o(ord)h
+(length)g(of)f Fq(l)31 b FK(positions)e(shorter)e(than)75
+1076 y Ft(C)p FK(.)p 75 1181 1648 4 v 1764 1186 a FF(Example)p
+2102 1181 V 75 1206 4 25 v 3747 1206 V 75 1305 4 100
+v 188 1275 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4)d(\);)p
+3747 1305 V 75 1405 V 188 1375 a(a)g(linear)h([15,11,3]1)i(Hamming)e
+(\(4,2\))h(code)e(over)h(GF\(2\))p 3747 1405 V 75 1504
+V 188 1475 a(gap>)g(C2)f(:=)g(ShortenedCode\()k(C1)c(\);)p
+3747 1504 V 75 1604 V 188 1574 a(a)g(linear)h([14,10,3]2)i(shortened)f
+(code)p 3747 1604 V 75 1704 V 188 1674 a(gap>)f(C3)f(:=)g
+(ElementsCode\()j(["1000",)g("1101",)e("0011")h(],)e(GF\(2\))h(\);)p
+3747 1704 V 75 1803 V 188 1773 a(a)f(\(4,3,1..4\)2)j(user)d(defined)i
+(unrestricted)i(code)c(over)h(GF\(2\))p 3747 1803 V 75
+1903 V 188 1873 a(gap>)g(MinimumDistance\()j(C3)c(\);)p
+3747 1903 V 75 2003 V 188 1973 a(2)p 3747 2003 V 75 2102
+V 188 2072 a(gap>)h(C4)f(:=)g(ShortenedCode\()k(C3)c(\);)p
+3747 2102 V 75 2202 V 188 2172 a(a)g(\(3,2,2..3\)1..2)k(shortened)e
+(code)p 3747 2202 V 75 2301 V 188 2272 a(gap>)f(AsSSortedList\()j(C4)c
+(\);)p 3747 2301 V 75 2401 V 188 2371 a([)g([)f(0)h(0)g(0)f(],)h([)g(1)
+g(0)f(1)h(])g(])p 3747 2401 V 75 2501 V 188 2471 a(gap>)h(C5)f(:=)g
+(HammingCode\()j(5,)d(GF\(2\))h(\);)p 3747 2501 V 75
+2600 V 188 2570 a(a)f(linear)h([31,26,3]1)i(Hamming)e(\(5,2\))h(code)e
+(over)h(GF\(2\))p 3747 2600 V 75 2700 V 188 2670 a(gap>)g(C6)f(:=)g
+(ShortenedCode\()k(C5,)c([)g(1,)g(2,)g(3)g(])f(\);)p
+3747 2700 V 75 2800 V 188 2770 a(a)h(linear)h([28,23,3]2)i(shortened)f
+(code)p 3747 2800 V 75 2899 V 188 2869 a(gap>)f(OptimalityLinearCode\()
+49 b(C6)43 b(\);)p 3747 2899 V 75 2999 V 188 2969 a(0)p
+3747 2999 V 75 3024 4 25 v 3747 3024 V 75 3027 3675 4
+v 75 3240 a FK(The)19 b(function)j Ft(LengthenedCode)h
+FK(lengthens)f(the)e(code)g(again)g(\(only)h(for)e(linear)i(codes\),)g
+(see)f Ft(LengthenedCode)75 3353 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 3354 a
+SDict begin H.S end
+ 105 3354 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(6.1.10)p 0.0236 0.0894 0.6179 TeXcolorrgb
+331 3291 a
+SDict begin H.R end
+ 331 3291 a 331 3353 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.10) cvn H.B /ANN pdfmark end
+ 331 3353 a Black FK(\).)30
+b(In)23 b(general,)i(this)f(is)g(not)g(e)o(xactly)g(the)g(in)l(v)o
+(erse)i(function.)75 3505 y
+SDict begin H.S end
+ 75 3505 a 75 3505 a
+SDict begin 13.6 H.A end
+ 75 3505
+a 75 3505 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.10) cvn H.B /DEST pdfmark end
+ 75 3505 a 97 x FJ(6.1.10)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(LengthenedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+3776 a Fs(\006)c Ft(LengthenedCode\()52 b(C[,)c(i])f(\))2213
+b Fr(\(function\))p Black 216 4002 a Ft(LengthenedCode\()52
+b(C)47 b(\))21 b FK(returns)j(the)e(code)h Ft(C)f FK(lengthened.)31
+b Ft(C)22 b FK(must)g(be)g(a)g(linear)h(code.)29 b(First,)22
+b(the)g(all-ones)75 4115 y(v)o(ector)d(is)f(added)i(to)e(the)h
+(generator)i(matrix)d(\(see)h Ft(AugmentedCode)j FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2277 4116 a
+SDict begin H.S end
+ 2277 4116
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.6)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2458 4053 a
+SDict begin H.R end
+ 2458 4053 a 2458 4115 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end
+ 2458
+4115 a Black FK(\)\).)28 b(If)18 b(the)h(all-ones)h(v)o(ector)g(w)o(as)
+d(already)75 4228 y(a)31 b(code)n(w)o(ord,)j(nothing)f(happens)g(to)e
+(the)h(code.)52 b(Then,)33 b(the)e(code)h(is)f(e)o(xtended)i
+Ft(i)e FK(times)g(\(see)h Ft(ExtendedCode)75 4341 y FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 105 4342 a
+SDict begin H.S end
+ 105 4342
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179
+TeXcolorrgb 286 4279 a
+SDict begin H.R end
+ 286 4279 a 286 4341 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end
+ 286 4341
+a Black FK(\)\).)44 b Ft(i)28 b FK(is)g(equal)h(to)f(1)g(by)g(def)o
+(ault.)45 b(If)28 b Ft(C)g FK(w)o(as)g(an)g Fo([)p Fq(n)p
+Fp(;)10 b Fq(k)r Fo(])29 b FK(code,)h(the)e(ne)n(w)g(code)h(generally)i
+(is)d(a)f Fo([)p Fq(n)14 b Fo(+)g Fq(i)p Fp(;)c Fq(k)18
+b Fo(+)c FK(1)p Fo(])75 4453 y FK(code.)p 75 4557 1648
+4 v 1764 4562 a FF(Example)p 2102 4557 V 75 4582 4 25
+v 3747 4582 V 75 4682 4 100 v 188 4652 a(gap>)44 b(C1)f(:=)g
+(CordaroWagnerCode\()48 b(5)43 b(\);)p 3747 4682 V 75
+4782 V 188 4752 a(a)g(linear)h([5,2,3]2)h(Cordaro-Wagner)i(code)d(over)
+g(GF\(2\))p 3747 4782 V 75 4881 V 188 4851 a(gap>)g(C2)f(:=)g
+(LengthenedCode\()k(C1)c(\);)p 3747 4881 V 75 4981 V
+188 4951 a(a)g(linear)h([6,3,2]2..3)i(code,)e(lengthened)i(with)e(1)e
+(column\(s\))p 3747 4981 V 75 5006 4 25 v 3747 5006 V
+75 5009 3675 4 v 75 5222 a Ft(ShortenedCode)p FK(')34
+b(shortens)f(the)d(code,)i(see)f Ft(ShortenedCode)j FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 2243 5224 a
+SDict begin H.S end
+ 2243 5224
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2424 5160 a
+SDict begin H.R end
+ 2424 5160 a 2424 5222 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end
+ 2424
+5222 a Black FK(\).)49 b(In)30 b(general,)j(this)e(is)f(not)g(e)o
+(xactly)i(the)75 5335 y(in)l(v)o(erse)25 b(function.)p
+Black Black eop end end
+%%Page: 105 105
+TeXDict begin HPSdict begin 105 104 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.105) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(105)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.11) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(6.1.11)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(ResidueCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(ResidueCode\()51 b(C[,)d(c])f(\))2352
+b Fr(\(function\))p Black 216 799 a FK(The)19 b(function)i
+Ft(ResidueCode)i FK(tak)o(es)d(a)f(code)n(w)o(ord)i Ft(c)d
+FK(of)i Ft(C)e FK(\(if)i Ft(c)e FK(is)i(omitted,)g(a)f(code)n(w)o(ord)i
+(of)e(minimal)h(weight)75 912 y(is)e(used\).)29 b(It)18
+b(remo)o(v)o(es)h(this)g(w)o(ord)g(and)g(all)f(its)h(linear)h
+(combinations)h(from)e(the)g(code)g(and)g(then)g(punctures)j(the)c
+(code)75 1024 y(in)h(the)g(coordinates)k(where)c Ft(c)g
+FK(is)g(unequal)i(to)e(zero.)28 b(The)19 b(resulting)i(code)f(is)f(an)g
+Fo([)p Fq(n)9 b Fv(\000)g Fq(w)-7 b Fp(;)10 b Fq(k)g
+Fv(\000)f FK(1)p Fp(;)h Fq(d)j Fv(\000)c(b)p Fq(w)g Fv(\003)g
+Fo(\()p Fq(q)g Fv(\000)g FK(1)p Fo(\))p Fp(=)p Fq(q)p
+Fv(c)p Fo(])75 1137 y FK(code.)30 b Ft(C)23 b FK(must)g(be)h(a)f
+(linear)i(code)f(and)g Ft(c)f FK(must)h(be)f(non-zero.)31
+b(If)23 b Ft(c)g FK(is)h(not)g(in)46 b(then)24 b(no)g(change)h(is)e
+(made)h(to)f Ft(C)q FK(.)p 75 1214 1648 4 v 1764 1219
+a FF(Example)p 2102 1214 V 75 1239 4 25 v 3747 1239 V
+75 1339 4 100 v 188 1309 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(7)g
+(\);)p 3747 1339 V 75 1439 V 188 1409 a(a)g(cyclic)h([15,5,7]5)h(BCH)f
+(code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p 3747 1439
+V 75 1538 V 188 1508 a(gap>)g(C2)f(:=)g(ResidueCode\()j(C1)d(\);)p
+3747 1538 V 75 1638 V 188 1608 a(a)g(linear)h([8,4,4]2)h(residue)g
+(code)p 3747 1638 V 75 1737 V 188 1708 a(gap>)f(c)e(:=)h(Codeword\()j
+([)c(0,0,0,1,0,0,1,1,0,)q(1,0)q(,1,)q(1,1)q(,1)49 b(],)43
+b(C1\);;)p 3747 1737 V 75 1837 V 188 1807 a(gap>)h(C3)f(:=)g
+(ResidueCode\()j(C1,)d(c)g(\);)p 3747 1837 V 75 1937
+V 188 1907 a(a)g(linear)h([7,4,3]1)h(residue)g(code)p
+3747 1937 V 75 1962 4 25 v 3747 1962 V 75 1965 3675 4
+v 75 2090 a
+SDict begin H.S end
+ 75 2090 a 75 2090 a
+SDict begin 13.6 H.A end
+ 75 2090 a 75 2090 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.12) cvn H.B /DEST pdfmark end
+ 75
+2090 a 117 x FJ(6.1.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w
+(ConstructionBCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+2381 a Fs(\006)22 b Ft(ConstructionBCode)q(\()52 b(C)47
+b(\))2306 b Fr(\(function\))p Black 216 2607 a FK(The)26
+b(function)i Ft(ConstructionBCode)j FK(tak)o(es)c(a)f(binary)h(linear)g
+(code)g Ft(C)f FK(and)g(calculates)j(the)d(minimum)g(dis-)75
+2720 y(tance)c(of)f(the)h(dual)g(of)f Ft(C)g FK(\(see)h
+Ft(DualCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1443 2721 a
+SDict begin H.S end
+ 1443 2721 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 1669
+2658 a
+SDict begin H.R end
+ 1669 2658 a 1669 2720 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end
+ 1669 2720 a Black FK(\)\).)29
+b(It)21 b(then)h(remo)o(v)o(es)g(the)f(columns)i(of)e(the)h(parity)g
+(check)h(matrix)75 2832 y(of)j Ft(C)g FK(where)h(a)f(code)n(w)o(ord)i
+(of)f(the)f(dual)i(code)f(of)f(minimal)h(weight)g(has)g(coordinates)j
+(unequal)e(to)f(zero.)38 b(The)26 b(re-)75 2945 y(sulting)e(matrix)f
+(is)e(a)h(parity)h(check)h(matrix)e(for)h(an)f Fo([)p
+Fq(n)11 b Fv(\000)g Fq(d)5 b(d)g Fp(;)10 b Fq(k)j Fv(\000)e
+Fq(d)5 b(d)18 b Fo(+)11 b FK(1)p Fp(;)f Fv(\025)19 b
+Fq(d)5 b Fo(])22 b FK(code,)h(where)f Fq(d)5 b(d)27 b
+FK(is)22 b(the)g(minimum)75 3058 y(distance)k(of)d(the)h(dual)g(of)g
+Ft(C)p FK(.)p 75 3117 1648 4 v 1764 3122 a FF(Example)p
+2102 3117 V 75 3142 4 25 v 3747 3142 V 75 3242 4 100
+v 188 3212 a(gap>)44 b(C1)f(:=)g(ReedMullerCode\()k(2,)c(5)g(\);)p
+3747 3242 V 75 3342 V 188 3312 a(a)g(linear)h([32,16,8]6)i(Reed-Muller)
+g(\(2,5\))e(code)g(over)f(GF\(2\))p 3747 3342 V 75 3441
+V 188 3411 a(gap>)h(C2)f(:=)g(ConstructionBCode\()48
+b(C1)43 b(\);)p 3747 3441 V 75 3541 V 188 3511 a(a)g(linear)h
+([24,9,8]5..10)j(Construction)f(B)d(\(8)g(coordinates\))p
+3747 3541 V 75 3640 V 188 3611 a(gap>)h(BoundsMinimumDistance)q(\()k
+(24,)c(9,)f(GF\(2\))h(\);)p 3747 3640 V 75 3740 V 188
+3710 a(rec\()g(n)e(:=)h(24,)h(k)e(:=)h(9,)g(q)g(:=)g(2,)g(references)j
+(:=)d(rec\()86 b(\),)p 3747 3740 V 75 3840 V 273 3810
+a(construction)46 b(:=)d([)g([)f(Operation)k("UUVCode")f(],)p
+3747 3840 V 75 3939 V 442 3909 a([)e([)f([)h(Operation)i("UUVCode")h
+(],)d([)g([)f([)h(Operation)i("DualCode")h(],)p 3747
+3939 V 75 4039 V 1119 4009 a([)d([)g([)f(Operation)k("RepetitionCode")i
+(],)43 b([)f(6,)h(2)g(])g(])f(])h(],)p 3747 4039 V 75
+4139 V 950 4109 a([)g([)f(Operation)k("CordaroWagnerCode")j(],)43
+b([)f(6)h(])g(])f(])h(],)p 3747 4139 V 75 4238 V 611
+4208 a([)g([)g(Operation)i("CordaroWagnerCode")k(],)43
+b([)g(12)g(])f(])h(])g(],)g(lowerBound)i(:=)e(8,)p 3747
+4238 V 75 4338 V 273 4308 a(lowerBoundExplanation)49
+b(:=)43 b([)g("Lb\(24,9\)=8,)j(u)d(u+v)g(construction)k(of)c(C1)g(and)g
+(C2:",)p 3747 4338 V 75 4437 V 442 4408 a("Lb\(12,7\)=4,)j(u)d(u+v)g
+(construction)k(of)c(C1)g(and)g(C2:",)p 3747 4437 V 75
+4537 V 442 4507 a("Lb\(6,5\)=2,)j(dual)e(of)f(the)g(repetition)j
+(code",)p 3747 4537 V 75 4637 V 442 4607 a("Lb\(6,2\)=4,)g
+(Cordaro-Wagner)h(code",)e("Lb\(12,2\)=8,)h(Cordaro-Wagner)h(code")d
+(],)p 3747 4637 V 75 4736 V 273 4706 a(upperBound)h(:=)e(8,)p
+3747 4736 V 75 4836 V 273 4806 a(upperBoundExplanation)49
+b(:=)43 b([)g("Ub\(24,9\)=8,)j(otherwise)g(construction)g(B)d(would)p
+3747 4836 V 75 4936 V 1416 4906 a(contradict:",)k("Ub\(18,4\)=8,)f
+(Griesmer)f(bound")f(])f(\))p 3747 4936 V 75 5035 V 188
+5005 a(#)g(so)g(C2)g(is)g(optimal)p 3747 5035 V 75 5060
+4 25 v 3747 5060 V 75 5063 3675 4 v 75 5189 a
+SDict begin H.S end
+ 75 5189
+a 75 5189 a
+SDict begin 13.6 H.A end
+ 75 5189 a 75 5189 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.13) cvn H.B /DEST pdfmark end
+ 75 5189 a 116 x FJ(6.1.13)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(DualCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(DualCode\()50 b(C)d(\))2723
+b Fr(\(function\))p Black Black Black eop end end
+%%Page: 106 106
+TeXDict begin HPSdict begin 106 105 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.106) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(106)p Black 216 399 a Ft(DualCode)26 b
+FK(returns)f(the)f(dual)g(code)h(of)e Ft(C)q FK(.)28
+b(The)23 b(dual)h(code)h(consists)g(of)f(all)g(code)n(w)o(ords)h(that)f
+(are)g(orthogonal)75 511 y(to)k(the)g(code)n(w)o(ords)i(of)d
+Ft(C)q FK(.)41 b(If)27 b Ft(C)h FK(is)f(a)h(linear)h(code)f(with)g
+(generator)i(matrix)f Fq(G)p FK(,)e(the)h(dual)h(code)g(has)f(parity)h
+(check)75 624 y(matrix)24 b Fq(G)f FK(\(or)h(if)g Ft(C)f
+FK(has)i(parity)g(check)g(matrix)g Fq(H)7 b FK(,)21 b(the)k(dual)f
+(code)h(has)f(generator)j(matrix)d Fq(H)7 b FK(\).)29
+b(So)23 b(if)g Ft(C)h FK(is)g(a)f(linear)75 737 y Fo([)p
+Fq(n)p Fp(;)10 b Fq(k)r Fo(])22 b FK(code,)g(the)g(dual)g(code)g(of)f
+Ft(C)g FK(is)h(a)e(linear)j Fo([)p Fq(n)p Fp(;)10 b Fq(n)h
+Fv(\000)g Fq(k)r Fo(])21 b FK(code.)29 b(If)21 b Ft(C)g
+FK(is)g(a)g(c)o(yclic)i(code)f(with)f(generator)j(polynomial)75
+850 y Fq(g)p Fo(\()p Fq(x)p Fo(\))p FK(,)g(the)g(dual)g(code)h(has)e
+(the)h(reciprocal)i(polynomial)g(of)e Fq(g)p Fo(\()p
+Fq(x)p Fo(\))g FK(as)g(check)g(polynomial.)216 963 y(The)f(dual)h(code)
+h(is)e(al)o(w)o(ays)i(a)e(linear)h(code,)g(e)n(v)o(en)g(if)f
+Ft(C)h FK(is)f(non-linear)-5 b(.)216 1076 y(If)23 b(a)g(code)i
+Ft(C)e FK(is)g(equal)i(to)e(its)h(dual)g(code,)g(it)g(is)f(called)i
+Fq(self-dual)p FK(.)p 75 1199 1648 4 v 1764 1204 a FF(Example)p
+2102 1199 V 75 1224 4 25 v 3747 1224 V 75 1323 4 100
+v 188 1293 a(gap>)44 b(R)e(:=)h(ReedMullerCode\()48 b(1,)43
+b(3)f(\);)p 3747 1323 V 75 1423 V 188 1393 a(a)h(linear)h([8,4,4]2)h
+(Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p 3747
+1423 V 75 1522 V 188 1492 a(gap>)g(RD)f(:=)g(DualCode\()i(R)e(\);)p
+3747 1522 V 75 1622 V 188 1592 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h
+(\(1,3\))e(code)g(over)g(GF\(2\))p 3747 1622 V 75 1722
+V 188 1692 a(gap>)g(R)e(=)h(RD;)p 3747 1722 V 75 1821
+V 188 1791 a(true)p 3747 1821 V 75 1921 V 188 1891 a(gap>)h(N)e(:=)h
+(WholeSpaceCode\()48 b(7,)43 b(GF\(4\))h(\);)p 3747 1921
+V 75 2021 V 188 1991 a(a)f(cyclic)h([7,7,1]0)h(whole)f(space)g(code)g
+(over)g(GF\(4\))p 3747 2021 V 75 2120 V 188 2090 a(gap>)g(DualCode\()h
+(N)e(\))f(=)h(NullCode\()i(7,)f(GF\(4\))g(\);)p 3747
+2120 V 75 2220 V 188 2190 a(true)p 3747 2220 V 75 2245
+4 25 v 3747 2245 V 75 2248 3675 4 v 75 2481 a
+SDict begin H.S end
+ 75 2481
+a 75 2481 a
+SDict begin 13.6 H.A end
+ 75 2481 a 75 2481 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.14) cvn H.B /DEST pdfmark end
+ 75 2481 a 116 x FJ(6.1.14)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Con)l(v)o(ersionFieldCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2771 a Fs(\006)22 b
+Ft(ConversionFieldCo)q(de\()53 b(C)47 b(\))2213 b Fr(\(function\))p
+Black 216 2997 a Ft(ConversionFieldCod)q(e)37 b FK(returns)d(the)e
+(code)h(obtained)h(from)e Ft(C)g FK(after)g(con)l(v)o(erting)j(its)d
+(\002eld.)54 b(If)32 b(the)g(\002eld)75 3110 y(of)26
+b Ft(C)f FK(is)g Fq(GF)7 b Fo(\()p Fq(q)541 3077 y Fm(m)594
+3110 y Fo(\))p FK(,)25 b(the)h(returned)i(code)f(has)f(\002eld)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)35 b(Each)26 b(symbol)h(of)e(e)n
+(v)o(ery)h(code)n(w)o(ord)i(is)d(replaced)j(by)e(a)75
+3223 y(concatenation)e(of)d Fq(m)e FK(symbols)i(from)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)28 b(If)20 b Ft(C)g
+FK(is)g(an)g Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)2199
+3237 y Fr(1)2238 3223 y Fo(\))20 b FK(code,)h(the)g(returned)h(code)f
+(is)f(a)g Fo(\()p Fq(n)10 b Fv(\001)g Fq(m)p Fp(;)g Fq(M)t
+Fp(;)g Fq(d)3677 3237 y Fr(2)3715 3223 y Fo(\))75 3336
+y FK(code,)24 b(where)g Fq(d)582 3350 y Fr(2)640 3336
+y Fp(>)c Fq(d)776 3350 y Fr(1)814 3336 y FK(.)216 3449
+y(See)j(also)h Ft(HorizontalConversi)q(on)q(Fie)q(ldM)q(at)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1890 3450
+a
+SDict begin H.S end
+ 1890 3450 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.10)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2116 3387 a
+SDict begin H.R end
+ 2116 3387
+a 2116 3449 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end
+ 2116 3449 a Black FK(\).)p 75 3568 1648
+4 v 1764 3573 a FF(Example)p 2102 3568 V 75 3593 4 25
+v 3747 3593 V 75 3692 4 100 v 188 3662 a(gap>)44 b(R)e(:=)h
+(RepetitionCode\()48 b(4,)43 b(GF\(4\))h(\);)p 3747 3692
+V 75 3792 V 188 3762 a(a)f(cyclic)h([4,1,4]3)h(repetition)h(code)e
+(over)f(GF\(4\))p 3747 3792 V 75 3891 V 188 3862 a(gap>)h(R2)f(:=)g
+(ConversionFieldCode\()49 b(R)43 b(\);)p 3747 3891 V
+75 3991 V 188 3961 a(a)g(linear)h([8,2,4]3..4)i(code,)e(converted)i(to)
+d(basefield)i(GF\(2\))p 3747 3991 V 75 4091 V 188 4061
+a(gap>)f(Size\()g(R)e(\))h(=)g(Size\()h(R2)f(\);)p 3747
+4091 V 75 4190 V 188 4160 a(true)p 3747 4190 V 75 4290
+V 188 4260 a(gap>)h(GeneratorMat\()i(R)d(\);)p 3747 4290
+V 75 4390 V 188 4360 a([)g([)f(Z\(2\)\2100,)j(Z\(2\)\2100,)g
+(Z\(2\)\2100,)f(Z\(2\)\2100)h(])e(])p 3747 4390 V 75
+4489 V 188 4459 a(gap>)h(GeneratorMat\()i(R2)d(\);)p
+3747 4489 V 75 4589 V 188 4559 a([)g([)f(Z\(2\)\2100,)j(0*Z\(2\),)g
+(Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100,)g(0*Z\(2\),)g(Z\(2\)\2100,)f
+(0*Z\(2\))h(],)p 3747 4589 V 75 4688 V 273 4659 a([)d(0*Z\(2\),)j
+(Z\(2\)\2100,)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100,)g
+(0*Z\(2\),)f(Z\(2\)\2100)h(])d(])p 3747 4688 V 75 4713
+4 25 v 3747 4713 V 75 4716 3675 4 v 75 4850 a
+SDict begin H.S end
+ 75 4850
+a 75 4850 a
+SDict begin 13.6 H.A end
+ 75 4850 a 75 4850 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.15) cvn H.B /DEST pdfmark end
+ 75 4850 a 116 x FJ(6.1.15)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(T)-7 b(raceCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5140 a Fs(\006)22 b Ft(TraceCode\()50
+b(C)d(\))2677 b Fr(\(function\))p Black 216 5366 a FK(Input:)30
+b Ft(C)24 b FK(is)f(a)g(linear)i(code)f(de\002ned)g(o)o(v)o(er)g(an)g
+(e)o(xtension)h Fq(E)k FK(of)24 b Ft(F)f FK(\()p Ft(F)g
+FK(is)h(the)f(\223base)i(\002eld\224\))216 5479 y(Output:)30
+b(The)23 b(linear)i(code)f(generated)i(by)e Fq(T)6 b(r)1692
+5496 y Fm(E)f Fl(=)p Fm(F)1821 5479 y Fo(\()p Fq(c)p
+Fo(\))p FK(,)24 b(for)g(all)f Fq(c)e Fv(2)14 b Fq(C)r
+FK(.)p Black Black eop end end
+%%Page: 107 107
+TeXDict begin HPSdict begin 107 106 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.107) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(107)p Black 216 399 a Ft(TraceCode)29 b
+FK(returns)g(the)e(image)g(of)g(the)g(code)g Ft(C)f FK(under)i(the)f
+(trace)h(map.)38 b(If)26 b(the)h(\002eld)g(of)g Ft(C)f
+FK(is)h Fq(GF)6 b Fo(\()p Fq(q)3501 366 y Fm(m)3554 399
+y Fo(\))p FK(,)27 b(the)75 511 y(returned)f(code)e(has)g(\002eld)f
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)216 624 y(V)-10
+b(ery)27 b(slo)n(w)-6 b(.)38 b(It)26 b(does)i(not)f(seem)g(to)g(be)f
+(easy)i(to)e(related)j(the)e(parameters)i(of)d(the)h(trace)h(code)f(to)
+g(the)g(original)75 737 y(e)o(xcept)e(in)e(the)h(\223Galois)g
+(closed\224)i(case.)p 75 850 1648 4 v 1764 855 a FF(Example)p
+2102 850 V 75 874 4 25 v 3747 874 V 75 974 4 100 v 188
+944 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,4)q(,GF)q(\(4)q(\)\);)49
+b(MinimumDistance\(C\);)p 3747 974 V 75 1074 V 188 1044
+a(a)85 b([10,4,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(4\))p
+3747 1074 V 75 1173 V 188 1143 a(5)p 3747 1173 V 75 1273
+V 188 1243 a(gap>)g(trC:=TraceCode\(C,GF\(2)q(\)\);)49
+b(MinimumDistance\(trC)q(\);)p 3747 1273 V 75 1373 V
+188 1343 a(a)43 b(linear)h([10,7,1]1..3)i(user)e(defined)h
+(unrestricted)h(code)e(over)g(GF\(2\))p 3747 1373 V 75
+1472 V 188 1442 a(1)p 3747 1472 V 75 1572 V 3747 1572
+V 75 1597 4 25 v 3747 1597 V 75 1600 3675 4 v 75 1731
+a
+SDict begin H.S end
+ 75 1731 a 75 1731 a
+SDict begin 13.6 H.A end
+ 75 1731 a 75 1731 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.16) cvn H.B /DEST pdfmark end
+ 75 1731 a 117
+x FJ(6.1.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CosetCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2022 a Fs(\006)22 b
+Ft(CosetCode\()50 b(C,)d(w)g(\))2538 b Fr(\(function\))p
+Black 216 2248 a Ft(CosetCode)27 b FK(returns)f(the)f(coset)g(of)g(a)f
+(code)h Ft(C)f FK(with)g(respect)j(to)d(w)o(ord)h Ft(w)p
+FK(.)31 b Ft(w)24 b FK(must)g(be)h(of)f(the)h(code)n(w)o(ord)h(type.)75
+2361 y(Then,)e Ft(w)g FK(is)h(added)h(to)e(each)h(code)n(w)o(ord)h(of)f
+Ft(C)p FK(,)f(yielding)i(the)f(elements)h(of)e(the)h(ne)n(w)f(code.)32
+b(If)24 b Ft(C)g FK(is)h(linear)g(and)g Ft(w)f FK(is)75
+2474 y(an)g(element)g(of)g Ft(C)p FK(,)e(the)i(ne)n(w)f(code)h(is)g
+(equal)g(to)g Ft(C)p FK(,)f(otherwise)i(the)f(ne)n(w)f(code)h(is)f(an)h
+(unrestricted)j(code.)216 2586 y(Generating)f(a)d(coset)h(is)g(also)g
+(possible)i(by)d(simply)i(adding)g(the)f(w)o(ord)f Ft(w)g
+FK(to)h Ft(C)p FK(.)k(See)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2899 2587 a
+SDict begin H.S end
+ 2899 2587 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3012 2524
+a
+SDict begin H.R end
+ 3012 2524 a 3012 2586 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 3012 2586 a Black FK(.)p 75
+2699 1648 4 v 1764 2704 a FF(Example)p 2102 2699 V 75
+2724 4 25 v 3747 2724 V 75 2823 4 100 v 188 2793 a(gap>)44
+b(H)e(:=)h(HammingCode\(3,)k(GF\(2\)\);)p 3747 2823 V
+75 2923 V 188 2893 a(a)c(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g
+(over)f(GF\(2\))p 3747 2923 V 75 3023 V 188 2993 a(gap>)h(c)e(:=)h
+(Codeword\("1011011"\))q(;;)49 b(c)43 b(in)g(H;)p 3747
+3023 V 75 3122 V 188 3092 a(false)p 3747 3122 V 75 3222
+V 188 3192 a(gap>)h(C)e(:=)h(CosetCode\(H,)k(c\);)p 3747
+3222 V 75 3321 V 188 3292 a(a)c(\(7,16,3\)1)i(coset)f(code)p
+3747 3321 V 75 3421 V 188 3391 a(gap>)g(List\(AsSSortedList\(C\))q(,)k
+(el->)c(Syndrome\(H,)i(el\)\);)p 3747 3421 V 75 3521
+V 188 3491 a([)d([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h(],)g([)g(1)f(1)h
+(1)g(],)g([)g(1)f(1)h(1)g(],)g([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h(],)
+p 3747 3521 V 75 3620 V 273 3590 a([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h
+(],)g([)g(1)f(1)h(1)g(],)g([)g(1)f(1)h(1)g(],)g([)f(1)h(1)g(1)f(],)h([)
+g(1)g(1)f(1)h(],)p 3747 3620 V 75 3720 V 273 3690 a([)f(1)h(1)g(1)f(],)
+h([)g(1)g(1)f(1)h(],)g([)g(1)f(1)h(1)g(],)g([)g(1)f(1)h(1)g(])f(])p
+3747 3720 V 75 3820 V 188 3790 a(#)h(All)g(elements)i(of)e(the)g(coset)
+h(have)g(the)g(same)f(syndrome)i(in)e(H)p 3747 3820 V
+75 3844 4 25 v 3747 3844 V 75 3847 3675 4 v 75 3979 a
+SDict begin H.S end
+
+75 3979 a 75 3979 a
+SDict begin 13.6 H.A end
+ 75 3979 a 75 3979 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.17) cvn H.B /DEST pdfmark end
+ 75 3979 a 116
+x FJ(6.1.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ConstantW)-6
+b(eightSubcode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4270
+a Fs(\006)22 b Ft(ConstantWeightSub)q(cod)q(e\()53 b(C,)47
+b(w)g(\))1981 b Fr(\(function\))p Black 216 4495 a Ft
+(ConstantWeightSubc)q(ode)38 b FK(returns)c(the)f(subcode)h(of)f
+Ft(C)f FK(that)h(only)g(has)f(code)n(w)o(ords)j(of)d(weight)h
+Ft(w)p FK(.)55 b(The)75 4608 y(resulting)26 b(code)e(is)g(a)f
+(non-linear)j(code,)e(because)i(it)d(does)h(not)g(contain)i(the)d
+(all-zero)j(v)o(ector)-5 b(.)216 4721 y(This)29 b(command)i(also)f(can)
+f(be)h(called)g(with)g(the)f(syntax)i Ft(ConstantWeightSubc)q(od)q
+(e\(C)q(\))k FK(In)29 b(this)h(format,)75 4834 y Ft(ConstantWeightSubc)
+q(ode)j FK(returns)c(the)e(subcode)i(of)e Ft(C)g FK(consisting)j(of)d
+(all)g(minimum)g(weight)g(code)n(w)o(ords)i(of)75 4947
+y Ft(C)p FK(.)216 5060 y Ft(ConstantWeightSubc)q(ode)35
+b FK(\002rst)29 b(checks)h(if)f(Leon')-5 b(s)30 b(binary)g
+Ft(wtdist)h FK(e)o(xists)f(on)f(your)h(computer)h(\(in)e(the)75
+5173 y(def)o(ault)g(directory\).)43 b(If)28 b(it)f(does,)i(then)f(this)
+g(program)h(is)e(called.)42 b(Otherwise,)29 b(the)f(constant)i(weight)e
+(subcode)h(is)75 5286 y(computed)23 b(using)g(a)d Fy(GAP)g
+FK(program)i(which)g(checks)h(each)f(code)n(w)o(ord)g(in)g
+Ft(C)f FK(to)g(see)g(if)g(it)g(is)h(of)f(the)g(desired)i(weight.)p
+75 5398 1648 4 v 1764 5403 a FF(Example)p 2102 5398 V
+75 5423 4 25 v 3747 5423 V 75 5523 4 100 v 188 5493 a(gap>)44
+b(N)e(:=)h(NordstromRobinsonCo)q(de\()q(\);)q(;)48 b
+(WeightDistribution\()q(N\);)p 3747 5523 V 75 5622 V
+188 5592 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(112,)g(0,)g(30,)h(0,)f
+(112,)h(0,)f(0,)g(0,)g(0,)g(0,)g(1)f(])p 3747 5622 V
+Black Black eop end end
+%%Page: 108 108
+TeXDict begin HPSdict begin 108 107 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.108) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(108)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(C)e(:=)h(ConstantWeightSubco)q(de\()q(N,)49 b(8\);)p
+3747 428 V 75 528 V 188 498 a(a)43 b(\(16,30,6..16\)5..8)48
+b(code)43 b(with)h(codewords)i(of)d(weight)h(8)p 3747
+528 V 75 628 V 188 598 a(gap>)g(WeightDistribution\(C\))q(;)p
+3747 628 V 75 727 V 188 697 a([)f(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g
+(0,)g(30,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0)g(])p
+3747 727 V 75 827 V 188 797 a(gap>)h(eg)f(:=)g(ExtendedTernaryGolayC)q
+(od)q(e\(\))q(;;)49 b(WeightDistribution\(eg)q(\);)p
+3747 827 V 75 927 V 188 897 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g
+(264,)g(0,)g(0,)g(440,)h(0,)f(0,)g(24)g(])p 3747 927
+V 75 1026 V 188 996 a(gap>)h(C)e(:=)h(ConstantWeightSubco)q(de\()q(eg)q
+(\);)p 3747 1026 V 75 1126 V 188 1096 a(a)g(\(12,264,6..12\)3..6)48
+b(code)c(with)f(codewords)j(of)d(weight)h(6)p 3747 1126
+V 75 1225 V 188 1196 a(gap>)g(WeightDistribution\(C\))q(;)p
+3747 1225 V 75 1325 V 188 1295 a([)f(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g
+(264,)g(0,)g(0,)g(0,)h(0,)f(0,)g(0)f(])p 3747 1325 V
+75 1350 4 25 v 3747 1350 V 75 1353 3675 4 v 75 1486 a
+SDict begin H.S end
+
+75 1486 a 75 1486 a
+SDict begin 13.6 H.A end
+ 75 1486 a 75 1486 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.18) cvn H.B /DEST pdfmark end
+ 75 1486 a 116
+x FJ(6.1.18)p 0.0 0.0 1.0 TeXcolorrgb 99 w(StandardF)n(ormCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1777 a Fs(\006)22 b
+Ft(StandardFormCode\()53 b(C)47 b(\))2352 b Fr(\(function\))p
+Black 216 2003 a Ft(StandardFormCode)24 b FK(returns)d
+Ft(C)d FK(after)i(putting)h(it)e(in)g(standard)i(form.)27
+b(If)19 b Ft(C)f FK(is)h(a)g(non-linear)j(code,)e(this)g(means)75
+2115 y(the)k(elements)h(are)e(or)n(ganized)k(using)d(le)o
+(xicographical)k(order)-5 b(.)30 b(This)23 b(means)h(the)o(y)g(form)g
+(a)f(le)o(gal)g Fy(GAP)f FK(`Set'.)216 2228 y(If)27 b
+Ft(C)g FK(is)h(a)f(linear)h(code,)h(the)f(generator)i(matrix)e(and)g
+(parity)g(check)h(matrix)f(are)g(put)f(in)h(standard)h(form.)41
+b(The)75 2341 y(generator)34 b(matrix)d(then)h(has)f(an)h(identity)h
+(matrix)e(in)g(its)g(left)h(part,)h(the)e(parity)i(check)f(matrix)g
+(has)f(an)g(identity)75 2454 y(matrix)21 b(in)f(its)g(right)i(part.)28
+b(Although)22 b Fy(GU)m(A)-6 b(V)f(A)18 b FK(al)o(w)o(ays)j(puts)g
+(both)g(matrices)h(in)e(a)g(standard)i(form)e(using)i
+Ft(BaseMat)p FK(,)75 2567 y(this)i(ne)n(v)o(er)g(alters)h(the)e(code.)
+30 b Ft(StandardFormCode)f FK(e)n(v)o(en)23 b(applies)i(column)g
+(permutations)h(if)e(una)n(v)n(oidable,)j(and)75 2680
+y(thereby)k(changes)g(the)f(code.)47 b(The)29 b(column)h(permutations)i
+(are)e(recorded)h(in)e(the)h(construction)j(history)e(of)e(the)75
+2793 y(ne)n(w)23 b(code)h(\(see)g Ft(Display)i FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 988 2794 a
+SDict begin H.S end
+ 988 2794
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.6.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1169 2731 a
+SDict begin H.R end
+ 1169 2731 a 1169 2793 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.3) cvn H.B /ANN pdfmark end
+ 1169
+2793 a Black FK(\)\).)j Ft(C)23 b FK(and)h(the)g(ne)n(w)f(code)h(are)g
+(of)g(course)h(equi)n(v)n(alent.)216 2906 y(If)d Ft(C)g
+FK(is)g(a)f(c)o(yclic)i(code,)g(its)f(generator)j(matrix)d(cannot)i(be)
+e(put)h(in)f(the)g(usual)h(upper)h(triangular)g(form,)e(because)75
+3019 y(then)d(it)g(w)o(ould)g(be)f(inconsistent)k(with)d(the)g
+(generator)i(polynomial.)29 b(The)18 b(reason)i(is)e(that)i(generating)
+h(the)e(elements)75 3132 y(from)34 b(the)h(generator)i(matrix)d(w)o
+(ould)h(result)h(in)e(a)g(dif)n(ferent)i(order)f(than)g(generating)i
+(the)e(elements)h(from)e(the)75 3245 y(generator)f(polynomial.)53
+b(This)31 b(is)f(an)h(unw)o(anted)i(ef)n(fect,)g(and)e(therefore)i
+Ft(StandardFormCode)j FK(just)31 b(returns)i(a)75 3357
+y(cop)o(y)25 b(of)e Ft(C)g FK(for)h(c)o(yclic)g(codes.)p
+75 3480 1648 4 v 1764 3485 a FF(Example)p 2102 3480 V
+75 3505 4 25 v 3747 3505 V 75 3605 4 100 v 188 3575 a(gap>)44
+b(G)e(:=)h(GeneratorMatCode\()48 b(Z\(2\))c(*)f([)g([0,1,1,0],)i
+([0,1,0,1],)h([0,0,1,1])f(],)p 3747 3605 V 75 3704 V
+611 3674 a("random)g(form)f(code",)g(GF\(2\))g(\);)p
+3747 3704 V 75 3804 V 188 3774 a(a)f(linear)h([4,2,1..2]1..2)j(random)d
+(form)g(code)g(over)g(GF\(2\))p 3747 3804 V 75 3903 V
+188 3874 a(gap>)g(Codeword\()h(GeneratorMat\()i(G)42
+b(\))h(\);)p 3747 3903 V 75 4003 V 188 3973 a([)g([)f(0)h(1)g(0)f(1)h
+(],)g([)g(0)f(0)h(1)g(1)f(])h(])p 3747 4003 V 75 4103
+V 188 4073 a(gap>)h(Codeword\()h(GeneratorMat\()i(StandardFormCode\()h
+(G)43 b(\))f(\))h(\);)p 3747 4103 V 75 4202 V 188 4172
+a([)g([)f(1)h(0)g(0)f(1)h(],)g([)g(0)f(1)h(0)g(1)f(])h(])p
+3747 4202 V 75 4227 4 25 v 3747 4227 V 75 4230 3675 4
+v 75 4364 a
+SDict begin H.S end
+ 75 4364 a 75 4364 a
+SDict begin 13.6 H.A end
+ 75 4364 a 75 4364 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.19) cvn H.B /DEST pdfmark end
+ 75
+4364 a 116 x FJ(6.1.19)p 0.0 0.0 1.0 TeXcolorrgb 99 w
+(PiecewiseConstantCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4654 a Fs(\006)22 b Ft(PiecewiseConstant)q(Cod)q(e\()53
+b(part,)48 b(wts[,)g(F])f(\))1518 b Fr(\(function\))p
+Black 216 4880 a Ft(PiecewiseConstantC)q(ode)31 b FK(returns)26
+b(a)e(code)i(with)f(length)h Fq(n)21 b Fo(=)2345 4887
+y Fu(\345)2420 4880 y Fq(n)2465 4894 y Fm(i)2488 4880
+y FK(,)j(where)h Ft(part)q FK(=)p Fo([)p Fq(n)3087 4894
+y Fr(1)3126 4880 y Fp(;)10 b(:)g(:)g(:)h(;)f Fq(n)3347
+4894 y Fm(k)3382 4880 y Fo(])p FK(.)32 b Ft(wts)25 b
+FK(is)g(a)75 4993 y(list)d(of)g Ft(constraints)j Fq(w)18
+b Fo(=)h(\()p Fq(w)1100 5007 y Fr(1)1137 4993 y Fp(;)10
+b(:::;)g Fq(w)1343 5007 y Fm(k)1379 4993 y Fo(\))p FK(,)21
+b(each)i(of)e(length)j Fq(k)r FK(,)d(where)h(0)d Fv(\024)f
+Fq(w)2534 5007 y Fm(i)2575 4993 y Fv(\024)h Fq(n)2710
+5007 y Fm(i)2733 4993 y FK(.)27 b(The)21 b(def)o(ault)j(\002eld)e(is)f
+Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)216 5106 y(A)26
+b(constraint)j(is)e(a)f(list)h(of)g(inte)o(gers,)h(and)g(a)e(w)o(ord)h
+Fq(c)22 b Fo(=)g(\()p Fq(c)2085 5120 y Fr(1)2123 5106
+y Fp(;)10 b(:)g(:)g(:)h(;)f Fq(c)2339 5120 y Fm(k)2374
+5106 y Fo(\))26 b FK(\(according)k(to)c Ft(part)r FK(,)g(i.e.,)h(each)g
+Fq(c)3574 5120 y Fm(i)3623 5106 y FK(is)g(a)75 5219 y(subw)o(ord)i(of)f
+(length)h Fq(n)816 5233 y Fm(i)839 5219 y FK(\))e(is)h(in)g(the)g
+(resulting)i(code)f(if)e(and)h(only)h(if,)f(for)g(some)g(constraint)j
+Fq(w)22 b Fv(2)k Ft(wts)q FK(,)i Fv(k)p Fq(c)3482 5233
+y Fm(i)3506 5219 y Fv(k)23 b Fo(=)f Fq(w)3728 5233 y
+Fm(i)75 5332 y FK(for)i(all)f(1)e Fv(\024)f Fq(i)g Fv(\024)g
+Fq(k)r FK(,)j(where)g Fv(k)p Fp(:::)p Fv(k)i FK(denotes)g(the)f
+(Hamming)f(weight.)216 5444 y(An)g(e)o(xample)h(might)g(mak)o(e)g
+(things)h(clearer:)p Black Black eop end end
+%%Page: 109 109
+TeXDict begin HPSdict begin 109 108 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.109) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(109)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(PiecewiseConstantCode)q(\()k([)43
+b(2,)g(3)g(],)p 3747 523 V 75 623 V 400 593 a([)f([)h(0,)g(0)g(],)g([)f
+(0,)h(3)g(],)g([)g(1,)g(0)g(],)g([)f(2,)h(2)g(])g(],GF\(2\))h(\);)p
+3747 623 V 75 722 V 188 692 a(the)f(C)g(code)h(programs)h(are)e
+(compiled,)j(so)d(using)h(Leon's)g(binary....)p 3747
+722 V 75 822 V 188 792 a(the)f(C)g(code)h(programs)h(are)e(compiled,)j
+(so)d(using)h(Leon's)g(binary....)p 3747 822 V 75 922
+V 188 892 a(the)f(C)g(code)h(programs)h(are)e(compiled,)j(so)d(using)h
+(Leon's)g(binary....)p 3747 922 V 75 1021 V 188 991 a(the)f(C)g(code)h
+(programs)h(are)e(compiled,)j(so)d(using)h(Leon's)g(binary....)p
+3747 1021 V 75 1121 V 188 1091 a(a)f(\(5,7,1..5\)1..5)k(piecewise)e
+(constant)g(code)f(over)g(GF\(2\))p 3747 1121 V 75 1220
+V 188 1191 a(gap>)g(AsSSortedList\(last\);)p 3747 1220
+V 75 1320 V 188 1290 a([)f([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g(1)f
+(1)h(1)g(],)g([)g(0)f(1)h(0)g(0)f(0)h(],)g([)g(1)f(0)h(0)g(0)f(0)h(],)p
+3747 1320 V 75 1420 V 273 1390 a([)f(1)h(1)g(0)f(1)h(1)g(],)g([)f(1)h
+(1)g(1)f(0)h(1)g(],)g([)g(1)f(1)h(1)g(1)f(0)h(])g(])p
+3747 1420 V 75 1519 V 188 1489 a(gap>)p 3747 1519 V 75
+1619 V 3747 1619 V 75 1644 4 25 v 3747 1644 V 75 1647
+3675 4 v 75 1841 a FK(The)28 b(\002rst)g(constraint)j(is)e(satis\002ed)
+g(by)g(code)n(w)o(ord)h(1,)f(the)g(second)h(by)e(code)n(w)o(ord)i(2,)f
+(the)g(third)h(by)e(code)n(w)o(ords)j(3)75 1954 y(and)24
+b(4,)f(and)h(the)g(fourth)h(by)e(code)n(w)o(ords)j(5,)d(6)g(and)h(7.)75
+2113 y
+SDict begin H.S end
+ 75 2113 a 75 2113 a
+SDict begin 13.6 H.A end
+ 75 2113 a 75 2113 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.6.2) cvn H.B /DEST pdfmark end
+ 75 2113
+a 130 x FM(6.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31
+b(that)e(Generate)i(a)e(New)i(Code)g(fr)n(om)e(T)-9 b(w)o(o)29
+b(Gi)o(v)o(en)h(Codes)p Black 75 2339 a
+SDict begin H.S end
+ 75 2339 a 75
+2339 a
+SDict begin 13.6 H.A end
+ 75 2339 a 75 2339 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.1) cvn H.B /DEST pdfmark end
+ 75 2339 a 114 x FJ(6.2.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Dir)n(ectSumCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 2628 a Fs(\006)22 b Ft(DirectSumCode\()52
+b(C1,)47 b(C2)g(\))2260 b Fr(\(function\))p Black 216
+2854 a Ft(DirectSumCode)27 b FK(returns)d(the)f(direct)g(sum)f(of)h
+(codes)h Ft(C1)e FK(and)h Ft(C2)q FK(.)k(The)22 b(direct)i(sum)e(code)i
+(consists)g(of)f(e)n(v)o(ery)75 2966 y(code)n(w)o(ord)29
+b(of)f Ft(C1)g FK(concatenated)k(by)c(e)n(v)o(ery)g(code)n(w)o(ord)h
+(of)f Ft(C2)q FK(.)41 b(Therefore,)30 b(if)e Ft(Ci)g
+FK(w)o(as)f(a)h Fo(\()p Fq(n)3094 2980 y Fm(i)3117 2966
+y Fp(;)10 b Fq(M)3228 2980 y Fm(i)3251 2966 y Fp(;)g
+Fq(d)3331 2980 y Fm(i)3354 2966 y Fo(\))27 b FK(code,)j(the)75
+3079 y(result)25 b(is)e(a)g Fo(\()p Fq(n)526 3093 y Fr(1)577
+3079 y Fo(+)13 b Fq(n)706 3093 y Fr(2)743 3079 y Fp(;)d
+Fq(M)854 3093 y Fr(1)904 3079 y Fv(\003)j Fq(M)1038 3093
+y Fr(2)1075 3079 y Fp(;)d Fq(min)p Fo(\()p Fq(d)1326
+3093 y Fr(1)1365 3079 y Fp(;)g Fq(d)1445 3093 y Fr(2)1483
+3079 y Fo(\)\))23 b FK(code.)216 3192 y(If)g(both)h Ft(C1)f
+FK(and)g Ft(C2)g FK(are)g(linear)h(codes,)g(the)f(result)i(is)d(also)i
+(a)f(linear)h(code.)29 b(If)23 b(one)g(of)g(them)g(is)g(non-linear)l(,)
+j(the)75 3305 y(direct)f(sum)e(is)g(non-linear)k(too.)i(In)23
+b(general,)i(a)e(direct)i(sum)e(code)i(is)e(not)h(c)o(yclic.)216
+3418 y(Performing)29 b(a)d(direct)j(sum)e(can)g(also)h(be)f(done)h(by)f
+(adding)i(tw)o(o)e(codes)h(\(see)g(Section)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3033 3419 a
+SDict begin H.S end
+ 3033 3419 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3146 3356 a
+SDict begin H.R end
+ 3146 3356 a 3146 3418 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end
+ 3146 3418 a Black
+FK(\).)40 b(Another)28 b(often)75 3531 y(used)c(method)h(is)e(the)h
+(`u,)f(u+v'-construction,)29 b(described)d(in)d Ft(UUVCode)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2438 3532 a
+SDict begin H.S end
+
+2438 3532 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2619 3469 a
+SDict begin H.R end
+ 2619 3469
+a 2619 3531 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.2) cvn H.B /ANN pdfmark end
+ 2619 3531 a Black FK(\).)p 75 3631 1648
+4 v 1764 3636 a FF(Example)p 2102 3631 V 75 3656 4 25
+v 3747 3656 V 75 3756 4 100 v 188 3726 a(gap>)44 b(C1)f(:=)g
+(ElementsCode\()j([)d([1,0],)i([4,5])f(],)f(GF\(7\))h(\);;)p
+3747 3756 V 75 3855 V 188 3825 a(gap>)g(C2)f(:=)g(ElementsCode\()j([)d
+([0,0,0],)i([3,3,3])g(],)e(GF\(7\))h(\);;)p 3747 3855
+V 75 3955 V 188 3925 a(gap>)g(D)e(:=)h(DirectSumCode\(C1,)48
+b(C2\);;)p 3747 3955 V 75 4055 V 188 4025 a(gap>)c(AsSSortedList\(D\);)
+p 3747 4055 V 75 4154 V 188 4124 a([)f([)f(1)h(0)g(0)f(0)h(0)g(],)g([)f
+(1)h(0)g(3)f(3)h(3)g(],)g([)g(4)f(5)h(0)g(0)f(0)h(],)g([)g(4)f(5)h(3)g
+(3)f(3)h(])g(])p 3747 4154 V 75 4254 V 188 4224 a(gap>)h(D)e(=)h(C1)g
+(+)g(C2;)128 b(#)42 b(addition)j(=)e(direct)i(sum)p 3747
+4254 V 75 4353 V 188 4324 a(true)p 3747 4353 V 75 4378
+4 25 v 3747 4378 V 75 4381 3675 4 v 75 4511 a
+SDict begin H.S end
+ 75 4511
+a 75 4511 a
+SDict begin 13.6 H.A end
+ 75 4511 a 75 4511 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.2) cvn H.B /DEST pdfmark end
+ 75 4511 a 117 x FJ(6.2.2)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(UUVCode)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4802 a Fs(\006)22 b Ft(UUVCode\()50 b(C1,)d(C2)g(\))2538
+b Fr(\(function\))p Black 216 5028 a Ft(UUVCode)33 b
+FK(returns)f(the)f(so-called)j Fo(\()p Fq(u)p Fv(k)p
+Fq(u)17 b Fo(+)d Fq(v)p Fo(\))31 b FK(construction)k(applied)d(to)f
+Ft(C1)g FK(and)g Ft(C2)q FK(.)50 b(The)30 b(resulting)j(code)75
+5141 y(consists)c(of)d(e)n(v)o(ery)h(code)n(w)o(ord)h
+Fq(u)e FK(of)g Ft(C1)h FK(concatenated)j(by)d(the)f(sum)h(of)f
+Fq(u)g FK(and)h(e)n(v)o(ery)g(code)n(w)o(ord)h Fq(v)e
+FK(of)h Ft(C2)p FK(.)37 b(If)26 b Ft(C1)75 5254 y FK(and)k
+Ft(C2)f FK(ha)n(v)o(e)h(dif)n(ferent)i(w)o(ord)d(lengths,)k(suf)n
+(\002cient)e(zeros)f(are)g(added)h(to)e(the)h(shorter)h(code)f(to)g
+(mak)o(e)f(this)h(sum)75 5367 y(possible.)h(If)23 b Ft(Ci)h
+FK(is)f(a)g Fo(\()p Fq(n)849 5381 y Fm(i)872 5367 y Fp(;)10
+b Fq(M)983 5381 y Fm(i)1006 5367 y Fp(;)g Fq(d)1086 5381
+y Fm(i)1109 5367 y Fo(\))23 b FK(code,)h(the)g(result)h(is)e(an)h
+Fo(\()p Fq(n)2015 5381 y Fr(1)2066 5367 y Fo(+)13 b Fq(max)p
+Fo(\()p Fq(n)2381 5381 y Fr(1)2419 5367 y Fp(;)d Fq(n)2499
+5381 y Fr(2)2537 5367 y Fo(\))p Fp(;)g Fq(M)2683 5381
+y Fr(1)2733 5367 y Fv(\001)j Fq(M)2847 5381 y Fr(2)2884
+5367 y Fp(;)d Fq(min)p Fo(\()p FK(2)j Fv(\001)g Fq(d)3231
+5381 y Fr(1)3270 5367 y Fp(;)d Fq(d)3350 5381 y Fr(2)3388
+5367 y Fo(\)\))23 b FK(code.)216 5479 y(If)g(both)h Ft(C1)f
+FK(and)g Ft(C2)g FK(are)g(linear)h(codes,)g(the)f(result)i(is)d(also)i
+(a)f(linear)h(code.)29 b(If)23 b(one)g(of)g(them)g(is)g(non-linear)l(,)
+j(the)75 5592 y(UUV)c(sum)h(is)g(non-linear)k(too.)i(In)23
+b(general,)i(a)e(UUV)f(sum)h(code)i(is)e(not)h(c)o(yclic.)p
+Black Black eop end end
+%%Page: 110 110
+TeXDict begin HPSdict begin 110 109 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.110) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(110)p Black 216 399 a(The)23 b(function)j
+Ft(DirectSumCode)h FK(returns)f(another)f(sum)e(of)h(codes)g(\(see)g
+Ft(DirectSumCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+3229 400 a
+SDict begin H.S end
+ 3229 400 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3410
+337 a
+SDict begin H.R end
+ 3410 337 a 3410 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end
+ 3410 399 a Black FK(\)\).)p
+75 515 1648 4 v 1764 520 a FF(Example)p 2102 515 V 75
+540 4 25 v 3747 540 V 75 639 4 100 v 188 609 a(gap>)44
+b(C1)f(:=)g(EvenWeightSubcode\(Who)q(le)q(Spa)q(ceC)q(ode)q(\(4,)49
+b(GF\(2\)\)\);)p 3747 639 V 75 739 V 188 709 a(a)43 b(cyclic)h
+([4,3,2]1)h(even)f(weight)g(subcode)p 3747 739 V 75 839
+V 188 809 a(gap>)g(C2)f(:=)g(RepetitionCode\(4,)48 b(GF\(2\)\);)p
+3747 839 V 75 938 V 188 908 a(a)43 b(cyclic)h([4,1,4]2)h(repetition)h
+(code)e(over)f(GF\(2\))p 3747 938 V 75 1038 V 188 1008
+a(gap>)h(R)e(:=)h(UUVCode\(C1,)j(C2\);)p 3747 1038 V
+75 1137 V 188 1108 a(a)d(linear)h([8,4,4]2)h(U)e(U+V)g(construction)k
+(code)p 3747 1137 V 75 1237 V 188 1207 a(gap>)d(R)e(=)h
+(ReedMullerCode\(1,3\);)p 3747 1237 V 75 1337 V 188 1307
+a(true)p 3747 1337 V 75 1362 4 25 v 3747 1362 V 75 1365
+3675 4 v 75 1497 a
+SDict begin H.S end
+ 75 1497 a 75 1497 a
+SDict begin 13.6 H.A end
+ 75 1497 a 75 1497
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.3) cvn H.B /DEST pdfmark end
+ 75 1497 a 117 x FJ(6.2.3)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Dir)n(ectPr)n(oductCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1788 a Fs(\006)22 b Ft(DirectProductCode)q(\()52 b(C1,)c(C2)f(\))
+2074 b Fr(\(function\))p Black 216 2014 a Ft(DirectProductCode)34
+b FK(returns)c(the)e(direct)i(product)g(of)e(codes)h
+Ft(C1)g FK(and)f Ft(C2)q FK(.)42 b(Both)28 b(must)h(be)f(linear)h
+(codes.)75 2127 y(Suppose)c Ft(Ci)e FK(has)h(generator)j(matrix)d
+Fq(G)1358 2141 y Fm(i)1380 2127 y FK(.)k(The)23 b(direct)i(product)h
+(of)d Ft(C1)h FK(and)g Ft(C2)f FK(then)i(has)f(the)g(Kroneck)o(er)h
+(product)75 2240 y(of)e Fq(G)239 2254 y Fr(1)299 2240
+y FK(and)h Fq(G)519 2254 y Fr(2)579 2240 y FK(as)f(the)h(generator)i
+(matrix)e(\(see)g(the)g Fy(GAP)e FK(command)i Ft(KroneckerProduct)p
+FK(\).)216 2352 y(If)f Ft(Ci)h FK(is)f(a)g Fo([)p Fq(n)631
+2366 y Fm(i)655 2352 y Fp(;)10 b Fq(k)730 2366 y Fm(i)753
+2352 y Fp(;)g Fq(d)833 2366 y Fm(i)856 2352 y Fo(])23
+b FK(code,)h(the)g(direct)h(product)g(then)f(is)g(an)f
+Fo([)p Fq(n)2226 2366 y Fr(1)2277 2352 y Fv(\001)13 b
+Fq(n)2360 2366 y Fr(2)2398 2352 y Fp(;)d Fq(k)2473 2366
+y Fr(1)2523 2352 y Fv(\001)j Fq(k)2601 2366 y Fr(2)2639
+2352 y Fp(;)d Fq(d)2719 2366 y Fr(1)2769 2352 y Fv(\001)j
+Fq(d)2852 2366 y Fr(2)2890 2352 y Fo(])23 b FK(code.)p
+75 2475 1648 4 v 1764 2480 a FF(Example)p 2102 2475 V
+75 2500 4 25 v 3747 2500 V 75 2600 4 100 v 188 2570 a(gap>)44
+b(L1)f(:=)g(LexiCode\(10,)j(4,)d(GF\(2\)\);)p 3747 2600
+V 75 2700 V 188 2670 a(a)g(linear)h([10,5,4]2..4)i(lexicode)f(over)f
+(GF\(2\))p 3747 2700 V 75 2799 V 188 2769 a(gap>)g(L2)f(:=)g
+(LexiCode\(8,)j(3,)d(GF\(2\)\);)p 3747 2799 V 75 2899
+V 188 2869 a(a)g(linear)h([8,4,3]2..3)i(lexicode)f(over)f(GF\(2\))p
+3747 2899 V 75 2998 V 188 2968 a(gap>)g(D)e(:=)h(DirectProductCode\(L)q
+(1,)49 b(L2\);)p 3747 2998 V 75 3098 V 188 3068 a(a)43
+b(linear)h([80,20,12]20..45)k(direct)c(product)h(code)p
+3747 3098 V 75 3123 4 25 v 3747 3123 V 75 3126 3675 4
+v 75 3259 a
+SDict begin H.S end
+ 75 3259 a 75 3259 a
+SDict begin 13.6 H.A end
+ 75 3259 a 75 3259 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.4) cvn H.B /DEST pdfmark end
+ 75
+3259 a 116 x FJ(6.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IntersectionCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3549 a Fs(\006)22 b
+Ft(IntersectionCode\()53 b(C1,)47 b(C2)g(\))2121 b Fr(\(function\))p
+Black 216 3775 a Ft(IntersectionCode)33 b FK(returns)c(the)g
+(intersection)i(of)d(codes)h Ft(C1)e FK(and)i Ft(C2)p
+FK(.)41 b(This)28 b(code)g(consists)i(of)e(all)g(code-)75
+3888 y(w)o(ords)f(that)f(are)g(both)h(in)f Ft(C1)g FK(and)h
+Ft(C2)p FK(.)36 b(If)26 b(both)h(codes)g(are)f(linear)l(,)i(the)e
+(result)i(is)d(also)i(linear)-5 b(.)38 b(If)25 b(both)i(are)g(c)o
+(yclic,)75 4001 y(the)d(result)h(is)e(also)h(c)o(yclic.)p
+75 4121 1648 4 v 1764 4126 a FF(Example)p 2102 4121 V
+75 4146 4 25 v 3747 4146 V 75 4245 4 100 v 188 4215 a(gap>)44
+b(C)e(:=)h(CyclicCodes\(7,)k(GF\(2\)\);)p 3747 4245 V
+75 4345 V 188 4315 a([)c(a)f(cyclic)j([7,7,1]0)g(enumerated)g(code)f
+(over)g(GF\(2\),)p 3747 4345 V 75 4444 V 273 4415 a(a)e(cyclic)j
+([7,6,1..2]1)h(enumerated)g(code)d(over)h(GF\(2\),)p
+3747 4444 V 75 4544 V 273 4514 a(a)e(cyclic)j([7,3,1..4]2..3)i
+(enumerated)f(code)d(over)h(GF\(2\),)p 3747 4544 V 75
+4644 V 273 4614 a(a)e(cyclic)j([7,0,7]7)g(enumerated)g(code)f(over)g
+(GF\(2\),)p 3747 4644 V 75 4743 V 273 4713 a(a)e(cyclic)j
+([7,3,1..4]2..3)i(enumerated)f(code)d(over)h(GF\(2\),)p
+3747 4743 V 75 4843 V 273 4813 a(a)e(cyclic)j([7,4,1..3]1)h(enumerated)
+g(code)d(over)h(GF\(2\),)p 3747 4843 V 75 4943 V 273
+4913 a(a)e(cyclic)j([7,1,7]3)g(enumerated)g(code)f(over)g(GF\(2\),)p
+3747 4943 V 75 5042 V 273 5012 a(a)e(cyclic)j([7,4,1..3]1)h(enumerated)
+g(code)d(over)h(GF\(2\))g(])p 3747 5042 V 75 5142 V 188
+5112 a(gap>)g(IntersectionCode\(C[6])q(,)k(C[8]\))d(=)d(C[7];)p
+3747 5142 V 75 5241 V 188 5212 a(true)p 3747 5241 V 75
+5266 4 25 v 3747 5266 V 75 5269 3675 4 v 75 5479 a FK(The)24
+b Fq(hull)i FK(of)e(a)h(linear)g(code)h(is)e(the)h(intersection)k(of)24
+b(the)h(code)h(with)e(its)h(dual)g(code.)33 b(In)25 b(other)h(w)o
+(ords,)f(the)g(hull)g(of)70 5592 y Fq(C)g FK(is)e Ft
+(IntersectionCode\(C)q(,)52 b(DualCode\(C\)\))p FK(.)p
+Black Black eop end end
+%%Page: 111 111
+TeXDict begin HPSdict begin 111 110 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.111) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(111)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.5) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(6.2.5)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UnionCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(UnionCode\()50 b(C1,)e(C2)f(\))2445
+b Fr(\(function\))p Black 216 799 a Ft(UnionCode)24 b
+FK(returns)e(the)g(union)g(of)f(codes)h Ft(C1)f FK(and)h
+Ft(C2)q FK(.)27 b(This)21 b(code)g(consists)j(of)d(the)g(union)h(of)f
+(all)g(code)n(w)o(ords)75 912 y(of)29 b Ft(C1)g FK(and)g
+Ft(C2)g FK(and)g(all)g(linear)h(combinations.)48 b(Therefore)30
+b(this)g(function)h(w)o(orks)e(only)h(for)f(linear)h(codes.)46
+b(The)75 1024 y(function)32 b Ft(AddedElementsCode)j
+FK(can)30 b(be)f(used)i(for)f(non-linear)i(codes,)g(or)e(if)f(the)h
+(resulting)i(code)f(should)g(not)75 1137 y(include)21
+b(linear)g(combinations.)30 b(See)19 b Ft(AddedElementsCode)25
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2113 1138
+a
+SDict begin H.S end
+ 2113 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2294 1075 a
+SDict begin H.R end
+ 2294 1075
+a 2294 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end
+ 2294 1137 a Black FK(\).)j(If)19 b(both)i(ar)n(guments)h
+(are)d(c)o(yclic,)i(the)f(result)75 1250 y(is)j(also)i(c)o(yclic.)p
+75 1373 1648 4 v 1764 1378 a FF(Example)p 2102 1373 V
+75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44
+b(G)e(:=)h(GeneratorMatCode\([[)q(1,0)q(,1)q(],[)q(0,1)q(,1])q(]*Z)q
+(\(2\))q(\2100,)49 b(GF\(2\)\);)p 3747 1497 V 75 1597
+V 188 1567 a(a)43 b(linear)h([3,2,1..2]1)i(code)e(defined)h(by)e
+(generator)i(matrix)f(over)g(GF\(2\))p 3747 1597 V 75
+1697 V 188 1667 a(gap>)g(H)e(:=)h(GeneratorMatCode\([[)q(1,1)q(,1)q
+(]]*)q(Z\(2)q(\)\2100)q(,)48 b(GF\(2\)\);)p 3747 1697
+V 75 1796 V 188 1766 a(a)43 b(linear)h([3,1,3]1)h(code)f(defined)g(by)g
+(generator)h(matrix)f(over)g(GF\(2\))p 3747 1796 V 75
+1896 V 188 1866 a(gap>)g(U)e(:=)h(UnionCode\(G,)k(H\);)p
+3747 1896 V 75 1996 V 188 1966 a(a)c(linear)h([3,3,1]0)h(union)f(code)p
+3747 1996 V 75 2095 V 188 2065 a(gap>)g(c)e(:=)h(Codeword\("010"\);;)48
+b(c)43 b(in)g(G;)p 3747 2095 V 75 2195 V 188 2165 a(false)p
+3747 2195 V 75 2294 V 188 2265 a(gap>)h(c)e(in)h(H;)p
+3747 2294 V 75 2394 V 188 2364 a(false)p 3747 2394 V
+75 2494 V 188 2464 a(gap>)h(c)e(in)h(U;)p 3747 2494 V
+75 2593 V 188 2563 a(true)p 3747 2593 V 75 2618 4 25
+v 3747 2618 V 75 2621 3675 4 v 75 2754 a
+SDict begin H.S end
+ 75 2754 a 75
+2754 a
+SDict begin 13.6 H.A end
+ 75 2754 a 75 2754 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.6) cvn H.B /DEST pdfmark end
+ 75 2754 a 117 x FJ(6.2.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedDir)n(ectSumCode)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3045 a Fs(\006)22 b
+Ft(ExtendedDirectSum)q(Cod)q(e\()53 b(L,)47 b(B,)g(m)g(\))1842
+b Fr(\(function\))p Black 216 3271 a FK(The)30 b(e)o(xtended)j(direct)f
+(sum)e(construction)k(is)d(described)i(in)d(section)j(V)c(of)i(Graham)f
+(and)h(Sloane)h([)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3490 3272 a
+SDict begin H.S end
+ 3490 3272 a 0.0236 0.6179 0.0894 TeXcolorrgb
+-1 x FK(GS85)p 0.0236 0.6179 0.0894 TeXcolorrgb 3697
+3209 a
+SDict begin H.R end
+ 3697 3209 a 3697 3271 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end
+ 3697 3271 a Black FK(].)75
+3384 y(The)23 b(resulting)j(code)e(consists)i(of)d Ft(m)h
+FK(copies)h(of)e Ft(L)p FK(,)g(e)o(xtended)i(by)f(repeating)i(the)e
+(code)n(w)o(ords)h(of)f Ft(B)f(m)g FK(times.)216 3497
+y(Suppose)k Ft(L)f FK(is)g(an)g Fo([)p Fq(n)888 3511
+y Fm(L)930 3497 y Fp(;)10 b Fq(k)1005 3511 y Fm(L)1047
+3497 y Fo(])p Fq(r)1107 3511 y Fm(L)1174 3497 y FK(code,)27
+b(and)g Ft(B)e FK(is)h(an)g Fo([)p Fq(n)1889 3511 y Fm(L)1931
+3497 y Fp(;)10 b Fq(k)2006 3511 y Fm(B)2052 3497 y Fo(])p
+Fq(r)2112 3511 y Fm(B)2182 3497 y FK(code)27 b(\(non-linear)i(codes)f
+(are)e(also)h(permitted\).)75 3610 y(The)20 b(length)i(of)e
+Ft(B)g FK(must)g(be)h(equal)g(to)f(the)h(length)h(of)e
+Ft(L)p FK(.)27 b(The)20 b(length)i(of)e(the)h(ne)n(w)e(code)j(is)e
+Fq(n)d Fo(=)g Fq(mn)3156 3624 y Fm(L)3198 3610 y FK(,)j(the)g
+(dimension)75 3722 y(\(in)k(the)g(case)g(of)f(linear)i(codes\))g(is)e
+Fq(k)f Fv(\024)e Fq(mk)1442 3736 y Fm(L)1496 3722 y Fo(+)13
+b Fq(k)1620 3736 y Fm(B)1664 3722 y FK(,)23 b(and)h(the)g(co)o(v)o
+(ering)h(radius)g(is)e Fq(r)g Fv(\024)d(b)p Fq(m)p Fu(Y)p
+Fo(\()p Fq(L)p Fp(;)10 b Fq(B)p Fo(\))p Fv(c)p FK(,)23
+b(with)1279 3967 y Fu(Y)p Fo(\()p Fq(L)p Fp(;)10 b Fq(B)p
+Fo(\))20 b(=)34 b FK(max)1674 4043 y Fm(u)p Fh(2)p Fm(F)1798
+4005 y Ff(n)1823 4020 y(L)1785 4064 y Fd(2)1913 3906
+y FK(1)p 1879 3946 114 4 v 1879 4030 a(2)1924 4003 y
+Fm(k)1953 4013 y Ff(B)2023 3987 y Fa(\345)2013 4059 y
+Fm(v)p Fh(2)p Fm(B)2137 3967 y FK(d)p Fo(\()p Fq(L)p
+Fp(;)10 b Fq(v)j Fo(+)g Fq(u)p Fo(\))p Fp(:)75 4235 y
+FK(Ho)n(we)n(v)o(er)l(,)37 b(this)e(computation)i(will)e(not)g(be)f(e)o
+(x)o(ecuted,)39 b(because)e(it)d(may)g(be)h(too)g(time)f(consuming)j
+(for)e(lar)n(ge)75 4347 y(codes.)216 4460 y(If)24 b Fq(L)d
+Fv(\022)f Fq(B)p FK(,)j(and)i Fq(L)f FK(and)h Fq(B)e
+FK(are)i(linear)g(codes,)h(the)f(last)g(cop)o(y)g(of)g
+Ft(L)f FK(is)g(omitted.)33 b(In)24 b(this)h(case)g(the)g(dimension)h
+(is)75 4573 y Fq(k)c Fo(=)e Fq(mk)334 4587 y Fm(L)388
+4573 y Fo(+)13 b(\()p Fq(k)547 4587 y Fm(B)604 4573 y
+Fv(\000)g Fq(k)728 4587 y Fm(L)769 4573 y Fo(\))p FK(.)p
+75 4699 1648 4 v 1764 4704 a FF(Example)p 2102 4699 V
+75 4724 4 25 v 3747 4724 V 75 4823 4 100 v 188 4794 a(gap>)44
+b(c)e(:=)h(HammingCode\()k(3,)c(GF\(2\))h(\);)p 3747
+4823 V 75 4923 V 188 4893 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f
+(code)g(over)f(GF\(2\))p 3747 4923 V 75 5023 V 188 4993
+a(gap>)h(d)e(:=)h(WholeSpaceCode\()48 b(7,)43 b(GF\(2\))h(\);)p
+3747 5023 V 75 5122 V 188 5092 a(a)f(cyclic)h([7,7,1]0)h(whole)f(space)
+g(code)g(over)g(GF\(2\))p 3747 5122 V 75 5222 V 188 5192
+a(gap>)g(e)e(:=)h(ExtendedDirectSumCo)q(de\()49 b(c,)43
+b(d,)g(3)g(\);)p 3747 5222 V 75 5322 V 188 5292 a(a)g(linear)h
+([21,15,1..3]2)j(3-fold)d(extended)h(direct)g(sum)e(code)p
+3747 5322 V 75 5347 4 25 v 3747 5347 V 75 5350 3675 4
+v Black Black eop end end
+%%Page: 112 112
+TeXDict begin HPSdict begin 112 111 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.112) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(112)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.7) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(6.2.7)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(AmalgamatedDir)n(ectSumCode)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(AmalgamatedDirect)q
+(Sum)q(Cod)q(e\()53 b(c1,)47 b(c2[,)h(check])h(\))1332
+b Fr(\(function\))p Black 216 799 a Ft(AmalgamatedDirectS)q(umC)q(ode)
+34 b FK(returns)c(the)e(amalgamated)h(direct)g(sum)f(of)g(the)g(codes)h
+Ft(c1)f FK(and)h Ft(c2)p FK(.)42 b(The)75 912 y(amalgamated)d(direct)f
+(sum)f(code)h(consists)i(of)d(all)g(code)n(w)o(ords)j(of)d(the)g(form)h
+Fo(\()p Fq(u)10 b Fv(k)g FK(0)g Fv(k)g Fq(v)p Fo(\))39
+b FK(if)e Fo(\()p Fq(u)10 b Fv(k)g FK(0)p Fo(\))30 b
+Fv(2)e Fq(c)3545 926 y Fr(1)3619 912 y FK(and)75 1024
+y Fo(\()p FK(0)10 b Fv(k)g Fq(v)p Fo(\))27 b Fv(2)d Fq(c)447
+1038 y Fr(2)515 1024 y FK(and)32 b(all)f(code)n(w)o(ords)i(of)e(the)h
+(form)f Fo(\()p Fq(u)10 b Fv(k)g FK(1)g Fv(k)g Fq(v)p
+Fo(\))34 b FK(if)d Fo(\()p Fq(u)10 b Fv(k)g FK(1)p Fo(\))27
+b Fv(2)d Fq(c)2501 1038 y Fr(1)2569 1024 y FK(and)32
+b Fo(\()p FK(1)10 b Fv(k)g Fq(v)p Fo(\))26 b Fv(2)e Fq(c)3102
+1038 y Fr(2)3140 1024 y FK(.)51 b(The)31 b(result)h(is)g(a)75
+1137 y(code)24 b(with)g(length)h Fq(n)20 b Fo(=)g Fq(n)905
+1151 y Fr(1)956 1137 y Fo(+)13 b Fq(n)1085 1151 y Fr(2)1134
+1137 y Fv(\000)g FK(1)23 b(and)h(size)g Fq(M)f Fv(\024)d
+Fq(M)1870 1151 y Fr(1)1920 1137 y Fv(\001)13 b Fq(M)2034
+1151 y Fr(2)2071 1137 y Fp(=)p FK(2.)216 1250 y(If)27
+b(both)i(codes)f(are)g(linear)l(,)i(the)o(y)d(will)g(\002rst)h(be)f
+(standardized,)32 b(with)27 b(information)j(symbols)f(in)e(the)h(last)g
+(and)75 1363 y(\002rst)23 b(coordinates)k(of)c(the)h(\002rst)f(and)h
+(second)i(code,)e(respecti)n(v)o(ely)-6 b(.)216 1476
+y(If)41 b Ft(c1)g FK(is)g(a)f(normal)i(code)g(\(see)f
+Ft(IsNormalCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1954 1477 a
+SDict begin H.S end
+ 1954 1477 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.4.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2135
+1414 a
+SDict begin H.R end
+ 2135 1414 a 2135 1476 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.4.5) cvn H.B /ANN pdfmark end
+ 2135 1476 a Black FK(\)\))c(with)g(the)h
+(last)f(coordinate)j(acceptable)g(\(see)75 1589 y Ft
+(IsCoordinateAccept)q(abl)q(e)39 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1158 1590 a
+SDict begin H.S end
+ 1158 1590 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1339 1527 a
+SDict begin H.R end
+ 1339 1527 a 1339 1589 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.4.3) cvn H.B /ANN pdfmark end
+ 1339 1589 a Black
+FK(\)\),)e(and)e Ft(c2)f FK(is)g(a)f(normal)i(code)g(with)f(the)g
+(\002rst)g(coordinate)j(acceptable,)75 1702 y(then)25
+b(the)g(co)o(v)o(ering)i(radius)f(of)e(the)h(ne)n(w)f(code)i(is)e
+Fq(r)f Fv(\024)e Fq(r)1848 1716 y Fr(1)1898 1702 y Fo(+)13
+b Fq(r)2017 1716 y Fr(2)2055 1702 y FK(.)31 b(Ho)n(we)n(v)o(er)l(,)25
+b(checking)i(whether)e(a)g(code)g(is)f(normal)75 1815
+y(or)k(not)h(is)f(a)f(lot)i(of)f(w)o(ork,)h(and)f(almost)h(all)f(codes)
+i(seem)e(to)g(be)g(normal.)43 b(Therefore,)31 b(an)d(option)i
+Ft(check)f FK(can)f(be)75 1928 y(supplied.)35 b(If)25
+b Ft(check)h FK(is)f(true,)g(then)h(the)f(codes)i(will)d(be)h(check)o
+(ed)i(for)e(normality)-6 b(.)35 b(If)25 b Ft(check)h
+FK(is)f(f)o(alse)h(or)e(omitted,)75 2041 y(then)k(the)f(codes)i(will)e
+(not)g(be)h(check)o(ed.)41 b(In)28 b(this)f(case)h(it)f(is)g(assumed)i
+(that)f(the)o(y)f(are)h(normal.)40 b(Acceptability)30
+b(of)75 2154 y(the)25 b(last)h(and)f(\002rst)g(coordinate)j(of)d(the)h
+(\002rst)e(and)i(second)h(code,)f(respecti)n(v)o(ely)-6
+b(,)28 b(is)d(in)g(the)g(last)g(case)h(also)g(assumed)75
+2266 y(to)d(be)h(done)g(by)g(the)g(user)-5 b(.)p 75 2363
+1648 4 v 1764 2368 a FF(Example)p 2102 2363 V 75 2388
+4 25 v 3747 2388 V 75 2487 4 100 v 188 2458 a(gap>)44
+b(c)e(:=)h(HammingCode\()k(3,)c(GF\(2\))h(\);)p 3747
+2487 V 75 2587 V 188 2557 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f
+(code)g(over)f(GF\(2\))p 3747 2587 V 75 2687 V 188 2657
+a(gap>)h(d)e(:=)h(ReedMullerCode\()48 b(1,)43 b(4)f(\);)p
+3747 2687 V 75 2786 V 188 2756 a(a)h(linear)h([16,5,8]6)h(Reed-Muller)h
+(\(1,4\))f(code)e(over)h(GF\(2\))p 3747 2786 V 75 2886
+V 188 2856 a(gap>)g(e)e(:=)h(DirectSumCode\()k(c,)c(d)g(\);)p
+3747 2886 V 75 2986 V 188 2956 a(a)g(linear)h([23,9,3]7)h(direct)g(sum)
+e(code)p 3747 2986 V 75 3085 V 188 3055 a(gap>)h(f)e(:=)h
+(AmalgamatedDirectSu)q(mCo)q(de)q(\()48 b(c,)43 b(d)g(\);;)p
+3747 3085 V 75 3185 V 188 3155 a(gap>)h(MinimumDistance\()j(f)c(\);;)p
+3747 3185 V 75 3284 V 188 3255 a(gap>)h(CoveringRadius\()j(f)c(\);;)p
+3747 3284 V 75 3384 V 188 3354 a(gap>)h(f;)p 3747 3384
+V 75 3484 V 188 3454 a(a)f(linear)h([22,8,3]7)h(amalgamated)h(direct)f
+(sum)e(code)p 3747 3484 V 75 3509 4 25 v 3747 3509 V
+75 3512 3675 4 v 75 3641 a
+SDict begin H.S end
+ 75 3641 a 75 3641 a
+SDict begin 13.6 H.A end
+ 75 3641
+a 75 3641 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.8) cvn H.B /DEST pdfmark end
+ 75 3641 a 116 x FJ(6.2.8)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(BlockwiseDir)n(ectSumCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3931 a Fs(\006)22 b Ft(BlockwiseDirectSu)q(mCo)q(de\()53
+b(C1,)48 b(L1,)f(C2,)g(L2)h(\))1471 b Fr(\(function\))p
+Black 216 4157 a Ft(BlockwiseDirectSum)q(Cod)q(e)35 b
+FK(returns)d(a)d(subcode)k(of)c(the)i(direct)g(sum)f(of)f
+Ft(C1)h FK(and)h Ft(C2)p FK(.)48 b(The)29 b(\002elds)h(of)g
+Ft(C1)75 4270 y FK(and)22 b Ft(C2)g FK(must)g(be)g(same.)28
+b(The)22 b(lists)g Ft(L1)g FK(and)g Ft(L2)g FK(are)g(tw)o(o)g(equally)i
+(long)e(with)g(elements)h(from)f(the)g(ambient)h(v)o(ector)75
+4383 y(spaces)g(of)f Ft(C1)g FK(and)g Ft(C2)q FK(,)f(respecti)n(v)o
+(ely)-6 b(,)25 b Fq(or)f Ft(L1)e FK(and)g Ft(L2)g FK(are)g(tw)o(o)f
+(equally)j(long)f(lists)f(containing)j(codes.)k(The)22
+b(union)75 4496 y(of)h(the)h(codes)h(in)e Ft(L1)h FK(and)g
+Ft(L2)f FK(must)h(be)f Ft(C1)h FK(and)g Ft(C2)q FK(,)e(respecti)n(v)o
+(ely)-6 b(.)216 4609 y(In)24 b(the)f(\002rst)h(case,)f(the)h(blockwise)
+i(direct)e(sum)g(code)g(is)f(de\002ned)i(as)1201 4787
+y Fq(bd)5 b(s)21 b Fo(=)1488 4707 y Fb([)1443 4890 y
+Fr(1)p Fh(\024)p Fm(i)p Fh(\024)p Fl(`)1626 4787 y Fo(\()-5
+b Fq(C)1715 4801 y Fr(1)1765 4787 y Fo(+)13 b(\()p Fq(L)1935
+4801 y Fr(1)1971 4787 y Fo(\))2006 4801 y Fm(i)2029 4787
+y Fo(\))g Fv(\010)g Fo(\()-5 b Fq(C)2250 4801 y Fr(2)2299
+4787 y Fo(+)13 b(\()p Fq(L)2469 4801 y Fr(2)2506 4787
+y Fo(\))2541 4801 y Fm(i)2564 4787 y Fo(\))p Fp(;)75
+5044 y FK(where)24 b Fp(`)e FK(is)i(the)g(length)h(of)e
+Ft(L1)g FK(and)h Ft(L2)q FK(,)f(and)h Fv(\010)e FK(is)h(the)h(direct)h
+(sum.)216 5157 y(In)f(the)f(second)j(case,)d(it)h(is)f(de\002ned)h(as)
+1423 5335 y Fq(bd)5 b(s)22 b Fo(=)1710 5255 y Fb([)1665
+5439 y Fr(1)p Fh(\024)p Fm(i)p Fh(\024)p Fl(`)1848 5335
+y Fo(\(\()p Fq(L)1969 5349 y Fr(1)2006 5335 y Fo(\))2041
+5349 y Fm(i)2077 5335 y Fv(\010)13 b Fo(\()p Fq(L)2247
+5349 y Fr(2)2283 5335 y Fo(\))2318 5349 y Fm(i)2341 5335
+y Fo(\))p Fp(:)75 5592 y FK(The)23 b(length)i(of)f(the)f(ne)n(w)g(code)
+i(is)e Fq(n)e Fo(=)e Fq(n)1372 5606 y Fr(1)1423 5592
+y Fo(+)13 b Fq(n)1552 5606 y Fr(2)1589 5592 y FK(.)p
+Black Black eop end end
+%%Page: 113 113
+TeXDict begin HPSdict begin 113 112 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.113) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(113)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(3,)d(GF\(2\))h
+(\);;)p 3747 523 V 75 623 V 188 593 a(gap>)g(C2)f(:=)g
+(EvenWeightSubcode\()48 b(WholeSpaceCode\()g(6,)43 b(GF\(2\))h(\))e
+(\);;)p 3747 623 V 75 722 V 188 692 a(gap>)i(BlockwiseDirectSumCod)q
+(e\()49 b(C1,)43 b([[)g(0,0,0,0,0,0,0)k(],[)c(1,0,1,0,1,0,0)k(]],)p
+3747 722 V 75 822 V 188 792 a(>)c(C2,)g([[)g(0,0,0,0,0,0)j(],[)d
+(1,0,1,0,1,0)k(]])c(\);)p 3747 822 V 75 922 V 188 892
+a(a)g(\(13,1024,1..13\)1..2)48 b(blockwise)e(direct)e(sum)g(code)p
+3747 922 V 75 946 4 25 v 3747 946 V 75 949 3675 4 v Black
+Black eop end end
+%%Page: 114 114
+TeXDict begin HPSdict begin 114 113 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.114) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 75 307
+a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+ 75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter.7) cvn H.B /DEST pdfmark end
+ 75 307 a 714 x
+Fw(Chapter)44 b(7)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a
+FA(Bounds)52 b(on)f(codes,)h(special)g(matrices)g(and)75
+1685 y(miscellaneous)h(functions)p Black 75 2130 a FK(In)33
+b(this)h(chapter)h(we)e(describe)i(functions)h(that)e(determine)h
+(bounds)h(on)d(the)h(size)g(and)g(minimum)f(distance)i(of)75
+2243 y(codes)22 b(\(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+625 2244 a
+SDict begin H.S end
+ 625 2244 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 738 2181
+a
+SDict begin H.R end
+ 738 2181 a 738 2243 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.1) cvn H.B /ANN pdfmark end
+ 738 2243 a Black FK(\),)f(functions)i(that)f
+(determine)g(bounds)h(on)d(the)h(size)h(and)f(co)o(v)o(ering)h(radius)g
+(of)f(codes)h(\(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb
+75 2357 a
+SDict begin H.S end
+ 75 2357 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 188 2294
+a
+SDict begin H.R end
+ 188 2294 a 188 2356 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.2) cvn H.B /ANN pdfmark end
+ 188 2356 a Black FK(\),)j(functions)j(that)d(w)
+o(ork)g(with)g(special)i(matrices)f Fy(GU)m(A)-6 b(V)f(A)23
+b FK(needs)k(for)e(se)n(v)o(eral)h(codes)g(\(see)g(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3428 2357 a
+SDict begin H.S end
+ 3428 2357
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3541 2294 a
+SDict begin H.R end
+ 3541 2294 a 3541 2356 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.3) cvn H.B /ANN pdfmark end
+ 3541
+2356 a Black FK(\),)f(and)75 2469 y(constructing)i(codes)e(or)e
+(performing)j(calculations)h(with)c(codes)i(\(see)f(Section)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2643 2470 a
+SDict begin H.S end
+ 2643 2470
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2756 2407 a
+SDict begin H.R end
+ 2756 2407 a 2756 2469 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.5) cvn H.B /ANN pdfmark end
+ 2756
+2469 a Black FK(\).)75 2632 y
+SDict begin H.S end
+ 75 2632 a 75 2632 a
+SDict begin 13.6 H.A end
+ 75
+2632 a 75 2632 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.1) cvn H.B /DEST pdfmark end
+ 75 2632 a 130 x FM(7.1)p 0.0 0.0 1.0
+TeXcolorrgb 119 w(Distance)30 b(bounds)h(on)f(codes)p
+Black 75 2969 a FK(This)18 b(section)j(describes)g(the)e(functions)i
+(that)e(calculate)i(estimates)f(for)f(upper)g(bounds)i(on)d(the)h(size)
+g(and)g(minimum)75 3082 y(distance)32 b(of)d(codes.)49
+b(Se)n(v)o(eral)30 b(algorithms)h(are)f(kno)n(wn)g(to)g(compute)h(a)e
+(lar)n(gest)j(number)e(of)g(w)o(ords)g(a)f(code)i(can)75
+3195 y(ha)n(v)o(e)g(with)g(gi)n(v)o(en)g(length)h(and)f(minimum)g
+(distance.)52 b(It)31 b(is)f(important)j(ho)n(we)n(v)o(er)e(to)f
+(understand)k(that)d(in)g(some)75 3307 y(cases)c(the)f(true)g(upper)h
+(bound)g(is)f(unkno)n(wn.)36 b(A)25 b(code)h(which)g(has)g(a)g(size)g
+(equalto)h(the)f(calculated)j(upper)e(bound)75 3420 y(may)c(not)h(ha)n
+(v)o(e)g(been)h(found.)30 b(Ho)n(we)n(v)o(er)l(,)23 b(codes)i(that)f
+(ha)n(v)o(e)g(a)f(lar)n(ger)i(size)f(do)g(not)g(e)o(xist.)216
+3533 y(A)e(second)j(w)o(ay)e(to)g(obtain)h(bounds)h(is)e(a)g(table.)30
+b(In)23 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)21 b(an)i(e)o(xtensi)n(v)o(e)i
+(table)f(is)f(implemented)i(for)e(linear)75 3646 y(codes)30
+b(o)o(v)o(er)e Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(,)30
+b Fq(GF)7 b Fo(\()p FK(3)p Fo(\))28 b FK(and)h Fq(GF)7
+b Fo(\()p FK(4)p Fo(\))p FK(.)44 b(It)29 b(contains)h(bounds)h(on)d
+(the)h(minimum)g(distance)h(for)f(gi)n(v)o(en)g(w)o(ord)75
+3759 y(length)34 b(and)e(dimension.)57 b(It)32 b(contains)j(entries)f
+(for)e(w)o(ord)h(lengths)h(less)f(than)g(or)f(equal)h(to)f(257,)j(243)e
+(and)g(256)75 3872 y(for)27 b(codes)i(o)o(v)o(er)e Fq(GF)7
+b Fo(\()p FK(2)p Fo(\))p FK(,)28 b Fq(GF)7 b Fo(\()p
+FK(3)p Fo(\))27 b FK(and)h Fq(GF)7 b Fo(\()p FK(4)p Fo(\))27
+b FK(respecti)n(v)o(ely)-6 b(.)43 b(These)28 b(entries)g(were)g
+(obtained)h(from)e(Brouwer')-5 b(s)75 3985 y(tables)30
+b(as)e(of)h(11)g(May)f(2006.)45 b(F)o(or)28 b(the)h(latest)h
+(information,)i(please)e(see)f(A.)e(E.)g(Brouwer')-5
+b(s)30 b(tables)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3373 3986 a
+SDict begin H.S end
+ 3373 3986 a 0.0236 0.6179 0.0894 TeXcolorrgb
+-1 x FK(Bro06)p 0.0236 0.6179 0.0894 TeXcolorrgb 3599
+3923 a
+SDict begin H.R end
+ 3599 3923 a 3599 3985 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Br) cvn H.B /ANN pdfmark end
+ 3599 3985 a Black 2 w
+FK(])f(on)75 4098 y(the)c(internet.)216 4211 y(Firstly)-6
+b(,)80 b(we)67 b(describe)k(functions)g(that)d(compute)i(speci\002c)f
+(upper)h(bounds)g(on)e(the)h(code)g(size)75 4324 y(\(see)46
+b Ft(UpperBoundSingleton)51 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1221 4325 a
+SDict begin H.S end
+ 1221 4325 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1402 4262 a
+SDict begin H.R end
+ 1402 4262 a 1402 4324 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end
+ 1402 4324 a Black
+FK(\),)f Ft(UpperBoundHamming)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 2368 4325 a
+SDict begin H.S end
+ 2368 4325 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2549 4262 a
+SDict begin H.R end
+ 2549 4262 a 2549 4324 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end
+ 2549 4324 a Black
+FK(\),)g Ft(UpperBoundJohnson)f FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3515 4325 a
+SDict begin H.S end
+ 3515 4325 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3696 4262 a
+SDict begin H.R end
+ 3696 4262 a 3696 4324 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.3) cvn H.B /ANN pdfmark end
+ 3696 4324 a Black
+FK(\),)75 4437 y Ft(UpperBoundPlotkin)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 916 4438 a
+SDict begin H.S end
+ 916 4438 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1097 4375 a
+SDict begin H.R end
+ 1097 4375 a 1097 4437 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end
+ 1097 4437 a Black
+FK(\),)24 b Ft(UpperBoundElias)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1922 4438 a
+SDict begin H.S end
+ 1922 4438 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2103 4375 a
+SDict begin H.R end
+ 2103 4375 a 2103 4437 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.5) cvn H.B /ANN pdfmark end
+ 2103 4437 a Black
+FK(\))c(and)g Ft(UpperBoundGriesmer)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3198 4438 a
+SDict begin H.S end
+ 3198 4438 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3379 4375 a
+SDict begin H.R end
+ 3379 4375 a 3379 4437 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.6) cvn H.B /ANN pdfmark end
+ 3379 4437 a Black
+FK(\)\).)216 4549 y(Ne)o(xt)37 b(we)g(describe)i(a)e(function)i(that)f
+(computes)h Fy(GU)m(A)-6 b(V)f(A)p FK(')i(s)36 b(best)i(upper)h(bound)g
+(on)e(the)h(code)g(size)g(\(see)75 4662 y Ft(UpperBound)26
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 591 4663 a
+SDict begin H.S end
+
+591 4663 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.8)p
+0.0236 0.0894 0.6179 TeXcolorrgb 772 4600 a
+SDict begin H.R end
+ 772 4600
+a 772 4662 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.8) cvn H.B /ANN pdfmark end
+ 772 4662 a Black FK(\)\).)216 4775 y(Then)e(we)g(describe)
+i(tw)o(o)e(functions)j(that)d(compute)i(a)e(lo)n(wer)g(and)g(upper)i
+(bound)f(on)g(the)f(minimum)g(distance)75 4888 y(of)f(a)h(code)g(\(see)
+g Ft(LowerBoundMinimumD)q(ist)q(anc)q(e)29 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1812 4890 a
+SDict begin H.S end
+ 1812 4890
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.1.9)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1993 4826 a
+SDict begin H.R end
+ 1993 4826 a 1993 4888 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.9) cvn H.B /ANN pdfmark end
+ 1993
+4888 a Black FK(\))24 b(and)g Ft(UpperBoundMinimumDi)q(st)q(anc)q(e)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3413 4889
+a
+SDict begin H.S end
+ 3413 4889 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3639 4826 a
+SDict begin H.R end
+ 3639 4826
+a 3639 4888 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.12) cvn H.B /ANN pdfmark end
+ 3639 4888 a Black FK(\)\).)216 5001 y(Finally)-6
+b(,)21 b(we)d(describe)j(a)e(function)i(that)e(returns)i(a)e(lo)n(wer)g
+(and)g(upper)h(bound)h(on)e(the)g(minimum)g(distance)i(with)75
+5114 y(gi)n(v)o(en)k(parameters)i(and)f(a)e(description)k(of)d(ho)n(w)f
+(the)h(bounds)i(were)e(obtained)i(\(see)e Ft(BoundsMinimumDist)q(anc)q
+(e)75 5227 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+105 5228 a
+SDict begin H.S end
+ 105 5228 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 331
+5165 a
+SDict begin H.R end
+ 331 5165 a 331 5227 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 331 5227 a Black FK(\)\).)p
+Black 1844 5841 a(114)p Black eop end end
+%%Page: 115 115
+TeXDict begin HPSdict begin 115 114 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.115) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(115)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.1) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.1.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UpperBoundSingleton)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundSinglet)q(on\()53
+b(n,)47 b(d,)g(q)g(\))1935 b Fr(\(function\))p Black
+216 799 a Ft(UpperBoundSingleto)q(n)31 b FK(returns)d(the)e(Singleton)h
+(bound)g(for)f(a)g(code)g(of)g(length)h Ft(n)q FK(,)e(minimum)h
+(distance)i Ft(d)75 912 y FK(o)o(v)o(er)22 b(a)g(\002eld)g(of)g(size)g
+Ft(q)q FK(.)27 b(This)22 b(bound)h(is)f(based)i(on)e(the)g(shortening)j
+(of)d(codes.)30 b(By)21 b(shortening)k(an)d Fo(\()p Fq(n)p
+Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))22 b FK(code)75
+1024 y Fq(d)c Fv(\000)13 b FK(1)22 b(times,)i(an)f Fo(\()p
+Fq(n)13 b Fv(\000)g Fq(d)18 b Fo(+)13 b FK(1)p Fp(;)d
+Fq(M)t Fp(;)g FK(1)p Fo(\))23 b FK(code)h(results,)h(with)e
+Fq(M)h Fv(\024)c Fq(q)2159 991 y Fm(n)p Fh(\000)p Fm(d)s
+Fk(+)p Fr(1)2392 1024 y FK(\(see)k Ft(ShortenedCode)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3217 1026 a
+SDict begin H.S end
+
+3217 1026 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3398 962 a
+SDict begin H.R end
+ 3398 962
+a 3398 1024 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end
+ 3398 1024 a Black FK(\)\).)h(Thus)1677
+1208 y Fq(M)23 b Fv(\024)d Fq(q)1912 1171 y Fm(n)p Fh(\000)p
+Fm(d)s Fk(+)p Fr(1)2123 1208 y Fp(:)98 1392 y FK(Codes)k(that)g(meet)f
+(this)h(bound)h(are)f(called)h Fq(maximum)e(distance)j(separ)o(able)g
+FK(\(see)e Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3205 1393 a
+SDict begin H.S end
+ 3205 1393 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3386 1330 a
+SDict begin H.R end
+ 3386 1330 a 3386 1392 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end
+ 3386 1392 a Black
+FK(\)\).)p 75 1493 1648 4 v 1764 1498 a FF(Example)p
+2102 1493 V 75 1518 4 25 v 3747 1518 V 75 1618 4 100
+v 188 1588 a(gap>)44 b(UpperBoundSingleton\(4)q(,)k(3,)43
+b(5\);)p 3747 1618 V 75 1717 V 188 1687 a(25)p 3747 1717
+V 75 1817 V 188 1787 a(gap>)h(C)e(:=)h(ReedSolomonCode\(4,3)q(\);;)49
+b(Size\(C\);)p 3747 1817 V 75 1917 V 188 1887 a(25)p
+3747 1917 V 75 2016 V 188 1986 a(gap>)44 b(IsMDSCode\(C\);)p
+3747 2016 V 75 2116 V 188 2086 a(true)p 3747 2116 V 75
+2141 4 25 v 3747 2141 V 75 2144 3675 4 v 75 2353 a
+SDict begin H.S end
+ 75
+2353 a 75 2353 a
+SDict begin 13.6 H.A end
+ 75 2353 a 75 2353 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.2) cvn H.B /DEST pdfmark end
+ 75 2353 a 116 x
+FJ(7.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundHamming)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 2643 a Fs(\006)22 b
+Ft(UpperBoundHamming)q(\()52 b(n,)47 b(d,)g(q)g(\))2028
+b Fr(\(function\))p Black 216 2869 a FK(The)29 b(Hamming)h(bound)h
+(\(also)g(kno)n(wn)f(as)f(the)h Fq(spher)m(e)h(pac)n(king)h(bound)r
+FK(\))g(returns)f(an)f(upper)h(bound)g(on)f(the)75 2982
+y(size)21 b(of)f(a)g(code)h(of)g(length)h Ft(n)p FK(,)e(minimum)g
+(distance)i Ft(d)q FK(,)e(o)o(v)o(er)g(a)g(\002eld)g(of)h(size)g
+Ft(q)p FK(.)27 b(The)20 b(Hamming)g(bound)i(is)e(obtained)75
+3095 y(by)k(di)n(viding)i(the)e(contents)i(of)e(the)g(entire)i(space)f
+Fq(GF)6 b Fo(\()p Fq(q)p Fo(\))1905 3062 y Fm(n)1967
+3095 y FK(by)24 b(the)g(contents)i(of)e(a)g(ball)g(with)g(radius)h
+Fv(b)p Fo(\()p Fq(d)19 b Fv(\000)13 b FK(1)p Fo(\))p
+Fp(=)p FK(2)p Fv(c)p FK(.)75 3208 y(As)23 b(all)g(these)i(balls)f(are)g
+(disjoint,)h(the)o(y)f(can)g(ne)n(v)o(er)g(contain)i(more)d(than)h(the)
+g(whole)g(v)o(ector)h(space.)1668 3430 y Fq(M)e Fv(\024)1954
+3369 y Fq(q)1999 3336 y Fm(n)p 1868 3409 255 4 v 1863
+3493 a Fq(V)12 b Fo(\()p Fq(n)p Fp(;)e Fq(e)p Fo(\))2132
+3430 y Fp(;)75 3663 y FK(where)32 b Fq(M)j FK(is)d(the)g(maxmimum)g
+(number)h(of)f(code)n(w)o(ords)i(and)27 b Fq(V)12 b Fo(\()p
+Fq(n)p Fp(;)e Fq(e)p Fo(\))33 b FK(is)e(equal)j(to)e(the)g(contents)i
+(of)e(a)g(ball)g(of)75 3776 y(radius)d Fq(e)f FK(\(see)g
+Ft(SphereContent)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1225 3777 a
+SDict begin H.S end
+ 1225 3777 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1406
+3714 a
+SDict begin H.R end
+ 1406 3714 a 1406 3776 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.5) cvn H.B /ANN pdfmark end
+ 1406 3776 a Black FK(\)\).)43
+b(This)28 b(bound)h(is)f(useful)h(for)g(small)f(v)n(alues)h(of)f
+Ft(d)p FK(.)41 b(Codes)29 b(for)f(which)75 3888 y(equality)e(holds)e
+(are)g(called)h Fq(perfect)i FK(\(see)d Ft(IsPerfectCode)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2085 3889 a
+SDict begin H.S end
+
+2085 3889 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.6)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2266 3826 a
+SDict begin H.R end
+ 2266 3826
+a 2266 3888 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.6) cvn H.B /ANN pdfmark end
+ 2266 3888 a Black FK(\)\).)p 75 3991 1648
+4 v 1764 3996 a FF(Example)p 2102 3991 V 75 4015 4 25
+v 3747 4015 V 75 4115 4 100 v 188 4085 a(gap>)44 b(UpperBoundHamming\()
+k(15,)43 b(3,)g(2)g(\);)p 3747 4115 V 75 4215 V 188 4185
+a(2048)p 3747 4215 V 75 4314 V 188 4284 a(gap>)h(C)e(:=)h
+(HammingCode\()k(4,)c(GF\(2\))h(\);)p 3747 4314 V 75
+4414 V 188 4384 a(a)f(linear)h([15,11,3]1)i(Hamming)e(\(4,2\))h(code)e
+(over)h(GF\(2\))p 3747 4414 V 75 4514 V 188 4484 a(gap>)g(Size\()g(C)e
+(\);)p 3747 4514 V 75 4613 V 188 4583 a(2048)p 3747 4613
+V 75 4638 4 25 v 3747 4638 V 75 4641 3675 4 v 75 4850
+a
+SDict begin H.S end
+ 75 4850 a 75 4850 a
+SDict begin 13.6 H.A end
+ 75 4850 a 75 4850 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.3) cvn H.B /DEST pdfmark end
+ 75 4850 a 116
+x FJ(7.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundJ)o(ohnson)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b
+Ft(UpperBoundJohnson)q(\()52 b(n,)47 b(d)g(\))2167 b
+Fr(\(function\))p Black 216 5367 a FK(The)34 b(Johnson)i(bound)f(is)f
+(an)f(impro)o(v)o(ed)i(v)o(ersion)h(of)d(the)h(Hamming)g(bound)h(\(see)
+g Ft(UpperBoundHamming)75 5479 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 5480 a
+SDict begin H.S end
+ 105 5480 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 5417 a
+SDict begin H.R end
+ 286 5417 a 286 5479 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end
+ 286 5479 a Black FK(\)\).)29
+b(In)21 b(addition)i(to)e(the)h(Hamming)f(bound,)h(it)f(tak)o(es)h
+(into)g(account)h(the)f(elements)g(of)f(the)h(space)g(outside)h(the)75
+5592 y(balls)h(of)g(radius)h Fq(e)e FK(around)i(the)f(elements)h(of)e
+(the)h(code.)30 b(The)23 b(Johnson)i(bound)g(only)g(w)o(orks)f(for)g
+(binary)h(codes.)p Black Black eop end end
+%%Page: 116 116
+TeXDict begin HPSdict begin 116 115 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.116) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(116)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(UpperBoundJohnson\()k(13,)43
+b(5)g(\);)p 3747 523 V 75 623 V 188 593 a(77)p 3747 623
+V 75 722 V 188 692 a(gap>)h(UpperBoundHamming\()k(13,)43
+b(5,)g(2\);)p 3747 722 V 75 822 V 188 792 a(89)128 b(#)42
+b(in)h(this)h(case)g(the)f(Johnson)i(bound)f(is)f(better)p
+3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75
+1083 a
+SDict begin H.S end
+ 75 1083 a 75 1083 a
+SDict begin 13.6 H.A end
+ 75 1083 a 75 1083 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.4) cvn H.B /DEST pdfmark end
+ 75 1083
+a 116 x FJ(7.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundPlotkin)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1373 a Fs(\006)22 b
+Ft(UpperBoundPlotkin)q(\()52 b(n,)47 b(d,)g(q)g(\))2028
+b Fr(\(function\))p Black 216 1599 a FK(The)36 b(function)j
+Ft(UpperBoundPlotkin)j FK(calculates)d(the)d(sum)h(of)f(the)h
+(distances)i(of)d(all)h(ordered)h(pairs)f(of)75 1712
+y(dif)n(ferent)26 b(code)n(w)o(ords.)33 b(It)24 b(is)g(based)i(on)e
+(the)h(f)o(act)g(that)g(the)f(minimum)g(distance)j(is)d(at)g(most)g
+(equal)i(to)e(the)h(a)n(v)o(erage)75 1825 y(distance.)31
+b(It)23 b(is)g(a)h(good)g(bound)h(if)e(the)h(weights)h(of)e(the)h(code)
+n(w)o(ords)h(do)f(not)g(dif)n(fer)g(much.)29 b(It)23
+b(results)j(in:)1525 2068 y Fq(M)d Fv(\024)1970 2007
+y Fq(d)p 1725 2047 540 4 v 1725 2131 a(d)18 b Fv(\000)13
+b Fo(\()p FK(1)g Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p
+Fq(n)2275 2068 y Fp(;)75 2321 y FK(where)22 b Fq(M)i
+FK(is)e(the)g(maximum)g(number)h(of)e(code)n(w)o(ords.)30
+b(In)22 b(this)h(case,)f Ft(d)f FK(must)h(be)g(lar)n(ger)i(than)e
+Fo(\()p FK(1)11 b Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p
+Fq(n)p FK(,)24 b(b)n(ut)e(by)75 2434 y(shortening)27
+b(the)c(code,)h(the)g(case)g Fq(d)51 b Fv(h)46 b Fo(\()p
+FK(1)13 b Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p Fq(n)24
+b FK(is)g(co)o(v)o(ered.)p 75 2560 1648 4 v 1764 2565
+a FF(Example)p 2102 2560 V 75 2585 4 25 v 3747 2585 V
+75 2684 4 100 v 188 2654 a(gap>)44 b(UpperBoundPlotkin\()k(15,)43
+b(7,)g(2)g(\);)p 3747 2684 V 75 2784 V 188 2754 a(32)p
+3747 2784 V 75 2884 V 188 2854 a(gap>)h(C)e(:=)h(BCHCode\()i(15,)f(7,)f
+(GF\(2\))h(\);)p 3747 2884 V 75 2983 V 188 2953 a(a)f(cyclic)h
+([15,5,7]5)h(BCH)f(code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p
+3747 2983 V 75 3083 V 188 3053 a(gap>)g(Size\(C\);)p
+3747 3083 V 75 3182 V 188 3153 a(32)p 3747 3182 V 75
+3282 V 188 3252 a(gap>)g(WeightDistribution\(C\))q(;)p
+3747 3282 V 75 3382 V 188 3352 a([)f(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g
+(15,)g(15,)g(0,)h(0,)f(0,)g(0,)g(0,)g(0,)g(1)f(])p 3747
+3382 V 75 3407 4 25 v 3747 3407 V 75 3410 3675 4 v 75
+3643 a
+SDict begin H.S end
+ 75 3643 a 75 3643 a
+SDict begin 13.6 H.A end
+ 75 3643 a 75 3643 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.5) cvn H.B /DEST pdfmark end
+ 75 3643
+a 116 x FJ(7.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundElias)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3933 a Fs(\006)22 b
+Ft(UpperBoundElias\()53 b(n,)47 b(d,)g(q)f(\))2121 b
+Fr(\(function\))p Black 216 4159 a FK(The)29 b(Elias)f(bound)j(is)d(an)
+h(impro)o(v)o(ement)i(of)d(the)h(Plotkin)h(bound)h(\(see)e
+Ft(UpperBoundPlotkin)34 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3373 4160 a
+SDict begin H.S end
+ 3373 4160 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3554 4097 a
+SDict begin H.R end
+ 3554 4097 a 3554 4159 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end
+ 3554 4159 a Black
+FK(\)\))c(for)75 4272 y(lar)n(ge)38 b(codes.)71 b(Subcodes)38
+b(are)g(used)f(to)g(decrease)i(the)f(size)f(of)g(the)h(code,)j(in)36
+b(this)i(case)g(the)f(subcode)i(of)e(all)75 4385 y(code)n(w)o(ords)28
+b(within)e(a)g(certain)i(ball.)36 b(This)26 b(bound)i(is)d(useful)j
+(for)e(lar)n(ge)h(codes)g(with)f(relati)n(v)o(ely)i(small)e(minimum)75
+4498 y(distances.)p 75 4602 1648 4 v 1764 4607 a FF(Example)p
+2102 4602 V 75 4626 4 25 v 3747 4626 V 75 4726 4 100
+v 188 4696 a(gap>)44 b(UpperBoundPlotkin\()k(16,)43 b(3,)g(2)g(\);)p
+3747 4726 V 75 4826 V 188 4796 a(12288)p 3747 4826 V
+75 4925 V 188 4895 a(gap>)h(UpperBoundElias\()j(16,)d(3,)f(2)f(\);)p
+3747 4925 V 75 5025 V 188 4995 a(10280)p 3747 5025 V
+75 5125 V 188 5095 a(gap>)i(UpperBoundElias\()j(20,)d(10,)f(3)g(\);)p
+3747 5125 V 75 5224 V 188 5194 a(16255)p 3747 5224 V
+75 5249 4 25 v 3747 5249 V 75 5252 3675 4 v Black Black
+eop end end
+%%Page: 117 117
+TeXDict begin HPSdict begin 117 116 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.117) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(117)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.6) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.1.6)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UpperBoundGriesmer)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundGriesme)q(r\()53
+b(n,)47 b(d,)g(q)g(\))1981 b Fr(\(function\))p Black
+216 799 a FK(The)23 b(Griesmer)g(bound)i(is)d(v)n(alid)i(only)g(for)f
+(linear)h(codes.)30 b(It)23 b(is)f(obtained)k(by)d(counting)i(the)e
+(number)h(of)f(equal)75 912 y(symbols)31 b(in)g(each)g(ro)n(w)e(of)h
+(the)h(generator)h(matrix)f(of)f(the)h(code.)49 b(By)30
+b(omitting)h(the)g(coordinates)i(in)e(which)f(all)75
+1024 y(ro)n(ws)g(ha)n(v)o(e)h(a)f(zero,)j(a)c(smaller)j(code)f
+(results.)51 b(The)30 b(Griesmer)h(bound)h(is)e(obtained)i(by)f
+(repeating)i(this)e(proces)75 1137 y(until)24 b(a)g(tri)n(vial)g(code)h
+(is)e(left)h(in)f(the)h(end.)p 75 1199 1648 4 v 1764
+1204 a FF(Example)p 2102 1199 V 75 1224 4 25 v 3747 1224
+V 75 1324 4 100 v 188 1294 a(gap>)44 b(UpperBoundGriesmer\()k(13,)c(5,)
+f(2)g(\);)p 3747 1324 V 75 1424 V 188 1394 a(64)p 3747
+1424 V 75 1523 V 188 1493 a(gap>)h(UpperBoundGriesmer\()k(18,)c(9,)f(2)
+g(\);)p 3747 1523 V 75 1623 V 188 1593 a(8)339 b(#)43
+b(the)g(maximum)i(number)f(of)f(words)h(for)g(a)e(linear)j(code)e(is)g
+(8)p 3747 1623 V 75 1722 V 188 1693 a(gap>)h(Size\()g(PuncturedCode\()j
+(HadamardCode\()g(20,)c(1)g(\))f(\))h(\);)p 3747 1722
+V 75 1822 V 188 1792 a(20)297 b(#)43 b(this)g(non-linear)j(code)e(has)f
+(20)g(elements)p 3747 1822 V 75 1847 4 25 v 3747 1847
+V 75 1850 3675 4 v 75 2034 a
+SDict begin H.S end
+ 75 2034 a 75 2034 a
+SDict begin 13.6 H.A end
+ 75 2034
+a 75 2034 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.7) cvn H.B /DEST pdfmark end
+ 75 2034 a 116 x FJ(7.1.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(IsGriesmerCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+2324 a Fs(\006)22 b Ft(IsGriesmerCode\()52 b(C)47 b(\))2445
+b Fr(\(function\))p Black 216 2550 a Ft(IsGriesmerCode)35
+b FK(returns)e(`true')f(if)e(a)g(linear)i(code)g Ft(C)e
+FK(is)h(a)f(Griesmer)i(code,)h(and)e(`f)o(alse')h(otherwise.)52
+b(A)75 2663 y(code)24 b(is)g(called)h Fq(Griesmer)h FK(if)d(its)h
+(length)h(satis\002es)1512 2892 y Fq(n)c Fo(=)f Fq(g)p
+Fo([)p Fq(k)r Fp(;)10 b Fq(d)5 b Fo(])21 b(=)2003 2795
+y Fm(k)q Fh(\000)p Fr(1)2014 2912 y Fa(\345)2009 2985
+y Fm(i)p Fk(=)p Fr(0)2119 2892 y Fv(d)2178 2831 y Fq(d)p
+2169 2871 69 4 v 2169 2955 a(q)2214 2928 y Fm(i)2247
+2892 y Fv(e)p Fp(:)p 75 3115 1648 4 v 1764 3120 a FF(Example)p
+2102 3115 V 75 3140 4 25 v 3747 3140 V 75 3240 4 100
+v 188 3210 a(gap>)44 b(IsGriesmerCode\()j(HammingCode\()g(3,)c(GF\(2\))
+h(\))e(\);)p 3747 3240 V 75 3339 V 188 3310 a(true)p
+3747 3339 V 75 3439 V 188 3409 a(gap>)i(IsGriesmerCode\()j(BCHCode\()e
+(17,)f(2,)f(GF\(2\))h(\))e(\);)p 3747 3439 V 75 3539
+V 188 3509 a(false)p 3747 3539 V 75 3564 4 25 v 3747
+3564 V 75 3567 3675 4 v 75 3750 a
+SDict begin H.S end
+ 75 3750 a 75 3750 a
+SDict begin 13.6 H.A end
+
+75 3750 a 75 3750 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.8) cvn H.B /DEST pdfmark end
+ 75 3750 a 117 x FJ(7.1.8)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UpperBound)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4041 a Fs(\006)22 b Ft(UpperBound\()51 b(n,)c(d,)g(q)g(\))2352
+b Fr(\(function\))p Black 216 4267 a Ft(UpperBound)42
+b FK(returns)e(the)f(best)g(kno)n(wn)g(upper)h(bound)g
+Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))39 b FK(for)g(the)g
+(size)g(of)g(a)f(code)h(of)g(length)h Ft(n)p FK(,)75
+4380 y(minimum)32 b(distance)i Ft(d)d FK(o)o(v)o(er)h(a)g(\002eld)g(of)
+f(size)i Ft(q)p FK(.)53 b(The)32 b(function)i Ft(UpperBound)h
+FK(\002rst)c(checks)j(for)e(tri)n(vial)h(cases)75 4493
+y(\(lik)o(e)39 b Fq(d)34 b Fo(=)28 b FK(1)37 b(or)i Fq(n)28
+b Fo(=)g Fq(d)5 b FK(\),)42 b(and)c(if)g(the)h(v)n(alue)g(is)f(in)g
+(the)g(b)n(uilt-in)i(table.)74 b(Then)38 b(it)g(calculates)j(the)d
+(minimum)75 4606 y(v)n(alue)43 b(of)f(the)h(upper)g(bound)g(using)h
+(the)e(methods)i(of)e(Singleton)i(\(see)e Ft(UpperBoundSinglet)q(on)48
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 4607
+a
+SDict begin H.S end
+ 3485 4607 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.1)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3666 4544 a
+SDict begin H.R end
+ 3666 4544
+a 3666 4606 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end
+ 3666 4606 a Black FK(\)\),)75 4718 y(Hamming)36
+b(\(see)h Ft(UpperBoundHamming)42 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1510 4719 a
+SDict begin H.S end
+ 1510 4719 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1691 4656 a
+SDict begin H.R end
+ 1691 4656 a 1691 4718 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end
+ 1691 4718 a Black
+FK(\)\),)e(Johnson)f(\(see)d Ft(UpperBoundJohnson)42
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3183 4719
+a
+SDict begin H.S end
+ 3183 4719 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3364 4656 a
+SDict begin H.R end
+ 3364 4656
+a 3364 4718 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.3) cvn H.B /ANN pdfmark end
+ 3364 4718 a Black FK(\)\),)e(Plotkin)75
+4831 y(\(see)30 b Ft(UpperBoundPlotkin)35 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 1097 4832 a
+SDict begin H.S end
+ 1097 4832 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1278 4769 a
+SDict begin H.R end
+ 1278 4769 a 1278 4831 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end
+ 1278 4831 a Black
+FK(\)\))c(and)f(Elias)g(\(see)g Ft(UpperBoundElias)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2669 4832 a
+SDict begin H.S end
+
+2669 4832 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.5)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2850 4769 a
+SDict begin H.R end
+ 2850 4769
+a 2850 4831 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.5) cvn H.B /ANN pdfmark end
+ 2850 4831 a Black FK(\)\).)48 b(If)30 b(the)g(code)g(is)g
+(binary)-6 b(,)75 4944 y Fq(A)p Fo(\()p Fq(n)p Fp(;)10
+b FK(2)j Fv(\001)g Fp(`)g Fv(\000)g FK(1)p Fo(\))20 b(=)g
+Fq(A)p Fo(\()p Fq(n)13 b Fo(+)g FK(1)p Fp(;)d FK(2)j
+Fv(\001)g Fp(`)p Fo(\))p FK(,)23 b(so)g(the)h Ft(UpperBound)j
+FK(tak)o(es)d(the)g(minimum)g(of)f(the)h(v)n(alues)h(obtained)h(from)d
+(all)75 5057 y(methods)i(for)f(the)f(parameters)j Fo(\()p
+Fq(n)p Fp(;)10 b FK(2)j Fv(\001)g Fp(`)g Fv(\000)g FK(1)p
+Fo(\))23 b FK(and)h Fo(\()p Fq(n)13 b Fo(+)g FK(1)p Fp(;)d
+FK(2)j Fv(\001)g Fp(`)p Fo(\))p FK(.)p 75 5141 1648 4
+v 1764 5146 a FF(Example)p 2102 5141 V 75 5166 4 25 v
+3747 5166 V 75 5265 4 100 v 188 5235 a(gap>)44 b(UpperBound\()i(10,)d
+(3,)g(2)g(\);)p 3747 5265 V 75 5365 V 188 5335 a(85)p
+3747 5365 V 75 5465 V 188 5435 a(gap>)h(UpperBound\()i(25,)d(9,)g(8)g
+(\);)p 3747 5465 V 75 5564 V 188 5534 a(1211778792827540)p
+3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4
+v Black Black eop end end
+%%Page: 118 118
+TeXDict begin HPSdict begin 118 117 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.118) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(118)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.9) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.1.9)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Lo)o(werBoundMinimumDistance)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(LowerBoundMinimum)q
+(Dis)q(tan)q(ce\()53 b(C)47 b(\))1935 b Fr(\(function\))p
+Black 216 799 a FK(In)26 b(this)g(form,)g Ft(LowerBoundMinimumDi)q(sta)
+q(nc)q(e)31 b FK(returns)c(a)e(lo)n(wer)h(bound)h(for)f(the)g(minimum)f
+(distance)j(of)75 912 y(code)c Ft(C)q FK(.)216 1024 y(This)f(command)h
+(can)f(also)h(be)f(called)i(using)f(the)g(syntax)g Ft
+(LowerBoundMinimumD)q(ist)q(an)q(ce\()53 b(n,)47 b(k,)g(F)g(\))p
+FK(.)75 1137 y(In)26 b(this)h(form,)f Ft(LowerBoundMinimumD)q(ist)q
+(anc)q(e)31 b FK(returns)d(a)e(lo)n(wer)g(bound)h(for)f(the)h(minimum)f
+(distance)i(of)e(the)75 1250 y(best)33 b(kno)n(wn)f(linear)i(code)f(of)
+f(length)h Ft(n)q FK(,)g(dimension)h Ft(k)e FK(o)o(v)o(er)g(\002eld)g
+Ft(F)p FK(.)54 b(It)32 b(uses)h(the)f(mechanism)i(e)o(xplained)g(in)75
+1363 y(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 355
+1364 a
+SDict begin H.S end
+ 355 1364 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 1301
+a
+SDict begin H.R end
+ 581 1301 a 581 1363 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 581 1363 a Black FK(.)p 75 1466
+1648 4 v 1764 1471 a FF(Example)p 2102 1466 V 75 1491
+4 25 v 3747 1491 V 75 1591 4 100 v 188 1561 a(gap>)44
+b(C)e(:=)h(BCHCode\()i(45,)f(7)e(\);)p 3747 1591 V 75
+1690 V 188 1660 a(a)h(cyclic)h([45,23,7..9]6..16)k(BCH)43
+b(code,)i(delta=7,)g(b=1)e(over)h(GF\(2\))p 3747 1690
+V 75 1790 V 188 1760 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\()49
+b(C)43 b(\);)p 3747 1790 V 75 1890 V 188 1860 a(7)212
+b(#)43 b(designed)i(distance)g(is)e(lower)h(bound)g(for)f(minimum)i
+(distance)p 3747 1890 V 75 1989 V 188 1959 a(gap>)f
+(LowerBoundMinimumDist)q(anc)q(e\()49 b(45,)43 b(23,)h(GF\(2\))g(\);)p
+3747 1989 V 75 2089 V 188 2059 a(10)p 3747 2089 V 75
+2114 4 25 v 3747 2114 V 75 2117 3675 4 v 75 2348 a
+SDict begin H.S end
+ 75
+2348 a 75 2348 a
+SDict begin 13.6 H.A end
+ 75 2348 a 75 2348 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.10) cvn H.B /DEST pdfmark end
+ 75 2348 a 116 x
+FJ(7.1.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundGilbertV)-9
+b(arshamo)o(v)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2639
+a Fs(\006)22 b Ft(LowerBoundGilbert)q(Var)q(sha)q(mov)q(\()53
+b(n,)47 b(d,)g(q)f(\))1611 b Fr(\(function\))p Black
+216 2864 a FK(This)36 b(is)g(the)g(lo)n(wer)g(bound)h(due)f
+(\(independently\))41 b(to)36 b(Gilbert)h(and)f(V)-10
+b(arshamo)o(v)k(.)67 b(It)35 b(says)i(that)f(for)g(each)75
+2977 y Ft(n)46 b FK(and)g Ft(d)q FK(,)k(there)d(e)o(xists)g(a)f(linear)
+h(code)g(ha)n(ving)h(length)g Fq(n)e FK(and)g(minimum)g(distance)i
+Fq(d)j FK(at)46 b(least)h(of)f(size)75 3090 y Fq(q)120
+3057 y Fm(n)p Fh(\000)p Fr(1)243 3090 y Fp(=)p Fq(S)8
+b(pher)o(e)-5 b(C)r(on)n(t)6 b(en)n(t)g Fo(\()p Fq(n)13
+b Fv(\000)g FK(1)p Fp(;)d Fq(d)22 b Fv(\000)13 b FK(2)p
+Fp(;)d Fq(GF)d Fo(\()p Fq(q)p Fo(\)\))p FK(.)p 75 3215
+1648 4 v 1764 3220 a FF(Example)p 2102 3215 V 75 3240
+4 25 v 3747 3240 V 75 3339 4 100 v 188 3309 a(gap>)44
+b(LowerBoundGilbertVars)q(ham)q(ov\()q(3,)q(2,2)q(\);)p
+3747 3339 V 75 3439 V 188 3409 a(4)p 3747 3439 V 75 3538
+V 188 3509 a(gap>)g(LowerBoundGilbertVars)q(ham)q(ov\()q(3,)q(3,2)q
+(\);)p 3747 3538 V 75 3638 V 188 3608 a(1)p 3747 3638
+V 75 3738 V 188 3708 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\(3)q(,3)q
+(,2\))q(;)p 3747 3738 V 75 3837 V 188 3807 a(1)p 3747
+3837 V 75 3937 V 188 3907 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\(3)q
+(,2)q(,2\))q(;)p 3747 3937 V 75 4037 V 188 4007 a(2)p
+3747 4037 V 75 4061 4 25 v 3747 4061 V 75 4064 3675 4
+v 75 4296 a
+SDict begin H.S end
+ 75 4296 a 75 4296 a
+SDict begin 13.6 H.A end
+ 75 4296 a 75 4296 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.11) cvn H.B /DEST pdfmark end
+ 75
+4296 a 116 x FJ(7.1.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o
+(werBoundSpher)n(eP)o(acking)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4586 a Fs(\006)22 b Ft(LowerBoundSphereP)q(ack)q(ing)q(\()52
+b(n,)c(d,)f(q)f(\))1750 b Fr(\(function\))p Black 216
+4812 a FK(This)23 b(is)f(the)h(lo)n(wer)g(bound)h(due)f
+(\(independently\))28 b(to)23 b(Gilbert)g(and)g(V)-10
+b(arshamo)o(v)k(.)30 b(It)22 b(says)i(that)f(for)g(each)g
+Ft(n)g FK(and)75 4925 y Ft(r)p FK(,)g(there)h(e)o(xists)g(an)f
+(unrestricted)k(code)d(at)f(least)h(of)f(size)h Fq(q)1937
+4892 y Fm(n)1975 4925 y Fp(=)p Fq(S)8 b(pher)o(e)-5 b(C)r(on)n(t)6
+b(en)n(t)g Fo(\()p Fq(n)p Fp(;)k Fq(d)5 b Fp(;)10 b Fq(GF)i
+Fo(\()p Fq(q)p Fo(\)\))24 b FK(minimum)f(distance)75
+5038 y Fq(d)5 b FK(.)p 75 5141 1648 4 v 1764 5146 a FF(Example)p
+2102 5141 V 75 5166 4 25 v 3747 5166 V 75 5265 4 100
+v 188 5235 a(gap>)44 b(LowerBoundSpherePacki)q(ng\()q(3,2)q(,2)q(\);)p
+3747 5265 V 75 5365 V 188 5335 a(2)p 3747 5365 V 75 5465
+V 188 5435 a(gap>)g(LowerBoundSpherePacki)q(ng\()q(3,3)q(,2)q(\);)p
+3747 5465 V 75 5564 V 188 5534 a(1)p 3747 5564 V 75 5589
+4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end
+end
+%%Page: 119 119
+TeXDict begin HPSdict begin 119 118 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.119) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(119)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.12) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.1.12)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UpperBoundMinimumDistance)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundMinimum)q(Dis)q(tan)q
+(ce\()53 b(C)47 b(\))1935 b Fr(\(function\))p Black 216
+799 a FK(In)22 b(this)g(form,)g Ft(UpperBoundMinimumDi)q(sta)q(nc)q(e)
+27 b FK(returns)c(an)f(upper)h(bound)g(for)f(the)g(minimum)f(distance)j
+(of)75 912 y(code)h Ft(C)p FK(.)k(F)o(or)23 b(unrestricted)28
+b(codes,)d(it)e(just)i(returns)g(the)g(w)o(ord)f(length.)31
+b(F)o(or)23 b(linear)i(codes,)g(it)f(tak)o(es)h(the)f(minimum)75
+1024 y(of)29 b(the)f(possibly)j(kno)n(wn)e(v)n(alue)h(from)e(the)h
+(method)h(of)e(construction,)34 b(the)29 b(weight)g(of)f(the)h
+(generators,)k(and)c(the)75 1137 y(v)n(alue)24 b(from)g(the)g(table)g
+(\(see)p 0.0236 0.0894 0.6179 TeXcolorrgb 994 1138 a
+SDict begin H.S end
+
+994 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1220 1075 a
+SDict begin H.R end
+ 1220 1075
+a 1220 1137 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 1220 1137 a Black FK(\).)216 1250 y(This)f(command)h(can)
+f(also)h(be)f(called)i(using)f(the)g(syntax)g Ft(UpperBoundMinimumD)q
+(ist)q(an)q(ce\()53 b(n,)47 b(k,)g(F)g(\))p FK(.)75 1363
+y(In)22 b(this)h(form,)g Ft(UpperBoundMinimumDi)q(sta)q(nce)28
+b FK(returns)c(an)f(upper)h(bound)f(for)g(the)g(minimum)f(distance)j
+(of)d(the)75 1476 y(best)33 b(kno)n(wn)f(linear)i(code)f(of)f(length)h
+Ft(n)q FK(,)g(dimension)h Ft(k)e FK(o)o(v)o(er)g(\002eld)g
+Ft(F)p FK(.)54 b(It)32 b(uses)h(the)f(mechanism)i(e)o(xplained)g(in)75
+1589 y(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 355
+1590 a
+SDict begin H.S end
+ 355 1590 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 1527
+a
+SDict begin H.R end
+ 581 1527 a 581 1589 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end
+ 581 1589 a Black FK(.)p 75 1693
+1648 4 v 1764 1698 a FF(Example)p 2102 1693 V 75 1718
+4 25 v 3747 1718 V 75 1818 4 100 v 188 1788 a(gap>)44
+b(C)e(:=)h(BCHCode\()i(45,)f(7)e(\);;)p 3747 1818 V 75
+1917 V 188 1887 a(gap>)i(UpperBoundMinimumDist)q(anc)q(e\()49
+b(C)43 b(\);)p 3747 1917 V 75 2017 V 188 1987 a(9)p 3747
+2017 V 75 2117 V 188 2087 a(gap>)h(UpperBoundMinimumDist)q(anc)q(e\()49
+b(45,)43 b(23,)h(GF\(2\))g(\);)p 3747 2117 V 75 2216
+V 188 2186 a(11)p 3747 2216 V 75 2241 4 25 v 3747 2241
+V 75 2244 3675 4 v 75 2377 a
+SDict begin H.S end
+ 75 2377 a 75 2377 a
+SDict begin 13.6 H.A end
+ 75 2377
+a 75 2377 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.13) cvn H.B /DEST pdfmark end
+ 75 2377 a 117 x FJ(7.1.13)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(BoundsMinimumDistance)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2668 a Fs(\006)22 b Ft(BoundsMinimumDist)q(anc)q(e\()53
+b(n,)47 b(k,)g(F)g(\))1842 b Fr(\(function\))p Black
+216 2894 a FK(The)35 b(function)i Ft(BoundsMinimumDistan)q(ce)k
+FK(calculates)c(a)e(lo)n(wer)g(and)g(upper)h(bound)h(for)e(the)g
+(minimum)75 3007 y(distance)26 b(of)e(an)g(optimal)i(linear)f(code)g
+(with)f(w)o(ord)g(length)i Ft(n)p FK(,)d(dimension)k
+Ft(k)c FK(o)o(v)o(er)h(\002eld)g Ft(F)q FK(.)30 b(The)23
+b(function)k(returns)75 3120 y(a)e(record)h(with)f(the)g(tw)o(o)g
+(bounds)i(and)f(an)f(e)o(xplanation)j(for)d(each)h(bound.)35
+b(The)25 b(function)i Ft(Display)g FK(can)e(be)g(used)75
+3232 y(to)e(sho)n(w)h(the)g(e)o(xplanations.)216 3345
+y(The)53 b(v)n(alues)h(for)f(the)g(lo)n(wer)g(and)g(upper)i(bound)f
+(are)f(obtained)i(from)e(a)g(table.)118 b Fy(GU)m(A)-6
+b(V)f(A)51 b FK(has)i(ta-)75 3458 y(bles)42 b(containing)j(lo)n(wer)c
+(and)i(upper)f(bounds)i(for)e Fq(q)30 b Fo(=)g FK(2)p
+Fo(\()p Fq(n)i Fv(\024)e FK(257)p Fo(\))p Fp(;)10 b FK(3)p
+Fo(\()p Fq(n)33 b Fv(\024)d FK(243)p Fo(\))p Fp(;)10
+b FK(4)p Fo(\()p Fq(n)33 b Fv(\024)d FK(256)p Fo(\))p
+FK(.)84 b(\(Current)75 3571 y(as)47 b(of)h(11)g(May)f(2006.\))102
+b(These)48 b(tables)h(were)e(deri)n(v)o(ed)i(from)e(the)h(table)h(of)e
+(Brouwer)-5 b(.)101 b(\(See)47 b([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 3469 3572 a
+SDict begin H.S end
+ 3469 3572 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(Bro06)p 0.0236 0.6179 0.0894 TeXcolorrgb
+3695 3509 a
+SDict begin H.R end
+ 3695 3509 a 3695 3571 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Br) cvn H.B /ANN pdfmark end
+ 3695 3571 a Black
+2 w FK(],)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 3698
+a
+SDict begin H.S end
+ 75 3698 a 0.6179 0.0236 0.0894 TeXcolorrgb -14 x Ft
+(http://www.win.tue)q(.nl)q(/\230a)q(eb/)q(vo)q(orl)q(inc)q(od.)q(ht)q
+(ml)p 0.6179 0.0236 0.0894 TeXcolorrgb 2016 3625 a
+SDict begin H.R end
+ 2016
+3625 a 2016 3684 a
+SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.win.tue.nl/~aeb/voorlincod.html) >> /Subtype /Link H.B /ANN pdfmark end
+ 2016 3684 a Black 31 w FK(for)25 b(the)h(most)f
+(recent)i(data.\))35 b(F)o(or)24 b(codes)j(o)o(v)o(er)e(other)75
+3797 y(\002elds)f(and)g(for)f(lar)n(ger)j(w)o(ord)d(lengths,)i(tri)n
+(vial)g(bounds)g(are)f(used.)216 3910 y(The)96 b(resulting)i(record)f
+(can)g(be)f(used)g(in)g(the)g(function)j Ft(BestKnownLinearCode)j
+FK(\(see)75 4023 y Ft(BestKnownLinearCod)q(e)45 b FK(\()p
+0.0236 0.0894 0.6179 TeXcolorrgb 1025 4024 a
+SDict begin H.S end
+ 1025 4024
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.14)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1251 3961 a
+SDict begin H.R end
+ 1251 3961 a 1251 4023 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.14) cvn H.B /ANN pdfmark end
+ 1251
+4023 a Black FK(\)\))40 b(to)g(construct)h(a)e(code)i(with)e(minimum)g
+(distance)j(equal)e(to)g(the)f(lo)n(wer)75 4136 y(bound.)p
+75 4240 1648 4 v 1764 4245 a FF(Example)p 2102 4240 V
+75 4265 4 25 v 3747 4265 V 75 4364 4 100 v 188 4334 a(gap>)44
+b(bounds)g(:=)f(BoundsMinimumDistan)q(ce\()49 b(7,)43
+b(3)g(\);;)g(DisplayBoundsInfo\()48 b(bounds)d(\);)p
+3747 4364 V 75 4464 V 188 4434 a(an)e(optimal)i(linear)f([7,3,d])h
+(code)e(over)h(GF\(2\))g(has)g(d=4)p 3747 4464 V 75 4564
+V 188 4534 a(--------------------)q(---)q(---)q(---)q(---)q(--)q(---)q
+(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)
+q(---)q(--)p 3747 4564 V 75 4663 V 188 4633 a(Lb\(7,3\)=4,)i(by)d
+(shortening)i(of:)p 3747 4663 V 75 4763 V 188 4733 a(Lb\(8,4\)=4,)h(u)c
+(u+v)i(construction)i(of)d(C1)g(and)h(C2:)p 3747 4763
+V 75 4862 V 188 4833 a(Lb\(4,3\)=2,)i(dual)d(of)g(the)h(repetition)i
+(code)p 3747 4862 V 75 4962 V 188 4932 a(Lb\(4,1\)=4,)g(repetition)f
+(code)p 3747 4962 V 75 5062 V 188 5032 a(--------------------)q(---)q
+(---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q
+(---)q(---)q(---)q(---)q(---)q(---)q(--)p 3747 5062 V
+75 5161 V 188 5131 a(Ub\(7,3\)=4,)h(Griesmer)f(bound)p
+3747 5161 V 75 5261 V 188 5231 a(#)e(The)g(lower)h(bound)g(is)f(equal)h
+(to)f(the)h(upper)g(bound,)g(so)f(a)g(code)g(with)p 3747
+5261 V 75 5361 V 188 5331 a(#)g(these)h(parameters)h(is)e(optimal.)p
+3747 5361 V 75 5460 V 188 5430 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q
+(\()48 b(bounds)d(\);;)e(Display\()i(C)e(\);)p 3747 5460
+V 75 5560 V 188 5530 a(a)g(linear)h([7,3,4]2..3)i(shortened)f(code)f
+(of)p 3747 5560 V Black Black eop end end
+%%Page: 120 120
+TeXDict begin HPSdict begin 120 119 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.120) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(120)p Black 75 428 4 100 v 188 399 a FF(a)43
+b(linear)h([8,4,4]2)h(U)e(U+V)g(construction)k(code)c(of)p
+3747 428 V 75 528 V 188 498 a(U:)g(a)g(cyclic)h([4,3,2]1)h(dual)f(code)
+f(of)p 3747 528 V 75 628 V 315 598 a(a)g(cyclic)h([4,1,4]2)h
+(repetition)h(code)e(over)f(GF\(2\))p 3747 628 V 75 727
+V 188 697 a(V:)g(a)g(cyclic)h([4,1,4]2)h(repetition)h(code)e(over)f
+(GF\(2\))p 3747 727 V 75 752 4 25 v 3747 752 V 75 755
+3675 4 v 75 899 a
+SDict begin H.S end
+ 75 899 a 75 899 a
+SDict begin 13.6 H.A end
+ 75 899 a 75 899 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.2) cvn H.B /DEST pdfmark end
+
+75 899 a 149 x FM(7.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Co)o(v)o(ering)30
+b(radius)g(bounds)h(on)g(codes)p Black 75 1167 a
+SDict begin H.S end
+ 75 1167
+a 75 1167 a
+SDict begin 13.6 H.A end
+ 75 1167 a 75 1167 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.1) cvn H.B /DEST pdfmark end
+ 75 1167 a 91 x FJ(7.2.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(BoundsCo)o(v)o(eringRadius)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1433 a Fs(\006)22 b
+Ft(BoundsCoveringRad)q(ius)q(\()52 b(C)47 b(\))2167 b
+Fr(\(function\))p Black 216 1659 a Ft(BoundsCoveringRadi)q(us)33
+b FK(returns)c(a)e(list)h(of)g(inte)o(gers.)42 b(The)27
+b(\002rst)g(entry)h(of)g(this)g(list)g(is)f(the)h(maximum)f(of)75
+1771 y(some)d(lo)n(wer)g(bounds)h(for)f(the)g(co)o(v)o(ering)i(radius)f
+(of)f Ft(C)p FK(,)f(the)h(last)g(entry)h(the)f(minimum)g(of)g(some)g
+(upper)h(bounds)g(of)75 1884 y Ft(C)p FK(.)216 1997 y(If)105
+b(the)h(co)o(v)o(ering)i(radius)f(of)e Ft(C)g FK(is)h(kno)n(wn,)126
+b(a)105 b(list)h(of)g(length)h(1)e(is)g(returned.)75
+2110 y Ft(BoundsCoveringRadi)q(us)78 b FK(mak)o(es)c(use)f(of)g(the)g
+(functions)j Ft(GeneralLowerBoundCo)q(ver)q(ing)q(Ra)q(diu)q(s)75
+2223 y FK(and)24 b Ft(GeneralUpperBoundC)q(ove)q(rin)q(gRa)q(di)q(us)p
+FK(.)p 75 2340 1648 4 v 1764 2345 a FF(Example)p 2102
+2340 V 75 2365 4 25 v 3747 2365 V 75 2465 4 100 v 188
+2435 a(gap>)44 b(BoundsCoveringRadius\()49 b(BCHCode\()c(17,)f(3,)f
+(GF\(2\))h(\))e(\);)p 3747 2465 V 75 2564 V 188 2534
+a([)h(3)f(..)h(4)g(])p 3747 2564 V 75 2664 V 188 2634
+a(gap>)h(BoundsCoveringRadius\()49 b(HammingCode\()e(5,)c(GF\(2\))h(\))
+e(\);)p 3747 2664 V 75 2763 V 188 2734 a([)h(1)f(])p
+3747 2763 V 75 2788 4 25 v 3747 2788 V 75 2791 3675 4
+v 75 2925 a
+SDict begin H.S end
+ 75 2925 a 75 2925 a
+SDict begin 13.6 H.A end
+ 75 2925 a 75 2925 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.2) cvn H.B /DEST pdfmark end
+ 75
+2925 a 116 x FJ(7.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Incr)n(easeCo)o(v)
+o(eringRadiusLo)o(werBound)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3215 a Fs(\006)22 b Ft(IncreaseCoveringR)q(adi)q(usL)q(owe)q(rB)q
+(oun)q(d\()53 b(C[,)47 b(stopdist][,][start)q(wor)q(d])53
+b(\))405 b Fr(\(function\))p Black 216 3441 a Ft(IncreaseCoveringRa)q
+(diu)q(sLo)q(we)q(rBo)q(und)33 b FK(tries)27 b(to)f(increase)j(the)e
+(lo)n(wer)f(bound)i(of)f(the)g(co)o(v)o(ering)h(radius)75
+3554 y(of)19 b Ft(C)q FK(.)26 b(It)19 b(does)h(this)g(by)f(means)h(of)f
+(a)g(probabilistic)k(algorithm.)29 b(This)19 b(algorithm)i(tak)o(es)f
+(a)f(random)h(w)o(ord)g(in)f Fq(GF)7 b Fo(\()p Fq(q)p
+Fo(\))3712 3521 y Fm(n)75 3667 y FK(\(or)28 b Ft(startword)j
+FK(if)d(it)g(is)g(speci\002ed\),)j(and,)f(by)e(changing)j(random)e
+(coordinates,)k(tries)c(to)f(get)h(as)f(f)o(ar)g(from)g
+Ft(C)g FK(as)75 3780 y(possible.)j(If)22 b(changing)j(a)d(coordinate)j
+(\002nds)d(a)g(w)o(ord)h(that)g(has)g(a)f(lar)n(ger)i(distance)g(to)e
+(the)h(code)g(than)g(the)g(pre)n(vious)75 3893 y(one,)k(the)f(change)i
+(is)d(made)h(permanent,)j(and)d(the)g(algorithm)i(starts)f(all)f(o)o(v)
+o(er)g(again.)37 b(If)25 b(changing)k(a)c(coordinate)75
+4006 y(does)30 b(not)g(\002nd)g(a)f(coset)h(leader)h(that)f(is)g
+(further)h(a)o(w)o(ay)e(from)g(the)h(code,)i(then)e(the)g(change)h(is)f
+(made)f(permanent)75 4118 y(with)21 b(a)g(chance)i(of)f(1)f(in)g(100,)h
+(if)g(it)f(gets)h(the)g(w)o(ord)f(closer)i(to)f(the)f(code,)i(or)e
+(with)g(a)g(chance)i(of)f(1)f(in)g(10,)h(if)f(the)h(w)o(ord)75
+4231 y(stays)j(at)e(the)h(same)f(distance.)31 b(Otherwise,)24
+b(the)g(algorithm)h(starts)g(again)f(with)f(the)h(same)g(w)o(ord)f(as)h
+(before.)216 4344 y(If)g(the)g(algorithm)h(did)f(not)g(allo)n(w)g
+(changes)i(that)e(decrease)i(the)e(distance)i(to)d(the)h(code,)h(it)e
+(might)h(get)g(stuck)h(in)75 4457 y(a)g(sub-optimal)j(situation)g
+(\(the)e(coset)g(leader)h(corresponding)i(to)d(such)g(a)f(situation)j
+(-)d(i.e.)33 b(no)26 b(coordinate)i(of)e(this)75 4570
+y(coset)f(leader)g(can)f(be)f(changed)j(in)d(such)i(a)e(w)o(ay)g(that)i
+(we)d(get)i(at)g(a)f(lar)n(ger)i(distance)h(from)d(the)h(code)h(-)e(is)
+g(called)i(an)75 4683 y Fq(orphan)p FK(\).)216 4796 y(If)20
+b(the)h(algorithm)i(\002nds)d(a)h(w)o(ord)f(that)h(has)g(distance)i
+Ft(stopdist)g FK(to)d(the)h(code,)h(it)e(ends)i(and)f(returns)h(that)f
+(w)o(ord,)75 4909 y(which)j(can)g(be)f(used)i(for)e(further)j(in)l(v)o
+(estigations.)216 5022 y(The)h(v)n(ariable)j Ft(InfoCoveringRadius)j
+FK(can)28 b(be)g(set)g(to)f Ft(Print)i FK(to)f(print)g(the)g(maximum)g
+(distance)h(reached)75 5135 y(so)e(f)o(ar)h(e)n(v)o(ery)g(1000)g(runs.)
+41 b(The)27 b(algorithm)i(can)f(be)f(interrupted)k(with)e
+Fj(C)t(T)t(R)t(L)t FK(-)t(C)r(,)g(allo)n(wing)f(the)g(user)g(to)f(look)
+h(at)75 5248 y(the)j(w)o(ord)g(that)g(is)g(currently)i(being)f(e)o
+(xamined)g(\(called)g(`current'\),)j(or)c(to)f(change)j(the)e(chances)h
+(that)g(the)f(ne)n(w)75 5360 y(w)o(ord)26 b(is)g(made)h(permanent)h
+(\(these)f(are)g(called)g(`staychance')j(and)c(`do)n(wnchance'\).)40
+b(If)26 b(one)h(of)f(these)h(v)n(ariables)75 5473 y(is)c
+Fq(i)p FK(,)g(then)h(it)g(corresponds)j(with)c(a)g Fq(i)g
+FK(in)h(100)g(chance.)p Black Black eop end end
+%%Page: 121 121
+TeXDict begin HPSdict begin 121 120 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.121) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(121)p Black 216 399 a(At)25 b(the)h(moment,)h(the)f
+(algorithm)i(is)d(only)i(useful)g(for)f(codes)h(with)f(small)g
+(dimension,)i(where)f(small)f(means)75 511 y(that)c(the)f(elements)i
+(of)e(the)g(code)h(\002t)e(in)i(the)f(memory)-6 b(.)28
+b(It)21 b(w)o(orks)h(with)f(lar)n(ger)i(codes,)f(ho)n(we)n(v)o(er)l(,)g
+(b)n(ut)g(when)f(you)h(use)75 624 y(it)f(for)h(codes)g(with)g(lar)n(ge)
+g(dimension,)i(you)e(should)h(be)e Fq(very)h FK(patient.)30
+b(If)21 b(running)j(the)d(algorithm)j(quits)e Fy(GAP)d
+FK(\(due)75 737 y(to)29 b(memory)g(problems\),)i(you)f(can)f(change)h
+(the)f(global)h(v)n(ariable)h Ft(CRMemSize)g FK(to)e(a)f(lo)n(wer)h(v)n
+(alue.)45 b(This)29 b(might)75 850 y(cause)e(the)f(algorithm)i(to)e
+(run)g(slo)n(wer)l(,)h(b)n(ut)f(without)h(quitting)h
+Fy(GAP)p FK(.)c(The)h(only)i(w)o(ay)f(to)g(\002nd)f(out)i(the)f(best)g
+(v)n(alue)75 963 y(of)d Ft(CRMemSize)j FK(is)e(by)f(e)o(xperimenting.)p
+75 1086 1648 4 v 1764 1091 a FF(Example)p 2102 1086 V
+75 1111 4 25 v 3747 1111 V 75 1210 4 100 v 188 1180 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 1210 V 75 1310 V 188 1280 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 1310 V 75 1409
+V 188 1380 a(gap>)g(IncreaseCoveringRadiu)q(sLo)q(wer)q(Bo)q(und)q
+(\(C,)q(10\))q(;)p 3747 1409 V 75 1509 V 188 1479 a(Number)g(of)f
+(runs:)h(1000)86 b(best)44 b(distance)h(so)e(far:)h(3)p
+3747 1509 V 75 1609 V 188 1579 a(Number)g(of)f(runs:)h(2000)86
+b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1609 V 75
+1708 V 188 1678 a(Number)g(of)f(changes:)i(100)p 3747
+1708 V 75 1808 V 188 1778 a(Number)f(of)f(runs:)h(3000)86
+b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1808 V 75
+1908 V 188 1878 a(Number)g(of)f(runs:)h(4000)86 b(best)44
+b(distance)h(so)e(far:)h(3)p 3747 1908 V 75 2007 V 188
+1977 a(Number)g(of)f(runs:)h(5000)86 b(best)44 b(distance)h(so)e(far:)h
+(3)p 3747 2007 V 75 2107 V 188 2077 a(Number)g(of)f(runs:)h(6000)86
+b(best)44 b(distance)h(so)e(far:)h(3)p 3747 2107 V 75
+2206 V 188 2177 a(Number)g(of)f(runs:)h(7000)86 b(best)44
+b(distance)h(so)e(far:)h(3)p 3747 2206 V 75 2306 V 188
+2276 a(Number)g(of)f(changes:)i(200)p 3747 2306 V 75
+2406 V 188 2376 a(Number)f(of)f(runs:)h(8000)86 b(best)44
+b(distance)h(so)e(far:)h(3)p 3747 2406 V 75 2505 V 188
+2475 a(Number)g(of)f(runs:)h(9000)86 b(best)44 b(distance)h(so)e(far:)h
+(3)p 3747 2505 V 75 2605 V 188 2575 a(Number)g(of)f(runs:)h(10000)87
+b(best)43 b(distance)j(so)d(far:)g(3)p 3747 2605 V 75
+2705 V 188 2675 a(Number)h(of)f(changes:)i(300)p 3747
+2705 V 75 2804 V 188 2774 a(Number)f(of)f(runs:)h(11000)87
+b(best)43 b(distance)j(so)d(far:)g(3)p 3747 2804 V 75
+2904 V 188 2874 a(Number)h(of)f(runs:)h(12000)87 b(best)43
+b(distance)j(so)d(far:)g(3)p 3747 2904 V 75 3003 V 188
+2974 a(Number)h(of)f(runs:)h(13000)87 b(best)43 b(distance)j(so)d(far:)
+g(3)p 3747 3003 V 75 3103 V 188 3073 a(Number)h(of)f(changes:)i(400)p
+3747 3103 V 75 3203 V 188 3173 a(Number)f(of)f(runs:)h(14000)87
+b(best)43 b(distance)j(so)d(far:)g(3)p 3747 3203 V 75
+3302 V 188 3272 a(user)h(interrupt)h(at...)p 3747 3302
+V 75 3402 V 188 3372 a(#)p 3747 3402 V 75 3502 V 188
+3472 a(#)e(used)g(ctrl-c)i(to)e(break)h(out)f(of)g(execution)p
+3747 3502 V 75 3601 V 188 3571 a(#)p 3747 3601 V 75 3701
+V 188 3671 a(...)g(called)i(from)p 3747 3701 V 75 3801
+V 188 3771 a(IncreaseCoveringRadi)q(usL)q(owe)q(rBo)q(und)q(\()k(code,)
+44 b(-1,)f(current)i(\))d(called)j(from)p 3747 3801 V
+75 3900 V 230 3870 a(function\()h(arguments)f(\))e(called)h(from)g
+(read-eval-loop)p 3747 3900 V 75 4000 V 188 3970 a(Entering)h(break)f
+(read-eval-print)j(loop)d(...)p 3747 4000 V 75 4099 V
+188 4069 a(you)f(can)h('quit;')g(to)f(quit)h(to)f(outer)h(loop,)g(or)p
+3747 4099 V 75 4199 V 188 4169 a(you)f(can)h('return;')h(to)e(continue)
+p 3747 4199 V 75 4299 V 188 4269 a(brk>)h(current;)p
+3747 4299 V 75 4398 V 188 4368 a([)f(Z\(2\)\2100,)h(Z\(2\)\2100,)h
+(Z\(2\)\2100,)g(Z\(2\)\2100,)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g
+(Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100)g(])p 3747 4398
+V 75 4498 V 188 4468 a(brk>)p 3747 4498 V 75 4598 V 188
+4568 a(gap>)f(CoveringRadius\(C\);)p 3747 4598 V 75 4697
+V 188 4667 a(3)p 3747 4697 V 75 4797 V 3747 4797 V 75
+4822 4 25 v 3747 4822 V 75 4825 3675 4 v 75 4958 a
+SDict begin H.S end
+ 75
+4958 a 75 4958 a
+SDict begin 13.6 H.A end
+ 75 4958 a 75 4958 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.3) cvn H.B /DEST pdfmark end
+ 75 4958 a 116 x
+FJ(7.2.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Exhausti)o(v)o(eSear)n(chCo)o
+(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5248
+a Fs(\006)22 b Ft(ExhaustiveSearchC)q(ove)q(rin)q(gRa)q(di)q(us\()53
+b(C)47 b(\))1703 b Fr(\(function\))p Black 216 5474 a
+Ft(ExhaustiveSearchCo)q(ver)q(ing)q(Ra)q(diu)q(s)30 b
+FK(does)d(an)e(e)o(xhausti)n(v)o(e)i(search)g(to)e(\002nd)g(the)g(co)o
+(v)o(ering)i(radius)g(of)e Ft(C)p FK(.)75 5587 y(Ev)o(ery)j(time)g(a)g
+(coset)h(leader)g(of)f(a)g(coset)h(with)f(weight)h Fq(w)e
+FK(is)h(found,)i(the)f(function)h(tries)f(to)f(\002nd)g(a)g(coset)h
+(leader)p Black Black eop end end
+%%Page: 122 122
+TeXDict begin HPSdict begin 122 121 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.122) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(122)p Black 75 399 a(of)30 b(a)f(coset)i(with)e(weight)i
+Fq(w)15 b Fo(+)g FK(1.)46 b(It)29 b(does)i(this)f(by)g(enumerating)i
+(all)e(w)o(ords)g(of)g(weight)g Fq(w)15 b Fo(+)g FK(1,)30
+b(and)g(checking)75 511 y(whether)d(a)e(w)o(ord)h(is)g(a)f(coset)i
+(leader)-5 b(.)36 b(The)26 b(start)g(weight)h(is)e(the)h(current)i(kno)
+n(wn)e(lo)n(wer)f(bound)j(on)e(the)g(co)o(v)o(ering)75
+624 y(radius.)p 75 728 1648 4 v 1764 733 a FF(Example)p
+2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188
+823 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 853 V 75 952 V 188 923 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 952 V 75 1052
+V 188 1022 a(gap>)g(ExhaustiveSearchCover)q(ing)q(Rad)q(iu)q(s\(C)q
+(\);)p 3747 1052 V 75 1152 V 188 1122 a(Trying)g(3)f(...)p
+3747 1152 V 75 1251 V 188 1221 a([)g(3)f(..)h(5)g(])p
+3747 1251 V 75 1351 V 188 1321 a(gap>)h(CoveringRadius\(C\);)p
+3747 1351 V 75 1451 V 188 1421 a(3)p 3747 1451 V 75 1550
+V 3747 1550 V 75 1575 4 25 v 3747 1575 V 75 1578 3675
+4 v 75 1711 a
+SDict begin H.S end
+ 75 1711 a 75 1711 a
+SDict begin 13.6 H.A end
+ 75 1711 a 75 1711 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.4) cvn H.B /DEST pdfmark end
+
+75 1711 a 117 x FJ(7.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(GeneralLo)o(werBoundCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 2002 a Fs(\006)22 b Ft(GeneralLowerBound)q(Cov)q(eri)q
+(ngR)q(ad)q(ius)q(\()52 b(C)47 b(\))1657 b Fr(\(function\))p
+Black 216 2228 a Ft(GeneralLowerBoundC)q(ove)q(rin)q(gR)q(adi)q(us)29
+b FK(returns)c(a)e(lo)n(wer)g(bound)i(on)e(the)h(co)o(v)o(ering)g
+(radius)h(of)e Ft(C)q FK(.)k(It)c(uses)75 2341 y(as)j(man)o(y)g
+(functions)j(which)e(names)g(start)g(with)f Ft(LowerBoundCoveringR)q
+(adi)q(us)32 b FK(as)26 b(possible)j(to)d(\002nd)g(the)h(best)75
+2454 y(kno)n(wn)k(lo)n(wer)h(bound)g(\(at)f(least)h(that)g
+Fy(GU)m(A)-6 b(V)f(A)29 b FK(kno)n(ws)j(of\))f(together)i(with)e
+(tables)h(for)g(the)f(co)o(v)o(ering)i(radius)f(of)75
+2566 y(binary)25 b(linear)g(codes)f(with)g(length)h(not)f(greater)h
+(than)f(64.)p 75 2689 1648 4 v 1764 2694 a FF(Example)p
+2102 2689 V 75 2714 4 25 v 3747 2714 V 75 2814 4 100
+v 188 2784 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q
+(\)\);)p 3747 2814 V 75 2913 V 188 2883 a(a)85 b([10,5,?])45
+b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747
+2913 V 75 3013 V 188 2983 a(gap>)g(GeneralLowerBoundCove)q(rin)q(gRa)q
+(di)q(us\()q(C\);)p 3747 3013 V 75 3113 V 188 3083 a(2)p
+3747 3113 V 75 3212 V 188 3182 a(gap>)g(CoveringRadius\(C\);)p
+3747 3212 V 75 3312 V 188 3282 a(3)p 3747 3312 V 75 3411
+V 3747 3411 V 75 3436 4 25 v 3747 3436 V 75 3439 3675
+4 v 75 3573 a
+SDict begin H.S end
+ 75 3573 a 75 3573 a
+SDict begin 13.6 H.A end
+ 75 3573 a 75 3573 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.5) cvn H.B /DEST pdfmark end
+
+75 3573 a 116 x FJ(7.2.5)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(GeneralUpperBoundCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3863 a Fs(\006)22 b Ft(GeneralUpperBound)q(Cov)q(eri)q
+(ngR)q(ad)q(ius)q(\()52 b(C)47 b(\))1657 b Fr(\(function\))p
+Black 216 4089 a Ft(GeneralUpperBoundC)q(ove)q(rin)q(gR)q(adi)q(us)39
+b FK(returns)c(an)f(upper)g(bound)h(on)f(the)f(co)o(v)o(ering)i(radius)
+g(of)e Ft(C)q FK(.)57 b(It)75 4202 y(uses)26 b(as)g(man)o(y)f
+(functions)j(which)e(names)g(start)g(with)g Ft(UpperBoundCoveringR)q
+(adi)q(us)31 b FK(as)26 b(possible)h(to)f(\002nd)f(the)75
+4315 y(best)f(kno)n(wn)g(upper)h(bound)g(\(at)e(least)i(that)f
+Fy(GU)m(A)-6 b(V)f(A)22 b FK(kno)n(ws)h(of\).)p 75 4437
+1648 4 v 1764 4442 a FF(Example)p 2102 4437 V 75 4462
+4 25 v 3747 4462 V 75 4562 4 100 v 188 4532 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 4562 V 75 4662 V 188 4632 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 4662 V 75 4761
+V 188 4731 a(gap>)g(GeneralUpperBoundCove)q(rin)q(gRa)q(di)q(us\()q
+(C\);)p 3747 4761 V 75 4861 V 188 4831 a(4)p 3747 4861
+V 75 4960 V 188 4930 a(gap>)g(CoveringRadius\(C\);)p
+3747 4960 V 75 5060 V 188 5030 a(3)p 3747 5060 V 75 5160
+V 3747 5160 V 75 5185 4 25 v 3747 5185 V 75 5188 3675
+4 v Black Black eop end end
+%%Page: 123 123
+TeXDict begin HPSdict begin 123 122 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.123) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(123)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.6) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.2.6)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o(eringRadiusSpher)n(eCo)o(v)o
+(ering)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22
+b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sSp)q(he)q(reC)q(ove)q(rin)q(g\()
+53 b(n,)47 b(M[,)g(F,])h(false)g(\))637 b Fr(\(function\))p
+Black 216 799 a FK(This)18 b(command)h(can)f(also)h(be)f(called)h
+(using)h(the)e(syntax)i Ft(LowerBoundCoveringR)q(adi)q(usS)q(ph)q(ere)q
+(Cov)q(eri)q(ng)q(\()75 912 y(n,)47 b(r,)g([F,])h(true)g(\))p
+FK(.)82 b(If)41 b(the)h(last)g(ar)n(gument)h(of)f Ft
+(LowerBoundCoveringR)q(adi)q(us)q(Sph)q(ere)q(Cov)q(er)q(ing)47
+b FK(is)75 1024 y Ft(false)r FK(,)c(then)e(it)f(returns)i(a)e(lo)n(wer)
+h(bound)g(for)g(the)f(co)o(v)o(ering)i(radius)g(of)e(a)g(code)h(of)g
+(size)f Ft(M)g FK(and)h(length)h Ft(n)p FK(.)75 1137
+y(Otherwise,)24 b(it)f(returns)j(a)d(lo)n(wer)g(bound)i(for)f(the)g
+(size)g(of)f(a)g(code)i(of)e(length)i Ft(n)e FK(and)h(co)o(v)o(ering)h
+(radius)g Ft(r)q FK(.)216 1250 y Ft(F)k FK(is)f(the)i(\002eld)e(o)o(v)o
+(er)h(which)h(the)f(code)h(is)e(de\002ned.)46 b(If)29
+b Ft(F)f FK(is)h(omitted,)i(it)e(is)g(assumed)h(that)f(the)h(code)f(is)
+g(o)o(v)o(er)75 1363 y Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p
+FK(.)29 b(The)23 b(bound)i(is)e(computed)i(according)i(to)c(the)h
+(sphere)h(co)o(v)o(ering)g(bound:)1614 1567 y Fq(M)16
+b Fv(\001)8 b Fq(V)1790 1581 y Fm(q)1828 1567 y Fo(\()p
+Fq(n)p Fp(;)i Fq(r)r Fo(\))22 b Fv(\025)e Fq(q)2173 1530
+y Fm(n)75 1772 y FK(where)f Fq(V)366 1786 y Fm(q)404
+1772 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))24 b FK(is)f(the)h(size)g
+(of)g(a)f(sphere)i(of)e(radius)i Fq(r)g FK(in)f Fq(GF)7
+b Fo(\()p Fq(q)p Fo(\))2159 1739 y Fm(n)2197 1772 y FK(.)p
+75 1902 1648 4 v 1764 1907 a FF(Example)p 2102 1902 V
+75 1927 4 25 v 3747 1927 V 75 2027 4 100 v 188 1997 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 2027 V 75 2126 V 188 2096 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 2126 V 75 2226
+V 188 2196 a(gap>)g(Size\(C\);)p 3747 2226 V 75 2325
+V 188 2296 a(32)p 3747 2325 V 75 2425 V 188 2395 a(gap>)g
+(CoveringRadius\(C\);)p 3747 2425 V 75 2525 V 188 2495
+a(3)p 3747 2525 V 75 2624 V 188 2594 a(gap>)g(LowerBoundCoveringRad)q
+(ius)q(Sph)q(er)q(eCo)q(ver)q(ing)q(\(10)q(,32)q(,GF)q(\(2\))q(,fa)q
+(lse)q(\);)p 3747 2624 V 75 2724 V 188 2694 a(2)p 3747
+2724 V 75 2824 V 188 2794 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Sph)q
+(er)q(eCo)q(ver)q(ing)q(\(10)q(,3,)q(GF\()q(2\),)q(tru)q(e\);)p
+3747 2824 V 75 2923 V 188 2893 a(6)p 3747 2923 V 75 3023
+V 3747 3023 V 75 3048 4 25 v 3747 3048 V 75 3051 3675
+4 v 75 3184 a
+SDict begin H.S end
+ 75 3184 a 75 3184 a
+SDict begin 13.6 H.A end
+ 75 3184 a 75 3184 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.7) cvn H.B /DEST pdfmark end
+
+75 3184 a 116 x FJ(7.2.7)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(Lo)o(werBoundCo)o(v)o(eringRadiusV)-9 b(anW)j(ee1)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3475 a Fs(\006)22 b
+Ft(LowerBoundCoverin)q(gRa)q(diu)q(sVa)q(nW)q(ee1)q(\()52
+b(n,)47 b(M[,)h(F,])f(false)i(\))961 b Fr(\(function\))p
+Black 216 3700 a FK(This)31 b(command)g(can)g(also)h(be)f(called)h
+(using)g(the)f(syntax)h Ft(LowerBoundCovering)q(Ra)q(diu)q(sVa)q(nWe)q
+(e1)q(\()52 b(n,)75 3813 y(r,)47 b([F,])h(true)g(\))p
+FK(.)j(If)31 b(the)h(last)g(ar)n(gument)h(of)e Ft(LowerBoundCoverin)q
+(gRa)q(diu)q(sVa)q(nW)q(ee1)37 b FK(is)31 b Ft(false)r
+FK(,)h(then)g(it)75 3926 y(returns)26 b(a)e(lo)n(wer)g(bound)i(for)e
+(the)h(co)o(v)o(ering)h(radius)f(of)g(a)e(code)j(of)e(size)h
+Ft(M)f FK(and)g(length)i Ft(n)p FK(.)31 b(Otherwise,)25
+b(it)f(returns)i(a)75 4039 y(lo)n(wer)d(bound)i(for)f(the)g(size)g(of)g
+(a)f(code)h(of)f(length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g
+Ft(r)p FK(.)216 4152 y Ft(F)k FK(is)f(the)i(\002eld)e(o)o(v)o(er)h
+(which)h(the)f(code)h(is)e(de\002ned.)46 b(If)29 b Ft(F)f
+FK(is)h(omitted,)i(it)e(is)g(assumed)h(that)f(the)h(code)f(is)g(o)o(v)o
+(er)75 4265 y Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)216
+4378 y(The)23 b(V)-10 b(an)23 b(W)-7 b(ee)23 b(bound)i(is)f(an)f(impro)
+o(v)o(ement)i(of)e(the)h(sphere)h(co)o(v)o(ering)g(bound:)997
+4656 y Fq(M)16 b Fv(\001)1127 4501 y Fc(\()1195 4656
+y Fq(V)1246 4670 y Fm(q)1284 4656 y Fo(\()p Fq(n)p Fp(;)10
+b Fq(r)r Fo(\))j Fv(\000)1627 4515 y Fc(\000)1668 4549
+y Fm(n)1671 4620 y(r)1702 4515 y Fc(\001)p 1579 4635
+213 4 v 1579 4721 a Fv(d)1629 4685 y Fm(n)p Fh(\000)p
+Fm(r)p 1629 4700 113 4 v 1629 4752 a(r)r Fk(+)p Fr(1)1751
+4721 y Fv(e)1812 4528 y Fc(\022)o(\030)1941 4595 y Fq(n)g
+Fo(+)g FK(1)p 1941 4635 187 4 v 1945 4719 a Fq(r)i Fo(+)e
+FK(1)2138 4528 y Fc(\031)2204 4656 y Fv(\000)2297 4595
+y Fq(n)g Fo(+)g FK(1)p 2297 4635 V 2301 4719 a Fq(r)i
+Fo(+)e FK(1)2494 4528 y Fc(\023)2561 4501 y(\))2654 4656
+y Fv(\025)20 b Fq(q)2790 4619 y Fm(n)p 75 4972 1648 4
+v 1764 4977 a FF(Example)p 2102 4972 V 75 4997 4 25 v
+3747 4997 V 75 5097 4 100 v 188 5067 a(gap>)44 b
+(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747
+5097 V 75 5197 V 188 5167 a(a)85 b([10,5,?])45 b(randomly)g(generated)g
+(code)f(over)g(GF\(2\))p 3747 5197 V 75 5296 V 188 5266
+a(gap>)g(Size\(C\);)p 3747 5296 V 75 5396 V 188 5366
+a(32)p 3747 5396 V 75 5495 V 188 5466 a(gap>)g(CoveringRadius\(C\);)p
+3747 5495 V 75 5595 V 188 5565 a(3)p 3747 5595 V Black
+Black eop end end
+%%Page: 124 124
+TeXDict begin HPSdict begin 124 123 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.124) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(124)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(LowerBoundCoveringRad)q(ius)q(Van)q(We)q(e1\()q(10,)q(32,)q(GF\()q
+(2\),)q(fal)q(se\))q(;)p 3747 428 V 75 528 V 188 498
+a(2)p 3747 528 V 75 628 V 188 598 a(gap>)g(LowerBoundCoveringRad)q(ius)
+q(Van)q(We)q(e1\()q(10,)q(3,G)q(F\(2)q(\),t)q(rue)q(\);)p
+3747 628 V 75 727 V 188 697 a(6)p 3747 727 V 75 827 V
+3747 827 V 75 852 4 25 v 3747 852 V 75 855 3675 4 v 75
+984 a
+SDict begin H.S end
+ 75 984 a 75 984 a
+SDict begin 13.6 H.A end
+ 75 984 a 75 984 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.8) cvn H.B /DEST pdfmark end
+ 75 984 a 116
+x FJ(7.2.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o
+(eringRadiusV)-9 b(anW)j(ee2)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1274 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sVa)q(nW)q
+(ee2)q(\()52 b(n,)47 b(M,)h(false)g(\))1193 b Fr(\(function\))p
+Black 216 1500 a FK(This)20 b(command)i(can)f(also)g(be)f(called)i
+(using)g(the)e(syntax)j Ft(LowerBoundCoveringRa)q(di)q(usV)q(anW)q(ee2)
+q(\()53 b(n,)47 b(r)75 1613 y([,true])i(\))p FK(.)40
+b(If)27 b(the)h(last)g(ar)n(gument)h(of)f Ft(LowerBoundCoveringR)q(adi)
+q(usV)q(an)q(Wee)q(2)33 b FK(is)27 b Ft(false)r FK(,)g(then)h(it)g
+(returns)75 1726 y(a)e(lo)n(wer)g(bound)i(for)f(the)g(co)o(v)o(ering)h
+(radius)f(of)g(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h
+Ft(n)q FK(.)36 b(Otherwise,)28 b(it)e(returns)i(a)e(lo)n(wer)75
+1839 y(bound)f(for)f(the)g(size)g(of)f(a)g(code)i(of)e(length)i
+Ft(n)e FK(and)h(co)o(v)o(ering)h(radius)g Ft(r)p FK(.)216
+1952 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.)k(It)24
+b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)765
+2194 y Fq(M)16 b Fv(\001)904 2053 y Fc(\000\000)983 2127
+y Fq(V)1034 2141 y Fr(2)1071 2127 y Fo(\()p Fq(n)p Fp(;)10
+b FK(2)p Fo(\))j Fv(\000)1374 2091 y Fr(1)p 1374 2106
+34 4 v 1374 2158 a(2)1417 2127 y Fo(\()p Fq(r)i Fo(+)e
+FK(2)p Fo(\)\()p Fq(r)i Fv(\000)e FK(1)p Fo(\))1915 2053
+y Fc(\001)1963 2127 y Fq(V)2014 2141 y Fr(2)2051 2127
+y Fo(\()p Fq(n)p Fp(;)d Fq(r)r Fo(\))j(+)g Fu(e)-5 b
+Fq(V)2421 2141 y Fr(2)2460 2127 y Fo(\()p Fq(n)p Fp(;)10
+b Fq(r)15 b Fv(\000)e FK(2)p Fo(\))2789 2053 y Fc(\001)p
+904 2173 1928 4 v 1301 2264 a Fo(\()-5 b Fq(V)1382 2278
+y Fr(2)1420 2264 y Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fo(\))j
+Fv(\000)1722 2228 y Fr(1)p 1722 2243 34 4 v 1722 2295
+a(2)1765 2264 y Fo(\()p Fq(r)i Fo(+)e FK(2)p Fo(\)\()p
+Fq(r)i Fv(\000)e FK(1)p Fo(\))g(+)g Fu(e)p Fo(\))2862
+2194 y Fv(\025)19 b FK(2)2997 2156 y Fm(n)3035 2194 y
+Fp(;)75 2432 y FK(where)929 2573 y Fu(e)h Fo(=)1080 2445
+y Fc(\022)1147 2512 y Fq(r)15 b Fo(+)e FK(2)1214 2636
+y(2)1326 2445 y Fc(\023)d(\030\022)1523 2512 y Fq(n)j
+Fv(\000)g Fq(r)i Fo(+)e FK(1)1660 2636 y(2)1843 2445
+y Fc(\023)1910 2573 y Fp(=)1955 2445 y Fc(\022)2022 2512
+y Fq(r)i Fo(+)e FK(2)2089 2636 y(2)2201 2445 y Fc(\023\031)2333
+2573 y Fv(\000)2417 2445 y Fc(\022)2484 2512 y Fq(n)g
+Fv(\000)g Fq(r)i Fo(+)e FK(1)2621 2636 y(2)2804 2445
+y Fc(\023)2871 2573 y Fp(:)p 75 2806 1648 4 v 1764 2811
+a FF(Example)p 2102 2806 V 75 2831 4 25 v 3747 2831 V
+75 2930 4 100 v 188 2901 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q
+(,GF)q(\(2)q(\)\);)p 3747 2930 V 75 3030 V 188 3000 a(a)85
+b([10,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p
+3747 3030 V 75 3130 V 188 3100 a(gap>)g(Size\(C\);)p
+3747 3130 V 75 3229 V 188 3199 a(32)p 3747 3229 V 75
+3329 V 188 3299 a(gap>)g(CoveringRadius\(C\);)p 3747
+3329 V 75 3429 V 188 3399 a(3)p 3747 3429 V 75 3528 V
+188 3498 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Van)q(We)q(e2\()q(10,)q
+(32,)q(fal)q(se\))q(;)p 3747 3528 V 75 3628 V 188 3598
+a(2)p 3747 3628 V 75 3727 V 188 3698 a(gap>)g(LowerBoundCoveringRad)q
+(ius)q(Van)q(We)q(e2\()q(10,)q(3,t)q(rue)q(\);)p 3747
+3727 V 75 3827 V 188 3797 a(7)p 3747 3827 V 75 3927 V
+3747 3927 V 75 3952 4 25 v 3747 3952 V 75 3955 3675 4
+v 75 4084 a
+SDict begin H.S end
+ 75 4084 a 75 4084 a
+SDict begin 13.6 H.A end
+ 75 4084 a 75 4084 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.9) cvn H.B /DEST pdfmark end
+ 75
+4084 a 116 x FJ(7.2.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o
+(v)o(eringRadiusCountingExcess)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4374 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sCo)q(un)q
+(tin)q(gEx)q(ces)q(s\()53 b(n,)47 b(M,)g(false)h(\))869
+b Fr(\(function\))p Black 216 4600 a FK(This)35 b(command)g(can)g(also)
+g(be)g(called)h(with)e Ft(LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q
+(ing)q(Exc)q(ess)q(\()53 b(n,)47 b(r)75 4713 y([,true])i(\))p
+FK(.)29 b(If)23 b(the)h(last)h(ar)n(gument)g(of)f Ft
+(LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)30
+b FK(is)23 b Ft(false)r FK(,)g(then)h(it)75 4826 y(returns)i(a)e(lo)n
+(wer)g(bound)i(for)e(the)h(co)o(v)o(ering)h(radius)f(of)g(a)e(code)j
+(of)e(size)h Ft(M)f FK(and)g(length)i Ft(n)p FK(.)31
+b(Otherwise,)25 b(it)f(returns)i(a)75 4939 y(lo)n(wer)d(bound)i(for)f
+(the)g(size)g(of)g(a)f(code)h(of)f(length)i Ft(n)f FK(and)g(co)o(v)o
+(ering)h(radius)g Ft(r)p FK(.)216 5052 y(This)e(bound)i(only)g(w)o
+(orks)f(for)g(binary)h(codes.)k(It)24 b(is)f(based)i(on)e(the)h(follo)n
+(wing)h(inequality:)1139 5231 y Fq(M)16 b Fv(\001)d Fo(\()p
+Fu(r)-5 b Fq(V)1400 5245 y Fr(2)1437 5231 y Fo(\()p Fq(n)p
+Fp(;)10 b Fq(r)r Fo(\))j(+)g Fu(e)-5 b Fq(V)1807 5245
+y Fr(2)1846 5231 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)15 b
+Fv(\000)e FK(1)p Fo(\)\))21 b Fv(\025)f Fo(\()p Fu(r)13
+b Fo(+)g Fu(e)p Fo(\))p FK(2)2624 5194 y Fm(n)2661 5231
+y Fp(;)75 5410 y FK(where)1374 5552 y Fu(e)20 b Fo(=)g(\()p
+Fq(r)15 b Fo(+)e FK(1)p Fo(\))1784 5423 y Fc(\030)1848
+5490 y Fq(n)g Fo(+)g FK(1)p 1848 5531 187 4 v 1852 5614
+a Fq(r)i Fo(+)e FK(1)2044 5423 y Fc(\031)2110 5552 y
+Fv(\000)g Fo(\()p Fq(n)g Fo(+)g FK(1)p Fo(\))p Black
+Black eop end end
+%%Page: 125 125
+TeXDict begin HPSdict begin 125 124 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.125) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(125)p Black 75 399 a(and)1357 544 y Fu(r)20
+b Fo(=)1518 416 y Fc(\032)1627 488 y Fq(n)13 b Fv(\000)g
+FK(3)g Fo(+)1920 452 y Fr(2)p 1920 467 34 4 v 1920 519
+a Fm(n)1963 488 y Fp(;)147 b FK(if)23 b Fq(r)g Fo(=)d
+FK(2)1627 601 y Fq(n)13 b Fv(\000)g Fq(r)i Fv(\000)e
+FK(1)p Fp(;)146 b FK(if)24 b Fq(r)e Fv(\025)e FK(3)p
+Fp(:)p 75 776 1648 4 v 1764 781 a FF(Example)p 2102 776
+V 75 800 4 25 v 3747 800 V 75 900 4 100 v 188 870 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 900 V 75 1000 V 188 970 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 1000 V 75 1099
+V 188 1069 a(gap>)g(Size\(C\);)p 3747 1099 V 75 1199
+V 188 1169 a(32)p 3747 1199 V 75 1299 V 188 1269 a(gap>)g
+(CoveringRadius\(C\);)p 3747 1299 V 75 1398 V 188 1368
+a(3)p 3747 1398 V 75 1498 V 188 1468 a(gap>)g(LowerBoundCoveringRad)q
+(ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)q(\(10)q(,32)q(,fa)q(lse)q(\);)p
+3747 1498 V 75 1597 V 188 1568 a(0)p 3747 1597 V 75 1697
+V 188 1667 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Cou)q(nt)q(ing)q(Exc)
+q(ess)q(\(10)q(,3,)q(tru)q(e\);)p 3747 1697 V 75 1797
+V 188 1767 a(7)p 3747 1797 V 75 1896 V 3747 1896 V 75
+1921 4 25 v 3747 1921 V 75 1924 3675 4 v 75 2053 a
+SDict begin H.S end
+ 75
+2053 a 75 2053 a
+SDict begin 13.6 H.A end
+ 75 2053 a 75 2053 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.10) cvn H.B /DEST pdfmark end
+ 75 2053 a 117 x
+FJ(7.2.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o
+(eringRadiusEmbedded1)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2344 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sEm)q(be)q
+(dde)q(d1\()53 b(n,)47 b(M,)g(false)h(\))1101 b Fr(\(function\))p
+Black 216 2570 a FK(This)68 b(command)g(can)g(also)h(be)e(called)i
+(with)f Ft(LowerBoundCoveringR)q(adi)q(us)q(Emb)q(edd)q(ed1)q(\()53
+b(n,)47 b(r)75 2683 y([,true])i(\))p FK(.)k(If)32 b(the)g(last)h(ar)n
+(gument)h(of)e Ft(LowerBoundCoveringRa)q(di)q(usE)q(mbe)q(dde)q(d1)38
+b FK(is)31 b('f)o(alse',)36 b(then)c(it)g(re-)75 2795
+y(turns)c(a)g(lo)n(wer)f(bound)i(for)f(the)f(co)o(v)o(ering)i(radius)g
+(of)f(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h
+Ft(n)q FK(.)39 b(Otherwise,)29 b(it)f(returns)h(a)75
+2908 y(lo)n(wer)23 b(bound)i(for)f(the)g(size)g(of)g(a)f(code)h(of)f
+(length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g Ft(r)p
+FK(.)216 3021 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.)
+k(It)24 b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)1007
+3247 y Fq(M)16 b Fv(\001)1137 3119 y Fc(\022)1198 3247
+y Fq(V)1249 3261 y Fr(2)1287 3247 y Fo(\()p Fq(n)p Fp(;)10
+b Fq(r)r Fo(\))j Fv(\000)1571 3119 y Fc(\022)1639 3185
+y FK(2)p Fq(r)1662 3309 y(r)1722 3119 y Fc(\023\023)1876
+3247 y Fv(\025)20 b FK(2)2012 3209 y Fm(n)2062 3247 y
+Fv(\000)13 b Fq(A)p Fo(\()p Fq(n)p Fp(;)d FK(2)p Fq(r)15
+b Fo(+)e FK(1)p Fo(\))2576 3119 y Fc(\022)2643 3185 y
+FK(2)p Fq(r)2666 3309 y(r)2726 3119 y Fc(\023)2793 3247
+y Fp(;)75 3475 y FK(where)27 b Fq(A)p Fo(\()p Fq(n)p
+Fp(;)10 b Fq(d)5 b Fo(\))27 b FK(denotes)h(the)f(maximal)h(cardinality)
+h(of)e(a)f(\(binary\))j(code)e(of)g(length)h Fq(n)e FK(and)i(minimum)e
+(distance)75 3588 y Fq(d)5 b FK(.)28 b(The)23 b(function)j
+Ft(UpperBound)g FK(is)e(used)g(to)f(compute)i(this)f(v)n(alue.)216
+3701 y(Sometimes)295 b Ft(LowerBoundCovering)q(Rad)q(ius)q(Em)q(bed)q
+(ded)q(1)300 b FK(is)295 b(better)g(than)75 3814 y Ft
+(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p
+FK(,)28 b(sometimes)d(it)e(is)h(the)g(other)g(w)o(ay)f(around.)p
+75 3911 1648 4 v 1764 3916 a FF(Example)p 2102 3911 V
+75 3936 4 25 v 3747 3936 V 75 4036 4 100 v 188 4006 a(gap>)44
+b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p
+3747 4036 V 75 4135 V 188 4105 a(a)85 b([10,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 4135 V 75 4235
+V 188 4205 a(gap>)g(Size\(C\);)p 3747 4235 V 75 4335
+V 188 4305 a(32)p 3747 4335 V 75 4434 V 188 4404 a(gap>)g
+(CoveringRadius\(C\);)p 3747 4434 V 75 4534 V 188 4504
+a(3)p 3747 4534 V 75 4633 V 188 4604 a(gap>)g(LowerBoundCoveringRad)q
+(ius)q(Emb)q(ed)q(ded)q(1\(1)q(0,3)q(2,f)q(als)q(e\);)p
+3747 4633 V 75 4733 V 188 4703 a(2)p 3747 4733 V 75 4833
+V 188 4803 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Emb)q(ed)q(ded)q
+(1\(1)q(0,3)q(,tr)q(ue\))q(;)p 3747 4833 V 75 4932 V
+188 4902 a(7)p 3747 4932 V 75 5032 V 3747 5032 V 75 5057
+4 25 v 3747 5057 V 75 5060 3675 4 v 75 5189 a
+SDict begin H.S end
+ 75 5189
+a 75 5189 a
+SDict begin 13.6 H.A end
+ 75 5189 a 75 5189 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.11) cvn H.B /DEST pdfmark end
+ 75 5189 a 116 x FJ(7.2.11)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o
+(eringRadiusEmbedded2)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5479 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sEm)q(be)q
+(dde)q(d2\()53 b(n,)47 b(M,)g(false)h(\))1101 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 126 126
+TeXDict begin HPSdict begin 126 125 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.126) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(126)p Black 216 399 a(This)68 b(command)g(can)g(also)h
+(be)e(called)i(with)f Ft(LowerBoundCoveringR)q(adi)q(us)q(Emb)q(edd)q
+(ed2)q(\()53 b(n,)47 b(r)75 511 y([,true])i(\))p FK(.)k(If)32
+b(the)g(last)h(ar)n(gument)h(of)e Ft(LowerBoundCoveringRa)q(di)q(usE)q
+(mbe)q(dde)q(d2)38 b FK(is)31 b('f)o(alse',)36 b(then)c(it)g(re-)75
+624 y(turns)c(a)g(lo)n(wer)f(bound)i(for)f(the)f(co)o(v)o(ering)i
+(radius)g(of)f(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h
+Ft(n)q FK(.)39 b(Otherwise,)29 b(it)f(returns)h(a)75
+737 y(lo)n(wer)23 b(bound)i(for)f(the)g(size)g(of)g(a)f(code)h(of)f
+(length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g Ft(r)p
+FK(.)216 850 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.)k
+(It)24 b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)951
+1101 y Fq(M)16 b Fv(\001)1081 973 y Fc(\022)1143 1101
+y Fq(V)1194 1115 y Fr(2)1232 1101 y Fo(\()p Fq(n)p Fp(;)10
+b Fq(r)r Fo(\))j Fv(\000)1526 1040 y FK(3)p 1526 1080
+46 4 v 1526 1164 a(2)1582 973 y Fc(\022)1649 1040 y FK(2)p
+Fq(r)1671 1164 y(r)1732 973 y Fc(\023\023)1886 1101 y
+Fv(\025)20 b FK(2)2022 1064 y Fm(n)2072 1101 y Fv(\000)13
+b FK(2)p Fq(A)p Fo(\()p Fq(n)p Fp(;)d FK(2)p Fq(r)15
+b Fo(+)e FK(1)p Fo(\))2631 973 y Fc(\022)2699 1040 y
+FK(2)p Fq(r)2721 1164 y(r)2782 973 y Fc(\023)2848 1101
+y Fp(;)75 1355 y FK(where)27 b Fq(A)p Fo(\()p Fq(n)p
+Fp(;)10 b Fq(d)5 b Fo(\))27 b FK(denotes)h(the)f(maximal)h(cardinality)
+h(of)e(a)f(\(binary\))j(code)e(of)g(length)h Fq(n)e FK(and)i(minimum)e
+(distance)75 1468 y Fq(d)5 b FK(.)28 b(The)23 b(function)j
+Ft(UpperBound)g FK(is)e(used)g(to)f(compute)i(this)f(v)n(alue.)216
+1581 y(Sometimes)295 b Ft(LowerBoundCovering)q(Rad)q(ius)q(Em)q(bed)q
+(ded)q(1)300 b FK(is)295 b(better)g(than)75 1694 y Ft
+(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p
+FK(,)28 b(sometimes)d(it)e(is)h(the)g(other)g(w)o(ay)f(around.)p
+75 1817 1648 4 v 1764 1822 a FF(Example)p 2102 1817 V
+75 1842 4 25 v 3747 1842 V 75 1941 4 100 v 188 1911 a(gap>)44
+b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q(\)\);)p
+3747 1941 V 75 2041 V 188 2011 a(a)85 b([15,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 2041 V 75 2140
+V 188 2111 a(gap>)g(Size\(C\);)p 3747 2140 V 75 2240
+V 188 2210 a(32)p 3747 2240 V 75 2340 V 188 2310 a(gap>)g
+(CoveringRadius\(C\);)p 3747 2340 V 75 2439 V 188 2409
+a(6)p 3747 2439 V 75 2539 V 188 2509 a(gap>)g(LowerBoundCoveringRad)q
+(ius)q(Emb)q(ed)q(ded)q(2\(1)q(0,3)q(2,f)q(als)q(e\);)p
+3747 2539 V 75 2639 V 188 2609 a(2)p 3747 2639 V 75 2738
+V 188 2708 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Emb)q(ed)q(ded)q
+(2\(1)q(0,3)q(,tr)q(ue\))q(;)p 3747 2738 V 75 2838 V
+188 2808 a(7)p 3747 2838 V 75 2938 V 3747 2938 V 75 2962
+4 25 v 3747 2962 V 75 2965 3675 4 v 75 3099 a
+SDict begin H.S end
+ 75 3099
+a 75 3099 a
+SDict begin 13.6 H.A end
+ 75 3099 a 75 3099 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.12) cvn H.B /DEST pdfmark end
+ 75 3099 a 116 x FJ(7.2.12)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o
+(eringRadiusInduction)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3389 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sIn)q(du)q
+(cti)q(on\()53 b(n,)47 b(r)g(\))1425 b Fr(\(function\))p
+Black 216 3615 a Ft(LowerBoundCovering)q(Rad)q(ius)q(In)q(duc)q(tio)q
+(n)26 b FK(returns)d(a)e(lo)n(wer)g(bound)i(for)e(the)g(size)h(of)f(a)g
+(code)h(with)f(length)75 3728 y Ft(n)i FK(and)h(co)o(v)o(ering)h
+(radius)g Ft(r)p FK(.)216 3841 y(If)e Fq(n)e Fo(=)f FK(2)p
+Fq(r)15 b Fo(+)e FK(2)23 b(and)h Fq(r)f Fv(\025)c FK(1,)k(the)h
+(returned)i(v)n(alue)e(is)f(4.)216 3954 y(If)g Fq(n)e
+Fo(=)f FK(2)p Fq(r)15 b Fo(+)e FK(3)23 b(and)h Fq(r)f
+Fv(\025)c FK(1,)k(the)h(returned)i(v)n(alue)e(is)f(7.)216
+4067 y(If)g Fq(n)e Fo(=)f FK(2)p Fq(r)15 b Fo(+)e FK(4)23
+b(and)h Fq(r)f Fv(\025)c FK(4,)k(the)h(returned)i(v)n(alue)e(is)f(8.)
+216 4180 y(Otherwise,)h(0)f(is)h(returned.)p 75 4295
+1648 4 v 1764 4300 a FF(Example)p 2102 4295 V 75 4320
+4 25 v 3747 4320 V 75 4420 4 100 v 188 4390 a(gap>)44
+b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q(\)\);)p
+3747 4420 V 75 4519 V 188 4490 a(a)85 b([15,5,?])45 b(randomly)g
+(generated)g(code)f(over)g(GF\(2\))p 3747 4519 V 75 4619
+V 188 4589 a(gap>)g(CoveringRadius\(C\);)p 3747 4619
+V 75 4719 V 188 4689 a(5)p 3747 4719 V 75 4818 V 188
+4788 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Ind)q(uc)q(tio)q(n\(1)q
+(5,6)q(\);)p 3747 4818 V 75 4918 V 188 4888 a(7)p 3747
+4918 V 75 5018 V 3747 5018 V 75 5043 4 25 v 3747 5043
+V 75 5046 3675 4 v 75 5179 a
+SDict begin H.S end
+ 75 5179 a 75 5179 a
+SDict begin 13.6 H.A end
+ 75 5179
+a 75 5179 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.13) cvn H.B /DEST pdfmark end
+ 75 5179 a 116 x FJ(7.2.13)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(UpperBoundCo)o(v)o(eringRadiusRedundancy)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5469 a Fs(\006)22 b Ft(UpperBoundCoverin)q
+(gRa)q(diu)q(sRe)q(du)q(nda)q(ncy)q(\()52 b(C)47 b(\))1518
+b Fr(\(function\))p Black Black Black eop end end
+%%Page: 127 127
+TeXDict begin HPSdict begin 127 126 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.127) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(127)p Black 216 399 a Ft(UpperBoundCovering)q(Rad)q(ius)q
+(Re)q(dun)q(dan)q(cy)28 b FK(returns)c(the)e(redundanc)o(y)k(of)c
+Ft(C)g FK(as)g(an)g(upper)i(bound)f(for)g(the)75 511
+y(co)o(v)o(ering)i(radius)g(of)e Ft(C)q FK(.)28 b Ft(C)23
+b FK(must)g(be)h(a)f(linear)i(code.)p 75 634 1648 4 v
+1764 639 a FF(Example)p 2102 634 V 75 659 4 25 v 3747
+659 V 75 759 4 100 v 188 729 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q
+(,GF)q(\(2)q(\)\);)p 3747 759 V 75 858 V 188 828 a(a)85
+b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p
+3747 858 V 75 958 V 188 928 a(gap>)g(CoveringRadius\(C\);)p
+3747 958 V 75 1057 V 188 1028 a(5)p 3747 1057 V 75 1157
+V 188 1127 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Red)q(un)q(dan)q
+(cy\()q(C\);)p 3747 1157 V 75 1257 V 188 1227 a(10)p
+3747 1257 V 75 1356 V 3747 1356 V 75 1381 4 25 v 3747
+1381 V 75 1384 3675 4 v 75 1518 a
+SDict begin H.S end
+ 75 1518 a 75 1518 a
+SDict begin 13.6 H.A end
+
+75 1518 a 75 1518 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.14) cvn H.B /DEST pdfmark end
+ 75 1518 a 116 x FJ(7.2.14)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(UpperBoundCo)o(v)o(eringRadiusDelsarte)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1808 a Fs(\006)22 b
+Ft(UpperBoundCoverin)q(gRa)q(diu)q(sDe)q(ls)q(art)q(e\()53
+b(C)46 b(\))1611 b Fr(\(function\))p Black 216 2034 a
+Ft(UpperBoundCovering)q(Rad)q(ius)q(De)q(lsa)q(rte)26
+b FK(returns)21 b(an)f(upper)h(bound)g(for)f(the)g(co)o(v)o(ering)i
+(radius)f(of)e Ft(C)q FK(.)26 b(This)75 2147 y(upper)g(bound)g(is)e
+(equal)h(to)g(the)f(e)o(xternal)i(distance)h(of)d Ft(C)q
+FK(,)f(this)i(is)g(the)f(minimum)g(distance)j(of)d(the)h(dual)g(code,)g
+(if)g Ft(C)75 2260 y FK(is)e(a)g(linear)i(code.)216 2373
+y(This)e(is)h(described)i(in)d(Theorem)h(11.3.3)g(of)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1678 2374 a
+SDict begin H.S end
+ 1678 2374
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894
+TeXcolorrgb 1885 2311 a
+SDict begin H.R end
+ 1885 2311 a 1885 2373 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end
+ 1885
+2373 a Black FK(].)p 75 2490 1648 4 v 1764 2495 a FF(Example)p
+2102 2490 V 75 2515 4 25 v 3747 2515 V 75 2614 4 100
+v 188 2584 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q
+(\)\);)p 3747 2614 V 75 2714 V 188 2684 a(a)85 b([15,5,?])45
+b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747
+2714 V 75 2813 V 188 2784 a(gap>)g(CoveringRadius\(C\);)p
+3747 2813 V 75 2913 V 188 2883 a(5)p 3747 2913 V 75 3013
+V 188 2983 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Del)q(sa)q(rte)q
+(\(C\))q(;)p 3747 3013 V 75 3112 V 188 3082 a(13)p 3747
+3112 V 75 3137 4 25 v 3747 3137 V 75 3140 3675 4 v 75
+3274 a
+SDict begin H.S end
+ 75 3274 a 75 3274 a
+SDict begin 13.6 H.A end
+ 75 3274 a 75 3274 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.15) cvn H.B /DEST pdfmark end
+ 75 3274
+a 116 x FJ(7.2.15)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o
+(eringRadiusStr)n(ength)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3564 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sSt)q(re)q
+(ngt)q(h\()53 b(C)46 b(\))1611 b Fr(\(function\))p Black
+216 3790 a Ft(UpperBoundCovering)q(Rad)q(ius)q(St)q(ren)q(gth)29
+b FK(returns)d(an)d(upper)i(bound)g(for)f(the)f(co)o(v)o(ering)j
+(radius)e(of)g Ft(C)p FK(.)216 3903 y(First)h(the)g(code)g(is)f
+(punctured)k(at)c(the)h(zero)g(coordinates)j(\(i.e.)k(the)25
+b(coordinates)j(where)c(all)h(code)n(w)o(ords)i(ha)n(v)o(e)75
+4016 y(a)f(zero\).)38 b(If)26 b(the)g(remaining)i(code)f(has)g
+Fq(str)m(ength)h FK(1)e(\(i.e.)37 b(each)27 b(coordinate)i(contains)f
+(each)f(element)h(of)e(the)g(\002eld)75 4129 y(an)c(equal)i(number)f
+(of)f(times\),)h(then)g(it)f(returns)1602 4087 y Fm(q)p
+Fh(\000)p Fr(1)p 1602 4108 119 4 v 1645 4160 a Fm(q)1730
+4129 y Fq(m)11 b Fo(+)g(\()p Fq(n)g Fv(\000)g Fq(m)p
+Fo(\))23 b FK(\(where)g Fq(q)f FK(is)g(the)g(size)h(of)f(the)h(\002eld)
+f(and)h Fq(m)e FK(is)h(the)75 4242 y(length)j(of)e(punctured)k(code\),)
+d(otherwise)h(it)f(returns)h Fq(n)p FK(.)j(This)23 b(bound)i(w)o(orks)f
+(for)g(all)g(codes.)p 75 4364 1648 4 v 1764 4369 a FF(Example)p
+2102 4364 V 75 4389 4 25 v 3747 4389 V 75 4489 4 100
+v 188 4459 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q
+(\)\);)p 3747 4489 V 75 4588 V 188 4558 a(a)85 b([15,5,?])45
+b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747
+4588 V 75 4688 V 188 4658 a(gap>)g(CoveringRadius\(C\);)p
+3747 4688 V 75 4788 V 188 4758 a(5)p 3747 4788 V 75 4887
+V 188 4857 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Str)q(en)q(gth)q
+(\(C\))q(;)p 3747 4887 V 75 4987 V 188 4957 a(7)p 3747
+4987 V 75 5012 4 25 v 3747 5012 V 75 5015 3675 4 v 75
+5148 a
+SDict begin H.S end
+ 75 5148 a 75 5148 a
+SDict begin 13.6 H.A end
+ 75 5148 a 75 5148 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.16) cvn H.B /DEST pdfmark end
+ 75 5148
+a 116 x FJ(7.2.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o
+(eringRadiusGriesmerLik)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5438 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sGr)q(ie)q
+(sme)q(rLi)q(ke\()53 b(C)47 b(\))1425 b Fr(\(function\))p
+Black Black Black eop end end
+%%Page: 128 128
+TeXDict begin HPSdict begin 128 127 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.128) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(128)p Black 216 399 a(This)34 b(function)j(returns)f(an)e
+(upper)i(bound)f(for)g(the)g(co)o(v)o(ering)g(radius)h(of)e
+Ft(C)q FK(,)i(which)e(must)h(be)f(linear)l(,)k(in)d(a)75
+511 y(Griesmer)n(-lik)o(e)26 b(f)o(ashion.)31 b(It)23
+b(returns)1688 673 y Fq(n)13 b Fv(\000)1866 576 y Fm(k)1834
+692 y Fa(\345)1830 766 y Fm(i)p Fk(=)p Fr(1)1943 545
+y Fc(\030)2015 611 y Fq(d)p 2006 652 69 4 v 2006 735
+a(q)2051 709 y Fm(i)2084 545 y Fc(\031)p 75 943 1648
+4 v 1764 948 a FF(Example)p 2102 943 V 75 968 4 25 v
+3747 968 V 75 1067 4 100 v 188 1037 a(gap>)44 b(C:=RandomLinearCode\(1)
+q(5,5)q(,GF)q(\(2)q(\)\);)p 3747 1067 V 75 1167 V 188
+1137 a(a)85 b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g
+(GF\(2\))p 3747 1167 V 75 1267 V 188 1237 a(gap>)g
+(CoveringRadius\(C\);)p 3747 1267 V 75 1366 V 188 1336
+a(5)p 3747 1366 V 75 1466 V 188 1436 a(gap>)g(UpperBoundCoveringRad)q
+(ius)q(Gri)q(es)q(mer)q(Lik)q(e\(C)q(\);)p 3747 1466
+V 75 1565 V 188 1536 a(9)p 3747 1565 V 75 1665 V 3747
+1665 V 75 1690 4 25 v 3747 1690 V 75 1693 3675 4 v 75
+1826 a
+SDict begin H.S end
+ 75 1826 a 75 1826 a
+SDict begin 13.6 H.A end
+ 75 1826 a 75 1826 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.17) cvn H.B /DEST pdfmark end
+ 75 1826
+a 116 x FJ(7.2.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o
+(eringRadiusCyclicCode)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2117 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sCy)q(cl)q
+(icC)q(ode)q(\()52 b(C)47 b(\))1518 b Fr(\(function\))p
+Black 216 2343 a FK(This)23 b(function)i(returns)g(an)e(upper)h(bound)h
+(for)e(the)g(co)o(v)o(ering)i(radius)f(of)f Ft(C)q FK(,)f(which)h(must)
+g(be)g(a)g(c)o(yclic)h(code.)29 b(It)75 2455 y(returns)1478
+2597 y Fq(n)13 b Fv(\000)g Fq(k)h Fo(+)f FK(1)g Fv(\000)1900
+2468 y Fc(\030)1961 2535 y Fq(w)p Fo(\()p Fq(g)p Fo(\()p
+Fq(x)p Fo(\)\))p 1961 2576 288 4 v 2082 2659 a FK(2)2259
+2468 y Fc(\031)2322 2597 y Fp(;)75 2813 y FK(where)24
+b Fq(g)p Fo(\()p Fq(x)p Fo(\))g FK(is)g(the)f(generator)j(polynomial)g
+(of)e Ft(C)p FK(.)p 75 2939 1648 4 v 1764 2944 a FF(Example)p
+2102 2939 V 75 2964 4 25 v 3747 2964 V 75 3064 4 100
+v 188 3034 a(gap>)44 b(C:=CyclicCodes\(15,GF\()q(2\)\))q([3])q(;)p
+3747 3064 V 75 3163 V 188 3133 a(a)f(cyclic)h([15,12,1..2]1..3)k
+(enumerated)e(code)d(over)h(GF\(2\))p 3747 3163 V 75
+3263 V 188 3233 a(gap>)g(CoveringRadius\(C\);)p 3747
+3263 V 75 3362 V 188 3333 a(3)p 3747 3362 V 75 3462 V
+188 3432 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Cyc)q(li)q(cCo)q(de\()q
+(C\);)p 3747 3462 V 75 3562 V 188 3532 a(3)p 3747 3562
+V 75 3661 V 3747 3661 V 75 3686 4 25 v 3747 3686 V 75
+3689 3675 4 v 75 3833 a
+SDict begin H.S end
+ 75 3833 a 75 3833 a
+SDict begin 13.6 H.A end
+ 75 3833 a
+75 3833 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.3) cvn H.B /DEST pdfmark end
+ 75 3833 a 149 x FM(7.3)p 0.0 0.0 1.0 TeXcolorrgb
+119 w(Special)31 b(matrices)e(in)i FL(GU)-5 b(A)c(V)g(A)p
+Black 75 4189 a FK(This)23 b(section)j(e)o(xplains)f(functions)h(that)e
+(w)o(ork)g(with)f(special)i(matrices)g Fy(GU)m(A)-6 b(V)f(A)22
+b FK(needs)i(for)g(se)n(v)o(eral)h(codes.)216 4302 y(Firstly)-6
+b(,)42 b(we)c(describe)i(some)e(matrix)h(generating)i(functions)g
+(\(see)d Ft(KrawtchoukMat)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3149 4303 a
+SDict begin H.S end
+ 3149 4303 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3330 4240 a
+SDict begin H.R end
+ 3330 4240 a 3330 4302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.1) cvn H.B /ANN pdfmark end
+ 3330 4302 a Black
+FK(\),)g Ft(GrayMat)75 4415 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 4416 a
+SDict begin H.S end
+ 105 4416 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+286 4353 a
+SDict begin H.R end
+ 286 4353 a 286 4415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.2) cvn H.B /ANN pdfmark end
+ 286 4415 a Black FK(\),)24
+b Ft(SylvesterMat)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+972 4416 a
+SDict begin H.S end
+ 972 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.3.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1153
+4353 a
+SDict begin H.R end
+ 1153 4353 a 1153 4415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.3) cvn H.B /ANN pdfmark end
+ 1153 4415 a Black FK(\),)d
+Ft(HadamardMat)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1792 4416 a
+SDict begin H.S end
+ 1792 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1973
+4353 a
+SDict begin H.R end
+ 1973 4353 a 1973 4415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end
+ 1973 4415 a Black FK(\))f(and)f
+Ft(MOLS)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2420
+4416 a
+SDict begin H.S end
+ 2420 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(7.3.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 4353
+a
+SDict begin H.R end
+ 2646 4353 a 2646 4415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.11) cvn H.B /ANN pdfmark end
+ 2646 4415 a Black FK(\)\).)216
+4528 y(Ne)o(xt)32 b(we)g(describe)i(tw)o(o)e(functions)j(re)o(garding)f
+(a)e(standard)j(form)d(of)g(matrices)i(\(see)f Ft(PutStandardForm)75
+4641 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4642
+a
+SDict begin H.S end
+ 105 4642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.6)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 4579 a
+SDict begin H.R end
+ 286 4579
+a 286 4641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.6) cvn H.B /ANN pdfmark end
+ 286 4641 a Black FK(\))24 b(and)g Ft(IsInStandardForm)29
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1289 4642
+a
+SDict begin H.S end
+ 1289 4642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.7)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1470 4579 a
+SDict begin H.R end
+ 1470 4579
+a 1470 4641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.7) cvn H.B /ANN pdfmark end
+ 1470 4641 a Black FK(\)\).)216 4754 y(Then)c(we)f
+(describe)j(functions)h(that)d(return)i(a)d(matrix)i(after)f(a)g
+(manipulation)j(\(see)d Ft(PermutedCols)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3515 4755 a
+SDict begin H.S end
+ 3515 4755 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.8)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3696 4692 a
+SDict begin H.R end
+ 3696 4692 a 3696 4754 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.8) cvn H.B /ANN pdfmark end
+ 3696 4754 a Black
+FK(\),)75 4867 y Ft(VerticalConversion)q(Fie)q(ldM)q(at)g
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1333 4869 a
+SDict begin H.S end
+
+1333 4869 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1514 4805 a
+SDict begin H.R end
+ 1514 4805
+a 1514 4867 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end
+ 1514 4867 a Black FK(\))24 b(and)g Ft(HorizontalConversi)
+q(on)q(Fie)q(ldM)q(at)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3073 4868 a
+SDict begin H.S end
+ 3073 4868 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.10)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3299 4805 a
+SDict begin H.R end
+ 3299 4805 a 3299 4867 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end
+ 3299 4867 a Black
+FK(\)\).)216 4980 y(Finally)-6 b(,)31 b(we)d(describe)j(functions)g
+(that)e(do)g(some)g(tests)g(on)g(matrices)h(\(see)f Ft(IsLatinSquare)k
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3333 4981 a
+SDict begin H.S end
+
+3333 4981 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.12)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3559 4918 a
+SDict begin H.R end
+ 3559 4918
+a 3559 4980 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.12) cvn H.B /ANN pdfmark end
+ 3559 4980 a Black FK(\))d(and)75 5092 y
+Ft(AreMOLS)25 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+452 5093 a
+SDict begin H.S end
+ 452 5093 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.3.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 678
+5030 a
+SDict begin H.R end
+ 678 5030 a 678 5092 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.13) cvn H.B /ANN pdfmark end
+ 678 5092 a Black FK(\)\).)p
+Black Black eop end end
+%%Page: 129 129
+TeXDict begin HPSdict begin 129 128 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.129) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(129)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.1) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.3.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(KrawtchoukMat)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(KrawtchoukMat\()52 b(n,)47 b(q)g(\))2352
+b Fr(\(function\))p Black 216 799 a Ft(KrawtchoukMat)24
+b FK(returns)d(the)f Fq(n)9 b Fo(+)g FK(1)20 b(by)g Fq(n)9
+b Fo(+)g FK(1)19 b(matrix)i Fq(K)g Fo(=)16 b(\()p Fq(k)2247
+813 y Fm(i)10 b(j)2300 799 y Fo(\))20 b FK(de\002ned)g(by)g
+Fq(k)2791 813 y Fm(i)10 b(j)2861 799 y Fo(=)16 b Fq(K)3007
+813 y Fm(i)3029 799 y Fo(\()e Fq(j)r Fo(\))20 b FK(for)g
+Fq(i)p Fp(;)k Fq(j)19 b Fo(=)d FK(0)p Fp(;)10 b(:::;)g
+Fq(n)p FK(.)75 912 y Fq(K)134 926 y Fm(i)156 912 y Fo(\()k
+Fq(j)r Fo(\))22 b FK(is)f(the)i(Kra)o(wtchouk)g(number)f(\(see)h
+Ft(Krawtchouk)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1953 913 a
+SDict begin H.S end
+ 1953 913 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2134
+850 a
+SDict begin H.R end
+ 2134 850 a 2134 912 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.6) cvn H.B /ANN pdfmark end
+ 2134 912 a Black FK(\)\).)k
+Ft(n)21 b FK(must)h(be)g(a)f(positi)n(v)o(e)j(inte)o(ger)f(and)f
+Ft(q)f FK(a)h(prime)75 1024 y(po)n(wer)-5 b(.)43 b(The)27
+b(Kra)o(wtchouk)j(matrix)e(is)g(used)h(in)f(the)h Fq(MacW)-5
+b(illiams)29 b(identities)p FK(,)i(de\002ning)f(the)e(relation)i
+(between)75 1137 y(the)i(weight)g(distrib)n(ution)i(of)e(a)f(code)h(of)
+f(length)i Ft(n)d FK(o)o(v)o(er)i(a)f(\002eld)g(of)g(size)h
+Ft(q)p FK(,)g(and)g(its)f(dual)h(code.)53 b(Each)32 b(call)f(to)75
+1250 y Ft(KrawtchoukMat)c FK(returns)f(a)d(ne)n(w)g(matrix,)g(so)h(it)f
+(is)h(safe)g(to)f(modify)i(the)e(result.)p 75 1373 1648
+4 v 1764 1378 a FF(Example)p 2102 1373 V 75 1398 4 25
+v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44 b(PrintArray\()i
+(KrawtchoukMat\()h(3,)c(2)g(\))f(\);)p 3747 1497 V 75
+1597 V 188 1567 a([)h([)127 b(1,)h(1,)f(1,)h(1)43 b(],)p
+3747 1597 V 75 1697 V 273 1667 a([)127 b(3,)h(1,)85 b(-1,)h(-3)43
+b(],)p 3747 1697 V 75 1796 V 273 1766 a([)127 b(3,)85
+b(-1,)h(-1,)128 b(3)43 b(],)p 3747 1796 V 75 1896 V 273
+1866 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1)43 b(])f(])p
+3747 1896 V 75 1996 V 188 1966 a(gap>)i(C)e(:=)h(HammingCode\()k(3)42
+b(\);;)i(a)e(:=)i(WeightDistribution\()k(C)43 b(\);)p
+3747 1996 V 75 2095 V 188 2065 a([)g(1,)g(0,)g(0,)g(7,)g(7,)g(0,)g(0,)g
+(1)f(])p 3747 2095 V 75 2195 V 188 2165 a(gap>)i(n)e(:=)h(WordLength\()
+j(C)d(\);;)g(q)g(:=)g(Size\()h(LeftActingDomain\()k(C)43
+b(\))g(\);;)p 3747 2195 V 75 2294 V 188 2265 a(gap>)h(k)e(:=)h
+(Dimension\()j(C)d(\);;)p 3747 2294 V 75 2394 V 188 2364
+a(gap>)h(q\210\()f(-k)g(\))g(*)f(KrawtchoukMat\()47 b(n,)d(q)e(\))h(*)g
+(a;)p 3747 2394 V 75 2494 V 188 2464 a([)g(1,)g(0,)g(0,)g(0,)g(7,)g(0,)
+g(0,)g(0)f(])p 3747 2494 V 75 2593 V 188 2563 a(gap>)i
+(WeightDistribution\()k(DualCode\()e(C)d(\))f(\);)p 3747
+2593 V 75 2693 V 188 2663 a([)h(1,)g(0,)g(0,)g(0,)g(7,)g(0,)g(0,)g(0)f
+(])p 3747 2693 V 75 2718 4 25 v 3747 2718 V 75 2721 3675
+4 v 75 2954 a
+SDict begin H.S end
+ 75 2954 a 75 2954 a
+SDict begin 13.6 H.A end
+ 75 2954 a 75 2954 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.2) cvn H.B /DEST pdfmark end
+
+75 2954 a 116 x FJ(7.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(GrayMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3244 a Fs(\006)22
+b Ft(GrayMat\()50 b(n,)d(F)f(\))2631 b Fr(\(function\))p
+Black 216 3470 a Ft(GrayMat)25 b FK(returns)f(a)f(list)g(of)g(all)g
+(dif)n(ferent)i(v)o(ectors)f(\(see)g Fy(GAP)p FK(')-5
+b(s)21 b Ft(Vectors)k FK(command\))f(of)f(length)h Ft(n)f
+FK(o)o(v)o(er)g(the)75 3583 y(\002eld)g Ft(F)q FK(,)f(using)j(Gray)f
+(ordering.)31 b Ft(n)23 b FK(must)g(be)h(a)f(positi)n(v)o(e)i(inte)o
+(ger)-5 b(.)30 b(This)24 b(order)g(has)g(the)g(property)i(that)e
+(subsequent)75 3696 y(v)o(ectors)c(dif)n(fer)f(in)g(e)o(xactly)h(one)f
+(coordinate.)30 b(The)18 b(\002rst)h(v)o(ector)g(is)g(al)o(w)o(ays)g
+(the)g(null)g(v)o(ector)-5 b(.)28 b(Each)19 b(call)g(to)f
+Ft(GrayMat)75 3809 y FK(returns)25 b(a)e(ne)n(w)g(matrix,)h(so)g(it)f
+(is)g(safe)h(to)g(modify)g(the)g(result.)p 75 3931 1648
+4 v 1764 3936 a FF(Example)p 2102 3931 V 75 3956 4 25
+v 3747 3956 V 75 4056 4 100 v 188 4026 a(gap>)44 b(GrayMat\(3\);)p
+3747 4056 V 75 4156 V 188 4126 a([)f([)f(0*Z\(2\),)j(0*Z\(2\),)g
+(0*Z\(2\))f(],)f([)g(0*Z\(2\),)i(0*Z\(2\),)f(Z\(2\)\2100)h(],)p
+3747 4156 V 75 4255 V 273 4225 a([)d(0*Z\(2\),)j(Z\(2\)\2100,)g
+(Z\(2\)\2100)f(],)f([)g(0*Z\(2\),)i(Z\(2\)\2100,)f(0*Z\(2\))h(],)p
+3747 4255 V 75 4355 V 273 4325 a([)d(Z\(2\)\2100,)j(Z\(2\)\2100,)g
+(0*Z\(2\))f(],)f([)g(Z\(2\)\2100,)i(Z\(2\)\2100,)f(Z\(2\)\2100)h(],)p
+3747 4355 V 75 4454 V 273 4425 a([)d(Z\(2\)\2100,)j(0*Z\(2\),)g
+(Z\(2\)\2100)f(],)f([)g(Z\(2\)\2100,)i(0*Z\(2\),)f(0*Z\(2\))h(])d(])p
+3747 4454 V 75 4554 V 188 4524 a(gap>)i(G)e(:=)h(GrayMat\()i(4,)e
+(GF\(4\))h(\);;)g(Length\(G\);)p 3747 4554 V 75 4654
+V 188 4624 a(256)424 b(#)43 b(the)g(length)i(of)e(a)f(GrayMat)j(is)e
+(always)i(q\210n)p 3747 4654 V 75 4753 V 188 4723 a(gap>)f(G[101])g(-)f
+(G[100];)p 3747 4753 V 75 4853 V 188 4823 a([)g(0*Z\(2\),)h(0*Z\(2\),)h
+(Z\(2\)\2100,)g(0*Z\(2\))f(])p 3747 4853 V 75 4878 4
+25 v 3747 4878 V 75 4881 3675 4 v 75 5014 a
+SDict begin H.S end
+ 75 5014 a
+75 5014 a
+SDict begin 13.6 H.A end
+ 75 5014 a 75 5014 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.3) cvn H.B /DEST pdfmark end
+ 75 5014 a 116 x FJ(7.3.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Sylv)o(esterMat)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5305 a Fs(\006)22 b Ft(SylvesterMat\()51
+b(n)c(\))2538 b Fr(\(function\))p Black Black Black eop
+end end
+%%Page: 130 130
+TeXDict begin HPSdict begin 130 129 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.130) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(130)p Black 216 399 a Ft(SylvesterMat)22
+b FK(returns)e(the)f Fq(n)8 b Fv(\002)g Fq(n)17 b FK(Sylv)o(ester)j
+(matrix)e(of)h(order)g Ft(n)p FK(.)27 b(This)18 b(is)g(a)g(special)i
+(case)f(of)f(the)g(Hadamard)75 511 y(matrices)35 b(\(see)g
+Ft(HadamardMat)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+1169 512 a
+SDict begin H.S end
+ 1169 512 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1350
+449 a
+SDict begin H.R end
+ 1350 449 a 1350 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end
+ 1350 511 a Black FK(\)\).)60
+b(F)o(or)33 b(this)i(construction,)40 b Ft(n)33 b FK(must)h(be)g(a)g
+(po)n(wer)g(of)g(2.)59 b(Each)34 b(call)g(to)75 624 y
+Ft(SylvesterMat)27 b FK(returns)e(a)e(ne)n(w)g(matrix,)h(so)g(it)f(is)g
+(safe)h(to)g(modify)g(the)g(result.)p 75 745 1648 4 v
+1764 750 a FF(Example)p 2102 745 V 75 770 4 25 v 3747
+770 V 75 869 4 100 v 188 840 a(gap>)44 b(PrintArray\(SylvesterM)q(at\()
+q(2\)\))q(;)p 3747 869 V 75 969 V 188 939 a([)f([)127
+b(1,)h(1)42 b(],)p 3747 969 V 75 1069 V 273 1039 a([)127
+b(1,)85 b(-1)43 b(])g(])p 3747 1069 V 75 1168 V 188 1138
+a(gap>)h(PrintArray\()i(SylvesterMat\(4\))h(\);)p 3747
+1168 V 75 1268 V 188 1238 a([)c([)127 b(1,)h(1,)f(1,)h(1)43
+b(],)p 3747 1268 V 75 1368 V 273 1338 a([)127 b(1,)85
+b(-1,)128 b(1,)86 b(-1)43 b(],)p 3747 1368 V 75 1467
+V 273 1437 a([)127 b(1,)h(1,)85 b(-1,)h(-1)43 b(],)p
+3747 1467 V 75 1567 V 273 1537 a([)127 b(1,)85 b(-1,)h(-1,)128
+b(1)43 b(])f(])p 3747 1567 V 75 1592 4 25 v 3747 1592
+V 75 1595 3675 4 v 75 1825 a
+SDict begin H.S end
+ 75 1825 a 75 1825 a
+SDict begin 13.6 H.A end
+ 75 1825
+a 75 1825 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.4) cvn H.B /DEST pdfmark end
+ 75 1825 a 117 x FJ(7.3.4)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(HadamardMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2116
+a Fs(\006)22 b Ft(HadamardMat\()51 b(n)c(\))2584 b Fr(\(function\))p
+Black 216 2342 a Ft(HadamardMat)34 b FK(returns)d(a)f(Hadamard)h
+(matrix)g(of)f(order)i Ft(n)p FK(.)48 b(This)30 b(is)g(an)g
+Fq(n)15 b Fv(\002)g Fq(n)31 b FK(matrix)f(with)g(the)h(property)75
+2455 y(that)f(the)f(matrix)h(multiplied)h(by)e(its)g(transpose)j
+(returns)f Ft(n)d FK(times)i(the)f(identity)i(matrix.)46
+b(This)29 b(is)g(only)h(possible)75 2567 y(for)24 b Fq(n)d
+Fo(=)f FK(1)p Fp(;)10 b Fq(n)21 b Fo(=)f FK(2)j(or)h(in)f(cases)i
+(where)f Ft(n)f FK(is)h(a)f(multiple)i(of)f(4.)k(If)c(the)g(matrix)g
+(does)h(not)f(e)o(xist)g(or)f(is)h(not)g(kno)n(wn)g(\(as)75
+2680 y(of)h(1998\),)h Ft(HadamardMat)i FK(returns)f(an)e(error)-5
+b(.)34 b(A)24 b(lar)n(ge)i(number)g(of)f(construction)k(methods)d(is)f
+(kno)n(wn)g(to)g(create)75 2793 y(these)34 b(matrices)f(for)g(dif)n
+(ferent)i(orders.)57 b Ft(HadamardMat)35 b FK(mak)o(es)f(use)f(of)f(tw)
+o(o)g(construction)k(methods)e(\(among)75 2906 y(which)g(the)g(Sylv)o
+(ester)h(construction)i(\226)d(see)g Ft(SylvesterMat)j
+FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2173 2907 a
+SDict begin H.S end
+
+2173 2907 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.3)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2354 2844 a
+SDict begin H.R end
+ 2354 2844
+a 2354 2906 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.3) cvn H.B /ANN pdfmark end
+ 2354 2906 a Black FK(\)\).)60 b(These)34
+b(methods)h(co)o(v)o(er)f(most)g(of)g(the)75 3019 y(possible)28
+b(Hadamard)f(matrices,)g(although)h(some)e(special)h(algorithms)h(ha)n
+(v)o(e)f(not)f(been)g(implemented)i(yet.)36 b(The)75
+3132 y(follo)n(wing)27 b(orders)g(less)f(than)g(100)g(do)g(not)g(yet)f
+(ha)n(v)o(e)h(an)g(implementation)i(for)e(a)f(Hadamard)h(matrix)g(in)g
+Fy(GU)m(A)-6 b(V)f(A)p FK(:)75 3245 y(28)p Fp(;)10 b
+FK(36)p Fp(;)g FK(52)p Fp(;)g FK(76)p Fp(;)g FK(92.)p
+75 3364 1648 4 v 1764 3369 a FF(Example)p 2102 3364 V
+75 3388 4 25 v 3747 3388 V 75 3488 4 100 v 188 3458 a(gap>)44
+b(C)e(:=)h(HadamardMat\(8\);;)48 b(PrintArray\(C\);)p
+3747 3488 V 75 3588 V 188 3558 a([)43 b([)127 b(1,)h(1,)f(1,)h(1,)g(1,)
+f(1,)h(1,)g(1)43 b(],)p 3747 3588 V 75 3687 V 273 3657
+a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1,)128 b(1,)85 b(-1,)128
+b(1,)86 b(-1)43 b(],)p 3747 3687 V 75 3787 V 273 3757
+a([)127 b(1,)h(1,)85 b(-1,)h(-1,)128 b(1,)f(1,)86 b(-1,)g(-1)43
+b(],)p 3747 3787 V 75 3887 V 273 3857 a([)127 b(1,)85
+b(-1,)h(-1,)128 b(1,)g(1,)85 b(-1,)h(-1,)128 b(1)43 b(],)p
+3747 3887 V 75 3986 V 273 3956 a([)127 b(1,)h(1,)f(1,)h(1,)85
+b(-1,)h(-1,)g(-1,)g(-1)43 b(],)p 3747 3986 V 75 4086
+V 273 4056 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1,)f(-1,)128
+b(1,)86 b(-1,)128 b(1)43 b(],)p 3747 4086 V 75 4185 V
+273 4156 a([)127 b(1,)h(1,)85 b(-1,)h(-1,)f(-1,)h(-1,)128
+b(1,)g(1)43 b(],)p 3747 4185 V 75 4285 V 273 4255 a([)127
+b(1,)85 b(-1,)h(-1,)128 b(1,)85 b(-1,)128 b(1,)g(1,)86
+b(-1)43 b(])f(])p 3747 4285 V 75 4385 V 188 4355 a(gap>)i(C)e(*)h
+(TransposedMat\(C\))48 b(=)42 b(8)h(*)g(IdentityMat\()j(8,)d(8)g(\);)p
+3747 4385 V 75 4484 V 188 4454 a(true)p 3747 4484 V 75
+4509 4 25 v 3747 4509 V 75 4512 3675 4 v 75 4645 a
+SDict begin H.S end
+ 75
+4645 a 75 4645 a
+SDict begin 13.6 H.A end
+ 75 4645 a 75 4645 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.5) cvn H.B /DEST pdfmark end
+ 75 4645 a 116 x
+FJ(7.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(V)-9 b(andermondeMat)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4936 a Fs(\006)22 b
+Ft(VandermondeMat\()52 b(X,)47 b(a)g(\))2306 b Fr(\(function\))p
+Black 216 5162 a FK(The)31 b(function)j Ft(VandermondeMat)i
+FK(returns)d(the)f Fo(\()p Fq(a)16 b Fo(+)g FK(1)p Fo(\))g
+Fv(\002)f Fq(n)31 b FK(matrix)i(of)e(po)n(wers)h Fq(x)2984
+5116 y Fm(j)2974 5187 y(i)3040 5162 y FK(where)g Ft(X)f
+FK(is)g(a)g(list)h(of)75 5274 y(elements)25 b(of)e(a)g(\002eld,)h
+Fq(X)k Fo(=)20 b Fv(f)p Fq(x)1050 5288 y Fr(1)1088 5274
+y Fp(;)10 b(:::;)g Fq(x)1273 5288 y Fm(n)1312 5274 y
+Fv(g)p FK(,)23 b(and)h Ft(a)f FK(is)g(a)g(non-ne)o(gati)n(v)o(e)j(inte)
+o(ger)-5 b(.)p 75 5398 1648 4 v 1764 5403 a FF(Example)p
+2102 5398 V 75 5423 4 25 v 3747 5423 V 75 5523 4 100
+v 188 5493 a(gap>)44 b(M:=VandermondeMat\([Z\()q(5\),)q(Z\(5)q(\)\210)q
+(2,Z)q(\(5\))q(\2100,)q(Z\(5)q(\)\2103)q(],2)q(\);)p
+3747 5523 V 75 5622 V 188 5592 a([)f([)f(Z\(5\)\2100,)j(Z\(5\),)f
+(Z\(5\)\2102)g(],)f([)g(Z\(5\)\2100,)i(Z\(5\)\2102,)g(Z\(5\)\2100)f(],)
+p 3747 5622 V Black Black eop end end
+%%Page: 131 131
+TeXDict begin HPSdict begin 131 130 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.131) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(131)p Black 75 428 4 100 v 273 399 a FF([)42
+b(Z\(5\)\2100,)j(Z\(5\)\2100,)g(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2100,)i
+(Z\(5\)\2103,)f(Z\(5\)\2102)h(])d(])p 3747 428 V 75 528
+V 188 498 a(gap>)i(Display\(M\);)p 3747 528 V 75 628
+V 230 598 a(1)f(2)g(4)p 3747 628 V 75 727 V 230 697 a(1)g(4)g(1)p
+3747 727 V 75 827 V 230 797 a(1)g(1)g(1)p 3747 827 V
+75 927 V 230 897 a(1)g(3)g(4)p 3747 927 V 75 951 4 25
+v 3747 951 V 75 954 3675 4 v 75 1169 a
+SDict begin H.S end
+ 75 1169 a 75 1169
+a
+SDict begin 13.6 H.A end
+ 75 1169 a 75 1169 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.6) cvn H.B /DEST pdfmark end
+ 75 1169 a 116 x FJ(7.3.6)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(PutStandardF)n(orm)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1459 a Fs(\006)22 b Ft(PutStandardForm\()53
+b(M[,)47 b(idleft])i(\))1935 b Fr(\(function\))p Black
+216 1685 a FK(W)-7 b(e)26 b(say)i(that)f(a)g Fq(k)16
+b Fv(\002)e Fq(n)26 b FK(matrix)i(is)f(in)g Fq(standar)m(d)i(form)e
+FK(if)g(it)g(is)g(equal)h(to)f(the)g(block)i(matrix)e
+Fo(\()p Fq(I)32 b Fv(j)26 b Fq(A)p Fo(\))p FK(,)h(for)g(some)75
+1798 y Fq(k)16 b Fv(\002)e Fo(\()p Fq(n)g Fv(\000)g Fq(k)r
+Fo(\))28 b FK(matrix)g Fq(A)f FK(and)h(where)g Fq(I)k
+FK(is)27 b(the)h Fq(k)16 b Fv(\002)e Fq(k)29 b FK(identity)h(matrix.)42
+b(It)27 b(follo)n(ws)i(from)e(a)h(basis)g(result)h(in)f(linear)75
+1911 y(algebra)36 b(that,)i(after)d(a)f(possible)j(permutation)g(of)d
+(the)h(columns,)k(using)c(elementary)i(ro)n(w)d(operations,)40
+b(e)n(v)o(ery)75 2024 y(matrix)32 b(can)f(be)h(reduced)h(to)e(standard)
+i(form.)52 b Ft(PutStandardForm)36 b FK(puts)c(a)f(matrix)h
+Ft(M)e FK(in)h(standard)j(form,)f(and)75 2137 y(returns)g(the)f
+(permutation)i(needed)f(to)e(do)g(so.)53 b Ft(idleft)33
+b FK(is)e(a)g(boolean)i(that)f(sets)g(the)g(position)h(of)f(the)f
+(identity)75 2250 y(matrix)25 b(in)f Ft(M)q FK(.)30 b(\(The)24
+b(def)o(ault)i(for)f Ft(idleft)g FK(is)g(`true'.\))32
+b(If)24 b Ft(idleft)i FK(is)e(set)h(to)f(`true',)h(the)g(identity)h
+(matrix)f(is)f(put)h(on)75 2362 y(the)k(left)h(side)f(of)g
+Ft(M)p FK(.)44 b(Otherwise,)31 b(it)e(is)g(put)g(at)g(the)g(right)h
+(side.)45 b(\(This)29 b(option)i(is)d(useful)j(when)e(putting)i(a)d
+(check)75 2475 y(matrix)d(of)g(a)f(code)h(into)g(standard)i(form.\))32
+b(The)24 b(function)j Ft(BaseMat)f FK(also)g(returns)g(a)e(similar)h
+(standard)i(form,)e(b)n(ut)75 2588 y(does)31 b(not)f(apply)h(column)g
+(permutations.)51 b(The)30 b(ro)n(ws)f(of)h(the)g(matrix)h(still)f
+(span)h(the)f(same)g(v)o(ector)h(space)g(after)75 2701
+y Ft(BaseMat)p FK(,)25 b(b)n(ut)f(after)g(calling)i Ft(PutStandardForm)
+p FK(,)h(this)e(is)e(not)h(necessarily)i(true.)p 75 2808
+1648 4 v 1764 2813 a FF(Example)p 2102 2808 V 75 2833
+4 25 v 3747 2833 V 75 2932 4 100 v 188 2902 a(gap>)44
+b(M)e(:=)h(Z\(2\)*[[1,0,0,1],[0,)q(0,1)q(,1)q(]];)q(;)48
+b(PrintArray\(M\);)p 3747 2932 V 75 3032 V 188 3002 a([)43
+b([)169 b(Z\(2\),)87 b(0*Z\(2\),)g(0*Z\(2\),)172 b(Z\(2\))43
+b(],)p 3747 3032 V 75 3132 V 273 3102 a([)85 b(0*Z\(2\),)i(0*Z\(2\),)
+171 b(Z\(2\),)h(Z\(2\))43 b(])g(])p 3747 3132 V 75 3231
+V 188 3201 a(gap>)h(PutStandardForm\(M\);)811 b(#)42
+b(identity)j(at)e(the)h(left)f(side)p 3747 3231 V 75
+3331 V 188 3301 a(\(2,3\))p 3747 3331 V 75 3430 V 188
+3401 a(gap>)h(PrintArray\(M\);)p 3747 3430 V 75 3530
+V 188 3500 a([)f([)169 b(Z\(2\),)87 b(0*Z\(2\),)g(0*Z\(2\),)172
+b(Z\(2\))43 b(],)p 3747 3530 V 75 3630 V 273 3600 a([)85
+b(0*Z\(2\),)171 b(Z\(2\),)87 b(0*Z\(2\),)172 b(Z\(2\))43
+b(])g(])p 3747 3630 V 75 3729 V 188 3699 a(gap>)h(PutStandardForm\(M,)k
+(false\);)511 b(#)42 b(identity)j(at)e(the)h(right)g(side)p
+3747 3729 V 75 3829 V 188 3799 a(\(1,4,3\))p 3747 3829
+V 75 3929 V 188 3899 a(gap>)g(PrintArray\(M\);)p 3747
+3929 V 75 4028 V 188 3998 a([)f([)85 b(0*Z\(2\),)171
+b(Z\(2\),)g(Z\(2\),)87 b(0*Z\(2\))44 b(],)p 3747 4028
+V 75 4128 V 273 4098 a([)85 b(0*Z\(2\),)171 b(Z\(2\),)87
+b(0*Z\(2\),)172 b(Z\(2\))43 b(])g(])p 3747 4128 V 75
+4227 V 188 4198 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q(\()48
+b(23,)c(12,)f(GF\(2\))h(\);)p 3747 4227 V 75 4327 V 188
+4297 a(a)f(linear)h([23,12,7]3)i(punctured)f(code)p 3747
+4327 V 75 4427 V 188 4397 a(gap>)f(G:=MutableCopyMat\(Gen)q(era)q(tor)q
+(Ma)q(t\(C)q(\)\);)q(;)p 3747 4427 V 75 4526 V 188 4496
+a(gap>)g(PutStandardForm\(G\);)p 3747 4526 V 75 4626
+V 188 4596 a(\(\))p 3747 4626 V 75 4726 V 188 4696 a(gap>)g
+(Display\(G\);)p 3747 4726 V 75 4825 V 230 4795 a(1)f(.)g(.)f(.)h(.)g
+(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1)
+p 3747 4825 V 75 4925 V 230 4895 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
+(.)h(.)g(.)f(1)h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(.)p
+3747 4925 V 75 5024 V 230 4995 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p
+3747 5024 V 75 5124 V 230 5094 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(.)p
+3747 5124 V 75 5224 V 230 5194 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)f(1)h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(1)p
+3747 5224 V 75 5323 V 230 5293 a(.)h(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.)
+h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g(1)f(.)h(1)g(1)f(1)p
+3747 5323 V 75 5423 V 230 5393 a(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.)
+h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1)p
+3747 5423 V 75 5523 V 230 5493 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.)
+h(.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p
+3747 5523 V 75 5622 V 230 5592 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.)
+h(.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p
+3747 5622 V Black Black eop end end
+%%Page: 132 132
+TeXDict begin HPSdict begin 132 131 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.132) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(132)p Black 75 428 4 100 v 230 399 a FF(.)43
+b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g
+(.)f(1)h(1)g(1)f(.)p 3747 428 V 75 528 V 230 498 a(.)h(.)g(.)f(.)h(.)g
+(.)f(.)h(.)g(.)f(.)h(1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(1)
+p 3747 528 V 75 628 V 230 598 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p
+3747 628 V 75 727 V 3747 727 V 75 752 4 25 v 3747 752
+V 75 755 3675 4 v 75 886 a
+SDict begin H.S end
+ 75 886 a 75 886 a
+SDict begin 13.6 H.A end
+ 75 886 a
+75 886 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.7) cvn H.B /DEST pdfmark end
+ 75 886 a 117 x FJ(7.3.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(IsInStandardF)n(orm)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1177 a Fs(\006)22 b Ft(IsInStandardForm\()53 b(M[,)47
+b(idleft])i(\))1889 b Fr(\(function\))p Black 216 1403
+a Ft(IsInStandardForm)44 b FK(determines)c(if)f Ft(M)f
+FK(is)g(in)g(standard)j(form.)74 b Ft(idleft)40 b FK(is)e(a)g(boolean)j
+(that)e(indicates)75 1516 y(the)c(position)j(of)d(the)g(identity)j
+(matrix)d(in)h Ft(M)p FK(,)h(as)e(in)g Ft(PutStandardForm)40
+b FK(\(see)c Ft(PutStandardForm)k FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3485 1517 a
+SDict begin H.S end
+ 3485 1517 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3666 1454 a
+SDict begin H.R end
+ 3666 1454 a 3666 1516 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.6) cvn H.B /ANN pdfmark end
+ 3666 1516 a Black
+FK(\)\).)75 1629 y Ft(IsInStandardForm)31 b FK(checks)d(if)e(the)h
+(identity)h(matrix)f(is)f(at)g(the)h(left)g(side)g(of)f
+Ft(M)p FK(,)g(otherwise)i(if)e(it)g(is)h(at)f(the)g(right)75
+1741 y(side.)j(The)23 b(elements)i(of)f Ft(M)f FK(may)g(be)h(elements)h
+(of)e(an)o(y)h(\002eld.)p 75 1852 1648 4 v 1764 1857
+a FF(Example)p 2102 1852 V 75 1877 4 25 v 3747 1877 V
+75 1976 4 100 v 188 1946 a(gap>)44 b(IsInStandardForm\(Iden)q(tit)q
+(yMa)q(t\()q(7,)49 b(GF\(2\)\)\);)p 3747 1976 V 75 2076
+V 188 2046 a(true)p 3747 2076 V 75 2175 V 188 2145 a(gap>)44
+b(IsInStandardForm\([[1,)49 b(1,)43 b(0],)h([1,)f(0,)g(1]],)h(false\);)
+p 3747 2175 V 75 2275 V 188 2245 a(true)p 3747 2275 V
+75 2375 V 188 2345 a(gap>)g(IsInStandardForm\([[1,)49
+b(3,)43 b(2,)g(7]]\);)p 3747 2375 V 75 2474 V 188 2444
+a(true)p 3747 2474 V 75 2574 V 188 2544 a(gap>)h
+(IsInStandardForm\(Hada)q(mar)q(dMa)q(t\()q(4\)\))q(;)p
+3747 2574 V 75 2674 V 188 2644 a(false)p 3747 2674 V
+75 2698 4 25 v 3747 2698 V 75 2701 3675 4 v 75 2833 a
+SDict begin H.S end
+
+75 2833 a 75 2833 a
+SDict begin 13.6 H.A end
+ 75 2833 a 75 2833 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.8) cvn H.B /DEST pdfmark end
+ 75 2833 a 116
+x FJ(7.3.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutedCols)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3123 a Fs(\006)22 b
+Ft(PermutedCols\()51 b(M,)d(P)e(\))2399 b Fr(\(function\))p
+Black 216 3349 a Ft(PermutedCols)27 b FK(returns)e(a)e(matrix)i
+Ft(M)e FK(with)g(a)g(permutation)j Ft(P)d FK(applied)j(to)d(its)h
+(columns.)p 75 3459 1648 4 v 1764 3464 a FF(Example)p
+2102 3459 V 75 3484 4 25 v 3747 3484 V 75 3584 4 100
+v 188 3554 a(gap>)44 b(M)e(:=)h([[1,2,3,4],[1,2,3,4)q(]];)q(;)49
+b(PrintArray\(M\);)p 3747 3584 V 75 3683 V 188 3653 a([)43
+b([)85 b(1,)g(2,)g(3,)h(4)42 b(],)p 3747 3683 V 75 3783
+V 273 3753 a([)85 b(1,)g(2,)g(3,)h(4)42 b(])h(])p 3747
+3783 V 75 3883 V 188 3853 a(gap>)h(PrintArray\(PermutedCo)q(ls\()q(M,)
+49 b(\(1,2,3\)\)\);)p 3747 3883 V 75 3982 V 188 3952
+a([)43 b([)85 b(3,)g(1,)g(2,)h(4)42 b(],)p 3747 3982
+V 75 4082 V 273 4052 a([)85 b(3,)g(1,)g(2,)h(4)42 b(])h(])p
+3747 4082 V 75 4107 4 25 v 3747 4107 V 75 4110 3675 4
+v 75 4241 a
+SDict begin H.S end
+ 75 4241 a 75 4241 a
+SDict begin 13.6 H.A end
+ 75 4241 a 75 4241 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.9) cvn H.B /DEST pdfmark end
+ 75
+4241 a 116 x FJ(7.3.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(V)-10
+b(erticalCon)l(v)o(ersionFieldMat)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4531 a Fs(\006)22 b Ft(VerticalConversio)q(nFi)q(eld)q
+(Mat)q(\()53 b(M,)47 b(F)f(\))1750 b Fr(\(function\))p
+Black 216 4757 a Ft(VerticalConversion)q(Fie)q(ldM)q(at)41
+b FK(returns)c(the)e(matrix)h Ft(M)f FK(with)g(its)g(elements)i(con)l
+(v)o(erted)h(from)d(a)f(\002eld)75 4870 y Fq(F)28 b Fo(=)19
+b Fq(GF)7 b Fo(\()p Fq(q)458 4837 y Fm(m)511 4870 y Fo(\))p
+FK(,)23 b Fq(q)h FK(prime,)f(to)h(a)g(\002eld)f Fq(GF)7
+b Fo(\()p Fq(q)p Fo(\))p FK(.)30 b(Each)23 b(element)i(is)f(replaced)i
+(by)d(its)h(representation)k(o)o(v)o(er)c(the)g(latter)75
+4983 y(\002eld,)f(placed)i(v)o(ertically)h(in)d(the)h(matrix,)g(using)h
+(the)e Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p FK(-v)o(ector)26
+b(space)f(isomorphism)1464 5175 y Fo([)p Fp(:::)p Fo(])c
+FK(:)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))21 b Fv(!)f Fq(GF)7
+b Fo(\()g Fq(p)p Fo(\))2283 5137 y Fm(m)2336 5175 y Fp(;)75
+5367 y FK(with)23 b Fq(q)e Fo(=)27 b Fq(p)468 5334 y
+Fm(m)520 5367 y FK(.)216 5479 y(If)34 b Ft(M)g FK(is)g(a)f
+Fq(k)j FK(by)e Fq(n)g FK(matrix,)j(the)d(result)i(is)e(a)f
+Fq(k)19 b Fv(\001)e Fq(m)f Fv(\002)g Fq(n)34 b FK(matrix,)j(since)e
+(each)g(element)g(of)f Fq(GF)7 b Fo(\()p Fq(q)3383 5446
+y Fm(m)3436 5479 y Fo(\))34 b FK(can)g(be)75 5592 y(represented)27
+b(in)c Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(using)g
+Fq(m)f FK(elements.)p Black Black eop end end
+%%Page: 133 133
+TeXDict begin HPSdict begin 133 132 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.133) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(133)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(M)e(:=)h(Z\(9\)*[[1,2],[2,1]];)q(;)48
+b(PrintArray\(M\);)p 3747 523 V 75 623 V 188 593 a([)43
+b([)169 b(Z\(3\2102\),)87 b(Z\(3\2102\)\2105)45 b(],)p
+3747 623 V 75 722 V 273 692 a([)85 b(Z\(3\2102\)\2105,)172
+b(Z\(3\2102\))44 b(])f(])p 3747 722 V 75 822 V 188 792
+a(gap>)h(DefaultField\()i(Flat\(M\))f(\);)p 3747 822
+V 75 922 V 188 892 a(GF\(3\2102\))p 3747 922 V 75 1021
+V 188 991 a(gap>)f(VCFM)f(:=)g(VerticalConversionF)q(ie)q(ldM)q(at\()49
+b(M,)43 b(GF\(9\))h(\);;)f(PrintArray\(VCFM\);)p 3747
+1021 V 75 1121 V 188 1091 a([)g([)85 b(0*Z\(3\),)i(0*Z\(3\))44
+b(],)p 3747 1121 V 75 1220 V 273 1191 a([)85 b(Z\(3\)\2100,)171
+b(Z\(3\))44 b(],)p 3747 1220 V 75 1320 V 273 1290 a([)85
+b(0*Z\(3\),)i(0*Z\(3\))44 b(],)p 3747 1320 V 75 1420
+V 273 1390 a([)169 b(Z\(3\),)87 b(Z\(3\)\2100)44 b(])f(])p
+3747 1420 V 75 1519 V 188 1489 a(gap>)h(DefaultField\()i(Flat\(VCFM\))g
+(\);)p 3747 1519 V 75 1619 V 188 1589 a(GF\(3\))p 3747
+1619 V 75 1644 4 25 v 3747 1644 V 75 1647 3675 4 v 75
+1811 a FK(A)41 b(similar)j(function)g(is)f Ft(HorizontalConversio)q
+(nFi)q(el)q(dMa)q(t)48 b FK(\(see)43 b Ft(HorizontalConversio)q(nFi)q
+(el)q(dMa)q(t)75 1924 y FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 105 1925 a
+SDict begin H.S end
+ 105 1925 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.10)p 0.0236 0.0894 0.6179 TeXcolorrgb
+331 1862 a
+SDict begin H.R end
+ 331 1862 a 331 1924 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end
+ 331 1924 a Black FK(\)\).)75
+2065 y
+SDict begin H.S end
+ 75 2065 a 75 2065 a
+SDict begin 13.6 H.A end
+ 75 2065 a 75 2065 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.10) cvn H.B /DEST pdfmark end
+ 75 2065
+a 100 x FJ(7.3.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(HorizontalCon)l(v)o
+(ersionFieldMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2339
+a Fs(\006)22 b Ft(HorizontalConvers)q(ion)q(Fie)q(ldM)q(at)q(\()52
+b(M,)47 b(F)g(\))1657 b Fr(\(function\))p Black 216 2565
+a Ft(HorizontalConversi)q(onF)q(iel)q(dM)q(at)32 b FK(returns)d(the)e
+(matrix)g Ft(M)f FK(with)h(its)g(elements)h(con)l(v)o(erted)h(from)e(a)
+f(\002eld)75 2678 y Fq(F)i Fo(=)19 b Fq(GF)7 b Fo(\()p
+Fq(q)458 2645 y Fm(m)511 2678 y Fo(\))p FK(,)23 b Fq(q)h
+FK(prime,)f(to)h(a)g(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p
+Fo(\))p FK(.)30 b(Each)23 b(element)i(is)f(replaced)i(by)d(its)h
+(representation)k(o)o(v)o(er)c(the)g(latter)75 2791 y(\002eld,)f
+(placed)i(horizontally)i(in)d(the)f(matrix.)216 2904
+y(If)e Ft(M)f FK(is)h(a)f Fq(k)12 b Fv(\002)e Fq(n)20
+b FK(matrix,)i(the)f(result)h(is)e(a)h Fq(k)12 b Fv(\002)e
+Fq(m)g Fv(\002)g Fq(n)g Fv(\001)g Fq(m)19 b FK(matrix.)29
+b(The)20 b(ne)n(w)g(w)o(ord)h(length)h(of)f(the)g(resulting)i(code)75
+3017 y(is)e(equal)h(to)g Fq(n)11 b Fv(\001)g Fq(m)p FK(,)20
+b(because)j(each)f(element)g(of)f Fq(GF)7 b Fo(\()p Fq(q)1774
+2984 y Fm(m)1827 3017 y Fo(\))21 b FK(can)g(be)h(represented)i(in)d
+Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))22 b FK(using)g Fq(m)e
+FK(elements.)30 b(The)75 3130 y(ne)n(w)f(dimension)j(is)d(equal)i(to)e
+Fq(k)17 b Fv(\002)e Fq(m)28 b FK(because)j(the)f(ne)n(w)f(matrix)h
+(should)h(be)f(a)f(basis)i(for)e(the)h(same)g(number)g(of)75
+3243 y(v)o(ectors)25 b(as)e(the)h(old)g(one.)216 3355
+y Ft(ConversionFieldCod)q(e)f FK(uses)c(horizontal)i(con)l(v)o(ersion)h
+(to)c(con)l(v)o(ert)i(a)d(code)i(\(see)g Ft(ConversionFieldCod)q(e)75
+3468 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3469
+a
+SDict begin H.S end
+ 105 3469 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.14)p
+0.0236 0.0894 0.6179 TeXcolorrgb 331 3406 a
+SDict begin H.R end
+ 331 3406
+a 331 3468 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.14) cvn H.B /ANN pdfmark end
+ 331 3468 a Black FK(\)\).)p 75 3539 1648
+4 v 1764 3544 a FF(Example)p 2102 3539 V 75 3564 4 25
+v 3747 3564 V 75 3663 4 100 v 188 3633 a(gap>)44 b(M)e(:=)h
+(Z\(9\)*[[1,2],[2,1]];)q(;)48 b(PrintArray\(M\);)p 3747
+3663 V 75 3763 V 188 3733 a([)43 b([)169 b(Z\(3\2102\),)87
+b(Z\(3\2102\)\2105)45 b(],)p 3747 3763 V 75 3862 V 273
+3833 a([)85 b(Z\(3\2102\)\2105,)172 b(Z\(3\2102\))44
+b(])f(])p 3747 3862 V 75 3962 V 188 3932 a(gap>)h(DefaultField\()i
+(Flat\(M\))f(\);)p 3747 3962 V 75 4062 V 188 4032 a(GF\(3\2102\))p
+3747 4062 V 75 4161 V 188 4131 a(gap>)f(HCFM)f(:=)g
+(HorizontalConversio)q(nF)q(iel)q(dMa)q(t\(M)q(,)48 b(GF\(9\)\);;)d
+(PrintArray\(HCFM\);)p 3747 4161 V 75 4261 V 188 4231
+a([)e([)85 b(0*Z\(3\),)i(Z\(3\)\2100,)g(0*Z\(3\),)172
+b(Z\(3\))43 b(],)p 3747 4261 V 75 4361 V 273 4331 a([)85
+b(Z\(3\)\2100,)i(Z\(3\)\2100,)171 b(Z\(3\),)h(Z\(3\))43
+b(],)p 3747 4361 V 75 4460 V 273 4430 a([)85 b(0*Z\(3\),)171
+b(Z\(3\),)87 b(0*Z\(3\),)g(Z\(3\)\2100)44 b(],)p 3747
+4460 V 75 4560 V 273 4530 a([)169 b(Z\(3\),)i(Z\(3\),)87
+b(Z\(3\)\2100,)g(Z\(3\)\2100)44 b(])f(])p 3747 4560 V
+75 4659 V 188 4630 a(gap>)h(DefaultField\()i(Flat\(HCFM\))g(\);)p
+3747 4659 V 75 4759 V 188 4729 a(GF\(3\))p 3747 4759
+V 75 4784 4 25 v 3747 4784 V 75 4787 3675 4 v 75 4951
+a FK(A)20 b(similar)h(function)i(is)e Ft(VerticalConversion)q(Fie)q
+(ldM)q(at)27 b FK(\(see)21 b Ft(VerticalConversion)q(Fie)q(ldM)q(at)27
+b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 4953
+a
+SDict begin H.S end
+ 3485 4953 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3666 4889 a
+SDict begin H.R end
+ 3666 4889
+a 3666 4951 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end
+ 3666 4951 a Black FK(\)\).)75 5189 y
+SDict begin H.S end
+ 75
+5189 a 75 5189 a
+SDict begin 13.6 H.A end
+ 75 5189 a 75 5189 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.11) cvn H.B /DEST pdfmark end
+ 75 5189 a 116 x
+FJ(7.3.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MOLS)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(MOLS\()49
+b(q[,)e(n])g(\))2677 b Fr(\(function\))p Black Black
+Black eop end end
+%%Page: 134 134
+TeXDict begin HPSdict begin 134 133 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.134) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(134)p Black 216 399 a Ft(MOLS)24 b FK(returns)g(a)f(list)
+g(of)g Ft(n)g Fq(Mutually)h(Ortho)o(gonal)i(Latin)d(Squar)m(es)i
+FK(\(MOLS\).)c(A)g Fq(Latin)j(squar)m(e)g FK(of)f(order)h
+Ft(q)e FK(is)75 511 y(a)i Fq(q)13 b Fv(\002)g Fq(q)25
+b FK(matrix)g(whose)g(entries)h(are)f(from)f(a)g(set)h
+Fq(F)1705 525 y Fm(q)1766 511 y FK(of)f Ft(q)g FK(distinct)j(symbols)f
+(\()p Fy(GU)m(A)-6 b(V)f(A)23 b FK(uses)i(the)g(inte)o(gers)h(from)f(0)
+75 624 y(to)e Ft(q)q FK(\))g(such)h(that)g(each)h(ro)n(w)d(and)i(each)h
+(column)f(of)g(the)f(matrix)h(contains)i(each)e(symbol)h(e)o(xactly)g
+(once.)216 737 y(A)j(set)g(of)h(Latin)g(squares)h(is)f(a)f(set)h(of)f
+(MOLS)f(if)h(and)h(only)h(if)e(for)h(each)g(pair)h(of)e(Latin)h
+(squares)h(in)f(this)g(set,)75 850 y(e)n(v)o(ery)24 b(ordered)h(pair)f
+(of)g(elements)h(that)f(are)g(in)f(the)h(same)f(position)j(in)e(these)g
+(matrices)h(occurs)g(e)o(xactly)g(once.)216 963 y Ft(n)g
+FK(must)g(be)f(less)i(than)g Ft(q)p FK(.)32 b(If)25 b
+Ft(n)f FK(is)h(omitted,)h(tw)o(o)e(MOLS)f(are)i(returned.)35
+b(If)25 b Ft(q)f FK(is)h(not)g(a)g(prime)g(po)n(wer)l(,)g(at)g(most)75
+1076 y(2)e(MOLS)e(can)j(be)g(created.)30 b(F)o(or)23
+b(all)g(v)n(alues)i(of)e Ft(q)g FK(with)h Fq(q)c Fp(>)g
+FK(2)j(and)h Fq(q)d Fv(6)p Fo(=)e FK(6,)k(a)g(list)h(of)g(MOLS)d(can)j
+(be)f(constructed.)75 1189 y(Ho)n(we)n(v)o(er)l(,)i Fy(GU)m(A)-6
+b(V)f(A)22 b FK(does)k(not)f(yet)g(construct)i(MOLS)c(for)i
+Fq(q)c Fv(\021)g FK(2)91 b Fo(\()p FK(mod)21 b(4)p Fo(\))p
+FK(.)32 b(If)25 b(it)f(is)h(not)g(possible)i(to)e(construct)75
+1302 y Ft(n)e FK(MOLS,)e(the)j(function)i(returns)f(`f)o(alse'.)216
+1415 y(MOLS)c(are)j(used)g(to)g(create)h Ft(q)p FK(-ary)f(codes)h
+(\(see)f Ft(MOLSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb
+2186 1416 a
+SDict begin H.S end
+ 2186 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(5.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2367
+1353 a
+SDict begin H.R end
+ 2367 1353 a 2367 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.4) cvn H.B /ANN pdfmark end
+ 2367 1415 a Black FK(\)\).)p
+75 1537 1648 4 v 1764 1542 a FF(Example)p 2102 1537 V
+75 1562 4 25 v 3747 1562 V 75 1662 4 100 v 188 1632 a(gap>)44
+b(M)e(:=)h(MOLS\()h(4,)f(3)g(\);;PrintArray\()k(M[1])d(\);)p
+3747 1662 V 75 1761 V 188 1732 a([)f([)85 b(0,)g(1,)g(2,)h(3)42
+b(],)p 3747 1761 V 75 1861 V 273 1831 a([)85 b(1,)g(0,)g(3,)h(2)42
+b(],)p 3747 1861 V 75 1961 V 273 1931 a([)85 b(2,)g(3,)g(0,)h(1)42
+b(],)p 3747 1961 V 75 2060 V 273 2030 a([)85 b(3,)g(2,)g(1,)h(0)42
+b(])h(])p 3747 2060 V 75 2160 V 188 2130 a(gap>)h(PrintArray\()i(M[2])d
+(\);)p 3747 2160 V 75 2260 V 188 2230 a([)g([)85 b(0,)g(2,)g(3,)h(1)42
+b(],)p 3747 2260 V 75 2359 V 273 2329 a([)85 b(1,)g(3,)g(2,)h(0)42
+b(],)p 3747 2359 V 75 2459 V 273 2429 a([)85 b(2,)g(0,)g(1,)h(3)42
+b(],)p 3747 2459 V 75 2558 V 273 2529 a([)85 b(3,)g(1,)g(0,)h(2)42
+b(])h(])p 3747 2558 V 75 2658 V 188 2628 a(gap>)h(PrintArray\()i(M[3])d
+(\);)p 3747 2658 V 75 2758 V 188 2728 a([)g([)85 b(0,)g(3,)g(1,)h(2)42
+b(],)p 3747 2758 V 75 2857 V 273 2827 a([)85 b(1,)g(2,)g(0,)h(3)42
+b(],)p 3747 2857 V 75 2957 V 273 2927 a([)85 b(2,)g(1,)g(3,)h(0)42
+b(],)p 3747 2957 V 75 3057 V 273 3027 a([)85 b(3,)g(0,)g(2,)h(1)42
+b(])h(])p 3747 3057 V 75 3156 V 188 3126 a(gap>)h(MOLS\()g(12,)f(3)g
+(\);)p 3747 3156 V 75 3256 V 188 3226 a(false)p 3747
+3256 V 75 3281 4 25 v 3747 3281 V 75 3284 3675 4 v 75
+3417 a
+SDict begin H.S end
+ 75 3417 a 75 3417 a
+SDict begin 13.6 H.A end
+ 75 3417 a 75 3417 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.12) cvn H.B /DEST pdfmark end
+ 75 3417
+a 116 x FJ(7.3.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsLatinSquar)n(e)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3708 a Fs(\006)22 b
+Ft(IsLatinSquare\()52 b(M)47 b(\))2491 b Fr(\(function\))p
+Black 216 3933 a Ft(IsLatinSquare)29 b FK(determines)d(if)f(a)f(matrix)
+h Ft(M)f FK(is)g(a)g(Latin)h(square.)33 b(F)o(or)24 b(a)g(Latin)h
+(square)h(of)e(size)h Fq(n)13 b Fv(\002)g Fq(n)p FK(,)24
+b(each)75 4046 y(ro)n(w)f(and)h(each)g(column)h(contains)g(all)f(the)g
+(inte)o(gers)h(1)p Fp(;)10 b(:)g(:)g(:)h(;)f Fq(n)24
+b FK(e)o(xactly)h(once.)p 75 4169 1648 4 v 1764 4174
+a FF(Example)p 2102 4169 V 75 4194 4 25 v 3747 4194 V
+75 4293 4 100 v 188 4264 a(gap>)44 b(IsLatinSquare\([[1,2],)q([2,)q
+(1]])q(\);)p 3747 4293 V 75 4393 V 188 4363 a(true)p
+3747 4393 V 75 4493 V 188 4463 a(gap>)g(IsLatinSquare\([[1,2,3)q(],[)q
+(2,3)q(,1)q(],[)q(1,3)q(,2])q(]\);)p 3747 4493 V 75 4592
+V 188 4562 a(false)p 3747 4592 V 75 4617 4 25 v 3747
+4617 V 75 4620 3675 4 v 75 4754 a
+SDict begin H.S end
+ 75 4754 a 75 4754 a
+SDict begin 13.6 H.A end
+
+75 4754 a 75 4754 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.13) cvn H.B /DEST pdfmark end
+ 75 4754 a 116 x FJ(7.3.13)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Ar)n(eMOLS)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 5044 a Fs(\006)22 b Ft(AreMOLS\()50 b(L)c(\))2770
+b Fr(\(function\))p Black 216 5270 a Ft(AreMOLS)27 b
+FK(determines)h(if)d Ft(L)g FK(is)g(a)g(list)h(of)g(mutually)h
+(orthogonal)h(Latin)e(squares)h(\(MOLS\).)c(F)o(or)i(each)h(pair)g(of)
+75 5383 y(Latin)32 b(squares)h(in)f(this)g(list,)i(the)e(function)h
+(checks)h(if)d(each)h(ordered)i(pair)e(of)g(elements)h(that)f(are)g(in)
+f(the)h(same)75 5496 y(position)23 b(in)e(these)h(matrices)g(occurs)g
+(e)o(xactly)h(once.)28 b(The)21 b(function)i Ft(MOLS)f
+FK(creates)g(MOLS)d(\(see)i Ft(MOLS)h FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 3412 5497 a
+SDict begin H.S end
+ 3412 5497 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.11)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3638 5434 a
+SDict begin H.R end
+ 3638 5434 a 3638 5496 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.11) cvn H.B /ANN pdfmark end
+ 3638 5496 a Black
+FK(\)\).)p Black Black eop end end
+%%Page: 135 135
+TeXDict begin HPSdict begin 135 134 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.135) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(135)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(M)e(:=)h(MOLS\(4,2\);)p 3747
+523 V 75 623 V 188 593 a([)g([)f([)h(0,)g(1,)g(2,)g(3)g(],)g([)f(1,)h
+(0,)g(3,)g(2)g(],)g([)g(2,)g(3,)g(0,)g(1)g(],)g([)f(3,)h(2,)g(1,)g(0)g
+(])g(],)p 3747 623 V 75 722 V 273 692 a([)f([)h(0,)g(2,)g(3,)g(1)g(],)g
+([)f(1,)h(3,)g(2,)g(0)g(],)g([)g(2,)g(0,)g(1,)g(3)g(],)g([)f(3,)h(1,)g
+(0,)g(2)g(])g(])f(])p 3747 722 V 75 822 V 188 792 a(gap>)i
+(AreMOLS\(M\);)p 3747 822 V 75 922 V 188 892 a(true)p
+3747 922 V 75 946 4 25 v 3747 946 V 75 949 3675 4 v 75
+1091 a
+SDict begin H.S end
+ 75 1091 a 75 1091 a
+SDict begin 13.6 H.A end
+ 75 1091 a 75 1091 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.4) cvn H.B /DEST pdfmark end
+ 75 1091
+a 150 x FM(7.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Some)30
+b(functions)g(r)n(elated)h(to)e(the)h(norm)g(of)g(a)f(code)p
+Black 75 1448 a FK(In)g(this)h(section,)j(some)d(functions)i(that)e
+(can)g(be)f(used)h(to)g(compute)h(the)e(norm)h(of)f(a)g(code)i(and)f
+(to)f(decide)i(upon)75 1561 y(its)24 b(normality)i(are)e(discussed.)32
+b(T)-7 b(ypically)h(,)25 b(these)g(are)f(applied)i(to)d(binary)j
+(linear)f(codes.)31 b(The)23 b(de\002nitions)j(of)e(this)75
+1674 y(section)h(were)f(introduced)i(in)e(Graham)f(and)h(Sloane)g([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 1829 1675 a
+SDict begin H.S end
+ 1829 1675
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(GS85)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2036 1612 a
+SDict begin H.R end
+ 2036 1612 a 2036 1674 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end
+ 2036
+1674 a Black 1 w FK(].)75 1819 y
+SDict begin H.S end
+ 75 1819 a 75 1819 a
+SDict begin 13.6 H.A end
+
+75 1819 a 75 1819 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.1) cvn H.B /DEST pdfmark end
+ 75 1819 a 102 x FJ(7.4.1)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(CoordinateNorm)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 2096 a Fs(\006)e Ft(CoordinateNorm\()52 b(C,)47 b(coord)h(\))2121
+b Fr(\(function\))p Black 216 2321 a Ft(CoordinateNorm)24
+b FK(returns)d(the)f(norm)g(of)g Ft(C)f FK(with)g(respect)i(to)f
+(coordinate)j Ft(coord)q FK(.)k(If)14 b Fq(C)3019 2335
+y Fm(a)3073 2321 y Fo(=)i Fv(f)p Fq(c)i Fv(2)11 b Fq(C)21
+b Fv(j)e Fq(c)3501 2335 y Fm(coor)o(d)3679 2321 y Fo(=)75
+2434 y Fq(a)p Fv(g)p FK(,)k(then)i(the)e(norm)h(of)g
+Ft(C)f FK(with)g(respect)i(to)f Ft(coord)g FK(is)g(de\002ned)g(as)1609
+2688 y(max)1546 2754 y Fm(v)p Fh(2)p Fm(GF)6 b Fk(\()p
+Fm(q)p Fk(\))1799 2735 y Ff(n)1880 2585 y Fm(q)1850 2707
+y Fa(\345)1838 2781 y Fm(a)p Fk(=)p Fr(1)1966 2688 y
+Fq(d)f Fo(\()p Fq(x)p Fp(;)g Fq(C)2180 2702 y Fm(a)2218
+2688 y Fo(\))p Fp(;)75 2949 y FK(with)23 b(the)h(con)l(v)o(ention)j
+(that)d Fq(d)5 b Fo(\()p Fq(x)p Fp(;)g Fq(C)1188 2963
+y Fm(a)1227 2949 y Fo(\))20 b(=)g Fq(n)j FK(if)18 b Fq(C)1573
+2963 y Fm(a)1633 2949 y FK(is)24 b(empty)-6 b(.)p 75
+3066 1648 4 v 1764 3071 a FF(Example)p 2102 3066 V 75
+3091 4 25 v 3747 3091 V 75 3190 4 100 v 188 3160 a(gap>)44
+b(CoordinateNorm\()j(HammingCode\()g(3,)c(GF\(2\))h(\),)f(3)f(\);)p
+3747 3190 V 75 3290 V 188 3260 a(3)p 3747 3290 V 75 3315
+4 25 v 3747 3315 V 75 3318 3675 4 v 75 3540 a
+SDict begin H.S end
+ 75 3540
+a 75 3540 a
+SDict begin 13.6 H.A end
+ 75 3540 a 75 3540 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.2) cvn H.B /DEST pdfmark end
+ 75 3540 a 116 x FJ(7.4.2)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(CodeNorm)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3830 a Fs(\006)22 b Ft(CodeNorm\()50 b(C)d(\))2723
+b Fr(\(function\))p Black 216 4056 a Ft(CodeNorm)27 b
+FK(returns)e(the)g(norm)f(of)h Ft(C)p FK(.)30 b(The)24
+b Fq(norm)g FK(of)g(a)g(code)h(is)g(de\002ned)g(as)f(the)g(minimum)h
+(of)f(the)g(norms)h(for)75 4169 y(the)h(respecti)n(v)o(e)i(coordinates)
+h(of)c(the)h(code.)36 b(In)26 b(ef)n(fect,)g(for)g(each)h(coordinate)h
+Ft(CoordinateNorm)i FK(is)c(called,)h(and)75 4282 y(the)d(minimum)f(of)
+h(the)f(calculated)k(numbers)e(is)e(returned.)p 75 4376
+1648 4 v 1764 4381 a FF(Example)p 2102 4376 V 75 4401
+4 25 v 3747 4401 V 75 4501 4 100 v 188 4471 a(gap>)44
+b(CodeNorm\()h(HammingCode\()h(3,)d(GF\(2\))i(\))d(\);)p
+3747 4501 V 75 4600 V 188 4571 a(3)p 3747 4600 V 75 4625
+4 25 v 3747 4625 V 75 4628 3675 4 v 75 4850 a
+SDict begin H.S end
+ 75 4850
+a 75 4850 a
+SDict begin 13.6 H.A end
+ 75 4850 a 75 4850 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.3) cvn H.B /DEST pdfmark end
+ 75 4850 a 116 x FJ(7.4.3)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(IsCoordinateAcceptable)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b
+Ft(IsCoordinateAccep)q(tab)q(le\()53 b(C,)47 b(coord)h(\))1750
+b Fr(\(function\))p Black 216 5367 a Ft(IsCoordinateAccept)q(abl)q(e)30
+b FK(returns)c(`true')f(if)f(coordinate)j Ft(coord)f
+FK(of)e Ft(C)g FK(is)g(acceptable.)34 b(A)23 b(coordinate)k(is)75
+5479 y(called)i Fq(acceptable)i FK(if)c(the)h(norm)g(of)g(the)g(code)g
+(with)g(respect)h(to)f(that)g(coordinate)j(is)c(not)h(more)g(than)h(tw)
+o(o)e(times)75 5592 y(the)d(co)o(v)o(ering)h(radius)g(of)e(the)h(code)g
+(plus)h(one.)p Black Black eop end end
+%%Page: 136 136
+TeXDict begin HPSdict begin 136 135 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.136) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(136)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(IsCoordinateAcceptabl)q(e\()49
+b(HammingCode\()d(3,)d(GF\(2\))h(\),)f(3)g(\);)p 3747
+523 V 75 623 V 188 593 a(true)p 3747 623 V 75 648 4 25
+v 3747 648 V 75 651 3675 4 v 75 869 a
+SDict begin H.S end
+ 75 869 a 75 869
+a
+SDict begin 13.6 H.A end
+ 75 869 a 75 869 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.4) cvn H.B /DEST pdfmark end
+ 75 869 a 116 x FJ(7.4.4)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(GeneralizedCodeNorm)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 1160 a Fs(\006)22 b Ft(GeneralizedCodeNo)q(rm\()53
+b(C,)47 b(subcode1,)j(subscode2,)g(...,)e(subcodek)h(\))544
+b Fr(\(function\))p Black 216 1386 a Ft(GeneralizedCodeNor)q(m)29
+b FK(returns)c(the)f Ft(k)p FK(-norm)g(of)f Ft(C)h FK(with)f(respect)i
+(to)f Ft(k)f FK(subcodes.)p 75 1496 1648 4 v 1764 1501
+a FF(Example)p 2102 1496 V 75 1521 4 25 v 3747 1521 V
+75 1621 4 100 v 188 1591 a(gap>)44 b(c)e(:=)h(RepetitionCode\()48
+b(7,)43 b(GF\(2\))h(\);;)p 3747 1621 V 75 1720 V 188
+1690 a(gap>)g(ham)f(:=)g(HammingCode\()j(3,)d(GF\(2\))i(\);;)p
+3747 1720 V 75 1820 V 188 1790 a(gap>)f(d)e(:=)h(EvenWeightSubcode\()49
+b(ham)43 b(\);;)p 3747 1820 V 75 1919 V 188 1890 a(gap>)h(e)e(:=)h
+(ConstantWeightSubco)q(de\()49 b(ham,)44 b(3)f(\);;)p
+3747 1919 V 75 2019 V 188 1989 a(gap>)h(GeneralizedCodeNorm\()49
+b(ham,)43 b(c,)h(d,)f(e)f(\);)p 3747 2019 V 75 2119 V
+188 2089 a(4)p 3747 2119 V 75 2144 4 25 v 3747 2144 V
+75 2147 3675 4 v 75 2365 a
+SDict begin H.S end
+ 75 2365 a 75 2365 a
+SDict begin 13.6 H.A end
+ 75 2365
+a 75 2365 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.5) cvn H.B /DEST pdfmark end
+ 75 2365 a 117 x FJ(7.4.5)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(IsNormalCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75
+2656 a Fs(\006)22 b Ft(IsNormalCode\()51 b(C)c(\))2538
+b Fr(\(function\))p Black 216 2882 a Ft(IsNormalCode)26
+b FK(returns)d(`true')g(if)f Ft(C)g FK(is)f(normal.)29
+b(A)21 b(code)i(is)f(called)h Fq(normal)g FK(if)f(the)g(norm)g(of)g
+(the)g(code)h(is)f(not)75 2995 y(more)j(than)h(tw)o(o)f(times)g(the)h
+(co)o(v)o(ering)g(radius)h(of)e(the)g(code)h(plus)g(one.)34
+b(Almost)25 b(all)g(codes)i(are)e(normal,)h(ho)n(we)n(v)o(er)75
+3107 y(some)e(\(non-linear\))j(abnormal)e(codes)f(ha)n(v)o(e)h(been)f
+(found.)216 3220 y(Often,)f(it)f(is)g(dif)n(\002cult)h(to)f(\002nd)g
+(out)h(whether)g(a)f(code)h(is)f(normal,)h(because)i(it)d(in)l(v)n(olv)
+o(es)i(computing)h(the)d(co)o(v)o(er)n(-)75 3333 y(ing)f(radius.)28
+b(Ho)n(we)n(v)o(er)l(,)21 b Ft(IsNormalCode)j FK(uses)c(much)h
+(information)h(from)e(the)h(literature)h(\(in)f(particular)l(,)i([)p
+0.0236 0.6179 0.0894 TeXcolorrgb 3482 3334 a
+SDict begin H.S end
+ 3482 3334
+a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(GS85)p 0.0236 0.6179 0.0894
+TeXcolorrgb 3689 3271 a
+SDict begin H.R end
+ 3689 3271 a 3689 3333 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end
+ 3689
+3333 a Black FK(]\))75 3446 y(about)i(normality)g(for)f(certain)h(code)
+f(parameters.)p 75 3557 1648 4 v 1764 3562 a FF(Example)p
+2102 3557 V 75 3581 4 25 v 3747 3581 V 75 3681 4 100
+v 188 3651 a(gap>)44 b(IsNormalCode\()i(HammingCode\()h(3,)c(GF\(2\))h
+(\))f(\);)p 3747 3681 V 75 3781 V 188 3751 a(true)p 3747
+3781 V 75 3806 4 25 v 3747 3806 V 75 3809 3675 4 v 75
+3950 a
+SDict begin H.S end
+ 75 3950 a 75 3950 a
+SDict begin 13.6 H.A end
+ 75 3950 a 75 3950 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.5) cvn H.B /DEST pdfmark end
+ 75 3950
+a 150 x FM(7.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Miscellaneous)30
+b(functions)p Black 75 4307 a FK(In)25 b(this)i(section)g(we)e
+(describe)i(se)n(v)o(eral)g(v)o(ector)f(space)h(functions)h
+Fy(GU)m(A)-6 b(V)f(A)24 b FK(uses)i(for)g(constructing)j(codes)e(or)e
+(per)n(-)75 4420 y(forming)g(calculations)i(with)c(codes.)216
+4532 y(In)29 b(this)g(section,)i(some)d(ne)n(w)g(miscellaneous)k
+(functions)f(are)e(described,)j(including)f(weight)e(enumerators,)75
+4645 y(the)24 b(MacW)l(illiams-transform)k(and)c(af)n(\002nity)g(and)g
+(almost)g(af)n(\002nity)g(of)f(codes.)75 4796 y
+SDict begin H.S end
+ 75 4796
+a 75 4796 a
+SDict begin 13.6 H.A end
+ 75 4796 a 75 4796 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.1) cvn H.B /DEST pdfmark end
+ 75 4796 a 97 x FJ(7.5.1)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(CodeW)-6 b(eightEnumerator)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5067 a Fs(\006)22 b
+Ft(CodeWeightEnumera)q(tor)q(\()52 b(C)47 b(\))2167 b
+Fr(\(function\))p Black 216 5293 a Ft(CodeWeightEnumerat)q(or)29
+b FK(returns)c(a)e(polynomial)j(of)e(the)g(follo)n(wing)h(form:)1649
+5535 y Fq(f)13 b Fo(\()p Fq(x)p Fo(\))22 b(=)1945 5438
+y Fm(n)1915 5554 y Fa(\345)1910 5628 y Fm(i)p Fk(=)p
+Fr(0)2023 5535 y Fq(A)2079 5549 y Fm(i)2101 5535 y Fq(x)2141
+5497 y Fm(i)2165 5535 y Fp(;)p Black Black eop end end
+%%Page: 137 137
+TeXDict begin HPSdict begin 137 136 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.137) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(137)p Black 75 399 a(where)24 b Fq(A)376
+413 y Fm(i)421 399 y FK(is)f(the)h(number)g(of)g(code)n(w)o(ords)h(in)f
+Ft(C)f FK(with)g(weight)h Fq(i)p FK(.)p 75 482 1648 4
+v 1764 487 a FF(Example)p 2102 482 V 75 507 4 25 v 3747
+507 V 75 607 4 100 v 188 577 a(gap>)44 b(CodeWeightEnumerator\()49
+b(ElementsCode\()e([)c([)f(0,0,0)i(],)f([)g(0,0,1)h(],)p
+3747 607 V 75 706 V 188 676 a(>)f([)f(0,1,1)i(],)f([)g(1,1,1)h(])f(],)g
+(GF\(2\))h(\))f(\);)p 3747 706 V 75 806 V 188 776 a(x\2103)g(+)g
+(x\2102)g(+)g(x)g(+)f(1)p 3747 806 V 75 906 V 188 876
+a(gap>)i(CodeWeightEnumerator\()49 b(HammingCode\()e(3,)c(GF\(2\))h(\))
+e(\);)p 3747 906 V 75 1005 V 188 975 a(x\2107)h(+)g(7*x\2104)h(+)f
+(7*x\2103)h(+)e(1)p 3747 1005 V 75 1030 4 25 v 3747 1030
+V 75 1033 3675 4 v 75 1160 a
+SDict begin H.S end
+ 75 1160 a 75 1160 a
+SDict begin 13.6 H.A end
+ 75 1160
+a 75 1160 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.2) cvn H.B /DEST pdfmark end
+ 75 1160 a 116 x FJ(7.5.2)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(CodeDistanceEnumerator)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1450 a Fs(\006)22 b Ft(CodeDistanceEnume)q(rat)q(or\()53
+b(C,)47 b(w)g(\))1935 b Fr(\(function\))p Black 216 1676
+a Ft(CodeDistanceEnumer)q(ato)q(r)29 b FK(returns)c(a)e(polynomial)j
+(of)d(the)h(follo)n(wing)h(form:)1649 1892 y Fq(f)13
+b Fo(\()p Fq(x)p Fo(\))22 b(=)1945 1795 y Fm(n)1915 1911
+y Fa(\345)1910 1985 y Fm(i)p Fk(=)p Fr(0)2023 1892 y
+Fq(B)2079 1906 y Fm(i)2101 1892 y Fq(x)2141 1854 y Fm(i)2165
+1892 y Fp(;)75 2118 y FK(where)i Fq(B)376 2132 y Fm(i)421
+2118 y FK(is)f(the)h(number)g(of)g(code)n(w)o(ords)h(with)f(distance)h
+Fq(i)e FK(to)h Ft(w)p FK(.)216 2231 y(If)66 b Ft(w)g
+FK(is)g(a)g(code)n(w)o(ord,)78 b(then)67 b Ft(CodeDistanceEnumer)q(at)q
+(or)72 b FK(returns)c(the)e(same)h(polynomial)h(as)75
+2343 y Ft(CodeWeightEnumerat)q(or)p FK(.)p 75 2421 1648
+4 v 1764 2426 a FF(Example)p 2102 2421 V 75 2446 4 25
+v 3747 2446 V 75 2546 4 100 v 188 2516 a(gap>)44 b
+(CodeDistanceEnumerato)q(r\()49 b(HammingCode\()d(3,)d(GF\(2\))h
+(\),[0,0,0,0,0,0,1])k(\);)p 3747 2546 V 75 2646 V 188
+2616 a(x\2106)43 b(+)g(3*x\2105)h(+)f(4*x\2104)h(+)e(4*x\2103)i(+)f
+(3*x\2102)h(+)f(x)p 3747 2646 V 75 2745 V 188 2715 a(gap>)h
+(CodeDistanceEnumerato)q(r\()49 b(HammingCode\()d(3,)d(GF\(2\))h
+(\),[1,1,1,1,1,1,1])k(\);)p 3747 2745 V 75 2845 V 188
+2815 a(x\2107)43 b(+)g(7*x\2104)h(+)f(7*x\2103)h(+)e(1)h(#)g
+(`[1,1,1,1,1,1,1]')48 b($\\in$)c(`HammingCode\()j(3,)c(GF\(2)g(\))g
+(\)')p 3747 2845 V 75 2870 4 25 v 3747 2870 V 75 2873
+3675 4 v 75 3060 a
+SDict begin H.S end
+ 75 3060 a 75 3060 a
+SDict begin 13.6 H.A end
+ 75 3060 a 75 3060
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.3) cvn H.B /DEST pdfmark end
+ 75 3060 a 117 x FJ(7.5.3)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(CodeMacW)n(illiamsT)-7 b(ransf)n(orm)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3351 a Fs(\006)22 b Ft(CodeMacWilliamsTr)q(ans)q(for)q
+(m\()53 b(C)47 b(\))1981 b Fr(\(function\))p Black 216
+3577 a Ft(CodeMacWilliamsTra)q(nsf)q(orm)30 b FK(returns)25
+b(a)e(polynomial)j(of)d(the)h(follo)n(wing)h(form:)1650
+3792 y Fq(f)13 b Fo(\()p Fq(x)p Fo(\))22 b(=)1946 3695
+y Fm(n)1916 3811 y Fa(\345)1911 3885 y Fm(i)p Fk(=)p
+Fr(0)2019 3792 y Fq(C)2078 3806 y Fm(i)2100 3792 y Fq(x)2140
+3754 y Fm(i)2164 3792 y Fp(;)75 4018 y FK(where)d Fq(C)374
+4032 y Fm(i)419 4018 y FK(is)k(the)h(number)h(of)e(code)n(w)o(ords)i
+(with)f(weight)g Fq(i)f FK(in)g(the)h Fq(dual)h FK(code)f(of)f
+Ft(C)q FK(.)p 75 4102 1648 4 v 1764 4107 a FF(Example)p
+2102 4102 V 75 4127 4 25 v 3747 4127 V 75 4226 4 100
+v 188 4196 a(gap>)44 b(CodeMacWilliamsTransf)q(orm)q(\()k
+(HammingCode\()f(3,)c(GF\(2\))h(\))f(\);)p 3747 4226
+V 75 4326 V 188 4296 a(7*x\2104)h(+)f(1)p 3747 4326 V
+75 4351 4 25 v 3747 4351 V 75 4354 3675 4 v 75 4541 a
+SDict begin H.S end
+
+75 4541 a 75 4541 a
+SDict begin 13.6 H.A end
+ 75 4541 a 75 4541 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.4) cvn H.B /DEST pdfmark end
+ 75 4541 a 117
+x FJ(7.5.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeDensity)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 4832 a Fs(\006)22 b
+Ft(CodeDensity\()51 b(C)c(\))2584 b Fr(\(function\))p
+Black 216 5058 a Ft(CodeDensity)27 b FK(returns)e(the)f
+Fq(density)h FK(of)f Ft(C)p FK(.)k(The)23 b(density)i(of)f(a)f(code)h
+(is)g(de\002ned)g(as)1703 5206 y Fq(M)16 b Fv(\001)8
+b Fq(V)1879 5220 y Fm(q)1916 5206 y Fo(\()p Fq(n)p Fp(;)g
+Fq(t)e Fo(\))p 1703 5248 395 4 v 1859 5332 a Fq(q)1904
+5305 y Fm(n)2107 5269 y Fp(;)75 5479 y FK(where)27 b
+Fq(M)j FK(is)c(the)h(size)h(of)f(the)g(code,)c Fq(V)1326
+5493 y Fm(q)1364 5479 y Fo(\()p Fq(n)p Fp(;)8 b Fq(t)e
+Fo(\))27 b FK(is)g(the)g(size)g(of)g(a)g(sphere)h(of)f(radius)f
+Fq(t)32 b FK(in)27 b Fq(GF)7 b Fo(\()p Fq(q)3104 5446
+y Fm(n)3142 5479 y Fo(\))26 b FK(\(which)i(may)e(be)75
+5592 y(computed)e(using)f Ft(SphereContent)p FK(\),)h
+Fq(t)k FK(is)21 b(the)i(co)o(v)o(ering)g(radius)h(of)e(the)g(code)h
+(and)f Fq(n)g FK(is)g(the)g(length)i(of)e(the)g(code.)p
+Black Black eop end end
+%%Page: 138 138
+TeXDict begin HPSdict begin 138 137 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.138) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(138)p Black 75 399 1648 4 v 1764 404 a
+FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523
+4 100 v 188 493 a(gap>)44 b(CodeDensity\()i(HammingCode\()g(3,)e
+(GF\(2\))g(\))e(\);)p 3747 523 V 75 623 V 188 593 a(1)p
+3747 623 V 75 722 V 188 692 a(gap>)i(CodeDensity\()i(ReedMullerCode\()i
+(1,)43 b(4)f(\))h(\);)p 3747 722 V 75 822 V 188 792 a(14893/2048)p
+3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75
+1069 a
+SDict begin H.S end
+ 75 1069 a 75 1069 a
+SDict begin 13.6 H.A end
+ 75 1069 a 75 1069 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.5) cvn H.B /DEST pdfmark end
+ 75 1069
+a 117 x FJ(7.5.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Spher)n(eContent)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 1360 a Fs(\006)22 b
+Ft(SphereContent\()52 b(n,)47 b(t,)g(F)g(\))2213 b Fr(\(function\))p
+Black 216 1586 a Ft(SphereContent)43 b FK(returns)e(the)f(content)h(of)
+e(a)g(ball)h(of)f(radius)i Ft(t)e FK(around)i(an)e(arbitrary)i(element)
+g(of)e(the)75 1699 y(v)o(ectorspace)h Fq(F)602 1666 y
+Fm(n)640 1699 y FK(.)69 b(This)37 b(is)g(the)h(cardinality)i(of)e(the)f
+(set)h(of)f(all)h(elements)g(of)g Fq(F)2773 1666 y Fm(n)2847
+1699 y FK(that)f(are)h(at)f(distance)j(\(see)75 1812
+y Ft(DistanceCodeword)29 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 870 1813 a
+SDict begin H.S end
+ 870 1813 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(3.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1051 1750 a
+SDict begin H.R end
+ 1051 1750 a 1051 1812 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end
+ 1051 1812 a Black
+FK(\))24 b(less)g(than)g(or)f(equal)i(to)f Ft(t)f FK(from)g(an)h
+(element)g(of)g Fq(F)2704 1779 y Fm(n)2741 1812 y FK(.)216
+1924 y(In)29 b(the)g(conte)o(xt)h(of)e(codes,)j(the)e(function)i(is)d
+(used)i(to)f(determine)h(if)e(a)h(code)g(is)f(perfect.)46
+b(A)28 b(code)h(is)g Fq(perfect)75 2037 y FK(if)g(spheres)i(of)d
+(radius)h Fq(t)34 b FK(around)d(all)e(code)n(w)o(ords)i(partition)g
+(the)e(whole)h(ambient)g(v)o(ector)g(space,)h(where)e
+Fq(t)h FK(is)f(the)75 2150 y(number)24 b(of)g(errors)h(the)e(code)i
+(can)f(correct.)p 75 2243 1648 4 v 1764 2248 a FF(Example)p
+2102 2243 V 75 2268 4 25 v 3747 2268 V 75 2367 4 100
+v 188 2338 a(gap>)44 b(SphereContent\()j(15,)c(0,)g(GF\(2\))h(\);)p
+3747 2367 V 75 2467 V 188 2437 a(1)170 b(#)42 b(Only)i(one)f(word)h
+(with)g(distance)h(0,)e(which)h(is)f(the)g(word)h(itself)p
+3747 2467 V 75 2567 V 188 2537 a(gap>)g(SphereContent\()j(11,)c(3,)g
+(GF\(4\))h(\);)p 3747 2567 V 75 2666 V 188 2636 a(4984)p
+3747 2666 V 75 2766 V 188 2736 a(gap>)g(C)e(:=)h(HammingCode\(5\);)p
+3747 2766 V 75 2866 V 188 2836 a(a)g(linear)h([31,26,3]1)i(Hamming)e
+(\(5,2\))h(code)e(over)h(GF\(2\))p 3747 2866 V 75 2965
+V 188 2935 a(#the)g(minimum)g(distance)h(is)e(3,)g(so)g(the)h(code)g
+(can)f(correct)i(one)e(error)p 3747 2965 V 75 3065 V
+188 3035 a(gap>)h(\()e(SphereContent\()47 b(31,)d(1,)f(GF\(2\))h(\))f
+(*)f(Size\(C\))j(\))e(=)f(2)h(\210)g(31;)p 3747 3065
+V 75 3164 V 188 3135 a(true)p 3747 3164 V 75 3189 4 25
+v 3747 3189 V 75 3192 3675 4 v 75 3324 a
+SDict begin H.S end
+ 75 3324 a 75
+3324 a
+SDict begin 13.6 H.A end
+ 75 3324 a 75 3324 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.6) cvn H.B /DEST pdfmark end
+ 75 3324 a 116 x FJ(7.5.6)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Krawtchouk)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3614 a Fs(\006)22 b Ft(Krawtchouk\()51
+b(k,)c(i,)g(n,)g(q)g(\))2213 b Fr(\(function\))p Black
+216 3840 a Ft(Krawtchouk)24 b FK(returns)f(the)e(Kra)o(wtchouk)h
+(number)g Fq(K)1929 3854 y Fm(k)1963 3840 y Fo(\()p Fq(i)p
+Fo(\))p FK(.)28 b Ft(q)20 b FK(must)h(be)g(a)g(prime)g(po)n(wer)l(,)h
+Ft(n)e FK(must)h(be)g(a)g(positi)n(v)o(e)75 3953 y(inte)o(ger)l(,)41
+b Ft(k)35 b FK(must)h(be)g(a)g(non-ne)o(gati)n(v)o(e)i(inte)o(ger)f
+(less)g(then)g(or)f(equal)h(to)f Ft(n)f FK(and)i Ft(i)e
+FK(can)i(be)f(an)o(y)g(inte)o(ger)-5 b(.)67 b(\(See)75
+4066 y Ft(KrawtchoukMat)27 b FK(\()p 0.0236 0.0894 0.6179
+TeXcolorrgb 730 4067 a
+SDict begin H.S end
+ 730 4067 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(7.3.1)p 0.0236 0.0894 0.6179 TeXcolorrgb
+911 4004 a
+SDict begin H.R end
+ 911 4004 a 911 4066 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.1) cvn H.B /ANN pdfmark end
+ 911 4066 a Black FK(\)\).)j(This)23
+b(number)i(is)e(the)h(v)n(alue)g(at)g Fq(x)d Fo(=)e Fq(i)k
+FK(of)h(the)g(polynomial)984 4309 y Fq(K)1050 4263 y
+Fm(n)p Fl(;)p Fm(q)1043 4337 y(k)1139 4309 y Fo(\()p
+Fq(x)p Fo(\))d(=)1402 4212 y Fm(n)1372 4328 y Fa(\345)1371
+4402 y Fm(j)r Fk(=)p Fr(0)1476 4309 y Fo(\()p Fv(\000)p
+FK(1)p Fo(\))1672 4271 y Fm(j)1697 4309 y Fo(\()p Fq(q)13
+b Fv(\000)g FK(1)p Fo(\))1954 4271 y Fm(k)q Fh(\000)d
+Fm(j)2070 4309 y Fq(b)p Fo(\()p Fq(x)p Fp(;)24 b Fq(j)r
+Fo(\))p Fq(b)p Fo(\()p Fq(n)13 b Fv(\000)g Fq(x)p Fp(;)d
+Fq(k)k Fv(\000)27 b Fq(j)r Fo(\))p Fp(;)75 4581 y FK(where)f
+Fq(b)p Fo(\()p Fq(v)-7 b Fp(;)10 b Fq(u)p Fo(\))24 b(=)d
+Fq(u)p FK(!)p Fp(=)p Fo(\()p Fq(v)p FK(!)p Fo(\()p Fq(v)14
+b Fv(\000)g Fq(u)p Fo(\))p FK(!)p Fo(\))28 b FK(is)e(the)g(binomial)i
+(coef)n(\002cient)f(if)f Fq(u)p Fp(;)10 b Fq(v)27 b FK(are)f(inte)o
+(gers.)37 b(F)o(or)26 b(more)g(properties)i(of)75 4694
+y(these)d(polynomials,)h(see)d([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 948 4695 a
+SDict begin H.S end
+ 948 4695 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb
+1170 4632 a
+SDict begin H.R end
+ 1170 4632 a 1170 4694 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end
+ 1170 4694 a Black
+1 w FK(].)p 75 4805 1648 4 v 1764 4810 a FF(Example)p
+2102 4805 V 75 4830 4 25 v 3747 4830 V 75 4930 4 100
+v 188 4900 a(gap>)44 b(Krawtchouk\()i(2,)d(0,)g(3,)g(2\);)p
+3747 4930 V 75 5030 V 188 5000 a(3)p 3747 5030 V 75 5055
+4 25 v 3747 5055 V 75 5058 3675 4 v 75 5189 a
+SDict begin H.S end
+ 75 5189
+a 75 5189 a
+SDict begin 13.6 H.A end
+ 75 5189 a 75 5189 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.7) cvn H.B /DEST pdfmark end
+ 75 5189 a 116 x FJ(7.5.7)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Primiti)o(v)o(eUnityRoot)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b
+Ft(PrimitiveUnityRoo)q(t\()53 b(F,)47 b(n)f(\))2121 b
+Fr(\(function\))p Black Black Black eop end end
+%%Page: 139 139
+TeXDict begin HPSdict begin 139 138 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.139) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(139)p Black 216 399 a Ft(PrimitiveUnityRoot)34
+b FK(returns)29 b(a)f(primiti)n(v)o(e)h Ft(n)p FK(-th)f(root)h(of)e
+(unity)i(in)f(an)g(e)o(xtension)i(\002eld)e(of)g Ft(F)p
+FK(.)41 b(This)28 b(is)g(a)75 511 y(\002nite)22 b(\002eld)h(element)g
+Fq(a)f FK(with)g(the)h(property)h Fq(a)1533 478 y Fm(n)1590
+511 y Fo(=)19 b FK(1)j(in)g Ft(F)q FK(,)f(and)i Ft(n)f
+FK(is)g(the)h(smallest)g(inte)o(ger)h(such)f(that)g(this)g(equality)75
+624 y(holds.)p 75 728 1648 4 v 1764 733 a FF(Example)p
+2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188
+823 a(gap>)44 b(PrimitiveUnityRoot\()k(GF\(2\),)d(15)e(\);)p
+3747 853 V 75 952 V 188 923 a(Z\(2\2104\))p 3747 952
+V 75 1052 V 188 1022 a(gap>)h(last\21015;)p 3747 1052
+V 75 1152 V 188 1122 a(Z\(2\)\2100)p 3747 1152 V 75 1251
+V 188 1221 a(gap>)g(PrimitiveUnityRoot\()k(GF\(8\),)d(21)e(\);)p
+3747 1251 V 75 1351 V 188 1321 a(Z\(2\2106\)\2103)p 3747
+1351 V 75 1376 4 25 v 3747 1376 V 75 1379 3675 4 v 75
+1512 a
+SDict begin H.S end
+ 75 1512 a 75 1512 a
+SDict begin 13.6 H.A end
+ 75 1512 a 75 1512 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.8) cvn H.B /DEST pdfmark end
+ 75 1512
+a 116 x FJ(7.5.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Primiti)o(v)o(eP)n
+(olynomialsNr)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1803
+a Fs(\006)22 b Ft(PrimitivePolynomi)q(als)q(Nr\()53 b(n,)47
+b(F)g(\))1935 b Fr(\(function\))p Black 216 2028 a Ft
+(PrimitivePolynomia)q(lsN)q(r)38 b FK(returns)d(the)e(number)h(of)f
+(irreducible)j(polynomials)g(o)o(v)o(er)d Fq(F)f Fo(=)25
+b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))33 b FK(of)75 2141 y(de)o(gree)24
+b Ft(n)f FK(with)g(\(maximum\))h(period)g Fq(q)1342 2108
+y Fm(n)1392 2141 y Fv(\000)12 b FK(1.)29 b(\(According)c(to)e(a)g
+(theorem)h(of)f(S.)f(Golomb,)h(this)h(is)f Fu(f)p Fo(\()7
+b Fq(p)3392 2108 y Fm(n)3442 2141 y Fv(\000)12 b FK(1)p
+Fo(\))p Fp(=)p Fq(n)p FK(.\))216 2254 y(See)54 b(also)h(the)f
+Fy(GAP)f FK(function)j Ft(RandomPrimitivePol)q(yno)q(mia)q(l)p
+FK(,)67 b Ft(RandomPrimitivePoly)q(no)q(mia)q(l)75 2367
+y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2368 a
+SDict begin H.S end
+
+105 2368 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(2.2.2)p
+0.0236 0.0894 0.6179 TeXcolorrgb 286 2305 a
+SDict begin H.R end
+ 286 2305
+a 286 2367 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.2.2.2) cvn H.B /ANN pdfmark end
+ 286 2367 a Black FK(\).)p 75 2486 1648 4
+v 1764 2491 a FF(Example)p 2102 2486 V 75 2511 4 25 v
+3747 2511 V 75 2611 4 100 v 188 2581 a(gap>)44 b(PrimitivePolynomialsN)
+q(r\(3)q(,4\))q(;)p 3747 2611 V 75 2710 V 188 2681 a(12)p
+3747 2710 V 75 2810 V 3747 2810 V 75 2835 4 25 v 3747
+2835 V 75 2838 3675 4 v 75 2971 a
+SDict begin H.S end
+ 75 2971 a 75 2971 a
+SDict begin 13.6 H.A end
+
+75 2971 a 75 2971 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.9) cvn H.B /DEST pdfmark end
+ 75 2971 a 116 x FJ(7.5.9)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(Irr)n(educibleP)n(olynomialsNr)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 3262 a Fs(\006)22 b Ft(IrreduciblePolyno)q
+(mia)q(lsN)q(r\()53 b(n,)47 b(F)g(\))1842 b Fr(\(function\))p
+Black 216 3488 a Ft(PrimitivePolynomia)q(lsN)q(r)38 b
+FK(returns)d(the)e(number)h(of)f(irreducible)j(polynomials)g(o)o(v)o
+(er)d Fq(F)f Fo(=)25 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))33
+b FK(of)75 3601 y(de)o(gree)25 b Ft(n)p FK(.)p 75 3723
+1648 4 v 1764 3728 a FF(Example)p 2102 3723 V 75 3748
+4 25 v 3747 3748 V 75 3848 4 100 v 188 3818 a(gap>)44
+b(IrreduciblePolynomial)q(sNr)q(\(3,)q(4\))q(;)p 3747
+3848 V 75 3947 V 188 3917 a(20)p 3747 3947 V 75 4047
+V 3747 4047 V 75 4072 4 25 v 3747 4072 V 75 4075 3675
+4 v 75 4208 a
+SDict begin H.S end
+ 75 4208 a 75 4208 a
+SDict begin 13.6 H.A end
+ 75 4208 a 75 4208 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.10) cvn H.B /DEST pdfmark end
+
+75 4208 a 116 x FJ(7.5.10)p 0.0 0.0 1.0 TeXcolorrgb 99
+w(MatrixRepr)n(esentationOfElement)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 4499 a Fs(\006)22 b Ft(MatrixRepresentat)q(ion)q(OfE)q
+(lem)q(en)q(t\()53 b(a,)47 b(F)f(\))1611 b Fr(\(function\))p
+Black 216 4724 a FK(Here)33 b Ft(F)g FK(is)g(either)h(a)e(\002nite)i(e)
+o(xtension)h(of)e(the)g(\223base)i(\002eld\224)e Fq(GF)7
+b Fo(\()g Fq(p)p Fo(\))33 b FK(or)g(of)g(the)g(rationals)i
+Fi(Q)p FK(,)g(and)e Fq(a)26 b Fv(2)f Fq(F)7 b FK(.)75
+4837 y(The)21 b(command)i Ft(MatrixRepresentati)q(onO)q(fEl)q(em)q(ent)
+28 b FK(returns)23 b(a)f(matrix)g(representation)k(of)c
+Ft(a)f FK(o)o(v)o(er)h(the)g(base)75 4950 y(\002eld.)216
+5063 y(If)h(the)h(element)h Ft(a)e FK(is)g(de\002ned)i(o)o(v)o(er)e
+(the)h(base)g(\002eld)g(then)g(it)f(returns)i(the)f(corresponding)k(1)
+13 b Fv(\002)g FK(1)22 b(matrix.)p 75 5186 1648 4 v 1764
+5191 a FF(Example)p 2102 5186 V 75 5211 4 25 v 3747 5211
+V 75 5310 4 100 v 188 5280 a(gap>)44 b(a:=Random\(GF\(4\)\);)p
+3747 5310 V 75 5410 V 188 5380 a(0*Z\(2\))p 3747 5410
+V 75 5510 V 188 5480 a(gap>)g(M:=MatrixRepresentati)q(onO)q(fEl)q(em)q
+(ent)q(\(a,)q(GF\()q(4\)\))q(;;)49 b(Display\(M\);)p
+3747 5510 V 75 5609 V 230 5579 a(.)p 3747 5609 V Black
+Black eop end end
+%%Page: 140 140
+TeXDict begin HPSdict begin 140 139 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.140) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(140)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(a:=Random\(GF\(4\)\);)p 3747 428 V 75 528 V 188 498
+a(Z\(2\2102\))p 3747 528 V 75 628 V 188 598 a(gap>)g
+(M:=MatrixRepresentati)q(onO)q(fEl)q(em)q(ent)q(\(a,)q(GF\()q(4\)\))q
+(;;)49 b(Display\(M\);)p 3747 628 V 75 727 V 230 697
+a(.)43 b(1)p 3747 727 V 75 827 V 230 797 a(1)g(1)p 3747
+827 V 75 927 V 188 897 a(gap>)p 3747 927 V 75 1026 V
+3747 1026 V 75 1051 4 25 v 3747 1051 V 75 1054 3675 4
+v 75 1287 a
+SDict begin H.S end
+ 75 1287 a 75 1287 a
+SDict begin 13.6 H.A end
+ 75 1287 a 75 1287 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.11) cvn H.B /DEST pdfmark end
+ 75
+1287 a 116 x FJ(7.5.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Recipr)n(ocalP)n
+(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1577 a
+Fs(\006)22 b Ft(ReciprocalPolynom)q(ial)q(\()52 b(P)47
+b(\))2167 b Fr(\(function\))p Black 216 1803 a Ft(ReciprocalPolynomi)q
+(al)35 b FK(returns)c(the)e Fq(r)m(ecipr)l(ocal)j FK(of)d(polynomial)j
+Ft(P)p FK(.)45 b(This)29 b(is)g(a)g(polynomial)j(with)d(co-)75
+1916 y(ef)n(\002cients)36 b(of)e Ft(P)g FK(in)h(the)f(re)n(v)o(erse)i
+(order)-5 b(.)62 b(So)34 b(if)g Fq(P)26 b Fo(=)g Fq(a)1884
+1930 y Fr(0)1938 1916 y Fo(+)17 b Fq(a)2071 1930 y Fr(1)2109
+1916 y Fq(X)24 b Fo(+)17 b Fp(:::)g Fo(+)f Fq(a)2501
+1930 y Fm(n)2539 1916 y Fq(X)2604 1883 y Fm(n)2640 1916
+y FK(,)37 b(the)d(reciprocal)k(polynomial)e(is)75 2029
+y Fq(P)131 1996 y Fh(0)173 2029 y Fo(=)20 b Fq(a)309
+2043 y Fm(n)359 2029 y Fo(+)13 b Fq(a)488 2043 y Fm(n)p
+Fh(\000)p Fr(1)610 2029 y Fq(X)21 b Fo(+)13 b Fp(:::)g
+Fo(+)g Fq(a)988 2043 y Fr(0)1025 2029 y Fq(X)1090 1996
+y Fm(n)1126 2029 y FK(.)216 2142 y(This)28 b(command)h(can)g(also)g(be)
+g(called)g(using)h(the)e(syntax)i Ft(ReciprocalPolynom)q(ial)q(\()52
+b(P)47 b(,)g(n)g(\))p FK(.)42 b(In)29 b(this)75 2255
+y(form,)20 b(the)g(number)h(of)f(coef)n(\002cients)h(of)f
+Ft(P)f FK(is)h(assumed)h(to)f(be)f(less)i(than)f(or)g(equal)h(to)e
+Fq(n)9 b Fo(+)g FK(1)20 b(\(with)g(zero)g(coef)n(\002cients)75
+2368 y(added)36 b(in)f(the)g(highest)h(de)o(grees,)j(if)34
+b(necessary\).)65 b(Therefore,)39 b(the)c(reciprocal)j(polynomial)f
+(also)e(has)g(de)o(gree)75 2481 y Fq(n)13 b Fo(+)g FK(1.)p
+75 2591 1648 4 v 1764 2596 a FF(Example)p 2102 2591 V
+75 2616 4 25 v 3747 2616 V 75 2716 4 100 v 188 2686 a(gap>)44
+b(P)e(:=)h(UnivariatePolynomia)q(l\()49 b(GF\(3\),)44
+b(Z\(3\)\2100)h(*)d([1,0,1,2])k(\);)p 3747 2716 V 75
+2815 V 188 2785 a(Z\(3\)\2100+x_1\2102-x_1\2103)p 3747
+2815 V 75 2915 V 188 2885 a(gap>)e(RecP)f(:=)g(ReciprocalPolynomia)q
+(l\()49 b(P)43 b(\);)p 3747 2915 V 75 3015 V 188 2985
+a(-Z\(3\)\2100+x_1+x_1\2103)p 3747 3015 V 75 3114 V 188
+3084 a(gap>)h(ReciprocalPolynomial\()49 b(RecP)44 b(\))f(=)f(P;)p
+3747 3114 V 75 3214 V 188 3184 a(true)p 3747 3214 V 75
+3313 V 188 3284 a(gap>)i(P)e(:=)h(UnivariatePolynomia)q(l\()49
+b(GF\(3\),)44 b(Z\(3\)\2100)h(*)d([1,0,1,2])k(\);)p 3747
+3313 V 75 3413 V 188 3383 a(Z\(3\)\2100+x_1\2102-x_1\2103)p
+3747 3413 V 75 3513 V 188 3483 a(gap>)e(ReciprocalPolynomial\()49
+b(P,)43 b(6)g(\);)p 3747 3513 V 75 3612 V 188 3582 a
+(-x_1\2103+x_1\2104+x_1\2106)p 3747 3612 V 75 3637 4
+25 v 3747 3637 V 75 3640 3675 4 v 75 3773 a
+SDict begin H.S end
+ 75 3773 a
+75 3773 a
+SDict begin 13.6 H.A end
+ 75 3773 a 75 3773 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.12) cvn H.B /DEST pdfmark end
+ 75 3773 a 117 x FJ(7.5.12)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(CyclotomicCosets)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 4064 a Fs(\006)22 b Ft(CyclotomicCosets\()53
+b(q,)47 b(n)g(\))2213 b Fr(\(function\))p Black 216 4290
+a Ft(CyclotomicCosets)41 b FK(returns)c(the)e(c)o(yclotomic)j(cosets)e
+(of)g Fq(q)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)65
+b Ft(q)35 b FK(and)g Ft(n)g FK(must)h(be)f(relati)n(v)o(ely)75
+4403 y(prime.)55 b(Each)31 b(of)h(the)h(elements)g(of)f(the)g(returned)
+j(list)d(is)g(a)g(list)g(of)g(inte)o(gers)i(that)e(belong)i(to)e(one)g
+(c)o(yclotomic)75 4516 y(coset.)47 b(A)29 b Fq(q)p FK(-c)o(yclotomic)j
+(coset)e(of)f Fq(s)92 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))29
+b FK(is)g(a)g(set)h(of)f(the)h(form)f Fv(f)p Fq(s)p Fp(;)10
+b Fq(sq)p Fp(;)g Fq(sq)2751 4483 y Fr(2)2791 4516 y Fp(;)g(:::;)g
+Fq(sq)3016 4483 y Fm(r)r Fh(\000)p Fr(1)3135 4516 y Fv(g)p
+FK(,)30 b(where)g Fq(r)h FK(is)e(the)75 4629 y(smallest)36
+b(positi)n(v)o(e)h(inte)o(ger)g(such)f(that)g Fq(sq)1464
+4596 y Fm(r)1513 4629 y Fv(\000)17 b Fq(s)35 b FK(is)g(0)91
+b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)64 b(In)35
+b(other)i(w)o(ords,)h(each)e(coset)h(contains)g(all)75
+4741 y(multiplications)f(of)c(the)g(coset)h(representati)n(v)o(e)j(by)c
+Fq(q)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)55
+b(The)31 b(coset)i(representati)n(v)o(e)j(is)c(the)g(smallest)75
+4854 y(inte)o(ger)25 b(that)f(isn')n(t)h(in)e(the)h(pre)n(vious)h
+(cosets.)p 75 4977 1648 4 v 1764 4982 a FF(Example)p
+2102 4977 V 75 5002 4 25 v 3747 5002 V 75 5101 4 100
+v 188 5072 a(gap>)44 b(CyclotomicCosets\()k(2,)43 b(15)g(\);)p
+3747 5101 V 75 5201 V 188 5171 a([)g([)f(0)h(],)g([)g(1,)g(2,)g(4,)g(8)
+f(],)h([)g(3,)g(6,)g(12,)h(9)e(],)h([)g(5,)g(10)g(],)p
+3747 5201 V 75 5301 V 273 5271 a([)f(7,)h(14,)h(13,)f(11)g(])g(])p
+3747 5301 V 75 5400 V 188 5370 a(gap>)h(CyclotomicCosets\()k(7,)43
+b(6)f(\);)p 3747 5400 V 75 5500 V 188 5470 a([)h([)f(0)h(],)g([)g(1)f
+(],)h([)g(2)g(],)g([)f(3)h(],)g([)g(4)g(],)g([)f(5)h(])g(])p
+3747 5500 V 75 5525 4 25 v 3747 5525 V 75 5528 3675 4
+v Black Black eop end end
+%%Page: 141 141
+TeXDict begin HPSdict begin 141 140 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.141) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(141)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.13) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.5.13)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(W)-6 b(eightHistogram)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 573 a Fs(\006)22 b Ft(WeightHistogram\()53
+b(C[,)47 b(h])g(\))2167 b Fr(\(function\))p Black 216
+799 a FK(The)24 b(function)i Ft(WeightHistogram)i FK(plots)d(a)f
+(histogram)i(of)d(weights)i(in)f(code)h Ft(C)p FK(.)30
+b(The)23 b(maximum)h(length)h(of)75 912 y(a)e(column)i(is)f
+Ft(h)p FK(.)29 b(Def)o(ault)c(v)n(alue)g(for)f Ft(h)g
+FK(is)f(1)p Fp(=)p FK(3)i(of)f(the)g(size)g(of)g(the)g(screen.)31
+b(The)24 b(number)h(that)f(appears)i(at)e(the)g(top)75
+1024 y(of)f(the)h(histogram)i(is)d(the)h(maximum)f(v)n(alue)i(of)e(the)
+h(list)g(of)f(weights.)p 75 1147 1648 4 v 1764 1152 a
+FF(Example)p 2102 1147 V 75 1172 4 25 v 3747 1172 V 75
+1272 4 100 v 188 1242 a(gap>)44 b(H)e(:=)h(HammingCode\(2,)k
+(GF\(5\)\);)p 3747 1272 V 75 1371 V 188 1341 a(a)c(linear)h([6,4,3]1)h
+(Hamming)g(\(2,5\))f(code)g(over)f(GF\(5\))p 3747 1371
+V 75 1471 V 188 1441 a(gap>)h(WeightDistribution\(H\))q(;)p
+3747 1471 V 75 1570 V 188 1541 a([)f(1,)g(0,)g(0,)g(80,)g(120,)h(264,)f
+(160)h(])p 3747 1570 V 75 1670 V 188 1640 a(gap>)g
+(WeightHistogram\(H\);)p 3747 1670 V 75 1770 V 188 1740
+a(264----------------)p 3747 1770 V 75 1869 V 823 1839
+a(*)p 3747 1869 V 75 1969 V 823 1939 a(*)p 3747 1969
+V 75 2069 V 823 2039 a(*)p 3747 2069 V 75 2168 V 823
+2138 a(*)p 3747 2168 V 75 2268 V 823 2238 a(*)85 b(*)p
+3747 2268 V 75 2367 V 696 2338 a(*)g(*)g(*)p 3747 2367
+V 75 2467 V 569 2437 a(*)g(*)g(*)g(*)p 3747 2467 V 75
+2567 V 569 2537 a(*)g(*)g(*)g(*)p 3747 2567 V 75 2666
+V 188 2636 a(+--------+--+--+--+-)q(-)p 3747 2666 V 75
+2766 V 188 2736 a(0)g(1)g(2)g(3)g(4)g(5)g(6)p 3747 2766
+V 75 2791 4 25 v 3747 2791 V 75 2794 3675 4 v 75 2927
+a
+SDict begin H.S end
+ 75 2927 a 75 2927 a
+SDict begin 13.6 H.A end
+ 75 2927 a 75 2927 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.14) cvn H.B /DEST pdfmark end
+ 75 2927 a 116
+x FJ(7.5.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MultiplicityInList)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3218 a Fs(\006)22 b
+Ft(MultiplicityInLis)q(t\()53 b(L,)47 b(a)f(\))2121 b
+Fr(\(function\))p Black 216 3443 a FK(This)26 b(is)f(a)g(v)o(ery)h
+(simple)g(list)g(command)h(which)f(returns)h(ho)n(w)e(man)o(y)h(times)f
+(a)h(occurs)h(in)e(L.)f(It)i(returns)h(0)e(if)h(a)75
+3556 y(is)d(not)h(in)g(L.)e(\(The)h Fy(GAP)f FK(command)i
+Ft(Collected)i FK(does)e(not)g(quite)h(handle)g(this)f(\223e)o
+(xtreme\224)h(case.\))p 75 3679 1648 4 v 1764 3684 a
+FF(Example)p 2102 3679 V 75 3704 4 25 v 3747 3704 V 75
+3804 4 100 v 188 3774 a(gap>)44 b(L:=[1,2,3,4,3,2,1,5,4)q(,3,)q(2,1)q
+(];)q(;)p 3747 3804 V 75 3903 V 188 3873 a(gap>)g
+(MultiplicityInList\(L,)q(1\);)p 3747 3903 V 75 4003
+V 188 3973 a(3)p 3747 4003 V 75 4102 V 188 4073 a(gap>)g
+(MultiplicityInList\(L,)q(6\);)p 3747 4102 V 75 4202
+V 188 4172 a(0)p 3747 4202 V 75 4227 4 25 v 3747 4227
+V 75 4230 3675 4 v 75 4363 a
+SDict begin H.S end
+ 75 4363 a 75 4363 a
+SDict begin 13.6 H.A end
+ 75 4363
+a 75 4363 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.15) cvn H.B /DEST pdfmark end
+ 75 4363 a 116 x FJ(7.5.15)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(MostCommonInList)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4654 a Fs(\006)22 b Ft(MostCommonInList\()53 b(L)47
+b(\))2352 b Fr(\(function\))p Black 216 4880 a FK(Input:)30
+b(a)24 b(list)f(L)216 4992 y(Output:)30 b(an)24 b(a)f(in)g(L)f(which)i
+(occurs)h(at)f(least)g(as)g(much)f(as)h(an)o(y)f(other)i(in)e(L)p
+75 5115 1648 4 v 1764 5120 a FF(Example)p 2102 5115 V
+75 5140 4 25 v 3747 5140 V 75 5240 4 100 v 188 5210 a(gap>)44
+b(L:=[1,2,3,4,3,2,1,5,4)q(,3,)q(2,1)q(];)q(;)p 3747 5240
+V 75 5339 V 188 5309 a(gap>)g(MostCommonInList\(L\);)p
+3747 5339 V 75 5439 V 188 5409 a(1)p 3747 5439 V 75 5464
+4 25 v 3747 5464 V 75 5467 3675 4 v Black Black eop end
+end
+%%Page: 142 142
+TeXDict begin HPSdict begin 142 141 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.142) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(142)p Black 75 307 a
+SDict begin H.S end
+ 75 307 a 75 307 a
+SDict begin 13.6 H.A end
+
+75 307 a 75 307 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.16) cvn H.B /DEST pdfmark end
+ 75 307 a 92 x FJ(7.5.16)p 0.0 0.0 1.0
+TeXcolorrgb 99 w(RotateList)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 573 a Fs(\006)22 b Ft(RotateList\()51 b(L)46 b(\))2631
+b Fr(\(function\))p Black 216 799 a FK(Input:)30 b(a)24
+b(list)f(L)216 912 y(Output:)30 b(a)23 b(list)h(L)-8
+b(')22 b(which)i(is)g(the)f(c)o(yclic)i(rotation)g(of)f(L)e(\(to)i(the)
+g(right\))p 75 1032 1648 4 v 1764 1037 a FF(Example)p
+2102 1032 V 75 1057 4 25 v 3747 1057 V 75 1156 4 100
+v 188 1126 a(gap>)44 b(L:=[1,2,3,4];;)p 3747 1156 V 75
+1256 V 188 1226 a(gap>)g(RotateList\(L\);)p 3747 1256
+V 75 1355 V 188 1326 a([2,3,4,1])p 3747 1355 V 75 1380
+4 25 v 3747 1380 V 75 1383 3675 4 v 75 1516 a
+SDict begin H.S end
+ 75 1516
+a 75 1516 a
+SDict begin 13.6 H.A end
+ 75 1516 a 75 1516 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.17) cvn H.B /DEST pdfmark end
+ 75 1516 a 116 x FJ(7.5.17)p
+0.0 0.0 1.0 TeXcolorrgb 99 w(Cir)n(culantMatrix)p Black
+1.0 0.0 0.0 TeXcolorrgb 75 1807 a Fs(\006)22 b Ft(CirculantMatrix\()53
+b(k,)47 b(L)f(\))2260 b Fr(\(function\))p Black 216 2033
+a FK(Input:)30 b(inte)o(ger)25 b(k,)e(a)g(list)h(L)e(of)i(length)h(n)
+216 2145 y(Output:)30 b(kxn)24 b(matrix)g(whose)g(ro)n(ws)f(are)h(c)o
+(yclic)h(rotations)h(of)d(the)h(list)g(L)p 75 2266 1648
+4 v 1764 2271 a FF(Example)p 2102 2266 V 75 2290 4 25
+v 3747 2290 V 75 2390 4 100 v 188 2360 a(gap>)44 b(k:=3;)g
+(L:=[1,2,3,4];;)p 3747 2390 V 75 2490 V 188 2460 a(gap>)g
+(M:=CirculantMatrix\(k,)q(L\);)q(;)p 3747 2490 V 75 2589
+V 188 2559 a(gap>)g(Display\(M\);)p 3747 2589 V 75 2614
+4 25 v 3747 2614 V 75 2617 3675 4 v 75 2760 a
+SDict begin H.S end
+ 75 2760
+a 75 2760 a
+SDict begin 13.6 H.A end
+ 75 2760 a 75 2760 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7.6) cvn H.B /DEST pdfmark end
+ 75 2760 a 150 x FM(7.6)p
+0.0 0.0 1.0 TeXcolorrgb 119 w(Miscellaneous)30 b(polynomial)g
+(functions)p Black 75 3117 a FK(In)23 b(this)h(section)h(we)d(describe)
+j(se)n(v)o(eral)f(multi)n(v)n(ariate)i(polynomial)f Fy(GAP)c
+FK(functions)26 b Fy(GU)m(A)-6 b(V)f(A)21 b FK(uses)j(for)f(construct-)
+75 3230 y(ing)h(codes)h(or)e(performing)j(calculations)h(with)c(codes.)
+75 3382 y
+SDict begin H.S end
+ 75 3382 a 75 3382 a
+SDict begin 13.6 H.A end
+ 75 3382 a 75 3382 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.1) cvn H.B /DEST pdfmark end
+ 75
+3382 a 96 x FJ(7.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MatrixT)-7
+b(ransf)n(ormationOnMulti)o(v)o(ariateP)n(olynomial)p
+Black 1.0 0.0 0.0 TeXcolorrgb 75 3653 a Fs(\006)22 b
+Ft(MatrixTransformat)q(ion)q(OnM)q(ult)q(iv)q(ari)q(ate)q(Pol)q(yn)q
+(omi)q(al)53 b(\()46 b(A,)i(f,)f(R)f(\))730 b Fr(\(function\))p
+Black 216 3879 a Ft(A)21 b FK(is)h(an)g Fq(n)11 b Fv(\002)g
+Fq(n)22 b FK(matrix)g(with)g(entries)h(in)f(a)f(\002eld)h
+Fq(F)7 b FK(,)21 b Ft(R)g FK(is)h(a)f(polynomial)j(ring)f(of)f
+Fq(n)f FK(v)n(ariables,)j(say)e Fq(F)7 b Fo([)p Fq(x)3440
+3893 y Fr(1)3478 3879 y Fp(;)j(:::;)g Fq(x)3663 3893
+y Fm(n)3702 3879 y Fo(])p FK(,)75 3991 y(and)24 b Ft(f)f
+FK(is)g(a)h(polynomial)h(in)f Ft(R)p FK(.)k(Returns)d(the)f
+(composition)40 b Fq(f)26 b Fv(\016)13 b Fq(A)p FK(.)75
+4144 y
+SDict begin H.S end
+ 75 4144 a 75 4144 a
+SDict begin 13.6 H.A end
+ 75 4144 a 75 4144 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.2) cvn H.B /DEST pdfmark end
+ 75 4144
+a 96 x FJ(7.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Degr)n(eeMulti)o(v)o
+(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4415 a Fs(\006)22 b Ft(DegreeMultivariat)q(ePo)q(lyn)q(omi)q(al)q
+(\()52 b(f,)47 b(R)g(\))1657 b Fr(\(function\))p Black
+216 4640 a FK(This)27 b(command)h(tak)o(es)h(tw)o(o)e(ar)n(guments,)j
+Ft(f)p FK(,)d(a)g(multi)n(v)n(ariate)j(polynomial,)g(and)e
+Ft(R)f FK(a)g(polynomial)i(ring)f(o)o(v)o(er)75 4753
+y(a)d(\002eld)g Fq(F)32 b FK(containing)c Ft(f)p FK(,)d(say)g
+Fq(R)c Fo(=)g Fq(F)7 b Fo([)p Fq(x)1358 4767 y Fr(1)1396
+4753 y Fp(;)j Fq(x)1471 4767 y Fr(2)1509 4753 y Fp(;)g(:::;)g
+Fq(x)1694 4767 y Fm(n)1733 4753 y Fo(])p FK(.)33 b(The)25
+b(output)i(is)e(simply)h(the)f(maximum)h(de)o(grees)g(of)g(all)f(the)75
+4866 y(monomials)g(occurring)h(in)d Ft(f)q FK(.)216 4979
+y(This)g(command)i(can)f(be)f(used)i(to)e(compute)i(the)f(de)o(gree)g
+(of)g(an)f(af)n(\002ne)h(plane)g(curv)o(e.)p 75 5099
+1648 4 v 1764 5104 a FF(Example)p 2102 5099 V 75 5124
+4 25 v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44
+b(F:=GF\(11\);;)p 3747 5224 V 75 5323 V 188 5293 a(gap>)g
+(R2:=PolynomialRing\(F,)q(2\);)p 3747 5323 V 75 5423
+V 188 5393 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p
+3747 5423 V 75 5523 V 188 5493 a(gap>)h(vars:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 5523 V
+75 5622 V 188 5592 a(gap>)g(x:=vars[1];;)i(y:=vars[2];;)p
+3747 5622 V Black Black eop end end
+%%Page: 143 143
+TeXDict begin HPSdict begin 143 142 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.143) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(143)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(poly:=y\2102-x*\(x\2102-1\);;)p 3747 428 V 75 528 V
+188 498 a(gap>)g(DegreeMultivariatePol)q(yno)q(mia)q(l\()q(pol)q(y,R)q
+(2\);)p 3747 528 V 75 628 V 188 598 a(3)p 3747 628 V
+75 727 V 3747 727 V 75 752 4 25 v 3747 752 V 75 755 3675
+4 v 75 887 a
+SDict begin H.S end
+ 75 887 a 75 887 a
+SDict begin 13.6 H.A end
+ 75 887 a 75 887 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.3) cvn H.B /DEST pdfmark end
+ 75 887
+a 116 x FJ(7.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Degr)n(eesMulti)o(v)o
+(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1178 a Fs(\006)22 b Ft(DegreesMultivaria)q(teP)q(oly)q(nom)q(ia)q
+(l\()53 b(f,)47 b(R)f(\))1611 b Fr(\(function\))p Black
+216 1404 a FK(Returns)32 b(a)e(list)i(of)f(information)i(about)f(the)f
+(multi)n(v)n(ariate)i(polynomial)g Ft(f)q FK(.)50 b(Nice)30
+b(for)h(other)h(programs)h(b)n(ut)75 1516 y(mostly)24
+b(unreadable)j(by)c Fy(GAP)f FK(users.)p 75 1632 1648
+4 v 1764 1637 a FF(Example)p 2102 1632 V 75 1657 4 25
+v 3747 1657 V 75 1756 4 100 v 188 1726 a(gap>)44 b(F:=GF\(11\);;)p
+3747 1756 V 75 1856 V 188 1826 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p
+3747 1856 V 75 1956 V 188 1926 a(PolynomialRing\(...,)49
+b([)42 b(x_1,)i(x_2)f(]\))p 3747 1956 V 75 2055 V 188
+2025 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q
+(g\(R)q(2\);)q(;)p 3747 2055 V 75 2155 V 188 2125 a(gap>)g
+(x:=vars[1];;)i(y:=vars[2];;)p 3747 2155 V 75 2254 V
+188 2225 a(gap>)e(poly:=y\2102-x*\(x\2102-1\);;)p 3747
+2254 V 75 2354 V 188 2324 a(gap>)g(DegreesMultivariatePo)q(lyn)q(omi)q
+(al)q(\(po)q(ly,)q(R2\))q(;)p 3747 2354 V 75 2454 V 188
+2424 a([)f([)f([)h(x_1,)h(x_1,)f(1)g(],)g([)g(x_1,)g(x_2,)h(0)f(])g(],)
+g([)f([)h(x_2\2102,)h(x_1,)g(0)f(],)g([)f(x_2\2102,)j(x_2,)e(2)g(])g
+(],)p 3747 2454 V 75 2553 V 273 2523 a([)f([)h(x_1\2103,)h(x_1,)g(3)f
+(],)g([)f(x_1\2103,)j(x_2,)f(0)e(])h(])g(])p 3747 2553
+V 75 2653 V 188 2623 a(gap>)p 3747 2653 V 75 2753 V 3747
+2753 V 75 2777 4 25 v 3747 2777 V 75 2780 3675 4 v 75
+2913 a
+SDict begin H.S end
+ 75 2913 a 75 2913 a
+SDict begin 13.6 H.A end
+ 75 2913 a 75 2913 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.4) cvn H.B /DEST pdfmark end
+ 75 2913
+a 116 x FJ(7.6.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Coef\002cientMulti)o(v)
+o(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 3203 a Fs(\006)22 b Ft(CoefficientMultiv)q(ari)q(ate)q(Pol)q(yn)q
+(omi)q(al\()53 b(f,)47 b(var,)h(power,)h(R)d(\))869 b
+Fr(\(function\))p Black 216 3429 a FK(The)38 b(command)h
+Ft(CoefficientMultiv)q(ari)q(ate)q(Pol)q(yn)q(omi)q(al)44
+b FK(tak)o(es)c(four)f(ar)n(guments:)61 b(a)38 b(multi)n(v)n(ariant)75
+3542 y(polynomial)e Ft(f)p FK(,)f(a)e(v)n(ariable)i(name)f
+Ft(var)q FK(,)g(an)g(inte)o(ger)h Ft(power)q FK(,)g(and)f(a)f
+(polynomial)j(ring)e Ft(R)f FK(containing)j Ft(f)q FK(.)57
+b(F)o(or)75 3655 y(e)o(xample,)26 b(if)f Ft(f)g FK(is)g(a)g(multi)n(v)n
+(ariate)i(polynomial)h(in)d Fq(R)f FK(=)h Fq(F)7 b FK([)p
+Fq(x)2012 3669 y Fr(1)2050 3655 y Fp(;)j Fq(x)2125 3669
+y Fr(2)2163 3655 y Fp(;)g(:::;)g Fq(x)2348 3669 y Fm(n)2387
+3655 y FK(])25 b(then)h Ft(var)f FK(must)h(be)f(one)h(of)f(the)g
+Fq(x)3529 3669 y Fm(i)3552 3655 y FK(.)34 b(The)75 3768
+y(output)25 b(is)e(the)h(coef)n(\002cient)h(of)f Fq(x)1095
+3722 y Fm(power)1090 3793 y(i)1290 3768 y FK(in)f Ft(f)q
+FK(.)216 3880 y(\(Not)g(sure)i(if)e Fq(F)30 b FK(needs)25
+b(to)e(be)h(a)f(\002eld)g(in)g(f)o(act)i(...\))216 3993
+y(Related)g(to)e(the)h Fy(GAP)d FK(command)k Ft(PolynomialCoefficie)q
+(nts)q(Pol)q(yno)q(mi)q(al)p FK(.)p 75 4103 1648 4 v
+1764 4108 a FF(Example)p 2102 4103 V 75 4128 4 25 v 3747
+4128 V 75 4227 4 100 v 188 4198 a(gap>)44 b(F:=GF\(11\);;)p
+3747 4227 V 75 4327 V 188 4297 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p
+3747 4327 V 75 4427 V 188 4397 a(PolynomialRing\(...,)49
+b([)42 b(x_1,)i(x_2)f(]\))p 3747 4427 V 75 4526 V 188
+4496 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q
+(g\(R)q(2\);)q(;)p 3747 4526 V 75 4626 V 188 4596 a(gap>)g
+(x:=vars[1];;)i(y:=vars[2];;)p 3747 4626 V 75 4726 V
+188 4696 a(gap>)e(poly:=y\2102-x*\(x\2102-1\);;)p 3747
+4726 V 75 4825 V 188 4795 a(gap>)g(PolynomialCoefficient)q(sOf)q(Pol)q
+(yn)q(omi)q(al\()q(pol)q(y,x)q(\);)p 3747 4825 V 75 4925
+V 188 4895 a([)f(x_2\2102,)h(Z\(11\)\2100,)h(0*Z\(11\),)g
+(-Z\(11\)\2100)g(])p 3747 4925 V 75 5024 V 188 4995 a(gap>)f
+(PolynomialCoefficient)q(sOf)q(Pol)q(yn)q(omi)q(al\()q(pol)q(y,y)q(\);)
+p 3747 5024 V 75 5124 V 188 5094 a([)f(-x_1\2103+x_1,)j(0*Z\(11\),)f
+(Z\(11\)\2100)f(])p 3747 5124 V 75 5224 V 188 5194 a(gap>)g
+(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p)q(oly)q(,y,)q(0,R)
+q(2\);)p 3747 5224 V 75 5323 V 188 5293 a(-x_1\2103+x_1)p
+3747 5323 V 75 5423 V 188 5393 a(gap>)g(CoefficientMultivaria)q(teP)q
+(oly)q(no)q(mia)q(l\(p)q(oly)q(,y,)q(1,R)q(2\);)p 3747
+5423 V 75 5523 V 188 5493 a(0*Z\(11\))p 3747 5523 V 75
+5622 V 188 5592 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q
+(l\(p)q(oly)q(,y,)q(2,R)q(2\);)p 3747 5622 V Black Black
+eop end end
+%%Page: 144 144
+TeXDict begin HPSdict begin 144 143 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.144) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(144)p Black 75 428 4 100 v 188 399 a FF(Z\(11\)\2100)p
+3747 428 V 75 528 V 188 498 a(gap>)44 b(CoefficientMultivaria)q(teP)q
+(oly)q(no)q(mia)q(l\(p)q(oly)q(,x,)q(0,R)q(2\);)p 3747
+528 V 75 628 V 188 598 a(x_2\2102)p 3747 628 V 75 727
+V 188 697 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p)
+q(oly)q(,x,)q(1,R)q(2\);)p 3747 727 V 75 827 V 188 797
+a(Z\(11\)\2100)p 3747 827 V 75 927 V 188 897 a(gap>)g
+(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p)q(oly)q(,x,)q(2,R)
+q(2\);)p 3747 927 V 75 1026 V 188 996 a(0*Z\(11\))p 3747
+1026 V 75 1126 V 188 1096 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q
+(no)q(mia)q(l\(p)q(oly)q(,x,)q(3,R)q(2\);)p 3747 1126
+V 75 1225 V 188 1196 a(-Z\(11\)\2100)p 3747 1225 V 75
+1325 V 3747 1325 V 75 1350 4 25 v 3747 1350 V 75 1353
+3675 4 v 75 1486 a
+SDict begin H.S end
+ 75 1486 a 75 1486 a
+SDict begin 13.6 H.A end
+ 75 1486 a 75 1486
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.5) cvn H.B /DEST pdfmark end
+ 75 1486 a 116 x FJ(7.6.5)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Solv)o(eLinearSystem)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1777 a Fs(\006)22 b Ft(SolveLinearSystem)q(\()52 b(L,)47
+b(vars)h(\))2028 b Fr(\(function\))p Black 216 2003 a
+FK(Input:)30 b Ft(L)24 b FK(is)f(a)g(list)h(of)f(linear)i(forms)f(in)f
+(the)h(v)n(ariables)i Ft(vars)q FK(.)216 2115 y(Output:)k(the)24
+b(solution)i(of)d(the)h(system,)g(if)f(its)h(unique.)216
+2228 y(The)h(procedure)j(is)e(straightforw)o(ard:)37
+b(Find)25 b(the)h(associated)j(matrix)d Fq(A)p FK(,)e(\002nd)h(the)h
+(\224constant)i(v)o(ector\224)f Fq(b)p FK(,)f(and)75
+2341 y(solv)o(e)e Fq(A)13 b Fv(\003)g Fq(v)20 b Fo(=)g
+Fq(b)p FK(.)28 b(No)23 b(error)h(checking)i(is)e(performed.)216
+2454 y(Related)h(to)e(the)h Fy(GAP)d FK(command)k Ft(SolutionMat\()50
+b(A,)d(b)g(\))p FK(.)p 75 2567 1648 4 v 1764 2572 a FF(Example)p
+2102 2567 V 75 2592 4 25 v 3747 2592 V 75 2692 4 100
+v 188 2662 a(gap>)d(F:=GF\(11\);;)p 3747 2692 V 75 2791
+V 188 2761 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p 3747
+2791 V 75 2891 V 188 2861 a(PolynomialRing\(...,)49 b([)42
+b(x_1,)i(x_2)f(]\))p 3747 2891 V 75 2991 V 188 2961 a(gap>)h
+(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p
+3747 2991 V 75 3090 V 188 3060 a(gap>)g(x:=vars[1];;)i(y:=vars[2];;)p
+3747 3090 V 75 3190 V 188 3160 a(gap>)e(f:=3*y-3*x+1;;)j
+(g:=-5*y+2*x-7;;)p 3747 3190 V 75 3289 V 188 3260 a(gap>)d
+(soln:=SolveLinearSyst)q(em\()q([f,)q(g])q(,[x)q(,y])q(\);)p
+3747 3289 V 75 3389 V 188 3359 a([)f(Z\(11\)\2103,)i(Z\(11\)\2102)f(])p
+3747 3389 V 75 3489 V 188 3459 a(gap>)g(Value\(f,[x,y],soln\);)49
+b(#)42 b(checking)k(okay)p 3747 3489 V 75 3588 V 188
+3558 a(0*Z\(11\))p 3747 3588 V 75 3688 V 188 3658 a(gap>)e
+(Value\(g,[x,y],col\);)k(#)43 b(checking)i(okay)p 3747
+3688 V 75 3788 V 188 3758 a(0*Z\(11\))p 3747 3788 V 75
+3887 V 3747 3887 V 75 3912 4 25 v 3747 3912 V 75 3915
+3675 4 v 75 4048 a
+SDict begin H.S end
+ 75 4048 a 75 4048 a
+SDict begin 13.6 H.A end
+ 75 4048 a 75 4048
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.6) cvn H.B /DEST pdfmark end
+ 75 4048 a 117 x FJ(7.6.6)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Gua)n(v)o(aV)-10 b(ersion)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 4339 a Fs(\006)22 b Ft(GuavaVersion\()51 b(\))2631
+b Fr(\(function\))p Black 216 4565 a FK(Returns)25 b(the)e(current)j(v)
+o(ersion)f(of)e(Gua)n(v)n(a.)29 b(Same)23 b(as)g Ft(guava)p
+2165 4565 28 4 v 35 w(version\(\))p FK(.)p 75 4682 1648
+4 v 1764 4687 a FF(Example)p 2102 4682 V 75 4707 4 25
+v 3747 4707 V 75 4806 4 100 v 188 4776 a(gap>)44 b(GuavaVersion\(\);)p
+3747 4806 V 75 4906 V 188 4876 a("2.7")p 3747 4906 V
+75 5005 V 3747 5005 V 75 5030 4 25 v 3747 5030 V 75 5033
+3675 4 v 75 5167 a
+SDict begin H.S end
+ 75 5167 a 75 5167 a
+SDict begin 13.6 H.A end
+ 75 5167 a 75 5167
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.7) cvn H.B /DEST pdfmark end
+ 75 5167 a 116 x FJ(7.6.7)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Coef\002cientT)-9 b(oP)n(olynomial)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 5457 a Fs(\006)22 b Ft(CoefficientToPoly)q(nom)q(ial)q
+(\()52 b(x,)c(b,)f(F)f(\))1750 b Fr(\(function\))p Black
+Black Black eop end end
+%%Page: 145 145
+TeXDict begin HPSdict begin 145 144 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.145) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(145)p Black 216 399 a(Returns)24 b(the)e(Zech)h(log)g(of)
+f(x)g(to)h(base)g(b,)f(ie)h(the)f(i)g(such)i(that)f Fq(x)12
+b Fo(+)g FK(1)19 b Fo(=)g Fq(b)2473 366 y Fm(i)2496 399
+y FK(,)j(so)g Fq(y)12 b Fo(+)g Fq(z)19 b Fo(=)g Fq(y)p
+Fo(\()p FK(1)12 b Fo(+)g Fq(z)p Fp(=)p Fq(y)p Fo(\))21
+b(=)e Fq(b)3448 366 y Fm(k)3483 399 y FK(,)j(where)75
+511 y(k=Log\(y)-6 b(,b\)+ZechLog\(z/y)g(,b\))29 b(and)24
+b(b)f(must)g(be)h(a)f(primiti)n(v)o(e)h(element)h(of)e(F)-7
+b(.)p 75 631 1648 4 v 1764 636 a FF(Example)p 2102 631
+V 75 656 4 25 v 3747 656 V 75 756 4 100 v 188 726 a(gap>)44
+b(F:=GF\(11\);;)i(l)c(:=)h(One\(F\);;)p 3747 756 V 75
+856 V 188 826 a(gap>)h(ZechLog\(2*l,8*l,F\);)p 3747 856
+V 75 955 V 188 925 a(-24)p 3747 955 V 75 1055 V 188 1025
+a(gap>)g(8*l+l;\(2*l\)\210\(-24\);)p 3747 1055 V 75 1154
+V 188 1125 a(Z\(11\)\2106)p 3747 1154 V 75 1254 V 188
+1224 a(Z\(11\)\2106)p 3747 1254 V 75 1354 V 3747 1354
+V 75 1379 4 25 v 3747 1379 V 75 1382 3675 4 v 75 1514
+a
+SDict begin H.S end
+ 75 1514 a 75 1514 a
+SDict begin 13.6 H.A end
+ 75 1514 a 75 1514 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.8) cvn H.B /DEST pdfmark end
+ 75 1514 a 117
+x FJ(7.6.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Coef\002cientT)-9
+b(oP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1805
+a Fs(\006)22 b Ft(CoefficientToPoly)q(nom)q(ial)q(\()52
+b(coeffs,)d(R)e(\))1657 b Fr(\(function\))p Black 216
+2031 a FK(The)31 b(function)j Ft(CoefficientToPolyno)q(mi)q(al)j
+FK(returns)c(the)f(de)o(gree)h Fq(d)20 b Fv(\000)c FK(1)31
+b(polynomial)j Fq(c)3229 2045 y Fr(0)3282 2031 y Fo(+)15
+b Fq(c)3408 2045 y Fr(1)3446 2031 y Fq(x)h Fo(+)f Fp(:::)h
+Fo(+)75 2144 y Fq(c)115 2158 y Fm(d)s Fh(\000)p Fr(1)241
+2144 y Fq(x)281 2111 y Fm(d)s Fh(\000)p Fr(1)407 2144
+y FK(,)25 b(where)g Ft(coeffs)i FK(is)e(a)f(list)i(of)f(elements)h(of)f
+(a)g(\002eld,)g Fq(coe)14 b(f)25 b(f)13 b(s)23 b Fo(=)e
+Fv(f)p Fq(c)2572 2158 y Fr(0)2610 2144 y Fp(;)10 b(:::;)g
+Fq(c)2795 2158 y Fm(d)s Fh(\000)p Fr(1)2922 2144 y Fv(g)p
+FK(,)25 b(and)h Ft(R)e FK(is)h(a)g(uni)n(v)n(ariate)75
+2257 y(polynomial)h(ring.)p 75 2376 1648 4 v 1764 2381
+a FF(Example)p 2102 2376 V 75 2401 4 25 v 3747 2401 V
+75 2501 4 100 v 188 2471 a(gap>)44 b(F:=GF\(11\);)p 3747
+2501 V 75 2601 V 188 2571 a(GF\(11\))p 3747 2601 V 75
+2700 V 188 2670 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p
+3747 2700 V 75 2800 V 188 2770 a(gap>)g(var1:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p
+3747 2800 V 75 2900 V 188 2870 a(gap>)c(coeffs:=Z\(11\)\2100*[1,2,)q
+(3,4)q(];)p 3747 2900 V 75 2999 V 188 2969 a([)f(Z\(11\)\2100,)i
+(Z\(11\),)f(Z\(11\)\2108,)h(Z\(11\)\2102)g(])p 3747 2999
+V 75 3099 V 188 3069 a(gap>)f(CoefficientToPolynomi)q(al\()q(coe)q(ff)q
+(s,R)q(1\);)p 3747 3099 V 75 3198 V 188 3169 a
+(Z\(11\)\2102*a\2103+Z\(11\)\2108*)q(a\2102)q(+Z\()q(11\))q(*a+)q(Z\()q
+(11\))q(\2100)p 3747 3198 V 75 3223 4 25 v 3747 3223
+V 75 3226 3675 4 v 75 3359 a
+SDict begin H.S end
+ 75 3359 a 75 3359 a
+SDict begin 13.6 H.A end
+ 75 3359
+a 75 3359 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.9) cvn H.B /DEST pdfmark end
+ 75 3359 a 116 x FJ(7.6.9)p 0.0 0.0 1.0 TeXcolorrgb
+99 w(Degr)n(eesMonomialT)-9 b(erm)p Black 1.0 0.0 0.0
+TeXcolorrgb 75 3650 a Fs(\006)22 b Ft(DegreesMonomialTe)q(rm\()53
+b(m,)47 b(R)g(\))2074 b Fr(\(function\))p Black 216 3875
+a FK(The)35 b(function)j Ft(DegreesMonomialTerm)j FK(returns)c(the)f
+(list)g(of)f(de)o(grees)i(to)e(which)h(each)g(v)n(ariable)i(in)d(the)75
+3988 y(multi)n(v)n(ariate)g(polynomial)g(ring)f Ft(R)e
+FK(occurs)j(in)e(the)g(monomial)h Ft(m)p FK(,)g(where)g
+Ft(coeffs)g FK(is)f(a)f(list)i(of)e(elements)j(of)e(a)75
+4101 y(\002eld.)p 75 4203 1648 4 v 1764 4208 a FF(Example)p
+2102 4203 V 75 4227 4 25 v 3747 4227 V 75 4327 4 100
+v 188 4297 a(gap>)44 b(F:=GF\(11\);)p 3747 4327 V 75
+4427 V 188 4397 a(GF\(11\))p 3747 4427 V 75 4526 V 188
+4496 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p
+3747 4526 V 75 4626 V 188 4596 a(gap>)g(var1:=IndeterminatesO)q(fPo)q
+(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p
+3747 4626 V 75 4726 V 188 4696 a(gap>)c(b:=X\(F,"b",var1\);)p
+3747 4726 V 75 4825 V 188 4795 a(b)p 3747 4825 V 75 4925
+V 188 4895 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p
+3747 4925 V 75 5024 V 188 4995 a([)f(a,)g(b)f(])p 3747
+5024 V 75 5124 V 188 5094 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);)
+p 3747 5124 V 75 5224 V 188 5194 a(PolynomialRing\(...,)49
+b([)42 b(a,)h(b)g(]\))p 3747 5224 V 75 5323 V 188 5293
+a(gap>)h(c:=X\(F,"c",var2\);)p 3747 5323 V 75 5423 V
+188 5393 a(c)p 3747 5423 V 75 5523 V 188 5493 a(gap>)g
+(var3:=Concatenation\(v)q(ar2)q(,[c)q(]\))q(;)p 3747
+5523 V 75 5622 V 188 5592 a([)f(a,)g(b,)g(c)f(])p 3747
+5622 V Black Black eop end end
+%%Page: 146 146
+TeXDict begin HPSdict begin 146 145 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.146) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(146)p Black 75 428 4 100 v 188 399 a FF(gap>)44
+b(R3:=PolynomialRing\(F,)q(var)q(3\);)p 3747 428 V 75
+528 V 188 498 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b,)g(c)g(]\))p
+3747 528 V 75 628 V 188 598 a(gap>)h(m:=b\2103*c\2107;)p
+3747 628 V 75 727 V 188 697 a(b\2103*c\2107)p 3747 727
+V 75 827 V 188 797 a(gap>)g(DegreesMonomialTerm\(m)q(,R3)q(\);)p
+3747 827 V 75 927 V 188 897 a([)f(0,)g(3,)g(7)f(])p 3747
+927 V 75 951 4 25 v 3747 951 V 75 954 3675 4 v 75 1088
+a
+SDict begin H.S end
+ 75 1088 a 75 1088 a
+SDict begin 13.6 H.A end
+ 75 1088 a 75 1088 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.10) cvn H.B /DEST pdfmark end
+ 75 1088 a 116
+x FJ(7.6.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorsMulti)o(v)o
+(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb
+75 1378 a Fs(\006)22 b Ft(DivisorsMultivari)q(ate)q(Pol)q(yno)q(mi)q
+(al\()53 b(f,)47 b(R)g(\))1564 b Fr(\(function\))p Black
+216 1604 a FK(The)33 b(function)j Ft(DivisorsMultivariat)q(ePo)q(lyn)q
+(om)q(ial)j FK(returns)c(the)f(list)g(of)f(polynomial)j(di)n(visors)f
+(of)f Ft(f)75 1717 y FK(in)g(the)g(multi)n(v)n(ariate)i(polynomial)g
+(ring)e Ft(R)g FK(with)f(coef)n(\002cients)j(in)e(a)f(\002eld.)60
+b(This)33 b(program)i(uses)g(a)e(simple)i(b)n(ut)75 1830
+y(slo)n(w)25 b(algorithm)i(\(see)f(Joachim)h(v)n(on)f(zur)f(Gathen,)i
+(J)8 b(\250)-38 b(ur)n(gen)27 b(Gerhard,)f([)p 0.0236 0.6179 0.0894
+TeXcolorrgb 2396 1831 a
+SDict begin H.S end
+ 2396 1831 a 0.0236 0.6179 0.0894
+TeXcolorrgb -1 x FK(vzGG03)p 0.0236 0.6179 0.0894 TeXcolorrgb
+2703 1768 a
+SDict begin H.R end
+ 2703 1768 a 2703 1830 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GG03) cvn H.B /ANN pdfmark end
+ 2703 1830 a Black
+2 w FK(],)f(e)o(x)o(ercise)h(16.10\))h(which)f(\002rst)75
+1943 y(con)l(v)o(erts)k(the)f(multi)n(v)n(ariate)h(polynomial)g
+Ft(f)e FK(to)g(an)g(associated)j(uni)n(v)n(ariate)g(polynomial)44
+b Fq(f)3013 1910 y Fh(\003)3051 1943 y FK(,)28 b(then)h
+Ft(Factors)44 b Fq(f)3690 1910 y Fh(\003)3727 1943 y
+FK(,)75 2056 y(and)26 b(\002nally)f(con)l(v)o(erts)j(these)e(uni)n(v)n
+(ariate)h(f)o(actors)g(back)f(into)g(the)f(multi)n(v)n(ariate)i
+(polynomial)h(f)o(actors)f(of)e Ft(f)p FK(.)33 b(Since)75
+2169 y Ft(Factors)25 b FK(is)f(non-deterministic,)j Ft
+(DivisorsMultivari)q(ate)q(Pol)q(yn)q(omi)q(al)i FK(is)23
+b(non-deterministic)29 b(as)23 b(well.)p 75 2286 1648
+4 v 1764 2291 a FF(Example)p 2102 2286 V 75 2310 4 25
+v 3747 2310 V 75 2410 4 100 v 188 2380 a(gap>)44 b
+(R2:=PolynomialRing\(GF)q(\(3\))q(,[")q(x1)q(",")q(x2")q(]\);)p
+3747 2410 V 75 2510 V 188 2480 a(PolynomialRing\(...,)49
+b([)42 b(x1,)i(x2)f(]\))p 3747 2510 V 75 2609 V 188 2579
+a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q
+(2\);)p 3747 2609 V 75 2709 V 188 2679 a([)f(x1,)g(x2)g(])p
+3747 2709 V 75 2809 V 188 2779 a(gap>)h(x2:=vars[2];)p
+3747 2809 V 75 2908 V 188 2878 a(x2)p 3747 2908 V 75
+3008 V 188 2978 a(gap>)g(x1:=vars[1];)p 3747 3008 V 75
+3107 V 188 3078 a(x1)p 3747 3107 V 75 3207 V 188 3177
+a(gap>)g(f:=x1\2103+x2\2103;;)p 3747 3207 V 75 3307 V
+188 3277 a(gap>)g(DivisorsMultivariateP)q(oly)q(nom)q(ia)q(l\(f)q(,R2)q
+(\);)p 3747 3307 V 75 3406 V 188 3376 a([)f(x1+x2,)h(x1+x2,)g(x1+x2)g
+(])p 3747 3406 V 75 3431 4 25 v 3747 3431 V 75 3434 3675
+4 v Black Black eop end end
+%%Page: 147 147
+TeXDict begin HPSdict begin 147 146 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.147) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black 963 x
+FA(Refer)l(ences)75 1398 y
+SDict begin H.S end
+ 75 1398 a 75 1398 a
+SDict begin 13.6 H.A end
+ 75 1398
+a 75 1398 a
+SDict begin [ /View [/XYZ H.V] /Dest (chapter*.4) cvn H.B /DEST pdfmark end
+ 75 1398 a Black 75 1508 a
+SDict begin H.S end
+ 75 1508 a FK([BMIT])363
+1508 y
+SDict begin 13.6 H.A end
+ 363 1508 a 363 1508 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.BM03) cvn H.B /DEST pdfmark end
+ 363 1508 a Black 126 w FK(L.)18
+b(Bazzi)h(and)h(S.)e(K.)g(Mitter)-5 b(.)24 b(Some)19
+b(constructions)k(of)c(codes)i(from)e(group)i(actions.)k(preprint)d
+(March)489 1621 y(2003)j(\(submitted)g(to)f(IEEE)d(IT\).)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1590 1623 a
+SDict begin H.S end
+ 1590 1623
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1680 1559 a
+SDict begin H.R end
+ 1680 1559 a 1680 1621 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end
+ 1680
+1621 a Black Black 75 1805 a
+SDict begin H.S end
+ 75 1805 a FK([Bro06])361
+1805 y
+SDict begin 13.6 H.A end
+ 361 1805 a 361 1805 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Br) cvn H.B /DEST pdfmark end
+ 361 1805 a Black 128 w FK(A.)27
+b(E.)f(Brouwer)-5 b(.)48 b Fq(Bounds)29 b(on)f(the)g(minimum)g
+(distance)i(of)e(linear)i(codes)p FK(.)48 b(On)28 b(the)g(internet)i
+(at)e(the)489 1917 y(URL:)22 b(http:)g Fp(==)p FK(www)-6
+b(.win.tue.nl)p Fp(=)-15 b FK(\230)g(aeb)p Fp(=)p FK(v)n(oorlinco)q
+(d.ht)q(ml,)28 b(1997-2006.)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2867 1917 a
+SDict begin H.S end
+ 2867 1917 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(114)p 0.0236 0.0894 0.6179 TeXcolorrgb 3002 1855 a
+SDict begin H.R end
+
+3002 1855 a 3002 1917 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.114) cvn H.B /ANN pdfmark end
+ 3002 1917 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3049 1919 a
+SDict begin H.S end
+ 3049 1919 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(119)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3184 1855 a
+SDict begin H.R end
+ 3184 1855 a 3184 1917 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end
+ 3184 1917 a Black
+Black 75 2101 a
+SDict begin H.S end
+ 75 2101 a FK([Gao03])376 2101 y
+SDict begin 13.6 H.A end
+ 376 2101
+a 376 2101 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Gao03) cvn H.B /DEST pdfmark end
+ 376 2101 a Black 113 w FK(S.)18 b(Gao.)25
+b(A)19 b(ne)n(w)g(algorithm)j(for)e(decoding)i(reed-solomon)h(codes.)k
+Fq(Communications,)c(Information)489 2214 y(and)31 b(Network)f
+(Security)i(\(V)-12 b(.)29 b(Bhar)m(gava,)k(H.)c(V)-12
+b(.)29 b(P)-7 b(oor)d(,)31 b(V)-12 b(.)29 b(T)-8 b(ar)l(okh)31
+b(and)f(S.)g(Y)-8 b(oon,)31 b(Eds.\))p FK(,)g(pages)g(pp.)489
+2327 y(55\22668,)25 b(2003.)p 0.0236 0.0894 0.6179 TeXcolorrgb
+999 2328 a
+SDict begin H.S end
+ 999 2328 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(53)p 0.0236 0.0894 0.6179 TeXcolorrgb 1089 2265
+a
+SDict begin H.R end
+ 1089 2265 a 1089 2327 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.53) cvn H.B /ANN pdfmark end
+ 1089 2327 a Black Black 75
+2511 a
+SDict begin H.S end
+ 75 2511 a FK([GDT91])413 2511 y
+SDict begin 13.6 H.A end
+ 413 2511 a 413
+2511 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.GDT91) cvn H.B /DEST pdfmark end
+ 413 2511 a Black 76 w FK(E.)d(Gabidulin,)j(A.)d(Da)n(vydo)o(v)-6
+b(,)24 b(and)g(L.)e(T)-7 b(ombak.)33 b(Linear)24 b(codes)g(with)g(co)o
+(v)o(ering)h(radius)f(2)f(and)h(other)489 2624 y(ne)n(w)f(co)o(v)o
+(ering)i(codes.)34 b Fq(IEEE)22 b(T)-5 b(r)o(ans.)23
+b(Inform.)h(Theory)p FK(,)g(37\(1\):219\226224,)k(1991.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3151 2625 a
+SDict begin H.S end
+ 3151 2625
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3241 2562 a
+SDict begin H.R end
+ 3241 2562 a 3241 2624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 3241
+2624 a Black Black 75 2808 a
+SDict begin H.S end
+ 75 2808 a FK([GS85])342
+2808 y
+SDict begin 13.6 H.A end
+ 342 2808 a 342 2808 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.GS85) cvn H.B /DEST pdfmark end
+ 342 2808 a Black 147 w FK(R.)23
+b(Graham)h(and)h(N.)e(Sloane.)37 b(On)23 b(the)i(co)o(v)o(ering)h
+(radius)g(of)e(codes.)37 b Fq(IEEE)23 b(T)-5 b(r)o(ans.)24
+b(Inform.)h(Theory)p FK(,)489 2921 y(31\(1\):385\226401,)j(1985.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1312 2921 a
+SDict begin H.S end
+ 1312 2921
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(111)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1447 2859 a
+SDict begin H.R end
+ 1447 2859 a 1447 2921 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end
+ 1447
+2921 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1494 2922 a
+SDict begin H.S end
+ 1494 2922 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 1629 2859
+a
+SDict begin H.R end
+ 1629 2859 a 1629 2921 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 1629 2921 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1676 2922 a
+SDict begin H.S end
+ 1676 2922 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1811 2859 a
+SDict begin H.R end
+ 1811 2859 a 1811 2921 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 1811 2921 a Black
+Black 75 3105 a
+SDict begin H.S end
+ 75 3105 a FK([Han99])376 3105 y
+SDict begin 13.6 H.A end
+ 376 3105
+a 376 3105 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Han99) cvn H.B /DEST pdfmark end
+ 376 3105 a Black 113 w FK(J.)22 b(P)-10
+b(.)22 b(Hansen.)33 b(T)-7 b(oric)23 b(surf)o(aces)i(and)e(error)n
+(-correcting)28 b(codes.)34 b Fq(Coding)24 b(theory)-5
+b(,)24 b(crypto)o(gr)o(aphy)-5 b(,)27 b(and)489 3218
+y(r)m(elated)e(ar)m(eas)f(\(ed.,)g(Bac)o(hmann)g(et)f(al\))h(Spring)o
+(er)n(-V)-10 b(erla)o(g)p FK(,)27 b(1999.)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2659 3219 a
+SDict begin H.S end
+ 2659 3219 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2749 3156 a
+SDict begin H.R end
+ 2749 3156 a 2749 3218 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 2749 3218 a Black
+Black 75 3402 a
+SDict begin H.S end
+ 75 3402 a FK([Hel72])356 3402 y
+SDict begin 13.6 H.A end
+ 356 3402
+a 356 3402 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.He72) cvn H.B /DEST pdfmark end
+ 356 3402 a Black 133 w FK(Hermann)g(J.)g(Helgert.)45
+b(Sri)n(v)n(asta)n(v)n(a)28 b(codes.)46 b Fq(IEEE)25
+b(T)-5 b(r)o(ans.)27 b(Inform.)g(Theory)p FK(,)i(18:292\226297,)i
+(March)489 3515 y(1972.)p 0.0236 0.0894 0.6179 TeXcolorrgb
+726 3516 a
+SDict begin H.S end
+ 726 3516 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 3453
+a
+SDict begin H.R end
+ 816 3453 a 816 3515 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end
+ 816 3515 a Black Black 75 3698
+a
+SDict begin H.S end
+ 75 3698 a FK([HP03])342 3698 y
+SDict begin 13.6 H.A end
+ 342 3698 a 342 3698
+a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.HP03) cvn H.B /DEST pdfmark end
+ 342 3698 a Black 147 w FK(W)-8 b(.)25 b(C.)h(Huf)n(fman)h(and)g(V)-12
+b(.)26 b(Pless.)44 b Fq(Fundamentals)29 b(of)e(err)l(or)n(-corr)m
+(ecting)k(codes)p FK(.)46 b(Cambridge)28 b(Uni)n(v)-6
+b(.)489 3811 y(Press,)23 b(2003.)p 0.0236 0.0894 0.6179
+TeXcolorrgb 964 3811 a
+SDict begin H.S end
+ 964 3811 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(11)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1054 3749 a
+SDict begin H.R end
+ 1054 3749 a 1054 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end
+ 1054 3811 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1100 3812 a
+SDict begin H.S end
+ 1100
+3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(33)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1190 3749 a
+SDict begin H.R end
+ 1190 3749
+a 1190 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end
+ 1190 3811 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1236 3812 a
+SDict begin H.S end
+ 1236 3812 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1326 3749 a
+SDict begin H.R end
+ 1326 3749 a 1326 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end
+ 1326 3811 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1373 3812 a
+SDict begin H.S end
+ 1373
+3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(52)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1463 3749 a
+SDict begin H.R end
+ 1463 3749
+a 1463 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end
+ 1463 3811 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1509 3812 a
+SDict begin H.S end
+ 1509 3812 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(58)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1599 3749 a
+SDict begin H.R end
+ 1599 3749 a 1599 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end
+ 1599 3811 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1645 3812 a
+SDict begin H.S end
+ 1645
+3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1735 3749 a
+SDict begin H.R end
+ 1735 3749
+a 1735 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 1735 3811 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1782 3812 a
+SDict begin H.S end
+ 1782 3812 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1872 3749 a
+SDict begin H.R end
+ 1872 3749 a 1872 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end
+ 1872 3811 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1918 3812 a
+SDict begin H.S end
+ 1918
+3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2053 3749 a
+SDict begin H.R end
+ 2053 3749
+a 2053 3811 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 2053 3811 a Black Black 75 3995 a
+SDict begin H.S end
+ 75 3995
+a FK([JH04])326 3995 y
+SDict begin 13.6 H.A end
+ 326 3995 a 326 3995 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.JH04) cvn H.B /DEST pdfmark end
+ 326 3995
+a Black 163 w FK(J.)k(Justesen)k(and)d(T)-7 b(.)27 b(Hoholdt.)49
+b Fq(A)26 b(cour)o(se)k(in)e(err)l(or)n(-corr)m(ecting)33
+b(codes)p FK(.)49 b(European)29 b(Mathematical)489 4108
+y(Society)-6 b(,)24 b(2004.)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1039 4109 a
+SDict begin H.S end
+ 1039 4109 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(52)p 0.0236 0.0894 0.6179 TeXcolorrgb 1129 4046
+a
+SDict begin H.R end
+ 1129 4046 a 1129 4108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end
+ 1129 4108 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1175 4109 a
+SDict begin H.S end
+ 1175 4109 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(54)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1265 4046 a
+SDict begin H.R end
+ 1265 4046 a 1265 4108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end
+ 1265 4108 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1311 4109 a
+SDict begin H.S end
+ 1311
+4109 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(55)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1401 4046 a
+SDict begin H.R end
+ 1401 4046
+a 1401 4108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.55) cvn H.B /ANN pdfmark end
+ 1401 4108 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1448 4109 a
+SDict begin H.S end
+ 1448 4109 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1538 4046 a
+SDict begin H.R end
+ 1538 4046 a 1538 4108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end
+ 1538 4108 a Black
+Black 75 4292 a
+SDict begin H.S end
+ 75 4292 a FK([Jo)o(y04])349 4292 y
+SDict begin 13.6 H.A end
+ 349
+4292 a 349 4292 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Jo04) cvn H.B /DEST pdfmark end
+ 349 4292 a Black 140 w FK(D.)d(Jo)o(yner)-5
+b(.)32 b(T)-7 b(oric)23 b(codes)g(o)o(v)o(er)g(\002nite)f(\002elds.)31
+b Fq(Applicable)25 b(Alg)o(ebr)o(a)e(in)f(Engineering)o(,)j(Communica-)
+489 4405 y(tion)f(and)g(Computing)p FK(,)h(15:63\22679,)h(2004.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1888 4406 a
+SDict begin H.S end
+ 1888 4406
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1978 4343 a
+SDict begin H.R end
+ 1978 4343 a 1978 4405 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 1978
+4405 a Black Black 75 4589 a
+SDict begin H.S end
+ 75 4589 a FK([Leo82])366
+4589 y
+SDict begin 13.6 H.A end
+ 366 4589 a 366 4589 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon82) cvn H.B /DEST pdfmark end
+ 366 4589 a Black 123 w FK(Jef)n(fre)o(y)e
+(S.)e(Leon.)32 b(Computing)25 b(automorphism)g(groups)g(of)e(error)n
+(-correcting)28 b(codes.)34 b Fq(IEEE)21 b(T)-5 b(r)o(ans.)489
+4702 y(Inform.)24 b(Theory)p FK(,)g(28:496\226511,)j(May)c(1982.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1991 4703 a
+SDict begin H.S end
+ 1991 4703
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(37)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2081 4640 a
+SDict begin H.R end
+ 2081 4640 a 2081 4702 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end
+ 2081
+4702 a Black Black 75 4886 a
+SDict begin H.S end
+ 75 4886 a FK([Leo88])366
+4886 y
+SDict begin 13.6 H.A end
+ 366 4886 a 366 4886 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon88) cvn H.B /DEST pdfmark end
+ 366 4886 a Black 123 w FK(Jef)n(fre)o(y)g
+(S.)e(Leon.)30 b(A)21 b(probabilistic)k(algorithm)f(for)e(computing)j
+(minimum)c(weights)j(of)e(lar)n(ge)h(error)n(-)489 4999
+y(correcting)j(codes.)35 b Fq(IEEE)21 b(T)-5 b(r)o(ans.)24
+b(Inform.)g(Theory)p FK(,)g(34:1354\2261359,)j(September)e(1988.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3429 5000 a
+SDict begin H.S end
+ 3429 5000
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(45)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3519 4937 a
+SDict begin H.R end
+ 3519 4937 a 3519 4999 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.45) cvn H.B /ANN pdfmark end
+ 3519
+4999 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3565 5000 a
+SDict begin H.S end
+ 3565 5000 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(46)p 0.0236 0.0894 0.6179 TeXcolorrgb 3655 4937
+a
+SDict begin H.R end
+ 3655 4937 a 3655 4999 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end
+ 3655 4999 a Black Black 75
+5183 a
+SDict begin H.S end
+ 75 5183 a FK([Leo91])366 5183 y
+SDict begin 13.6 H.A end
+ 366 5183 a 366
+5183 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon91) cvn H.B /DEST pdfmark end
+ 366 5183 a Black 123 w FK(Jef)n(fre)o(y)34 b(S.)d(Leon.)62
+b(Permutation)34 b(group)g(algorithms)h(based)f(on)e(partitions,)38
+b(I:)32 b(theory)i(and)f(algo-)489 5296 y(rithms.)h Fq(J)n(.)22
+b(Symbolic)j(Comput.)p FK(,)e(12:533\226583,)k(1991.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2290 5296 a
+SDict begin H.S end
+ 2290 5296
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(11)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2380 5234 a
+SDict begin H.R end
+ 2380 5234 a 2380 5296 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end
+ 2380
+5296 a Black Black 75 5479 a
+SDict begin H.S end
+ 75 5479 a FK([MS83])357
+5479 y
+SDict begin 13.6 H.A end
+ 357 5479 a 357 5479 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.MS83) cvn H.B /DEST pdfmark end
+ 357 5479 a Black 132 w FK(F)-7
+b(.)21 b(J.)g(MacW)l(illiams)j(and)f(N.)e(J.)h(A.)f(Sloane.)32
+b Fq(The)22 b(theory)i(of)e(err)l(or)n(-corr)m(ecting)27
+b(codes)p FK(.)33 b(Amsterdam:)489 5592 y(North-Holland,)26
+b(1983.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1307 5592
+a
+SDict begin H.S end
+ 1307 5592 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(11)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1397 5530 a
+SDict begin H.R end
+ 1397 5530
+a 1397 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end
+ 1397 5592 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1443 5593 a
+SDict begin H.S end
+ 1443 5593 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1533 5530 a
+SDict begin H.R end
+ 1533 5530 a 1533 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end
+ 1533 5592 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1580 5593 a
+SDict begin H.S end
+ 1580
+5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1670 5530 a
+SDict begin H.R end
+ 1670 5530
+a 1670 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end
+ 1670 5592 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1716 5593 a
+SDict begin H.S end
+ 1716 5593 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1806 5530 a
+SDict begin H.R end
+ 1806 5530 a 1806 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end
+ 1806 5592 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1852 5593 a
+SDict begin H.S end
+ 1852
+5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1987 5530 a
+SDict begin H.R end
+ 1987 5530
+a 1987 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end
+ 1987 5592 a Black Black 1844 5841 a FK(147)p
+Black eop end end
+%%Page: 148 148
+TeXDict begin HPSdict begin 148 147 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.148) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(148)p Black Black 75 399 a
+SDict begin H.S end
+ 75 399 a FK([Sti93])326
+399 y
+SDict begin 13.6 H.A end
+ 326 399 a 326 399 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.St93) cvn H.B /DEST pdfmark end
+ 326 399 a Black 163 w FK(H.)22
+b(Stichtenoth.)36 b Fq(Alg)o(ebr)o(aic)25 b(function)g(\002elds)g(and)f
+(codes)p FK(.)35 b(Springer)n(-V)-10 b(erlag,)26 b(1993.)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3267 401 a
+SDict begin H.S end
+ 3267 401
+a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(97)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3357 337 a
+SDict begin H.R end
+ 3357 337 a 3357 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.97) cvn H.B /ANN pdfmark end
+ 3357 399
+a Black Black 75 586 a
+SDict begin H.S end
+ 75 586 a FK([vzGG03])442 586 y
+SDict begin 13.6 H.A end
+
+442 586 a 442 586 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.GG03) cvn H.B /DEST pdfmark end
+ 442 586 a Black 47 w FK(J.)31 b(v)n(on)i(zur)f
+(Gathen)h(and)f(J.)f(Gerhard.)61 b Fq(Modern)33 b(computer)h(alg)o(ebr)
+o(a)p FK(.)62 b(Cambridge)33 b(Uni)n(v)-6 b(.)31 b(Press,)489
+699 y(2003.)p 0.0236 0.0894 0.6179 TeXcolorrgb 726 700
+a
+SDict begin H.S end
+ 726 700 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(146)p
+0.0236 0.0894 0.6179 TeXcolorrgb 861 637 a
+SDict begin H.R end
+ 861 637 a
+861 699 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.146) cvn H.B /ANN pdfmark end
+ 861 699 a Black Black Black eop end end
+%%Page: 149 149
+TeXDict begin HPSdict begin 149 148 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.149) cvn H.B /DEST pdfmark end
+ 75 100 a Black Black Black
+761 x FA(Index)p Black 75 1288 a Fq(A)p Fo(\()p Fq(n)p
+Fp(;)10 b Fq(d)5 b Fo(\))p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 377 1289 a
+SDict begin H.S end
+ 377 1289 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb
+512 1226 a
+SDict begin H.R end
+ 512 1226 a 512 1288 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end
+ 512 1288 a Black 75
+1400 a Fq(GF)i Fo(\()g Fq(p)p Fo(\))p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 372 1401 a
+SDict begin H.S end
+ 372 1401 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+462 1338 a
+SDict begin H.R end
+ 462 1338 a 462 1400 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 462 1400 a Black 75
+1513 a Fq(GF)g Fo(\()p Fq(q)p Fo(\))p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 365 1514 a
+SDict begin H.S end
+ 365 1514 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+455 1451 a
+SDict begin H.R end
+ 455 1451 a 455 1513 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 455 1513 a Black 73
+1626 a Fq(t)f Fo(\()p Fq(n)p Fp(;)k Fq(k)r Fo(\))p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 343 1627 a
+SDict begin H.S end
+ 343 1627
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179
+TeXcolorrgb 433 1564 a
+SDict begin H.R end
+ 433 1564 a 433 1626 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end
+ 433 1626
+a Black 75 1739 a Ft(*)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 167 1740 a
+SDict begin H.S end
+ 167 1740 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb
+257 1677 a
+SDict begin H.R end
+ 257 1677 a 257 1739 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 257 1739 a Black 75
+1852 a Ft(+)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+167 1852 a
+SDict begin H.S end
+ 167 1852 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 1790 a
+SDict begin H.R end
+ 257
+1790 a 257 1852 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 257 1852 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 303 1853 a
+SDict begin H.S end
+ 303 1853 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb
+393 1790 a
+SDict begin H.R end
+ 393 1790 a 393 1852 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 393 1852 a Black 75
+1965 a Ft(-)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+167 1965 a
+SDict begin H.S end
+ 167 1965 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 1903 a
+SDict begin H.R end
+ 257
+1903 a 257 1965 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 257 1965 a Black 75 2078 a Ft(=)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 167 2078 a
+SDict begin H.S end
+ 167 2078
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179
+TeXcolorrgb 257 2016 a
+SDict begin H.R end
+ 257 2016 a 257 2078 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end
+ 257 2078
+a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 303 2080
+a
+SDict begin H.S end
+ 303 2080 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p
+0.0236 0.0894 0.6179 TeXcolorrgb 393 2016 a
+SDict begin H.R end
+ 393 2016
+a 393 2078 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end
+ 393 2078 a Black 75 2191 a Fp(<)22 b(>)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 285 2191 a
+SDict begin H.S end
+ 285
+2191 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179
+TeXcolorrgb 375 2129 a
+SDict begin H.R end
+ 375 2129 a 375 2191 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end
+ 375 2191
+a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 421 2193
+a
+SDict begin H.S end
+ 421 2193 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p
+0.0236 0.0894 0.6179 TeXcolorrgb 511 2129 a
+SDict begin H.R end
+ 511 2129
+a 511 2191 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end
+ 511 2191 a Black 75 2387 a FK(acceptable)k(coordinate,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 911 2388 a
+SDict begin H.S end
+ 911 2388
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1046 2325 a
+SDict begin H.R end
+ 1046 2325 a 1046 2387 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 1046
+2387 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1092 2388 a
+SDict begin H.S end
+ 1092 2388 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1227 2325
+a
+SDict begin H.R end
+ 1227 2325 a 1227 2387 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 1227 2387 a Black 75 2500 a
+Ft(AClosestVectorComb)q(..M)q(atF)q(FEV)q(ec)q(FFE)q(Coo)q(rds)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 2613 a
+SDict begin H.S end
+ 407
+2613 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(14)p 0.0236 0.0894 0.6179
+TeXcolorrgb 497 2551 a
+SDict begin H.R end
+ 497 2551 a 497 2613 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.14) cvn H.B /ANN pdfmark end
+ 497 2613
+a Black 75 2725 a Ft(AClosestVectorComb)q(ina)q(tio)q(nsM)q(at)q(FFE)q
+(Vec)q(FFE)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+407 2839 a
+SDict begin H.S end
+ 407 2839 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(13)p 0.0236 0.0894 0.6179 TeXcolorrgb 497 2776
+a
+SDict begin H.R end
+ 497 2776 a 497 2838 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.13) cvn H.B /ANN pdfmark end
+ 497 2838 a Black 75 2951 a Ft
+(ActionMoebiusTrans)q(for)q(mat)q(ion)q(On)q(Div)q(iso)q(rP1)407
+3064 y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 453 3066
+a
+SDict begin H.S end
+ 453 3066 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(93)p
+0.0236 0.0894 0.6179 TeXcolorrgb 543 3002 a
+SDict begin H.R end
+ 543 3002
+a 543 3064 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end
+ 543 3064 a Black 75 3177 a Ft(ActionMoebiusTrans)q(for)q
+(mat)q(ion)q(On)q(Fun)q(cti)q(on)53 b FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 407 3292 a
+SDict begin H.S end
+ 407 3292 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(93)p 0.0236 0.0894 0.6179 TeXcolorrgb
+497 3228 a
+SDict begin H.R end
+ 497 3228 a 497 3290 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end
+ 497 3290 a Black 75
+3403 a Ft(AddedElementsCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 3404 a
+SDict begin H.S end
+ 909 3404 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(103)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1044 3341 a
+SDict begin H.R end
+ 1044 3341 a 1044 3403 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.103) cvn H.B /ANN pdfmark end
+ 1044 3403 a Black
+75 3516 a FK(af)n(\002ne)23 b(code,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 520 3517 a
+SDict begin H.S end
+ 520 3517 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb
+610 3454 a
+SDict begin H.R end
+ 610 3454 a 610 3516 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end
+ 610 3516 a Black 75
+3629 a Ft(AffineCurve)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+630 3630 a
+SDict begin H.S end
+ 630 3630 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 3567
+a
+SDict begin H.R end
+ 720 3567 a 720 3629 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 720 3629 a Black 75 3742 a Ft
+(AffinePointsOnCurv)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1001 3743 a
+SDict begin H.S end
+ 1001 3743 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(85)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1091 3680 a
+SDict begin H.R end
+ 1091 3680 a 1091 3742 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.85) cvn H.B /ANN pdfmark end
+ 1091 3742 a Black
+75 3855 a Ft(AlternantCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 723 3856 a
+SDict begin H.S end
+ 723 3856 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb
+813 3793 a
+SDict begin H.R end
+ 813 3793 a 813 3855 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 813 3855 a Black 75
+3967 a Ft(AmalgamatedDirectS)q(umC)q(ode)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1233 3967 a
+SDict begin H.S end
+ 1233 3967 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(112)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1368 3905 a
+SDict begin H.R end
+ 1368 3905 a 1368 3967 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.112) cvn H.B /ANN pdfmark end
+ 1368 3967 a Black
+75 4080 a Ft(AreMOLS)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+445 4081 a
+SDict begin H.S end
+ 445 4081 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(134)p 0.0236 0.0894 0.6179 TeXcolorrgb 580 4018
+a
+SDict begin H.R end
+ 580 4018 a 580 4080 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.134) cvn H.B /ANN pdfmark end
+ 580 4080 a Black 75 4193 a Ft(AsSSortedList)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 4195 a
+SDict begin H.S end
+ 723
+4195 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(39)p
+0.0236 0.0894 0.6179 TeXcolorrgb 813 4131 a
+SDict begin H.R end
+ 813 4131
+a 813 4193 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.39) cvn H.B /ANN pdfmark end
+ 813 4193 a Black 75 4306 a Ft(AugmentedCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 4307 a
+SDict begin H.S end
+ 723
+4307 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(102)p
+0.0236 0.0894 0.6179 TeXcolorrgb 858 4244 a
+SDict begin H.R end
+ 858 4244
+a 858 4306 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.102) cvn H.B /ANN pdfmark end
+ 858 4306 a Black 75 4419 a Ft(AutomorphismGroup)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4420 a
+SDict begin H.S end
+ 909
+4420 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p
+0.0236 0.0894 0.6179 TeXcolorrgb 999 4357 a
+SDict begin H.R end
+ 999 4357
+a 999 4419 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end
+ 999 4419 a Black 75 4615 a Ft(BCHCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 4616 a
+SDict begin H.S end
+ 445
+4616 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p
+0.0236 0.0894 0.6179 TeXcolorrgb 535 4554 a
+SDict begin H.R end
+ 535 4554
+a 535 4615 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end
+ 535 4615 a Black 75 4728 a Ft(BestKnownLinearCod)q(e)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 4729 a
+SDict begin H.S end
+ 1001
+4729 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(70)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1091 4666 a
+SDict begin H.R end
+ 1091 4666
+a 1091 4728 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.70) cvn H.B /ANN pdfmark end
+ 1091 4728 a Black 75 4841 a Ft(BinaryGolayCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 4842 a
+SDict begin H.S end
+ 816
+4842 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p
+0.0236 0.0894 0.6179 TeXcolorrgb 906 4779 a
+SDict begin H.R end
+ 906 4779
+a 906 4841 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end
+ 906 4841 a Black 75 4954 a Ft(BitFlipDecoder)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 4955 a
+SDict begin H.S end
+ 770
+4955 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(54)p
+0.0236 0.0894 0.6179 TeXcolorrgb 860 4892 a
+SDict begin H.R end
+ 860 4892
+a 860 4954 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end
+ 860 4954 a Black 75 5067 a Ft(BlockwiseDirectSum)q(Cod)q
+(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1140 5067
+a
+SDict begin H.S end
+ 1140 5067 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(112)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1275 5005 a
+SDict begin H.R end
+ 1275 5005
+a 1275 5067 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.112) cvn H.B /ANN pdfmark end
+ 1275 5067 a Black 75 5180 a FK(Bose)h(distance,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 623 5181 a
+SDict begin H.S end
+ 623 5181
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179
+TeXcolorrgb 713 5119 a
+SDict begin H.R end
+ 713 5119 a 713 5180 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end
+ 713 5180
+a Black 75 5292 a FK(bound,)h(Gilbert-V)-10 b(arshamo)o(v)26
+b(lo)n(wer)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1312
+5293 a
+SDict begin H.S end
+ 1312 5293 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 1447 5230
+a
+SDict begin H.R end
+ 1447 5230 a 1447 5292 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end
+ 1447 5292 a Black 75 5405 a
+FK(bound,)f(sphere)g(packing)g(lo)n(wer)l(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1165 5406 a
+SDict begin H.S end
+ 1165 5406 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1300 5343 a
+SDict begin H.R end
+ 1300 5343 a 1300 5405 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end
+ 1300 5405 a Black
+75 5518 a FK(bounds,)g(Elias,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 610 5519 a
+SDict begin H.S end
+ 610 5519 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb
+745 5456 a
+SDict begin H.R end
+ 745 5456 a 745 5518 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end
+ 745 5518 a Black Black
+Black 1954 1288 a FK(bounds,)g(Griesmer)l(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2642 1289 a
+SDict begin H.S end
+ 2642 1289 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2777 1226 a
+SDict begin H.R end
+ 2777 1226 a 2777 1288 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end
+ 2777 1288 a Black
+1954 1400 a FK(bounds,)g(Hamming,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2671 1401 a
+SDict begin H.S end
+ 2671 1401 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2806 1338 a
+SDict begin H.R end
+ 2806 1338 a 2806 1400 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 2806 1400 a Black
+1954 1513 a FK(bounds,)g(Johnson,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2606 1514 a
+SDict begin H.S end
+ 2606 1514 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2741 1451 a
+SDict begin H.R end
+ 2741 1451 a 2741 1513 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 2741 1513 a Black
+1954 1626 a FK(bounds,)g(Plotkin,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2570 1627 a
+SDict begin H.S end
+ 2570 1627 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2705 1564 a
+SDict begin H.R end
+ 2705 1564 a 2705 1626 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end
+ 2705 1626 a Black
+1954 1739 a FK(bounds,)g(Singleton,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2656 1739 a
+SDict begin H.S end
+ 2656 1739 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(114)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2791 1677 a
+SDict begin H.R end
+ 2791 1677 a 2791 1739 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.114) cvn H.B /ANN pdfmark end
+ 2791 1739 a Black
+1954 1852 a FK(bounds,)g(sphere)g(packing)h(bound,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3105 1853 a
+SDict begin H.S end
+ 3105 1853
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3240 1790 a
+SDict begin H.R end
+ 3240 1790 a 3240 1852 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 3240
+1852 a Black 1954 1965 a Ft(BoundsCoveringRadi)q(us)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2927 1966 a
+SDict begin H.S end
+ 2927
+1966 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(120)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3062 1903 a
+SDict begin H.R end
+ 3062 1903
+a 3062 1965 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.120) cvn H.B /ANN pdfmark end
+ 3062 1965 a Black 1954 2078 a Ft(BoundsMinimumDista)q
+(nce)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 2080
+a
+SDict begin H.S end
+ 2973 2080 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(119)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3108 2016 a
+SDict begin H.R end
+ 3108 2016
+a 3108 2078 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end
+ 3108 2078 a Black 1954 2274 a FK(check)f(polynomial,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2648 2275 a
+SDict begin H.S end
+ 2648 2275
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2738 2212 a
+SDict begin H.R end
+ 2738 2212 a 2738 2274 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end
+ 2738
+2274 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2785 2275 a
+SDict begin H.S end
+ 2785 2275 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb 2875 2212
+a
+SDict begin H.R end
+ 2875 2212 a 2875 2274 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end
+ 2875 2274 a Black 1954 2387
+a Ft(CheckMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2370 2387 a
+SDict begin H.S end
+ 2370 2387 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(42)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 2325 a
+SDict begin H.R end
+
+2460 2325 a 2460 2387 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.42) cvn H.B /ANN pdfmark end
+ 2460 2387 a Black 1954 2500 a
+Ft(CheckMatCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2556 2501 a
+SDict begin H.S end
+ 2556 2501 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 2438
+a
+SDict begin H.R end
+ 2646 2438 a 2646 2500 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end
+ 2646 2500 a Black 1954 2613
+a Ft(CheckMatCodeMutabl)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2880 2614 a
+SDict begin H.S end
+ 2880 2614 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2970 2551 a
+SDict begin H.R end
+ 2970 2551 a 2970 2613 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end
+ 2970 2613 a Black
+1954 2725 a Ft(CheckPol)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2370 2726 a
+SDict begin H.S end
+ 2370 2726 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2460 2663 a
+SDict begin H.R end
+ 2460 2663 a 2460 2725 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end
+ 2460 2725 a Black
+1954 2838 a Ft(CheckPolCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2556 2839 a
+SDict begin H.S end
+ 2556 2839 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(76)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2646 2776 a
+SDict begin H.R end
+ 2646 2776 a 2646 2838 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.76) cvn H.B /ANN pdfmark end
+ 2646 2838 a Black
+1954 2951 a Ft(CirculantMatrix)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2695 2951 a
+SDict begin H.S end
+ 2695 2951 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2830 2889 a
+SDict begin H.R end
+ 2830 2889 a 2830 2951 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end
+ 2830 2951 a Black
+1954 3064 a FK(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2171 3065 a
+SDict begin H.S end
+ 2171 3065 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2261 3002
+a
+SDict begin H.R end
+ 2261 3002 a 2261 3064 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2261 3064 a Black 1954 3177
+a FK(code,)f Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5
+b Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2533
+3178 a
+SDict begin H.S end
+ 2533 3178 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2623 3115
+a
+SDict begin H.R end
+ 2623 3115 a 2623 3177 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2623 3177 a Black 1954 3290
+a FK(code,)24 b Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g
+Fq(d)5 b Fo(])p Fq(r)r FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2512 3291 a
+SDict begin H.S end
+ 2512 3291 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 3228
+a
+SDict begin H.R end
+ 2602 3228 a 2602 3290 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end
+ 2602 3290 a Black 1954 3403
+a FK(code,)24 b(A)l(G,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2344 3404 a
+SDict begin H.S end
+ 2344 3404 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 2434 3341
+a
+SDict begin H.R end
+ 2434 3341 a 2434 3403 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 2434 3403 a Black 1954 3516
+a FK(code,)g(alternant,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2535 3517 a
+SDict begin H.S end
+ 2535 3517 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 2625 3454
+a
+SDict begin H.R end
+ 2625 3454 a 2625 3516 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 2625 3516 a Black 1954 3629
+a FK(code,)g(Bose-Chaudhuri-Hock)o(eng)q(hem,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3327 3630 a
+SDict begin H.S end
+ 3327 3630 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3417 3568 a
+SDict begin H.R end
+ 3417 3568 a 3417 3629 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end
+ 3417 3629 a Black
+1954 3742 a FK(code,)g(conference,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2615 3743 a
+SDict begin H.S end
+ 2615 3743 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2705 3680 a
+SDict begin H.R end
+ 2705 3680 a 2705 3742 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end
+ 2705 3742 a Black
+1954 3855 a FK(code,)g(Cordaro-W)-7 b(agner)l(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2822 3856 a
+SDict begin H.S end
+ 2822 3856 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2912 3793 a
+SDict begin H.R end
+ 2912 3793 a 2912 3855 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end
+ 2912 3855 a Black
+1954 3967 a FK(code,)24 b(c)o(yclic,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2432 3968 a
+SDict begin H.S end
+ 2432 3968 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2522 3905 a
+SDict begin H.R end
+ 2522 3905 a 2522 3967 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end
+ 2522 3967 a Black
+1954 4080 a FK(code,)g(Da)n(vydo)o(v)-6 b(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2541 4081 a
+SDict begin H.S end
+ 2541 4081 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2631 4018 a
+SDict begin H.R end
+ 2631 4018 a 2631 4080 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 2631 4080 a Black
+1954 4193 a FK(code,)24 b(element)h(test,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2653 4194 a
+SDict begin H.S end
+ 2653 4194 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2743 4131 a
+SDict begin H.R end
+ 2743 4131 a 2743 4193 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end
+ 2743 4193 a Black
+1954 4306 a FK(code,)f(elements)h(of,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2638 4307 a
+SDict begin H.S end
+ 2638 4307 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2728 4244 a
+SDict begin H.R end
+ 2728 4244 a 2728 4306 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2728 4306 a Black
+1954 4419 a FK(code,)f(e)n(v)n(aluation,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2591 4420 a
+SDict begin H.S end
+ 2591 4420 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(82)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2681 4357 a
+SDict begin H.R end
+ 2681 4357 a 2681 4419 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end
+ 2681 4419 a Black
+1954 4532 a FK(code,)g(Fire,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2363 4534 a
+SDict begin H.S end
+ 2363 4534 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 2453 4470
+a
+SDict begin H.R end
+ 2453 4470 a 2453 4532 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end
+ 2453 4532 a Black 1954 4645
+a FK(code,)g(Gabidulin,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2580 4646 a
+SDict begin H.S end
+ 2580 4646 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 2670 4583
+a
+SDict begin H.R end
+ 2670 4583 a 2670 4645 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 2670 4645 a Black 1954 4758
+a FK(code,)g(Golay)g(\(binary\),)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2754 4759 a
+SDict begin H.S end
+ 2754 4759 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2844 4696 a
+SDict begin H.R end
+ 2844 4696 a 2844 4758 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end
+ 2844 4758 a Black
+1954 4871 a FK(code,)g(Golay)g(\(ternary\),)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2779 4872 a
+SDict begin H.S end
+ 2779 4872 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(74)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2869 4809 a
+SDict begin H.R end
+ 2869 4809 a 2869 4871 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end
+ 2869 4871 a Black
+1954 4984 a FK(code,)g(Goppa)g(\(classical\),)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2850 4985 a
+SDict begin H.S end
+ 2850 4985 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2940 4922 a
+SDict begin H.R end
+ 2940 4922 a 2940 4984 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 2940 4984 a Black
+1954 5097 a FK(code,)g(greedy)-6 b(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2458 5098 a
+SDict begin H.S end
+ 2458 5098 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2548 5035 a
+SDict begin H.R end
+ 2548 5035 a 2548 5097 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end
+ 2548 5097 a Black
+1954 5209 a FK(code,)24 b(Hadamard,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2595 5210 a
+SDict begin H.S end
+ 2595 5210 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2685 5147 a
+SDict begin H.R end
+ 2685 5147 a 2685 5209 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end
+ 2685 5209 a Black
+1954 5322 a FK(code,)g(Hamming,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2580 5323 a
+SDict begin H.S end
+ 2580 5323 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2670 5260 a
+SDict begin H.R end
+ 2670 5260 a 2670 5322 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end
+ 2670 5322 a Black
+1954 5435 a FK(code,)g(linear)l(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2420 5436 a
+SDict begin H.S end
+ 2420 5436 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2510 5373 a
+SDict begin H.R end
+ 2510 5373 a 2510 5435 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2510 5435 a Black
+1954 5548 a FK(code,)g(maximum)g(distance)h(separable,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3272 5549 a
+SDict begin H.S end
+ 3272 5549
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3362 5486 a
+SDict begin H.R end
+ 3362 5486 a 3362 5548 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 3362
+5548 a Black Black 1844 5841 a FK(149)p Black eop end
+end
+%%Page: 150 150
+TeXDict begin HPSdict begin 150 149 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.150) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(150)p Black 75 399 a(code,)24 b(Nordstrom-Robinson,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1110 400 a
+SDict begin H.S end
+ 1110 400
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1200 337 a
+SDict begin H.R end
+ 1200 337 a 1200 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end
+ 1200 399
+a Black 75 511 a FK(code,)g(perfect,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 590 512 a
+SDict begin H.S end
+ 590 512 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb
+680 449 a
+SDict begin H.R end
+ 680 449 a 680 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end
+ 680 511 a Black 75 624
+a FK(code,)g(Reed-Muller)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+798 625 a
+SDict begin H.S end
+ 798 625 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 888 562
+a
+SDict begin H.R end
+ 888 562 a 888 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 888 624 a Black 75 737 a FK(code,)g
+(Reed-Solomon,)p 0.0236 0.0894 0.6179 TeXcolorrgb 883
+738 a
+SDict begin H.S end
+ 883 738 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x
+FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb 973 677 a
+SDict begin H.R end
+ 973
+677 a 973 737 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end
+ 973 737 a Black 75 850 a FK(code,)g(self-dual,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 656 851 a
+SDict begin H.S end
+ 656 851 a
+0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179
+TeXcolorrgb 746 788 a
+SDict begin H.R end
+ 746 788 a 746 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 746 850 a Black
+75 963 a FK(code,)g(self-orthogonal,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 893 964 a
+SDict begin H.S end
+ 893 964 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb
+983 901 a
+SDict begin H.R end
+ 983 901 a 983 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 983 963 a Black 75 1076
+a FK(code,)g(Sri)n(v)n(asta)n(v)n(a,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 708 1077 a
+SDict begin H.S end
+ 708 1077 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb
+798 1014 a
+SDict begin H.R end
+ 798 1014 a 798 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end
+ 798 1076 a Black 75
+1189 a FK(code,)g(subcode,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+635 1190 a
+SDict begin H.S end
+ 635 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 725 1127
+a
+SDict begin H.R end
+ 725 1127 a 725 1189 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end
+ 725 1189 a Black 75 1302 a FK(code,)g(T)-7
+b(ombak,)p 0.0236 0.0894 0.6179 TeXcolorrgb 633 1303
+a
+SDict begin H.S end
+ 633 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p
+0.0236 0.0894 0.6179 TeXcolorrgb 723 1240 a
+SDict begin H.R end
+ 723 1240
+a 723 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 723 1302 a Black 75 1415 a FK(code,)24 b(toric,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 504 1416 a
+SDict begin H.S end
+ 504 1416
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179
+TeXcolorrgb 594 1353 a
+SDict begin H.R end
+ 594 1353 a 594 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 594 1415
+a Black 75 1528 a FK(code,)g(unrestricted,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 767 1529 a
+SDict begin H.S end
+ 767 1529 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb
+857 1466 a
+SDict begin H.R end
+ 857 1466 a 857 1528 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 857 1528 a Black 75
+1641 a Ft(CodeDensity)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+630 1642 a
+SDict begin H.S end
+ 630 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 765 1579
+a
+SDict begin H.R end
+ 765 1579 a 765 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end
+ 765 1641 a Black 75 1753 a Ft
+(CodeDistanceEnumer)q(ato)q(r)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1140 1754 a
+SDict begin H.S end
+ 1140 1754 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1275 1691 a
+SDict begin H.R end
+ 1275 1691 a 1275 1753 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end
+ 1275 1753 a Black
+75 1866 a Ft(CodeIsomorphism)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 816 1867 a
+SDict begin H.S end
+ 816 1867 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb
+906 1804 a
+SDict begin H.R end
+ 906 1804 a 906 1866 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end
+ 906 1866 a Black 75
+1979 a Ft(CodeMacWilliamsTra)q(nsf)q(orm)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1233 1980 a
+SDict begin H.S end
+ 1233 1980 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1368 1917 a
+SDict begin H.R end
+ 1368 1917 a 1368 1979 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end
+ 1368 1979 a Black
+75 2092 a Ft(CodeNorm)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+491 2093 a
+SDict begin H.S end
+ 491 2093 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 626 2030
+a
+SDict begin H.R end
+ 626 2030 a 626 2092 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 626 2092 a Black 75 2205 a FK(codes,)g
+(addition,)p 0.0236 0.0894 0.6179 TeXcolorrgb 671 2206
+a
+SDict begin H.S end
+ 671 2206 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p
+0.0236 0.0894 0.6179 TeXcolorrgb 761 2143 a
+SDict begin H.R end
+ 761 2143
+a 761 2205 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 761 2205 a Black 75 2318 a FK(codes,)g(decoding,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 706 2319 a
+SDict begin H.S end
+ 706 2319
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179
+TeXcolorrgb 796 2256 a
+SDict begin H.R end
+ 796 2256 a 796 2318 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end
+ 796 2318
+a Black 75 2431 a FK(codes,)g(direct)h(sum,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 754 2432 a
+SDict begin H.S end
+ 754 2432 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb
+844 2369 a
+SDict begin H.R end
+ 844 2369 a 844 2431 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 844 2431 a Black 75
+2544 a FK(codes,)f(encoding,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+706 2545 a
+SDict begin H.S end
+ 706 2545 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 796 2482
+a
+SDict begin H.R end
+ 796 2482 a 796 2544 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 796 2544 a Black 75 2657 a FK(codes,)g
+(product,)p 0.0236 0.0894 0.6179 TeXcolorrgb 651 2658
+a
+SDict begin H.S end
+ 651 2658 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p
+0.0236 0.0894 0.6179 TeXcolorrgb 741 2595 a
+SDict begin H.R end
+ 741 2595
+a 741 2657 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 741 2657 a Black 75 2770 a Ft(CodeWeightEnumerat)q(or)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1048 2771 a
+SDict begin H.S end
+ 1048
+2771 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1183 2708 a
+SDict begin H.R end
+ 1183 2708
+a 1183 2770 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 1183 2770 a Black 75 2883 a Ft(Codeword)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 2885 a
+SDict begin H.S end
+ 491
+2885 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(19)p
+0.0236 0.0894 0.6179 TeXcolorrgb 581 2821 a
+SDict begin H.R end
+ 581 2821
+a 581 2883 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.19) cvn H.B /ANN pdfmark end
+ 581 2883 a Black 75 2995 a Ft(CodewordNr)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 2996 a
+SDict begin H.S end
+ 584
+2996 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(20)p
+0.0236 0.0894 0.6179 TeXcolorrgb 674 2933 a
+SDict begin H.R end
+ 674 2933
+a 674 2995 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.20) cvn H.B /ANN pdfmark end
+ 674 2995 a Black 75 3108 a FK(code)n(w)o(ords,)h
+(addition,)p 0.0236 0.0894 0.6179 TeXcolorrgb 855 3108
+a
+SDict begin H.S end
+ 855 3108 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p
+0.0236 0.0894 0.6179 TeXcolorrgb 945 3046 a
+SDict begin H.R end
+ 945 3046
+a 945 3108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 945 3108 a Black 75 3221 a FK(code)n(w)o(ords,)g(cosets,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 779 3221 a
+SDict begin H.S end
+ 779 3221
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179
+TeXcolorrgb 869 3159 a
+SDict begin H.R end
+ 869 3159 a 869 3221 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 869 3221
+a Black 75 3334 a FK(code)n(w)o(ords,)g(subtraction,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 961 3334 a
+SDict begin H.S end
+ 961 3334
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1051 3272 a
+SDict begin H.R end
+ 1051 3272 a 1051 3334 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 1051
+3334 a Black 75 3447 a Ft(CoefficientMultiva)q(ria)q(teP)q(oly)q(no)q
+(mia)q(l)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1650
+3448 a
+SDict begin H.S end
+ 1650 3448 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(143)p 0.0236 0.0894 0.6179 TeXcolorrgb 1785 3385
+a
+SDict begin H.R end
+ 1785 3385 a 1785 3447 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.143) cvn H.B /ANN pdfmark end
+ 1785 3447 a Black 75 3560 a
+Ft(CoefficientToPolyn)q(omi)q(al)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1187 3560 a
+SDict begin H.S end
+ 1187 3560 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1322 3498 a
+SDict begin H.R end
+ 1322 3498 a 1322 3560 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end
+ 1322 3560 a Black
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1369 3561 a
+SDict begin H.S end
+ 1369
+3561 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(145)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1504 3498 a
+SDict begin H.R end
+ 1504 3498
+a 1504 3560 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.145) cvn H.B /ANN pdfmark end
+ 1504 3560 a Black 75 3673 a FK(conference)h(matrix,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 779 3674 a
+SDict begin H.S end
+ 779 3674
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(62)p 0.0236 0.0894 0.6179
+TeXcolorrgb 869 3611 a
+SDict begin H.R end
+ 869 3611 a 869 3673 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.62) cvn H.B /ANN pdfmark end
+ 869 3673
+a Black 75 3786 a Ft(ConferenceCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 770 3787 a
+SDict begin H.S end
+ 770 3787 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb
+860 3724 a
+SDict begin H.R end
+ 860 3724 a 860 3786 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end
+ 860 3786 a Black 75
+3899 a Ft(ConstantWeightSubc)q(ode)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1094 3900 a
+SDict begin H.S end
+ 1094 3900 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(107)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1229 3837 a
+SDict begin H.R end
+ 1229 3837 a 1229 3899 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.107) cvn H.B /ANN pdfmark end
+ 1229 3899 a Black
+75 4012 a Ft(ConstructionBCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 4013 a
+SDict begin H.S end
+ 909 4013 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(105)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1044 3950 a
+SDict begin H.R end
+ 1044 3950 a 1044 4012 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end
+ 1044 4012 a Black
+75 4125 a Ft(ConversionFieldCod)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1001 4126 a
+SDict begin H.S end
+ 1001 4126 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1136 4063 a
+SDict begin H.R end
+ 1136 4063 a 1136 4125 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end
+ 1136 4125 a Black
+75 4237 a Ft(ConwayPolynomial)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 862 4238 a
+SDict begin H.S end
+ 862 4238 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+952 4175 a
+SDict begin H.R end
+ 952 4175 a 952 4237 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 952 4237 a Black 75
+4350 a Ft(CoordinateNorm)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 770 4351 a
+SDict begin H.S end
+ 770 4351 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb
+905 4288 a
+SDict begin H.R end
+ 905 4288 a 905 4350 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 905 4350 a Black 75
+4463 a Ft(CordaroWagnerCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 4464 a
+SDict begin H.S end
+ 909 4464 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb
+999 4401 a
+SDict begin H.R end
+ 999 4401 a 999 4463 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end
+ 999 4463 a Black 75
+4576 a FK(coset,)p 0.0236 0.0894 0.6179 TeXcolorrgb 307
+4576 a
+SDict begin H.S end
+ 307 4576 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p
+0.0236 0.0894 0.6179 TeXcolorrgb 397 4514 a
+SDict begin H.R end
+ 397 4514
+a 397 4576 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end
+ 397 4576 a Black 75 4689 a Ft(CosetCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 4690 a
+SDict begin H.S end
+ 538
+4690 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(107)p
+0.0236 0.0894 0.6179 TeXcolorrgb 673 4627 a
+SDict begin H.R end
+ 673 4627
+a 673 4689 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.107) cvn H.B /ANN pdfmark end
+ 673 4689 a Black 75 4802 a FK(co)o(v)o(ering)f(code,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 630 4803 a
+SDict begin H.S end
+ 630 4803
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179
+TeXcolorrgb 720 4740 a
+SDict begin H.R end
+ 720 4740 a 720 4802 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end
+ 720 4802
+a Black 75 4915 a Ft(CoveringRadius)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 770 4916 a
+SDict begin H.S end
+ 770 4916 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179 TeXcolorrgb
+860 4853 a
+SDict begin H.R end
+ 860 4853 a 860 4915 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end
+ 860 4915 a Black 75
+5028 a Ft(CyclicCodes)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+630 5029 a
+SDict begin H.S end
+ 630 5029 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(81)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 4966
+a
+SDict begin H.R end
+ 720 4966 a 720 5028 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.81) cvn H.B /ANN pdfmark end
+ 720 5028 a Black 75 5141 a Ft(CyclotomicCosets)
+p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 5142 a
+SDict begin H.S end
+
+862 5142 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(140)p
+0.0236 0.0894 0.6179 TeXcolorrgb 997 5079 a
+SDict begin H.R end
+ 997 5079
+a 997 5141 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end
+ 997 5141 a Black 75 5337 a Ft(DavydovCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 5338 a
+SDict begin H.S end
+ 630
+5338 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p
+0.0236 0.0894 0.6179 TeXcolorrgb 720 5275 a
+SDict begin H.R end
+ 720 5275
+a 720 5337 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 720 5337 a Black 75 5450 a Ft(Decode)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 399 5451 a
+SDict begin H.S end
+ 399 5451
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179
+TeXcolorrgb 489 5388 a
+SDict begin H.R end
+ 489 5388 a 489 5450 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end
+ 489 5450
+a Black 75 5562 a Ft(Decodeword)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 584 5563 a
+SDict begin H.S end
+ 584 5563 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(52)p 0.0236 0.0894 0.6179 TeXcolorrgb
+674 5500 a
+SDict begin H.R end
+ 674 5500 a 674 5562 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end
+ 674 5562 a Black Black
+Black 1954 399 a Ft(DecreaseMinimumDis)q(tan)q(ceU)q(ppe)q(rB)q(oun)q
+(d)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 400
+a
+SDict begin H.S end
+ 3529 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(46)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3619 337 a
+SDict begin H.R end
+ 3619 337
+a 3619 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end
+ 3619 399 a Black 1954 511 a FK(de\002ning)g(polynomial,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2734 512 a
+SDict begin H.S end
+ 2734 512
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2824 449 a
+SDict begin H.R end
+ 2824 449 a 2824 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 2824 511
+a Black 1954 624 a FK(de)o(gree,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2240 625 a
+SDict begin H.S end
+ 2240 625 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2330 562 a
+SDict begin H.R end
+ 2330 562 a 2330 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end
+ 2330 624 a Black 1954
+737 a Ft(DegreeMultivariate)q(Pol)q(yno)q(mia)q(l)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3298 737 a
+SDict begin H.S end
+ 3298 737
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3433 675 a
+SDict begin H.R end
+ 3433 675 a 3433 737 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end
+ 3433 737
+a Black 1954 850 a Ft(DegreesMonomialTer)q(m)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2880 851 a
+SDict begin H.S end
+ 2880 851
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(145)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3015 788 a
+SDict begin H.R end
+ 3015 788 a 3015 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.145) cvn H.B /ANN pdfmark end
+ 3015 850
+a Black 1954 963 a Ft(DegreesMultivariat)q(ePo)q(lyn)q(omi)q(al)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3344 964 a
+SDict begin H.S end
+ 3344
+964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(143)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3479 901 a
+SDict begin H.R end
+ 3479 901
+a 3479 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.143) cvn H.B /ANN pdfmark end
+ 3479 963 a Black 1954 1076 a FK(density)g(of)f(a)f(code,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2618 1077 a
+SDict begin H.S end
+ 2618 1077
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2753 1014 a
+SDict begin H.R end
+ 2753 1014 a 2753 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end
+ 2753
+1076 a Black 1954 1189 a Ft(Dimension)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2417 1190 a
+SDict begin H.S end
+ 2417 1190 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2507 1127 a
+SDict begin H.R end
+ 2507 1127 a 2507 1189 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end
+ 2507 1189 a Black
+1954 1302 a Ft(DirectProductCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2788 1303 a
+SDict begin H.S end
+ 2788 1303 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(110)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2923 1240 a
+SDict begin H.R end
+ 2923 1240 a 2923 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end
+ 2923 1302 a Black
+1954 1415 a Ft(DirectSumCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 1417 a
+SDict begin H.S end
+ 2602 1417 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(109)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 1353 a
+SDict begin H.R end
+ 2737 1353 a 2737 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.109) cvn H.B /ANN pdfmark end
+ 2737 1415 a Black
+1954 1528 a Ft(Display)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2324 1529 a
+SDict begin H.S end
+ 2324 1529 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(40)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2414 1466 a
+SDict begin H.R end
+ 2414 1466 a 2414 1528 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.40) cvn H.B /ANN pdfmark end
+ 2414 1528 a Black
+1954 1641 a Ft(DisplayBoundsInfo)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2788 1641 a
+SDict begin H.S end
+ 2788 1641 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(41)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2878 1579 a
+SDict begin H.R end
+ 2878 1579 a 2878 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.41) cvn H.B /ANN pdfmark end
+ 2878 1641 a Black
+1954 1753 a FK(distance,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2297 1754 a
+SDict begin H.S end
+ 2297 1754 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb 2387 1691
+a
+SDict begin H.R end
+ 2387 1691 a 2387 1753 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end
+ 2387 1753 a Black 1954 1866
+a Ft(DistanceCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2741 1867 a
+SDict begin H.S end
+ 2741 1867 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(25)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 1804
+a
+SDict begin H.R end
+ 2831 1804 a 2831 1866 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end
+ 2831 1866 a Black 1954 1979
+a Ft(DistancesDistribut)q(ion)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2973 1980 a
+SDict begin H.S end
+ 2973 1980 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3063 1917 a
+SDict begin H.R end
+ 3063 1917 a 3063 1979 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end
+ 3063 1979 a Black
+1954 2092 a Ft(DistancesDistribut)q(ion)q(Mat)q(FFE)q(Ve)q(cFF)q(E)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 2092 a
+SDict begin H.S end
+ 3529
+2092 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(14)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3619 2030 a
+SDict begin H.R end
+ 3619 2030 a 3619 2092 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.14) cvn H.B /ANN pdfmark end
+ 3619
+2092 a Black 1954 2205 a Ft(DistancesDistribut)q(ion)q(Vec)q(FFE)q(sV)q
+(ecF)q(FE)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3576
+2206 a
+SDict begin H.S end
+ 3576 2206 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 2143
+a
+SDict begin H.R end
+ 3666 2143 a 3666 2205 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end
+ 3666 2205 a Black 1954 2318
+a Ft(DistanceVecFFE)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2649 2319 a
+SDict begin H.S end
+ 2649 2319 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2256
+a
+SDict begin H.R end
+ 2739 2256 a 2739 2318 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end
+ 2739 2318 a Black 1954 2431
+a FK(di)n(visor)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2246 2432 a
+SDict begin H.S end
+ 2246 2432 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb 2336 2369
+a
+SDict begin H.R end
+ 2336 2369 a 2336 2431 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end
+ 2336 2431 a Black 1954 2544
+a Ft(DivisorAddition)52 b FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2741 2545 a
+SDict begin H.S end
+ 2741 2545 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2831 2482 a
+SDict begin H.R end
+ 2831 2482 a 2831 2544 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end
+ 2831 2544 a Black
+1954 2657 a Ft(DivisorAutomorphis)q(mGr)q(oup)q(P1)h
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3251 2659 a
+SDict begin H.S end
+ 3251
+2659 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(94)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3341 2595 a
+SDict begin H.R end
+ 3341 2595
+a 3341 2657 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.94) cvn H.B /ANN pdfmark end
+ 3341 2657 a Black 1954 2770 a Ft(DivisorDegree)e
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2771 a
+SDict begin H.S end
+ 2649
+2771 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2739 2708 a
+SDict begin H.R end
+ 2739 2708
+a 2739 2770 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end
+ 2739 2770 a Black 1954 2883 a Ft(DivisorGCD)f
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 2885 a
+SDict begin H.S end
+ 2509
+2885 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2599 2821 a
+SDict begin H.R end
+ 2599 2821
+a 2599 2883 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end
+ 2599 2883 a Black 1954 2995 a Ft(DivisorIsZero)h
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2996 a
+SDict begin H.S end
+ 2649
+2996 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2739 2933 a
+SDict begin H.R end
+ 2739 2933
+a 2739 2995 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end
+ 2739 2995 a Black 1954 3108 a Ft(DivisorLCM)f
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 3110 a
+SDict begin H.S end
+ 2509
+3110 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2599 3046 a
+SDict begin H.R end
+ 2599 3046
+a 2599 3108 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end
+ 2599 3108 a Black 1954 3221 a Ft(DivisorNegate)h
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 3222 a
+SDict begin H.S end
+ 2649
+3222 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2739 3159 a
+SDict begin H.R end
+ 2739 3159
+a 2739 3221 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end
+ 2739 3221 a Black 1954 3334 a Ft(DivisorOfRationalF)q
+(unc)q(tio)q(nP1)i FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3298 3336 a
+SDict begin H.S end
+ 3298 3336 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(91)p 0.0236 0.0894 0.6179 TeXcolorrgb 3388 3272
+a
+SDict begin H.R end
+ 3388 3272 a 3388 3334 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.91) cvn H.B /ANN pdfmark end
+ 3388 3334 a Black 1954 3447
+a Ft(DivisorOnAffineCur)q(ve)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2927 3448 a
+SDict begin H.S end
+ 2927 3448 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3017 3385 a
+SDict begin H.R end
+ 3017 3385 a 3017 3447 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end
+ 3017 3447 a Black
+1954 3560 a Ft(DivisorsEqual)e FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 3562 a
+SDict begin H.S end
+ 2649 3562 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 3498 a
+SDict begin H.R end
+ 2739 3498 a 2739 3560 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end
+ 2739 3560 a Black
+1954 3673 a Ft(DivisorsMultivaria)q(teP)q(oly)q(nom)q(ia)q(l)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3390 3674 a
+SDict begin H.S end
+ 3390
+3674 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(146)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3525 3611 a
+SDict begin H.R end
+ 3525 3611
+a 3525 3673 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.146) cvn H.B /ANN pdfmark end
+ 3525 3673 a Black 1954 3786 a Ft(DualCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 3787 a
+SDict begin H.S end
+ 2370
+3787 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(105)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2505 3724 a
+SDict begin H.R end
+ 2505 3724
+a 2505 3786 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end
+ 2505 3786 a Black 1954 3982 a Ft(ElementsCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 3983 a
+SDict begin H.S end
+ 2556
+3983 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(60)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2646 3920 a
+SDict begin H.R end
+ 2646 3920
+a 2646 3982 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.60) cvn H.B /ANN pdfmark end
+ 2646 3982 a Black 1954 4095 a FK(encoder)25
+b(map,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2466 4096 a
+SDict begin H.S end
+
+2466 4096 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2556 4033 a
+SDict begin H.R end
+ 2556 4033
+a 2556 4095 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end
+ 2556 4095 a Black 1954 4208 a Ft(EnlargedGabidulinC)q
+(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 4209
+a
+SDict begin H.S end
+ 2973 4209 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3063 4146 a
+SDict begin H.R end
+ 3063 4146
+a 3063 4208 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 3063 4208 a Black 1954 4320 a Ft(EnlargedTombakCode)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2834 4321 a
+SDict begin H.S end
+ 2834
+4321 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2924 4258 a
+SDict begin H.R end
+ 2924 4258
+a 2924 4320 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 2924 4320 a Black 1954 4433 a FK(equi)n(v)n(alent)h
+(codes,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2603 4434
+a
+SDict begin H.S end
+ 2603 4434 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2693 4371 a
+SDict begin H.R end
+ 2693 4371
+a 2693 4433 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end
+ 2693 4433 a Black 1954 4546 a Ft(EvaluationBivariat)q
+(eCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3066
+4548 a
+SDict begin H.S end
+ 3066 4548 a 0.0236 0.0894 0.6179 TeXcolorrgb -2
+x FK(96)p 0.0236 0.0894 0.6179 TeXcolorrgb 3156 4484
+a
+SDict begin H.R end
+ 3156 4484 a 3156 4546 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.96) cvn H.B /ANN pdfmark end
+ 3156 4546 a Black 1954 4659
+a Ft(EvaluationBivariat)q(eCo)q(deN)q(C)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3159 4661 a
+SDict begin H.S end
+ 3159 4661 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(96)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3249 4597 a
+SDict begin H.R end
+ 3249 4597 a 3249 4659 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.96) cvn H.B /ANN pdfmark end
+ 3249 4659 a Black
+1954 4772 a Ft(EvaluationCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 4773 a
+SDict begin H.S end
+ 2649 4773 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(82)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 4710 a
+SDict begin H.R end
+ 2739 4710 a 2739 4772 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end
+ 2739 4772 a Black
+1954 4885 a Ft(EvenWeightSubcode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2788 4886 a
+SDict begin H.S end
+ 2788 4886 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(100)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2923 4823 a
+SDict begin H.R end
+ 2923 4823 a 2923 4885 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.100) cvn H.B /ANN pdfmark end
+ 2923 4885 a Black
+1954 4998 a Ft(ExhaustiveSearchCo)q(ver)q(ing)q(Rad)q(iu)q(s)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3390 4998 a
+SDict begin H.S end
+ 3390
+4998 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(121)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3525 4936 a
+SDict begin H.R end
+ 3525 4936 a 3525 4998 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.121) cvn H.B /ANN pdfmark end
+ 3525
+4998 a Black 1954 5111 a Ft(ExpurgatedCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 5112 a
+SDict begin H.S end
+ 2649 5112 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(101)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2784 5049 a
+SDict begin H.R end
+ 2784 5049 a 2784 5111 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.101) cvn H.B /ANN pdfmark end
+ 2784 5111 a Black
+1954 5224 a Ft(ExtendedBinaryGola)q(yCo)q(de)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3066 5225 a
+SDict begin H.S end
+ 3066 5225
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3156 5162 a
+SDict begin H.R end
+ 3156 5162 a 3156 5224 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end
+ 3156
+5224 a Black 1954 5337 a Ft(ExtendedCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2556 5339 a
+SDict begin H.S end
+ 2556 5339 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(99)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2646 5275 a
+SDict begin H.R end
+ 2646 5275 a 2646 5337 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.99) cvn H.B /ANN pdfmark end
+ 2646 5337 a Black
+1954 5450 a Ft(ExtendedDirectSumC)q(ode)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2973 5450 a
+SDict begin H.S end
+ 2973 5450 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(111)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3108 5388 a
+SDict begin H.R end
+ 3108 5388 a 3108 5450 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end
+ 3108 5450 a Black
+1954 5562 a Ft(ExtendedTernaryGol)q(ayC)q(ode)q FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3112 5563 a
+SDict begin H.S end
+ 3112 5563
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(74)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3202 5500 a
+SDict begin H.R end
+ 3202 5500 a 3202 5562 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end
+ 3202
+5562 a Black Black Black eop end end
+%%Page: 151 151
+TeXDict begin HPSdict begin 151 150 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.151) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(151)p Black 75 399 a(e)o(xternal)25 b(distance,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 733 400 a
+SDict begin H.S end
+ 733 400 a
+0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179
+TeXcolorrgb 868 337 a
+SDict begin H.R end
+ 868 337 a 868 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 868 399 a Black
+75 594 a Ft(FerreroDesignCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 595 a
+SDict begin H.S end
+ 909 595 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb
+999 532 a
+SDict begin H.R end
+ 999 532 a 999 594 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end
+ 999 594 a Black 75 707
+a Ft(FireCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+491 709 a
+SDict begin H.S end
+ 491 709 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 645
+a
+SDict begin H.R end
+ 581 645 a 581 707 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end
+ 581 707 a Black 75 903 a Ft(GabidulinCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 904 a
+SDict begin H.S end
+ 723
+904 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179
+TeXcolorrgb 813 841 a
+SDict begin H.R end
+ 813 841 a 813 903 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 813 903 a Black
+75 1016 a FK(Gary)e(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+497 1018 a
+SDict begin H.S end
+ 497 1018 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 632 954
+a
+SDict begin H.R end
+ 632 954 a 632 1016 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end
+ 632 1016 a Black 75 1129 a Ft
+(GeneralizedCodeNor)q(m)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1001 1130 a
+SDict begin H.S end
+ 1001 1130 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1136 1067 a
+SDict begin H.R end
+ 1136 1067 a 1136 1129 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 1136 1129 a Black
+75 1242 a Ft(GeneralizedReedMul)q(ler)q(Cod)q(e)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1280 1243 a
+SDict begin H.S end
+ 1280 1243
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1370 1180 a
+SDict begin H.R end
+ 1370 1180 a 1370 1242 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end
+ 1370
+1242 a Black 75 1355 a Ft(GeneralizedReedSol)q(omo)q(nCo)q(de)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 1356 a
+SDict begin H.S end
+ 1326
+1356 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(82)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1416 1293 a
+SDict begin H.R end
+ 1416 1293
+a 1416 1355 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end
+ 1416 1355 a Black 75 1468 a Ft(GeneralizedReedSol)q(omo)q
+(nDe)q(cod)q(er)q(Gao)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1604 1469 a
+SDict begin H.S end
+ 1604 1469 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(53)p 0.0236 0.0894 0.6179 TeXcolorrgb 1694 1406
+a
+SDict begin H.R end
+ 1694 1406 a 1694 1468 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.53) cvn H.B /ANN pdfmark end
+ 1694 1468 a Black 75 1581 a
+Ft(GeneralizedReedSol)q(omo)q(nLi)q(stD)q(ec)q(ode)q(r)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1650 1582 a
+SDict begin H.S end
+ 1650
+1582 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(54)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1740 1519 a
+SDict begin H.R end
+ 1740 1519
+a 1740 1581 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end
+ 1740 1581 a Black 75 1694 a Ft(GeneralizedSrivast)q(ava)q
+(Cod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1280
+1695 a
+SDict begin H.S end
+ 1280 1695 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 1370 1632
+a
+SDict begin H.R end
+ 1370 1632 a 1370 1694 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end
+ 1370 1694 a Black 75 1807 a
+Ft(GeneralLowerBoundC)q(ove)q(rin)q(gRa)q(di)q(us)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1558 1807 a
+SDict begin H.S end
+ 1558 1807
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(122)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1693 1745 a
+SDict begin H.R end
+ 1693 1745 a 1693 1807 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.122) cvn H.B /ANN pdfmark end
+ 1693
+1807 a Black 75 1919 a Ft(GeneralUpperBoundC)q(ove)q(rin)q(gRa)q(di)q
+(us)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1558 1919
+a
+SDict begin H.S end
+ 1558 1919 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(122)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1693 1857 a
+SDict begin H.R end
+ 1693 1857
+a 1693 1919 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.122) cvn H.B /ANN pdfmark end
+ 1693 1919 a Black 75 2032 a FK(generator)j(polynomial,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 901 2033 a
+SDict begin H.S end
+ 901 2033
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179
+TeXcolorrgb 991 1970 a
+SDict begin H.R end
+ 991 1970 a 991 2032 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end
+ 991 2032
+a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1037
+2033 a
+SDict begin H.S end
+ 1037 2033 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb 1127 1970
+a
+SDict begin H.R end
+ 1127 1970 a 1127 2032 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end
+ 1127 2032 a Black 75 2145 a
+Ft(GeneratorMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+677 2145 a
+SDict begin H.S end
+ 677 2145 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(41)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 2083 a
+SDict begin H.R end
+ 767
+2083 a 767 2145 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.41) cvn H.B /ANN pdfmark end
+ 767 2145 a Black 75 2258 a Ft(GeneratorMatCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 2259 a
+SDict begin H.S end
+ 862
+2259 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(64)p
+0.0236 0.0894 0.6179 TeXcolorrgb 952 2196 a
+SDict begin H.R end
+ 952 2196
+a 952 2258 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.64) cvn H.B /ANN pdfmark end
+ 952 2258 a Black 75 2371 a Ft(GeneratorPol)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 2371 a
+SDict begin H.S end
+ 677
+2371 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(42)p 0.0236 0.0894 0.6179
+TeXcolorrgb 767 2309 a
+SDict begin H.R end
+ 767 2309 a 767 2371 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.42) cvn H.B /ANN pdfmark end
+ 767 2371
+a Black 75 2484 a Ft(GeneratorPolCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 862 2485 a
+SDict begin H.S end
+ 862 2485 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb
+952 2422 a
+SDict begin H.R end
+ 952 2422 a 952 2484 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end
+ 952 2484 a Black 75
+2597 a Ft(GenusCurve)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+584 2598 a
+SDict begin H.S end
+ 584 2598 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(86)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 2535
+a
+SDict begin H.R end
+ 674 2535 a 674 2597 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.86) cvn H.B /ANN pdfmark end
+ 674 2597 a Black 75 2710 a Ft(GoppaCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 2711 a
+SDict begin H.S end
+ 538
+2711 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p
+0.0236 0.0894 0.6179 TeXcolorrgb 628 2648 a
+SDict begin H.R end
+ 628 2648
+a 628 2710 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end
+ 628 2710 a Black 75 2823 a Ft(GoppaCodeClassical)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 2825 a
+SDict begin H.S end
+ 955
+2825 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(95)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1045 2761 a
+SDict begin H.R end
+ 1045 2761
+a 1045 2823 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.95) cvn H.B /ANN pdfmark end
+ 1045 2823 a Black 75 2936 a Ft(GOrbitPoint)50
+b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 2937 a
+SDict begin H.S end
+
+677 2937 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(86)p
+0.0236 0.0894 0.6179 TeXcolorrgb 767 2874 a
+SDict begin H.R end
+ 767 2874
+a 767 2936 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.86) cvn H.B /ANN pdfmark end
+ 767 2936 a Black 75 3049 a Ft(GrayMat)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 3051 a
+SDict begin H.S end
+ 445
+3051 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(129)p
+0.0236 0.0894 0.6179 TeXcolorrgb 580 2987 a
+SDict begin H.R end
+ 580 2987
+a 580 3049 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end
+ 580 3049 a Black 75 3161 a FK(greatest)25
+b(common)f(di)n(visor)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1013 3163 a
+SDict begin H.S end
+ 1013 3163 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 1103 3099
+a
+SDict begin H.R end
+ 1103 3099 a 1103 3161 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end
+ 1103 3161 a Black 75 3274 a
+Ft(GreedyCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+584 3275 a
+SDict begin H.S end
+ 584 3275 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 3212
+a
+SDict begin H.R end
+ 674 3212 a 674 3274 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end
+ 674 3274 a Black 75 3387 a FK(Griesmer)g(code,)
+p 0.0236 0.0894 0.6179 TeXcolorrgb 653 3388 a
+SDict begin H.S end
+ 653 3388
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179
+TeXcolorrgb 788 3325 a
+SDict begin H.R end
+ 788 3325 a 788 3387 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end
+ 788 3387
+a Black 75 3500 a Ft(GuavaVersion)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 677 3500 a
+SDict begin H.S end
+ 677 3500 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179 TeXcolorrgb
+812 3438 a
+SDict begin H.R end
+ 812 3438 a 812 3500 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end
+ 812 3500 a Black 75
+3696 a FK(Hadamard)g(matrix,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+759 3697 a
+SDict begin H.S end
+ 759 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 849 3634
+a
+SDict begin H.R end
+ 849 3634 a 849 3696 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end
+ 849 3696 a Black FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 896 3697 a
+SDict begin H.S end
+ 896 3697 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(130)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1031 3634 a
+SDict begin H.R end
+ 1031 3634 a 1031 3696 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end
+ 1031 3696 a Black
+75 3809 a Ft(HadamardCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 677 3810 a
+SDict begin H.S end
+ 677 3810 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb
+767 3747 a
+SDict begin H.R end
+ 767 3747 a 767 3809 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end
+ 767 3809 a Black 75
+3922 a Ft(HadamardMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+630 3923 a
+SDict begin H.S end
+ 630 3923 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(130)p 0.0236 0.0894 0.6179 TeXcolorrgb 765 3860
+a
+SDict begin H.R end
+ 765 3860 a 765 3922 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end
+ 765 3922 a Black 75 4035 a FK(Hamming)f
+(metric,)p 0.0236 0.0894 0.6179 TeXcolorrgb 739 4036
+a
+SDict begin H.S end
+ 739 4036 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(15)p
+0.0236 0.0894 0.6179 TeXcolorrgb 829 3973 a
+SDict begin H.R end
+ 829 3973
+a 829 4035 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end
+ 829 4035 a Black 75 4148 a Ft(HammingCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 4149 a
+SDict begin H.S end
+ 630
+4149 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p
+0.0236 0.0894 0.6179 TeXcolorrgb 720 4086 a
+SDict begin H.R end
+ 720 4086
+a 720 4148 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 720 4148 a Black 75 4261 a Ft(HorizontalConversi)q(onF)q
+(iel)q(dMa)q(t)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1419 4262 a
+SDict begin H.S end
+ 1419 4262 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 1554 4199
+a
+SDict begin H.R end
+ 1554 4199 a 1554 4261 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end
+ 1554 4261 a Black 75 4374 a
+FK(hull,)p 0.0236 0.0894 0.6179 TeXcolorrgb 262 4375
+a
+SDict begin H.S end
+ 262 4375 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(110)p
+0.0236 0.0894 0.6179 TeXcolorrgb 397 4312 a
+SDict begin H.R end
+ 397 4312
+a 397 4374 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end
+ 397 4374 a Black 75 4570 a Ft(in)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 213 4571 a
+SDict begin H.S end
+ 213 4571
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179
+TeXcolorrgb 303 4508 a
+SDict begin H.R end
+ 303 4508 a 303 4570 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end
+ 303 4570
+a Black 75 4682 a Ft(IncreaseCoveringRa)q(diu)q(sLo)q(wer)q(Bo)q(und)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 4683 a
+SDict begin H.S end
+ 1604
+4683 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(120)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1739 4620 a
+SDict begin H.R end
+ 1739 4620
+a 1739 4682 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.120) cvn H.B /ANN pdfmark end
+ 1739 4682 a Black 75 4795 a FK(information)j(bits,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 704 4796 a
+SDict begin H.S end
+ 704 4796
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179
+TeXcolorrgb 794 4733 a
+SDict begin H.R end
+ 794 4733 a 794 4795 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end
+ 794 4795
+a Black 75 4908 a Ft(InformationWord)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 816 4909 a
+SDict begin H.S end
+ 816 4909 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb
+906 4846 a
+SDict begin H.R end
+ 906 4846 a 906 4908 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end
+ 906 4908 a Black 75
+5021 a Ft(InnerDistribution)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 5022 a
+SDict begin H.S end
+ 909 5022 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb
+999 4959 a
+SDict begin H.R end
+ 999 4959 a 999 5021 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end
+ 999 5021 a Black 75
+5134 a Ft(IntersectionCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 862 5135 a
+SDict begin H.S end
+ 862 5135 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(110)p 0.0236 0.0894 0.6179 TeXcolorrgb
+997 5072 a
+SDict begin H.R end
+ 997 5072 a 997 5134 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end
+ 997 5134 a Black 75
+5247 a Ft(IrreduciblePolynom)q(ial)q(sNr)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1233 5249 a
+SDict begin H.S end
+ 1233 5249 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(139)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1368 5185 a
+SDict begin H.R end
+ 1368 5185 a 1368 5247 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end
+ 1368 5247 a Black
+75 5360 a Ft(IsActionMoebiusTra)q(nsf)q(orm)q(ati)q(on)q(OnD)q(ivi)q
+(sor)q(De)q(fin)q(edP)q(1)407 5473 y FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 453 5475 a
+SDict begin H.S end
+ 453 5475 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(93)p 0.0236 0.0894 0.6179 TeXcolorrgb
+543 5411 a
+SDict begin H.R end
+ 543 5411 a 543 5473 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end
+ 543 5473 a Black 75
+5586 a Ft(IsAffineCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 677 5587 a
+SDict begin H.S end
+ 677 5587 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb
+767 5524 a
+SDict begin H.R end
+ 767 5524 a 767 5586 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end
+ 767 5586 a Black Black
+Black 1954 399 a Ft(IsAlmostAffineCode)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2834 400 a
+SDict begin H.S end
+ 2834 400 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2924 337 a
+SDict begin H.R end
+ 2924 337 a 2924 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end
+ 2924 399 a Black 1954
+511 a FK(IsCheapConw)o(ayPolynomial,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3019 512 a
+SDict begin H.S end
+ 3019 512 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3109 449 a
+SDict begin H.R end
+ 3109 449 a 3109 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 3109 511 a Black 1954
+624 a Ft(IsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2278 625 a
+SDict begin H.S end
+ 2278 625 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 562
+a
+SDict begin H.R end
+ 2368 562 a 2368 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end
+ 2368 624 a Black 1954 737 a Ft(IsCodeword)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 737 a
+SDict begin H.S end
+ 2463
+737 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2553 675 a
+SDict begin H.R end
+ 2553 675 a 2553 737 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end
+ 2553 737
+a Black 1954 850 a Ft(IsCoordinateAccept)q(abl)q(e)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3019 851 a
+SDict begin H.S end
+ 3019
+851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3154 788 a
+SDict begin H.R end
+ 3154 788
+a 3154 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 3154 850 a Black 1954 963 a Ft(IsCyclicCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 964 a
+SDict begin H.S end
+ 2556
+964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2646 901 a
+SDict begin H.R end
+ 2646 901 a 2646 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end
+ 2646 963
+a Black 1954 1076 a Ft(IsEquivalent)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2556 1077 a
+SDict begin H.S end
+ 2556 1077 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2646 1014 a
+SDict begin H.R end
+ 2646 1014 a 2646 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end
+ 2646 1076 a Black
+1954 1189 a Ft(IsFinite)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2370 1190 a
+SDict begin H.S end
+ 2370 1190 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2460 1127 a
+SDict begin H.R end
+ 2460 1127 a 2460 1189 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end
+ 2460 1189 a Black
+1954 1302 a Ft(IsGriesmerCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 1303 a
+SDict begin H.S end
+ 2649 1303 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2784 1240 a
+SDict begin H.R end
+ 2784 1240 a 2784 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end
+ 2784 1302 a Black
+1954 1415 a Ft(IsInStandardForm)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2741 1416 a
+SDict begin H.S end
+ 2741 1416 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(132)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2876 1353 a
+SDict begin H.R end
+ 2876 1353 a 2876 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end
+ 2876 1415 a Black
+1954 1528 a Ft(IsLatinSquare)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 1529 a
+SDict begin H.S end
+ 2602 1529 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(134)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 1466 a
+SDict begin H.R end
+ 2737 1466 a 2737 1528 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.134) cvn H.B /ANN pdfmark end
+ 2737 1528 a Black
+1954 1641 a Ft(IsLinearCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2556 1642 a
+SDict begin H.S end
+ 2556 1642 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2646 1579 a
+SDict begin H.R end
+ 2646 1579 a 2646 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end
+ 2646 1641 a Black
+1954 1753 a Ft(IsMDSCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2417 1754 a
+SDict begin H.S end
+ 2417 1754 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2507 1691 a
+SDict begin H.R end
+ 2507 1691 a 2507 1753 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end
+ 2507 1753 a Black
+1954 1866 a Ft(IsNormalCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2556 1867 a
+SDict begin H.S end
+ 2556 1867 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2691 1804 a
+SDict begin H.R end
+ 2691 1804 a 2691 1866 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 2691 1866 a Black
+1954 1979 a Ft(IsPerfectCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 1980 a
+SDict begin H.S end
+ 2602 1980 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2692 1917 a
+SDict begin H.R end
+ 2692 1917 a 2692 1979 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end
+ 2692 1979 a Black
+1954 2092 a FK(IsPrimiti)n(v)o(ePolynomial,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2819 2093 a
+SDict begin H.S end
+ 2819 2093 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(17)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2909 2030 a
+SDict begin H.R end
+ 2909 2030 a 2909 2092 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.17) cvn H.B /ANN pdfmark end
+ 2909 2092 a Black
+1954 2205 a Ft(IsSelfComplementar)q(yCo)q(de)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3066 2206 a
+SDict begin H.S end
+ 3066 2206
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3156 2143 a
+SDict begin H.R end
+ 3156 2143 a 3156 2205 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 3156
+2205 a Black 1954 2318 a Ft(IsSelfDualCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 2319 a
+SDict begin H.S end
+ 2649 2319 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 2256 a
+SDict begin H.R end
+ 2739 2256 a 2739 2318 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 2739 2318 a Black
+1954 2431 a Ft(IsSelfOrthogonalCo)q(de)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2927 2432 a
+SDict begin H.S end
+ 2927 2432 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3017 2369 a
+SDict begin H.R end
+ 3017 2369 a 3017 2431 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 3017 2431 a Black
+1954 2544 a Ft(IsSubset)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2370 2545 a
+SDict begin H.S end
+ 2370 2545 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2460 2482 a
+SDict begin H.R end
+ 2460 2482 a 2460 2544 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end
+ 2460 2544 a Black
+1954 2732 a Ft(Krawtchouk)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2463 2733 a
+SDict begin H.S end
+ 2463 2733 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2598 2670 a
+SDict begin H.R end
+ 2598 2670 a 2598 2732 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end
+ 2598 2732 a Black
+1954 2845 a Ft(KrawtchoukMat)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 2847 a
+SDict begin H.S end
+ 2602 2847 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 2783 a
+SDict begin H.R end
+ 2737 2783 a 2737 2845 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end
+ 2737 2845 a Black
+1954 3033 a FK(Latin)e(square,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2451 3034 a
+SDict begin H.S end
+ 2451 3034 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2586 2971 a
+SDict begin H.R end
+ 2586 2971 a 2586 3033 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end
+ 2586 3033 a Black
+1954 3146 a FK(least)g(common)g(multiple,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2833 3148 a
+SDict begin H.S end
+ 2833 3148 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2923 3084 a
+SDict begin H.R end
+ 2923 3084 a 2923 3146 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end
+ 2923 3146 a Black
+1954 3259 a Ft(LeftActingDomain)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2741 3260 a
+SDict begin H.S end
+ 2741 3260 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2831 3197 a
+SDict begin H.R end
+ 2831 3197 a 2831 3259 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end
+ 2831 3259 a Black
+1954 3372 a FK(length,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2227 3373 a
+SDict begin H.S end
+ 2227 3373 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2317 3310
+a
+SDict begin H.R end
+ 2317 3310 a 2317 3372 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2317 3372 a Black 1954 3485
+a Ft(LengthenedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2649 3486 a
+SDict begin H.S end
+ 2649 3486 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(104)p 0.0236 0.0894 0.6179 TeXcolorrgb 2784 3423
+a
+SDict begin H.R end
+ 2784 3423 a 2784 3485 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.104) cvn H.B /ANN pdfmark end
+ 2784 3485 a Black 1954 3598
+a Ft(LexiCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2370 3599 a
+SDict begin H.S end
+ 2370 3599 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(64)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 3536
+a
+SDict begin H.R end
+ 2460 3536 a 2460 3598 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.64) cvn H.B /ANN pdfmark end
+ 2460 3598 a Black 1954 3711
+a FK(linear)h(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2401 3712 a
+SDict begin H.S end
+ 2401 3712 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(18)p 0.0236 0.0894 0.6179 TeXcolorrgb 2491 3649
+a
+SDict begin H.R end
+ 2491 3649 a 2491 3711 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.18) cvn H.B /ANN pdfmark end
+ 2491 3711 a Black 1954 3823
+a Ft(LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2286 3936 a
+SDict begin H.S end
+ 2286
+3936 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(124)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2421 3874 a
+SDict begin H.R end
+ 2421 3874 a 2421 3936 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.124) cvn H.B /ANN pdfmark end
+ 2421
+3936 a Black 1954 4049 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q
+(ded)q(1)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529
+4050 a
+SDict begin H.S end
+ 3529 4050 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(125)p 0.0236 0.0894 0.6179 TeXcolorrgb 3664 3987
+a
+SDict begin H.R end
+ 3664 3987 a 3664 4049 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.125) cvn H.B /ANN pdfmark end
+ 3664 4049 a Black 1954 4162
+a Ft(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 4163 a
+SDict begin H.S end
+ 3529
+4163 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(125)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3664 4100 a
+SDict begin H.R end
+ 3664 4100
+a 3664 4162 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.125) cvn H.B /ANN pdfmark end
+ 3664 4162 a Black 1954 4275 a Ft(LowerBoundCovering)q
+(Rad)q(ius)q(Ind)q(uc)q(tio)q(n)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3529 4276 a
+SDict begin H.S end
+ 3529 4276 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(126)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3664 4213 a
+SDict begin H.R end
+ 3664 4213 a 3664 4275 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.126) cvn H.B /ANN pdfmark end
+ 3664 4275 a Black
+1954 4388 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Sph)q(er)q(eCo)q(ver)q
+(ing)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2286 4502
+a
+SDict begin H.S end
+ 2286 4502 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(123)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2421 4439 a
+SDict begin H.R end
+ 2421 4439
+a 2421 4501 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.123) cvn H.B /ANN pdfmark end
+ 2421 4501 a Black 1954 4614 a Ft(LowerBoundCovering)q
+(Rad)q(ius)q(Van)q(We)q(e1)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3437 4615 a
+SDict begin H.S end
+ 3437 4615 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(123)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3572 4552 a
+SDict begin H.R end
+ 3572 4552 a 3572 4614 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.123) cvn H.B /ANN pdfmark end
+ 3572 4614 a Black
+1954 4727 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Van)q(We)q(e2)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3437 4727 a
+SDict begin H.S end
+ 3437
+4727 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(124)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3572 4665 a
+SDict begin H.R end
+ 3572 4665 a 3572 4727 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.124) cvn H.B /ANN pdfmark end
+ 3572
+4727 a Black 1954 4840 a Ft(LowerBoundGilbertV)q(ars)q(ham)q(ov)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3205 4841 a
+SDict begin H.S end
+ 3205
+4841 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3340 4778 a
+SDict begin H.R end
+ 3340 4778
+a 3340 4840 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end
+ 3340 4840 a Black 1954 4953 a Ft(LowerBoundMinimumD)q
+(ist)q(anc)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3159 4954 a
+SDict begin H.S end
+ 3159 4954 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 3294 4891
+a
+SDict begin H.R end
+ 3294 4891 a 3294 4953 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end
+ 3294 4953 a Black 1954 5065
+a Ft(LowerBoundSpherePa)q(cki)q(ng)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3066 5066 a
+SDict begin H.S end
+ 3066 5066 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3201 5003 a
+SDict begin H.R end
+ 3201 5003 a 3201 5065 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end
+ 3201 5065 a Black
+1954 5254 a FK(MacW)l(illiams)g(transform,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2867 5255 a
+SDict begin H.S end
+ 2867 5255 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3002 5192 a
+SDict begin H.R end
+ 3002 5192 a 3002 5254 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end
+ 3002 5254 a Black
+1954 5367 a Ft(MatrixRepresentati)q(onO)q(fEl)q(eme)q(nt)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3344 5369 a
+SDict begin H.S end
+ 3344
+5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(139)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3479 5305 a
+SDict begin H.R end
+ 3479 5305
+a 3479 5367 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end
+ 3479 5367 a Black 1954 5479 a Ft(MatrixRepresentati)q
+(onO)q(nRi)q(ema)q(nn)q(Roc)q(hSp)q(ace)q(P1)2286 5592
+y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2332 5594 a
+SDict begin H.S end
+
+2332 5594 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(94)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2422 5530 a
+SDict begin H.R end
+ 2422 5530
+a 2422 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.94) cvn H.B /ANN pdfmark end
+ 2422 5592 a Black Black Black eop end end
+%%Page: 152 152
+TeXDict begin HPSdict begin 152 151 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.152) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(152)p Black 75 399 a Ft(MatrixTransformati)q(onO)q(nMu)q
+(lti)q(va)q(ria)q(teP)q(oly)q(no)q(mia)q(l)407 511 y
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 453 511 a
+SDict begin H.S end
+ 453
+511 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179
+TeXcolorrgb 588 449 a
+SDict begin H.R end
+ 588 449 a 588 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end
+ 588 511 a Black
+75 624 a FK(maximum)23 b(distance)j(separable,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1176 625 a
+SDict begin H.S end
+ 1176 625 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1311 562 a
+SDict begin H.R end
+ 1311 562 a 1311 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 1311 624 a Black 75
+737 a FK(MDS,)p 0.0236 0.0894 0.6179 TeXcolorrgb 317
+738 a
+SDict begin H.S end
+ 317 738 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x
+FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 675 a
+SDict begin H.R end
+ 407
+675 a 407 737 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 407 737 a Black 75 850 a FK(minimum)d(distance,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 795 851 a
+SDict begin H.S end
+ 795 851 a
+0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179
+TeXcolorrgb 885 788 a
+SDict begin H.R end
+ 885 788 a 885 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 885 850 a Black
+75 963 a Ft(MinimumDistance)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 816 963 a
+SDict begin H.S end
+ 816 963 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(44)p 0.0236 0.0894 0.6179 TeXcolorrgb
+906 901 a
+SDict begin H.R end
+ 906 901 a 906 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.44) cvn H.B /ANN pdfmark end
+ 906 963 a Black 75 1076
+a Ft(MinimumDistanceLeo)q(n)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1001 1077 a
+SDict begin H.S end
+ 1001 1077 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(45)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1091 1014 a
+SDict begin H.R end
+ 1091 1014 a 1091 1076 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.45) cvn H.B /ANN pdfmark end
+ 1091 1076 a Black
+75 1189 a Ft(MinimumDistanceRan)q(dom)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1094 1190 a
+SDict begin H.S end
+ 1094 1190 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(46)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1184 1127 a
+SDict begin H.R end
+ 1184 1127 a 1184 1189 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end
+ 1184 1189 a Black
+75 1302 a Ft(MinimumWeightWords)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 955 1304 a
+SDict begin H.S end
+ 955 1304 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(49)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1045 1240 a
+SDict begin H.R end
+ 1045 1240 a 1045 1302 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.49) cvn H.B /ANN pdfmark end
+ 1045 1302 a Black
+75 1415 a Ft(MoebiusTransformat)q(ion)53 b FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1140 1417 a
+SDict begin H.S end
+ 1140 1417 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(92)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1230 1353 a
+SDict begin H.R end
+ 1230 1353 a 1230 1415 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.92) cvn H.B /ANN pdfmark end
+ 1230 1415 a Black
+75 1528 a Ft(MOLS)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+306 1529 a
+SDict begin H.S end
+ 306 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 441 1466
+a
+SDict begin H.R end
+ 441 1466 a 441 1528 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end
+ 441 1528 a Black 75 1641 a Ft(MOLSCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 1642 a
+SDict begin H.S end
+ 491
+1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(62)p
+0.0236 0.0894 0.6179 TeXcolorrgb 581 1579 a
+SDict begin H.R end
+ 581 1579
+a 581 1641 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.62) cvn H.B /ANN pdfmark end
+ 581 1641 a Black 75 1753 a Ft(MostCommonInList)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 1753 a
+SDict begin H.S end
+ 862
+1753 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179
+TeXcolorrgb 997 1691 a
+SDict begin H.R end
+ 997 1691 a 997 1753 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end
+ 997 1753
+a Black 75 1866 a Ft(MultiplicityInList)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 955 1866 a
+SDict begin H.S end
+ 955 1866 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1090 1804 a
+SDict begin H.R end
+ 1090 1804 a 1090 1866 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end
+ 1090 1866 a Black
+75 1979 a FK(mutually)25 b(orthogonal)i(Latin)c(squares,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1370 1980 a
+SDict begin H.S end
+ 1370 1980
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1505 1917 a
+SDict begin H.R end
+ 1505 1917 a 1505 1979 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end
+ 1505
+1979 a Black 75 2167 a Ft(NearestNeighborDec)q(ode)q(wor)q(ds)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 2168 a
+SDict begin H.S end
+ 1326
+2168 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(56)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1416 2105 a
+SDict begin H.R end
+ 1416 2105
+a 1416 2167 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.56) cvn H.B /ANN pdfmark end
+ 1416 2167 a Black 75 2280 a Ft(NearestNeighborGRS)q(Dec)q
+(ode)q(wor)q(ds)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1465 2281 a
+SDict begin H.S end
+ 1465 2281 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(55)p 0.0236 0.0894 0.6179 TeXcolorrgb 1555 2218
+a
+SDict begin H.R end
+ 1555 2218 a 1555 2280 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.55) cvn H.B /ANN pdfmark end
+ 1555 2280 a Black 75 2393 a
+Ft(NordstromRobinsonC)q(ode)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1094 2394 a
+SDict begin H.S end
+ 1094 2394 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1184 2331 a
+SDict begin H.R end
+ 1184 2331 a 1184 2393 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end
+ 1184 2393 a Black
+75 2506 a FK(norm)h(of)f(a)g(code,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 668 2507 a
+SDict begin H.S end
+ 668 2507 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb
+803 2444 a
+SDict begin H.R end
+ 803 2444 a 803 2506 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end
+ 803 2506 a Black 75
+2619 a FK(normal)h(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+572 2620 a
+SDict begin H.S end
+ 572 2620 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 707 2557
+a
+SDict begin H.R end
+ 707 2557 a 707 2619 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 707 2619 a Black 75 2732 a FK(not)g(=,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 311 2732 a
+SDict begin H.S end
+ 311 2732
+a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179
+TeXcolorrgb 401 2670 a
+SDict begin H.R end
+ 401 2670 a 401 2732 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end
+ 401 2732
+a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 447 2734
+a
+SDict begin H.S end
+ 447 2734 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p
+0.0236 0.0894 0.6179 TeXcolorrgb 537 2670 a
+SDict begin H.R end
+ 537 2670
+a 537 2732 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end
+ 537 2732 a Black 75 2845 a Ft(NrCyclicCodes)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 2846 a
+SDict begin H.S end
+ 723
+2846 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(81)p
+0.0236 0.0894 0.6179 TeXcolorrgb 813 2783 a
+SDict begin H.R end
+ 813 2783
+a 813 2845 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.81) cvn H.B /ANN pdfmark end
+ 813 2845 a Black 75 2958 a Ft(NullCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 2959 a
+SDict begin H.S end
+ 491
+2959 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p
+0.0236 0.0894 0.6179 TeXcolorrgb 581 2896 a
+SDict begin H.R end
+ 581 2896
+a 581 2958 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end
+ 581 2958 a Black 75 3071 a Ft(NullWord)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 3072 a
+SDict begin H.S end
+ 491
+3072 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(25)p
+0.0236 0.0894 0.6179 TeXcolorrgb 581 3009 a
+SDict begin H.R end
+ 581 3009
+a 581 3071 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end
+ 581 3071 a Black 75 3259 a Ft(OnePointAGCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3261 a
+SDict begin H.S end
+ 770
+3261 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(97)p
+0.0236 0.0894 0.6179 TeXcolorrgb 860 3197 a
+SDict begin H.R end
+ 860 3197
+a 860 3259 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.97) cvn H.B /ANN pdfmark end
+ 860 3259 a Black 75 3372 a Ft(OptimalityCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3373 a
+SDict begin H.S end
+ 770
+3373 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(70)p
+0.0236 0.0894 0.6179 TeXcolorrgb 860 3310 a
+SDict begin H.R end
+ 860 3310
+a 860 3372 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.70) cvn H.B /ANN pdfmark end
+ 860 3372 a Black 75 3485 a FK(order)h(of)e(polynomial,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 848 3486 a
+SDict begin H.S end
+ 848 3486
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179
+TeXcolorrgb 938 3423 a
+SDict begin H.R end
+ 938 3423 a 938 3485 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end
+ 938 3485
+a Black 75 3598 a Ft(OuterDistribution)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 3599 a
+SDict begin H.S end
+ 909 3599 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179 TeXcolorrgb
+999 3536 a
+SDict begin H.R end
+ 999 3536 a 999 3598 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end
+ 999 3598 a Black 75
+3786 a FK(P)o(arity)h(check,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+571 3788 a
+SDict begin H.S end
+ 571 3788 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(99)p 0.0236 0.0894 0.6179 TeXcolorrgb 661 3724
+a
+SDict begin H.R end
+ 661 3724 a 661 3786 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.99) cvn H.B /ANN pdfmark end
+ 661 3786 a Black 75 3899 a FK(parity)h(check)g
+(matrix,)p 0.0236 0.0894 0.6179 TeXcolorrgb 827 3900
+a
+SDict begin H.S end
+ 827 3900 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p
+0.0236 0.0894 0.6179 TeXcolorrgb 917 3837 a
+SDict begin H.R end
+ 917 3837
+a 917 3899 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 917 3899 a Black 75 4012 a FK(perfect,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 373 4013 a
+SDict begin H.S end
+ 373 4013
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179
+TeXcolorrgb 508 3950 a
+SDict begin H.R end
+ 508 3950 a 508 4012 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 508 4012
+a Black 75 4125 a FK(perfect)g(code,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 567 4126 a
+SDict begin H.S end
+ 567 4126 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb
+702 4063 a
+SDict begin H.R end
+ 702 4063 a 702 4125 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end
+ 702 4125 a Black 75
+4237 a FK(permutation)h(equi)n(v)n(alent)g(codes,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1186 4238 a
+SDict begin H.S end
+ 1186 4238 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1276 4175 a
+SDict begin H.R end
+ 1276 4175 a 1276 4237 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end
+ 1276 4237 a Black
+75 4350 a FK(PermutationAutomorphismGroup,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1348 4351 a
+SDict begin H.S end
+ 1348 4351 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(37)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1438 4288 a
+SDict begin H.R end
+ 1438 4288 a 1438 4350 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end
+ 1438 4350 a Black
+75 4463 a Ft(PermutationAutomor)q(phi)q(smG)q(rou)q(p)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1419 4464 a
+SDict begin H.S end
+ 1419
+4464 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(37)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1509 4401 a
+SDict begin H.R end
+ 1509 4401
+a 1509 4463 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end
+ 1509 4463 a Black 75 4576 a Ft(PermutationDecode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4577 a
+SDict begin H.S end
+ 909
+4577 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(58)p
+0.0236 0.0894 0.6179 TeXcolorrgb 999 4514 a
+SDict begin H.R end
+ 999 4514
+a 999 4576 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end
+ 999 4576 a Black 75 4689 a Ft(PermutationDecodeN)q(C)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 4691 a
+SDict begin H.S end
+ 1001
+4691 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(59)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1091 4627 a
+SDict begin H.R end
+ 1091 4627
+a 1091 4689 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.59) cvn H.B /ANN pdfmark end
+ 1091 4689 a Black 75 4802 a Ft(PermutedCode)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 4803 a
+SDict begin H.S end
+ 677
+4803 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(101)p
+0.0236 0.0894 0.6179 TeXcolorrgb 812 4740 a
+SDict begin H.R end
+ 812 4740
+a 812 4802 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.101) cvn H.B /ANN pdfmark end
+ 812 4802 a Black 75 4915 a Ft(PermutedCols)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 4916 a
+SDict begin H.S end
+ 677
+4916 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(132)p
+0.0236 0.0894 0.6179 TeXcolorrgb 812 4853 a
+SDict begin H.R end
+ 812 4853
+a 812 4915 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end
+ 812 4915 a Black 75 5028 a Ft(PiecewiseConstantC)q(ode)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1094 5029 a
+SDict begin H.S end
+ 1094
+5029 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(108)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1229 4966 a
+SDict begin H.R end
+ 1229 4966
+a 1229 5028 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.108) cvn H.B /ANN pdfmark end
+ 1229 5028 a Black 75 5141 a FK(point,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 307 5142 a
+SDict begin H.S end
+ 307 5142
+a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(85)p 0.0236 0.0894 0.6179
+TeXcolorrgb 397 5079 a
+SDict begin H.R end
+ 397 5079 a 397 5141 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.85) cvn H.B /ANN pdfmark end
+ 397 5141
+a Black 75 5254 a Ft(PolyCodeword)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 677 5255 a
+SDict begin H.S end
+ 677 5255 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(23)p 0.0236 0.0894 0.6179 TeXcolorrgb
+767 5192 a
+SDict begin H.R end
+ 767 5192 a 767 5254 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.23) cvn H.B /ANN pdfmark end
+ 767 5254 a Black 75
+5367 a FK(primiti)n(v)o(e)e(element,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 761 5368 a
+SDict begin H.S end
+ 761 5368 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb
+851 5305 a
+SDict begin H.R end
+ 851 5305 a 851 5367 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end
+ 851 5367 a Black 75
+5479 a Ft(PrimitivePolynomia)q(lsN)q(r)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1140 5481 a
+SDict begin H.S end
+ 1140 5481 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(139)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1275 5417 a
+SDict begin H.R end
+ 1275 5417 a 1275 5479 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end
+ 1275 5479 a Black
+75 5592 a Ft(PrimitiveUnityRoot)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 955 5593 a
+SDict begin H.S end
+ 955 5593 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1090 5530 a
+SDict begin H.R end
+ 1090 5530 a 1090 5592 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end
+ 1090 5592 a Black
+Black Black 1954 399 a Ft(Print)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2231 401 a
+SDict begin H.S end
+ 2231 401 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(39)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2321 337 a
+SDict begin H.R end
+ 2321 337 a 2321 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.39) cvn H.B /ANN pdfmark end
+ 2321 399 a Black 1954
+511 a Ft(PuncturedCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 512 a
+SDict begin H.S end
+ 2602 512 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(100)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 449 a
+SDict begin H.R end
+ 2737 449 a 2737 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.100) cvn H.B /ANN pdfmark end
+ 2737 511 a Black 1954
+624 a Ft(PutStandardForm)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2695 625 a
+SDict begin H.S end
+ 2695 625 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(131)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2830 562 a
+SDict begin H.R end
+ 2830 562 a 2830 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.131) cvn H.B /ANN pdfmark end
+ 2830 624 a Black 1954
+820 a Ft(QQRCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2324 822 a
+SDict begin H.S end
+ 2324 822 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 2414 758
+a
+SDict begin H.R end
+ 2414 758 a 2414 820 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end
+ 2414 820 a Black 1954 933 a Ft(QQRCodeNC)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2417 935 a
+SDict begin H.S end
+ 2417
+935 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2507 871 a
+SDict begin H.R end
+ 2507 871 a 2507 933 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end
+ 2507 933
+a Black 1954 1046 a Ft(QRCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2278 1047 a
+SDict begin H.S end
+ 2278 1047 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(78)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2368 984 a
+SDict begin H.R end
+ 2368 984 a 2368 1046 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.78) cvn H.B /ANN pdfmark end
+ 2368 1046 a Black 1954
+1242 a Ft(RandomCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2463 1243 a
+SDict begin H.S end
+ 2463 1243 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 2553 1180
+a
+SDict begin H.R end
+ 2553 1180 a 2553 1242 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end
+ 2553 1242 a Black 1954 1355
+a Ft(RandomLinearCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2741 1357 a
+SDict begin H.S end
+ 2741 1357 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(69)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 1293
+a
+SDict begin H.R end
+ 2831 1293 a 2831 1355 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.69) cvn H.B /ANN pdfmark end
+ 2831 1355 a Black 1954 1468
+a Ft(RandomPrimitivePol)q(yno)q(mia)q(l)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 3159 1469 a
+SDict begin H.S end
+ 3159 1469 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(17)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3249 1406 a
+SDict begin H.R end
+ 3249 1406 a 3249 1468 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.17) cvn H.B /ANN pdfmark end
+ 3249 1468 a Black
+1954 1581 a FK(reciprocal)i(polynomial,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2800 1582 a
+SDict begin H.S end
+ 2800 1582 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(140)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2935 1519 a
+SDict begin H.R end
+ 2935 1519 a 2935 1581 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end
+ 2935 1581 a Black
+1954 1694 a Ft(ReciprocalPolynomi)q(al)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2927 1695 a
+SDict begin H.S end
+ 2927 1695 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(140)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3062 1632 a
+SDict begin H.R end
+ 3062 1632 a 3062 1694 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end
+ 3062 1694 a Black
+1954 1807 a Ft(Redundancy)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2463 1807 a
+SDict begin H.S end
+ 2463 1807 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(44)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2553 1745 a
+SDict begin H.R end
+ 2553 1745 a 2553 1807 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.44) cvn H.B /ANN pdfmark end
+ 2553 1807 a Black
+1954 1919 a Ft(ReedMullerCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 1920 a
+SDict begin H.S end
+ 2649 1920 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 1857 a
+SDict begin H.R end
+ 2739 1857 a 2739 1919 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end
+ 2739 1919 a Black
+1954 2032 a Ft(ReedSolomonCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2695 2033 a
+SDict begin H.S end
+ 2695 2033 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(78)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2785 1970 a
+SDict begin H.R end
+ 2785 1970 a 2785 2032 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.78) cvn H.B /ANN pdfmark end
+ 2785 2032 a Black
+1954 2145 a Ft(RemovedElementsCod)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2880 2146 a
+SDict begin H.S end
+ 2880 2146 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(102)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3015 2083 a
+SDict begin H.R end
+ 3015 2083 a 3015 2145 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.102) cvn H.B /ANN pdfmark end
+ 3015 2145 a Black
+1954 2258 a Ft(RepetitionCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 2259 a
+SDict begin H.S end
+ 2649 2259 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 2196 a
+SDict begin H.R end
+ 2739 2196 a 2739 2258 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end
+ 2739 2258 a Black
+1954 2371 a Ft(ResidueCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2509 2372 a
+SDict begin H.S end
+ 2509 2372 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(105)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2644 2309 a
+SDict begin H.R end
+ 2644 2309 a 2644 2371 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end
+ 2644 2371 a Black
+1954 2484 a Ft(RiemannRochSpaceBa)q(sis)q(Fun)q(cti)q(on)q(P1)53
+b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3483 2486 a
+SDict begin H.S end
+
+3483 2486 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(90)p
+0.0236 0.0894 0.6179 TeXcolorrgb 3573 2422 a
+SDict begin H.R end
+ 3573 2422
+a 3573 2484 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.90) cvn H.B /ANN pdfmark end
+ 3573 2484 a Black 1954 2597 a Ft(RiemannRochSpaceBa)q
+(sis)q(P1)g FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3112
+2599 a
+SDict begin H.S end
+ 3112 2599 a 0.0236 0.0894 0.6179 TeXcolorrgb -2
+x FK(91)p 0.0236 0.0894 0.6179 TeXcolorrgb 3202 2535
+a
+SDict begin H.R end
+ 3202 2535 a 3202 2597 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.91) cvn H.B /ANN pdfmark end
+ 3202 2597 a Black 1954 2710
+a Ft(RootsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2417 2711 a
+SDict begin H.S end
+ 2417 2711 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(76)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 2648
+a
+SDict begin H.R end
+ 2507 2648 a 2507 2710 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.76) cvn H.B /ANN pdfmark end
+ 2507 2710 a Black 1954 2823
+a Ft(RootsOfCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2509 2824 a
+SDict begin H.S end
+ 2509 2824 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb 2599 2761
+a
+SDict begin H.R end
+ 2599 2761 a 2599 2823 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end
+ 2599 2823 a Black 1954 2936
+a Ft(RotateList)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2463 2936 a
+SDict begin H.S end
+ 2463 2936 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb 2598 2874 a
+SDict begin H.R end
+
+2598 2874 a 2598 2936 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end
+ 2598 2936 a Black 1954 3132 a
+FK(self)24 b(complementary)i(code,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2913 3133 a
+SDict begin H.S end
+ 2913 3133 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb
+3003 3070 a
+SDict begin H.R end
+ 3003 3070 a 3003 3132 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 3003 3132 a Black
+1954 3245 a FK(self-dual,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2318 3246 a
+SDict begin H.S end
+ 2318 3246 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb 2453 3183
+a
+SDict begin H.R end
+ 2453 3183 a 2453 3245 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end
+ 2453 3245 a Black 1954 3357
+a FK(self-orthogonal,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2555 3358 a
+SDict begin H.S end
+ 2555 3358 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 2645 3295
+a
+SDict begin H.R end
+ 2645 3295 a 2645 3357 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end
+ 2645 3357 a Black 1954 3470
+a Ft(SetCoveringRadius)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2788 3472 a
+SDict begin H.S end
+ 2788 3472 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(49)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2878 3408 a
+SDict begin H.R end
+ 2878 3408 a 2878 3470 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.49) cvn H.B /ANN pdfmark end
+ 2878 3470 a Black
+1954 3583 a Ft(ShortenedCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 3584 a
+SDict begin H.S end
+ 2602 3584 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(103)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 3521 a
+SDict begin H.R end
+ 2737 3521 a 2737 3583 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.103) cvn H.B /ANN pdfmark end
+ 2737 3583 a Black
+1954 3696 a Ft(Size)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2185 3697 a
+SDict begin H.S end
+ 2185 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb 2275 3634
+a
+SDict begin H.R end
+ 2275 3634 a 2275 3696 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end
+ 2275 3696 a Black 1954 3809
+a FK(size,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2141 3810
+a
+SDict begin H.S end
+ 2141 3810 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p
+0.0236 0.0894 0.6179 TeXcolorrgb 2231 3747 a
+SDict begin H.R end
+ 2231 3747
+a 2231 3809 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end
+ 2231 3809 a Black 1954 3922 a Ft(SolveLinearSystem)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 3922 a
+SDict begin H.S end
+ 2788
+3922 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2923 3860 a
+SDict begin H.R end
+ 2923 3860 a 2923 3922 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end
+ 2923
+3922 a Black 1954 4035 a Ft(SphereContent)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 4036 a
+SDict begin H.S end
+ 2602 4036 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2737 3973 a
+SDict begin H.R end
+ 2737 3973 a 2737 4035 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end
+ 2737 4035 a Black
+1954 4148 a Ft(SrivastavaCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2649 4149 a
+SDict begin H.S end
+ 2649 4149 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2739 4086 a
+SDict begin H.R end
+ 2739 4086 a 2739 4148 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end
+ 2739 4148 a Black
+1954 4261 a FK(standard)g(form,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2507 4262 a
+SDict begin H.S end
+ 2507 4262 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(131)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2642 4199 a
+SDict begin H.R end
+ 2642 4199 a 2642 4261 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.131) cvn H.B /ANN pdfmark end
+ 2642 4261 a Black
+1954 4374 a Ft(StandardArray)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2602 4375 a
+SDict begin H.S end
+ 2602 4375 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(58)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2692 4312 a
+SDict begin H.R end
+ 2692 4312 a 2692 4374 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end
+ 2692 4374 a Black
+1954 4487 a Ft(StandardFormCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 2741 4488 a
+SDict begin H.S end
+ 2741 4488 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(108)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2876 4425 a
+SDict begin H.R end
+ 2876 4425 a 2876 4487 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.108) cvn H.B /ANN pdfmark end
+ 2876 4487 a Black
+1954 4599 a FK(strength,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2292 4600 a
+SDict begin H.S end
+ 2292 4600 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 2427 4537
+a
+SDict begin H.R end
+ 2427 4537 a 2427 4599 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 2427 4599 a Black 1954 4712
+a Ft(String)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2278 4713 a
+SDict begin H.S end
+ 2278 4713 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(40)p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 4650
+a
+SDict begin H.R end
+ 2368 4650 a 2368 4712 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.40) cvn H.B /ANN pdfmark end
+ 2368 4712 a Black 1954 4825
+a Ft(Support)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2324 4826 a
+SDict begin H.S end
+ 2324 4826 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(25)p 0.0236 0.0894 0.6179 TeXcolorrgb 2414 4763
+a
+SDict begin H.R end
+ 2414 4763 a 2414 4825 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end
+ 2414 4825 a Black 1954 4938
+a FK(support,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2272
+4939 a
+SDict begin H.S end
+ 2272 4939 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb 2362 4876
+a
+SDict begin H.R end
+ 2362 4876 a 2362 4938 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end
+ 2362 4938 a Black 1954 5051
+a Ft(SylvesterMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2556 5053 a
+SDict begin H.S end
+ 2556 5053 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 2691 4989
+a
+SDict begin H.R end
+ 2691 4989 a 2691 5051 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end
+ 2691 5051 a Black 1954 5164
+a Ft(Syndrome)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2370 5165 a
+SDict begin H.S end
+ 2370 5165 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 5102
+a
+SDict begin H.R end
+ 2460 5102 a 2460 5164 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end
+ 2460 5164 a Black 1954 5277
+a FK(syndrome)f(table,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2557 5278 a
+SDict begin H.S end
+ 2557 5278 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2647 5215
+a
+SDict begin H.R end
+ 2647 5215 a 2647 5277 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end
+ 2647 5277 a Black 1954 5390
+a Ft(SyndromeTable)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2602 5391 a
+SDict begin H.S end
+ 2602 5391 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2692 5328
+a
+SDict begin H.R end
+ 2692 5328 a 2692 5390 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end
+ 2692 5390 a Black 1954 5586
+a Ft(TernaryGolayCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+2741 5587 a
+SDict begin H.S end
+ 2741 5587 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(74)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 5524
+a
+SDict begin H.R end
+ 2831 5524 a 2831 5586 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end
+ 2831 5586 a Black Black Black
+eop end end
+%%Page: 153 153
+TeXDict begin HPSdict begin 153 152 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a Black
+0 TeXcolorgray 75 100 a
+SDict begin H.S end
+ 75 100 a 0 TeXcolorgray 0 TeXcolorgray
+75 100 a
+SDict begin H.R end
+ 75 100 a 75 100 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.153) cvn H.B /DEST pdfmark end
+ 75 100 a Black 1662 w FE(GU)n(A)l(V)-5
+b(A)1678 b FK(153)p Black 75 399 a Ft(TombakCode)p FK(,)p
+0.0236 0.0894 0.6179 TeXcolorrgb 584 400 a
+SDict begin H.S end
+ 584 400 a
+0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179
+TeXcolorrgb 674 337 a
+SDict begin H.R end
+ 674 337 a 674 399 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end
+ 674 399 a Black
+75 511 a Ft(ToricCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+538 512 a
+SDict begin H.S end
+ 538 512 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 628 449
+a
+SDict begin H.R end
+ 628 449 a 628 511 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 628 511 a Black 75 624 a Ft(ToricPoints)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 625 a
+SDict begin H.S end
+ 630
+625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179
+TeXcolorrgb 720 562 a
+SDict begin H.R end
+ 720 562 a 720 624 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end
+ 720 624 a Black
+75 737 a Ft(TraceCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+538 738 a
+SDict begin H.S end
+ 538 738 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb 673 675
+a
+SDict begin H.R end
+ 673 675 a 673 737 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end
+ 673 737 a Black 75 850 a Ft(TreatAsPoly)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 850 a
+SDict begin H.S end
+ 630
+850 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(24)p 0.0236 0.0894 0.6179
+TeXcolorrgb 720 788 a
+SDict begin H.R end
+ 720 788 a 720 850 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.24) cvn H.B /ANN pdfmark end
+ 720 850 a Black
+75 963 a Ft(TreatAsVector)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 723 963 a
+SDict begin H.S end
+ 723 963 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(24)p 0.0236 0.0894 0.6179 TeXcolorrgb
+813 901 a
+SDict begin H.R end
+ 813 901 a 813 963 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.24) cvn H.B /ANN pdfmark end
+ 813 963 a Black 75 1159
+a Ft(UnionCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+538 1159 a
+SDict begin H.S end
+ 538 1159 a 0.0236 0.0894 0.6179 TeXcolorrgb
+FK(111)p 0.0236 0.0894 0.6179 TeXcolorrgb 673 1097 a
+SDict begin H.R end
+
+673 1097 a 673 1159 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end
+ 673 1159 a Black 75 1272 a Ft(UpperBound)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 1273 a
+SDict begin H.S end
+ 584
+1273 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p
+0.0236 0.0894 0.6179 TeXcolorrgb 719 1210 a
+SDict begin H.R end
+ 719 1210
+a 719 1272 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end
+ 719 1272 a Black 75 1385 a Ft(UpperBoundCovering)q(Rad)q
+(ius)q(Cyc)q(li)q(cCo)q(de)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1697 1386 a
+SDict begin H.S end
+ 1697 1386 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(128)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1832 1323 a
+SDict begin H.R end
+ 1832 1323 a 1832 1385 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.128) cvn H.B /ANN pdfmark end
+ 1832 1385 a Black
+75 1498 a Ft(UpperBoundCovering)q(Rad)q(ius)q(Del)q(sa)q(rte)q
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 1499 a
+SDict begin H.S end
+ 1604
+1499 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1739 1436 a
+SDict begin H.R end
+ 1739 1436
+a 1739 1498 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 1739 1498 a Black 75 1611 a Ft(UpperBoundCovering)q(Rad)q
+(ius)q(Gri)q(es)q(mer)q(Lik)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 407 1725 a
+SDict begin H.S end
+ 407 1725 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb
+542 1662 a
+SDict begin H.R end
+ 542 1662 a 542 1724 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 542 1724 a Black 75
+1836 a Ft(UpperBoundCovering)q(Rad)q(ius)q(Red)q(un)q(dan)q(cy)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1697 1837 a
+SDict begin H.S end
+ 1697
+1837 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(126)p
+0.0236 0.0894 0.6179 TeXcolorrgb 1832 1774 a
+SDict begin H.R end
+ 1832 1774
+a 1832 1836 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.126) cvn H.B /ANN pdfmark end
+ 1832 1836 a Black 75 1949 a Ft(UpperBoundCovering)q(Rad)q
+(ius)q(Str)q(en)q(gth)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1604 1950 a
+SDict begin H.S end
+ 1604 1950 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 1739 1887
+a
+SDict begin H.R end
+ 1739 1887 a 1739 1949 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end
+ 1739 1949 a Black 75 2062 a
+Ft(UpperBoundElias)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+816 2063 a
+SDict begin H.S end
+ 816 2063 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 951 2000
+a
+SDict begin H.R end
+ 951 2000 a 951 2062 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end
+ 951 2062 a Black 75 2175 a Ft
+(UpperBoundGriesmer)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+955 2176 a
+SDict begin H.S end
+ 955 2176 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090 2113
+a
+SDict begin H.R end
+ 1090 2113 a 1090 2175 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end
+ 1090 2175 a Black 75 2288 a
+Ft(UpperBoundHamming)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+909 2289 a
+SDict begin H.S end
+ 909 2289 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 2226
+a
+SDict begin H.R end
+ 1044 2226 a 1044 2288 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 1044 2288 a Black 75 2401 a
+Ft(UpperBoundJohnson)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+909 2402 a
+SDict begin H.S end
+ 909 2402 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 2339
+a
+SDict begin H.R end
+ 1044 2339 a 1044 2401 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 1044 2401 a Black 75 2514 a
+Ft(UpperBoundMinimumD)q(ist)q(anc)q(e)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1280 2516 a
+SDict begin H.S end
+ 1280 2516 a 0.0236 0.0894 0.6179
+TeXcolorrgb -2 x FK(119)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1415 2452 a
+SDict begin H.R end
+ 1415 2452 a 1415 2514 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end
+ 1415 2514 a Black
+75 2627 a Ft(UpperBoundPlotkin)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 909 2628 a
+SDict begin H.S end
+ 909 2628 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1044 2565 a
+SDict begin H.R end
+ 1044 2565 a 1044 2627 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end
+ 1044 2627 a Black
+75 2740 a Ft(UpperBoundSingleto)q(n)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1001 2741 a
+SDict begin H.S end
+ 1001 2741 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1136 2678 a
+SDict begin H.R end
+ 1136 2678 a 1136 2740 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end
+ 1136 2740 a Black
+75 2853 a Ft(UUVCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+445 2855 a
+SDict begin H.S end
+ 445 2855 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-2 x FK(109)p 0.0236 0.0894 0.6179 TeXcolorrgb 580 2791
+a
+SDict begin H.R end
+ 580 2791 a 580 2853 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.109) cvn H.B /ANN pdfmark end
+ 580 2853 a Black 75 3049 a Ft(VandermondeMat)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3050 a
+SDict begin H.S end
+ 770
+3050 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(130)p
+0.0236 0.0894 0.6179 TeXcolorrgb 905 2987 a
+SDict begin H.R end
+ 905 2987
+a 905 3049 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end
+ 905 3049 a Black 75 3161 a Ft(VectorCodeword)p
+FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3162 a
+SDict begin H.S end
+ 770
+3162 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(23)p
+0.0236 0.0894 0.6179 TeXcolorrgb 860 3099 a
+SDict begin H.R end
+ 860 3099
+a 860 3161 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.23) cvn H.B /ANN pdfmark end
+ 860 3161 a Black 75 3274 a Ft(VerticalConversion)q(Fie)q
+(ldM)q(at)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326
+3275 a
+SDict begin H.S end
+ 1326 3275 a 0.0236 0.0894 0.6179 TeXcolorrgb -1
+x FK(132)p 0.0236 0.0894 0.6179 TeXcolorrgb 1461 3212
+a
+SDict begin H.R end
+ 1461 3212 a 1461 3274 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end
+ 1461 3274 a Black 75 3470 a
+FK(weight)24 b(enumerator)i(polynomial,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 1242 3471 a
+SDict begin H.S end
+ 1242 3471 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1377 3408 a
+SDict begin H.R end
+ 1377 3408 a 1377 3470 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end
+ 1377 3470 a Black
+75 3583 a Ft(WeightCodeword)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 770 3584 a
+SDict begin H.S end
+ 770 3584 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(26)p 0.0236 0.0894 0.6179 TeXcolorrgb
+860 3521 a
+SDict begin H.R end
+ 860 3521 a 860 3583 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.26) cvn H.B /ANN pdfmark end
+ 860 3583 a Black 75
+3696 a Ft(WeightDistribution)q FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 955 3697 a
+SDict begin H.S end
+ 955 3697 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb
+1045 3634 a
+SDict begin H.R end
+ 1045 3634 a 1045 3696 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end
+ 1045 3696 a Black
+75 3809 a Ft(WeightHistogram)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 816 3809 a
+SDict begin H.S end
+ 816 3809 a 0.0236 0.0894 0.6179
+TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179 TeXcolorrgb
+951 3747 a
+SDict begin H.R end
+ 951 3747 a 951 3809 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end
+ 951 3809 a Black 75
+3922 a Ft(WeightVecFFE)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 677 3923 a
+SDict begin H.S end
+ 677 3923 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb
+767 3860 a
+SDict begin H.R end
+ 767 3860 a 767 3922 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end
+ 767 3922 a Black 75
+4035 a Ft(WholeSpaceCode)p FK(,)p 0.0236 0.0894 0.6179
+TeXcolorrgb 770 4036 a
+SDict begin H.S end
+ 770 4036 a 0.0236 0.0894 0.6179
+TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb
+860 3973 a
+SDict begin H.R end
+ 860 3973 a 860 4035 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end
+ 860 4035 a Black 75
+4148 a Ft(WordLength)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb
+584 4149 a
+SDict begin H.S end
+ 584 4149 a 0.0236 0.0894 0.6179 TeXcolorrgb
+-1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 4086
+a
+SDict begin H.R end
+ 674 4086 a 674 4148 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end
+ 674 4148 a Black Black Black
+Black Black eop end end
+%%Trailer
+
+end
\ No newline at end of file
diff --git a/doc/chap0.html b/doc/chap0.html
new file mode 100644
index 0000000..ccfba1e
--- /dev/null
+++ b/doc/chap0.html
@@ -0,0 +1,538 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Contents</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Next Chapter</a>   </div>
+
+<p><a id="X7D2C85EC87DD46E5" name="X7D2C85EC87DD46E5"></a></p>
+<div class="pcenter">
+
+<h1><strong class="pkg">GUAVA</strong></h1>
+
+
+<h2>A <strong class="pkg">GAP</strong>4 Package for computing with error-correcting codes  </h2>
+
+<p>Version 3.5</p>
+
+<p>April 25, 2008</p>
+
+</div>
+<p><b>
+Jasper Cramwinckel
+</b>
+</p><p><b>
+Erik Roijackers
+</b>
+</p><p><b>
+Reinald Baart
+</b>
+</p><p><b>Eric Minkes, Lea Ruscio
+</b>
+</p><p><b>
+Robert L Miller,  
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:rlm at robertlmiller.com">rlm at robertlmiller.com</a></span>
+</p><p><b>
+Tom Boothby
+
+</b>
+</p><p><b>
+Cen (``CJ'') Tjhai                
+
+ 
+
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:cen.tjhai at plymouth.ac.uk">cen.tjhai at plymouth.ac.uk</a></span>
+<br />WWW: <span class="URL"><a href="http://www.plymouth.ac.uk/staff/ctjhai">http://www.plymouth.ac.uk/staff/ctjhai</a></span>
+</p><p><b>
+	    David Joyner (Maintainer),                  
+
+ 
+
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:wdjoyner at gmail.com">wdjoyner at gmail.com</a></span>
+<br />WWW: <span class="URL"><a href="http://sage.math.washington.edu/home/wdj/guava/">http://sage.math.washington.edu/home/wdj/guava/</a></span>
+</p>
+
+<p><a id="X81488B807F2A1CF1" name="X81488B807F2A1CF1"></a></p>
+<h3>Copyright</h3>
+<p>© The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon © 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby</p>
+
+<p><strong class="pkg">GUAVA</strong> is released under the GNU General Public License (GPL). This file is part of <strong class="pkg">GUAVA</strong>, though as documentation it is released under the GNU Free Documentation License (see <span class="URL"><a href="http://www.gnu.org/licenses/licenses.html#FDL">http://www.gnu.org/licenses/licenses.html#FDL</a></span>).</p>
+
+<p><strong class="pkg">GUAVA</strong> is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</p>
+
+<p><strong class="pkg">GUAVA</strong> is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
+
+<p>You should have received a copy of the GNU General Public License along with <strong class="pkg">GUAVA</strong>; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
+
+<p>For more details, see <span class="URL"><a href="http://www.fsf.org/licenses/gpl.html">http://www.fsf.org/licenses/gpl.html</a></span>.</p>
+
+<p>For many years <strong class="pkg">GUAVA</strong> has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL [...]
+
+<p><a id="X82A988D47DFAFCFA" name="X82A988D47DFAFCFA"></a></p>
+<h3>Acknowledgements</h3>
+<p><strong class="pkg">GUAVA</strong> was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology.</p>
+
+<p>JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision.</p>
+
+<p>The GAP 4 version of <strong class="pkg">GUAVA</strong> (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the <strong class="pkg">GUAVA</strong> directory, also available at <span class="URL"><a href="http://s [...]
+
+<p>This documentation was prepared with the <strong class="pkg">GAPDoc</strong> package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to <strong class="pkg">GAPDoc</strong>'s XML was done by David Joyner in 2004.</p>
+
+<p>Please send bug reports, suggestions and other comments about <strong class="pkg">GUAVA</strong> to <span class="URL"><a href="mailto:support at gap-system.org">support at gap-system.org</a></span>. Currently known bugs and suggested <strong class="pkg">GUAVA</strong> projects are listed on the bugs and projects web page <span class="URL"><a href="http://sage.math.washington.edu/home/wdj/guava/guava2do.html">http://sage.math.washington.edu/home/wdj/guava/guava2do.html</a></span>. Older rele [...]
+
+<p><em>Contributors</em>: Other than the authors listed on the title page, the following people have contributed code to the <strong class="pkg">GUAVA</strong> project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (``Clipper") Lennon, Jason McGowan, Shuhong Gao, Greg Gamble.</p>
+
+<p>For documentation on Leon's programs, see the src/leon/doc subdirectory of <strong class="pkg">GUAVA</strong>.</p>
+
+<p><a id="X8537FEB07AF2BEC8" name="X8537FEB07AF2BEC8"></a></p>
+
+<div class="contents">
+<h3>Contents</h3>
+
+<div class="ContChap"><a href="chap1.html#X7DFB63A97E67C0A1">1. <span class="Heading">Introduction</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X787D826579603719">1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X7E2CB7DF83B514A8">1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X80EAA631863F805B">1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></a>
+</div>
+</div>
+<div class="ContChap"><a href="chap2.html#X7A93308C82637F4F">2. <span class="Heading">Coding theory functions in GAP</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X80F192497C008691">2.1 <span class="Heading">
+Distance functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X82E5987E81487D18">2.1-1 AClosestVectorCombinationsMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X870DE258833C5AA0">2.1-2 AClosestVectorComb..MatFFEVecFFECoords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85135CEB86E61D49">2.1-3 DistancesDistributionMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7F2F630984A9D3D6">2.1-4 DistancesDistributionVecFFEsVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5 WeightVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85AA5C6587559C1C">2.1-6 DistanceVecFFE</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X87C3D1B984960984">2.2 <span class="Heading">
+Other functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C2425A786F09054">2.2-1 ConwayPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7ECC593583E68A6C">2.2-2 RandomPrimitivePolynomial</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap3.html#X836BAA9A7EBD08B1">3. <span class="Heading">Codewords</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81B73ABB87DA8E49">3.1 <span class="Heading">Construction of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B9E353D852851AA">3.1-1 Codeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2 CodewordNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F25479781E6E109">3.1-3 IsCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X8253374284B475B6">3.2 <span class="Heading">Comparisons of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8123456781234567">3.2-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7ADE7E95867A14E1">3.3 <span class="Heading">Arithmetic Operations for Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X81B1391281B13912">3.3-2 -</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-3 +</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7BBA5DCD7A8BD60D">3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X87C8B0B178496F6A">3.4-1 VectorCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X822465E884D0F484">3.4-2 PolyCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81D3230A797FE6E3">3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E3E174B7954AA6B">3.5-1 TreatAsVector</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7A6828148490BD2E">3.5-2 TreatAsPoly</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X805BF7147C68CACD">3.6 <span class="Heading">
+Other Codeword Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8000B6597EF0282F">3.6-1 NullWord</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7CDA1B547D55E6FB">3.6-2 DistanceCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B689C0284AC4296">3.6-3 Support</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7AD61C237D8D3849">3.6-4 WeightCodeword</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap4.html#X85FDDF0B7B7D87FB">4. <span class="Heading">Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7ECE60E1873B49A6">4.1 <span class="Heading">Comparisons of Codes</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.1-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X832DA51986A3882C">4.2 <span class="Heading">
+Operations for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F2703417F270341">4.2-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-2 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-3 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8744BA5E78BCF3F9">4.2-4 InformationWord</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X864091AA7D4AFE86">4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1 in</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79CA175481F8105F">4.3-2 IsSubset</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F71186281DEA83A">4.3-3 IsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B24748A7CE8D4B9">4.3-4 IsLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X850C23D07C9A9B19">4.3-5 IsCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85E3BD26856424F7">4.3-6 IsPerfectCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X789380D28018EC3F">4.3-7 IsMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80166D8D837FEB58">4.3-8 IsSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B2A0CC481D2366F">4.3-9 IsSelfOrthogonalCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8358D43981EBE970">4.3-10 IsDoublyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79ACAEF5865414A0">4.3-11 IsSinglyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CE150ED7C3DC455">4.3-12 IsEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13 IsSelfComplementaryCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFD3844859B20BF">4.3-14 IsAffineCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X861D32FB81EF0D77">4.3-15 IsAlmostAffineCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X86442DCD7A0B2146">4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X843034687D9C75B0">4.4-1 IsEquivalent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X874DED8E86BC180B">4.4-2 CodeIsomorphism</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87677B0787B4461A">4.4-3 AutomorphismGroup</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79F3261F86C29F6D">4.4-4 PermutationAutomorphismGroup</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X866EB39483DDAE72">4.5 <span class="Heading">
+Domain Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X808A4061809A6E67">4.5-1 IsFinite</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X858ADA3B7A684421">4.5-2 Size</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X86F070E0807DC34E">4.5-3 LeftActingDomain</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E6926C6850E7C4E">4.5-4 Dimension</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X856D927378C33548">4.5-5 AsSSortedList</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X823827927D6A8235">4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFA64D97A1F39A3">4.6-1 Print</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81FB5BE27903EC32">4.6-2 String</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83A5C59278E13248">4.6-3 Display</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CD08C8C780543C4">4.6-4 DisplayBoundsInfo</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D0F48B685A3ECDD">4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X817224657C9829C4">4.7-1 GeneratorMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85D4B26E7FB38D57">4.7-2 CheckMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X78E33C3A843B0261">4.7-3 GeneratorPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7C45AA317BB1195F">4.7-4 CheckPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F4CB9DB7CD97178">4.7-5 RootsOfCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X8170B52D7C154247">4.8 <span class="Heading">
+Parameters of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A36C3C67B0062E8">4.8-1 WordLength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E33FD56792DBF3D">4.8-2 Redundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B31613D8538BD29">4.8-3 MinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X813F226F855590EE">4.8-4 MinimumDistanceLeon</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X84EDF67B86B4154C">4.8-5 MinimumWeight</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X823B9A797EE42F6D">4.8-6 DecreaseMinimumDistanceUpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A679B0A7816B030">4.8-7 MinimumDistanceRandom</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A195E317D2AB7CE">4.8-8 CoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81004B007EC5DF58">4.8-9 SetCoveringRadius</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X806384B4815EFF2E">4.9 <span class="Heading">
+Distributions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AEE64467FB1E0B9">4.9-1 MinimumWeightWords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8728BCC9842A6E5D">4.9-2 WeightDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X871FD301820717A4">4.9-3 InnerDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87AD54F87C5EE77E">4.9-4 DistancesDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8495870687195324">4.9-5 OuterDistribution</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D9A39BF801948C8">4.10 <span class="Heading">
+Decoding Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A42FF7D87FC34AC">4.10-1 Decode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D870C9387C47D9F">4.10-2 Decodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D48DE2A84474C6A">4.10-3 GeneralizedReedSolomonDecoderGao</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CFF98D483502053">4.10-4 GeneralizedReedSolomonListDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80E17FA27DCAB676">4.10-5 BitFlipDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B88DEB37F28404A">4.10-6 NearestNeighborGRSDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X825E35757D778787">4.10-7 NearestNeighborDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D02E0FE8735D3E6">4.10-8 Syndrome</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B9E71987E4294A7">4.10-9 SyndromeTable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8642D0BD789DA9B5">4.10-10 StandardArray</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83231E717CCB0247">4.10-11 PermutationDecode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85B692177E2A745D">4.10-12 PermutationDecodeNC</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap5.html#X87EB64ED831CCE99">5. <span class="Heading">Generating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X86A92CB184CBD3C7">5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81AACBDD86E89D7D">5.1-1 ElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X86755AAC83A0AF4B">5.1-2 HadamardCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8122BA417F705997">5.1-3 ConferenceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81B7EE4279398F67">5.1-4 MOLSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D87DD6380B2CE69">5.1-5 RandomCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816353397F25B62E">5.1-6 NordstromRobinsonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7880D34485C60BAF">5.1-7 GreedyCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C1B374583AFB923">5.1-8 LexiCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7A11F29F7BBF45BB">5.2 <span class="Heading">
+Generating Linear Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83F400A681CFC0D6">5.2-1 GeneratorMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7CDDDFE47A10A008">5.2-2 CheckMatCodeMutable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X848D3F7B805DEB66">5.2-3 CheckMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7DECB0A57C798583">5.2-4 HammingCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X801C88D578DA6ACA">5.2-5 ReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X851592C7811D3D2A">5.2-6 AlternantCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE808BB7D1E487A">5.2-7 GoppaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F9C0A727EE075B7">5.2-8 GeneralizedSrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7A38EB3178961F3E">5.2-9 SrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87F7CB8B7A8BE624">5.2-10 CordaroWagnerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865534267C8E902A">5.2-11 FerreroDesignCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BCA10CE8660357F">5.2-12 RandomLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X839CFE4C7A567D4D">5.2-13 OptimalityCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X871508567CB34D96">5.2-14 BestKnownLinearCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X858721967BE44000">5.3 <span class="Heading">
+Gabidulin Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79BE5D497CB2E59E">5.3-1 GabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X873950F67D4A9184">5.3-2 EnlargedGabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F5BE77B7F343182">5.3-3 DavydovCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X845B4DBE83288D2D">5.3-4 TombakCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D6583347C0D4292">5.3-5 EnlargedTombakCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X81F6E4A785F368B0">5.4 <span class="Heading">
+Golay Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80ED89C079CD0D09">5.4-1 BinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X84520C7983538806">5.4-2 ExtendedBinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E0CCCD7866ADB94">5.4-3 TernaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81088A66816BCAE4">5.4-4 ExtendedTernaryGolayCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X8366CC3685F0BC85">5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X853D34A5796CEB73">5.5-1 GeneratorPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82440B78845F7F6E">5.5-2 CheckPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X818F0E6583E01D4B">5.5-3 RootsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C6BB07C87853C00">5.5-4 BCHCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X838F3CB3872CEF95">5.5-5 ReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8730B90A862A3B3E">5.5-6 ExtendedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X825F42F68179D2AB">5.5-7 QRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8764ABCF854C695E">5.5-8 QQRCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9 QQRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10 FireCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BC245E37EB7B23F">5.5-11 WholeSpaceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B4EF2017B2C61AD">5.5-12 NullCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83C5F8FE7827EAA7">5.5-13 RepetitionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82FA9F65854D98A6">5.5-14 CyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8263CE4A790D294A">5.5-15 NrCyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79826B16785E8BD3">5.5-16 QuasiCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BFEDA52835A601D">5.5-17 CyclicMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F40AF3B81C252DC">5.5-18 FourNegacirculantSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87137A257E761291">5.5-19 FourNegacirculantSelfDualCodeNC</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X850A28C579137220">5.6 <span class="Heading">
+Evaluation Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X78E078567D19D433">5.6-1 EvaluationCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X810AB3DB844FFCE9">5.6-2 GeneralizedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85B8699680B9D786">5.6-3 GeneralizedReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE68B58872D7E82">5.6-4 ToricPoints</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B24BE418010F596">5.6-5 ToricCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7AE2B2CD7C647990">5.7 <span class="Heading">
+Algebraic geometric codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X802DD9FB79A9ACA7">5.7-1 AffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857EFE567C05C981">5.7-2 AffinePointsOnCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857E36ED814A40B8">5.7-3 GenusCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8572A3037DA66F88">5.7-4 GOrbitPoint </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79742B7183051D99">5.7-5 DivisorOnAffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8626E2B57D01F2DC">5.7-6 DivisorAddition </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865FE28D828C1EAD">5.7-7 DivisorDegree </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X789DC358819A8F54">5.7-8 DivisorNegate </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8688C0E187B5C7DB">5.7-9 DivisorIsZero </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816A07997D9A7075">5.7-10 DivisorsEqual </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857B89847A649A26">5.7-11 DivisorGCD </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82231CF08073695F">5.7-12 DivisorLCM </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79C878697F99A10F">5.7-13 RiemannRochSpaceBasisFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X856DDA207EDDF256">5.7-14 DivisorOfRationalFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X878970A17E580224">5.7-15 RiemannRochSpaceBasisP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X807C52E67A440DEB">5.7-16 MoebiusTransformation </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85A0419580ED0391">5.7-17 ActionMoebiusTransformationOnFunction </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18 ActionMoebiusTransformationOnDivisorP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79FD980E7B24DB9C">5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X823386037F450B0E">5.7-20 DivisorAutomorphismGroupP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80EDF3D682E7EF3F">5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8777388C7885E335">5.7-22 GoppaCodeClassical</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8422A310854C09B0">5.7-23 EvaluationBivariateCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B6C2BED8319C811">5.7-24 EvaluationBivariateCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X842E227E8785168E">5.7-25 OnePointAGCode</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap6.html#X866FC1117814B64D">6. <span class="Heading">Manipulating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X8271A4697FDA97B2">6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X794679BE7F9EB5C1">6.1-1 ExtendedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E6E4DDA79574FDB">6.1-2 PuncturedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87691AB67FF5621B">6.1-3 EvenWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79577EB27BE8524B">6.1-4 PermutedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87E5849784BC60D2">6.1-5 ExpurgatedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8134BE2B8478BE8A">6.1-6 AugmentedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B0A6E1F82686B43">6.1-7 RemovedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X784E1255874FCA8A">6.1-8 AddedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9 ShortenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A5D5419846FC867">6.1-10 LengthenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7982D699803ECD0F">6.1-11 SubCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X809376187C1525AA">6.1-12 ResidueCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E92DC9581F96594">6.1-13 ConstructionBCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X799B12F085ACB609">6.1-14 DualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81FE1F387DFCCB22">6.1-15 ConversionFieldCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X82D18907800FE3D9">6.1-16 TraceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8799F4BF81B0842B">6.1-17 CosetCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X873EA5EE85699832">6.1-18 ConstantWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7AA203A380BC4C79">6.1-19 StandardFormCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7EF49A257D6DB53B">6.1-20 PiecewiseConstantCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X7964BF0081CC8352">6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79E00D3A8367D65A">6.2-1 DirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2 UUVCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7BFBBA5784C293C1">6.2-3 DirectProductCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X78F0B1BC81FB109C">6.2-4 IntersectionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8228A1F57A29B8F4">6.2-5 UnionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A85F8AF8154D387">6.2-6 ExtendedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E17107686A845DB">6.2-7 AmalgamatedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7D8981AF7DFE9814">6.2-8 BlockwiseDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7C37D467791CE99B">6.2-9 ConstructionXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B50943B8014134F">6.2-10 ConstructionXXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X790C614985BFAE16">6.2-11 BZCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X820327D6854A50B5">6.2-12 BZCodeNC</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap7.html#X7A814D518460862E">7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X87C753EB840C34D3">7.1 <span class="Heading">
+Distance bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8673277C7F6C04C3">7.1-1 UpperBoundSingleton</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X828095537C91FDFA">7.1-2 UpperBoundHamming</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3 UpperBoundJohnson</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A26E2537DFF4409">7.1-4 UpperBoundPlotkin</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86A5A7C67F625A40">7.1-5 UpperBoundElias</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82366C277E218130">7.1-6 UpperBoundGriesmer</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8301FA9F7C6C7445">7.1-7 IsGriesmerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A5CB74485184FEE">7.1-8 UpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7FDF54BA81115D88">7.1-9 LowerBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CF15D2084499869">7.1-10 LowerBoundGilbertVarshamov</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8217D830871286D8">7.1-11 LowerBoundSpherePacking</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C6A58327BD6B685">7.1-12 UpperBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B3858B27A9E509A">7.1-13 BoundsMinimumDistance</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X817D0A647D3331EB">7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8320D1C180A1AAAD">7.2-1 BoundsCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7881E03E812140F4">7.2-2 IncreaseCoveringRadiusLowerBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3 ExhaustiveSearchCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85D671F4824B4B0C">7.2-4 GeneralLowerBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8638F5A67D6E50C1">7.2-5 GeneralUpperBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E7FBCC87D5562AB">7.2-6 LowerBoundCoveringRadiusSphereCovering</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E20C518360AB70">7.2-7 LowerBoundCoveringRadiusVanWee1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C72994A825228E7">7.2-8 LowerBoundCoveringRadiusVanWee2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F95362485759ACB">7.2-9 LowerBoundCoveringRadiusCountingExcess</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X829C14A383B5BF59">7.2-10 LowerBoundCoveringRadiusEmbedded1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B0C81B88604C448">7.2-11 LowerBoundCoveringRadiusEmbedded2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D27F6E27B9A0D35">7.2-12 LowerBoundCoveringRadiusInduction</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13 UpperBoundCoveringRadiusRedundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X832847A17FD0D142">7.2-14 UpperBoundCoveringRadiusDelsarte</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86F10D9E79AB8796">7.2-15 UpperBoundCoveringRadiusStrength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8585C6A982489FC3">7.2-16 UpperBoundCoveringRadiusGriesmerLike</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82A38F5F858CF3FC">7.2-17 UpperBoundCoveringRadiusCyclicCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X806EBEC77C16E657">7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82899B64802A4BCE">7.3-1 KrawtchoukMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87AFE2C078031CE4">7.3-2 GrayMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E1E7C5287919CDB">7.3-3 SylvesterMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8014A1F181ECD8AA">7.3-4 HadamardMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X797F43607AD8660D">7.3-5 VandermondeMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B47D82485B66F1D">7.3-6 PutStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7 IsInStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A97AD477E7638DE">7.3-8 PermutedCols</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B68119F85E9EC6D">7.3-9 VerticalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8033E9A67BA155C8">7.3-10 HorizontalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X804AAFF2867080F7">7.3-11 MOLS</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F34306B81DC2776">7.3-12 IsLatinSquare</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81B9B40B7B2D97D5">7.3-13 AreMOLS</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7AB5E5CE7FDF7132">7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8032E53078264ABB">7.4-1 CoordinateNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ED2EF368203AF47">7.4-2 CodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3 IsCoordinateAcceptable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87039FD179AD3009">7.4-4 GeneralizedCodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80283A2F7C8101BD">7.4-5 IsNormalCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X8308D685809A4E2F">7.5 <span class="Heading">
+Miscellaneous functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X871286437DE7A6A4">7.5-1 CodeWeightEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84DA928083B103A0">7.5-2 CodeDistanceEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84B2BE66780EFBF9">7.5-3 CodeMacWilliamsTransform</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7903286078F8051B">7.5-4 CodeDensity</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85303BAE7BD46D81">7.5-5 SphereContent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ACDC5377CD17451">7.5-6 Krawtchouk</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X827E39957A87EB51">7.5-7 PrimitiveUnityRoot</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78AEA40F7AD9D541">7.5-8 PrimitivePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A2B54EF868AA752">7.5-9 IrreduciblePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B50D3417F6FD7C6">7.5-10 MatrixRepresentationOfElement</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7805D2BB7CE4D455">7.5-11 ReciprocalPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12 CyclotomicCosets</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A4EA98D794CF410">7.5-13 WeightHistogram</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X805DF25C84585FD6">7.5-14 MultiplicityInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8072B0DA78FBE562">7.5-15 MostCommonInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C5407EF87849857">7.5-16 RotateList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E526367878F72A">7.5-17 CirculantMatrix</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7969103F7A8598F9">7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84D51EBB784E7C5D">7.6-1 MatrixTransformationOnMultivariatePolynomial </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80433A4B792880EF">7.6-2 DegreeMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X83F44E397C56F2E0">7.6-3 DegreesMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E9021697A61A60F">7.6-4 CoefficientMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79E76B6F7D177E27">7.6-5 SolveLinearSystem</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80171AA687FFDC70">7.6-6 GuavaVersion</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7EBBE86D85CC90C0">7.6-7 ZechLog</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8 CoefficientToPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8431985183B63BB7">7.6-9 DegreesMonomialTerm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X860EF39B841380A1">7.6-10 DivisorsMultivariatePolynomial</a></span>
+</div>
+</div>
+<br />
+</div>
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap0.txt b/doc/chap0.txt
new file mode 100644
index 0000000..810c076
--- /dev/null
+++ b/doc/chap0.txt
@@ -0,0 +1,444 @@
+  
+  
+                                     GUAVA
+  
+  
+           A GAP4 Package for computing with error-correcting codes  
+  
+  
+                                  Version 3.5
+  
+  
+                                 April 25, 2008
+  
+  
+                               Jasper Cramwinckel
+  
+                                Erik Roijackers
+  
+                                 Reinald Baart
+  
+                            Eric Minkes, Lea Ruscio
+  
+                                Robert L Miller,
+  
+                                  Tom Boothby
+  
+                               Cen (``CJ'') Tjhai
+  
+                           David Joyner (Maintainer),
+  
+  
+  
+  Robert L Miller,
+      Email:    mailto:rlm at robertlmiller.com
+  Cen (``CJ'') Tjhai
+      Email:    mailto:cen.tjhai at plymouth.ac.uk
+      Homepage: http://www.plymouth.ac.uk/staff/ctjhai
+  David Joyner (Maintainer),
+      Email:    mailto:wdjoyner at gmail.com
+      Homepage: http://sage.math.washington.edu/home/wdj/guava/
+  
+  -------------------------------------------------------
+  Copyright
+  ©  The  GUAVA  Group:  1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald
+  Baart,  Eric  Minkes,  Lea Ruscio (for the tex version), Jeffrey Leon © 2004
+  David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart,
+  Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby
+  
+  GUAVA  is  released under the GNU General Public License (GPL). This file is
+  part  of  GUAVA,  though  as documentation it is released under the GNU Free
+  Documentation License (see http://www.gnu.org/licenses/licenses.html#FDL).
+  
+  GUAVA  is  free software; you can redistribute it and/or modify it under the
+  terms  of  the  GNU General Public License as published by the Free Software
+  Foundation;  either  version 2 of the License, or (at your option) any later
+  version.
+  
+  GUAVA  is  distributed  in  the hope that it will be useful, but WITHOUT ANY
+  WARRANTY;  without  even  the implied warranty of MERCHANTABILITY or FITNESS
+  FOR  A  PARTICULAR  PURPOSE.  See  the  GNU  General Public License for more
+  details.
+  
+  You should have received a copy of the GNU General Public License along with
+  GUAVA; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+  Suite 330, Boston, MA 02111-1307 USA
+  
+  For more details, see http://www.fsf.org/licenses/gpl.html.
+  
+  For  many  years  GUAVA  has been released along with the ``backtracking'' C
+  programs of J. Leon. In one of his *.c files the following statements occur:
+  ``Copyright  (C)  1992  by Jeffrey S. Leon. This software may be used freely
+  for  educational  and  research  purposes. Any other use requires permission
+  from  the  author.''  The  following should now be appended: ``I, Jeffrey S.
+  Leon, agree to license all the partition backtrack code which I have written
+  under the GPL (www.fsf.org) as of this date, April 17, 2007.''
+  
+  
+  -------------------------------------------------------
+  Acknowledgements
+  GUAVA  was  originally  written  by Jasper Cramwinckel, Erik Roijackers, and
+  Reinald  Baart  in  the  early-to-mid 1990's as a final project during their
+  study  of  Mathematics  at the Delft University of Technology, Department of
+  Pure  Mathematics,  under  the  direction of Professor Juriaan Simonis. This
+  work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3,
+  new  functions  were  added  by  Eric  Minkes, also from Delft University of
+  Technology.
+  
+  JC,  ER  and  RB  would  like to thank the GAP people at the RWTH Aachen for
+  their  support,  A.E.  Brouwer  for  his  advice  and  J.  Simonis  for  his
+  supervision.
+  
+  The  GAP 4 version of GUAVA (versions 1.4 and 1.5) was created by Lea Ruscio
+  and (since 2001, starting with version 1.6) is currently maintained by David
+  Joyner,  who  (with  the  help  of  several  students) has added several new
+  functions.  Starting  with version 2.7, the ``best linear code'' tables have
+  been  updated.  For  further  details,  see  the  CHANGES  file in the GUAVA
+  directory,                 also                 available                 at
+  http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava.
+  
+  This  documentation was prepared with the GAPDoc package of Frank Lübeck and
+  Max  Neunhöffer.  The  conversion from TeX to GAPDoc's XML was done by David
+  Joyner in 2004.
+  
+  Please  send  bug  reports,  suggestions  and  other comments about GUAVA to
+  mailto:support at gap-system.org.  Currently  known  bugs  and  suggested GUAVA
+  projects    are    listed    on    the    bugs   and   projects   web   page
+  http://sage.math.washington.edu/home/wdj/guava/guava2do.html. Older releases
+  and    further    history   can   be   found   on   the   GUAVA   web   page
+  http://sage.math.washington.edu/home/wdj/guava/.
+  
+  Contributors: Other than the authors listed on the title page, the following
+  people  have  contributed code to the GUAVA project: Alexander Hulpke, Steve
+  Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (``Clipper") Lennon,
+  Jason McGowan, Shuhong Gao, Greg Gamble.
+  
+  For  documentation  on Leon's programs, see the src/leon/doc subdirectory of
+  GUAVA.
+  
+  
+  -------------------------------------------------------
+  
+  
+  Content (guava)
+  
+  1. Introduction
+    1.1 Introduction to the GUAVA package
+    1.2 Installing GUAVA
+    1.3 Loading GUAVA
+  2. Coding theory functions in GAP
+    2.1 Distance functions
+      2.1-1 AClosestVectorCombinationsMatFFEVecFFE
+      2.1-2 AClosestVectorComb..MatFFEVecFFECoords
+      2.1-3 DistancesDistributionMatFFEVecFFE
+      2.1-4 DistancesDistributionVecFFEsVecFFE
+      2.1-5 WeightVecFFE
+      2.1-6 DistanceVecFFE
+    2.2 Other functions
+      2.2-1 ConwayPolynomial
+      2.2-2 RandomPrimitivePolynomial
+  3. Codewords
+    3.1 Construction of Codewords
+      3.1-1 Codeword
+      3.1-2 CodewordNr
+      3.1-3 IsCodeword
+    3.2 Comparisons of Codewords
+      3.2-1 =
+    3.3 Arithmetic Operations for Codewords
+      3.3-1 +
+      3.3-2 -
+      3.3-3 +
+    3.4 Functions that Convert Codewords to Vectors or Polynomials
+      3.4-1 VectorCodeword
+      3.4-2 PolyCodeword
+    3.5 Functions that Change the Display Form of a Codeword
+      3.5-1 TreatAsVector
+      3.5-2 TreatAsPoly
+    3.6 Other Codeword Functions
+      3.6-1 NullWord
+      3.6-2 DistanceCodeword
+      3.6-3 Support
+      3.6-4 WeightCodeword
+  4. Codes
+    4.1 Comparisons of Codes
+      4.1-1 =
+    4.2 Operations for Codes
+      4.2-1 +
+      4.2-2 *
+      4.2-3 *
+      4.2-4 InformationWord
+    4.3 Boolean Functions for Codes
+      4.3-1 in
+      4.3-2 IsSubset
+      4.3-3 IsCode
+      4.3-4 IsLinearCode
+      4.3-5 IsCyclicCode
+      4.3-6 IsPerfectCode
+      4.3-7 IsMDSCode
+      4.3-8 IsSelfDualCode
+      4.3-9 IsSelfOrthogonalCode
+      4.3-10 IsDoublyEvenCode
+      4.3-11 IsSinglyEvenCode
+      4.3-12 IsEvenCode
+      4.3-13 IsSelfComplementaryCode
+      4.3-14 IsAffineCode
+      4.3-15 IsAlmostAffineCode
+    4.4 Equivalence and Isomorphism of Codes
+      4.4-1 IsEquivalent
+      4.4-2 CodeIsomorphism
+      4.4-3 AutomorphismGroup
+      4.4-4 PermutationAutomorphismGroup
+    4.5 Domain Functions for Codes
+      4.5-1 IsFinite
+      4.5-2 Size
+      4.5-3 LeftActingDomain
+      4.5-4 Dimension
+      4.5-5 AsSSortedList
+    4.6 Printing and Displaying Codes
+      4.6-1 Print
+      4.6-2 String
+      4.6-3 Display
+      4.6-4 DisplayBoundsInfo
+    4.7 Generating (Check) Matrices and Polynomials
+      4.7-1 GeneratorMat
+      4.7-2 CheckMat
+      4.7-3 GeneratorPol
+      4.7-4 CheckPol
+      4.7-5 RootsOfCode
+    4.8 Parameters of Codes
+      4.8-1 WordLength
+      4.8-2 Redundancy
+      4.8-3 MinimumDistance
+      4.8-4 MinimumDistanceLeon
+      4.8-5 MinimumWeight
+      4.8-6 DecreaseMinimumDistanceUpperBound
+      4.8-7 MinimumDistanceRandom
+      4.8-8 CoveringRadius
+      4.8-9 SetCoveringRadius
+    4.9 Distributions
+      4.9-1 MinimumWeightWords
+      4.9-2 WeightDistribution
+      4.9-3 InnerDistribution
+      4.9-4 DistancesDistribution
+      4.9-5 OuterDistribution
+    4.10 Decoding Functions
+      4.10-1 Decode
+      4.10-2 Decodeword
+      4.10-3 GeneralizedReedSolomonDecoderGao
+      4.10-4 GeneralizedReedSolomonListDecoder
+      4.10-5 BitFlipDecoder
+      4.10-6 NearestNeighborGRSDecodewords
+      4.10-7 NearestNeighborDecodewords
+      4.10-8 Syndrome
+      4.10-9 SyndromeTable
+      4.10-10 StandardArray
+      4.10-11 PermutationDecode
+      4.10-12 PermutationDecodeNC
+  5. Generating Codes
+    5.1 Generating Unrestricted Codes
+      5.1-1 ElementsCode
+      5.1-2 HadamardCode
+      5.1-3 ConferenceCode
+      5.1-4 MOLSCode
+      5.1-5 RandomCode
+      5.1-6 NordstromRobinsonCode
+      5.1-7 GreedyCode
+      5.1-8 LexiCode
+    5.2 Generating Linear Codes
+      5.2-1 GeneratorMatCode
+      5.2-2 CheckMatCodeMutable
+      5.2-3 CheckMatCode
+      5.2-4 HammingCode
+      5.2-5 ReedMullerCode
+      5.2-6 AlternantCode
+      5.2-7 GoppaCode
+      5.2-8 GeneralizedSrivastavaCode
+      5.2-9 SrivastavaCode
+      5.2-10 CordaroWagnerCode
+      5.2-11 FerreroDesignCode
+      5.2-12 RandomLinearCode
+      5.2-13 OptimalityCode
+      5.2-14 BestKnownLinearCode
+    5.3 Gabidulin Codes
+      5.3-1 GabidulinCode
+      5.3-2 EnlargedGabidulinCode
+      5.3-3 DavydovCode
+      5.3-4 TombakCode
+      5.3-5 EnlargedTombakCode
+    5.4 Golay Codes
+      5.4-1 BinaryGolayCode
+      5.4-2 ExtendedBinaryGolayCode
+      5.4-3 TernaryGolayCode
+      5.4-4 ExtendedTernaryGolayCode
+    5.5 Generating Cyclic Codes
+      5.5-1 GeneratorPolCode
+      5.5-2 CheckPolCode
+      5.5-3 RootsCode
+      5.5-4 BCHCode
+      5.5-5 ReedSolomonCode
+      5.5-6 ExtendedReedSolomonCode
+      5.5-7 QRCode
+      5.5-8 QQRCodeNC
+      5.5-9 QQRCode
+      5.5-10 FireCode
+      5.5-11 WholeSpaceCode
+      5.5-12 NullCode
+      5.5-13 RepetitionCode
+      5.5-14 CyclicCodes
+      5.5-15 NrCyclicCodes
+      5.5-16 QuasiCyclicCode
+      5.5-17 CyclicMDSCode
+      5.5-18 FourNegacirculantSelfDualCode
+      5.5-19 FourNegacirculantSelfDualCodeNC
+    5.6 Evaluation Codes
+      5.6-1 EvaluationCode
+      5.6-2 GeneralizedReedSolomonCode
+      5.6-3 GeneralizedReedMullerCode
+      5.6-4 ToricPoints
+      5.6-5 ToricCode
+    5.7 Algebraic geometric codes
+      5.7-1 AffineCurve
+      5.7-2 AffinePointsOnCurve
+      5.7-3 GenusCurve
+      5.7-4 GOrbitPoint 
+      5.7-5 DivisorOnAffineCurve
+      5.7-6 DivisorAddition 
+      5.7-7 DivisorDegree 
+      5.7-8 DivisorNegate 
+      5.7-9 DivisorIsZero 
+      5.7-10 DivisorsEqual 
+      5.7-11 DivisorGCD 
+      5.7-12 DivisorLCM 
+      5.7-13 RiemannRochSpaceBasisFunctionP1 
+      5.7-14 DivisorOfRationalFunctionP1 
+      5.7-15 RiemannRochSpaceBasisP1 
+      5.7-16 MoebiusTransformation 
+      5.7-17 ActionMoebiusTransformationOnFunction 
+      5.7-18 ActionMoebiusTransformationOnDivisorP1 
+      5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 
+      5.7-20 DivisorAutomorphismGroupP1 
+      5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 
+      5.7-22 GoppaCodeClassical
+      5.7-23 EvaluationBivariateCode
+      5.7-24 EvaluationBivariateCodeNC
+      5.7-25 OnePointAGCode
+  6. Manipulating Codes
+    6.1 Functions that Generate a New Code from a Given Code
+      6.1-1 ExtendedCode
+      6.1-2 PuncturedCode
+      6.1-3 EvenWeightSubcode
+      6.1-4 PermutedCode
+      6.1-5 ExpurgatedCode
+      6.1-6 AugmentedCode
+      6.1-7 RemovedElementsCode
+      6.1-8 AddedElementsCode
+      6.1-9 ShortenedCode
+      6.1-10 LengthenedCode
+      6.1-11 SubCode
+      6.1-12 ResidueCode
+      6.1-13 ConstructionBCode
+      6.1-14 DualCode
+      6.1-15 ConversionFieldCode
+      6.1-16 TraceCode
+      6.1-17 CosetCode
+      6.1-18 ConstantWeightSubcode
+      6.1-19 StandardFormCode
+      6.1-20 PiecewiseConstantCode
+    6.2 Functions that Generate a New Code from Two or More Given Codes
+      6.2-1 DirectSumCode
+      6.2-2 UUVCode
+      6.2-3 DirectProductCode
+      6.2-4 IntersectionCode
+      6.2-5 UnionCode
+      6.2-6 ExtendedDirectSumCode
+      6.2-7 AmalgamatedDirectSumCode
+      6.2-8 BlockwiseDirectSumCode
+      6.2-9 ConstructionXCode
+      6.2-10 ConstructionXXCode
+      6.2-11 BZCode
+      6.2-12 BZCodeNC
+  7. Bounds on codes, special matrices and miscellaneous functions
+    7.1 Distance bounds on codes
+      7.1-1 UpperBoundSingleton
+      7.1-2 UpperBoundHamming
+      7.1-3 UpperBoundJohnson
+      7.1-4 UpperBoundPlotkin
+      7.1-5 UpperBoundElias
+      7.1-6 UpperBoundGriesmer
+      7.1-7 IsGriesmerCode
+      7.1-8 UpperBound
+      7.1-9 LowerBoundMinimumDistance
+      7.1-10 LowerBoundGilbertVarshamov
+      7.1-11 LowerBoundSpherePacking
+      7.1-12 UpperBoundMinimumDistance
+      7.1-13 BoundsMinimumDistance
+    7.2 Covering radius bounds on codes
+      7.2-1 BoundsCoveringRadius
+      7.2-2 IncreaseCoveringRadiusLowerBound
+      7.2-3 ExhaustiveSearchCoveringRadius
+      7.2-4 GeneralLowerBoundCoveringRadius
+      7.2-5 GeneralUpperBoundCoveringRadius
+      7.2-6 LowerBoundCoveringRadiusSphereCovering
+      7.2-7 LowerBoundCoveringRadiusVanWee1
+      7.2-8 LowerBoundCoveringRadiusVanWee2
+      7.2-9 LowerBoundCoveringRadiusCountingExcess
+      7.2-10 LowerBoundCoveringRadiusEmbedded1
+      7.2-11 LowerBoundCoveringRadiusEmbedded2
+      7.2-12 LowerBoundCoveringRadiusInduction
+      7.2-13 UpperBoundCoveringRadiusRedundancy
+      7.2-14 UpperBoundCoveringRadiusDelsarte
+      7.2-15 UpperBoundCoveringRadiusStrength
+      7.2-16 UpperBoundCoveringRadiusGriesmerLike
+      7.2-17 UpperBoundCoveringRadiusCyclicCode
+    7.3 Special matrices in GUAVA
+      7.3-1 KrawtchoukMat
+      7.3-2 GrayMat
+      7.3-3 SylvesterMat
+      7.3-4 HadamardMat
+      7.3-5 VandermondeMat
+      7.3-6 PutStandardForm
+      7.3-7 IsInStandardForm
+      7.3-8 PermutedCols
+      7.3-9 VerticalConversionFieldMat
+      7.3-10 HorizontalConversionFieldMat
+      7.3-11 MOLS
+      7.3-12 IsLatinSquare
+      7.3-13 AreMOLS
+    7.4 Some functions related to the norm of a code
+      7.4-1 CoordinateNorm
+      7.4-2 CodeNorm
+      7.4-3 IsCoordinateAcceptable
+      7.4-4 GeneralizedCodeNorm
+      7.4-5 IsNormalCode
+    7.5 Miscellaneous functions
+      7.5-1 CodeWeightEnumerator
+      7.5-2 CodeDistanceEnumerator
+      7.5-3 CodeMacWilliamsTransform
+      7.5-4 CodeDensity
+      7.5-5 SphereContent
+      7.5-6 Krawtchouk
+      7.5-7 PrimitiveUnityRoot
+      7.5-8 PrimitivePolynomialsNr
+      7.5-9 IrreduciblePolynomialsNr
+      7.5-10 MatrixRepresentationOfElement
+      7.5-11 ReciprocalPolynomial
+      7.5-12 CyclotomicCosets
+      7.5-13 WeightHistogram
+      7.5-14 MultiplicityInList
+      7.5-15 MostCommonInList
+      7.5-16 RotateList
+      7.5-17 CirculantMatrix
+    7.6 Miscellaneous polynomial functions
+      7.6-1 MatrixTransformationOnMultivariatePolynomial 
+      7.6-2 DegreeMultivariatePolynomial
+      7.6-3 DegreesMultivariatePolynomial
+      7.6-4 CoefficientMultivariatePolynomial
+      7.6-5 SolveLinearSystem
+      7.6-6 GuavaVersion
+      7.6-7 ZechLog
+      7.6-8 CoefficientToPolynomial
+      7.6-9 DegreesMonomialTerm
+      7.6-10 DivisorsMultivariatePolynomial
+  
+  
+  -------------------------------------------------------
diff --git a/doc/chap1.html b/doc/chap1.html
new file mode 100644
index 0000000..3a6923a
--- /dev/null
+++ b/doc/chap1.html
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 1: Introduction</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap0.html">Previous Chapter</a>    <a href="chap2.html">Next Chapter</a>   </div>
+
+<p><a id="X7DFB63A97E67C0A1" name="X7DFB63A97E67C0A1"></a></p>
+<div class="ChapSects"><a href="chap1.html#X7DFB63A97E67C0A1">1. <span class="Heading">Introduction</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X787D826579603719">1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X7E2CB7DF83B514A8">1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X80EAA631863F805B">1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></a>
+</div>
+</div>
+
+<h3>1. <span class="Heading">Introduction</span></h3>
+
+<p><a id="X787D826579603719" name="X787D826579603719"></a></p>
+
+<h4>1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></h4>
+
+<p>This is the manual of the GAP package <strong class="pkg">GUAVA</strong> that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of <strong class="pkg">GUAVA</strong> requires GAP 4.4.5 or later.</p>
+
+<p>The functions can be divided into three subcategories:</p>
+
+
+<ul>
+<li><p>Construction of codes: <strong class="pkg">GUAVA</strong> can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object.</p>
+
+</li>
+<li><p>Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases.</p>
+
+</li>
+<li><p>Computations of information about codes: <strong class="pkg">GUAVA</strong> can calculate important parameters of codes quickly. The results are stored in the codes' object components.</p>
+
+</li>
+</ul>
+<p>Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see <a href="chapBib.html#biBLeon91">[Leo91]</a> and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and <code class="func">MinimumWeight</code> (<a href="chap4.html#X84EDF67B86B4154C"><b>4.8-5</b></a>) function, <strong class="pkg">GUAVA</strong> is written in the GAP language, and runs on any system supporting GAP4.3 and above. Sev [...]
+
+<p>Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane <a href="chapBib.html#biBMS83">[MS83]</a> Huffman and Pless <a href="chapBib.html#biBHP03">[HP03]</a>.</p>
+
+<p><a id="X7E2CB7DF83B514A8" name="X7E2CB7DF83B514A8"></a></p>
+
+<h4>1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></h4>
+
+<p>To install <strong class="pkg">GUAVA</strong> (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4.</p>
+
+<p>After unpacking <strong class="pkg">GUAVA</strong> the GAP-only part of <strong class="pkg">GUAVA</strong> is installed. The parts of <strong class="pkg">GUAVA</strong> depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call <code class="code">`./configure /gappath'</code> where <code class="code">/gappath</code> is the path to [...]
+
+
+<pre class="normal">
+
+./configure ../..
+
+</pre>
+
+<p>This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call</p>
+
+
+<pre class="normal">
+
+make
+
+</pre>
+
+<p>to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see <span class="URL"><a href="http://www.cygwin.com/">http://www.cygwin.com/</a></span> - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type</p>
+
+
+<pre class="normal">
+
+./configure ../.. --enable-libsuffix=64 
+make
+
+</pre>
+
+<p>to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.)</p>
+
+<p>Starting with version 2.5, you should also install the GAP package <strong class="pkg">SONATA</strong> to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory.</p>
+
+<p>This completes the installation of <strong class="pkg">GUAVA</strong> for a single architecture. If you use this installation of <strong class="pkg">GUAVA</strong> on different hardware platforms you will have to compile the binary for each platform separately.</p>
+
+<p><a id="X80EAA631863F805B" name="X80EAA631863F805B"></a></p>
+
+<h4>1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></h4>
+
+<p>After starting up GAP, the <strong class="pkg">GUAVA</strong> package needs to be loaded. Load <strong class="pkg">GUAVA</strong> by typing at the GAP prompt:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LoadPackage( "guava" );
+</pre></td></tr></table>
+
+<p>If <strong class="pkg">GUAVA</strong> isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of <strong class="pkg">GUAVA</strong>, you might consider putting this line in your `.gaprc' file.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap0.html">Previous Chapter</a>    <a href="chap2.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap1.txt b/doc/chap1.txt
new file mode 100644
index 0000000..f3bdd3a
--- /dev/null
+++ b/doc/chap1.txt
@@ -0,0 +1,91 @@
+  
+  1. Introduction
+  
+  
+  1.1 Introduction to the GUAVA package
+  
+  This is the manual of the GAP package GUAVA that provides implementations of
+  some routines designed for the construction and analysis of in the theory of
+  error-correcting codes. This version of GUAVA requires GAP 4.4.5 or later.
+  
+  The functions can be divided into three subcategories:
+  
+  --    Construction  of  codes:  GUAVA can construct unrestricted, linear and
+        cyclic   codes.   Information  about  the  code,  such  as  operations
+        applicable  to  the  code,  is  stored in a record-like data structure
+        called a GAP object.
+  
+  --    Manipulations of codes: Manipulation transforms one code into another,
+        or  constructs a new code from two codes. The new code can profit from
+        the  data  in  the  record  of  the  old  code(s),  so  in these cases
+        calculation time decreases.
+  
+  --    Computations of information about codes: GUAVA can calculate important
+        parameters  of  codes  quickly.  The  results are stored in the codes'
+        object components.
+  
+  Except  for  the automorphism group and isomorphism testing functions, which
+  make  use  of J.S. Leon's programs (see [Leo91] and the documentation in the
+  'src/leon'  subdirectory  of  the  'guava'  directory for some details), and
+  MinimumWeight  (4.8-5)  function,  GUAVA is written in the GAP language, and
+  runs on any system supporting GAP4.3 and above. Several algorithms that need
+  the speed were integrated in the GAP kernel.
+  
+  Good  general  references for error-correcting codes and the technical terms
+  in this manual are MacWilliams and Sloane [MS83] Huffman and Pless [HP03].
+  
+  
+  1.2 Installing GUAVA
+  
+  To install GUAVA (as a GAP 4 Package) unpack the archive file in a directory
+  in the `pkg' hierarchy of your version of GAP 4.
+  
+  After  unpacking GUAVA the GAP-only part of GUAVA is installed. The parts of
+  GUAVA  depending  on  J.  Leon's  backtrack  programs package (for computing
+  automorphism  groups)  are  only  available in a UNIX environment, where you
+  should  proceed  as  follows:  Go to the newly created `guava' directory and
+  call  `./configure  /gappath'  where  /gappath  is  the path to the GAP home
+  directory.  So  for  example,  if  you install the package in the main `pkg'
+  directory call
+  
+  
+  ./configure ../..
+  This  will  fetch the architecture type for which GAP has been compiled last
+  and create a `Makefile'. Now call
+  
+  
+  make
+  to  compile  the  binary  and to install it in the appropriate place. (For a
+  windows  machine  with  CYGWIN  installed  -  see  http://www.cygwin.com/  -
+  instructions for compiling Leon's binaries are likely to be similar to those
+  above.  On  a  64-bit  SUSE linux computer, instead of the configure command
+  above - which will only compile the 32-bit binary - type
+  
+  
+  ./configure ../.. --enable-libsuffix=64 
+  make
+  to  compile Leon's program as a 64 bit native binary. This may also work for
+  other 64-bit linux distributions as well.)
+  
+  Starting with version 2.5, you should also install the GAP package SONATA to
+  load  GAP.  You  can download this from the GAP website and unpack it in the
+  `pkg' subdirectory.
+  
+  This  completes  the installation of GUAVA for a single architecture. If you
+  use this installation of GUAVA on different hardware platforms you will have
+  to compile the binary for each platform separately.
+  
+  
+  1.3 Loading GUAVA
+  
+  After  starting  up GAP, the GUAVA package needs to be loaded. Load GUAVA by
+  typing at the GAP prompt:
+  
+  ---------------------------  Example  ----------------------------
+    gap> LoadPackage( "guava" );
+  ------------------------------------------------------------------
+  
+  If GUAVA isn't already in memory, it is loaded and the author information is
+  displayed.  If  you are a frequent user of GUAVA, you might consider putting
+  this line in your `.gaprc' file.
+  
diff --git a/doc/chap2.html b/doc/chap2.html
new file mode 100644
index 0000000..4c23bc2
--- /dev/null
+++ b/doc/chap2.html
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 2: Coding theory functions in GAP</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Previous Chapter</a>    <a href="chap3.html">Next Chapter</a>   </div>
+
+<p><a id="X7A93308C82637F4F" name="X7A93308C82637F4F"></a></p>
+<div class="ChapSects"><a href="chap2.html#X7A93308C82637F4F">2. <span class="Heading">Coding theory functions in GAP</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X80F192497C008691">2.1 <span class="Heading">
+Distance functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X82E5987E81487D18">2.1-1 AClosestVectorCombinationsMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X870DE258833C5AA0">2.1-2 AClosestVectorComb..MatFFEVecFFECoords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85135CEB86E61D49">2.1-3 DistancesDistributionMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7F2F630984A9D3D6">2.1-4 DistancesDistributionVecFFEsVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5 WeightVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85AA5C6587559C1C">2.1-6 DistanceVecFFE</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X87C3D1B984960984">2.2 <span class="Heading">
+Other functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C2425A786F09054">2.2-1 ConwayPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7ECC593583E68A6C">2.2-2 RandomPrimitivePolynomial</a></span>
+</div>
+</div>
+
+<h3>2. <span class="Heading">Coding theory functions in GAP</span></h3>
+
+<p>This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are</p>
+
+
+<ul>
+<li><p><code class="code">AClosestVectorCombinationsMatFFEVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">AClosestVectorCombinationsMatFFEVecFFECoords</code>,</p>
+
+</li>
+<li><p><code class="code">CosetLeadersMatFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistancesDistributionMatFFEVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistancesDistributionVecFFEsVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistanceVecFFE</code> and <code class="code">WeightVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">ConwayPolynomial</code> and <code class="code">IsCheapConwayPolynomial</code>,</p>
+
+</li>
+<li><p><code class="code">IsPrimitivePolynomial</code>, and <code class="code">RandomPrimitivePolynomial</code>.</p>
+
+</li>
+</ul>
+<p>However, the GAP command <code class="code">PrimitivePolynomial</code> returns an integer primitive polynomial not the finite field kind.</p>
+
+<p><a id="X80F192497C008691" name="X80F192497C008691"></a></p>
+
+<h4>2.1 <span class="Heading">
+Distance functions
+</span></h4>
+
+<p><a id="X82E5987E81487D18" name="X82E5987E81487D18"></a></p>
+
+<h5>2.1-1 AClosestVectorCombinationsMatFFEVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AClosestVectorCombinationsMatFFEVecFFE</code>( <var class="Arg">mat, F, vec, r, st</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command runs through the <var class="Arg">F</var>-linear combinations of the vectors in the rows of the matrix <var class="Arg">mat</var> that can be written as linear combinations of exactly <var class="Arg">r</var> rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector <var class="Arg">vec</var>. The length of the rows of <var class="Arg">mat</var> and the length of <var class="Arg">vec</var> must be equal, and all eleme [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111");
+[ 1 2 1 0 1 1 1 1 ]
+gap> v:=VectorCodeword(v);
+[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
+gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]
+</pre></td></tr></table>
+
+<p><a id="X870DE258833C5AA0" name="X870DE258833C5AA0"></a></p>
+
+<h5>2.1-2 AClosestVectorComb..MatFFEVecFFECoords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AClosestVectorComb..MatFFEVecFFECoords</code>( <var class="Arg">mat, F, vec, r, st</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AClosestVectorCombinationsMatFFEVecFFECoords</code> returns a two element list containing (a) the same closest vector as in <code class="code">AClosestVectorCombinationsMatFFEVecFFE</code>, and (b) a vector <var class="Arg">v</var> with exactly <var class="Arg">r</var> non-zero entries, such that v*mat is the closest vector.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
+[ 1 2 1 0 1 1 1 1 ]
+gap> G:=GeneratorMat(C);;
+gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+[ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X85135CEB86E61D49" name="X85135CEB86E61D49"></a></p>
+
+<h5>2.1-3 DistancesDistributionMatFFEVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistributionMatFFEVecFFE</code>( <var class="Arg">mat, f, vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistributionMatFFEVecFFE</code> returns the distances distribution of the vector <var class="Arg">vec</var> to the vectors in the vector space generated by the rows of the matrix <var class="Arg">mat</var> over the finite field <var class="Arg">f</var>. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs t [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+[ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]
+</pre></td></tr></table>
+
+<p><a id="X7F2F630984A9D3D6" name="X7F2F630984A9D3D6"></a></p>
+
+<h5>2.1-4 DistancesDistributionVecFFEsVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistributionVecFFEsVecFFE</code>( <var class="Arg">vecs, vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistributionVecFFEsVecFFE</code> returns the distances distribution of the vector <var class="Arg">vec</var> to the vectors in the list <var class="Arg">vecs</var>. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in <var class="Arg">vecs</var> that have distance i+1 to <var class="Arg">vec</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
+[ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7C9F4D657F9BA5A1" name="X7C9F4D657F9BA5A1"></a></p>
+
+<h5>2.1-5 WeightVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightVecFFE</code>( <var class="Arg">vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightVecFFE</code> returns the weight of the finite field vector <var class="Arg">vec</var>, i.e. the number of nonzero entries.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> WeightVecFFE(v);
+7
+</pre></td></tr></table>
+
+<p><a id="X85AA5C6587559C1C" name="X85AA5C6587559C1C"></a></p>
+
+<h5>2.1-6 DistanceVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistanceVecFFE</code>( <var class="Arg">vec1, vec2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The <em>Hamming metric</em> on GF(q)^n is the function</p>
+
+<p class="pcenter">
+dist((v_1,...,v_n),(w_1,...,w_n))
+=|\{i\in [1..n]\ |\ v_i\not= w_i\}|.
+</p>
+
+<p>This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). <code class="code">DistanceVecFFE</code> returns the distance between the two vectors <var class="Arg">vec1</var> and <var class="Arg">vec2</var>, which must have the same length and whose elements must lie in a common field. The distance is the number of places where <var class="Arg">vec1</var> and <var class="Arg">vec2</var> differ.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> DistanceVecFFE(v1,v2);
+2
+</pre></td></tr></table>
+
+<p><a id="X87C3D1B984960984" name="X87C3D1B984960984"></a></p>
+
+<h4>2.2 <span class="Heading">
+Other functions
+</span></h4>
+
+<p>We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website <span class="URL"><a href="http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol">http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol</a></span> on Conway polynomials. The <strong class="button">prime fields</strong>: If p>= 2 is a prime then GF(p) denotes the field Z}/pZ}, with addition and multiplication performed mod p.</p>
+
+<p>The <strong class="button">prime power fields</strong>: Suppose q=p^r is a prime power, r>1, and put F=GF(p). Let F[x] denote the ring of all polynomials over F and let f(x) denote a monic irreducible polynomial in F[x] of degree r. The quotient E = F[x]/(f(x))= F[x]/f(x)F[x] is a field with q elements. If f(x) and E are related in this way, we say that f(x) is the <strong class="button">defining polynomial</strong> of E. Any defining polynomial factors completely into distinct lin [...]
+
+<p>For any finite field F, the multiplicative group of non-zero elements F^x is a cyclic group. An alpha in F is called a <strong class="button">primitive element</strong> if it is a generator of F^x. A defining polynomial f(x) of F is said to be <strong class="button">primitive</strong> if it has a root in F which is a primitive element.</p>
+
+<p><a id="X7C2425A786F09054" name="X7C2425A786F09054"></a></p>
+
+<h5>2.2-1 ConwayPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConwayPolynomial</code>( <var class="Arg">p, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A standard notation for the elements of GF(p) is given via the representatives 0, ..., p-1 of the cosets modulo p. We order these elements by 0 < 1 < 2 < ... < p-1. We introduce an ordering of the polynomials of degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... + h_0 (by convention, g_i=h_i=0 for i > r). Then we define g < h if and only if there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k h_k.</p>
+
+<p>The <strong class="button">Conway polynomial</strong> f_p,r(x) for GF(p^r) is the smallest polynomial of degree r with respect to this ordering such that:</p>
+
+
+<ul>
+<li><p>f_p,r(x) is monic,</p>
+
+</li>
+<li><p>f_p,r(x) is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of GF(p^r),</p>
+
+</li>
+<li><p>for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1)) = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of f_p,r(x) is a zero of f_p,m(x).</p>
+
+</li>
+</ul>
+<p><code class="code">ConwayPolynomial(p,n)</code> returns the polynomial f_p,r(x) defined above.</p>
+
+<p><code class="code">IsCheapConwayPolynomial(p,n)</code> returns true if <code class="code">ConwayPolynomial( p, n )</code> will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if n,p are not too big.</p>
+
+<p><a id="X7ECC593583E68A6C" name="X7ECC593583E68A6C"></a></p>
+
+<h5>2.2-2 RandomPrimitivePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomPrimitivePolynomial</code>( <var class="Arg">F, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>For a finite field <var class="Arg">F</var> and a positive integer <var class="Arg">n</var> this function returns a primitive polynomial of degree <var class="Arg">n</var> over <var class="Arg">F</var>, that is a zero of this polynomial has maximal multiplicative order |F|^n-1.</p>
+
+<p><code class="code">IsPrimitivePolynomial(f)</code> can be used to check if a univariate polynomial <var class="Arg">f</var> is primitive or not.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Previous Chapter</a>    <a href="chap3.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap2.txt b/doc/chap2.txt
new file mode 100644
index 0000000..adfb6a9
--- /dev/null
+++ b/doc/chap2.txt
@@ -0,0 +1,231 @@
+  
+  2. Coding theory functions in GAP
+  
+  This  chapter  will  recall  from the GAP4.4.5 manual some of the GAP coding
+  theory  and  finite  field functions useful for coding theory. Some of these
+  functions are partially written in C for speed. The main functions are
+  
+  --    AClosestVectorCombinationsMatFFEVecFFE,
+  
+  --    AClosestVectorCombinationsMatFFEVecFFECoords,
+  
+  --    CosetLeadersMatFFE,
+  
+  --    DistancesDistributionMatFFEVecFFE,
+  
+  --    DistancesDistributionVecFFEsVecFFE,
+  
+  --    DistanceVecFFE and WeightVecFFE,
+  
+  --    ConwayPolynomial and IsCheapConwayPolynomial,
+  
+  --    IsPrimitivePolynomial, and RandomPrimitivePolynomial.
+  
+  However,  the  GAP  command PrimitivePolynomial returns an integer primitive
+  polynomial not the finite field kind.
+  
+  
+  2.1 Distance functions
+  
+  2.1-1 AClosestVectorCombinationsMatFFEVecFFE
+  
+  > AClosestVectorCombinationsMatFFEVecFFE( mat, F, vec, r, st ) _____function
+  
+  This  command  runs  through the F-linear combinations of the vectors in the
+  rows of the matrix mat that can be written as linear combinations of exactly
+  r  rows  (that  is without using zero as a coefficient) and returns a vector
+  from  these that is closest to the vector vec. The length of the rows of mat
+  and  the  length  of  vec must be equal, and all elements must lie in F. The
+  rows  of  mat must be linearly independent. If it finds a vector of distance
+  at  most  st, which must be a nonnegative integer, then it stops immediately
+  and returns this vector.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(3);;
+    gap> x:= Indeterminate( F );; pol:= x^2+1;
+    x_1^2+Z(3)^0
+    gap> C := GeneratorPolCode(pol,8,F);
+    a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+    gap> v:=Codeword("12101111");
+    [ 1 2 1 0 1 1 1 1 ]
+    gap> v:=VectorCodeword(v);
+    [ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
+    gap> G:=GeneratorMat(C);
+    [ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+      [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+      [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+      [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+      [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+      [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
+    gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+    [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]
+  ------------------------------------------------------------------
+  
+  2.1-2 AClosestVectorComb..MatFFEVecFFECoords
+  
+  > AClosestVectorComb..MatFFEVecFFECoords( mat, F, vec, r, st ) _____function
+  
+  AClosestVectorCombinationsMatFFEVecFFECoords  returns  a  two  element  list
+  containing      (a)      the      same      closest     vector     as     in
+  AClosestVectorCombinationsMatFFEVecFFE,  and  (b)  a vector v with exactly r
+  non-zero entries, such that v*mat is the closest vector.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(3);;
+    gap> x:= Indeterminate( F );; pol:= x^2+1;
+    x_1^2+Z(3)^0
+    gap> C := GeneratorPolCode(pol,8,F);
+    a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+    gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
+    [ 1 2 1 0 1 1 1 1 ]
+    gap> G:=GeneratorMat(C);;
+    gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+    [ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
+      [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]
+  ------------------------------------------------------------------
+  
+  2.1-3 DistancesDistributionMatFFEVecFFE
+  
+  > DistancesDistributionMatFFEVecFFE( mat, f, vec ) _________________function
+  
+  DistancesDistributionMatFFEVecFFE  returns the distances distribution of the
+  vector  vec  to the vectors in the vector space generated by the rows of the
+  matrix  mat  over the finite field f. All vectors must have the same length,
+  and all elements must lie in a common field. The distances distribution is a
+  list  d  of  length Length(vec)+1, such that the value d[i] is the number of
+  vectors in vecs that have distance i+1 to vec.
+  
+  ---------------------------  Example  ----------------------------
+    gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+    gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+    gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+    [ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]
+  ------------------------------------------------------------------
+  
+  2.1-4 DistancesDistributionVecFFEsVecFFE
+  
+  > DistancesDistributionVecFFEsVecFFE( vecs, vec ) __________________function
+  
+  DistancesDistributionVecFFEsVecFFE returns the distances distribution of the
+  vector  vec  to the vectors in the list vecs. All vectors must have the same
+  length,  and  all  elements  must  lie  in  a  common  field.  The distances
+  distribution  is  a list d of length Length(vec)+1, such that the value d[i]
+  is the number of vectors in vecs that have distance i+1 to vec.
+  
+  ---------------------------  Example  ----------------------------
+    gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+    gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+    >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+    gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
+    [ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]
+  ------------------------------------------------------------------
+  
+  2.1-5 WeightVecFFE
+  
+  > WeightVecFFE( vec ) ______________________________________________function
+  
+  WeightVecFFE  returns  the  weight  of the finite field vector vec, i.e. the
+  number of nonzero entries.
+  
+  ---------------------------  Example  ----------------------------
+    gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+    gap> WeightVecFFE(v);
+    7
+  ------------------------------------------------------------------
+  
+  2.1-6 DistanceVecFFE
+  
+  > DistanceVecFFE( vec1, vec2 ) _____________________________________function
+  
+  The Hamming metric on GF(q)^n is the function
+  
+  
+       dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not=
+       w_i\}|.
+  
+  
+  This  is  also  called  the  (Hamming)  distance between v=(v_1,...,v_n) and
+  w=(w_1,...,w_n). DistanceVecFFE returns the distance between the two vectors
+  vec1  and  vec2, which must have the same length and whose elements must lie
+  in  a common field. The distance is the number of places where vec1 and vec2
+  differ.
+  
+  ---------------------------  Example  ----------------------------
+    gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+    gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+    gap> DistanceVecFFE(v1,v2);
+    2
+  ------------------------------------------------------------------
+  
+  
+  2.2 Other functions
+  
+  We basically repeat, with minor variation, the material in the GAP manual or
+  from                 Frank                 Luebeck's                 website
+  http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol  on Conway
+  polynomials.  The  prime  fields: If p>= 2 is a prime then GF(p) denotes the
+  field Z}/pZ}, with addition and multiplication performed mod p.
+  
+  The  prime  power  fields:  Suppose  q=p^r  is  a  prime power, r>1, and put
+  F=GF(p).  Let  F[x]  denote  the ring of all polynomials over F and let f(x)
+  denote  a monic irreducible polynomial in F[x] of degree r. The quotient E =
+  F[x]/(f(x))=  F[x]/f(x)F[x]  is  a  field with q elements. If f(x) and E are
+  related  in  this way, we say that f(x) is the defining polynomial of E. Any
+  defining polynomial factors completely into distinct linear factors over the
+  field it defines.
+  
+  For any finite field F, the multiplicative group of non-zero elements F^x is
+  a  cyclic  group.  An  alpha  in  F is called a primitive element if it is a
+  generator of F^x. A defining polynomial f(x) of F is said to be primitive if
+  it has a root in F which is a primitive element.
+  
+  2.2-1 ConwayPolynomial
+  
+  > ConwayPolynomial( p, n ) _________________________________________function
+  
+  A   standard   notation   for  the  elements  of  GF(p)  is  given  via  the
+  representatives  0, ..., p-1 of the cosets modulo p. We order these elements
+  by  0  <  1  < 2 < ... < p-1. We introduce an ordering of the polynomials of
+  degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... +
+  h_0  (by  convention, g_i=h_i=0 for i > r). Then we define g < h if and only
+  if  there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k
+  h_k.
+  
+  The  Conway  polynomial  f_p,r(x)  for GF(p^r) is the smallest polynomial of
+  degree r with respect to this ordering such that:
+  
+  --    f_p,r(x) is monic,
+  
+  --    f_p,r(x)  is  primitive,  that  is,  any  zero  is  a generator of the
+        (cyclic) multiplicative group of GF(p^r),
+  
+  --    for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1))
+        = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of
+        f_p,r(x) is a zero of f_p,m(x).
+  
+  ConwayPolynomial(p,n) returns the polynomial f_p,r(x) defined above.
+  
+  IsCheapConwayPolynomial(p,n)  returns  true if ConwayPolynomial( p, n ) will
+  give  a  result  in  reasonable  time.  This  is  either  the case when this
+  polynomial is pre-computed, or if n,p are not too big.
+  
+  2.2-2 RandomPrimitivePolynomial
+  
+  > RandomPrimitivePolynomial( F, n ) ________________________________function
+  
+  For  a  finite  field  F  and  a  positive integer n this function returns a
+  primitive  polynomial  of degree n over F, that is a zero of this polynomial
+  has maximal multiplicative order |F|^n-1.
+  
+  IsPrimitivePolynomial(f)  can  be used to check if a univariate polynomial f
+  is primitive or not.
+  
diff --git a/doc/chap3.html b/doc/chap3.html
new file mode 100644
index 0000000..997f303
--- /dev/null
+++ b/doc/chap3.html
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 3: Codewords</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap2.html">Previous Chapter</a>    <a href="chap4.html">Next Chapter</a>   </div>
+
+<p><a id="X836BAA9A7EBD08B1" name="X836BAA9A7EBD08B1"></a></p>
+<div class="ChapSects"><a href="chap3.html#X836BAA9A7EBD08B1">3. <span class="Heading">Codewords</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81B73ABB87DA8E49">3.1 <span class="Heading">Construction of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B9E353D852851AA">3.1-1 Codeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2 CodewordNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F25479781E6E109">3.1-3 IsCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X8253374284B475B6">3.2 <span class="Heading">Comparisons of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8123456781234567">3.2-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7ADE7E95867A14E1">3.3 <span class="Heading">Arithmetic Operations for Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X81B1391281B13912">3.3-2 -</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-3 +</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7BBA5DCD7A8BD60D">3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X87C8B0B178496F6A">3.4-1 VectorCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X822465E884D0F484">3.4-2 PolyCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81D3230A797FE6E3">3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E3E174B7954AA6B">3.5-1 TreatAsVector</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7A6828148490BD2E">3.5-2 TreatAsPoly</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X805BF7147C68CACD">3.6 <span class="Heading">
+Other Codeword Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8000B6597EF0282F">3.6-1 NullWord</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7CDA1B547D55E6FB">3.6-2 DistanceCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B689C0284AC4296">3.6-3 Support</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7AD61C237D8D3849">3.6-4 WeightCodeword</a></span>
+</div>
+</div>
+
+<h3>3. <span class="Heading">Codewords</span></h3>
+
+<p>Let GF(q) denote a finite field with q (a prime power) elements. A <em>code</em> is a subset C of some finite-dimensional vector space V over GF(q). The <em>length</em> of C is the dimension of V. Usually, V=GF(q)^n and the length is the number of coordinate entries. When C is itself a vector space over GF(q) then it is called a <em>linear code</em> and the <em>dimension</em> of C is its dimension as a vector space over GF(q).</p>
+
+<p>In <strong class="pkg">GUAVA</strong>, a `codeword' is a GAP record, with one of its components being an element in V. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if C is linear) of V.</p>
+
+
+<table class="example">
+<tr><td><pre>
+  gap> C:=RandomLinearCode(20,10,GF(4));
+  a  [20,10,?] randomly generated code over GF(4)
+  gap> c:=Random(C);
+  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
+  gap> NamesOfComponents(C);
+  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+    "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
+     "Representative", "ZeroImmutable" ]
+  gap> NamesOfComponents(c);
+  [ "VectorCodeword", "WordLength", "treatAsPoly" ]
+  gap> c!.VectorCodeword;
+  [ immutable compressed vector length 20 over GF(4) ] 
+  gap> Display(last);
+  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
+    Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
+    Z(2)^0, 0*Z(2) ]
+  gap> C!.Dimension;
+  10
+</pre></td></tr></table>
+
+<p>Mathematically, a `codeword' is an element of a code C, but in <strong class="pkg">GUAVA</strong> the <code class="code">Codeword</code> and <code class="code">VectorCodeword</code> commands have implementations which do not check if the codeword belongs to C (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword c (belonging to C) and a rec [...]
+
+<p>A codeword c in a linear code C arises in practice by an initial encoding of a 'block' message m, adding enough redundancy to recover m after c is transmitted via a 'noisy' communication medium. In <strong class="pkg">GUAVA</strong>, for linear codes, the map mlongmapsto c is computed using the command <code class="code">c:=m*C</code> and recovering m from c is obtained by the command <code class="code">InformationWord(C,c)</code>. These commands are explained more below.</p>
+
+<p>Many operations are available on codewords themselves, although codewords also work together with codes (see chapter <a href="chap4.html#X85FDDF0B7B7D87FB"><b>4.</b></a> on Codes).</p>
+
+<p>The first section describes how codewords are constructed (see <code class="func">Codeword</code> (<a href="chap3.html#X7B9E353D852851AA"><b>3.1-1</b></a>) and <code class="func">IsCodeword</code> (<a href="chap3.html#X7F25479781E6E109"><b>3.1-3</b></a>)). Sections <a href="chap3.html#X8253374284B475B6"><b>3.2</b></a> and <a href="chap3.html#X7ADE7E95867A14E1"><b>3.3</b></a> describe the arithmetic operations applicable to codewords. Section <a href="chap3.html#X7BBA5DCD7A8BD60D"><b>3 [...]
+
+<p><a id="X81B73ABB87DA8E49" name="X81B73ABB87DA8E49"></a></p>
+
+<h4>3.1 <span class="Heading">Construction of Codewords</span></h4>
+
+<p><a id="X7B9E353D852851AA" name="X7B9E353D852851AA"></a></p>
+
+<h5>3.1-1 Codeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Codeword</code>( <var class="Arg">obj[, n][, F]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Codeword</code> returns a codeword or a list of codewords constructed from <var class="Arg">obj</var>. The object <var class="Arg">obj</var> can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list).</p>
+
+<p>If a number <var class="Arg">n</var> is specified, all constructed codewords have length <var class="Arg">n</var>. This is the only way to make sure that all elements of <var class="Arg">obj</var> are converted to codewords of the same length. Elements of <var class="Arg">obj</var> that are longer than <var class="Arg">n</var> are reduced in length by cutting of the last positions. Elements of <var class="Arg">obj</var> that are shorter than <var class="Arg">n</var> are lengthened by  [...]
+
+<p>If a Galois field <var class="Arg">F</var> is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of <var class="Arg">obj</var> are converted to the same field <var class="Arg">F</var> (otherwise they are converted one by one). Note that all elements of <var class="Arg">obj</var> must have elements over <var class="Arg">F</var> or over `Integers'. Converting from one Galois field to another is not allowed. If no <var class="Arg [...]
+
+<p>Note that a significant speed increase is achieved if <var class="Arg">F</var> is specified, even when all elements of <var class="Arg">obj</var> already have elements over <var class="Arg">F</var>.</p>
+
+<p>Every vector in <var class="Arg">obj</var> can be a finite field vector over <var class="Arg">F</var> or a vector over `Integers'. In the last case, it is converted to <var class="Arg">F</var> or, if omitted, to the smallest Galois field possible.</p>
+
+<p>Every string in <var class="Arg">obj</var> must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over <var class="Arg">F</var> or, if <var class="Arg">F</var> is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no fin [...]
+
+<p>Every polynomial in <var class="Arg">obj</var> is converted to a codeword of length <var class="Arg">n</var> or, if omitted, of a length dictated by the degree of the polynomial. If <var class="Arg">F</var> is specified, a polynomial in <var class="Arg">obj</var> must be over <var class="Arg">F</var>.</p>
+
+<p>Every element of <var class="Arg">obj</var> that is already a codeword is changed to a codeword of length <var class="Arg">n</var>. If no <var class="Arg">n</var> was specified, the codeword doesn't change. If <var class="Arg">F</var> is specified, the codeword must have base field <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := Codeword([0,1,1,1,0]);
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c ); 
+[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
+gap> c2 := Codeword([0,1,1,1,0], GF(3));
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c2 );
+[ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
+gap> Codeword([c, c2, "0110"]);
+[ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
+gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+Z(2)^0+x_1^2
+gap> Codeword(p);
+x^2 + 1 
+</pre></td></tr></table>
+
+<p>This command can also be called using the syntax <code class="code">Codeword(obj,C)</code>. In this format, the elements of <var class="Arg">obj</var> are converted to elements of the same ambient vector space as the elements of a code <var class="Arg">C</var>. The command <code class="code">Codeword(c,C)</code> is the same as calling <code class="code">Codeword(c,n,F)</code>, where <var class="Arg">n</var> is the word length of <var class="Arg">C</var> and the <var class="Arg">F</var [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := WholeSpaceCode(7,GF(5));
+a cyclic [7,7,1]0 whole space code over GF(5)
+gap> Codeword(["0220110", [1,1,1]], C);
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
+gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> Codeword("1000000000",C);
+[ 1 0 0 0 0 0 0 0 0 0 ]
+gap> Codeword("1000000000",10,GF(3));
+[ 1 0 0 0 0 0 0 0 0 0 ]
+</pre></td></tr></table>
+
+<p><a id="X7E7ED91C79BF3EF3" name="X7E7ED91C79BF3EF3"></a></p>
+
+<h5>3.1-2 CodewordNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodewordNr</code>( <var class="Arg">C, list</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodewordNr</code> returns a list of codewords of <var class="Arg">C</var>. <var class="Arg">list</var> may be a list of integers or a single integer. For each integer of <var class="Arg">list</var>, the corresponding codeword of <var class="Arg">C</var> is returned. The correspondence of a number i with a codeword is determined as follows: if a list of elements of <var class="Arg">C</var> is available, the i^th element is taken. Otherwise, it is calculated by multip [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> R := ReedSolomonCode(2,2);
+a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
+gap> AsSSortedList(R);
+[ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
+gap> CodewordNr(R, [1,3]);
+[ [ 0 0 ], [ 2 2 ] ]
+</pre></td></tr></table>
+
+<p><a id="X7F25479781E6E109" name="X7F25479781E6E109"></a></p>
+
+<h5>3.1-3 IsCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCodeword</code> returns `true' if <var class="Arg">obj</var>, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if <var class="Arg">obj</var> is an unbound variable.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCodeword(1);
+false
+gap> IsCodeword(ReedMullerCode(2,3));
+false
+gap> IsCodeword("11111");
+false
+gap> IsCodeword(Codeword("11111"));
+true 
+</pre></td></tr></table>
+
+<p><a id="X8253374284B475B6" name="X8253374284B475B6"></a></p>
+
+<h4>3.2 <span class="Heading">Comparisons of Codewords</span></h4>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>3.2-1 =</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> =</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The equality operator <code class="code">c1 = c2</code> evaluates to `true' if the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var> are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison.</p>
+
+<p>Comparing codewords with objects of other types is not recommended, although it is possible. If <var class="Arg">c2</var> is the codeword, the other object <var class="Arg">c1</var> is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If <var class="Arg">c1</var> is the codeword, then problems may arise if <var class="Arg">c2</var> is a polynomial. In that case, the comparison always yields a ` [...]
+
+<p>The equality operator is also denoted <code class="code">EQ</code>, and <code class="code">EQ(c1,c2)</code> is the same as <code class="code">c1 = c2</code>. There is also an inequality operator, < >, or <code class="code">not EQ</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+Z(2)^0+x_1^3
+gap> c := Codeword(P, GF(2));
+x^3 + 1
+gap> P = c;        # codeword operation
+true
+gap> c2 := Codeword("1001", GF(2));
+[ 1 0 0 1 ]
+gap> c = c2;
+true 
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c1:=Random(C);
+[ 1 0 0 1 1 0 0 ]
+gap> c2:=Random(C);
+[ 0 1 0 0 1 0 1 ]
+gap> EQ(c1,c2);
+false
+gap> not EQ(c1,c2);
+true
+</pre></td></tr></table>
+
+<p><a id="X7ADE7E95867A14E1" name="X7ADE7E95867A14E1"></a></p>
+
+<h4>3.3 <span class="Heading">Arithmetic Operations for Codewords</span></h4>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>3.3-1 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed.</p>
+
+<p>The operator <code class="code">+</code> evaluates to the sum of the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> c:=Random(C);
+[ 1 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"2000000000");
+[ 0 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"1000000000");
+</pre></td></tr></table>
+
+<p>The last command returns a GAP ERROR since the `codeword' which <strong class="pkg">GUAVA</strong> associates to "1000000000" belongs to GF(2) and not GF(3).</p>
+
+<p><a id="X81B1391281B13912" name="X81B1391281B13912"></a></p>
+
+<h5>3.3-2 -</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> -</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Similar to addition: the operator <code class="code">-</code> evaluates to the difference of the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var>.</p>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>3.3-3 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">v, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator <code class="code">v+C</code> evaluates to the coset code of code <var class="Arg">C</var> after adding a `codeword' <var class="Arg">v</var> to all codewords in <var class="Arg">C</var>. Note that if c in C then mathematically c+C=C but <strong class="pkg">GUAVA</strong> only sees them equal as <em>sets</em>. See <code class="func">CosetCode</code> (<a href="chap6.html#X8799F4BF81B0842B"><b>6.1-17</b></a>).</p>
+
+<p>Note that the command <code class="code">C+v</code> returns the same output as the command <code class="code">v+C</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 0 0 0 0 0 0 0 ]
+gap> c+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> c+C=C;
+true
+gap> IsLinearCode(c+C);
+false
+gap> v:=Codeword("100000000");
+[ 1 0 0 0 0 0 0 0 0 ]
+gap> v+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> C=v+C;
+false
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
+gap> v:=Codeword("0011");
+[ 0 0 1 1 ]
+gap> C+v;
+[ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
+gap> Elements(C+v);
+[ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p>In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (<code class="code">Finite [...]
+
+<p>Some other code-oriented operations with codewords are described in <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>.</p>
+
+<p><a id="X7BBA5DCD7A8BD60D" name="X7BBA5DCD7A8BD60D"></a></p>
+
+<h4>3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></h4>
+
+<p><a id="X87C8B0B178496F6A" name="X87C8B0B178496F6A"></a></p>
+
+<h5>3.4-1 VectorCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VectorCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">obj</var> can be a code word or a list of code words. This function returns the corresponding vectors over a finite field.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("011011");; 
+gap> VectorCodeword(a);
+[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]
+</pre></td></tr></table>
+
+<p><a id="X822465E884D0F484" name="X822465E884D0F484"></a></p>
+
+<h5>3.4-2 PolyCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PolyCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PolyCodeword</code> returns a polynomial or a list of polynomials over a Galois field, converted from <var class="Arg">obj</var>. The object <var class="Arg">obj</var> can be a codeword, or a list of codewords.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("011011");; 
+gap> PolyCodeword(a);
+x_1+x_1^2+x_1^4+x_1^5
+</pre></td></tr></table>
+
+<p><a id="X81D3230A797FE6E3" name="X81D3230A797FE6E3"></a></p>
+
+<h4>3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></h4>
+
+<p><a id="X7E3E174B7954AA6B" name="X7E3E174B7954AA6B"></a></p>
+
+<h5>3.5-1 TreatAsVector</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TreatAsVector</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TreatAsVector</code> adapts the codewords in <var class="Arg">obj</var> to make sure they are printed as vectors. <var class="Arg">obj</var> may be a codeword or a list of codewords. Elements of <var class="Arg">obj</var> that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial.</p>
+
+<p>Note that this <em>only</em> changes the way a codeword is <em>printed</em>. <code class="code">TreatAsVector</code> returns nothing, it is called only for its side effect. The function <code class="code">VectorCodeword</code> converts codewords to vectors (see <code class="func">VectorCodeword</code> (<a href="chap3.html#X87C8B0B178496F6A"><b>3.4-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> TreatAsVector(c);
+gap> c;
+[ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X7A6828148490BD2E" name="X7A6828148490BD2E"></a></p>
+
+<h5>3.5-2 TreatAsPoly</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TreatAsPoly</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TreatAsPoly</code> adapts the codewords in <var class="Arg">obj</var> to make sure they are printed as polynomials. <var class="Arg">obj</var> may be a codeword or a list of codewords. Elements of <var class="Arg">obj</var> that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first ele [...]
+
+<p>Note that this <em>only</em> changes the way a codeword is <em>printed</em>. <code class="code">TreatAsPoly</code> returns nothing, it is called only for its side effect. The function <code class="code">PolyCodeword</code> converts codewords to polynomials (see <code class="func">PolyCodeword</code> (<a href="chap3.html#X822465E884D0F484"><b>3.4-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("00001",GF(2));
+[ 0 0 0 0 1 ]
+gap> TreatAsPoly(a); a;
+x^4
+gap> b := NullWord(6,GF(4));
+[ 0 0 0 0 0 0 ]
+gap> TreatAsPoly(b); b;
+0 
+</pre></td></tr></table>
+
+<p><a id="X805BF7147C68CACD" name="X805BF7147C68CACD"></a></p>
+
+<h4>3.6 <span class="Heading">
+Other Codeword Functions
+</span></h4>
+
+<p><a id="X8000B6597EF0282F" name="X8000B6597EF0282F"></a></p>
+
+<h5>3.6-1 NullWord</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NullWord</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Other uses: <code class="code">NullWord( n )</code> (default F=GF(2)) and <code class="code">NullWord( C )</code>. <code class="code">NullWord</code> returns a codeword of length <var class="Arg">n</var> over the field <var class="Arg">F</var> of only zeros. The integer <var class="Arg">n</var> must be greater then zero. If only a code <var class="Arg">C</var> is specified, <code class="code">NullWord</code> will return a null word with both the word length and the Galois field of <va [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> NullWord(8);
+[ 0 0 0 0 0 0 0 0 ]
+gap> Codeword("0000") = NullWord(4);
+true
+gap> NullWord(5,GF(16));
+[ 0 0 0 0 0 ]
+gap> NullWord(ExtendedTernaryGolayCode());
+[ 0 0 0 0 0 0 0 0 0 0 0 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X7CDA1B547D55E6FB" name="X7CDA1B547D55E6FB"></a></p>
+
+<h5>3.6-2 DistanceCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistanceCodeword</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistanceCodeword</code> returns the Hamming distance from <var class="Arg">c1</var> to <var class="Arg">c2</var>. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, <code class="code">DistanceCodeword</code> always returns an integer between zero and the word length of the codewords.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+gap> DistanceCodeword(a, b);
+4
+gap> DistanceCodeword(b, a);
+4
+gap> DistanceCodeword(a, a);
+0 
+</pre></td></tr></table>
+
+<p><a id="X7B689C0284AC4296" name="X7B689C0284AC4296"></a></p>
+
+<h5>3.6-3 Support</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Support</code>( <var class="Arg">c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Support</code> returns a set of integers indicating the positions of the non-zero entries in a codeword <var class="Arg">c</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("012320023002");; Support(a);
+[ 2, 3, 4, 5, 8, 9, 12 ]
+gap> Support(NullWord(7));
+[  ] 
+</pre></td></tr></table>
+
+<p>The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
+gap> S := Union(List(L, i -> Support(i)));
+[ 1, 2, 3, 5 ]
+gap> Length(S);
+4 
+</pre></td></tr></table>
+
+<p><a id="X7AD61C237D8D3849" name="X7AD61C237D8D3849"></a></p>
+
+<h5>3.6-4 WeightCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightCodeword</code>( <var class="Arg">c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightCodeword</code> returns the weight of a codeword c, the number of non-zero entries in <var class="Arg">c</var>. As a result, <code class="code">WeightCodeword</code> always returns an integer between zero and the word length of the codeword.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WeightCodeword(Codeword("22222"));
+5
+gap> WeightCodeword(NullWord(3));
+0
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+3 
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap2.html">Previous Chapter</a>    <a href="chap4.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap3.txt b/doc/chap3.txt
new file mode 100644
index 0000000..8595106
--- /dev/null
+++ b/doc/chap3.txt
@@ -0,0 +1,505 @@
+  
+  3. Codewords
+  
+  Let GF(q) denote a finite field with q (a prime power) elements. A code is a
+  subset C of some finite-dimensional vector space V over GF(q). The length of
+  C  is the dimension of V. Usually, V=GF(q)^n and the length is the number of
+  coordinate  entries.  When  C is itself a vector space over GF(q) then it is
+  called  a  linear  code  and the dimension of C is its dimension as a vector
+  space over GF(q).
+  
+  In  GUAVA, a `codeword' is a GAP record, with one of its components being an
+  element in V. Likewise, a `code' is a GAP record, with one of its components
+  being a subset (or subspace with given basis, if C is linear) of V.
+  
+  ---------------------------  Example  ----------------------------
+      gap> C:=RandomLinearCode(20,10,GF(4));
+      a  [20,10,?] randomly generated code over GF(4)
+      gap> c:=Random(C);
+      [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
+      gap> NamesOfComponents(C);
+      [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+        "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
+         "Representative", "ZeroImmutable" ]
+      gap> NamesOfComponents(c);
+      [ "VectorCodeword", "WordLength", "treatAsPoly" ]
+      gap> c!.VectorCodeword;
+      [ immutable compressed vector length 20 over GF(4) ] 
+      gap> Display(last);
+      [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
+        Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
+        Z(2)^0, 0*Z(2) ]
+      gap> C!.Dimension;
+      10
+  ------------------------------------------------------------------
+  
+  Mathematically,  a  `codeword'  is  an element of a code C, but in GUAVA the
+  Codeword and VectorCodeword commands have implementations which do not check
+  if  the  codeword  belongs  to C (i.e., are independent of the code itself).
+  They  exist  primarily  to  make  it  easier for the user to construct a the
+  associated GAP record. Using these commands, one can enter into a GAP both a
+  codeword c (belonging to C) and a received word r (not belonging to C) using
+  the  same  command.  The  user  can input codewords in different formats (as
+  strings, vectors, and polynomials), and output information is formatted in a
+  readable way.
+  
+  A codeword c in a linear code C arises in practice by an initial encoding of
+  a  'block'  message  m,  adding  enough  redundancy  to recover m after c is
+  transmitted  via a 'noisy' communication medium. In GUAVA, for linear codes,
+  the  map mlongmapsto c is computed using the command c:=m*C and recovering m
+  from  c  is obtained by the command InformationWord(C,c). These commands are
+  explained more below.
+  
+  Many  operations  are  available on codewords themselves, although codewords
+  also work together with codes (see chapter 4. on Codes).
+  
+  The  first  section  describes  how  codewords are constructed (see Codeword
+  (3.1-1)   and  IsCodeword  (3.1-3)).  Sections  3.2  and  3.3  describe  the
+  arithmetic   operations   applicable  to  codewords.  Section  3.4  describe
+  functions  that  convert  codewords  back  to  vectors  or  polynomials (see
+  VectorCodeword  (3.4-1) and PolyCodeword (3.4-2)). Section ???Functions that
+  Change  the Display Form of a Codeword??? describe functions that change the
+  way  a  codeword  is  displayed  (see  TreatAsVector (3.5-1) and TreatAsPoly
+  (3.5-2)).  Finally, Section 3.6 describes a function to generate a null word
+  (see  NullWord  (3.6-1))  and  some  functions  for extracting properties of
+  codewords  (see DistanceCodeword (3.6-2), Support (3.6-3) and WeightCodeword
+  (3.6-4)).
+  
+  
+  3.1 Construction of Codewords
+  
+  3.1-1 Codeword
+  
+  > Codeword( obj[, n][, F] ) ________________________________________function
+  
+  Codeword returns a codeword or a list of codewords constructed from obj. The
+  object  obj  can  be  a vector, a string, a polynomial or a codeword. It may
+  also be a list of those (even a mixed list).
+  
+  If a number n is specified, all constructed codewords have length n. This is
+  the  only  way  to  make  sure  that  all  elements  of obj are converted to
+  codewords  of  the  same  length. Elements of obj that are longer than n are
+  reduced in length by cutting of the last positions. Elements of obj that are
+  shorter  than  n  are  lengthened  by  adding  zeros  at the end. If no n is
+  specified, each constructed codeword is handled individually.
+  
+  If  a  Galois  field F is specified, all codewords are constructed over this
+  field.  This  is  the  only  way  to  make sure that all elements of obj are
+  converted  to  the  same  field F (otherwise they are converted one by one).
+  Note  that all elements of obj must have elements over F or over `Integers'.
+  Converting  from  one  Galois  field  to  another is not allowed. If no F is
+  specified, vectors or strings with integer elements will be converted to the
+  smallest Galois field possible.
+  
+  Note  that  a significant speed increase is achieved if F is specified, even
+  when all elements of obj already have elements over F.
+  
+  Every  vector  in  obj  can be a finite field vector over F or a vector over
+  `Integers'.  In  the  last case, it is converted to F or, if omitted, to the
+  smallest Galois field possible.
+  
+  Every  string  in obj must be a string of numbers, without spaces, commas or
+  any  other  characters.  These  numbers  must  be from 0 to 9. The string is
+  converted to a codeword over F or, if F is omitted, over the smallest Galois
+  field possible. Note that since all numbers in the string are interpreted as
+  one-digit  numbers,  Galois  fields  of size larger than 10 are not properly
+  represented when using strings. In fact, no finite field of size larger than
+  11 arises in this fashion at all.
+  
+  Every  polynomial  in  obj  is  converted  to  a codeword of length n or, if
+  omitted,  of  a  length  dictated  by  the degree of the polynomial. If F is
+  specified, a polynomial in obj must be over F.
+  
+  Every  element of obj that is already a codeword is changed to a codeword of
+  length  n.  If  no  n  was  specified,  the codeword doesn't change. If F is
+  specified, the codeword must have base field F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> c := Codeword([0,1,1,1,0]);
+    [ 0 1 1 1 0 ]
+    gap> VectorCodeword( c ); 
+    [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
+    gap> c2 := Codeword([0,1,1,1,0], GF(3));
+    [ 0 1 1 1 0 ]
+    gap> VectorCodeword( c2 );
+    [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
+    gap> Codeword([c, c2, "0110"]);
+    [ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
+    gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+    Z(2)^0+x_1^2
+    gap> Codeword(p);
+    x^2 + 1 
+  ------------------------------------------------------------------
+  
+  This  command  can  also be called using the syntax Codeword(obj,C). In this
+  format,  the  elements  of obj are converted to elements of the same ambient
+  vector  space  as the elements of a code C. The command Codeword(c,C) is the
+  same  as  calling Codeword(c,n,F), where n is the word length of C and the F
+  is the ground field of C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := WholeSpaceCode(7,GF(5));
+    a cyclic [7,7,1]0 whole space code over GF(5)
+    gap> Codeword(["0220110", [1,1,1]], C);
+    [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
+    gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
+    [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
+    gap> C:=RandomLinearCode(10,5,GF(3));
+    a linear [10,5,1..3]3..5 random linear code over GF(3)
+    gap> Codeword("1000000000",C);
+    [ 1 0 0 0 0 0 0 0 0 0 ]
+    gap> Codeword("1000000000",10,GF(3));
+    [ 1 0 0 0 0 0 0 0 0 0 ]
+  ------------------------------------------------------------------
+  
+  3.1-2 CodewordNr
+  
+  > CodewordNr( C, list ) ____________________________________________function
+  
+  CodewordNr  returns a list of codewords of C. list may be a list of integers
+  or a single integer. For each integer of list, the corresponding codeword of
+  C  is  returned.  The  correspondence  of  a  number  i  with  a codeword is
+  determined  as  follows:  if  a list of elements of C is available, the i^th
+  element  is taken. Otherwise, it is calculated by multiplication of the i^th
+  information  vector  by  the generator matrix or generator polynomial, where
+  the  information  vectors  are ordered lexicographically. In particular, the
+  returned  codeword(s) could be a vector or a polynomial. So CodewordNr(C, i)
+  is  equal  to AsSSortedList(C)[i], described in the next chapter. The latter
+  function  first calculates the set of all the elements of C and then returns
+  the  i^th  element  of that set, whereas the former only calculates the i^th
+  codeword.
+  
+  ---------------------------  Example  ----------------------------
+    gap> B := BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> c := CodewordNr(B, 4);
+    x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+    gap> R := ReedSolomonCode(2,2);
+    a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
+    gap> AsSSortedList(R);
+    [ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
+    gap> CodewordNr(R, [1,3]);
+    [ [ 0 0 ], [ 2 2 ] ]
+  ------------------------------------------------------------------
+  
+  3.1-3 IsCodeword
+  
+  > IsCodeword( obj ) ________________________________________________function
+  
+  IsCodeword  returns `true' if obj, which can be an object of arbitrary type,
+  is  of  the codeword type and `false' otherwise. The function will signal an
+  error if obj is an unbound variable.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsCodeword(1);
+    false
+    gap> IsCodeword(ReedMullerCode(2,3));
+    false
+    gap> IsCodeword("11111");
+    false
+    gap> IsCodeword(Codeword("11111"));
+    true 
+  ------------------------------------------------------------------
+  
+  
+  3.2 Comparisons of Codewords
+  
+  3.2-1 =
+  
+  > =( c1, c2 ) ______________________________________________________function
+  
+  The equality operator c1 = c2 evaluates to `true' if the codewords c1 and c2
+  are  equal,  and  to `false' otherwise. Note that codewords are equal if and
+  only  if  their  base  vectors  are equal. Whether they are represented as a
+  vector or polynomial has nothing to do with the comparison.
+  
+  Comparing codewords with objects of other types is not recommended, although
+  it  is  possible.  If  c2  is  the  codeword,  the  other object c1 is first
+  converted  to  a  codeword,  after which comparison is possible. This way, a
+  codeword  can be compared with a vector, polynomial, or string. If c1 is the
+  codeword,  then  problems may arise if c2 is a polynomial. In that case, the
+  comparison  always  yields  a  `false', because the polynomial comparison is
+  called.
+  
+  The  equality operator is also denoted EQ, and EQ(c1,c2) is the same as c1 =
+  c2. There is also an inequality operator, < >, or not EQ.
+  
+  ---------------------------  Example  ----------------------------
+    gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+    Z(2)^0+x_1^3
+    gap> c := Codeword(P, GF(2));
+    x^3 + 1
+    gap> P = c;        # codeword operation
+    true
+    gap> c2 := Codeword("1001", GF(2));
+    [ 1 0 0 1 ]
+    gap> c = c2;
+    true 
+    gap> C:=HammingCode(3);
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> c1:=Random(C);
+    [ 1 0 0 1 1 0 0 ]
+    gap> c2:=Random(C);
+    [ 0 1 0 0 1 0 1 ]
+    gap> EQ(c1,c2);
+    false
+    gap> not EQ(c1,c2);
+    true
+  ------------------------------------------------------------------
+  
+  
+  3.3 Arithmetic Operations for Codewords
+  
+  3.3-1 +
+  
+  > +( c1, c2 ) ______________________________________________________function
+  
+  The  following  operations  are always available for codewords. The operands
+  must  have  a  common base field, and must have the same length. No implicit
+  conversions are performed.
+  
+  The operator + evaluates to the sum of the codewords c1 and c2.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(3));
+    a linear [10,5,1..3]3..5 random linear code over GF(3)
+    gap> c:=Random(C);
+    [ 1 0 2 2 2 2 1 0 2 0 ]
+    gap> Codeword(c+"2000000000");
+    [ 0 0 2 2 2 2 1 0 2 0 ]
+    gap> Codeword(c+"1000000000");
+  ------------------------------------------------------------------
+  
+  The  last  command  returns  a  GAP  ERROR  since the `codeword' which GUAVA
+  associates to "1000000000" belongs to GF(2) and not GF(3).
+  
+  3.3-2 -
+  
+  > -( c1, c2 ) ______________________________________________________function
+  
+  Similar  to  addition:  the  operator  -  evaluates to the difference of the
+  codewords c1 and c2.
+  
+  3.3-3 +
+  
+  > +( v, C ) ________________________________________________________function
+  
+  The  operator  v+C  evaluates  to  the  coset  code of code C after adding a
+  `codeword'  v to all codewords in C. Note that if c in C then mathematically
+  c+C=C but GUAVA only sees them equal as sets. See CosetCode (6.1-17).
+  
+  Note that the command C+v returns the same output as the command v+C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5);
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> c:=Random(C);
+    [ 0 0 0 0 0 0 0 0 0 0 ]
+    gap> c+C;
+    [ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+    gap> c+C=C;
+    true
+    gap> IsLinearCode(c+C);
+    false
+    gap> v:=Codeword("100000000");
+    [ 1 0 0 0 0 0 0 0 0 ]
+    gap> v+C;
+    [ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+    gap> C=v+C;
+    false
+    gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+    a linear [4,2,1]1 code defined by generator matrix over GF(2)
+    gap> Elements(C);
+    [ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
+    gap> v:=Codeword("0011");
+    [ 0 0 1 1 ]
+    gap> C+v;
+    [ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
+    gap> Elements(C+v);
+    [ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]
+  ------------------------------------------------------------------
+  
+  In general, the operations just described can also be performed on codewords
+  expressed   as  vectors,  strings  or  polynomials,  although  this  is  not
+  recommended.  The  vector,  string  or  polynomial  is  first converted to a
+  codeword,  after  which  the  normal  operation is performed. For this to go
+  right,  make  sure  that at least one of the operands is a codeword. Further
+  more, it will not work when the right operand is a polynomial. In that case,
+  the  polynomial operations (FiniteFieldPolynomialOps) are called, instead of
+  the codeword operations (CodewordOps).
+  
+  Some other code-oriented operations with codewords are described in 4.2.
+  
+  
+  3.4 Functions that Convert Codewords to Vectors or Polynomials
+  
+  3.4-1 VectorCodeword
+  
+  > VectorCodeword( obj ) ____________________________________________function
+  
+  Here  obj  can be a code word or a list of code words. This function returns
+  the corresponding vectors over a finite field.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Codeword("011011");; 
+    gap> VectorCodeword(a);
+    [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]
+  ------------------------------------------------------------------
+  
+  3.4-2 PolyCodeword
+  
+  > PolyCodeword( obj ) ______________________________________________function
+  
+  PolyCodeword  returns  a  polynomial  or a list of polynomials over a Galois
+  field,  converted  from  obj. The object obj can be a codeword, or a list of
+  codewords.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Codeword("011011");; 
+    gap> PolyCodeword(a);
+    x_1+x_1^2+x_1^4+x_1^5
+  ------------------------------------------------------------------
+  
+  
+  3.5 Functions that Change the Display Form of a Codeword
+  
+  3.5-1 TreatAsVector
+  
+  > TreatAsVector( obj ) _____________________________________________function
+  
+  TreatAsVector  adapts  the codewords in obj to make sure they are printed as
+  vectors.  obj may be a codeword or a list of codewords. Elements of obj that
+  are  not codewords are ignored. After this function is called, the codewords
+  will  be  treated as vectors. The vector representation is obtained by using
+  the coefficient list of the polynomial.
+  
+  Note  that  this  only  changes the way a codeword is printed. TreatAsVector
+  returns  nothing,  it  is  called  only  for  its  side effect. The function
+  VectorCodeword converts codewords to vectors (see VectorCodeword (3.4-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> B := BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> c := CodewordNr(B, 4);
+    x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+    gap> TreatAsVector(c);
+    gap> c;
+    [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 
+  ------------------------------------------------------------------
+  
+  3.5-2 TreatAsPoly
+  
+  > TreatAsPoly( obj ) _______________________________________________function
+  
+  TreatAsPoly  adapts  the  codewords  in obj to make sure they are printed as
+  polynomials.  obj  may be a codeword or a list of codewords. Elements of obj
+  that  are  not  codewords  are  ignored.  After this function is called, the
+  codewords  will  be  treated  as  polynomials.  The finite field vector that
+  defines  the  codeword  is  used  as  a  coefficient  list of the polynomial
+  representation,  where the first element of the vector is the coefficient of
+  degree zero, the second element is the coefficient of degree one, etc, until
+  the last element, which is the coefficient of highest degree.
+  
+  Note  that  this  only  changes  the  way a codeword is printed. TreatAsPoly
+  returns  nothing,  it  is  called  only  for  its  side effect. The function
+  PolyCodeword converts codewords to polynomials (see PolyCodeword (3.4-2)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Codeword("00001",GF(2));
+    [ 0 0 0 0 1 ]
+    gap> TreatAsPoly(a); a;
+    x^4
+    gap> b := NullWord(6,GF(4));
+    [ 0 0 0 0 0 0 ]
+    gap> TreatAsPoly(b); b;
+    0 
+  ------------------------------------------------------------------
+  
+  
+  3.6 Other Codeword Functions
+  
+  3.6-1 NullWord
+  
+  > NullWord( n, F ) _________________________________________________function
+  
+  Other  uses:  NullWord(  n  )  (default F=GF(2)) and NullWord( C ). NullWord
+  returns a codeword of length n over the field F of only zeros. The integer n
+  must  be  greater  then  zero.  If only a code C is specified, NullWord will
+  return a null word with both the word length and the Galois field of C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> NullWord(8);
+    [ 0 0 0 0 0 0 0 0 ]
+    gap> Codeword("0000") = NullWord(4);
+    true
+    gap> NullWord(5,GF(16));
+    [ 0 0 0 0 0 ]
+    gap> NullWord(ExtendedTernaryGolayCode());
+    [ 0 0 0 0 0 0 0 0 0 0 0 0 ] 
+  ------------------------------------------------------------------
+  
+  3.6-2 DistanceCodeword
+  
+  > DistanceCodeword( c1, c2 ) _______________________________________function
+  
+  DistanceCodeword  returns the Hamming distance from c1 to c2. Both variables
+  must  be  codewords  with  equal word length over the same Galois field. The
+  Hamming  distance  between  two  words is the number of places in which they
+  differ. As a result, DistanceCodeword always returns an integer between zero
+  and the word length of the codewords.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+    gap> DistanceCodeword(a, b);
+    4
+    gap> DistanceCodeword(b, a);
+    4
+    gap> DistanceCodeword(a, a);
+    0 
+  ------------------------------------------------------------------
+  
+  3.6-3 Support
+  
+  > Support( c ) _____________________________________________________function
+  
+  Support  returns  a set of integers indicating the positions of the non-zero
+  entries in a codeword c.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Codeword("012320023002");; Support(a);
+    [ 2, 3, 4, 5, 8, 9, 12 ]
+    gap> Support(NullWord(7));
+    [  ] 
+  ------------------------------------------------------------------
+  
+  The  support  of a list with codewords can be calculated by taking the union
+  of  the  individual supports. The weight of the support is the length of the
+  set.
+  
+  ---------------------------  Example  ----------------------------
+    gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
+    gap> S := Union(List(L, i -> Support(i)));
+    [ 1, 2, 3, 5 ]
+    gap> Length(S);
+    4 
+  ------------------------------------------------------------------
+  
+  3.6-4 WeightCodeword
+  
+  > WeightCodeword( c ) ______________________________________________function
+  
+  WeightCodeword  returns  the  weight of a codeword c, the number of non-zero
+  entries  in c. As a result, WeightCodeword always returns an integer between
+  zero and the word length of the codeword.
+  
+  ---------------------------  Example  ----------------------------
+    gap> WeightCodeword(Codeword("22222"));
+    5
+    gap> WeightCodeword(NullWord(3));
+    0
+    gap> C := HammingCode(3);
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+    3 
+  ------------------------------------------------------------------
+  
diff --git a/doc/chap4.html b/doc/chap4.html
new file mode 100644
index 0000000..5d7ab81
--- /dev/null
+++ b/doc/chap4.html
@@ -0,0 +1,2103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 4: Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap3.html">Previous Chapter</a>    <a href="chap5.html">Next Chapter</a>   </div>
+
+<p><a id="X85FDDF0B7B7D87FB" name="X85FDDF0B7B7D87FB"></a></p>
+<div class="ChapSects"><a href="chap4.html#X85FDDF0B7B7D87FB">4. <span class="Heading">Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7ECE60E1873B49A6">4.1 <span class="Heading">Comparisons of Codes</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.1-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X832DA51986A3882C">4.2 <span class="Heading">
+Operations for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F2703417F270341">4.2-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-2 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-3 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8744BA5E78BCF3F9">4.2-4 InformationWord</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X864091AA7D4AFE86">4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1 in</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79CA175481F8105F">4.3-2 IsSubset</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F71186281DEA83A">4.3-3 IsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B24748A7CE8D4B9">4.3-4 IsLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X850C23D07C9A9B19">4.3-5 IsCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85E3BD26856424F7">4.3-6 IsPerfectCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X789380D28018EC3F">4.3-7 IsMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80166D8D837FEB58">4.3-8 IsSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B2A0CC481D2366F">4.3-9 IsSelfOrthogonalCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8358D43981EBE970">4.3-10 IsDoublyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79ACAEF5865414A0">4.3-11 IsSinglyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CE150ED7C3DC455">4.3-12 IsEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13 IsSelfComplementaryCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFD3844859B20BF">4.3-14 IsAffineCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X861D32FB81EF0D77">4.3-15 IsAlmostAffineCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X86442DCD7A0B2146">4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X843034687D9C75B0">4.4-1 IsEquivalent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X874DED8E86BC180B">4.4-2 CodeIsomorphism</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87677B0787B4461A">4.4-3 AutomorphismGroup</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79F3261F86C29F6D">4.4-4 PermutationAutomorphismGroup</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X866EB39483DDAE72">4.5 <span class="Heading">
+Domain Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X808A4061809A6E67">4.5-1 IsFinite</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X858ADA3B7A684421">4.5-2 Size</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X86F070E0807DC34E">4.5-3 LeftActingDomain</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E6926C6850E7C4E">4.5-4 Dimension</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X856D927378C33548">4.5-5 AsSSortedList</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X823827927D6A8235">4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFA64D97A1F39A3">4.6-1 Print</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81FB5BE27903EC32">4.6-2 String</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83A5C59278E13248">4.6-3 Display</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CD08C8C780543C4">4.6-4 DisplayBoundsInfo</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D0F48B685A3ECDD">4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X817224657C9829C4">4.7-1 GeneratorMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85D4B26E7FB38D57">4.7-2 CheckMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X78E33C3A843B0261">4.7-3 GeneratorPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7C45AA317BB1195F">4.7-4 CheckPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F4CB9DB7CD97178">4.7-5 RootsOfCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X8170B52D7C154247">4.8 <span class="Heading">
+Parameters of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A36C3C67B0062E8">4.8-1 WordLength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E33FD56792DBF3D">4.8-2 Redundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B31613D8538BD29">4.8-3 MinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X813F226F855590EE">4.8-4 MinimumDistanceLeon</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X84EDF67B86B4154C">4.8-5 MinimumWeight</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X823B9A797EE42F6D">4.8-6 DecreaseMinimumDistanceUpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A679B0A7816B030">4.8-7 MinimumDistanceRandom</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A195E317D2AB7CE">4.8-8 CoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81004B007EC5DF58">4.8-9 SetCoveringRadius</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X806384B4815EFF2E">4.9 <span class="Heading">
+Distributions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AEE64467FB1E0B9">4.9-1 MinimumWeightWords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8728BCC9842A6E5D">4.9-2 WeightDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X871FD301820717A4">4.9-3 InnerDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87AD54F87C5EE77E">4.9-4 DistancesDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8495870687195324">4.9-5 OuterDistribution</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D9A39BF801948C8">4.10 <span class="Heading">
+Decoding Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A42FF7D87FC34AC">4.10-1 Decode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D870C9387C47D9F">4.10-2 Decodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D48DE2A84474C6A">4.10-3 GeneralizedReedSolomonDecoderGao</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CFF98D483502053">4.10-4 GeneralizedReedSolomonListDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80E17FA27DCAB676">4.10-5 BitFlipDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B88DEB37F28404A">4.10-6 NearestNeighborGRSDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X825E35757D778787">4.10-7 NearestNeighborDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D02E0FE8735D3E6">4.10-8 Syndrome</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B9E71987E4294A7">4.10-9 SyndromeTable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8642D0BD789DA9B5">4.10-10 StandardArray</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83231E717CCB0247">4.10-11 PermutationDecode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85B692177E2A745D">4.10-12 PermutationDecodeNC</a></span>
+</div>
+</div>
+
+<h3>4. <span class="Heading">Codes</span></h3>
+
+<p>A <em>code</em> is a set of codewords (recall a codeword in <strong class="pkg">GUAVA</strong> is simply a sequence of elements of a finite field GF(q), where q is a prime power). We call these the <em>elements</em> of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter <a href="chap3.html#X836BAA9A7EBD08B1"><b>3.</b></a>.</p>
+
+<p>In <strong class="pkg">GUAVA</strong>, codes can be a set specified by its elements (this will be called an <em>unrestricted code</em>), by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code).</p>
+
+<p>Any code can be defined by its elements. If you like, you can give the code a name.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+</pre></td></tr></table>
+
+<p>An (n,M,d) code is a code with word <em>length</em> n, <em>size</em> M and <em>minimum distance</em> d. If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So</p>
+
+
+<pre class="normal">
+
+a (4,3,1..4)2..4 code over GF(2)
+
+</pre>
+
+<p>means a binary unrestricted code of length 4, with 3 elements and the minimum distance is greater than or equal to 1 and less than or equal to 4 and the covering radius is greater than or equal to 2 and less than or equal to 4.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+gap> MinimumDistance(C);
+2
+gap> C;
+a (4,3,2)2..4 example code over GF(2) 
+</pre></td></tr></table>
+
+<p>If the set of elements is a linear subspace of GF(q)^n, the code is called <em>linear</em>. If a code is linear, it can be defined by its <em>generator matrix</em> or <em>parity check matrix</em>. By definition, the rows of the generator matrix is a basis for the code (as a vector space over GF(q)). By definition, the rows of the parity check matrix is a basis for the dual space of the code,</p>
+
+<p class="pcenter">
+C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
+a linear [3,2,1..2]1 demo code over GF(3) 
+</pre></td></tr></table>
+
+<p>So a linear [n, k, d]r code is a code with word <em>length</em> n, <em>dimension</em> k, <em>minimum distance</em> d and <em>covering radius</em> r.</p>
+
+<p>If the code is linear and all cyclic shifts of its codewords (regarded as n-tuples) are again codewords, the code is called <em>cyclic</em>. All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial x^n -1, where n is the word length of the code. Such a polynomial is called a <em>generator polynomial</em> The generator polynomial must divide x^n-1 and its quotient is called a <em>check polynomial</em>. Multiplying a codeword in a cyclic code by the check  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+</pre></td></tr></table>
+
+<p>It is possible that <strong class="pkg">GUAVA</strong> does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function <code class="code">ElementsCode</code> (see <code class="func">ElementsCode</code> (<a href="chap5.html#X81AACBDD86E89D7D"><b>5.1-1</b></a>)). By calling the function <code class="code">IsLinearCode</code> (see <code class="func">IsLinearCode</code> (<a href="chap4.html#X7B [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+gap> C := ElementsCode( L, GF(2) );
+a (3,4,1..3)1 user defined unrestricted code over GF(2)
+# so far, GUAVA does not know what kind of code this is
+gap> IsLinearCode( C );
+true                      # it is linear
+gap> C;
+a linear [3,2,1]1 user defined unrestricted code over GF(2) 
+</pre></td></tr></table>
+
+<p>Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic.</p>
+
+<p>Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function <code class="code">Display</code> gives a more detailed description, showing the construction history of the code.</p>
+
+<p><strong class="pkg">GUAVA</strong> doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions <code class="code">Decode</code> or <code class="code">Decodeword</code>. For more information about encoding and decoding, see sections <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a> and <a href="chap4.html#X7A42FF7D87FC34 [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> w := [ 1, 0, 1, 1 ] * R;
+[ 1 0 0 1 1 0 0 1 ]
+gap> Decode( R, w );
+[ 1 0 1 1 ]
+gap> Decode( R, w + "10000000" ); # One error at the first position
+[ 1 0 1 1 ]                       # Corrected by Guava 
+</pre></td></tr></table>
+
+<p>Sections <a href="chap4.html#X7ECE60E1873B49A6"><b>4.1</b></a> and <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a> describe the operations that are available for codes. Section <a href="chap4.html#X864091AA7D4AFE86"><b>4.3</b></a> describe the functions that tests whether an object is a code and what kind of code it is (see <code class="code">IsCode</code>, <code class="func">IsLinearCode</code> (<a href="chap4.html#X7B24748A7CE8D4B9"><b>4.3-4</b></a>) and <code class="code">IsC [...]
+
+<p><a id="X7ECE60E1873B49A6" name="X7ECE60E1873B49A6"></a></p>
+
+<h4>4.1 <span class="Heading">Comparisons of Codes</span></h4>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.1-1 =</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> =</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The equality operator <code class="code">C1 = C2</code> evaluates to `true' if the codes <var class="Arg">C1</var> and <var class="Arg">C2</var> are equal, and to `false' otherwise.</p>
+
+<p>The equality operator is also denoted <code class="code">EQ</code>, and <code class="code">Eq(C1,C2)</code> is the same as <code class="code">C1 = C2</code>. There is also an inequality operator, < >, or <code class="code">not EQ</code>.</p>
+
+<p>Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+gap> C1 := ElementsCode( M, GF(2) );
+a (2,4,1..2)0 user defined unrestricted code over GF(2)
+gap> M = C1;
+false
+gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+a linear [2,2,1]0 code defined by generator matrix over GF(2)
+gap> C1 = C2;
+true
+gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+true
+gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+false
+</pre></td></tr></table>
+
+<p>Another way of comparing codes is <code class="code">IsEquivalent</code>, which checks if two codes are equivalent (see <code class="func">IsEquivalent</code> (<a href="chap4.html#X843034687D9C75B0"><b>4.4-1</b></a>)). By the way, this called <code class="code">CodeIsomorphism</code>. For the current version of <strong class="pkg">GUAVA</strong>, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux comp [...]
+
+<p><a id="X832DA51986A3882C" name="X832DA51986A3882C"></a></p>
+
+<h4>4.2 <span class="Heading">
+Operations for Codes
+</span></h4>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>4.2-1 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator `+' evaluates to the direct sum of the codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. See <code class="func">DirectSumCode</code> (<a href="chap6.html#X79E00D3A8367D65A"><b>6.2-1</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> C2:=RandomLinearCode(9,4);
+a  [9,4,?] randomly generated code over GF(2)
+gap> C1+C2;
+a linear [10,9,1]0..10 unknown linear code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.2-2 *</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> *</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator `*' evaluates to the direct product of the codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. See <code class="func">DirectProductCode</code> (<a href="chap6.html#X7BFBBA5784C293C1"><b>6.2-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C1*C2;
+a linear [16,4,1]4..12 direct product code
+</pre></td></tr></table>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.2-3 *</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> *</code>( <var class="Arg">m, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator <code class="code">m*C</code> evaluates to the element of <var class="Arg">C</var> belonging to information word ('message') <var class="Arg">m</var>. Here <var class="Arg">m</var> may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in <strong class="pkg">GUAVA</strong>. <var class="Arg">C</var> must be linear, because in <strong class="pkg">GUAVA</strong>, encoding by multiplication is only defined for linear codes. If <var  [...]
+
+<p>To invert this, use the function <code class="code">InformationWord</code> (see <code class="func">InformationWord</code> (<a href="chap4.html#X8744BA5E78BCF3F9"><b>4.2-4</b></a>), which simply calls the function <code class="code">Decode</code>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> m:=Codeword("11");
+[ 1 1 ]
+gap> m*C;
+[ 1 1 0 0 ]
+</pre></td></tr></table>
+
+<p><a id="X8744BA5E78BCF3F9" name="X8744BA5E78BCF3F9"></a></p>
+
+<h5>4.2-4 InformationWord</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> InformationWord</code>( <var class="Arg">C, c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">C</var> is a linear code and <var class="Arg">c</var> is a codeword in it. The command <code class="code">InformationWord</code> returns the message word (or 'information digits') m satisfying <code class="code">c=m*C</code>. This command simply calls <code class="code">Decode</code>, provided <code class="code">c in C</code> is true. Otherwise, it returns an error.</p>
+
+<p>To invert this, use the encoding function <code class="code">*</code> (see <code class="func">*</code> (<a href="chap4.html#X8123456781234567"><b>4.2-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 1 1 1 ]
+gap> InformationWord(C,c);
+[ 0 1 1 1 ]
+gap> c:=Codeword("1111100");
+[ 1 1 1 1 1 0 0 ]
+gap> InformationWord(C,c);
+"ERROR: codeword must belong to code"
+gap> C:=NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
+gap> InformationWord(C,c);
+"ERROR: code must be linear"
+</pre></td></tr></table>
+
+<p><a id="X864091AA7D4AFE86" name="X864091AA7D4AFE86"></a></p>
+
+<h4>4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></h4>
+
+<p><a id="X87BDB89B7AAFE8AD" name="X87BDB89B7AAFE8AD"></a></p>
+
+<h5>4.3-1 in</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> in</code>( <var class="Arg">c, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">c in C</code> evaluates to `true' if <var class="Arg">C</var> contains the codeword or list of codewords specified by <var class="Arg">c</var>. Of course, <var class="Arg">c</var> and <var class="Arg">C</var> must have the same word lengths and base fields.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ] ]
+gap> eC[2] in C;
+true
+gap> [ 0 ] in C;
+false 
+</pre></td></tr></table>
+
+<p><a id="X79CA175481F8105F" name="X79CA175481F8105F"></a></p>
+
+<h5>4.3-2 IsSubset</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSubset</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">IsSubset(C1,C2)</code> returns `true' if <var class="Arg">C2</var> is a subcode of <var class="Arg">C1</var>, i.e. if <var class="Arg">C1</var> contains all the elements of <var class="Arg">C2</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+true
+gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+false
+gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+true
+</pre></td></tr></table>
+
+<p><a id="X7F71186281DEA83A" name="X7F71186281DEA83A"></a></p>
+
+<h5>4.3-3 IsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCode</code> returns `true' if <var class="Arg">obj</var>, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if <var class="Arg">obj</var> is an unbound variable.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCode( 1 );
+false
+gap> IsCode( ReedMullerCode( 2,3 ) );
+true
+</pre></td></tr></table>
+
+<p><a id="X7B24748A7CE8D4B9" name="X7B24748A7CE8D4B9"></a></p>
+
+<h5>4.3-4 IsLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsLinearCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsLinearCode</code> checks if object <var class="Arg">obj</var> (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis G of the elements of <var class="Arg">obj</var> exists that generates the elements of <var class="Arg">obj</var>. If so, G is recorded as a generator matrix of <var class="Arg">obj</var> and the function returns `true'. If  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> IsLinearCode( C );
+true
+gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+false
+gap> IsLinearCode( 1 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X850C23D07C9A9B19" name="X850C23D07C9A9B19"></a></p>
+
+<h5>4.3-5 IsCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCyclicCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCyclicCode</code> checks if the object <var class="Arg">obj</var> is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial g exists that generates the elements of <var class="Arg">obj</var>. If so, g is recorded as a generator polynomial of <var class="Arg">obj</var> and the function returns `true'. If not, the function returns `false'.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> # GUAVA does not know the code is cyclic
+gap> IsCyclicCode( C );      # this command tells GUAVA to find out
+true
+gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
+false
+gap> IsCyclicCode( 1 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X85E3BD26856424F7" name="X85E3BD26856424F7"></a></p>
+
+<h5>4.3-6 IsPerfectCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsPerfectCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsPerfectCode(C)</code> returns `true' if <var class="Arg">C</var> is a perfect code. If Csubset GF(q)^n then, by definition, this means that for some positive integer t, the space GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered at the codewords in <var class="Arg">C</var>. For a code with odd minimum distance d = 2t+1, this is the case when every word of the vector space of <var class="Arg">C</var> is at distance at most t from exactly  [...]
+
+<p>In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in <a href="chapBib.html#biBHP03">[HP03]</a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> IsPerfectCode( H );
+true
+gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+true
+gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+false
+gap> IsPerfectCode( BinaryGolayCode() );
+true 
+</pre></td></tr></table>
+
+<p><a id="X789380D28018EC3F" name="X789380D28018EC3F"></a></p>
+
+<h5>4.3-7 IsMDSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsMDSCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsMDSCode(C)</code> returns true if <var class="Arg">C</var> is a maximum distance separable (MDS) code. A linear [n, k, d]-code of length n, dimension k and minimum distance d is an MDS code if k=n-d+1, in other words if <var class="Arg">C</var> meets the Singleton bound (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>)). An unrestricted (n, M, d) code is called <em>MDS</em> if k=n-d+1, with k equal to the  [...]
+
+<p>Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only <em>binary</em> MDS codes) and the Reed-Solomon codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 6, 3 );
+a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
+gap> IsMDSCode( C1 );
+true    # 6-3+1 = 4
+gap> IsMDSCode( QRCode( 23, GF(2) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X80166D8D837FEB58" name="X80166D8D837FEB58"></a></p>
+
+<h5>4.3-8 IsSelfDualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfDualCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfDualCode(C)</code> returns `true' if <var class="Arg">C</var> is self-dual, i.e. when <var class="Arg">C</var> is equal to its dual code (see also <code class="func">DualCode</code> (<a href="chap6.html#X799B12F085ACB609"><b>6.1-14</b></a>)). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see <code class="func">IsSelfOrthogonalCode</code> (<a href="chap4.html#X7B2 [...]
+
+<p>If <var class="Arg">C</var> is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension k is equal to the redundancy r.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
+true
+gap> C := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> DualCode( C ) = C;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7B2A0CC481D2366F" name="X7B2A0CC481D2366F"></a></p>
+
+<h5>4.3-9 IsSelfOrthogonalCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfOrthogonalCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfOrthogonalCode(C)</code> returns `true' if <var class="Arg">C</var> is self-orthogonal. A code is <em>self-orthogonal</em> if every element of <var class="Arg">C</var> is orthogonal to all elements of <var class="Arg">C</var>, including itself. (In the linear case, this simply means that the generator matrix of <var class="Arg">C</var> multiplied with its transpose yields a null matrix.)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode(1,4);
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> IsSelfOrthogonalCode(R);
+true
+gap> IsSelfDualCode(R);
+false 
+</pre></td></tr></table>
+
+<p><a id="X8358D43981EBE970" name="X8358D43981EBE970"></a></p>
+
+<h5>4.3-10 IsDoublyEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsDoublyEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsDoublyEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary linear code which has codewords of weight divisible by 4 only. According to <a href="chapBib.html#biBHP03">[HP03]</a>, a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+false
+gap> C:=ExtendedCode(C);  
+a linear [24,12,8]4 extended code
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+true
+</pre></td></tr></table>
+
+<p><a id="X79ACAEF5865414A0" name="X79ACAEF5865414A0"></a></p>
+
+<h5>4.3-11 IsSinglyEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSinglyEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSinglyEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary self-orthogonal linear code which is not doubly-even. In other words, <var class="Arg">C</var> is a binary self-orthogonal code which has codewords of even weight.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:=Indeterminate(GF(2));                     
+x_1
+gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
+gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
+true
+gap> IsDoublyEvenCode(C);
+false
+gap> IsSinglyEvenCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X7CE150ED7C3DC455" name="X7CE150ED7C3DC455"></a></p>
+
+<h5>4.3-12 IsEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+false
+gap> C:=ExtendedCode(C);
+a linear [24,12,8]4 extended code
+gap> IsSelfOrthogonalCode(C);
+true
+gap> IsEvenCode(C);
+true
+gap> C:=ExtendedCode(QRCode(17,GF(2)));
+a linear [18,9,6]3..5 extended code
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X7B6DB8CC84FCAC1C" name="X7B6DB8CC84FCAC1C"></a></p>
+
+<h5>4.3-13 IsSelfComplementaryCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfComplementaryCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfComplementaryCode</code> returns `true' if</p>
+
+<p class="pcenter">
+v \in C \Rightarrow 1 - v \in C,
+</p>
+
+<p>where 1 is the all-one word of length n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsSelfComplementaryCode( EvenWeightSubcode(
+> HammingCode( 3, GF(2) ) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7AFD3844859B20BF" name="X7AFD3844859B20BF"></a></p>
+
+<h5>4.3-14 IsAffineCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsAffineCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsAffineCode</code> returns `true' if <var class="Arg">C</var> is an affine code. A code is called <em>affine</em> if it is an affine space. In other words, a code is affine if it is a coset of a linear code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsAffineCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
+> [ 1, 0, 0, 0, 0, 0, 0 ] ) );
+true
+gap> IsAffineCode( NordstromRobinsonCode() );
+false 
+</pre></td></tr></table>
+
+<p><a id="X861D32FB81EF0D77" name="X861D32FB81EF0D77"></a></p>
+
+<h5>4.3-15 IsAlmostAffineCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsAlmostAffineCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsAlmostAffineCode</code> returns `true' if <var class="Arg">C</var> is an almost affine code. A code is called <em>almost affine</em> if the size of any punctured code of <var class="Arg">C</var> is q^r for some r, where q is the size of the alphabet of the code. Every affine code is also almost affine, and every code over GF(2) and GF(3) that is almost affine is also affine.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
+>                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
+>                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
+>                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
+>                             GF(4) );;
+gap> IsAlmostAffineCode( code );
+true
+gap> IsAlmostAffineCode( NordstromRobinsonCode() );
+false 
+</pre></td></tr></table>
+
+<p><a id="X86442DCD7A0B2146" name="X86442DCD7A0B2146"></a></p>
+
+<h4>4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></h4>
+
+<p><a id="X843034687D9C75B0" name="X843034687D9C75B0"></a></p>
+
+<h5>4.4-1 IsEquivalent</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsEquivalent</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>We say that <var class="Arg">C1</var> is <em>permutation equivalent</em> to <var class="Arg">C2</var> if <var class="Arg">C1</var> can be obtained from <var class="Arg">C2</var> by carrying out column permutations. <code class="code">IsEquivalent</code> returns true if <var class="Arg">C1</var> and <var class="Arg">C2</var> are equivalent codes. At this time, <code class="code">IsEquivalent</code> only handles <em>binary</em> codes. (The external unix/linux program <strong class="butt [...]
+
+<p>Note that the algorithm is <em>very slow</em> for non-linear codes.</p>
+
+<p>More generally, we say that <var class="Arg">C1</var> is <em>equivalent</em> to <var class="Arg">C2</var> if <var class="Arg">C1</var> can be obtained from <var class="Arg">C2</var> by carrying out column permutations and a permutation of the alphabet.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> H = HammingCode(3, GF(2));
+false
+gap> IsEquivalent(H, HammingCode(3, GF(2)));
+true                        # H is equivalent to a Hamming code
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+</pre></td></tr></table>
+
+<p><a id="X874DED8E86BC180B" name="X874DED8E86BC180B"></a></p>
+
+<h5>4.4-2 CodeIsomorphism</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeIsomorphism</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If the two codes <var class="Arg">C1</var> and <var class="Arg">C2</var> are permutation equivalent codes (see <code class="func">IsEquivalent</code> (<a href="chap4.html#X843034687D9C75B0"><b>4.4-1</b></a>)), <code class="code">CodeIsomorphism</code> returns the permutation that transforms <var class="Arg">C1</var> into <var class="Arg">C2</var>. If the codes are not equivalent, it returns `false'.</p>
+
+<p>At this time, <code class="code">IsEquivalent</code> only computes isomorphisms between <em>binary</em> codes on a linux/unix computer (since it calls Leon's C program <strong class="button">desauto</strong>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+true 
+</pre></td></tr></table>
+
+<p><a id="X87677B0787B4461A" name="X87677B0787B4461A"></a></p>
+
+<h5>4.4-3 AutomorphismGroup</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AutomorphismGroup</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AutomorphismGroup</code> returns the automorphism group of a linear code <var class="Arg">C</var>. For a binary code, the automorphism group is the largest permutation group of degree n such that each permutation applied to the columns of <var class="Arg">C</var> again yields <var class="Arg">C</var>. <strong class="pkg">GUAVA</strong> calls the external program <strong class="button">desauto</strong> written by J. S. Leon, if it exists, to compute the automorphism  [...]
+
+<p>See Leon <a href="chapBib.html#biBLeon82">[Leo82]</a> for a more precise description of the method, and the <code class="file">guava/src/leon/doc</code> subdirectory for for details about Leon's C programs.</p>
+
+<p>The function <code class="code">PermutedCode</code> permutes the columns of a code (see <code class="func">PermutedCode</code> (<a href="chap6.html#X79577EB27BE8524B"><b>6.1-4</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode(7,GF(2));
+a cyclic [7,1,7]3 repetition code over GF(2)
+gap> AutomorphismGroup(R);
+Sym( [ 1 .. 7 ] )
+                        # every permutation keeps R identical
+gap> C := CordaroWagnerCode(7);
+a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> AutomorphismGroup(C);
+Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
+gap> C2 :=  PermutedCode(C, (1,6)(2,7));
+a linear [7,2,4]3 permuted code
+gap> AsSSortedList(C2);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> C2 = C;
+true 
+</pre></td></tr></table>
+
+<p><a id="X79F3261F86C29F6D" name="X79F3261F86C29F6D"></a></p>
+
+<h5>4.4-4 PermutationAutomorphismGroup</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationAutomorphismGroup</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutationAutomorphismGroup</code> returns the permutation automorphism group of a linear code <var class="Arg">C</var>. This is the largest permutation group of degree n such that each permutation applied to the columns of <var class="Arg">C</var> again yields <var class="Arg">C</var>. It is written in GAP, so is much slower than <code class="code">AutomorphismGroup</code>.</p>
+
+<p>When <var class="Arg">C</var> is binary <code class="code">PermutationAutomorphismGroup</code> does <em>not</em> call <code class="code">AutomorphismGroup</code>, even though they agree mathematically in that case. This way <code class="code">PermutationAutomorphismGroup</code> can be called on any platform which runs GAP.</p>
+
+<p>The older name for this command, <code class="code">PermutationGroup</code>, will become obsolete in the next version of GAP.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode(3,GF(3));
+a cyclic [3,1,3]2 repetition code over GF(3)
+gap> G:=PermutationAutomorphismGroup(R);
+Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
+gap> G=SymmetricGroup(3);
+true
+</pre></td></tr></table>
+
+<p><a id="X866EB39483DDAE72" name="X866EB39483DDAE72"></a></p>
+
+<h4>4.5 <span class="Heading">
+Domain Functions for Codes
+</span></h4>
+
+<p>These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here.</p>
+
+<p><a id="X808A4061809A6E67" name="X808A4061809A6E67"></a></p>
+
+<h5>4.5-1 IsFinite</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsFinite</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsFinite</code> is an implementation of the GAP domain function <code class="code">IsFinite</code>. It returns true for a code <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X858ADA3B7A684421" name="X858ADA3B7A684421"></a></p>
+
+<h5>4.5-2 Size</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Size</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Size</code> returns the size of <var class="Arg">C</var>, the number of elements of the code. If the code is linear, the size of the code is equal to q^k, where q is the size of the base field of <var class="Arg">C</var> and k is the dimension.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Size( RepetitionCode( 1000, GF(11) ) );
+11
+gap> Size( NordstromRobinsonCode() );
+256 
+</pre></td></tr></table>
+
+<p><a id="X86F070E0807DC34E" name="X86F070E0807DC34E"></a></p>
+
+<h5>4.5-3 LeftActingDomain</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LeftActingDomain</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LeftActingDomain</code> returns the base field of a code <var class="Arg">C</var>. Each element of <var class="Arg">C</var> consists of elements of this base field. If the base field is F, and the word length of the code is n, then the codewords are elements of F^n. If <var class="Arg">C</var> is a cyclic code, its elements are interpreted as polynomials with coefficients over F.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
+a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
+gap> LeftActingDomain( C1 );
+GF(2^2)
+gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
+GF(3^2) 
+</pre></td></tr></table>
+
+<p><a id="X7E6926C6850E7C4E" name="X7E6926C6850E7C4E"></a></p>
+
+<h5>4.5-4 Dimension</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Dimension</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Dimension</code> returns the parameter k of <var class="Arg">C</var>, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; <code class="code">Dimension</code> then returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Dimension( NullCode( 5, GF(5) ) );
+0
+gap> C := BCHCode( 15, 4, GF(4) );
+a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
+gap> Dimension( C );
+9
+gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+true 
+</pre></td></tr></table>
+
+<p><a id="X856D927378C33548" name="X856D927378C33548"></a></p>
+
+<h5>4.5-5 AsSSortedList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AsSSortedList</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AsSSortedList</code> (as strictly sorted list) returns an immutable, duplicate free list of the elements of <var class="Arg">C</var>. For a finite field GF(q) generated by powers of Z(q), the ordering on</p>
+
+<p class="pcenter">
+GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} 
+</p>
+
+<p>is that determined by the exponents i. These elements are of the type codeword (see <code class="func">Codeword</code> (<a href="chap3.html#X7B9E353D852851AA"><b>3.1-1</b></a>)). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use <code class="code">CodewordNr</code> (see <code class="func">CodewordNr</code> (<a href="chap3.html#X7E7ED91C79BF3EF3"><b>3.1-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+gap> CodewordNr( C, [ 1, 2 ] );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p><a id="X823827927D6A8235" name="X823827927D6A8235"></a></p>
+
+<h4>4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></h4>
+
+<p><a id="X7AFA64D97A1F39A3" name="X7AFA64D97A1F39A3"></a></p>
+
+<h5>4.6-1 Print</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Print</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Print</code> prints information about <var class="Arg">C</var>. This is the same as typing the identifier <var class="Arg">C</var> at the GAP-prompt.</p>
+
+<p>If the argument is an unrestricted code, information in the form</p>
+
+
+<pre class="normal">
+
+a (n,M,d)r ... code over GF(q)
+
+</pre>
+
+<p>is printed, where <var class="Arg">n</var> is the word length, <var class="Arg">M</var> the number of elements of the code, <var class="Arg">d</var> the minimum distance and <var class="Arg">r</var> the covering radius.</p>
+
+<p>If the argument is a linear code, information in the form</p>
+
+
+<pre class="normal">
+
+a linear [n,k,d]r ... code over GF(q)
+
+</pre>
+
+<p>is printed, where <var class="Arg">n</var> is the word length, <var class="Arg">k</var> the dimension of the code, <var class="Arg">d</var> the minimum distance and <var class="Arg">r</var> the covering radius.</p>
+
+<p>Except for codes produced by <code class="code">RandomLinearCode</code>, if <var class="Arg">d</var> is not yet known, it is displayed in the form</p>
+
+
+<pre class="normal">
+
+lowerbound..upperbound
+
+</pre>
+
+<p>and if <var class="Arg">r</var> is not yet known, it is displayed in the same way. For certain ranges of n, the values of <var class="Arg">lowerbound</var> and <var class="Arg">upperbound</var> are obtained from tables.</p>
+
+<p>The function <code class="code">Display</code> gives more information. See <code class="func">Display</code> (<a href="chap4.html#X83A5C59278E13248"><b>4.6-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
+a linear [8,4,4]2 extended code
+gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
+This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 
+</pre></td></tr></table>
+
+<p><a id="X81FB5BE27903EC32" name="X81FB5BE27903EC32"></a></p>
+
+<h5>4.6-2 String</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> String</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">String</code> returns information about <var class="Arg">C</var> in a string. This function is used by <code class="code">Print</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> Factors(pol);
+[ x_1^2+Z(3)^0 ]
+gap> H := GeneratorPolCode( pol, 8, GF(3));
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> String(H);
+"a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"
+</pre></td></tr></table>
+
+<p><a id="X83A5C59278E13248" name="X83A5C59278E13248"></a></p>
+
+<h5>4.6-3 Display</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Display</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Display</code> prints the method of construction of code <var class="Arg">C</var>. With this history, in most cases an equal or equivalent code can be reconstructed. If <var class="Arg">C</var> is an unmanipulated code, the result is equal to output of the function <code class="code">Print</code> (see <code class="func">Print</code> (<a href="chap4.html#X7AFA64D97A1F39A3"><b>4.6-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Display( RepetitionCode( 6, GF(3) ) );
+a cyclic [6,1,6]4 repetition code over GF(3)
+gap> C1 := ExtendedCode( HammingCode(2) );;
+gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
+a linear [11,8,1]1..2 U U+V construction code of
+U: a linear [4,1,4]2 extended code of
+   a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+V: a linear [7,7,1]0 punctured code of
+   a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7CD08C8C780543C4" name="X7CD08C8C780543C4"></a></p>
+
+<h5>4.6-4 DisplayBoundsInfo</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DisplayBoundsInfo</code>( <var class="Arg">bds</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DisplayBoundsInfo</code> prints the method of construction of the code C indicated in <code class="code">bds:= BoundsMinimumDistance( n, k, GF(q) )</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+gap> DisplayBoundsInfo(bounds);
+an optimal linear [20,17,d] code over GF(4) has d=3
+--------------------------------------------------------------------------------------------------
+Lb(20,17)=3, by shortening of:
+Lb(21,18)=3, by applying contruction B to a [81,77,3] code
+Lb(81,77)=3, by shortening of:
+Lb(85,81)=3, reference: Ham
+--------------------------------------------------------------------------------------------------
+Ub(20,17)=3, by considering shortening to:
+Ub(7,4)=3, by considering puncturing to:
+Ub(6,4)=2, by construction B applied to:
+Ub(2,1)=2, repetition code
+--------------------------------------------------------------------------------------------------
+Reference Ham:
+%T this reference is unknown, for more info
+%T contact A.E. Brouwer (aeb at cwi.nl)
+</pre></td></tr></table>
+
+<p><a id="X7D0F48B685A3ECDD" name="X7D0F48B685A3ECDD"></a></p>
+
+<h4>4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></h4>
+
+<p><a id="X817224657C9829C4" name="X817224657C9829C4"></a></p>
+
+<h5>4.7-1 GeneratorMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorMat</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorMat</code> returns a generator matrix of <var class="Arg">C</var>. The code consists of all linear combinations of the rows of this matrix.</p>
+
+<p>If until now no generator matrix of <var class="Arg">C</var> was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GeneratorMat( HammingCode( 3, GF(2) ) );
+[ [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7] ]
+gap> Display(last);
+ 1 1 1 . . . .
+ 1 . . 1 1 . .
+ . 1 . 1 . 1 .
+ 1 1 . 1 . . 1
+gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
+gap> GeneratorMat( NullCode( 14, GF(4) ) );
+[  ]
+</pre></td></tr></table>
+
+<p><a id="X85D4B26E7FB38D57" name="X85D4B26E7FB38D57"></a></p>
+
+<h5>4.7-2 CheckMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMat</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMat</code> returns a parity check matrix of <var class="Arg">C</var>. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CheckMat( HammingCode(3, GF(2) ) );
+[ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
+gap> Display(last);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> CheckMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
+gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
+[  ] 
+</pre></td></tr></table>
+
+<p><a id="X78E33C3A843B0261" name="X78E33C3A843B0261"></a></p>
+
+<h5>4.7-3 GeneratorPol</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorPol</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorPol</code> returns the generator polynomial of <var class="Arg">C</var>. The code consists of all multiples of the generator polynomial modulo x^n-1, where n is the word length of <var class="Arg">C</var>. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is not a cyclic code, the function returns `false'.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1
+gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+Z(2)^0
+gap> GeneratorPol( NullCode( 7, GF(3) ) );
+-Z(3)^0+x_1^7
+</pre></td></tr></table>
+
+<p><a id="X7C45AA317BB1195F" name="X7C45AA317BB1195F"></a></p>
+
+<h5>4.7-4 CheckPol</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckPol</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckPol</code> returns the check polynomial of <var class="Arg">C</var>. The code consists of all polynomials f with</p>
+
+<p class="pcenter">
+f\cdot h \equiv 0 \ ({\rm mod}\  x^n-1),
+</p>
+
+<p>where h is the check polynomial, and n is the word length of <var class="Arg">C</var>. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> if not a cyclic code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1+x_1^2
+gap> CheckPol(WholeSpaceCode(4, GF(2)));
+Z(2)^0+x_1^4
+gap> CheckPol(NullCode(7,GF(3)));
+Z(3)^0
+</pre></td></tr></table>
+
+<p><a id="X7F4CB9DB7CD97178" name="X7F4CB9DB7CD97178"></a></p>
+
+<h5>4.7-5 RootsOfCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RootsOfCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RootsOfCode</code> returns a list of all zeros of the generator polynomial of a cyclic code <var class="Arg">C</var>. These are finite field elements in the splitting field of the generator polynomial, GF(q^m), m is the multiplicative order of the size of the base field of the code, modulo the word length.</p>
+
+<p>The reverse process, constructing a code from a set of roots, can be carried out by the function <code class="code">RootsCode</code> (see <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 16, 5 );
+a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
+gap> RootsOfCode( C1 );
+[ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
+gap> C2 := RootsCode( 16, last );
+a cyclic [16,12,5]3..4 code defined by roots over GF(17)
+gap> C1 = C2;
+true 
+</pre></td></tr></table>
+
+<p><a id="X8170B52D7C154247" name="X8170B52D7C154247"></a></p>
+
+<h4>4.8 <span class="Heading">
+Parameters of Codes
+</span></h4>
+
+<p><a id="X7A36C3C67B0062E8" name="X7A36C3C67B0062E8"></a></p>
+
+<h5>4.8-1 WordLength</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WordLength</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WordLength</code> returns the parameter n of <var class="Arg">C</var>, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree n-1, as calculations are carried out modulo x^n-1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WordLength( NordstromRobinsonCode() );
+16
+gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+6
+gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+14 
+</pre></td></tr></table>
+
+<p><a id="X7E33FD56792DBF3D" name="X7E33FD56792DBF3D"></a></p>
+
+<h5>4.8-2 Redundancy</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Redundancy</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Redundancy</code> returns the redundancy r of <var class="Arg">C</var>, which is equal to the number of check symbols in each element. If <var class="Arg">C</var> is not a linear code the redundancy is not defined and <code class="code">Redundancy</code> returns an error.</p>
+
+<p>If a linear code <var class="Arg">C</var> has dimension k and word length n, it has redundancy r=n-k.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> Redundancy(C);
+5
+gap> Redundancy( DualCode(C) );
+6 
+</pre></td></tr></table>
+
+<p><a id="X7B31613D8538BD29" name="X7B31613D8538BD29"></a></p>
+
+<h5>4.8-3 MinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistance</code> returns the minimum distance of <var class="Arg">C</var>, the largest integer d with the property that every element of <var class="Arg">C</var> has at least a Hamming distance d (see <code class="func">DistanceCodeword</code> (<a href="chap3.html#X7CDA1B547D55E6FB"><b>3.6-2</b></a>)) to any other element of <var class="Arg">C</var>. For linear codes, the minimum distance is equal to the minimum weight. This means that d is also the smallest p [...]
+
+<p>For codes with only one element, the minimum distance is defined to be equal to the word length.</p>
+
+<p>For linear codes <var class="Arg">C</var>, the algorithm used is the following: After replacing <var class="Arg">C</var> by a permutation equivalent <var class="Arg">C'</var>, one may assume the generator matrix has the following form G=(I_k , | , A), for some kx (n-k) matrix A. If A=0 then return d(C)=1. Next, find the minimum distance of the code spanned by the rows of A. Call this distance d(A). Note that d(A) is equal to the the Hamming distance d(v,0) where v is some proper linea [...]
+
+<p>This command may also be called using the syntax <code class="code">MinimumDistance(C, w)</code>. In this form, <code class="code">MinimumDistance</code> returns the minimum distance of a codeword <var class="Arg">w</var> to the code <var class="Arg">C</var>, also called the <em>distance from <var class="Arg">w</var> to</em> <var class="Arg">C</var>. This is the smallest value d for which there is an element c of the code <var class="Arg">C</var> which is at distance d from <var class [...]
+
+<p>Note that <var class="Arg">w</var> must be an element of the same vector space as the elements of <var class="Arg">C</var>. <var class="Arg">w</var> does not necessarily belong to the code (if it does, the minimum distance is zero).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := MOLSCode(7);; MinimumDistance(C);
+3
+gap> WeightDistribution(C);
+[ 1, 0, 0, 24, 24 ]
+gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+1
+gap> MinimumDistance( NullCode( 4, GF(2) ) );
+4
+gap> C := ConferenceCode(9);; MinimumDistance(C);
+4
+gap> InnerDistribution(C);
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
+gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
+[ 3 3 6 2 ]
+gap> MinimumDistance( C, w );
+0
+gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+3                           # so w no longer belongs to C 
+</pre></td></tr></table>
+
+<p>See also the <strong class="pkg">GUAVA</strong> commands relating to bounds on the minimum distance in section <a href="chap7.html#X87C753EB840C34D3"><b>7.1</b></a>.</p>
+
+<p><a id="X813F226F855590EE" name="X813F226F855590EE"></a></p>
+
+<h5>4.8-4 MinimumDistanceLeon</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistanceLeon</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistanceLeon</code> returns the ``probable'' minimum distance d_Leon of a linear binary code <var class="Arg">C</var>, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let <var class="Arg">C</var> be a linear code of dimension k over GF(q) as above. The algorithm has input parameters s and rho, where s is an integer between 2 and n-k, and rho is an integer between 2 and k.</p>
+
+
+<ul>
+<li><p>Find a generator matrix G of C.</p>
+
+</li>
+<li><p>Randomly permute the columns of G.</p>
+
+</li>
+<li><p>Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form:</p>
+
+<p class="pcenter">
+G=(I_{k} \, | \, Z \, | \, B)
+</p>
+
+<p>with Z a kx s matrix. If (Z,B) is the zero matrix then return 1 for the minimum distance. If Z=0 but not B then either choose another permutation of the rows of <var class="Arg">C</var> or return `method fails'.</p>
+
+</li>
+<li><p>Search Z for at most rho rows that lead to codewords of weight less than rho.</p>
+
+</li>
+<li><p>For these codewords, compute the weight of the whole word in <var class="Arg">C</var>. Return this weight.</p>
+
+</li>
+</ul>
+<p>(See for example J. S. Leon, <a href="chapBib.html#biBLeon88">[Leo88]</a> for more details.) Sometimes (as is the case in <strong class="pkg">GUAVA</strong>) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(50,22,GF(2));
+a  [50,22,?] randomly generated code over GF(2)
+gap> MinimumDistanceLeon(C); time;
+6
+211
+gap> MinimumDistance(C); time;
+6
+1204
+</pre></td></tr></table>
+
+<p><a id="X84EDF67B86B4154C" name="X84EDF67B86B4154C"></a></p>
+
+<h5>4.8-5 MinimumWeight</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumWeight</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumWeight</code> returns the minimum Hamming weight of a linear code <var class="Arg">C</var>. At the moment, this function works for binary and ternary codes only. The <code class="code">MinimumWeight</code> function relies on an external executable program which is written in C language. As a consequence, the execution time of <code class="code">MinimumWeight</code> function is faster than that of <code class="func">MinimumDistance</code> (<a href="chap4.html# [...]
+
+<p>The <code class="code">MinimumWeight</code> function implements Chen's <a href="chapBib.html#biBChen69">[Che69]</a> algorithm if <var class="Arg">C</var> is cyclic, and Zimmermann's <a href="chapBib.html#biBZimmermann96">[Zim96]</a> algorithm if <var class="Arg">C</var> is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divi [...]
+
+<p>Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed.</p>
+
+<p>If you find any bugs on this function, please report it to ctjhai at plymouth.ac.uk.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> # Extended ternary quadratic residue code of length 48
+gap> n := 47;;
+gap> x := Indeterminate(GF(3));;
+gap> F := Factors(x^n-1);;
+gap> v := List([1..n], i->Zero(GF(3)));;
+gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+gap> G := CirculantMatrix(24, v);;
+gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
+> for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+> od;;
+gap> C := GeneratorMatCodeNC(G, GF(3));
+a  [48,24,?] randomly generated code over GF(3)
+gap> MinimumWeight(C);
+[48,24] linear code over GF(3) - minimum weight evaluation
+Known lower-bound: 1
+There are 2 generator matrices, ranks : 24 24 
+The weight of the minimum weight codeword satisfies 0 mod 3 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 15
+Number of matrices required for codeword enumeration 2
+Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 2 matrices
+Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 2 matrices
+Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 2 matrices
+Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 2 matrices
+Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrices
+Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
+-----------------------------------------------------------------------------
+Minimum weight: 15
+15
+gap> 
+
+gap> # Binary cyclic code [151,45,36]
+gap> n := 151;;
+gap> x := Indeterminate(GF(2));;
+gap> F := Factors(x^n-1);;
+gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
+gap> MinimumWeight(C);
+[151,45] cyclic code over GF(2) - minimum weight evaluation
+Known lower-bound: 1
+The weight of the minimum weight codeword satisfies 0 mod 4 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 56
+    Found new minimum weight 44
+Number of matrices required for codeword enumeration 1
+Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 1 matrix
+Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 1 matrix
+   Found new minimum weight 40
+   Found new minimum weight 36
+Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 1 matrix
+Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 1 matrix
+Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrix
+Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 7 (w=7) using 1 matrix
+Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 8 (w=8) using 1 matrix
+Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 9 (w=9) using 1 matrix
+Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
+-----------------------------------------------------------------------------
+Minimum weight: 36
+36
+</pre></td></tr></table>
+
+<p><a id="X823B9A797EE42F6D" name="X823B9A797EE42F6D"></a></p>
+
+<h5>4.8-6 DecreaseMinimumDistanceUpperBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DecreaseMinimumDistanceUpperBound</code>( <var class="Arg">C, t, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DecreaseMinimumDistanceUpperBound</code> is an implementation of the algorithm for the minimum distance of a linear binary code <var class="Arg">C</var> by Leon <a href="chapBib.html#biBLeon88">[Leo88]</a>. This algorithm tries to find codewords with small minimum weights. The parameter <var class="Arg">t</var> is at least 1 and less than the dimension of <var class="Arg">C</var>. The best results are obtained if it is close to the dimension of the code. The paramet [...]
+
+<p>The result returned is a record with two fields; the first, <code class="code">mindist</code>, gives the lowest weight found, and <code class="code">word</code> gives the corresponding codeword. (This was implemented before <code class="code">MinimumDistanceLeon</code> but independently. The older manual had given the command incorrectly, so the command was only found after reading all the <em>*.gi</em> files in the <strong class="pkg">GUAVA</strong> library. Though both <code class=" [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(5,2,GF(2));
+a  [5,2,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,1,4);
+rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+3
+gap> C:=RandomLinearCode(8,4,GF(2));
+a  [8,4,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,3,4);
+rec( mindist := 2,
+  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+2
+</pre></td></tr></table>
+
+<p><a id="X7A679B0A7816B030" name="X7A679B0A7816B030"></a></p>
+
+<h5>4.8-7 MinimumDistanceRandom</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistanceRandom</code>( <var class="Arg">C, num, s</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistanceRandom</code> returns an upper bound for the minimum distance d_random of a linear binary code <var class="Arg">C</var>, using a probabilistic polynomial time algorithm. Briefly: Let <var class="Arg">C</var> be a linear code of dimension k over GF(q) as above. The algorithm has input parameters num and s, where s is an integer between 2 and n-1, and num is an integer greater than or equal to 1.</p>
+
+
+<ul>
+<li><p>Find a generator matrix G of C.</p>
+
+</li>
+<li><p>Randomly permute the columns of G, written G_p..</p>
+
+</li>
+<li><p class="pcenter">
+G=(A, B)
+</p>
+
+<p>with A a kx s matrix. If A is the zero matrix then return `method fails'.</p>
+
+</li>
+<li><p>Search A for at most 5 rows that lead to codewords, in the code C_A with generator matrix A, of minimum weight.</p>
+
+</li>
+<li><p>For these codewords, use the associated linear combination to compute the weight of the whole word in <var class="Arg">C</var>. Return this weight and codeword.</p>
+
+</li>
+</ul>
+<p>This probabilistic algorithm is repeated <var class="Arg">num</var> times (with different random permutations of the rows of G each time) and the weight and codeword of the lowest occurring weight is taken.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(60,20,GF(2));
+a  [60,20,?] randomly generated code over GF(2)
+gap> #mindist(C);time;
+gap> #mindistleon(C,10,30);time; #doesn't work well
+gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
+        1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
+130
+gap> a[2] in C;
+true
+gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
+rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
+649
+gap> Codeword(b!.word) in C;
+true
+gap> MinimumDistance(C);time;
+12
+196
+gap> c:=MinimumDistanceLeon(C);time;
+12
+66
+gap> C:=RandomLinearCode(30,10,GF(3));
+a  [30,10,?] randomly generated code over GF(3)
+gap> a:=MinimumDistanceRandom(C,10,10);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
+229
+gap> a[2] in C;
+true
+gap> MinimumDistance(C);time;
+9
+45
+gap> c:=MinimumDistanceLeon(C);
+Code must be binary. Quitting.
+0
+gap> a:=MinimumDistanceRandom(C,1,29);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
+53
+</pre></td></tr></table>
+
+<p><a id="X7A195E317D2AB7CE" name="X7A195E317D2AB7CE"></a></p>
+
+<h5>4.8-8 CoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CoveringRadius</code> returns the <em>covering radius</em> of a linear code <var class="Arg">C</var>. This is the smallest number r with the property that each element v of the ambient vector space of <var class="Arg">C</var> has at most a distance r to the code <var class="Arg">C</var>. So for each vector v there must be an element c of <var class="Arg">C</var> with d(v,c) <= r. The smallest covering radius of any [n,k] binary linear code is denoted t(n,k). A bi [...]
+
+<p>If <var class="Arg">C</var> is a perfect code (see <code class="func">IsPerfectCode</code> (<a href="chap4.html#X85E3BD26856424F7"><b>4.3-6</b></a>)), the covering radius is equal to t, the number of errors the code can correct, where d = 2t+1, with d the minimum distance of <var class="Arg">C</var> (see <code class="func">MinimumDistance</code> (<a href="chap4.html#X7B31613D8538BD29"><b>4.8-3</b></a>)).</p>
+
+<p>If there exists a function called <code class="code">SpecialCoveringRadius</code> in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented.</p>
+
+<p>If the length of <code class="code">BoundsCoveringRadius</code> (see <code class="func">BoundsCoveringRadius</code> (<a href="chap7.html#X8320D1C180A1AAAD"><b>7.2-1</b></a>)), is 1, then the value in</p>
+
+
+<pre class="normal">
+
+C.boundsCoveringRadius
+
+</pre>
+
+<p>is returned. Otherwise, the function</p>
+
+
+<pre class="normal">
+
+C.operations.CoveringRadius
+
+</pre>
+
+<p>is executed, unless the redundancy of <var class="Arg">C</var> is too large. In the last case, a warning is issued.</p>
+
+<p>The algorithm used to compute the covering radius is the following. First, <code class="code">CosetLeadersMatFFE</code> is used to compute the list of coset leaders (which returns a codeword in each coset of GF(q)^n/C of minimum weight). Then <code class="code">WeightVecFFE</code> is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := RandomLinearCode(10, 5, GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(H);
+3
+gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
+true
+gap> CoveringRadius(H);
+1                       # Hamming codes have minimum distance 3
+gap> CoveringRadius(ReedSolomonCode(7,4));
+3 
+gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+3
+gap> CoveringRadius( HammingCode( 5, GF(2) ) );
+1
+gap> C := ReedMullerCode( 1, 9 );;
+gap> CoveringRadius( C );
+CoveringRadius: warning, the covering radius of
+this code cannot be computed straightforward.
+Try to use IncreaseCoveringRadiusLowerBound( code ).
+(see the manual for more details).
+The covering radius of code lies in the interval:
+[ 240 .. 248 ]
+</pre></td></tr></table>
+
+<p>See also the <strong class="pkg">GUAVA</strong> commands relating to bounds on the minimum distance in section <a href="chap7.html#X817D0A647D3331EB"><b>7.2</b></a>.</p>
+
+<p><a id="X81004B007EC5DF58" name="X81004B007EC5DF58"></a></p>
+
+<h5>4.8-9 SetCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SetCoveringRadius</code>( <var class="Arg">C, intlist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SetCoveringRadius</code> enables the user to set the covering radius herself, instead of letting <strong class="pkg">GUAVA</strong> compute it. If <var class="Arg">intlist</var> is an integer, <strong class="pkg">GUAVA</strong> will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 17, 3, GF(2) );;
+gap> BoundsCoveringRadius( C );
+[ 3 .. 4 ]
+gap> SetCoveringRadius( C, [ 2 .. 3 ] );
+gap> BoundsCoveringRadius( C );
+[ [ 2 .. 3 ] ]
+</pre></td></tr></table>
+
+<p><a id="X806384B4815EFF2E" name="X806384B4815EFF2E"></a></p>
+
+<h4>4.9 <span class="Heading">
+Distributions
+</span></h4>
+
+<p><a id="X7AEE64467FB1E0B9" name="X7AEE64467FB1E0B9"></a></p>
+
+<h5>4.9-1 MinimumWeightWords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumWeightWords</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumWeightWords</code> returns the list of minimum weight codewords of <var class="Arg">C</var>.</p>
+
+<p>This algorithm is written in GAP is slow, so is only suitable for small codes.</p>
+
+<p>This does not call the very fast function <code class="code">MinimumWeight</code> (see <code class="func">MinimumWeight</code> (<a href="chap4.html#X84EDF67B86B4154C"><b>4.8-5</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> MinimumWeightWords(C);
+[ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
+  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]
+
+</pre></td></tr></table>
+
+<p><a id="X8728BCC9842A6E5D" name="X8728BCC9842A6E5D"></a></p>
+
+<h5>4.9-2 WeightDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightDistribution</code> returns the weight distribution of <var class="Arg">C</var>, as a vector. The i^th element of this vector contains the number of elements of <var class="Arg">C</var> with weight i-1. For linear codes, the weight distribution is equal to the inner distribution (see <code class="func">InnerDistribution</code> (<a href="chap4.html#X871FD301820717A4"><b>4.9-3</b></a>)). If w is the weight distribution of a linear code <var class="Arg">C</var>,  [...]
+
+<p>Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program <code class="code">DistancesDistributionMatFFEVecFFE</code>, which is written in C. See also <code class="code">CodeWeightEnumerator</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WeightDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
+gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ]
+gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+[ 1, 5, 10, 10, 5, 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X871FD301820717A4" name="X871FD301820717A4"></a></p>
+
+<h5>4.9-3 InnerDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> InnerDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">InnerDistribution</code> returns the inner distribution of <var class="Arg">C</var>. The i^th element of the vector contains the average number of elements of <var class="Arg">C</var> at distance i-1 to an element of <var class="Arg">C</var>. For linear codes, the inner distribution is equal to the weight distribution (see <code class="func">WeightDistribution</code> (<a href="chap4.html#X8728BCC9842A6E5D"><b>4.9-2</b></a>)).</p>
+
+<p>Suppose w is the inner distribution of <var class="Arg">C</var>. Then w[1] = 1, because each element of <var class="Arg">C</var> has exactly one element at distance zero (the element itself). The minimum distance of <var class="Arg">C</var> is the smallest value d > 0 with w[d+1] <> 0, because a distance between zero and d never occurs. See <code class="func">MinimumDistance</code> (<a href="chap4.html#X7B31613D8538BD29"><b>4.8-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> InnerDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
+gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ] 
+</pre></td></tr></table>
+
+<p><a id="X87AD54F87C5EE77E" name="X87AD54F87C5EE77E"></a></p>
+
+<h5>4.9-4 DistancesDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistribution</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistribution</code> returns the distribution of the distances of all elements of <var class="Arg">C</var> to a codeword <var class="Arg">w</var> in the same vector space. The i^th element of the distance distribution is the number of codewords of <var class="Arg">C</var> that have distance i-1 to <var class="Arg">w</var>. The smallest value d with w[d+1] <> 0, is defined as the <em>distance to</em> <var class="Arg">C</var> (see <code class="func">Mini [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HadamardCode(20);
+a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
+gap> c := Codeword("10110101101010010101", H);
+[ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
+gap> DistancesDistribution(H, c);
+[ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
+gap> MinimumDistance(H, c);
+5                           # distance to H 
+</pre></td></tr></table>
+
+<p><a id="X8495870687195324" name="X8495870687195324"></a></p>
+
+<h5>4.9-5 OuterDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OuterDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">OuterDistribution</code> returns a list of length q^n, where q is the size of the base field of <var class="Arg">C</var> and n is the word length. The elements of the list consist of pairs, the first coordinate being an element of GF(q)^n (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is <em>very</em> large, and for n > 20 it will not fit in the memory of most compute [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RepetitionCode( 3, GF(2) );
+a cyclic [3,1,3]1 repetition code over GF(2)
+gap> OD := OuterDistribution(C);
+[ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
+  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
+  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
+  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
+gap> WeightDistribution(C) = OD[1][2];
+true
+gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+true 
+</pre></td></tr></table>
+
+<p><a id="X7D9A39BF801948C8" name="X7D9A39BF801948C8"></a></p>
+
+<h4>4.10 <span class="Heading">
+Decoding Functions
+</span></h4>
+
+<p><a id="X7A42FF7D87FC34AC" name="X7A42FF7D87FC34AC"></a></p>
+
+<h5>4.10-1 Decode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Decode</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Decode</code> decodes <var class="Arg">r</var> (a 'received word') with respect to code <var class="Arg">C</var> and returns the `message word' (i.e., the information digits associated to the codeword c in C closest to <var class="Arg">r</var>). Here <var class="Arg">r</var> can be a <strong class="pkg">GUAVA</strong> codeword or a list of codewords. First, possible errors in <var class="Arg">r</var> are corrected, then the codeword is decoded to an <em>information  [...]
+
+<p>A special decoder can be created by defining a function</p>
+
+
+<pre class="normal">
+
+C!.SpecialDecoder := function(C, r) ... end;
+
+</pre>
+
+<p>The function uses the arguments <var class="Arg">C</var> (the code record itself) and <var class="Arg">r</var> (a vector of the codeword type) to decode <var class="Arg">r</var> to an information vector. A normal decoder would take a codeword <var class="Arg">r</var> of the same word length and field as <var class="Arg">C</var>, and would return an information vector of length k, the dimension of <var class="Arg">C</var>. The user is not restricted to these normal demands though, and  [...]
+
+<p>Encoding is done by multiplying the information vector with the code (see <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decode(C, c);                     # decoding
+[ 1 0 1 0 ]
+gap> Decode(C, Codeword("0010101"));
+[ 1 1 0 1 ]                            # one error corrected
+gap> C!.SpecialDecoder := function(C, c)
+> return NullWord(Dimension(C));
+> end;
+function ( C, c ) ... end
+gap> Decode(C, c);
+[ 0 0 0 0 ]           # new decoder always returns null word 
+</pre></td></tr></table>
+
+<p><a id="X7D870C9387C47D9F" name="X7D870C9387C47D9F"></a></p>
+
+<h5>4.10-2 Decodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Decodeword</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Decodeword</code> decodes <var class="Arg">r</var> (a 'received word') with respect to code <var class="Arg">C</var> and returns the codeword c in C closest to <var class="Arg">r</var>. Here <var class="Arg">r</var> can be a <strong class="pkg">GUAVA</strong> codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a sp [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decodeword(C, c);                     # decoding
+[ 1 0 1 1 0 1 0 ]
+gap>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v);
+[ 0 9 6 2 1 ]
+gap> Decodeword(C,v); # calls the special interpolation decoder
+[ 0 9 6 2 1 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
+  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
+  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
+gap> C1:=GeneratorMatCode(G,GF(11));
+a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+gap> Decodeword(C,v); # calls syndrome decoding
+[ 0 9 6 2 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7D48DE2A84474C6A" name="X7D48DE2A84474C6A"></a></p>
+
+<h5>4.10-3 GeneralizedReedSolomonDecoderGao</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonDecoderGao</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedSolomonDecoderGao</code> decodes <var class="Arg">r</var> (a 'received word') to a codeword c in C in a generalized Reed-Solomon code <var class="Arg">C</var> (see <code class="func">GeneralizedReedSolomonCode</code> (<a href="chap5.html#X810AB3DB844FFCE9"><b>5.6-2</b></a>)), closest to <var class="Arg">r</var>. Here <var class="Arg">r</var> must be a <strong class="pkg">GUAVA</strong> codeword. If the code record does not have name `generalized Reed- [...]
+
+<p>For long codes, this method is faster in practice than the interpolation method used in <code class="code">Decodeword</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v); 
+[ 0 9 6 2 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7CFF98D483502053" name="X7CFF98D483502053"></a></p>
+
+<h5>4.10-4 GeneralizedReedSolomonListDecoder</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonListDecoder</code>( <var class="Arg">C, r, tau</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedSolomonListDecoder</code> implements Sudans list-decoding algorithm (see section 12.1 of <a href="chapBib.html#biBJH04">[JH04]</a>) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most <var class="Arg">tau</var> from <var class="Arg">r</var> (a 'received word'). <var class="Arg">C</var> must be a generalized Reed-Solomon code <var class="Arg">C</var> (see <code class="func">GeneralizedReedSolom [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap>
+gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
+  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); ## 6 error correcting
+13
+gap> z:=Zero(F);;
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+[ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
+  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
+250
+gap> c1:=cs[1]; c1 in C;
+[ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+true
+gap> c2:=cs[2]; c2 in C;
+[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
+true
+gap> WeightCodeword(c1-r);
+7
+gap> WeightCodeword(c2-r);
+7
+</pre></td></tr></table>
+
+<p><a id="X80E17FA27DCAB676" name="X80E17FA27DCAB676"></a></p>
+
+<h5>4.10-5 BitFlipDecoder</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BitFlipDecoder</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The iterative decoding method <code class="code">BitFlipDecoder</code> must only be applied to LDPC codes. These have not been implemented in GUAVA (but see <code class="code">FerreroDesignCode</code> for a code with similar properties). A binary low density parity check (LDPC) code of length $n$ and redundancy $r$ is defined in terms of its check matrix $H$:</p>
+
+
+<ul>
+<li><p>Each row of $H$ has exactly $x$ 1's.</p>
+
+</li>
+<li><p>Each column has exactly $y$ 1's.</p>
+
+</li>
+<li><p>The number of 1's in common between any two columns is less than or equal to one.</p>
+
+</li>
+<li><p>$x/n$ and $y/r$ are 'small'.</p>
+
+</li>
+</ul>
+<p>For these codes, <code class="code">BitFlipDecoder</code> decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in chapter 13 of <a href="chapBib.html#biBJH04">[JH04]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(4,GF(2));
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> v:=List(c);
+[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
+  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+Z(2)^0
+gap> v:=Codeword(v);
+[ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> BitFlipDecoder(C,v);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+
+
+</pre></td></tr></table>
+
+<p><a id="X7B88DEB37F28404A" name="X7B88DEB37F28404A"></a></p>
+
+<h5>4.10-6 NearestNeighborGRSDecodewords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NearestNeighborGRSDecodewords</code>( <var class="Arg">C, v, dist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NearestNeighborGRSDecodewords</code> finds all generalized Reed-Solomon codewords within distance <var class="Arg">dist</var> from <var class="Arg">v</var> <em>and</em> the associated polynomial, using ``brute force''. Input: <var class="Arg">v</var> is a received vector (a <strong class="pkg">GUAVA</strong> codeword), <var class="Arg">C</var> is a GRS code, <var class="Arg">dist</var> > 0 is the distance from <var class="Arg">v</var> to search in <var class="Arg [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); # 6 error correcting
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
+[ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
+  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X825E35757D778787" name="X825E35757D778787"></a></p>
+
+<h5>4.10-7 NearestNeighborDecodewords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NearestNeighborDecodewords</code>( <var class="Arg">C, v, dist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NearestNeighborDecodewords</code> finds all codewords in a linear code <var class="Arg">C</var> within distance <var class="Arg">dist</var> from <var class="Arg">v</var>, using ``brute force''. Input: <var class="Arg">v</var> is a received vector (a <strong class="pkg">GUAVA</strong> codeword), <var class="Arg">C</var> is a linear code, <var class="Arg">dist</var> > 0 is the distance from <var class="Arg">v</var> to search in <var class="Arg">C</var>. Output: a l [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C);
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborDecodewords(C,r,7);
+[ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
+  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]
+
+</pre></td></tr></table>
+
+<p><a id="X7D02E0FE8735D3E6" name="X7D02E0FE8735D3E6"></a></p>
+
+<h5>4.10-8 Syndrome</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Syndrome</code>( <var class="Arg">C, v</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Syndrome</code> returns the syndrome of word <var class="Arg">v</var> with respect to a linear code <var class="Arg">C</var>. <var class="Arg">v</var> is a codeword in the ambient vector space of <var class="Arg">C</var>. If <var class="Arg">v</var> is an element of <var class="Arg">C</var>, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see <code class="func">SyndromeTable</code> (<a href="chap4.html#X7 [...]
+
+<p>A syndrome is not defined for non-linear codes. <code class="code">Syndrome</code> then returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(4);
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> v := CodewordNr( C, 7 );
+[ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
+gap> Syndrome( C, v );
+[ 0 0 0 0 ]
+gap> Syndrome( C, Codeword( "000000001100111" ) );
+[ 1 1 1 1 ]
+gap> Syndrome( C, Codeword( "000000000000001" ) );
+[ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
+               # coset of C 
+</pre></td></tr></table>
+
+<p><a id="X7B9E71987E4294A7" name="X7B9E71987E4294A7"></a></p>
+
+<h5>4.10-9 SyndromeTable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SyndromeTable</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SyndromeTable</code> returns a <em>syndrome table</em> of a linear code <var class="Arg">C</var>, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word <var class="Arg">v</var> with <code class="code">Syndrome</code> (see <code class="func">Syndrome</code> (<a href="chap4.html#X7D02E0FE8735D3E6"><b>4. [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> SyndromeTable(H);
+[ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
+  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
+gap> c := Codeword("101");
+[ 1 0 1 ]
+gap> c in H;
+false          # c is not an element of H
+gap> Syndrome(H,c);
+[ 1 0 ]        # according to the syndrome table,
+               # the error vector [ 0 1 0 ] belongs to this syndrome
+gap> c - Codeword("010") in H;
+true           # so the corrected codeword is
+               # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
+               # this is an element of H 
+</pre></td></tr></table>
+
+<p><a id="X8642D0BD789DA9B5" name="X8642D0BD789DA9B5"></a></p>
+
+<h5>4.10-10 StandardArray</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> StandardArray</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">StandardArray</code> returns the standard array of a code <var class="Arg">C</var>. This is a matrix with elements of the codeword type. It has q^r rows and q^k columns, where q is the size of the base field of <var class="Arg">C</var>, r=n-k is the redundancy of <var class="Arg">C</var>, and k is the dimension of <var class="Arg">C</var>. The first row contains all the elements of <var class="Arg">C</var>. Each other row contains words that do not belong to the cod [...]
+
+<p>A non-linear code does not have a standard array. <code class="code">StandardArray</code> then returns an error.</p>
+
+<p>Note that calculating a standard array can be very time- and memory- consuming.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> StandardArray(RepetitionCode(3)); 
+[ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
+  [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]
+</pre></td></tr></table>
+
+<p><a id="X83231E717CCB0247" name="X83231E717CCB0247"></a></p>
+
+<h5>4.10-11 PermutationDecode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationDecode</code>( <var class="Arg">C, v</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutationDecode</code> performs permutation decoding when possible and returns original vector and prints 'fail' when not possible.</p>
+
+<p>This uses <code class="code">AutomorphismGroup</code> in the binary case, and (the slower) <code class="code">PermutationAutomorphismGroup</code> otherwise, to compute the permutation automorphism group P of <var class="Arg">C</var>. The algorithm runs through the elements p of P checking if the weight of H(p* v) is less than (d-1)/2. If it is then the vector p* v is used to decode v: assuming <var class="Arg">C</var> is in standard form then c=p^-1Em is the decoded word, where m is t [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C0:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> G0:=GeneratorMat(C0);;
+gap> G := List(G0, ShallowCopy);;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . 1 1
+ . 1 . . 1 . 1
+ . . 1 . 1 1 .
+ . . . 1 1 1 1
+gap> H0:=CheckMat(C0);;
+gap> Display(H0);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> c0:=Random(C0);
+[ 0 0 0 1 1 1 1 ]
+gap> v01:=c0[1]+Z(2)^2;;
+gap> v1:=List(c0, ShallowCopy);;
+gap> v1[1]:=v01;;
+gap> v1:=Codeword(v1);
+[ 1 0 0 1 1 1 1 ]
+gap> c1:=PermutationDecode(C0,v1);
+[ 0 0 0 1 1 1 1 ]
+gap> c1=c0;
+true
+</pre></td></tr></table>
+
+<p><a id="X85B692177E2A745D" name="X85B692177E2A745D"></a></p>
+
+<h5>4.10-12 PermutationDecodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationDecodeNC</code>( <var class="Arg">C, v, P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Same as <code class="code">PermutationDecode</code> except that one may enter the permutation automorphism group <var class="Arg">P</var> in as an argument, saving time. Here <var class="Arg">P</var> is a subgroup of the symmetric group on n letters, where n is the word length of <var class="Arg">C</var>.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap3.html">Previous Chapter</a>    <a href="chap5.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap4.txt b/doc/chap4.txt
new file mode 100644
index 0000000..5ea40e8
--- /dev/null
+++ b/doc/chap4.txt
@@ -0,0 +1,2098 @@
+  
+  4. Codes
+  
+  A  code  is  a  set  of  codewords  (recall  a codeword in GUAVA is simply a
+  sequence  of elements of a finite field GF(q), where q is a prime power). We
+  call  these  the  elements  of  the  code.  Depending on the type of code, a
+  codeword  can  be  interpreted  as  a  vector  or  as  a polynomial. This is
+  explained in more detail in Chapter 3..
+  
+  In  GUAVA, codes can be a set specified by its elements (this will be called
+  an unrestricted code), by a generator matrix listing a set of basis elements
+  (for a linear code) or by a generator polynomial (for a cyclic code).
+  
+  Any  code can be defined by its elements. If you like, you can give the code
+  a name.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+    a (4,3,1..4)2..4 example code over GF(2) 
+  ------------------------------------------------------------------
+  
+  An (n,M,d) code is a code with word length n, size M and minimum distance d.
+  If  the  minimum  distance  has not yet been calculated, the lower bound and
+  upper  bound  are  printed  (except  in  the case where the code is a random
+  linear codes, where these are not printed for efficiency reasons). So
+  
+  
+  a (4,3,1..4)2..4 code over GF(2)
+  means  a  binary  unrestricted  code  of  length  4, with 3 elements and the
+  minimum  distance  is greater than or equal to 1 and less than or equal to 4
+  and the covering radius is greater than or equal to 2 and less than or equal
+  to 4.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+    a (4,3,1..4)2..4 example code over GF(2) 
+    gap> MinimumDistance(C);
+    2
+    gap> C;
+    a (4,3,2)2..4 example code over GF(2) 
+  ------------------------------------------------------------------
+  
+  If  the  set of elements is a linear subspace of GF(q)^n, the code is called
+  linear.  If  a  code is linear, it can be defined by its generator matrix or
+  parity  check  matrix.  By definition, the rows of the generator matrix is a
+  basis  for  the code (as a vector space over GF(q)). By definition, the rows
+  of the parity check matrix is a basis for the dual space of the code,
+  
+  
+       C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
+    a linear [3,2,1..2]1 demo code over GF(3) 
+  ------------------------------------------------------------------
+  
+  So  a  linear  [n,  k,  d]r  code is a code with word length n, dimension k,
+  minimum distance d and covering radius r.
+  
+  If  the  code  is linear and all cyclic shifts of its codewords (regarded as
+  n-tuples)  are again codewords, the code is called cyclic. All elements of a
+  cyclic  code  are  multiples of the monic polynomial modulo a polynomial x^n
+  -1,  where  n  is the word length of the code. Such a polynomial is called a
+  generator  polynomial  The  generator  polynomial  must divide x^n-1 and its
+  quotient  is  called  a check polynomial. Multiplying a codeword in a cyclic
+  code  by the check polynomial yields zero (modulo the polynomial x^n -1). In
+  GUAVA,  a  cyclic  code can be defined by either its generator polynomial or
+  check polynomial.
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
+    a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+  ------------------------------------------------------------------
+  
+  It is possible that GUAVA does not know that an unrestricted code is in fact
+  linear.  This  situation  occurs for example when a code is generated from a
+  list  of elements with the function ElementsCode (see ElementsCode (5.1-1)).
+  By calling the function IsLinearCode (see IsLinearCode (4.3-4)), GUAVA tests
+  if the code can be represented by a generator matrix. If so, the code record
+  and the operations are converted accordingly.
+  
+  ---------------------------  Example  ----------------------------
+    gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+    gap> C := ElementsCode( L, GF(2) );
+    a (3,4,1..3)1 user defined unrestricted code over GF(2)
+    # so far, GUAVA does not know what kind of code this is
+    gap> IsLinearCode( C );
+    true                      # it is linear
+    gap> C;
+    a linear [3,2,1]1 user defined unrestricted code over GF(2) 
+  ------------------------------------------------------------------
+  
+  Of  course the same holds for unrestricted codes that in fact are cyclic, or
+  codes, defined by a generator matrix, that actually are cyclic.
+  
+  Codes  are printed simply by giving a small description of their parameters,
+  the  word  length,  size  or  dimension  and  perhaps  the minimum distance,
+  followed by a short description and the base field of the code. The function
+  Display  gives a more detailed description, showing the construction history
+  of the code.
+  
+  GUAVA  doesn't  place  much  emphasis  on  the  actual encoding and decoding
+  processes;  some algorithms have been included though. Encoding works simply
+  by  multiplying  an  information vector with a code, decoding is done by the
+  functions  Decode  or  Decodeword.  For  more information about encoding and
+  decoding, see sections 4.2 and 4.10-1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := ReedMullerCode( 1, 3 );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+    gap> w := [ 1, 0, 1, 1 ] * R;
+    [ 1 0 0 1 1 0 0 1 ]
+    gap> Decode( R, w );
+    [ 1 0 1 1 ]
+    gap> Decode( R, w + "10000000" ); # One error at the first position
+    [ 1 0 1 1 ]                       # Corrected by Guava 
+  ------------------------------------------------------------------
+  
+  Sections  4.1  and 4.2 describe the operations that are available for codes.
+  Section  4.3  describe  the functions that tests whether an object is a code
+  and  what  kind  of  code  it  is  (see  IsCode,  IsLinearCode  (4.3-4)  and
+  IsCyclicCode)  and  various  other  boolean functions for codes. Section 4.4
+  describe   functions   about  equivalence  and  isomorphism  of  codes  (see
+  IsEquivalent   (4.4-1),   CodeIsomorphism   (4.4-2)   and  AutomorphismGroup
+  (4.4-3)).  Section 4.5 describes functions that work on domains (see Chapter
+  "Domains  and  their  Elements"  in  the  GAP Reference Manual). Section 4.6
+  describes functions for printing and displaying codes. Section 4.7 describes
+  functions  that  return the matrices and polynomials that define a code (see
+  GeneratorMat  (4.7-1),  CheckMat  (4.7-2),  GeneratorPol  (4.7-3),  CheckPol
+  (4.7-4),  RootsOfCode  (4.7-5)). Section 4.8 describes functions that return
+  the  basic  parameters  of codes (see WordLength (4.8-1), Redundancy (4.8-2)
+  and  MinimumDistance  (4.8-3)).  Section 4.9 describes functions that return
+  distance   and   weight   distributions   (see  WeightDistribution  (4.9-2),
+  InnerDistribution      (4.9-3),      OuterDistribution      (4.9-5)      and
+  DistancesDistribution  (4.9-4)).  Section  4.10 describes functions that are
+  related  to  decoding  (see  Decode  (4.10-1), Decodeword (4.10-2), Syndrome
+  (4.10-8),  SyndromeTable  (4.10-9) and StandardArray (4.10-10)). In Chapters
+  5.  and  6. which follow, we describe functions that generate and manipulate
+  codes.
+  
+  
+  4.1 Comparisons of Codes
+  
+  4.1-1 =
+  
+  > =( C1, C2 ) ______________________________________________________function
+  
+  The equality operator C1 = C2 evaluates to `true' if the codes C1 and C2 are
+  equal, and to `false' otherwise.
+  
+  The  equality operator is also denoted EQ, and Eq(C1,C2) is the same as C1 =
+  C2. There is also an inequality operator, < >, or not EQ.
+  
+  Note  that  codes  are equal if and only if their set of elements are equal.
+  Codes  can  also be compared with objects of other types. Of course they are
+  never equal.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+    gap> C1 := ElementsCode( M, GF(2) );
+    a (2,4,1..2)0 user defined unrestricted code over GF(2)
+    gap> M = C1;
+    false
+    gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+    a linear [2,2,1]0 code defined by generator matrix over GF(2)
+    gap> C1 = C2;
+    true
+    gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+    true
+    gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+    false
+  ------------------------------------------------------------------
+  
+  Another  way  of  comparing codes is IsEquivalent, which checks if two codes
+  are   equivalent  (see  IsEquivalent  (4.4-1)).  By  the  way,  this  called
+  CodeIsomorphism.  For  the current version of GUAVA, unless one of the codes
+  is  unrestricted,  this  calls Leon's C program (which only works for binary
+  linear codes and only on a unix/linux computer).
+  
+  
+  4.2 Operations for Codes
+  
+  4.2-1 +
+  
+  > +( C1, C2 ) ______________________________________________________function
+  
+  The  operator  `+'  evaluates  to the direct sum of the codes C1 and C2. See
+  DirectSumCode (6.2-1).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1:=RandomLinearCode(10,5);
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> C2:=RandomLinearCode(9,4);
+    a  [9,4,?] randomly generated code over GF(2)
+    gap> C1+C2;
+    a linear [10,9,1]0..10 unknown linear code over GF(2)
+  ------------------------------------------------------------------
+  
+  4.2-2 *
+  
+  > *( C1, C2 ) ______________________________________________________function
+  
+  The operator `*' evaluates to the direct product of the codes C1 and C2. See
+  DirectProductCode (6.2-3).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+    a linear [4,2,1]1 code defined by generator matrix over GF(2)
+    gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+    a linear [4,2,1]1 code defined by generator matrix over GF(2)
+    gap> C1*C2;
+    a linear [16,4,1]4..12 direct product code
+  ------------------------------------------------------------------
+  
+  4.2-3 *
+  
+  > *( m, C ) ________________________________________________________function
+  
+  The operator m*C evaluates to the element of C belonging to information word
+  ('message')  m.  Here m may be a vector, polynomial, string or codeword or a
+  list  of  those.  This is the way to do encoding in GUAVA. C must be linear,
+  because  in  GUAVA,  encoding  by  multiplication is only defined for linear
+  codes. If C is a cyclic code, this multiplication is the same as multiplying
+  an  information  polynomial  m  by  the generator polynomial of C. If C is a
+  linear code, it is equal to the multiplication of an information vector m by
+  a generator matrix of C.
+  
+  To  invert  this,  use  the  function  InformationWord  (see InformationWord
+  (4.2-4), which simply calls the function Decode).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+    a linear [4,2,1]1 code defined by generator matrix over GF(2)
+    gap> m:=Codeword("11");
+    [ 1 1 ]
+    gap> m*C;
+    [ 1 1 0 0 ]
+  ------------------------------------------------------------------
+  
+  4.2-4 InformationWord
+  
+  > InformationWord( C, c ) __________________________________________function
+  
+  Here  C  is  a  linear  code  and  c  is  a  codeword  in  it.  The  command
+  InformationWord  returns  the  message  word  (or  'information  digits')  m
+  satisfying c=m*C. This command simply calls Decode, provided c in C is true.
+  Otherwise, it returns an error.
+  
+  To invert this, use the encoding function * (see * (4.2-3)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=HammingCode(3);
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> c:=Random(C);
+    [ 0 0 0 1 1 1 1 ]
+    gap> InformationWord(C,c);
+    [ 0 1 1 1 ]
+    gap> c:=Codeword("1111100");
+    [ 1 1 1 1 1 0 0 ]
+    gap> InformationWord(C,c);
+    "ERROR: codeword must belong to code"
+    gap> C:=NordstromRobinsonCode();
+    a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+    gap> c:=Random(C);
+    [ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
+    gap> InformationWord(C,c);
+    "ERROR: code must be linear"
+  ------------------------------------------------------------------
+  
+  
+  4.3 Boolean Functions for Codes
+  
+  4.3-1 in
+  
+  > in( c, C ) _______________________________________________________function
+  
+  The command c in C evaluates to `true' if C contains the codeword or list of
+  codewords specified by c. Of course, c and C must have the same word lengths
+  and base fields.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+    [ [ 0 0 0 ], [ 1 1 1 ] ]
+    gap> eC[2] in C;
+    true
+    gap> [ 0 ] in C;
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-2 IsSubset
+  
+  > IsSubset( C1, C2 ) _______________________________________________function
+  
+  The command IsSubset(C1,C2) returns `true' if C2 is a subcode of C1, i.e. if
+  C1 contains all the elements of C2.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+    true
+    gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+    false
+    gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+    true
+  ------------------------------------------------------------------
+  
+  4.3-3 IsCode
+  
+  > IsCode( obj ) ____________________________________________________function
+  
+  IsCode returns `true' if obj, which can be an object of arbitrary type, is a
+  code  and  `false'  otherwise.  Will  cause  an  error  if obj is an unbound
+  variable.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsCode( 1 );
+    false
+    gap> IsCode( ReedMullerCode( 2,3 ) );
+    true
+  ------------------------------------------------------------------
+  
+  4.3-4 IsLinearCode
+  
+  > IsLinearCode( obj ) ______________________________________________function
+  
+  IsLinearCode checks if object obj (not necessarily a code) is a linear code.
+  If  a  code  has  already  been  marked  as  linear  or cyclic, the function
+  automatically returns `true'. Otherwise, the function checks if a basis G of
+  the  elements  of obj exists that generates the elements of obj. If so, G is
+  recorded  as  a  generator matrix of obj and the function returns `true'. If
+  not, the function returns `false'.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+    a (3,2,1..3)1 user defined unrestricted code over GF(2)
+    gap> IsLinearCode( C );
+    true
+    gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+    false
+    gap> IsLinearCode( 1 );
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-5 IsCyclicCode
+  
+  > IsCyclicCode( obj ) ______________________________________________function
+  
+  IsCyclicCode  checks  if  the  object  obj  is  a cyclic code. If a code has
+  already  been  marked  as cyclic, the function automatically returns `true'.
+  Otherwise,  the  function checks if a polynomial g exists that generates the
+  elements  of  obj. If so, g is recorded as a generator polynomial of obj and
+  the function returns `true'. If not, the function returns `false'.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+    a (3,2,1..3)1 user defined unrestricted code over GF(2)
+    gap> # GUAVA does not know the code is cyclic
+    gap> IsCyclicCode( C );      # this command tells GUAVA to find out
+    true
+    gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
+    false
+    gap> IsCyclicCode( 1 );
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-6 IsPerfectCode
+  
+  > IsPerfectCode( C ) _______________________________________________function
+  
+  IsPerfectCode(C)  returns  `true' if C is a perfect code. If Csubset GF(q)^n
+  then,  by definition, this means that for some positive integer t, the space
+  GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered
+  at  the  codewords in C. For a code with odd minimum distance d = 2t+1, this
+  is  the case when every word of the vector space of C is at distance at most
+  t  from exactly one element of C. Codes with even minimum distance are never
+  perfect.
+  
+  In fact, a code that is not "trivially perfect" (the binary repetition codes
+  of odd length, the codes consisting of one word, and the codes consisting of
+  the  whole  vector  space), and does not have the parameters of a Hamming or
+  Golay code, cannot be perfect (see section 1.12 in [HP03]).
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := HammingCode(2);
+    a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+    gap> IsPerfectCode( H );
+    true
+    gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+    true
+    gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+    false
+    gap> IsPerfectCode( BinaryGolayCode() );
+    true 
+  ------------------------------------------------------------------
+  
+  4.3-7 IsMDSCode
+  
+  > IsMDSCode( C ) ___________________________________________________function
+  
+  IsMDSCode(C) returns true if C is a maximum distance separable (MDS) code. A
+  linear  [n, k, d]-code of length n, dimension k and minimum distance d is an
+  MDS  code  if  k=n-d+1,  in  other words if C meets the Singleton bound (see
+  UpperBoundSingleton  (7.1-1)).  An unrestricted (n, M, d) code is called MDS
+  if  k=n-d+1,  with  k equal to the largest integer less than or equal to the
+  logarithm of M with base q, the size of the base field of C.
+  
+  Well-known  MDS  codes  include the repetition codes, the whole space codes,
+  the  even  weight  codes  (these  are  the  only  binary  MDS codes) and the
+  Reed-Solomon codes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ReedSolomonCode( 6, 3 );
+    a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
+    gap> IsMDSCode( C1 );
+    true    # 6-3+1 = 4
+    gap> IsMDSCode( QRCode( 23, GF(2) ) );
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-8 IsSelfDualCode
+  
+  > IsSelfDualCode( C ) ______________________________________________function
+  
+  IsSelfDualCode(C)  returns `true' if C is self-dual, i.e. when C is equal to
+  its  dual  code  (see  also  DualCode  (6.1-14)).  A code is self-dual if it
+  contains  all  vectors  that  its  elements  are orthogonal to. If a code is
+  self-dual,  it  automatically  is  self-orthogonal (see IsSelfOrthogonalCode
+  (4.3-9)).
+  
+  If  C  is a non-linear code, it cannot be self-dual (the dual code is always
+  linear),  so  `false'  is returned. A linear code can only be self-dual when
+  its dimension k is equal to the redundancy r.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
+    true
+    gap> C := ReedMullerCode( 1, 3 );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+    gap> DualCode( C ) = C;
+    true 
+  ------------------------------------------------------------------
+  
+  4.3-9 IsSelfOrthogonalCode
+  
+  > IsSelfOrthogonalCode( C ) ________________________________________function
+  
+  IsSelfOrthogonalCode(C)  returns  `true'  if C is self-orthogonal. A code is
+  self-orthogonal  if  every  element of C is orthogonal to all elements of C,
+  including  itself. (In the linear case, this simply means that the generator
+  matrix of C multiplied with its transpose yields a null matrix.)
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := ReedMullerCode(1,4);
+    a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+    gap> IsSelfOrthogonalCode(R);
+    true
+    gap> IsSelfDualCode(R);
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-10 IsDoublyEvenCode
+  
+  > IsDoublyEvenCode( C ) ____________________________________________function
+  
+  IsDoublyEvenCode(C)  returns  `true'  if C is a binary linear code which has
+  codewords  of weight divisible by 4 only. According to [HP03], a doubly-even
+  code  is  self-orthogonal  and  every row in its generator matrix has weight
+  that is divisible by 4.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> WeightDistribution(C);
+    [ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
+    gap> IsDoublyEvenCode(C);  
+    false
+    gap> C:=ExtendedCode(C);  
+    a linear [24,12,8]4 extended code
+    gap> WeightDistribution(C);
+    [ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
+    gap> IsDoublyEvenCode(C);  
+    true
+  ------------------------------------------------------------------
+  
+  4.3-11 IsSinglyEvenCode
+  
+  > IsSinglyEvenCode( C ) ____________________________________________function
+  
+  IsSinglyEvenCode(C)  returns  `true' if C is a binary self-orthogonal linear
+  code which is not doubly-even. In other words, C is a binary self-orthogonal
+  code which has codewords of even weight.
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:=Indeterminate(GF(2));                     
+    x_1
+    gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+    a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
+    gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
+    true
+    gap> IsDoublyEvenCode(C);
+    false
+    gap> IsSinglyEvenCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  4.3-12 IsEvenCode
+  
+  > IsEvenCode( C ) __________________________________________________function
+  
+  IsEvenCode(C)  returns  `true'  if  C  is  a  binary  linear  code which has
+  codewords of even weight--regardless whether or not it is self-orthogonal.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> IsSelfOrthogonalCode(C);
+    false
+    gap> IsEvenCode(C);
+    false
+    gap> C:=ExtendedCode(C);
+    a linear [24,12,8]4 extended code
+    gap> IsSelfOrthogonalCode(C);
+    true
+    gap> IsEvenCode(C);
+    true
+    gap> C:=ExtendedCode(QRCode(17,GF(2)));
+    a linear [18,9,6]3..5 extended code
+    gap> IsSelfOrthogonalCode(C);
+    false
+    gap> IsEvenCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  4.3-13 IsSelfComplementaryCode
+  
+  > IsSelfComplementaryCode( C ) _____________________________________function
+  
+  IsSelfComplementaryCode returns `true' if
+  
+  
+       v \in C \Rightarrow 1 - v \in C,
+  
+  
+  where 1 is the all-one word of length n.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
+    true
+    gap> IsSelfComplementaryCode( EvenWeightSubcode(
+    > HammingCode( 3, GF(2) ) ) );
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-14 IsAffineCode
+  
+  > IsAffineCode( C ) ________________________________________________function
+  
+  IsAffineCode  returns `true' if C is an affine code. A code is called affine
+  if  it is an affine space. In other words, a code is affine if it is a coset
+  of a linear code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsAffineCode( HammingCode( 3, GF(2) ) );
+    true
+    gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
+    > [ 1, 0, 0, 0, 0, 0, 0 ] ) );
+    true
+    gap> IsAffineCode( NordstromRobinsonCode() );
+    false 
+  ------------------------------------------------------------------
+  
+  4.3-15 IsAlmostAffineCode
+  
+  > IsAlmostAffineCode( C ) __________________________________________function
+  
+  IsAlmostAffineCode  returns  `true' if C is an almost affine code. A code is
+  called  almost affine if the size of any punctured code of C is q^r for some
+  r,  where  q  is  the size of the alphabet of the code. Every affine code is
+  also  almost  affine,  and  every  code  over GF(2) and GF(3) that is almost
+  affine is also affine.
+  
+  ---------------------------  Example  ----------------------------
+    gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
+    >                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
+    >                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
+    >                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
+    >                             GF(4) );;
+    gap> IsAlmostAffineCode( code );
+    true
+    gap> IsAlmostAffineCode( NordstromRobinsonCode() );
+    false 
+  ------------------------------------------------------------------
+  
+  
+  4.4 Equivalence and Isomorphism of Codes
+  
+  4.4-1 IsEquivalent
+  
+  > IsEquivalent( C1, C2 ) ___________________________________________function
+  
+  We say that C1 is permutation equivalent to C2 if C1 can be obtained from C2
+  by  carrying out column permutations. IsEquivalent returns true if C1 and C2
+  are  equivalent codes. At this time, IsEquivalent only handles binary codes.
+  (The  external  unix/linux  program  desauto  from  J.  S. Leon is called by
+  IsEquivalent.) Of course, if C1 and C2 are equal, they are also equivalent.
+  
+  Note that the algorithm is very slow for non-linear codes.
+  
+  More  generally,  we  say  that C1 is equivalent to C2 if C1 can be obtained
+  from  C2  by  carrying  out  column  permutations  and  a permutation of the
+  alphabet.
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+    Z(2)^0+x_1+x_1^3
+    gap> H := GeneratorPolCode( pol, 7, GF(2));          
+    a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+    gap> H = HammingCode(3, GF(2));
+    false
+    gap> IsEquivalent(H, HammingCode(3, GF(2)));
+    true                        # H is equivalent to a Hamming code
+    gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+    (3,4)(5,6,7) 
+  ------------------------------------------------------------------
+  
+  4.4-2 CodeIsomorphism
+  
+  > CodeIsomorphism( C1, C2 ) ________________________________________function
+  
+  If   the  two  codes  C1  and  C2  are  permutation  equivalent  codes  (see
+  IsEquivalent   (4.4-1)),   CodeIsomorphism   returns  the  permutation  that
+  transforms C1 into C2. If the codes are not equivalent, it returns `false'.
+  
+  At  this  time, IsEquivalent only computes isomorphisms between binary codes
+  on a linux/unix computer (since it calls Leon's C program desauto).
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+    Z(2)^0+x_1+x_1^3
+    gap> H := GeneratorPolCode( pol, 7, GF(2));          
+    a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+    gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+    (3,4)(5,6,7) 
+    gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+    true 
+  ------------------------------------------------------------------
+  
+  4.4-3 AutomorphismGroup
+  
+  > AutomorphismGroup( C ) ___________________________________________function
+  
+  AutomorphismGroup  returns  the automorphism group of a linear code C. For a
+  binary  code,  the  automorphism  group  is the largest permutation group of
+  degree n such that each permutation applied to the columns of C again yields
+  C.  GUAVA  calls  the  external program desauto written by J. S. Leon, if it
+  exists, to compute the automorphism group. If Leon's program is not compiled
+  on  the system (and in the default directory) then it calls instead the much
+  slower program PermutationAutomorphismGroup.
+  
+  See  Leon  [Leo82]  for  a  more  precise description of the method, and the
+  guava/src/leon/doc subdirectory for for details about Leon's C programs.
+  
+  The  function  PermutedCode permutes the columns of a code (see PermutedCode
+  (6.1-4)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := RepetitionCode(7,GF(2));
+    a cyclic [7,1,7]3 repetition code over GF(2)
+    gap> AutomorphismGroup(R);
+    Sym( [ 1 .. 7 ] )
+                            # every permutation keeps R identical
+    gap> C := CordaroWagnerCode(7);
+    a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
+    gap> AsSSortedList(C);
+    [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+    gap> AutomorphismGroup(C);
+    Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
+    gap> C2 :=  PermutedCode(C, (1,6)(2,7));
+    a linear [7,2,4]3 permuted code
+    gap> AsSSortedList(C2);
+    [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+    gap> C2 = C;
+    true 
+  ------------------------------------------------------------------
+  
+  4.4-4 PermutationAutomorphismGroup
+  
+  > PermutationAutomorphismGroup( C ) ________________________________function
+  
+  PermutationAutomorphismGroup returns the permutation automorphism group of a
+  linear  code  C. This is the largest permutation group of degree n such that
+  each  permutation  applied to the columns of C again yields C. It is written
+  in GAP, so is much slower than AutomorphismGroup.
+  
+  When    C    is    binary   PermutationAutomorphismGroup   does   not   call
+  AutomorphismGroup,  even though they agree mathematically in that case. This
+  way  PermutationAutomorphismGroup  can  be called on any platform which runs
+  GAP.
+  
+  The  older  name for this command, PermutationGroup, will become obsolete in
+  the next version of GAP.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := RepetitionCode(3,GF(3));
+    a cyclic [3,1,3]2 repetition code over GF(3)
+    gap> G:=PermutationAutomorphismGroup(R);
+    Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
+    gap> G=SymmetricGroup(3);
+    true
+  ------------------------------------------------------------------
+  
+  
+  4.5 Domain Functions for Codes
+  
+  These  are  some  GAP  functions  that  work  on `Domains' in general. Their
+  specific effect on `Codes' is explained here.
+  
+  4.5-1 IsFinite
+  
+  > IsFinite( C ) ____________________________________________________function
+  
+  IsFinite  is  an  implementation  of  the  GAP  domain function IsFinite. It
+  returns true for a code C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
+    true 
+  ------------------------------------------------------------------
+  
+  4.5-2 Size
+  
+  > Size( C ) ________________________________________________________function
+  
+  Size  returns the size of C, the number of elements of the code. If the code
+  is  linear, the size of the code is equal to q^k, where q is the size of the
+  base field of C and k is the dimension.
+  
+  ---------------------------  Example  ----------------------------
+    gap> Size( RepetitionCode( 1000, GF(11) ) );
+    11
+    gap> Size( NordstromRobinsonCode() );
+    256 
+  ------------------------------------------------------------------
+  
+  4.5-3 LeftActingDomain
+  
+  > LeftActingDomain( C ) ____________________________________________function
+  
+  LeftActingDomain  returns  the  base  field  of  a code C. Each element of C
+  consists  of  elements  of  this base field. If the base field is F, and the
+  word  length  of the code is n, then the codewords are elements of F^n. If C
+  is  a  cyclic  code,  its  elements  are  interpreted  as  polynomials  with
+  coefficients over F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
+    a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
+    gap> LeftActingDomain( C1 );
+    GF(2^2)
+    gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
+    GF(3^2) 
+  ------------------------------------------------------------------
+  
+  4.5-4 Dimension
+  
+  > Dimension( C ) ___________________________________________________function
+  
+  Dimension  returns  the  parameter k of C, the dimension of the code, or the
+  number of information symbols in each codeword. The dimension is not defined
+  for non-linear codes; Dimension then returns an error.
+  
+  ---------------------------  Example  ----------------------------
+    gap> Dimension( NullCode( 5, GF(5) ) );
+    0
+    gap> C := BCHCode( 15, 4, GF(4) );
+    a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
+    gap> Dimension( C );
+    9
+    gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+    true 
+  ------------------------------------------------------------------
+  
+  4.5-5 AsSSortedList
+  
+  > AsSSortedList( C ) _______________________________________________function
+  
+  AsSSortedList (as strictly sorted list) returns an immutable, duplicate free
+  list  of  the elements of C. For a finite field GF(q) generated by powers of
+  Z(q), the ordering on
+  
+  
+       GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \}
+  
+  
+  is  that  determined  by  the  exponents  i.  These elements are of the type
+  codeword  (see  Codeword (3.1-1)). Note that for large codes, generating the
+  elements  may  be very time- and memory-consuming. For generating a specific
+  element  or  a  subset  of  the  elements,  use  CodewordNr  (see CodewordNr
+  (3.1-2)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ConferenceCode( 5 );
+    a (5,12,2)1..4 conference code over GF(2)
+    gap> AsSSortedList( C );
+    [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+      [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+      [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+    gap> CodewordNr( C, [ 1, 2 ] );
+    [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]
+  ------------------------------------------------------------------
+  
+  
+  4.6 Printing and Displaying Codes
+  
+  4.6-1 Print
+  
+  > Print( C ) _______________________________________________________function
+  
+  Print  prints information about C. This is the same as typing the identifier
+  C at the GAP-prompt.
+  
+  If the argument is an unrestricted code, information in the form
+  
+  
+  a (n,M,d)r ... code over GF(q)
+  is  printed,  where  n  is  the word length, M the number of elements of the
+  code, d the minimum distance and r the covering radius.
+  
+  If the argument is a linear code, information in the form
+  
+  
+  a linear [n,k,d]r ... code over GF(q)
+  is  printed,  where n is the word length, k the dimension of the code, d the
+  minimum distance and r the covering radius.
+  
+  Except  for codes produced by RandomLinearCode, if d is not yet known, it is
+  displayed in the form
+  
+  
+  lowerbound..upperbound
+  and  if  r  is  not  yet known, it is displayed in the same way. For certain
+  ranges  of  n,  the  values  of  lowerbound and upperbound are obtained from
+  tables.
+  
+  The function Display gives more information. See Display (4.6-3).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
+    a linear [8,4,4]2 extended code
+    gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
+    This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 
+  ------------------------------------------------------------------
+  
+  4.6-2 String
+  
+  > String( C ) ______________________________________________________function
+  
+  String  returns  information  about  C in a string. This function is used by
+  Print.
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
+    x_1^2+Z(3)^0
+    gap> Factors(pol);
+    [ x_1^2+Z(3)^0 ]
+    gap> H := GeneratorPolCode( pol, 8, GF(3));
+    a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+    gap> String(H);
+    "a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"
+  ------------------------------------------------------------------
+  
+  4.6-3 Display
+  
+  > Display( C ) _____________________________________________________function
+  
+  Display  prints  the method of construction of code C. With this history, in
+  most  cases  an  equal  or  equivalent code can be reconstructed. If C is an
+  unmanipulated code, the result is equal to output of the function Print (see
+  Print (4.6-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> Display( RepetitionCode( 6, GF(3) ) );
+    a cyclic [6,1,6]4 repetition code over GF(3)
+    gap> C1 := ExtendedCode( HammingCode(2) );;
+    gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+    gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+    a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
+    a linear [11,8,1]1..2 U U+V construction code of
+    U: a linear [4,1,4]2 extended code of
+       a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+    V: a linear [7,7,1]0 punctured code of
+       a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)
+  ------------------------------------------------------------------
+  
+  4.6-4 DisplayBoundsInfo
+  
+  > DisplayBoundsInfo( bds ) _________________________________________function
+  
+  DisplayBoundsInfo  prints the method of construction of the code C indicated
+  in bds:= BoundsMinimumDistance( n, k, GF(q) ).
+  
+  ---------------------------  Example  ----------------------------
+    gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+    gap> DisplayBoundsInfo(bounds);
+    an optimal linear [20,17,d] code over GF(4) has d=3
+    --------------------------------------------------------------------------------------------------
+    Lb(20,17)=3, by shortening of:
+    Lb(21,18)=3, by applying contruction B to a [81,77,3] code
+    Lb(81,77)=3, by shortening of:
+    Lb(85,81)=3, reference: Ham
+    --------------------------------------------------------------------------------------------------
+    Ub(20,17)=3, by considering shortening to:
+    Ub(7,4)=3, by considering puncturing to:
+    Ub(6,4)=2, by construction B applied to:
+    Ub(2,1)=2, repetition code
+    --------------------------------------------------------------------------------------------------
+    Reference Ham:
+    %T this reference is unknown, for more info
+    %T contact A.E. Brouwer (aeb at cwi.nl)
+  ------------------------------------------------------------------
+  
+  
+  4.7 Generating (Check) Matrices and Polynomials
+  
+  4.7-1 GeneratorMat
+  
+  > GeneratorMat( C ) ________________________________________________function
+  
+  GeneratorMat  returns  a  generator  matrix  of  C. The code consists of all
+  linear combinations of the rows of this matrix.
+  
+  If  until  now  no generator matrix of C was determined, it is computed from
+  either  the  parity  check  matrix,  the  generator  polynomial,  the  check
+  polynomial or the elements (if possible), whichever is available.
+  
+  If C is a non-linear code, the function returns an error.
+  
+  ---------------------------  Example  ----------------------------
+    gap> GeneratorMat( HammingCode( 3, GF(2) ) );
+    [ [ an immutable GF2 vector of length 7], 
+      [ an immutable GF2 vector of length 7], 
+      [ an immutable GF2 vector of length 7], 
+      [ an immutable GF2 vector of length 7] ]
+    gap> Display(last);
+     1 1 1 . . . .
+     1 . . 1 1 . .
+     . 1 . 1 . 1 .
+     1 1 . 1 . . 1
+    gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
+    [ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
+    gap> GeneratorMat( NullCode( 14, GF(4) ) );
+    [  ]
+  ------------------------------------------------------------------
+  
+  4.7-2 CheckMat
+  
+  > CheckMat( C ) ____________________________________________________function
+  
+  CheckMat  returns a parity check matrix of C. The code consists of all words
+  orthogonal  to  each of the rows of this matrix. The transpose of the matrix
+  is  a  right  inverse  of  the  generator matrix. The parity check matrix is
+  computed  from  either  the  generator matrix, the generator polynomial, the
+  check polynomial or the elements of C (if possible), whichever is available.
+  
+  If C is a non-linear code, the function returns an error.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CheckMat( HammingCode(3, GF(2) ) );
+    [ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+      [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
+      [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
+    gap> Display(last);
+     . . . 1 1 1 1
+     . 1 1 . . 1 1
+     1 . 1 . 1 . 1
+    gap> CheckMat( RepetitionCode( 5, GF(25) ) );
+    [ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
+      [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
+      [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
+      [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
+    gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
+    [  ] 
+  ------------------------------------------------------------------
+  
+  4.7-3 GeneratorPol
+  
+  > GeneratorPol( C ) ________________________________________________function
+  
+  GeneratorPol returns the generator polynomial of C. The code consists of all
+  multiples  of  the  generator  polynomial  modulo x^n-1, where n is the word
+  length  of  C.  The generator polynomial is determined from either the check
+  polynomial,  the  generator  or  check  matrix  or  the  elements  of  C (if
+  possible), whichever is available.
+  
+  If C is not a cyclic code, the function returns `false'.
+  
+  ---------------------------  Example  ----------------------------
+    gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+    Z(2)^0+x_1
+    gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+    Z(2)^0
+    gap> GeneratorPol( NullCode( 7, GF(3) ) );
+    -Z(3)^0+x_1^7
+  ------------------------------------------------------------------
+  
+  4.7-4 CheckPol
+  
+  > CheckPol( C ) ____________________________________________________function
+  
+  CheckPol  returns  the  check  polynomial  of  C.  The  code consists of all
+  polynomials f with
+  
+  
+       f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1),
+  
+  
+  where  h  is  the check polynomial, and n is the word length of C. The check
+  polynomial  is  computed  from  the  generator  polynomial, the generator or
+  parity  check  matrix  or  the  elements  of  C  (if possible), whichever is
+  available.
+  
+  If C if not a cyclic code, the function returns an error.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+    Z(2)^0+x_1+x_1^2
+    gap> CheckPol(WholeSpaceCode(4, GF(2)));
+    Z(2)^0+x_1^4
+    gap> CheckPol(NullCode(7,GF(3)));
+    Z(3)^0
+  ------------------------------------------------------------------
+  
+  4.7-5 RootsOfCode
+  
+  > RootsOfCode( C ) _________________________________________________function
+  
+  RootsOfCode  returns  a  list  of all zeros of the generator polynomial of a
+  cyclic code C. These are finite field elements in the splitting field of the
+  generator  polynomial, GF(q^m), m is the multiplicative order of the size of
+  the base field of the code, modulo the word length.
+  
+  The reverse process, constructing a code from a set of roots, can be carried
+  out by the function RootsCode (see RootsCode (5.5-3)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ReedSolomonCode( 16, 5 );
+    a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
+    gap> RootsOfCode( C1 );
+    [ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
+    gap> C2 := RootsCode( 16, last );
+    a cyclic [16,12,5]3..4 code defined by roots over GF(17)
+    gap> C1 = C2;
+    true 
+  ------------------------------------------------------------------
+  
+  
+  4.8 Parameters of Codes
+  
+  4.8-1 WordLength
+  
+  > WordLength( C ) __________________________________________________function
+  
+  WordLength  returns  the  parameter n of C, the word length of the elements.
+  Elements  of  cyclic  codes  are  polynomials  of  maximum  degree  n-1,  as
+  calculations are carried out modulo x^n-1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> WordLength( NordstromRobinsonCode() );
+    16
+    gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+    6
+    gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+    14 
+  ------------------------------------------------------------------
+  
+  4.8-2 Redundancy
+  
+  > Redundancy( C ) __________________________________________________function
+  
+  Redundancy  returns  the  redundancy r of C, which is equal to the number of
+  check  symbols  in each element. If C is not a linear code the redundancy is
+  not defined and Redundancy returns an error.
+  
+  If  a  linear  code  C  has dimension k and word length n, it has redundancy
+  r=n-k.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := TernaryGolayCode();
+    a cyclic [11,6,5]2 ternary Golay code over GF(3)
+    gap> Redundancy(C);
+    5
+    gap> Redundancy( DualCode(C) );
+    6 
+  ------------------------------------------------------------------
+  
+  4.8-3 MinimumDistance
+  
+  > MinimumDistance( C ) _____________________________________________function
+  
+  MinimumDistance  returns  the  minimum  distance of C, the largest integer d
+  with  the property that every element of C has at least a Hamming distance d
+  (see  DistanceCodeword (3.6-2)) to any other element of C. For linear codes,
+  the  minimum  distance  is equal to the minimum weight. This means that d is
+  also    the    smallest   positive   value   with   w[d+1]   <>   0,   where
+  w=(w[1],w[2],...,w[n])    is    the    weight   distribution   of   C   (see
+  WeightDistribution  (4.9-2)).  For  unrestricted  codes,  d  is the smallest
+  positive value with w[d+1] <> 0, where w is the inner distribution of C (see
+  InnerDistribution (4.9-3)).
+  
+  For codes with only one element, the minimum distance is defined to be equal
+  to the word length.
+  
+  For  linear  codes C, the algorithm used is the following: After replacing C
+  by  a permutation equivalent C', one may assume the generator matrix has the
+  following  form  G=(I_k  ,  |  , A), for some kx (n-k) matrix A. If A=0 then
+  return  d(C)=1.  Next,  find the minimum distance of the code spanned by the
+  rows  of  A.  Call  this  distance  d(A). Note that d(A) is equal to the the
+  Hamming  distance  d(v,0)  where  v  is  some proper linear combination of i
+  distinct rows of A. Return d(C)=d(A)+i, where i is as in the previous step.
+  
+  This  command  may also be called using the syntax MinimumDistance(C, w). In
+  this  form,  MinimumDistance returns the minimum distance of a codeword w to
+  the code C, also called the distance from w to C. This is the smallest value
+  d  for which there is an element c of the code C which is at distance d from
+  w.  So  d  is  also  the minimum value for which D[d+1] <> 0, where D is the
+  distance distribution of w to C (see DistancesDistribution (4.9-4)).
+  
+  Note  that  w must be an element of the same vector space as the elements of
+  C.  w  does  not  necessarily  belong  to  the code (if it does, the minimum
+  distance is zero).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := MOLSCode(7);; MinimumDistance(C);
+    3
+    gap> WeightDistribution(C);
+    [ 1, 0, 0, 24, 24 ]
+    gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+    1
+    gap> MinimumDistance( NullCode( 4, GF(2) ) );
+    4
+    gap> C := ConferenceCode(9);; MinimumDistance(C);
+    4
+    gap> InnerDistribution(C);
+    [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
+    gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
+    [ 3 3 6 2 ]
+    gap> MinimumDistance( C, w );
+    0
+    gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+    3                           # so w no longer belongs to C 
+  ------------------------------------------------------------------
+  
+  See  also  the  GUAVA commands relating to bounds on the minimum distance in
+  section 7.1.
+  
+  4.8-4 MinimumDistanceLeon
+  
+  > MinimumDistanceLeon( C ) _________________________________________function
+  
+  MinimumDistanceLeon  returns  the  ``probable'' minimum distance d_Leon of a
+  linear  binary  code  C,  using  an  implementation  of Leon's probabilistic
+  polynomial  time  algorithm.  Briefly: Let C be a linear code of dimension k
+  over  GF(q)  as above. The algorithm has input parameters s and rho, where s
+  is an integer between 2 and n-k, and rho is an integer between 2 and k.
+  
+  --    Find a generator matrix G of C.
+  
+  --    Randomly permute the columns of G.
+  
+  --    Perform  Gaussian  elimination  on the permuted matrix to obtain a new
+        matrix of the following form:
+  
+  
+             G=(I_{k} \, | \, Z \, | \, B)
+  
+  
+        with  Z  a  kx s matrix. If (Z,B) is the zero matrix then return 1 for
+        the  minimum  distance.  If  Z=0  but not B then either choose another
+        permutation of the rows of C or return `method fails'.
+  
+  --    Search  Z  for  at most rho rows that lead to codewords of weight less
+        than rho.
+  
+  --    For these codewords, compute the weight of the whole word in C. Return
+        this weight.
+  
+  (See for example J. S. Leon, [Leo88] for more details.) Sometimes (as is the
+  case  in  GUAVA)  this probabilistic algorithm is repeated several times and
+  the most commonly occurring value is taken.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(50,22,GF(2));
+    a  [50,22,?] randomly generated code over GF(2)
+    gap> MinimumDistanceLeon(C); time;
+    6
+    211
+    gap> MinimumDistance(C); time;
+    6
+    1204
+  ------------------------------------------------------------------
+  
+  4.8-5 MinimumWeight
+  
+  > MinimumWeight( C ) _______________________________________________function
+  
+  MinimumWeight  returns the minimum Hamming weight of a linear code C. At the
+  moment,  this  function  works  for  binary  and  ternary  codes  only.  The
+  MinimumWeight  function  relies  on  an external executable program which is
+  written in C language. As a consequence, the execution time of MinimumWeight
+  function is faster than that of MinimumDistance (4.8-3) function.
+  
+  The  MinimumWeight  function  implements  Chen's  [Che69]  algorithm if C is
+  cyclic,  and  Zimmermann's  [Zim96] algorithm if C is a general linear code.
+  This  function has a built-in check on the constraints of the minimum weight
+  codewords.  For  example, for a self-orthogonal code over GF(3), the minimum
+  weight  codewords  have  weight  that  is  divisible  by  3,  i.e.  0  mod 3
+  congruence. Similary, self-orthogonal codes over GF(2) have codeword weights
+  that  are  divisible  by  4 and even codes over GF(2) have codewords weights
+  that  are  divisible by 2. By taking these constraints into account, in many
+  cases, the execution time may be significantly reduced. Consider the minimum
+  Hamming  weight  enumeration  of  the  [151,45]  binary  cyclic code (second
+  example  below).  This  cyclic code is self-orthogonal, so the weight of all
+  codewords  is  divisible  by  4.  Without  considering  this constraint, the
+  computation  will finish at information weight 10, rather than 9. We can see
+  that,  this  0  mod  4 constraint on the codeword weights, has allowed us to
+  avoid  enumeration  of  b(45,10) = 3,190,187,286 additional codewords, where
+  b(n,k)=n!/((n-k)!k!) is the binomial coefficient of integers n and k.
+  
+  Note  that the C source code for this minimum weight computation has not yet
+  been  optimised,  especially  the  code  for GF(3), and there are chances to
+  improve the speed of this function. Your contributions are most welcomed.
+  
+  If   you   find   any   bugs   on   this   function,  please  report  it  to
+  ctjhai at plymouth.ac.uk.
+  
+  ---------------------------  Example  ----------------------------
+    gap> # Extended ternary quadratic residue code of length 48
+    gap> n := 47;;
+    gap> x := Indeterminate(GF(3));;
+    gap> F := Factors(x^n-1);;
+    gap> v := List([1..n], i->Zero(GF(3)));;
+    gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+    gap> G := CirculantMatrix(24, v);;
+    gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
+    > for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+    > od;;
+    gap> C := GeneratorMatCodeNC(G, GF(3));
+    a  [48,24,?] randomly generated code over GF(3)
+    gap> MinimumWeight(C);
+    [48,24] linear code over GF(3) - minimum weight evaluation
+    Known lower-bound: 1
+    There are 2 generator matrices, ranks : 24 24 
+    The weight of the minimum weight codeword satisfies 0 mod 3 congruence
+    Enumerating codewords with information weight 1 (w=1)
+        Found new minimum weight 15
+    Number of matrices required for codeword enumeration 2
+    Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
+    Termination expected with information weight 6 at matrix 1
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 2 (w=2) using 2 matrices
+    Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
+    Termination expected with information weight 6 at matrix 1
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 3 (w=3) using 2 matrices
+    Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
+    Termination expected with information weight 6 at matrix 1
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 4 (w=4) using 2 matrices
+    Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
+    Termination expected with information weight 6 at matrix 1
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 5 (w=5) using 2 matrices
+    Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
+    Termination expected with information weight 6 at matrix 1
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 6 (w=6) using 1 matrices
+    Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
+    -----------------------------------------------------------------------------
+    Minimum weight: 15
+    15
+    gap> 
+    
+    gap> # Binary cyclic code [151,45,36]
+    gap> n := 151;;
+    gap> x := Indeterminate(GF(2));;
+    gap> F := Factors(x^n-1);;
+    gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+    a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
+    gap> MinimumWeight(C);
+    [151,45] cyclic code over GF(2) - minimum weight evaluation
+    Known lower-bound: 1
+    The weight of the minimum weight codeword satisfies 0 mod 4 congruence
+    Enumerating codewords with information weight 1 (w=1)
+        Found new minimum weight 56
+        Found new minimum weight 44
+    Number of matrices required for codeword enumeration 1
+    Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
+    Termination expected with information weight 11
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 2 (w=2) using 1 matrix
+    Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
+    Termination expected with information weight 11
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 3 (w=3) using 1 matrix
+       Found new minimum weight 40
+       Found new minimum weight 36
+    Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 4 (w=4) using 1 matrix
+    Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 5 (w=5) using 1 matrix
+    Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 6 (w=6) using 1 matrix
+    Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 7 (w=7) using 1 matrix
+    Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 8 (w=8) using 1 matrix
+    Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
+    Termination expected with information weight 9
+    -----------------------------------------------------------------------------
+    Enumerating codewords with information weight 9 (w=9) using 1 matrix
+    Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
+    -----------------------------------------------------------------------------
+    Minimum weight: 36
+    36
+  ------------------------------------------------------------------
+  
+  4.8-6 DecreaseMinimumDistanceUpperBound
+  
+  > DecreaseMinimumDistanceUpperBound( C, t, m ) _____________________function
+  
+  DecreaseMinimumDistanceUpperBound  is an implementation of the algorithm for
+  the  minimum  distance  of  a  linear  binary  code  C by Leon [Leo88]. This
+  algorithm  tries to find codewords with small minimum weights. The parameter
+  t  is  at  least  1  and  less than the dimension of C. The best results are
+  obtained  if it is close to the dimension of the code. The parameter m gives
+  the number of runs that the algorithm will perform.
+  
+  The  result  returned is a record with two fields; the first, mindist, gives
+  the  lowest  weight  found, and word gives the corresponding codeword. (This
+  was  implemented  before  MinimumDistanceLeon  but  independently. The older
+  manual  had  given  the  command  incorrectly, so the command was only found
+  after  reading  all  the  *.gi  files  in  the  GUAVA  library.  Though both
+  MinimumDistance   and   MinimumDistanceLeon   often  run  much  faster  than
+  DecreaseMinimumDistanceUpperBound, DecreaseMinimumDistanceUpperBound appears
+  to be more accurate than MinimumDistanceLeon.)
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(5,2,GF(2));
+    a  [5,2,?] randomly generated code over GF(2)
+    gap> DecreaseMinimumDistanceUpperBound(C,1,4);
+    rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
+    gap> MinimumDistance(C);
+    3
+    gap> C:=RandomLinearCode(8,4,GF(2));
+    a  [8,4,?] randomly generated code over GF(2)
+    gap> DecreaseMinimumDistanceUpperBound(C,3,4);
+    rec( mindist := 2,
+      word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
+    gap> MinimumDistance(C);
+    2
+  ------------------------------------------------------------------
+  
+  4.8-7 MinimumDistanceRandom
+  
+  > MinimumDistanceRandom( C, num, s ) _______________________________function
+  
+  MinimumDistanceRandom  returns  an  upper  bound  for  the  minimum distance
+  d_random  of  a  linear binary code C, using a probabilistic polynomial time
+  algorithm.  Briefly:  Let  C  be  a linear code of dimension k over GF(q) as
+  above.  The  algorithm has input parameters num and s, where s is an integer
+  between 2 and n-1, and num is an integer greater than or equal to 1.
+  
+  --    Find a generator matrix G of C.
+  
+  --    Randomly permute the columns of G, written G_p..
+  
+  --          G=(A, B)
+  
+  
+        with  A  a  kx  s  matrix. If A is the zero matrix then return `method
+        fails'.
+  
+  --    Search  A  for  at most 5 rows that lead to codewords, in the code C_A
+        with generator matrix A, of minimum weight.
+  
+  --    For  these codewords, use the associated linear combination to compute
+        the weight of the whole word in C. Return this weight and codeword.
+  
+  This  probabilistic  algorithm  is repeated num times (with different random
+  permutations  of the rows of G each time) and the weight and codeword of the
+  lowest occurring weight is taken.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(60,20,GF(2));
+    a  [60,20,?] randomly generated code over GF(2)
+    gap> #mindist(C);time;
+    gap> #mindistleon(C,10,30);time; #doesn't work well
+    gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!
+    
+     This is a probabilistic algorithm which may return the wrong answer.
+    [ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
+            1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
+    130
+    gap> a[2] in C;
+    true
+    gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
+    rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+          Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+          0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+          Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+          0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+          0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+          0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
+    649
+    gap> Codeword(b!.word) in C;
+    true
+    gap> MinimumDistance(C);time;
+    12
+    196
+    gap> c:=MinimumDistanceLeon(C);time;
+    12
+    66
+    gap> C:=RandomLinearCode(30,10,GF(3));
+    a  [30,10,?] randomly generated code over GF(3)
+    gap> a:=MinimumDistanceRandom(C,10,10);time;
+    
+     This is a probabilistic algorithm which may return the wrong answer.
+    [ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
+    229
+    gap> a[2] in C;
+    true
+    gap> MinimumDistance(C);time;
+    9
+    45
+    gap> c:=MinimumDistanceLeon(C);
+    Code must be binary. Quitting.
+    0
+    gap> a:=MinimumDistanceRandom(C,1,29);time;
+    
+     This is a probabilistic algorithm which may return the wrong answer.
+    [ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
+    53
+  ------------------------------------------------------------------
+  
+  4.8-8 CoveringRadius
+  
+  > CoveringRadius( C ) ______________________________________________function
+  
+  CoveringRadius  returns  the covering radius of a linear code C. This is the
+  smallest  number  r  with  the  property  that each element v of the ambient
+  vector space of C has at most a distance r to the code C. So for each vector
+  v  there  must  be an element c of C with d(v,c) <= r. The smallest covering
+  radius  of  any  [n,k] binary linear code is denoted t(n,k). A binary linear
+  code with reasonable small covering radius is called a covering code.
+  
+  If  C  is a perfect code (see IsPerfectCode (4.3-6)), the covering radius is
+  equal  to t, the number of errors the code can correct, where d = 2t+1, with
+  d the minimum distance of C (see MinimumDistance (4.8-3)).
+  
+  If  there exists a function called SpecialCoveringRadius in the `operations'
+  field of the code, then this function will be called to compute the covering
+  radius   of  the  code.  At  the  moment,  no  code-specific  functions  are
+  implemented.
+  
+  If the length of BoundsCoveringRadius (see BoundsCoveringRadius (7.2-1)), is
+  1, then the value in
+  
+  
+  C.boundsCoveringRadius
+  is returned. Otherwise, the function
+  
+  
+  C.operations.CoveringRadius
+  is  executed,  unless  the redundancy of C is too large. In the last case, a
+  warning is issued.
+  
+  The  algorithm  used to compute the covering radius is the following. First,
+  CosetLeadersMatFFE  is  used  to  compute  the  list of coset leaders (which
+  returns  a  codeword  in  each  coset  of GF(q)^n/C of minimum weight). Then
+  WeightVecFFE  is  used to compute the weight of each of these coset leaders.
+  The program returns the maximum of these weights.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := RandomLinearCode(10, 5, GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(H);
+    3
+    gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
+    true
+    gap> CoveringRadius(H);
+    1                       # Hamming codes have minimum distance 3
+    gap> CoveringRadius(ReedSolomonCode(7,4));
+    3 
+    gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+    3
+    gap> CoveringRadius( HammingCode( 5, GF(2) ) );
+    1
+    gap> C := ReedMullerCode( 1, 9 );;
+    gap> CoveringRadius( C );
+    CoveringRadius: warning, the covering radius of
+    this code cannot be computed straightforward.
+    Try to use IncreaseCoveringRadiusLowerBound( code ).
+    (see the manual for more details).
+    The covering radius of code lies in the interval:
+    [ 240 .. 248 ]
+  ------------------------------------------------------------------
+  
+  See  also  the  GUAVA commands relating to bounds on the minimum distance in
+  section 7.2.
+  
+  4.8-9 SetCoveringRadius
+  
+  > SetCoveringRadius( C, intlist ) __________________________________function
+  
+  SetCoveringRadius  enables  the  user  to  set  the covering radius herself,
+  instead  of  letting  GUAVA compute it. If intlist is an integer, GUAVA will
+  simply  put  it  in  the  `boundsCoveringRadius'  field.  If it is a list of
+  integers,    however,    it    will    intersect    this   list   with   the
+  `boundsCoveringRadius'  field,  thus  taking the best of both lists. If this
+  would  leave  an empty list, the field is set to intlist. Because some other
+  computations  use  the covering radius of the code, it is important that the
+  entered value is not wrong, otherwise new results may be invalid.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := BCHCode( 17, 3, GF(2) );;
+    gap> BoundsCoveringRadius( C );
+    [ 3 .. 4 ]
+    gap> SetCoveringRadius( C, [ 2 .. 3 ] );
+    gap> BoundsCoveringRadius( C );
+    [ [ 2 .. 3 ] ]
+  ------------------------------------------------------------------
+  
+  
+  4.9 Distributions
+  
+  4.9-1 MinimumWeightWords
+  
+  > MinimumWeightWords( C ) __________________________________________function
+  
+  MinimumWeightWords returns the list of minimum weight codewords of C.
+  
+  This  algorithm  is  written  in  GAP is slow, so is only suitable for small
+  codes.
+  
+  This  does  not call the very fast function MinimumWeight (see MinimumWeight
+  (4.8-5)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=HammingCode(3,GF(2));
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> MinimumWeightWords(C);
+    [ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
+      [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]
+    
+  ------------------------------------------------------------------
+  
+  4.9-2 WeightDistribution
+  
+  > WeightDistribution( C ) __________________________________________function
+  
+  WeightDistribution  returns  the  weight distribution of C, as a vector. The
+  i^th element of this vector contains the number of elements of C with weight
+  i-1.  For  linear  codes,  the  weight  distribution  is  equal to the inner
+  distribution   (see   InnerDistribution   (4.9-3)).   If  w  is  the  weight
+  distribution of a linear code C, it must have the zero codeword, so w[1] = 1
+  (one word of weight 0).
+  
+  Some   codes,   such   as   the   Hamming  codes,  have  precomputed  weight
+  distributions.  For  others,  the  program  WeightDistribution calls the GAP
+  program  DistancesDistributionMatFFEVecFFE,  which is written in C. See also
+  CodeWeightEnumerator.
+  
+  ---------------------------  Example  ----------------------------
+    gap> WeightDistribution( ConferenceCode(9) );
+    [ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
+    gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
+    [ 1, 0, 0, 0, 0, 0, 0, 3 ]
+    gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+    [ 1, 5, 10, 10, 5, 1 ] 
+  ------------------------------------------------------------------
+  
+  4.9-3 InnerDistribution
+  
+  > InnerDistribution( C ) ___________________________________________function
+  
+  InnerDistribution  returns  the inner distribution of C. The i^th element of
+  the  vector  contains the average number of elements of C at distance i-1 to
+  an  element  of  C. For linear codes, the inner distribution is equal to the
+  weight distribution (see WeightDistribution (4.9-2)).
+  
+  Suppose  w  is  the  inner  distribution  of  C. Then w[1] = 1, because each
+  element  of C has exactly one element at distance zero (the element itself).
+  The  minimum  distance  of  C  is the smallest value d > 0 with w[d+1] <> 0,
+  because  a  distance  between  zero  and d never occurs. See MinimumDistance
+  (4.8-3).
+  
+  ---------------------------  Example  ----------------------------
+    gap> InnerDistribution( ConferenceCode(9) );
+    [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
+    gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
+    [ 1, 0, 0, 0, 0, 0, 0, 3 ] 
+  ------------------------------------------------------------------
+  
+  4.9-4 DistancesDistribution
+  
+  > DistancesDistribution( C, w ) ____________________________________function
+  
+  DistancesDistribution  returns  the  distribution  of  the  distances of all
+  elements  of C to a codeword w in the same vector space. The i^th element of
+  the distance distribution is the number of codewords of C that have distance
+  i-1  to w. The smallest value d with w[d+1] <> 0, is defined as the distance
+  to C (see MinimumDistance (4.8-3)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := HadamardCode(20);
+    a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
+    gap> c := Codeword("10110101101010010101", H);
+    [ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
+    gap> DistancesDistribution(H, c);
+    [ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
+    gap> MinimumDistance(H, c);
+    5                           # distance to H 
+  ------------------------------------------------------------------
+  
+  4.9-5 OuterDistribution
+  
+  > OuterDistribution( C ) ___________________________________________function
+  
+  The  function OuterDistribution returns a list of length q^n, where q is the
+  size  of  the  base field of C and n is the word length. The elements of the
+  list  consist  of  pairs,  the  first coordinate being an element of GF(q)^n
+  (this  is a codeword type) and the second coordinate being a distribution of
+  distances  to  the  code (a list of integers). This table is very large, and
+  for  n  >  20  it will not fit in the memory of most computers. The function
+  DistancesDistribution  (see  DistancesDistribution  (4.9-4))  can be used to
+  calculate one entry of the list.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := RepetitionCode( 3, GF(2) );
+    a cyclic [3,1,3]1 repetition code over GF(2)
+    gap> OD := OuterDistribution(C);
+    [ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
+      [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
+      [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
+      [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
+    gap> WeightDistribution(C) = OD[1][2];
+    true
+    gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+    true 
+  ------------------------------------------------------------------
+  
+  
+  4.10 Decoding Functions
+  
+  4.10-1 Decode
+  
+  > Decode( C, r ) ___________________________________________________function
+  
+  Decode  decodes r (a 'received word') with respect to code C and returns the
+  `message word' (i.e., the information digits associated to the codeword c in
+  C  closest  to  r).  Here  r can be a GUAVA codeword or a list of codewords.
+  First,  possible  errors in r are corrected, then the codeword is decoded to
+  an  information codeword m (and not an element of C). If the code record has
+  a  field  `specialDecoder',  this  special  algorithm  is used to decode the
+  vector. Hamming codes, BCH codes, cyclic codes, and generalized Reed-Solomon
+  have  such  a  special  algorithm.  (The algorithm used for BCH codes is the
+  Sugiyama  algorithm  described,  for  example, in section 5.4.3 of [HP03]. A
+  special decoder has also being written for the generalized Reed-Solomon code
+  using  the  interpolation  algorithm.  For  cyclic codes, the error-trapping
+  algorithm is used.) If C is linear and no special decoder field has been set
+  then  syndrome  decoding  is  used.  Otherwise  (when  C is non-linear), the
+  nearest neighbor decoding algorithm is used (which is very slow).
+  
+  A special decoder can be created by defining a function
+  
+  
+  C!.SpecialDecoder := function(C, r) ... end;
+  The  function  uses the arguments C (the code record itself) and r (a vector
+  of the codeword type) to decode r to an information vector. A normal decoder
+  would  take  a  codeword r of the same word length and field as C, and would
+  return  an  information  vector of length k, the dimension of C. The user is
+  not restricted to these normal demands though, and can for instance define a
+  decoder for non-linear codes.
+  
+  Encoding  is  done  by multiplying the information vector with the code (see
+  4.2).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := HammingCode(3);
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> c := "1010"*C;                    # encoding
+    [ 1 0 1 1 0 1 0 ]
+    gap> Decode(C, c);                     # decoding
+    [ 1 0 1 0 ]
+    gap> Decode(C, Codeword("0010101"));
+    [ 1 1 0 1 ]                            # one error corrected
+    gap> C!.SpecialDecoder := function(C, c)
+    > return NullWord(Dimension(C));
+    > end;
+    function ( C, c ) ... end
+    gap> Decode(C, c);
+    [ 0 0 0 0 ]           # new decoder always returns null word 
+  ------------------------------------------------------------------
+  
+  4.10-2 Decodeword
+  
+  > Decodeword( C, r ) _______________________________________________function
+  
+  Decodeword  decodes r (a 'received word') with respect to code C and returns
+  the  codeword  c in C closest to r. Here r can be a GUAVA codeword or a list
+  of  codewords. If the code record has a field `specialDecoder', this special
+  algorithm   is  used  to  decode  the  vector.  Hamming  codes,  generalized
+  Reed-Solomon  codes,  and  BCH  codes  have  such  a special algorithm. (The
+  algorithm  used  for  BCH  codes  is  the  Sugiyama algorithm described, for
+  example,  in  section  5.4.3  of  [HP03]. The algorithm used for generalized
+  Reed-Solomon  codes is the ``interpolation algorithm'' described for example
+  in  chapter  5  of  [JH04].) If C is linear and no special decoder field has
+  been  set  then  syndrome decoding is used. Otherwise, when C is non-linear,
+  the  nearest  neighbor  algorithm has been implemented (which should only be
+  used for small-sized codes).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := HammingCode(3);
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> c := "1010"*C;                    # encoding
+    [ 1 0 1 1 0 1 0 ]
+    gap> Decodeword(C, c);                     # decoding
+    [ 1 0 1 1 0 1 0 ]
+    gap>
+    gap> R:=PolynomialRing(GF(11),["t"]);
+    GF(11)[t]
+    gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+    [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+    gap> C:=GeneralizedReedSolomonCode(P,3,R);
+    a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+    gap> MinimumDistance(C);
+    3
+    gap> c:=Random(C);
+    [ 0 9 6 2 1 ]
+    gap> v:=Codeword("09620");
+    [ 0 9 6 2 0 ]
+    gap> GeneralizedReedSolomonDecoderGao(C,v);
+    [ 0 9 6 2 1 ]
+    gap> Decodeword(C,v); # calls the special interpolation decoder
+    [ 0 9 6 2 1 ]
+    gap> G:=GeneratorMat(C);
+    [ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
+      [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
+      [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
+    gap> C1:=GeneratorMatCode(G,GF(11));
+    a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+    gap> Decodeword(C,v); # calls syndrome decoding
+    [ 0 9 6 2 1 ]
+  ------------------------------------------------------------------
+  
+  4.10-3 GeneralizedReedSolomonDecoderGao
+  
+  > GeneralizedReedSolomonDecoderGao( C, r ) _________________________function
+  
+  GeneralizedReedSolomonDecoderGao decodes r (a 'received word') to a codeword
+  c  in C in a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode
+  (5.6-2)),  closest to r. Here r must be a GUAVA codeword. If the code record
+  does  not  have  name  `generalized  Reed-Solomon  code'  then  an  error is
+  returned. Otherwise, the Gao decoder [Gao03] is used to compute c.
+  
+  For  long  codes,  this  method is faster in practice than the interpolation
+  method used in Decodeword.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R:=PolynomialRing(GF(11),["t"]);
+    GF(11)[t]
+    gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+    [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+    gap> C:=GeneralizedReedSolomonCode(P,3,R);
+    a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+    gap> MinimumDistance(C);
+    3
+    gap> c:=Random(C);
+    [ 0 9 6 2 1 ]
+    gap> v:=Codeword("09620");
+    [ 0 9 6 2 0 ]
+    gap> GeneralizedReedSolomonDecoderGao(C,v); 
+    [ 0 9 6 2 1 ]
+  ------------------------------------------------------------------
+  
+  4.10-4 GeneralizedReedSolomonListDecoder
+  
+  > GeneralizedReedSolomonListDecoder( C, r, tau ) ___________________function
+  
+  GeneralizedReedSolomonListDecoder  implements Sudans list-decoding algorithm
+  (see section 12.1 of [JH04]) for ``low rate'' Reed-Solomon codes. It returns
+  the list of all codewords in C which are a distance of at most tau from r (a
+  'received  word').  C  must  be  a  generalized  Reed-Solomon  code  C  (see
+  GeneralizedReedSolomonCode (5.6-2)) and r must be a GUAVA codeword.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(16);
+    GF(2^4)
+    gap>
+    gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
+    0*Z(2)
+    gap> Pts:=List([0..14],i->b^i);
+    [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
+      Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
+    gap> x:=X(F);;
+    gap> R1:=PolynomialRing(F,[x]);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+    gap> y:=X(F,vars);;
+    gap> R2:=PolynomialRing(F,[x,y]);;
+    gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+    a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+    gap> MinimumDistance(C); ## 6 error correcting
+    13
+    gap> z:=Zero(F);;
+    gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+    gap> r:=Codeword(r);
+    [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+    gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+    [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
+      [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
+    250
+    gap> c1:=cs[1]; c1 in C;
+    [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+    true
+    gap> c2:=cs[2]; c2 in C;
+    [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
+    true
+    gap> WeightCodeword(c1-r);
+    7
+    gap> WeightCodeword(c2-r);
+    7
+  ------------------------------------------------------------------
+  
+  4.10-5 BitFlipDecoder
+  
+  > BitFlipDecoder( C, r ) ___________________________________________function
+  
+  The  iterative  decoding  method BitFlipDecoder must only be applied to LDPC
+  codes.  These  have not been implemented in GUAVA (but see FerreroDesignCode
+  for  a  code  with  similar  properties).  A binary low density parity check
+  (LDPC)  code  of  length  $n$  and redundancy $r$ is defined in terms of its
+  check matrix $H$:
+  
+  --    Each row of $H$ has exactly $x$ 1's.
+  
+  --    Each column has exactly $y$ 1's.
+  
+  --    The  number  of  1's in common between any two columns is less than or
+        equal to one.
+  
+  --    $x/n$ and $y/r$ are 'small'.
+  
+  For  these codes, BitFlipDecoder decodes very quickly. (Warning: it can give
+  wildly  wrong  results  for arbitrary binary linear codes.) The bit flipping
+  algorithm is described for example in chapter 13 of [JH04].
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=HammingCode(4,GF(2));
+    a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+    gap> c:=Random(C);
+    [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+    gap> v:=List(c);
+    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+    gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+    Z(2)^0
+    gap> v:=Codeword(v);
+    [ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+    gap> BitFlipDecoder(C,v);
+    [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+    
+    
+  ------------------------------------------------------------------
+  
+  4.10-6 NearestNeighborGRSDecodewords
+  
+  > NearestNeighborGRSDecodewords( C, v, dist ) ______________________function
+  
+  NearestNeighborGRSDecodewords  finds  all generalized Reed-Solomon codewords
+  within  distance  dist  from  v and the associated polynomial, using ``brute
+  force''.  Input: v is a received vector (a GUAVA codeword), C is a GRS code,
+  dist  >  0  is  the  distance from v to search in C. Output: a list of pairs
+  [c,f(x)], where wt(c-v)<= dist-1 and c = (f(x_1),...,f(x_n)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(16);
+    GF(2^4)
+    gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+    Z(2^4)^7
+    0*Z(2)
+    gap> Pts:=List([0..14],i->b^i);
+    [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+      Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+      Z(2^4)^8 ]
+    gap> x:=X(F);;
+    gap> R1:=PolynomialRing(F,[x]);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+    gap> y:=X(F,vars);;
+    gap> R2:=PolynomialRing(F,[x,y]);;
+    gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+    a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+    gap> MinimumDistance(C); # 6 error correcting
+    13
+    gap> z:=Zero(F);
+    0*Z(2)
+    gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+    gap> r:=Codeword(r);
+    [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+    gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
+    [ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
+      [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]
+  ------------------------------------------------------------------
+  
+  4.10-7 NearestNeighborDecodewords
+  
+  > NearestNeighborDecodewords( C, v, dist ) _________________________function
+  
+  NearestNeighborDecodewords  finds  all  codewords  in a linear code C within
+  distance  dist  from v, using ``brute force''. Input: v is a received vector
+  (a  GUAVA  codeword), C is a linear code, dist > 0 is the distance from v to
+  search in C. Output: a list of c in C, where wt(c-v)<= dist-1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(16);
+    GF(2^4)
+    gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+    Z(2^4)^7
+    0*Z(2)
+    gap> Pts:=List([0..14],i->b^i);
+    [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+      Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+      Z(2^4)^8 ]
+    gap> x:=X(F);;
+    gap> R1:=PolynomialRing(F,[x]);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+    gap> y:=X(F,vars);;
+    gap> R2:=PolynomialRing(F,[x,y]);;
+    gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+    a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+    gap> MinimumDistance(C);
+    13
+    gap> z:=Zero(F);
+    0*Z(2)
+    gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
+    gap> r:=Codeword(r);
+    [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+    gap> cs:=NearestNeighborDecodewords(C,r,7);
+    [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
+      [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]
+    
+  ------------------------------------------------------------------
+  
+  4.10-8 Syndrome
+  
+  > Syndrome( C, v ) _________________________________________________function
+  
+  Syndrome  returns  the syndrome of word v with respect to a linear code C. v
+  is a codeword in the ambient vector space of C. If v is an element of C, the
+  syndrome  is a zero vector. The syndrome can be used for looking up an error
+  vector  in the syndrome table (see SyndromeTable (4.10-9)) that is needed to
+  correct an error in v.
+  
+  A  syndrome  is  not  defined for non-linear codes. Syndrome then returns an
+  error.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := HammingCode(4);
+    a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+    gap> v := CodewordNr( C, 7 );
+    [ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
+    gap> Syndrome( C, v );
+    [ 0 0 0 0 ]
+    gap> Syndrome( C, Codeword( "000000001100111" ) );
+    [ 1 1 1 1 ]
+    gap> Syndrome( C, Codeword( "000000000000001" ) );
+    [ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
+                   # coset of C 
+  ------------------------------------------------------------------
+  
+  4.10-9 SyndromeTable
+  
+  > SyndromeTable( C ) _______________________________________________function
+  
+  SyndromeTable returns a syndrome table of a linear code C, consisting of two
+  columns.  The  first column consists of the error vectors that correspond to
+  the  syndrome  vectors  in  the second column. These vectors both are of the
+  codeword type. After calculating the syndrome of a word v with Syndrome (see
+  Syndrome (4.10-8)), the error vector needed to correct v can be found in the
+  syndrome  table.  Subtracting  this vector from v yields an element of C. To
+  make  the search for the syndrome as fast as possible, the syndrome table is
+  sorted according to the syndrome vectors.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := HammingCode(2);
+    a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+    gap> SyndromeTable(H);
+    [ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
+      [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
+    gap> c := Codeword("101");
+    [ 1 0 1 ]
+    gap> c in H;
+    false          # c is not an element of H
+    gap> Syndrome(H,c);
+    [ 1 0 ]        # according to the syndrome table,
+                   # the error vector [ 0 1 0 ] belongs to this syndrome
+    gap> c - Codeword("010") in H;
+    true           # so the corrected codeword is
+                   # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
+                   # this is an element of H 
+  ------------------------------------------------------------------
+  
+  4.10-10 StandardArray
+  
+  > StandardArray( C ) _______________________________________________function
+  
+  StandardArray  returns the standard array of a code C. This is a matrix with
+  elements  of  the codeword type. It has q^r rows and q^k columns, where q is
+  the  size of the base field of C, r=n-k is the redundancy of C, and k is the
+  dimension of C. The first row contains all the elements of C. Each other row
+  contains  words  that  do  not  belong to the code, with in the first column
+  their syndrome vector (see Syndrome (4.10-8)).
+  
+  A non-linear code does not have a standard array. StandardArray then returns
+  an error.
+  
+  Note  that  calculating  a  standard  array  can  be  very time- and memory-
+  consuming.
+  
+  ---------------------------  Example  ----------------------------
+    gap> StandardArray(RepetitionCode(3)); 
+    [ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
+      [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]
+  ------------------------------------------------------------------
+  
+  4.10-11 PermutationDecode
+  
+  > PermutationDecode( C, v ) ________________________________________function
+  
+  PermutationDecode  performs  permutation  decoding when possible and returns
+  original vector and prints 'fail' when not possible.
+  
+  This   uses   AutomorphismGroup   in  the  binary  case,  and  (the  slower)
+  PermutationAutomorphismGroup   otherwise,   to   compute   the   permutation
+  automorphism  group  P  of C. The algorithm runs through the elements p of P
+  checking  if  the  weight of H(p* v) is less than (d-1)/2. If it is then the
+  vector  p*  v  is  used  to  decode  v:  assuming C is in standard form then
+  c=p^-1Em  is  the decoded word, where m is the information digits part of p*
+  v.  If no such p exists then ``fail'' is returned. See, for example, section
+  10.2 of Huffman and Pless [HP03] for more details.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C0:=HammingCode(3,GF(2));
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> G0:=GeneratorMat(C0);;
+    gap> G := List(G0, ShallowCopy);;
+    gap> PutStandardForm(G);
+    ()
+    gap> Display(G);
+     1 . . . . 1 1
+     . 1 . . 1 . 1
+     . . 1 . 1 1 .
+     . . . 1 1 1 1
+    gap> H0:=CheckMat(C0);;
+    gap> Display(H0);
+     . . . 1 1 1 1
+     . 1 1 . . 1 1
+     1 . 1 . 1 . 1
+    gap> c0:=Random(C0);
+    [ 0 0 0 1 1 1 1 ]
+    gap> v01:=c0[1]+Z(2)^2;;
+    gap> v1:=List(c0, ShallowCopy);;
+    gap> v1[1]:=v01;;
+    gap> v1:=Codeword(v1);
+    [ 1 0 0 1 1 1 1 ]
+    gap> c1:=PermutationDecode(C0,v1);
+    [ 0 0 0 1 1 1 1 ]
+    gap> c1=c0;
+    true
+  ------------------------------------------------------------------
+  
+  4.10-12 PermutationDecodeNC
+  
+  > PermutationDecodeNC( C, v, P ) ___________________________________function
+  
+  Same  as  PermutationDecode  except  that  one  may  enter  the  permutation
+  automorphism group P in as an argument, saving time. Here P is a subgroup of
+  the symmetric group on n letters, where n is the word length of C.
+  
diff --git a/doc/chap5.html b/doc/chap5.html
new file mode 100644
index 0000000..7600ac5
--- /dev/null
+++ b/doc/chap5.html
@@ -0,0 +1,2318 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 5: Generating Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap4.html">Previous Chapter</a>    <a href="chap6.html">Next Chapter</a>   </div>
+
+<p><a id="X87EB64ED831CCE99" name="X87EB64ED831CCE99"></a></p>
+<div class="ChapSects"><a href="chap5.html#X87EB64ED831CCE99">5. <span class="Heading">Generating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X86A92CB184CBD3C7">5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81AACBDD86E89D7D">5.1-1 ElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X86755AAC83A0AF4B">5.1-2 HadamardCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8122BA417F705997">5.1-3 ConferenceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81B7EE4279398F67">5.1-4 MOLSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D87DD6380B2CE69">5.1-5 RandomCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816353397F25B62E">5.1-6 NordstromRobinsonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7880D34485C60BAF">5.1-7 GreedyCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C1B374583AFB923">5.1-8 LexiCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7A11F29F7BBF45BB">5.2 <span class="Heading">
+Generating Linear Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83F400A681CFC0D6">5.2-1 GeneratorMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7CDDDFE47A10A008">5.2-2 CheckMatCodeMutable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X848D3F7B805DEB66">5.2-3 CheckMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7DECB0A57C798583">5.2-4 HammingCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X801C88D578DA6ACA">5.2-5 ReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X851592C7811D3D2A">5.2-6 AlternantCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE808BB7D1E487A">5.2-7 GoppaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F9C0A727EE075B7">5.2-8 GeneralizedSrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7A38EB3178961F3E">5.2-9 SrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87F7CB8B7A8BE624">5.2-10 CordaroWagnerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865534267C8E902A">5.2-11 FerreroDesignCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BCA10CE8660357F">5.2-12 RandomLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X839CFE4C7A567D4D">5.2-13 OptimalityCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X871508567CB34D96">5.2-14 BestKnownLinearCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X858721967BE44000">5.3 <span class="Heading">
+Gabidulin Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79BE5D497CB2E59E">5.3-1 GabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X873950F67D4A9184">5.3-2 EnlargedGabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F5BE77B7F343182">5.3-3 DavydovCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X845B4DBE83288D2D">5.3-4 TombakCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D6583347C0D4292">5.3-5 EnlargedTombakCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X81F6E4A785F368B0">5.4 <span class="Heading">
+Golay Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80ED89C079CD0D09">5.4-1 BinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X84520C7983538806">5.4-2 ExtendedBinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E0CCCD7866ADB94">5.4-3 TernaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81088A66816BCAE4">5.4-4 ExtendedTernaryGolayCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X8366CC3685F0BC85">5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X853D34A5796CEB73">5.5-1 GeneratorPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82440B78845F7F6E">5.5-2 CheckPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X818F0E6583E01D4B">5.5-3 RootsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C6BB07C87853C00">5.5-4 BCHCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X838F3CB3872CEF95">5.5-5 ReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8730B90A862A3B3E">5.5-6 ExtendedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X825F42F68179D2AB">5.5-7 QRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8764ABCF854C695E">5.5-8 QQRCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9 QQRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10 FireCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BC245E37EB7B23F">5.5-11 WholeSpaceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B4EF2017B2C61AD">5.5-12 NullCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83C5F8FE7827EAA7">5.5-13 RepetitionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82FA9F65854D98A6">5.5-14 CyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8263CE4A790D294A">5.5-15 NrCyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79826B16785E8BD3">5.5-16 QuasiCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BFEDA52835A601D">5.5-17 CyclicMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F40AF3B81C252DC">5.5-18 FourNegacirculantSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87137A257E761291">5.5-19 FourNegacirculantSelfDualCodeNC</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X850A28C579137220">5.6 <span class="Heading">
+Evaluation Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X78E078567D19D433">5.6-1 EvaluationCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X810AB3DB844FFCE9">5.6-2 GeneralizedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85B8699680B9D786">5.6-3 GeneralizedReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE68B58872D7E82">5.6-4 ToricPoints</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B24BE418010F596">5.6-5 ToricCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7AE2B2CD7C647990">5.7 <span class="Heading">
+Algebraic geometric codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X802DD9FB79A9ACA7">5.7-1 AffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857EFE567C05C981">5.7-2 AffinePointsOnCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857E36ED814A40B8">5.7-3 GenusCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8572A3037DA66F88">5.7-4 GOrbitPoint </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79742B7183051D99">5.7-5 DivisorOnAffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8626E2B57D01F2DC">5.7-6 DivisorAddition </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865FE28D828C1EAD">5.7-7 DivisorDegree </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X789DC358819A8F54">5.7-8 DivisorNegate </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8688C0E187B5C7DB">5.7-9 DivisorIsZero </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816A07997D9A7075">5.7-10 DivisorsEqual </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857B89847A649A26">5.7-11 DivisorGCD </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82231CF08073695F">5.7-12 DivisorLCM </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79C878697F99A10F">5.7-13 RiemannRochSpaceBasisFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X856DDA207EDDF256">5.7-14 DivisorOfRationalFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X878970A17E580224">5.7-15 RiemannRochSpaceBasisP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X807C52E67A440DEB">5.7-16 MoebiusTransformation </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85A0419580ED0391">5.7-17 ActionMoebiusTransformationOnFunction </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18 ActionMoebiusTransformationOnDivisorP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79FD980E7B24DB9C">5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X823386037F450B0E">5.7-20 DivisorAutomorphismGroupP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80EDF3D682E7EF3F">5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8777388C7885E335">5.7-22 GoppaCodeClassical</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8422A310854C09B0">5.7-23 EvaluationBivariateCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B6C2BED8319C811">5.7-24 EvaluationBivariateCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X842E227E8785168E">5.7-25 OnePointAGCode</a></span>
+</div>
+</div>
+
+<h3>5. <span class="Heading">Generating Codes</span></h3>
+
+<p>In this chapter we describe functions for generating codes.</p>
+
+<p>Section <a href="chap5.html#X86A92CB184CBD3C7"><b>5.1</b></a> describes functions for generating unrestricted codes.</p>
+
+<p>Section <a href="chap5.html#X7A11F29F7BBF45BB"><b>5.2</b></a> describes functions for generating linear codes.</p>
+
+<p>Section <a href="chap5.html#X858721967BE44000"><b>5.3</b></a> describes functions for constructing certain covering codes, such as the Gabidulin codes.</p>
+
+<p>Section <a href="chap5.html#X81F6E4A785F368B0"><b>5.4</b></a> describes functions for constructing the Golay codes.</p>
+
+<p>Section <a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a> describes functions for generating cyclic codes.</p>
+
+<p>Section <a href="chap5.html#X850A28C579137220"><b>5.6</b></a> describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there.</p>
+
+<p><a id="X86A92CB184CBD3C7" name="X86A92CB184CBD3C7"></a></p>
+
+<h4>5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></h4>
+
+<p>In this section we start with functions that creating code from user defined matrices or special matrices (see <code class="func">ElementsCode</code> (<a href="chap5.html#X81AACBDD86E89D7D"><b>5.1-1</b></a>), <code class="func">HadamardCode</code> (<a href="chap5.html#X86755AAC83A0AF4B"><b>5.1-2</b></a>), <code class="func">ConferenceCode</code> (<a href="chap5.html#X8122BA417F705997"><b>5.1-3</b></a>) and <code class="func">MOLSCode</code> (<a href="chap5.html#X81B7EE4279398F67"><b>5 [...]
+
+<p>The next functions generate random codes (see <code class="func">RandomCode</code> (<a href="chap5.html#X7D87DD6380B2CE69"><b>5.1-5</b></a>)) and the Nordstrom-Robinson code (see <code class="func">NordstromRobinsonCode</code> (<a href="chap5.html#X816353397F25B62E"><b>5.1-6</b></a>)), respectively.</p>
+
+<p>Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see <code class="func">GreedyCode</code> (<a href="chap5.html#X7880D34485C60BAF"><b>5.1-7</b></a>) and <code class="func">LexiCode</code> (<a href="chap5.html#X7C1B374583AFB923"><b>5.1-8</b></a>)).</p>
+
+<p><a id="X81AACBDD86E89D7D" name="X81AACBDD86E89D7D"></a></p>
+
+<h5>5.1-1 ElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ElementsCode</code>( <var class="Arg">L[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ElementsCode</code> creates an unrestricted code of the list of elements <var class="Arg">L</var>, in the field <var class="Arg">F</var>. <var class="Arg">L</var> must be a list of vectors, strings, polynomials or codewords. <var class="Arg">name</var> can contain a short description of the code.</p>
+
+<p>If <var class="Arg">L</var> contains a codeword more than once, it is removed from the list and a GAP set is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+gap> C := ElementsCode( M, "example code", GF(3) );
+a (4,3,1..4)2 example code over GF(3)
+gap> MinimumDistance( C );
+4
+gap> AsSSortedList( C );
+[ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X86755AAC83A0AF4B" name="X86755AAC83A0AF4B"></a></p>
+
+<h5>5.1-2 HadamardCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HadamardCode</code>( <var class="Arg">H[, t]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The four forms this command can take are <code class="code">HadamardCode(H,t)</code>, <code class="code">HadamardCode(H)</code>, <code class="code">HadamardCode(n,t)</code>, and <code class="code">HadamardCode(n)</code>.</p>
+
+<p>In the case when the arguments <var class="Arg">H</var> and <var class="Arg">t</var> are both given, <code class="code">HadamardCode</code> returns a Hadamard code of the t^th kind from the Hadamard matrix <var class="Arg">H</var> In case only <var class="Arg">H</var> is given, t = 3 is used.</p>
+
+<p>By definition, a Hadamard matrix is a square matrix <var class="Arg">H</var> with H* H^T = -n* I_n, where n is the size of <var class="Arg">H</var>. The entries of <var class="Arg">H</var> are either 1 or -1.</p>
+
+<p>The matrix <var class="Arg">H</var> is first transformed into a binary matrix A_n by replacing the 1's by 0's and the -1's by 1s).</p>
+
+<p>The Hadamard matrix of the <em>first kind</em> (t=1) is created by using the rows of A_n as elements, after deleting the first column. This is a (n-1, n, n/2) code. We use this code for creating the Hadamard code of the <em>second kind</em> (t=2), by adding all the complements of the already existing codewords. This results in a (n-1, 2n, n/2 -1) code. The <em>third kind</em> (t=3) is created by using the rows of A_n (without cutting a column) and their complements as elements. This w [...]
+
+<p>The command <code class="code">HadamardCode(n,t)</code> returns a Hadamard code with parameter <var class="Arg">n</var> of the t^th kind. For the command <code class="code">HadamardCode(n)</code>, t=3 is used.</p>
+
+<p>When called in these forms, <code class="code">HadamardCode</code> first creates a Hadamard matrix (see <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>)), of size <var class="Arg">n</var> and then follows the same procedure as described above. Therefore the same restrictions with respect to <var class="Arg">n</var> as for Hadamard matrices hold.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> HadamardCode( H4, 1 );
+a (3,4,2)1 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4, 2 );
+a (3,8,1)0 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2) 
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> C := HadamardCode( 4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2)
+gap> C = HadamardCode( H4 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X8122BA417F705997" name="X8122BA417F705997"></a></p>
+
+<h5>5.1-3 ConferenceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConferenceCode</code>( <var class="Arg">H</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConferenceCode</code> returns a code of length n-1 constructed from a symmetric 'conference matrix' <var class="Arg">H</var>. A <em>conference matrix</em> <var class="Arg">H</var> is a symmetric matrix of order n, which satisfies H* H^T = ((n-1)* I, with n = 2 mod 4. The rows of frac12(H+I+J), frac12(-H+I+J), plus the zero and all-ones vectors form the elements of a binary non-linear (n-1, 2n, (n-2)/2) code.</p>
+
+<p><strong class="pkg">GUAVA</strong> constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear (n, 2(n+1), (n-1)/2)-code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+> [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+gap> C1 := ConferenceCode( H6 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> IsLinearCode( C1 );
+false 
+gap> C2 := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C2 );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p><a id="X81B7EE4279398F67" name="X81B7EE4279398F67"></a></p>
+
+<h5>5.1-4 MOLSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MOLSCode</code>( <var class="Arg">[n][,]q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MOLSCode</code> returns an (n, q^2, n-1) code over GF(q). The code is created from n-2 'Mutually Orthogonal Latin Squares' (MOLS) of size q x q. The default for <var class="Arg">n</var> is 4. <strong class="pkg">GUAVA</strong> can construct a MOLS code for n-2 <= q. Here <var class="Arg">q</var> must be a prime power, q > 2. If there are no n-2 MOLS, an error is signalled.</p>
+
+<p>Since each of the n-2 MOLS is a qx q matrix, we can create a code of size q^2 by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become n.</p>
+
+<p>The MOLS codes are MDS codes (see <code class="func">IsMDSCode</code> (<a href="chap4.html#X789380D28018EC3F"><b>4.3-7</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := MOLSCode( 6, 5 );
+a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
+gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+>       local ls, el;
+>       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+>       for el in VectorCodeword( AsSSortedList( C1 ) ) do
+>          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+>       od;
+>       return ls;
+>    end );;
+gap> AreMOLS( mols );
+true
+gap> C2 := MOLSCode( 11 );
+a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 
+</pre></td></tr></table>
+
+<p><a id="X7D87DD6380B2CE69" name="X7D87DD6380B2CE69"></a></p>
+
+<h5>5.1-5 RandomCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomCode</code>( <var class="Arg">n, M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RandomCode</code> returns a random unrestricted code of size <var class="Arg">M</var> with word length <var class="Arg">n</var> over <var class="Arg">F</var>. <var class="Arg">M</var> must be less than or equal to the number of elements in the space GF(q)^n.</p>
+
+<p>The function <code class="code">RandomLinearCode</code> returns a random linear code (see <code class="func">RandomLinearCode</code> (<a href="chap5.html#X7BCA10CE8660357F"><b>5.2-12</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> MinimumDistance(C1);
+3
+gap> C2 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> C1 = C2;
+false 
+</pre></td></tr></table>
+
+<p><a id="X816353397F25B62E" name="X816353397F25B62E"></a></p>
+
+<h5>5.1-6 NordstromRobinsonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NordstromRobinsonCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NordstromRobinsonCode</code> returns a Nordstrom-Robinson code, the best code with word length n=16 and minimum distance d=6 over GF(2). This is a non-linear (16, 256, 6) code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> OptimalityCode( C );
+0 
+</pre></td></tr></table>
+
+<p><a id="X7880D34485C60BAF" name="X7880D34485C60BAF"></a></p>
+
+<h5>5.1-7 GreedyCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GreedyCode</code>( <var class="Arg">L, d, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GreedyCode</code> returns a Greedy code with design distance <var class="Arg">d</var> over the finite field <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the list of vectors <var class="Arg">L</var>. (The greedy algorithm checks each vector in <var class="Arg">L</var> and adds it to the code if its distance to the current code is greater than or equal to <var class="Arg">d</var>. It is obvious that the resulting code has a minimum d [...]
+
+<p>Greedy codes are often linear codes.</p>
+
+<p>The function <code class="code">LexiCode</code> creates a greedy code from a basis instead of an enumerated list (see <code class="func">LexiCode</code> (<a href="chap5.html#X7C1B374583AFB923"><b>5.1-8</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
+>                         (1,4) ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C1 = C2;
+false 
+</pre></td></tr></table>
+
+<p><a id="X7C1B374583AFB923" name="X7C1B374583AFB923"></a></p>
+
+<h5>5.1-8 LexiCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LexiCode</code>( <var class="Arg">n, d, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this format, <code class="code">Lexicode</code> returns a lexicode with word length <var class="Arg">n</var>, design distance <var class="Arg">d</var> over <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length <var class="Arg">n</var> over <var class="Arg">F</var>. Every time a vector is found that has a distance to the current code of at least <var class="Arg">d</var>, it is added to the code. Th [...]
+
+<p>Another syntax which one can use is <code class="code">LexiCode( B, d, F )</code>. When called in this format, <code class="code">LexiCode</code> uses the basis <var class="Arg">B</var> instead of the standard basis. <var class="Arg">B</var> is a matrix of vectors over <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the list of vectors spanned by <var class="Arg">B</var>, ordered lexicographically with respect to <var class="Arg">B</var>.</p>
+
+<p>Note that binary lexicodes are always linear.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := LexiCode( 4, 3, GF(5) );
+a (4,17,3..4)2..4 lexicode over GF(5) 
+gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+gap> C := LexiCode( B, 2, GF(2) );
+a linear [3,1,2]1..2 lexicode over GF(2) 
+</pre></td></tr></table>
+
+<p>The function <code class="code">GreedyCode</code> creates a greedy code that is not restricted to a lexicographical order (see <code class="func">GreedyCode</code> (<a href="chap5.html#X7880D34485C60BAF"><b>5.1-7</b></a>)).</p>
+
+<p><a id="X7A11F29F7BBF45BB" name="X7A11F29F7BBF45BB"></a></p>
+
+<h4>5.2 <span class="Heading">
+Generating Linear Codes
+</span></h4>
+
+<p>In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix.</p>
+
+<p>The first two functions generate linear codes from the generator matrix (<code class="func">GeneratorMatCode</code> (<a href="chap5.html#X83F400A681CFC0D6"><b>5.2-1</b></a>)) or check matrix (<code class="func">CheckMatCode</code> (<a href="chap5.html#X848D3F7B805DEB66"><b>5.2-3</b></a>)). All linear codes can be constructed with these functions.</p>
+
+<p>The next functions we describe generate some well-known codes, like Hamming codes (<code class="func">HammingCode</code> (<a href="chap5.html#X7DECB0A57C798583"><b>5.2-4</b></a>)), Reed-Muller codes (<code class="func">ReedMullerCode</code> (<a href="chap5.html#X801C88D578DA6ACA"><b>5.2-5</b></a>)) and the extended Golay codes (<code class="func">ExtendedBinaryGolayCode</code> (<a href="chap5.html#X84520C7983538806"><b>5.4-2</b></a>) and <code class="func">ExtendedTernaryGolayCode</co [...]
+
+<p>A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see <code class="func">AlternantCode</code> (<a href="chap5.html#X851592C7811D3D2A"><b>5.2-6</b></a>), <code class="func">GoppaCode</code> (<a href="chap5.html#X7EE808BB7D1E487A"><b>5.2-7</b></a>), <code class="func">GeneralizedSrivastavaCode</code> (<a href="chap5.html#X7F9C0A727EE075B7"><b>5.2-8</b></a>) and <code class="func">SrivastavaCode</ [...]
+
+<p>Finally, we describe a function for generating random linear codes (see <code class="func">RandomLinearCode</code> (<a href="chap5.html#X7BCA10CE8660357F"><b>5.2-12</b></a>)).</p>
+
+<p><a id="X83F400A681CFC0D6" name="X83F400A681CFC0D6"></a></p>
+
+<h5>5.2-1 GeneratorMatCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorMatCode</code>( <var class="Arg">G[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorMatCode</code> returns a linear code with generator matrix <var class="Arg">G</var>. <var class="Arg">G</var> must be a matrix over finite field <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length n, dimension k if <var class="Arg">G</var> is a k x n-matrix. If GF(q) is the field of the code, the size of the code w [...]
+
+<p>If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function <code class="code">BaseMat</code> and results in an equal code. The generator matrix can be retrieved with the function <code class="code">GeneratorMat</code> (see <code class="func">GeneratorMat</code> (<a href="chap4.html#X817224657C9829C4"><b>4.7-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := GeneratorMatCode( G, GF(3) );
+a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
+gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a linear [5,5,1]0 code defined by generator matrix over GF(2)
+gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
+> x -> VectorCodeword( x ) ), GF( 2 ) );
+a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
+# This is the smallest linear code that contains the N-R code 
+</pre></td></tr></table>
+
+<p><a id="X7CDDDFE47A10A008" name="X7CDDDFE47A10A008"></a></p>
+
+<h5>5.2-2 CheckMatCodeMutable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMatCodeMutable</code>( <var class="Arg">H[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMatCodeMutable</code> is the same as <code class="code">CheckMatCode</code> except that the check matrix and generator matrix are mutable.</p>
+
+<p><a id="X848D3F7B805DEB66" name="X848D3F7B805DEB66"></a></p>
+
+<h5>5.2-3 CheckMatCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMatCode</code>( <var class="Arg">H[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMatCode</code> returns a linear code with check matrix <var class="Arg">H</var>. <var class="Arg">H</var> must be a matrix over Galois field <var class="Arg">F</var>. <var class="Arg">[name.</var> can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, c* H^T = 0 where c is an element of the code. If <var class="Arg">H</var> is a rx n-matrix, the code has word lengt [...]
+
+<p>If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function <code class="code">BaseMat</code>. and results in an equal code. The check matrix can be retrieved with the function <code class="code">CheckMat</code> (see <code class="func">CheckMat</code> (<a href="chap4.html#X85D4B26E7FB38D57"><b>4.7-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := CheckMatCode( G, GF(3) );
+a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
+gap> CheckMat(C1);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
+gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a cyclic [5,0,5]5 code defined by check matrix over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7DECB0A57C798583" name="X7DECB0A57C798583"></a></p>
+
+<h5>5.2-4 HammingCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HammingCode</code>( <var class="Arg">r, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HammingCode</code> returns a Hamming code with redundancy <var class="Arg">r</var> over <var class="Arg">F</var>. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length <var class="Arg">r</var> in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see <code class="func">Decode</code> (<a href="chap4.html#X7A42FF7D87FC34AC"><b>4.10-1</b></a>)) makes use of [...]
+
+<p>If q is the size of its field <var class="Arg">F</var>, the returned Hamming code is a linear [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := HammingCode( 3, GF(9) );
+a linear [91,88,3]1 Hamming (3,9) code over GF(9) 
+</pre></td></tr></table>
+
+<p><a id="X801C88D578DA6ACA" name="X801C88D578DA6ACA"></a></p>
+
+<h5>5.2-5 ReedMullerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReedMullerCode</code>( <var class="Arg">r, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReedMullerCode</code> returns a binary 'Reed-Muller code' <var class="Arg">R(r, k)</var> with dimension <var class="Arg">k</var> and order <var class="Arg">r</var>. This is a code with length 2^k and minimum distance 2^k-r (see for example, section 1.10 in <a href="chapBib.html#biBHP03">[HP03]</a>). By definition, the r^th order binary Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors f, where f is a Boolean function which is a polyn [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</pre></td></tr></table>
+
+<p>See <code class="func">GeneralizedReedMullerCode</code> (<a href="chap5.html#X85B8699680B9D786"><b>5.6-3</b></a>) for a more general construction.</p>
+
+<p><a id="X851592C7811D3D2A" name="X851592C7811D3D2A"></a></p>
+
+<h5>5.2-6 AlternantCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AlternantCode</code>( <var class="Arg">r, Y[, alpha], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AlternantCode</code> returns an 'alternant code', with parameters <var class="Arg">r</var>, <var class="Arg">Y</var> and <var class="Arg">alpha</var> (optional). <var class="Arg">F</var> denotes the (finite) base field. Here, <var class="Arg">r</var> is the design redundancy of the code. <var class="Arg">Y</var> and <var class="Arg">alpha</var> are both vectors of length <var class="Arg">n</var> from which the parity check matrix is constructed. The check matrix has [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+gap> alpha := List( [0..6], i -> a^i );;
+gap> C := AlternantCode( 2, Y, alpha, GF(8) );
+a linear [7,3,3..4]3..4 alternant code over GF(8) 
+</pre></td></tr></table>
+
+<p><a id="X7EE808BB7D1E487A" name="X7EE808BB7D1E487A"></a></p>
+
+<h5>5.2-7 GoppaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GoppaCode</code>( <var class="Arg">G, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GoppaCode</code> returns a Goppa code <var class="Arg">C</var> from Goppa polynomial <var class="Arg">g</var>, having coefficients in a Galois Field GF(q). <var class="Arg">L</var> must be a list of elements in GF(q), that are not roots of <var class="Arg">g</var>. The word length of the code is equal to the length of <var class="Arg">L</var>. The parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <= deg(g)-1, a_i in L, where a_iin L and [...] is as  [...]
+
+<p>One can also call <code class="code">GoppaCode</code> using the syntax <code class="code">GoppaCode(g,n)</code>. When called with parameter <var class="Arg">n</var>, <strong class="pkg">GUAVA</strong> constructs a list L of length <var class="Arg">n</var>, such that no element of <var class="Arg">L</var> is a root of <var class="Arg">g</var>.</p>
+
+<p>This is a special case of an alternant code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:=Indeterminate(GF(8),"x");
+x
+gap> L:=Elements(GF(8));
+[ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
+gap> g:=x^2+x+1;
+x^2+x+Z(2)^0
+gap> C:=GoppaCode(g,L);
+a linear [8,2,5]3 Goppa code over GF(2)
+gap> xx := Indeterminate( GF(2), "xx" );; 
+gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
+gap> C1 := GoppaCode( gg, L );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> y := Indeterminate( GF(2), "y" );; 
+gap> h := y^2 + y + 1;;
+gap> C2 := GoppaCode( h, 8 );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> C1=C2;
+true
+gap> C=C1;
+true
+</pre></td></tr></table>
+
+<p><a id="X7F9C0A727EE075B7" name="X7F9C0A727EE075B7"></a></p>
+
+<h5>5.2-8 GeneralizedSrivastavaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedSrivastavaCode</code>( <var class="Arg">a, w, z[, t], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedSrivastavaCode</code> returns a generalized Srivastava code with parameters <var class="Arg">a</var>, <var class="Arg">w</var>, <var class="Arg">z</var>, <var class="Arg">t</var>. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m), z is a list of length n of nonzero elements of GF(q^m). The parameter <var class="Arg">t</var> determines the designed distance: d >= st + 1. The check matrix of this code is the form</p>
+
+<p class="pcenter">
+H=([\frac{z_i}{(a_i - w_j)^k}]),
+</p>
+
+<p>1<= k<= t, where [...] is as in <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>). We use this definition of H to define the code. The default for <var class="Arg">t</var> is 1. The original Srivastava codes (see <code class="func">SrivastavaCode</code> (<a href="chap5.html#X7A38EB3178961F3E"><b>5.2-9</b></a>)) are a special case t=1, z_i=a_i^mu, for some mu.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 
+</pre></td></tr></table>
+
+<p><a id="X7A38EB3178961F3E" name="X7A38EB3178961F3E"></a></p>
+
+<h5>5.2-9 SrivastavaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SrivastavaCode</code>( <var class="Arg">a, w[, mu], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>SrivastavaCode returns a Srivastava code with parameters <var class="Arg">a</var>, <var class="Arg">w</var> (and optionally <var class="Arg">mu</var>). a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m). The default for <var class="Arg">mu</var> is 1. The Srivastava code is a generalized Srivastava code, in which z_i = a_i^mu for some <var class="Arg">mu</var> and t=1.</p>
+
+<p>J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert <a href="chapBib.html#biBHe72">[Hel72]</a> for more details on the properties of this code. Related reference: G. Roelofsen, <strong class="button">On Goppa and Generalized Srivastava Codes</strong> PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := AsSSortedList( GF(11) ){[2..8]};;
+gap> w := AsSSortedList( GF(11) ){[9..10]};;
+gap> C := SrivastavaCode( a, w, 2, GF(11) );
+a linear [7,5,3]2 Srivastava code over GF(11)
+gap> IsMDSCode( C );
+true    # Always true if F is a prime field 
+</pre></td></tr></table>
+
+<p><a id="X87F7CB8B7A8BE624" name="X87F7CB8B7A8BE624"></a></p>
+
+<h5>5.2-10 CordaroWagnerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CordaroWagnerCode</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CordaroWagnerCode</code> returns a binary Cordaro-Wagner code. This is a code of length <var class="Arg">n</var> and dimension 2 having the best possible minimum distance d. This code is just a little bit less trivial than <code class="code">RepetitionCode</code> (see <code class="func">RepetitionCode</code> (<a href="chap5.html#X83C5F8FE7827EAA7"><b>5.5-13</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := CordaroWagnerCode( 11 );
+a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);                 
+[ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
+  [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X865534267C8E902A" name="X865534267C8E902A"></a></p>
+
+<h5>5.2-11 FerreroDesignCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FerreroDesignCode</code>( <var class="Arg">P, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><em>Requires the GAP package SONATA</em></p>
+
+<p>A group K together with a group of automorphism H of K such that the semidirect product KH is a Frobenius group with complement H is called a Ferrero pair (K, H) in SONATA. Take a Frobenius (G,+) group with kernel K and complement H. Consider the design D with point set K and block set a^H + b | a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation by elements of H. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from  [...]
+
+<p><code class="code">FerreroDesignCode</code> constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group.</p>
+
+<p>INPUT: P is a list of prime powers describing an abelian group G. m > 0 is an integer such that G admits a cyclic fpf automorphism group of size m. This means that for all q = p^k in P, OrderMod(p, m) must divide q (see the SONATA documentation for <code class="code">FpfAutomorphismGroupsCyclic</code>).</p>
+
+<p>OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of G. The pair (H,K) is called a Ferraro pair and the semidirect product KH is a Frobenius group with complement H.</p>
+
+<p>AUTHORS: Peter Mayr and David Joyner</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G:=AbelianGroup([5,5] );
+ [ pc group of size 25 with 2 generators ]
+gap> FpfAutomorphismGroupsMaxSize( G );
+[ 24, 2 ]
+gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+[ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
+  [ pc group of size 25 with 2 generators ] ]
+gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+ [ a 2 - ( 25, 3, 2 ) nearring generated design ]
+gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+25
+200
+gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+24
+gap> C2:=FerreroDesignCode( [5,5],3);
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> C1=C2;
+true
+
+</pre></td></tr></table>
+
+<p><a id="X7BCA10CE8660357F" name="X7BCA10CE8660357F"></a></p>
+
+<h5>5.2-12 RandomLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomLinearCode</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RandomLinearCode</code> returns a random linear code with word length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The method used is to first construct a kx n matrix of the block form (I,A), where I is a kx k identity matrix and A is a kx (n-k) matrix constructed using <code class="code">Random(F)</code> repeatedly. Then the columns are permuted using a randomly selected element of <code class="code">SymmetricGro [...]
+
+<p>To create a random unrestricted code, use <code class="code">RandomCode</code> (see <code class="func">RandomCode</code> (<a href="chap5.html#X7D87DD6380B2CE69"><b>5.1-5</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RandomLinearCode( 15, 4, GF(3) );
+a  [15,4,?] randomly generated code over GF(3)
+gap> Display(C);
+a linear [15,4,1..6]6..10 random linear code over GF(3)
+</pre></td></tr></table>
+
+<p>The method <strong class="pkg">GUAVA</strong> chooses to output the result of a <code class="code">RandomLinearCode</code> command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the <code class="code">Display</code> command to print this information. This new display method was added in version 1.9 to speed up the command (if n is about 80 and k about 40, for example, the time it took to look up and/or calculate the [...]
+
+<p><a id="X839CFE4C7A567D4D" name="X839CFE4C7A567D4D"></a></p>
+
+<h5>5.2-13 OptimalityCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OptimalityCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">OptimalityCode</code> returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function <code class="code">UpperBound</code> is not always equal to the actual upper bound A(n,d) thus the result may not be equal to 0 even if the code is optimal!</p>
+
+<p><code class="code">OptimalityLinearCode</code> is similar but applies only to linear codes.</p>
+
+<p><a id="X871508567CB34D96" name="X871508567CB34D96"></a></p>
+
+<h5>5.2-14 BestKnownLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BestKnownLinearCode</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BestKnownLinearCode</code> returns the best known (as of 11 May 2006) linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The function uses the tables described in section <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>) to construct this code.</p>
+
+<p>This command can also be called using the syntax <code class="code">BestKnownLinearCode( rec )</code>, where <var class="Arg">rec</var> must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function <code class="code">BoundsMinimumDistance</code> (see <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13< [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> C1 = BinaryGolayCode();
+false     # it's constructed differently
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G1 := MutableCopyMat(GeneratorMat(C1));;
+gap> PutStandardForm(G1);
+()
+gap> Display(G1);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+gap> C2 := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> G2 := MutableCopyMat(GeneratorMat(C2));;
+gap> PutStandardForm(G2);
+()
+gap> Display(G2);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+## Despite their generator matrices are different, they are equivalent codes, see below.
+gap> IsEquivalent(C1,C2);
+true
+gap> CodeIsomorphism(C1,C2);
+(4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
+gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+a linear [81,77,3]2..3 shortened code of
+a linear [85,81,3]1 Hamming (4,4) code over GF(4)
+gap> C:=BestKnownLinearCode(174,72);
+a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
+gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+rec( n := 81, k := 77, q := 4, 
+  references := rec( Ham := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ], 
+      cap := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ] ), 
+  construction := [ (Operation "ShortenedCode"), 
+      [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
+  lowerBound := 3, 
+  lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
+      "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
+  upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
+      "Ub(18,14)=3, reference: cap" ] )
+gap> C := BestKnownLinearCode( bounds );
+a linear [81,77,3]2..3 shortened code
+gap> C = BestKnownLinearCode(81, 77, GF(4) );
+true
+</pre></td></tr></table>
+
+<p><a id="X858721967BE44000" name="X858721967BE44000"></a></p>
+
+<h4>5.3 <span class="Heading">
+Gabidulin Codes
+</span></h4>
+
+<p>These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak <a href="chapBib.html#biBGDT91">[GDT91]</a>. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article.</p>
+
+<p>Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long.</p>
+
+<p><a id="X79BE5D497CB2E59E" name="X79BE5D497CB2E59E"></a></p>
+
+<h5>5.3-1 GabidulinCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GabidulinCode</code>( <var class="Arg">m, w1, w2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GabidulinCode</code> yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum distance 3 and covering radius 2. <var class="Arg">w1</var> and <var class="Arg">w2</var> should be elements of GF(2^m-2).</p>
+
+<p><a id="X873950F67D4A9184" name="X873950F67D4A9184"></a></p>
+
+<h5>5.3-2 EnlargedGabidulinCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EnlargedGabidulinCode</code>( <var class="Arg">m, w1, w2, e</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EnlargedGabidulinCode</code> yields a code of length 7. 2^m-2-2, redundancy 2m, minimum distance 3 and covering radius 2. <var class="Arg">w1</var> and <var class="Arg">w2</var> are elements of GF(2^m-2). <var class="Arg">e</var> is an element of GF(2^m).</p>
+
+<p><a id="X7F5BE77B7F343182" name="X7F5BE77B7F343182"></a></p>
+
+<h5>5.3-3 DavydovCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DavydovCode</code>( <var class="Arg">r, v, ei, ej</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DavydovCode</code> yields a code of length 2^v + 2^r-v - 3, redundancy <var class="Arg">r</var>, minimum distance 4 and covering radius 2. <var class="Arg">v</var> is an integer between 2 and r-2. <var class="Arg">ei</var> and <var class="Arg">ej</var> are elements of GF(2^v) and GF(2^r-v), respectively.</p>
+
+<p><a id="X845B4DBE83288D2D" name="X845B4DBE83288D2D"></a></p>
+
+<h5>5.3-4 TombakCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TombakCode</code>( <var class="Arg">m, e, beta, gamma, w1, w2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TombakCode</code> yields a code of length 15 * 2^m-3 - 3, redundancy 2m, minimum distance 4 and covering radius 2. <var class="Arg">e</var> is an element of GF(2^m). <var class="Arg">beta</var> and <var class="Arg">gamma</var> are elements of GF(2^m-1). <var class="Arg">w1</var> and <var class="Arg">w2</var> are elements of GF(2^m-3).</p>
+
+<p><a id="X7D6583347C0D4292" name="X7D6583347C0D4292"></a></p>
+
+<h5>5.3-5 EnlargedTombakCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EnlargedTombakCode</code>( <var class="Arg">m, e, beta, gamma, w1, w2, u</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EnlargedTombakCode</code> yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1, minimum distance 4 and covering radius 2. The parameters <var class="Arg">m</var>, <var class="Arg">e</var>, <var class="Arg">beta</var>, <var class="Arg">gamma</var>, <var class="Arg">w1</var> and <var class="Arg">w2</var> are defined as in <code class="code">TombakCode</code>. <var class="Arg">u</var> is an element of GF(2^m-1).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
+gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
+gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
+gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+a linear [57,47,4]2 Tombak code (m=5) over GF(2)
+gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
+> Z(4)^0, Z(4)^0, Z(32)^23 );
+a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X81F6E4A785F368B0" name="X81F6E4A785F368B0"></a></p>
+
+<h4>5.4 <span class="Heading">
+Golay Codes
+</span></h4>
+
+<p>" The Golay code is probably the most important of all codes for both practical and theoretical reasons. " (<a href="chapBib.html#biBMS83">[MS83]</a>, pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter.</p>
+
+<p><a id="X80ED89C079CD0D09" name="X80ED89C079CD0D09"></a></p>
+
+<h5>5.4-1 BinaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BinaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BinaryGolayCode</code> returns a binary Golay code. This is a perfect [23,12,7] code. It is also cyclic, and has generator polynomial g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11. Extending it results in an extended Golay code (see <code class="func">ExtendedBinaryGolayCode</code> (<a href="chap5.html#X84520C7983538806"><b>5.4-2</b></a>)). There's also the ternary Golay code (see <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+true
+gap> IsPerfectCode(C);
+true 
+gap> IsCyclicCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X84520C7983538806" name="X84520C7983538806"></a></p>
+
+<h5>5.4-2 ExtendedBinaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedBinaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedBinaryGolayCode</code> returns an extended binary Golay code. This is a [24,12,8] code. Puncturing in the last position results in a perfect binary Golay code (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>)). The code is self-dual.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedBinaryGolayCode();
+a linear [24,12,8]4 extended binary Golay code over GF(2)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [23,12,7]3 punctured code
+gap> P = BinaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+
+</pre></td></tr></table>
+
+<p><a id="X7E0CCCD7866ADB94" name="X7E0CCCD7866ADB94"></a></p>
+
+<h5>5.4-3 TernaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TernaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TernaryGolayCode</code> returns a ternary Golay code. This is a perfect [11,6,5] code. It is also cyclic, and has generator polynomial g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see <code class="func">ExtendedTernaryGolayCode</code> (<a href="chap5.html#X81088A66816BCAE4"><b>5.4-4</b></a>)). There's also the binary Golay code (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+true 
+gap> IsCyclicCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X81088A66816BCAE4" name="X81088A66816BCAE4"></a></p>
+
+<h5>5.4-4 ExtendedTernaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedTernaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedTernaryGolayCode</code> returns an extended ternary Golay code. This is a [12,6,6] code. Puncturing this code results in a perfect ternary Golay code (see <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)). The code is self-dual.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedTernaryGolayCode();
+a linear [12,6,6]3 extended ternary Golay code over GF(3)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [11,6,5]2 punctured code
+gap> P = TernaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+</pre></td></tr></table>
+
+<p><a id="X8366CC3685F0BC85" name="X8366CC3685F0BC85"></a></p>
+
+<h4>5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></h4>
+
+<p>The elements of a cyclic code C are all multiples of a ('generator') polynomial g(x), where calculations are carried out modulo x^n-1. Therefore, as polynomials in x, the elements always have degree less than n. A cyclic code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The unique monic polynomial of least degree that generates C is called the <em>generator polynomial</em> of C. It is a divisor of the polynomial x^n-1.</p>
+
+<p>The <em>check polynomial</em> is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore it is also a divisor of x^n-1. The check polynomial has the property that</p>
+
+<p class="pcenter">
+c(x)h(x) \equiv  0 \pmod{x^n-1},
+</p>
+
+<p>for every codeword c(x)in C.</p>
+
+<p>The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions.</p>
+
+<p>Two of the Golay codes already described are cyclic (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>) and <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)). For example, the <strong class="pkg">GUAVA</strong> record for a binary Golay code contains the generator polynomial:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> NamesOfComponents(C);
+[ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
+  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
+  "boundsCoveringRadius", "MinimumWeightOfGenerators", 
+  "UpperBoundOptimalMinimumDistance" ]
+gap> C!.GeneratorPol;
+x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0
+</pre></td></tr></table>
+
+<p>Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>), <code class="func">BCHCode</code> (<a href="chap5.html#X7C6BB07C87853C00"><b>5.5-4</b></a>), <code class="func">ReedSolomonCode</code> (<a href="chap5.html#X838F3CB3872CEF95"><b>5.5-5</b></a>) and <code class="func">QRCode</code> (<a href="chap5.htm [...]
+
+<p>Finally we describe the trivial codes (see <code class="func">WholeSpaceCode</code> (<a href="chap5.html#X7BC245E37EB7B23F"><b>5.5-11</b></a>), <code class="func">NullCode</code> (<a href="chap5.html#X7B4EF2017B2C61AD"><b>5.5-12</b></a>), <code class="func">RepetitionCode</code> (<a href="chap5.html#X83C5F8FE7827EAA7"><b>5.5-13</b></a>)), and the command <code class="code">CyclicCodes</code> which lists all cyclic codes (<code class="func">CyclicCodes</code> (<a href="chap5.html#X82FA [...]
+
+<p><a id="X853D34A5796CEB73" name="X853D34A5796CEB73"></a></p>
+
+<h5>5.5-1 GeneratorPolCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorPolCode</code>( <var class="Arg">g, n[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorPolCode</code> creates a cyclic code with a generator polynomial <var class="Arg">g</var>, word length <var class="Arg">n</var>, over <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code.</p>
+
+<p>If <var class="Arg">g</var> is not a divisor of x^n-1, it cannot be a generator polynomial. In that case, a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the greatest common divisor of <var class="Arg">g</var> and x^n-1. This is a valid generator polynomial that generates the ideal (g). See <code class="func">Generating Cyclic Codes</code> (<a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
+Z(2)^0+x^2
+gap> C1 := GeneratorPolCode(P, 7, GF(2));
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C1 );
+Z(2)^0+x
+gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C2 );
+Z(2)^0+x
+</pre></td></tr></table>
+
+<p><a id="X82440B78845F7F6E" name="X82440B78845F7F6E"></a></p>
+
+<h5>5.5-2 CheckPolCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckPolCode</code>( <var class="Arg">h, n[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckPolCode</code> creates a cyclic code with a check polynomial <var class="Arg">h</var>, word length <var class="Arg">n</var>, over <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code (as a string).</p>
+
+<p>If <var class="Arg">h</var> is not a divisor of x^n-1, it cannot be a check polynomial. In that case, a code is created with check polynomial gcd( h, x^n-1 ), i.e. the greatest common divisor of <var class="Arg">h</var> and x^n-1. This is a valid check polynomial that yields the same elements as the ideal (h). See <a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
+-Z(3)^0+x_1^2
+gap> H := CheckPolCode(P, 7, GF(3));
+a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
+gap> CheckPol(H);
+-Z(3)^0+x_1
+gap> Gcd(P, X(GF(3))^7-1);
+-Z(3)^0+x_1
+</pre></td></tr></table>
+
+<p><a id="X818F0E6583E01D4B" name="X818F0E6583E01D4B"></a></p>
+
+<h5>5.5-3 RootsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RootsCode</code>( <var class="Arg">n, list</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see <code class="func">BCHCode</code> (<a href="chap5.html#X7C6BB07C87853C00"><b>5.5-4</b></a>), <code class="func">ReedSolomonCode</code> (<a href="chap5.html#X838F3CB3872CEF95"><b>5.5-5</b></a>) and <code class="func">QRCode</code> (<a href="chap5.html#X825F42F68179D2AB"><b>5.5-7</b></a>)). The user can give a length of the code <var class="Arg">n</var> and a prescribed set of zeros. The argument <var c [...]
+
+<p>This command can also be called with the syntax <code class="code">RootsCode( n, list, q )</code>. In this second form, the second argument is a list of integers, ranging from 0 to n-1. The resulting code will be over a field GF(q). <strong class="pkg">GUAVA</strong> calculates a primitive n^th root of unity, alpha, in the extension field of GF(q). It uses the set of the powers of alpha in the list as a prescribed set of zeros.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := PrimitiveUnityRoot( 3, 14 );
+Z(3^6)^52
+gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
+gap> MinimumDistance( C1 );
+4
+gap> b := PrimitiveUnityRoot( 2, 15 );
+Z(2^4)
+gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+a cyclic [15,7,5]3..5 code defined by roots over GF(2)
+gap> C2 = BCHCode( 15, 5, GF(2) );
+true 
+C3 := RootsCode( 4, [ 1, 2 ], 5 );
+RootsOfCode( C3 );
+C3 = ReedSolomonCode( 4, 3 );
+
+</pre></td></tr></table>
+
+<p><a id="X7C6BB07C87853C00" name="X7C6BB07C87853C00"></a></p>
+
+<h5>5.5-4 BCHCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BCHCode</code>( <var class="Arg">n[, b], delta, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">BCHCode</code> returns a 'Bose-Chaudhuri-Hockenghem code' (or <em>BCH code</em> for short). This is the largest possible cyclic code of length <var class="Arg">n</var> over field <var class="Arg">F</var>, whose generator polynomial has zeros</p>
+
+<p class="pcenter">
+a^{b},a^{b+1}, ..., a^{b+delta-2}, 
+</p>
+
+<p>where a is a primitive n^th root of unity in the splitting field GF(q^m), <var class="Arg">b</var> is an integer 0<= b<= n-delta+1 and m is the multiplicative order of q modulo <var class="Arg">n</var>. (The integers b,...,b+delta-2 typically lie in the range 1,...,n-1.) Default value for <var class="Arg">b</var> is 1, though the algorithm allows b=0. The length <var class="Arg">n</var> of the code and the size q of the field must be relatively prime. The generator polynomial is [...]
+
+<p class="pcenter">
+a^{b}, a^{b+1}, ..., a^{b+delta-2}.
+</p>
+
+<p>The set of zeroes of the generator polynomial is equal to the union of the sets</p>
+
+<p class="pcenter">
+\{a^x\ |\ x \in C_k\},
+</p>
+
+<p>where C_k is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2 (see <code class="func">CyclotomicCosets</code> (<a href="chap7.html#X7AEA9F807E6FFEFF"><b>7.5-12</b></a>)).</p>
+
+<p>Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes), and n=q^m-1 (known as 'primitive' BCH codes). <strong class="pkg">GUAVA</strong> calculates the largest value of d for which the BCH code with designed distance d coincides with the BCH code with designed distance <var class="Arg">delta</var>. This distance d is called the <em>Bose distance</em> of the code. The true minimum distance of the code is greater than or equal to the Bose distance.</p>
+
+<p>Printed are the designed distance (to be precise, the Bose distance) d, and the starting power b.</p>
+
+<p>The Sugiyama decoding algorithm has been implemented for this code (see <code class="func">Decode</code> (<a href="chap4.html#X7A42FF7D87FC34AC"><b>4.10-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 3, 5, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> DesignedDistance( C1 );
+7
+gap> C2 := BCHCode( 23, 2, GF(2) );
+a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
+gap> DesignedDistance( C2 );       
+5
+gap> MinimumDistance(C2);
+7 
+</pre></td></tr></table>
+
+<p>See <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>) for a more general construction.</p>
+
+<p><a id="X838F3CB3872CEF95" name="X838F3CB3872CEF95"></a></p>
+
+<h5>5.5-5 ReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReedSolomonCode</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReedSolomonCode</code> returns a 'Reed-Solomon code' of length <var class="Arg">n</var>, designed distance <var class="Arg">d</var>. This code is a primitive narrow-sense BCH code over the field GF(q), where q=n+1. The dimension of an RS code is n-d+1. According to the Singleton bound (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>)) the dimension cannot be greater than this, so the true minimum distance of [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 3, 2 );
+a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
+gap> IsCyclicCode(C1);
+true
+gap> C2 := ReedSolomonCode( 4, 3 );
+a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
+gap> RootsOfCode( C2 );
+[ Z(5), Z(5)^2 ]
+gap> IsMDSCode(C2);
+true 
+</pre></td></tr></table>
+
+<p>See <code class="func">GeneralizedReedSolomonCode</code> (<a href="chap5.html#X810AB3DB844FFCE9"><b>5.6-2</b></a>) for a more general construction.</p>
+
+<p><a id="X8730B90A862A3B3E" name="X8730B90A862A3B3E"></a></p>
+
+<h5>5.5-6 ExtendedReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedReedSolomonCode</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedReedSolomonCode</code> creates a Reed-Solomon code of length n-1 with designed distance d-1 and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>) function over a Reed-Solomon code will take considerably long time.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedReedSolomonCode(17, 13);
+a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
+gap> IsMDSCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X825F42F68179D2AB" name="X825F42F68179D2AB"></a></p>
+
+<h5>5.5-7 QRCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QRCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QRCode</code> returns a quadratic residue code. If <var class="Arg">F</var> is a field GF(q), then q must be a quadratic residue modulo <var class="Arg">n</var>. That is, an x exists with x^2 = q mod n. Both <var class="Arg">n</var> and q must be primes. Its generator polynomial is the product of the polynomials x-a^i. a is a primitive n^th root of unity, and i is an integer in the set of quadratic residues modulo <var class="Arg">n</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := QRCode( 7, GF(2) );
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+true
+gap> IsCyclicCode(C1);
+true
+gap> IsCyclicCode(HammingCode( 3, GF(2) ));
+false
+gap> C2 := QRCode( 11, GF(3) );
+a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
+gap> C2 = TernaryGolayCode();
+true 
+gap> Q1 := QRCode( 7, GF(2));
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
+Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
+[ 168, 42 ]
+</pre></td></tr></table>
+
+<p><a id="X8764ABCF854C695E" name="X8764ABCF854C695E"></a></p>
+
+<h5>5.5-8 QQRCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QQRCodeNC</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QQRCodeNC</code> is the same as <code class="code">QQRCode</code>, except that it uses <code class="code">GeneratorMatCodeNC</code> instead of <code class="code">GeneratorMatCode</code>.</p>
+
+<p><a id="X7F4C3AD2795A8D7A" name="X7F4C3AD2795A8D7A"></a></p>
+
+<h5>5.5-9 QQRCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QQRCode</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QQRCode</code> returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel <a href="chapBib.html#biBBM03">[BMd)]</a>. The parameter <var class="Arg">p</var> must be a prime. Its generator matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top row is (0,x_1,...,x_p-1), where x_i=1 if and only if i is a quadratic residue mod p, and N is a px circulant matrix whose top row is (0,y_1,...,y_p-1), where x_i+y_i=1 for all i.  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := QQRCode( 7);
+a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
+gap> G1:=GeneratorMat(C1);;
+gap> Display(G1);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 . 1 1 1 . . . . 1 1 1 . 1
+ . . . 1 1 . 1 . 1 1 . . . 1
+ . . 1 . 1 1 1 1 . 1 . . 1 1
+ . . . . . . . 1 . . 1 1 1 .
+ . . . . . . . . . 1 1 1 . 1
+ . . . . . . . . 1 . . 1 1 1
+gap> Display(C1!.DoublyCirculant);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 1 . 1 . . . . . 1 . 1 1 .
+ 1 . 1 . . . 1 . 1 . 1 1 . .
+ . 1 . . . 1 1 1 . 1 1 . . .
+ 1 . . . 1 1 . . 1 1 . . . 1
+ . . . 1 1 . 1 1 1 . . . 1 .
+ . . 1 1 . 1 . 1 . . . 1 . 1
+gap> MinimumDistance(C1);
+4
+gap> C2 := QQRCode( 29); MinimumDistance(C2);
+a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
+12
+gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+[ permutation group of size 812 with 4 generators ]
+[ 812, 7 ]
+</pre></td></tr></table>
+
+<p><a id="X7F3B8CC8831DA0E4" name="X7F3B8CC8831DA0E4"></a></p>
+
+<h5>5.5-10 FireCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FireCode</code>( <var class="Arg">g, b</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">FireCode</code> constructs a (binary) Fire code. <var class="Arg">g</var> is a primitive polynomial of degree m, and a factor of x^r-1. <var class="Arg">b</var> an integer 0 <= b <= m not divisible by r, that determines the burst length of a single error burst that can be corrected. The argument <var class="Arg">g</var> can be a polynomial with base ring GF(2), or a list of coefficients in GF(2). The generator polynomial of the code is defined as the product o [...]
+
+<p>Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If F=GF(q) and fin F[x] then we say f has <em>order</em> e if f(x)|(x^e-1). A <em>Fire code</em> is a cyclic code over F with generator polynomial g(x)= (x^2t-1-1)p(x), where p(x) does not divide x^2t-1-1 and satisfies deg(p(x))>= t. The length of such a code is the order of g(x). Non-binary Fire codes have not been implemented.</p>
+
+<p>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+Z(2)^0+x^2+x^3
+gap> Factors( G );
+[ Z(2)^0+x^2+x^3 ]
+gap> C := FireCode( G, 3 );
+a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
+gap> MinimumDistance( C );
+4     # Still it can correct bursts of length 3 
+</pre></td></tr></table>
+
+<p><a id="X7BC245E37EB7B23F" name="X7BC245E37EB7B23F"></a></p>
+
+<h5>5.5-11 WholeSpaceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WholeSpaceCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WholeSpaceCode</code> returns the cyclic whole space code of length <var class="Arg">n</var> over <var class="Arg">F</var>. This code consists of all polynomials of degree less than <var class="Arg">n</var> and coefficients in <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := WholeSpaceCode( 5, GF(3) );
+a cyclic [5,5,1]0 whole space code over GF(3)
+</pre></td></tr></table>
+
+<p><a id="X7B4EF2017B2C61AD" name="X7B4EF2017B2C61AD"></a></p>
+
+<h5>5.5-12 NullCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NullCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NullCode</code> returns the zero-dimensional nullcode with length <var class="Arg">n</var> over <var class="Arg">F</var>. This code has only one word: the all zero word. It is cyclic though!</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := NullCode( 5, GF(3) );
+a cyclic [5,0,5]5 nullcode over GF(3)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X83C5F8FE7827EAA7" name="X83C5F8FE7827EAA7"></a></p>
+
+<h5>5.5-13 RepetitionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RepetitionCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RepetitionCode</code> returns the cyclic repetition code of length <var class="Arg">n</var> over <var class="Arg">F</var>. The code has as many elements as <var class="Arg">F</var>, because each codeword consists of a repetition of one of these elements.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RepetitionCode( 3, GF(5) );
+a cyclic [3,1,3]2 repetition code over GF(5)
+gap> AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
+gap> IsPerfectCode( C );
+false
+gap> IsMDSCode( C );
+true 
+</pre></td></tr></table>
+
+<p><a id="X82FA9F65854D98A6" name="X82FA9F65854D98A6"></a></p>
+
+<h5>5.5-14 CyclicCodes</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclicCodes</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CyclicCodes</code> returns a list of all cyclic codes of length <var class="Arg">n</var> over <var class="Arg">F</var>. It constructs all possible generator polynomials from the factors of x^n-1. Each combination of these factors yields a generator polynomial after multiplication.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CyclicCodes(3,GF(3));
+[ a cyclic [3,3,1]0 enumerated code over GF(3), 
+a cyclic [3,2,1..2]1 enumerated code over GF(3), 
+a cyclic [3,1,3]2 enumerated code over GF(3), 
+a cyclic [3,0,3]3 enumerated code over GF(3) ]
+</pre></td></tr></table>
+
+<p><a id="X8263CE4A790D294A" name="X8263CE4A790D294A"></a></p>
+
+<h5>5.5-15 NrCyclicCodes</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NrCyclicCodes</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">NrCyclicCodes</code> calculates the number of cyclic codes of length <var class="Arg">n</var> over field <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> NrCyclicCodes( 23, GF(2) );
+8
+gap> codelist := CyclicCodes( 23, GF(2) );
+[ a cyclic [23,23,1]0 enumerated code over GF(2), 
+  a cyclic [23,22,1..2]1 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,0,23]23 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2), 
+  a cyclic [23,1,23]11 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
+gap> BinaryGolayCode() in codelist;
+true
+gap> RepetitionCode( 23, GF(2) ) in codelist;
+true
+gap> CordaroWagnerCode( 23 ) in codelist;
+false    # This code is not cyclic 
+</pre></td></tr></table>
+
+<p><a id="X79826B16785E8BD3" name="X79826B16785E8BD3"></a></p>
+
+<h5>5.5-16 QuasiCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QuasiCyclicCode</code>( <var class="Arg">G, s, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QuasiCyclicCode( G, k, F )</code> generates a rate 1/m quasi-cyclic code over field <var class="Arg">F</var>. The input <var class="Arg">G</var> is a list of univariate polynomials and m is the cardinality of this list. Note that m must be at least 2. The input <var class="Arg">s</var> is the size of each circulant and it may not necessarily be the same as the code dimension k, i.e. k le s.</p>
+
+<p>There also exists another version, <code class="code">QuasiCyclicCode( G, s )</code> which produces quasi-cyclic codes over F_2 only. Here the parameter <var class="Arg">s</var> holds the same definition and the input <var class="Arg">G</var> is a list of integers, where each integer is an octal representation of a binary univariate polynomial.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> #
+gap> # This example show the case for k = s
+gap> #
+gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+Z(2)^0
+gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
+gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
+gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
+Z(2)^0
+gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
+gap> MinimumDistance(C);
+29
+gap> Display(C);
+a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
+gap> #
+gap> # This example show the case for k < s
+gap> #
+gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+-x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
+gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
+gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
+gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
+gap> MinimumDistance(C);
+34
+gap> Display(C);
+a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
+gap> #
+gap> # This example show the binary case using octal representation
+gap> #
+gap> L1 := 001;;   # 0 000 001
+gap> L2 := 013;;   # 0 001 011
+gap> L3 := 015;;   # 0 001 101
+gap> L4 := 077;;   # 0 111 111
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
+gap> MinimumDistance(C);
+12
+gap> Display(C);
+a linear [28,7,12]8..14 quasi-cyclic code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7BFEDA52835A601D" name="X7BFEDA52835A601D"></a></p>
+
+<h5>5.5-17 CyclicMDSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclicMDSCode</code>( <var class="Arg">q, m, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Given the input parameters <var class="Arg">q</var>, <var class="Arg">m</var> and <var class="Arg">k</var>, this function returns a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k can be used, otherwise only odd value of k is accepted.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=CyclicMDSCode(2,6,24);
+a cyclic [65,24,42]31..41 MDS code over GF(64)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(5,3,77);
+a cyclic [126,77,50]35..49 MDS code over GF(125)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(3,3,25);
+a cyclic [28,25,4]2..3 MDS code over GF(27)
+gap> GeneratorPol(C);
+x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
+gap>
+</pre></td></tr></table>
+
+<p><a id="X7F40AF3B81C252DC" name="X7F40AF3B81C252DC"></a></p>
+
+<h5>5.5-18 FourNegacirculantSelfDualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FourNegacirculantSelfDualCode</code>( <var class="Arg">ax, bx, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A four-negacirculant self-dual code has a generator matrix G of the the following form</p>
+
+
+<pre class="normal">
+
+    -                    -
+    |        |  A  |  B  |
+G = |  I_2k  |-----+-----|
+    |        | -B^T| A^T |
+    -                    -
+		
+</pre>
+
+<p>where AA^T + BB^T = -I_k and A, B and their transposed are all k x k negacirculant matrices. The generator matrix G returns a [2k, k, d]_q self-dual code over GF(q). For discussion on four-negacirculant self-dual codes, refer to <a href="chapBib.html#biBHHKK07">[HHKK07]</a>.</p>
+
+<p>The input parameters <var class="Arg">ax</var> and <var class="Arg">bx</var> are the defining polynomials over GF(q) of negacirculant matrices A and B respectively. The last parameter <var class="Arg">k</var> is the dimension of the code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
+-x_1^4-x_1+Z(3)^0
+gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
+x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
+gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+gap> MinimumDistance(C);;
+gap> CoveringRadius(C);;
+gap> IsSelfDualCode(C);
+true
+gap> Display(C);
+a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
+gap> Display( GeneratorMat(C) );
+ 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
+ . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
+ . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
+ . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
+ . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
+ . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
+ . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
+ . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
+ . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
+ . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
+ . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
+ . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
+ . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
+ . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
+gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
+x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
+gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
+Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
+gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
+gap> IsSelfDualCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X87137A257E761291" name="X87137A257E761291"></a></p>
+
+<h5>5.5-19 FourNegacirculantSelfDualCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FourNegacirculantSelfDualCodeNC</code>( <var class="Arg">ax, bx, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function is the same as <code class="code">FourNegacirculantSelfDualCode</code>, except this version is faster as it does not estimate the minimum distance and covering radius of the code.</p>
+
+<p><a id="X850A28C579137220" name="X850A28C579137220"></a></p>
+
+<h4>5.6 <span class="Heading">
+Evaluation Codes
+</span></h4>
+
+<p><a id="X78E078567D19D433" name="X78E078567D19D433"></a></p>
+
+<h5>5.6-1 EvaluationCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationCode</code>( <var class="Arg">P, L, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">F</var> is a finite field, <var class="Arg">L</var> is a list of rational functions in R=F[x_1,...,x_r], <var class="Arg">P</var> is a list of n points in F^r at which all of the functions in <var class="Arg">L</var> are defined. <br /> Output: The 'evaluation code' C, which is the image of the evalation map</p>
+
+<p class="pcenter">
+Eval_P:span(L)\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L. The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.EvaluationMat</code> (not the same as the generator matrix in general), <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.basis</code> (namely <var class="Arg">L</var>), and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,2);;
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+gap> C:=EvaluationCode(Pts,L,R);
+a linear [11,8,1..3]2..3  evaluation code over GF(11)
+gap> MinimumDistance(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X810AB3DB844FFCE9" name="X810AB3DB844FFCE9"></a></p>
+
+<h5>5.6-2 GeneralizedReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonCode</code>( <var class="Arg">P, k, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: R=F[x], where <var class="Arg">F</var> is a finite field, <var class="Arg">k</var> is a positive integer, <var class="Arg">P</var> is a list of n points in F. <br /> Output: The C which is the image of the evaluation map</p>
+
+<p class="pcenter">
+Eval_P:F[x]_k\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f ranges over the space F[x]_k of all polynomials of degree less than k.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.degree</code> (namely <var class="Arg">k</var>), and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+<p>This code can be decoded using <code class="code">Decodeword</code>, which applies the special decoder method (the interpolation method), or using <code class="code">GeneralizedReedSolomonDecoderGao</code> which applies an algorithm of S. Gao (see <code class="func">GeneralizedReedSolomonDecoderGao</code> (<a href="chap4.html#X7D48DE2A84474C6A"><b>4.10-3</b></a>)). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen  [...]
+
+<p>The weighted version has implemented with the option <code class="code">GeneralizedReedSolomonCode(P,k,R,wts)</code>, where wts = [v_1, ..., v_n] is a sequence of n non-zero elements from the base field F of <var class="Arg">R</var>. See also the generalized Reed--Solomon code GRS_k(P, V) described in <a href="chapBib.html#biBMS83">[MS83]</a>, p.303.</p>
+
+<p>The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of <a href="chapBib.html#biBJH04">[JH04]</a>) has been implemented for generalized Reed-Solomon codes. See <code class="func">GeneralizedReedSolomonListDecoder</code> (<a href="chap4.html#X7CFF98D483502053"><b>4.10-4</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+[ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
+a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X85B8699680B9D786" name="X85B8699680B9D786"></a></p>
+
+<h5>5.6-3 GeneralizedReedMullerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedMullerCode</code>( <var class="Arg">Pts, r, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedMullerCode</code> returns a 'Reed-Muller code' C with length |Pts| and order r. One considers (a) a basis of monomials for the vector space over F=GF(q) of all polynomials in F[x_1,...,x_d] of degree at most r, and (b) a set Pts of points in F^d. The generator matrix of the associated <em>Reed-Muller code</em> C is G=(f(p))_fin B,p in Pts. This code C is constructed using the command <code class="code">GeneralizedReedMullerCode(Pts,r,F)</code>. When P [...]
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">Pts</var>) and <code class="code">C!.degree</code> (namely <var class="Arg">r</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Pts:=ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
+  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
+  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
+  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
+a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X7EE68B58872D7E82" name="X7EE68B58872D7E82"></a></p>
+
+<h5>5.6-4 ToricPoints</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ToricPoints</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ToricPoints(n,F)</code> returns the points in (F^x)^n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
+  [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
+  [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
+  [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
+  [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+</pre></td></tr></table>
+
+<p><a id="X7B24BE418010F596" name="X7B24BE418010F596"></a></p>
+
+<h5>5.6-5 ToricCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ToricCode</code>( <var class="Arg">L, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns the toric codes as in D. Joyner <a href="chapBib.html#biBJo04">[Joy04]</a> (see also J. P. Hansen <a href="chapBib.html#biBHan99">[Han99]</a>). This is a truncated (generalized) Reed-Muller code. Here <var class="Arg">L</var> is a list of integral vectors and <var class="Arg">F</var> is the finite field. The size of <var class="Arg">F</var> must be different from 2.</p>
+
+<p>This command returns a record object <code class="code">C</code> with an extra component (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.exponents</code> (namely <var class="Arg">L</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=ToricCode([[1,0],[3,4]],GF(3));
+a linear [4,1,4]2 toric code over GF(3)
+gap> Display(GeneratorMat(C));
+ 1 1 2 2
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X7AE2B2CD7C647990" name="X7AE2B2CD7C647990"></a></p>
+
+<h4>5.7 <span class="Heading">
+Algebraic geometric codes
+</span></h4>
+
+<p>Certain <strong class="pkg">GUAVA</strong> functions related to algebraic geometric codes are described in this section.</p>
+
+<p><a id="X802DD9FB79A9ACA7" name="X802DD9FB79A9ACA7"></a></p>
+
+<h5>5.7-1 AffineCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AffineCurve</code>( <var class="Arg">poly, ring</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function simply defines the data structure of an affine plane curve. In <strong class="pkg">GUAVA</strong>, an affine curve is a record <var class="Arg">crv</var> having two components: a polynomial <var class="Arg">poly</var>, accessed in <strong class="pkg">GUAVA</strong> by <var class="Arg">crv.polynomial</var>, and a polynomial ring over a field F in two variables <var class="Arg">ring</var>, accessed in <strong class="pkg">GUAVA</strong> by <var class="Arg">crv.ring</var>, c [...]
+
+<p>For example, for the ring, one could take Q}[x,y], and for the polynomial one could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y] for the ring and f(x,y)=y for the polynomial.</p>
+
+<p>(Not sure if F neeeds to be a field in fact ...)</p>
+
+<p>To compute its degree, simply use the <code class="func">DegreeMultivariatePolynomial</code> (<a href="chap7.html#X80433A4B792880EF"><b>7.6-2</b></a>) command.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+1
+gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+3
+gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+2
+gap> q:=3;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
+gap>
+</pre></td></tr></table>
+
+<p>In GAP, a <em>point</em> on a curve defined by f(x,y)=0 is simply a list <var class="Arg">[a,b]</var> of elements of F satisfying this polynomial equation.</p>
+
+<p><a id="X857EFE567C05C981" name="X857EFE567C05C981"></a></p>
+
+<h5>5.7-2 AffinePointsOnCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AffinePointsOnCurve</code>( <var class="Arg">f, R, E</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AffinePointsOnCurve(f,R,E)</code> returns the points (x,y) in E^2 satisying f(x,y)=0, where <var class="Arg">f</var> is an element of R=F[x,y].</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+[ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
+  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
+  [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+  [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]
+</pre></td></tr></table>
+
+<p><a id="X857E36ED814A40B8" name="X857E36ED814A40B8"></a></p>
+
+<h5>5.7-3 GenusCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GenusCurve</code>( <var class="Arg">crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If <var class="Arg">crv</var> represents f(x,y)=0, where f is a polynomial of degree d, then this function simply returns (d-1)(d-2)/2. At the present, the function does not check if the curve is singular (in which case the result may be false).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> a:=X(F);;
+gap> R1:=PolynomialRing(F,[a]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);;
+gap> b:=X(F);;
+gap> R2:=PolynomialRing(F,[a,b]);;
+gap> var2:=IndeterminatesOfPolynomialRing(R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
+rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
+gap> GenusCurve(crv);
+36
+
+</pre></td></tr></table>
+
+<p><a id="X8572A3037DA66F88" name="X8572A3037DA66F88"></a></p>
+
+<h5>5.7-4 GOrbitPoint </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GOrbitPoint </code>( <var class="Arg">GP</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><var class="Arg">P</var> must be a point in projective space P^n(F), <var class="Arg">G</var> must be a finite subgroup of GL(n+1,F), This function returns all (representatives of projective) points in the orbit G* P.</p>
+
+<p>The example below computes the orbit of the automorphism group on the Klein quartic over the field GF(43) on the ``point at infinity''.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:= PolynomialRing( GF(43), 3 );;
+gap> vars:= IndeterminatesOfPolynomialRing(R);;
+gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
+gap> zz:=Z(43)^6;
+Z(43)^6
+gap> zzz:=Z(43);
+Z(43)
+gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
+[ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
+[ 0*Z(43), Z(43)^12, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
+gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
+[ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], 
+[ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
+gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
+>             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
+>             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
+[ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
+[ Z(43)^28, Z(43)^12, Z(43)^9 ], 
+[ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
+gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
+gap> Size(G);
+168
+gap> P:=[1,0,0]*zzz^0;
+[ Z(43)^0, 0*Z(43), 0*Z(43) ]
+gap> O:=GOrbitPoint(G,P);
+[ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
+[ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
+[ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
+[ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
+[ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
+[ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
+[ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
+[ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
+[ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
+[ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
+[ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
+gap> Length(O);
+24
+
+</pre></td></tr></table>
+
+<p>Informally, a <em>divisor</em> on a curve is a formal integer linear combination of points on the curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the ``multiplicity'' of P_i in D) and P_i are (F-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the F-rational affine points on the curve. The <em>support</em> of a divisor D is simply the set of points which occurs in the sum defining D with non-zero ``multi [...]
+
+
+<ul>
+<li><p>the coefficients (the integer weights of the points in the support),</p>
+
+</li>
+<li><p>the support,</p>
+
+</li>
+<li><p>the curve, itself a record which has components: polynomial and polynomial ring.</p>
+
+</li>
+</ul>
+<p><a id="X79742B7183051D99" name="X79742B7183051D99"></a></p>
+
+<h5>5.7-5 DivisorOnAffineCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorOnAffineCurve</code>( <var class="Arg">cdivsdivcrv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the command you use to define a divisor in <strong class="pkg">GUAVA</strong>. Of course, <var class="Arg">crv</var> is the curve on which the divisor lives, <var class="Arg">cdiv</var> is the list of coefficients (or ``multiplicities''), <var class="Arg">sdiv</var> is the list of points on <var class="Arg">crv</var> in the support.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=5;
+5
+gap> F:=GF(q);
+GF(5)
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^3-x^3-x-1,R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
+gap> Pts:=AffinePointsOnCurve(crv,R,F);;
+gap> supp:=[Pts[1],Pts[2]];
+[ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
+gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
+rec( coeffs := [ 1, -1 ], 
+     support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
+     curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+                   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )
+
+</pre></td></tr></table>
+
+<p><a id="X8626E2B57D01F2DC" name="X8626E2B57D01F2DC"></a></p>
+
+<h5>5.7-6 DivisorAddition </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorAddition </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If D_1=m_1P_1+...+m_kP_k and D_2=n_1P_1+...+n_kP_k are divisors then D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k.</p>
+
+<p><a id="X865FE28D828C1EAD" name="X865FE28D828C1EAD"></a></p>
+
+<h5>5.7-7 DivisorDegree </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorDegree </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If D=m_1P_1+...+m_kP_k is a divisor then the <em>degree</em> is m_1+...+m_k.</p>
+
+<p><a id="X789DC358819A8F54" name="X789DC358819A8F54"></a></p>
+
+<h5>5.7-8 DivisorNegate </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorNegate </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X8688C0E187B5C7DB" name="X8688C0E187B5C7DB"></a></p>
+
+<h5>5.7-9 DivisorIsZero </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorIsZero </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X816A07997D9A7075" name="X816A07997D9A7075"></a></p>
+
+<h5>5.7-10 DivisorsEqual </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorsEqual </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X857B89847A649A26" name="X857B89847A649A26"></a></p>
+
+<h5>5.7-11 DivisorGCD </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorGCD </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their greatest common divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve then their <em>greatest common divisor</em> is GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k. This function computes this quantity.</p>
+
+<p><a id="X82231CF08073695F" name="X82231CF08073695F"></a></p>
+
+<h5>5.7-12 DivisorLCM </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorLCM </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their least common multiple is LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k are two divisors on a curve then their <em>least common multiple</em> is LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k. This function computes this quantity.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div1);
+10
+gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div2);
+10
+gap> div3:=DivisorAddition(div1,div2);
+rec( coeffs := [ 5, 3, 5, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div3);
+20
+gap> DivisorIsEffective(div1);
+true
+gap> DivisorIsEffective(div2);
+true
+gap>
+gap> ndiv1:=DivisorNegate(div1);
+rec( coeffs := [ -1, -2, -3, -4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> zdiv:=DivisorAddition(div1,ndiv1);
+rec( coeffs := [ 0, 0, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorIsZero(zdiv);
+true
+gap> div_gcd:=DivisorGCD(div1,div2);
+rec( coeffs := [ 1, 1, 2, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> div_lcm:=DivisorLCM(div1,div2);
+rec( coeffs := [ 4, 2, 3, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div_gcd);
+4
+gap> DivisorDegree(div_lcm);
+16
+gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+true
+
+</pre></td></tr></table>
+
+<p>Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the projective line P^1(F). If G leaves D unchanged (it may permute the points in the support of D but must preserve their sum in D) then the Riemann-Roch space L(D) is a G-module. The commands in this section help explore the G-module structure of L(D) in the case then the ground field F is finite.</p>
+
+<p><a id="X79C878697F99A10F" name="X79C878697F99A10F"></a></p>
+
+<h5>5.7-13 RiemannRochSpaceBasisFunctionP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RiemannRochSpaceBasisFunctionP1 </code>( <var class="Arg">PkR2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">R2</var> is a polynomial ring in two variables, say F[x,y]; <var class="Arg">P</var> is an element of the base field, say F; <var class="Arg">k</var> is an integer. Output: 1/(x-P)^k</p>
+
+<p><a id="X856DDA207EDDF256" name="X856DDA207EDDF256"></a></p>
+
+<h5>5.7-14 DivisorOfRationalFunctionP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorOfRationalFunctionP1 </code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here R = F[x,y] is a polynomial ring in the variables x,y and f is a rational function of x. Simply returns the principal divisor on P}^1 associated to f.</p>
+
+
+<table class="example">
+<tr><td><pre>
+
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> pt:=Z(11);
+Z(11)
+gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+(Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
+gap> Df:=DivisorOfRationalFunctionP1(f,R2);
+rec( coeffs := [ -2 ], support := [ Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
+   )
+gap> Df.support;
+[ Z(11) ]
+gap> F:=GF(11);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> a:=vars[1];;
+gap> b:=vars[2];;
+gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+gap> divf:=DivisorOfRationalFunctionP1(f,R);
+rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
+  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
+gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
+[  ]
+gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
+[ Z(11)^7, Z(11), Z(11), Z(11) ]
+
+</pre></td></tr></table>
+
+<p><a id="X878970A17E580224" name="X878970A17E580224"></a></p>
+
+<h5>5.7-15 RiemannRochSpaceBasisP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RiemannRochSpaceBasisP1 </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This returns the basis of the Riemann-Roch space L(D) associated to the divisor <var class="Arg">D</var> on the projective line P}^1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> B:=RiemannRochSpaceBasisP1(D);
+[ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
+(Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
+(Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
+  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
+(Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
+(Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
+gap> DivisorOfRationalFunctionP1(B[1],R2).support;
+[  ]
+gap> DivisorOfRationalFunctionP1(B[2],R2).support;
+[ Z(11)^2 ]
+gap> DivisorOfRationalFunctionP1(B[3],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[4],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[5],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[6],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[7],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[8],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[9],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[10],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[11],R2).support;
+[ Z(11) ]
+
+</pre></td></tr></table>
+
+<p><a id="X807C52E67A440DEB" name="X807C52E67A440DEB"></a></p>
+
+<h5>5.7-16 MoebiusTransformation </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MoebiusTransformation </code>( <var class="Arg">AR</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The arguments are a 2x 2 matrix A with entries in a field F and a polynomial ring <var class="Arg">R</var>of one variable, say F[x]. This function returns the linear fractional transformatio associated to <var class="Arg">A</var>. These transformations can be composed with each other using GAP's <code class="code">Value</code> command.</p>
+
+<p><a id="X85A0419580ED0391" name="X85A0419580ED0391"></a></p>
+
+<h5>5.7-17 ActionMoebiusTransformationOnFunction </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ActionMoebiusTransformationOnFunction </code>( <var class="Arg">AfR2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The arguments are a 2x 2 matrix A with entries in a field F, a rational function <var class="Arg">f</var> of one variable, say in F(x), and a polynomial ring <var class="Arg">R2</var>, say F[x,y]. This function simply returns the composition of the function <var class="Arg">f</var> with the Möbius transformation of <var class="Arg">A</var>.</p>
+
+<p><a id="X7E48F9C67E7FB7B5" name="X7E48F9C67E7FB7B5"></a></p>
+
+<h5>5.7-18 ActionMoebiusTransformationOnDivisorP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ActionMoebiusTransformationOnDivisorP1 </code>( <var class="Arg">AD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A Möbius transformation may be regarded as an automorphism of the projective line P^1. This function simply returns the image of the divisor <var class="Arg">D</var> under the Möbius transformation defined by <var class="Arg">A</var>, provided that <code class="code">IsActionMoebiusTransformationOnDivisorDefinedP1(A,D)</code> returns true.</p>
+
+<p><a id="X79FD980E7B24DB9C" name="X79FD980E7B24DB9C"></a></p>
+
+<h5>5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsActionMoebiusTransformationOnDivisorDefinedP1 </code>( <var class="Arg">AD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns true of none of the points in the support of the divisor <var class="Arg">D</var> is the pole of the Möbius transformation.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> A:=Z(11)^0*[[1,2],[1,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+false
+gap> A:=Z(11)^0*[[1,2],[3,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+true
+gap> ActionMoebiusTransformationOnDivisorP1(A,D);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> f:=MoebiusTransformation(A,R1);
+(a+Z(11))/(Z(11)^8*a+Z(11)^2)
+gap> ActionMoebiusTransformationOnFunction(A,f,R1);
+-Z(11)^0+Z(11)^3*a^-1
+
+</pre></td></tr></table>
+
+<p><a id="X823386037F450B0E" name="X823386037F450B0E"></a></p>
+
+<h5>5.7-20 DivisorAutomorphismGroupP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorAutomorphismGroupP1 </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: A divisor <var class="Arg">D</var> on P^1(F), where F is a finite field. Output: A subgroup Aut(D)subset Aut(P^1) preserving <var class="Arg">D</var>.</p>
+
+<p>Very slow.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7305
+gap> IdGroup(agp);
+[ 10, 2 ]
+
+</pre></td></tr></table>
+
+<p><a id="X80EDF3D682E7EF3F" name="X80EDF3D682E7EF3F"></a></p>
+
+<h5>5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixRepresentationOnRiemannRochSpaceP1 </code>( <var class="Arg">gD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: An element <var class="Arg">g</var> in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor <var class="Arg">D</var> on P^1(F), where F is a finite field. Output: a dx d matrix, where d = dim, L(D), representing the action of <var class="Arg">g</var> on L(D).</p>
+
+<p>Note: <var class="Arg">g</var> sends L(D) to r* L(D), where r is a polynomial of degree 1 depending on <var class="Arg">g</var> and <var class="Arg">D</var>.</p>
+
+<p>Also very slow.</p>
+
+<p>The GAP command <code class="code">BrauerCharacterValue</code> can be used to ``lift'' the eigenvalues of this matrix to the complex numbers.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 1, 1, 4 ],  
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7198
+gap> IdGroup(agp);
+[ 20, 5 ]
+gap> g:=Random(agp);
+[ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
+gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
+  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
+[ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
+gap> Display(rho);
+  1  .  .  .  .  .  .  .
+  1  .  .  2  .  .  .  .
+  7  . 10  .  .  .  .  .
+  5  6  .  .  .  .  .  .
+  4  .  .  . 10  .  .  .
+  5  .  .  .  3  1  .  .
+  9  .  .  .  7  1 10  .
+  3  .  .  .  8  8  6  1
+
+</pre></td></tr></table>
+
+<p><a id="X8777388C7885E335" name="X8777388C7885E335"></a></p>
+
+<h5>5.7-22 GoppaCodeClassical</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GoppaCodeClassical</code>( <var class="Arg">div, pts</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: A divisor <var class="Arg">div</var> on the projective line P}^1(F) over a finite field F and a list <var class="Arg">pts</var> of points P_1,...,P_nsubset F disjoint from the support of <var class="Arg">div</var>. <br /> Output: The classical (evaluation) Goppa code associated to this data. This is the code</p>
+
+<p class="pcenter">
+C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> a:=vars[1];;b:=vars[2];;
+gap> cdiv:=[ 1, 2, -1, -2 ];
+[ 1, 2, -1, -2 ]
+gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
+gap> crv:=rec(polynomial:=b,ring:=R2);
+rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
+gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
+  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
+gap> pts:=Difference(Elements(GF(11)),div.support);
+[ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
+gap> C:=GoppaCodeClassical(div,pts);
+a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
+gap> MinimumDistance(C);
+6
+</pre></td></tr></table>
+
+<p><a id="X8422A310854C09B0" name="X8422A310854C09B0"></a></p>
+
+<h5>5.7-23 EvaluationBivariateCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationBivariateCode</code>( <var class="Arg">pts, L, crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <code class="code">pts</code> is a set of affine points on <code class="code">crv</code>, <code class="code">L</code> is a list of rational functions on <code class="code">crv</code>. <br /> Output: The evaluation code associated to the points in <code class="code">pts</code> and functions in <code class="code">L</code>, but specifically for affine plane curves and this function checks if points are ``bad" (if so removes them from the list <code class="code">pts</code> automati [...]
+
+<p>Very similar to <code class="code">EvaluationCode</code> (see <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction).</p>
+
+<p><a id="X7B6C2BED8319C811" name="X7B6C2BED8319C811"></a></p>
+
+<h5>5.7-24 EvaluationBivariateCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationBivariateCodeNC</code>( <var class="Arg">pts, L, crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>As in <code class="code">EvaluationBivariateCode</code> but does not check if the points are ``bad''.</p>
+
+<p>Input: <code class="code">pts</code> is a set of affine points on <code class="code">crv</code>, <code class="code">L</code> is a list of rational functions on <code class="code">crv</code>. <br /> Output: The evaluation code associated to the points in <code class="code">pts</code> and functions in <code class="code">L</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> x:=vars[1];;
+gap> y:=vars[2];;
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
+gap> L:=[ x^0, x, x^2*y^-1 ];
+[ Z(2)^0, x_1, x_1^2/x_2 ]
+gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;
+
+
+ Automatically removed the following 'bad' points (either a pole or not 
+ on the curve):
+[ [ 0*Z(2), 0*Z(2) ] ]
+
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+52
+gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+48
+gap> C3:=EvaluationCode(P,L,R); time;
+a linear [63,3,1..56]51..59  evaluation code over GF(16)
+58
+gap> MinimumDistance(C1);
+56
+gap> MinimumDistance(C2);
+56
+gap> MinimumDistance(C3);
+56
+gap>
+</pre></td></tr></table>
+
+<p><a id="X842E227E8785168E" name="X842E227E8785168E"></a></p>
+
+<h5>5.7-25 OnePointAGCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OnePointAGCode</code>( <var class="Arg">f, P, m, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">f</var> is a polynomial in R=F[x,y], where <var class="Arg">F</var> is a finite field, <var class="Arg">m</var> is a positive integer (the multiplicity of the `point at infinity' infty on the curve f(x,y)=0), <var class="Arg">P</var> is a list of n points on the curve over F. <br /> Output: The C which is the image of the evaluation map</p>
+
+<p class="pcenter">
+Eval_P:L(m \cdot \infty)\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty) denotes the Riemann-Roch space of the divisor m * infty on the curve. This has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon depending on m and f(x,y). For more details on the Riemann-Roch space of the divisor m * infty see Proposition III.10.5 in Stichtenoth <a href="chapBib.html#biBSt93">[Sti93]</a>.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.multiplicity</code> (namely <var class="Arg">m</var>), <code class="code">C!.curve</code> (namely <var class="Arg">f</var>) and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);
+[ x, y ]
+gap> x:=indets[1]; y:=indets[2];
+x
+y
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+a linear [11,8,1..0]2..3  one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
+a linear [9,6,1..4]2..3 one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap4.html">Previous Chapter</a>    <a href="chap6.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap5.txt b/doc/chap5.txt
new file mode 100644
index 0000000..b8c9a59
--- /dev/null
+++ b/doc/chap5.txt
@@ -0,0 +1,2372 @@
+  
+  5. Generating Codes
+  
+  In this chapter we describe functions for generating codes.
+  
+  Section 5.1 describes functions for generating unrestricted codes.
+  
+  Section 5.2 describes functions for generating linear codes.
+  
+  Section  5.3  describes  functions  for constructing certain covering codes,
+  such as the Gabidulin codes.
+  
+  Section 5.4 describes functions for constructing the Golay codes.
+  
+  Section 5.5 describes functions for generating cyclic codes.
+  
+  Section  5.6  describes  functions  for  generating codes as the image of an
+  evaluation  map  applied  to  a space of functions. For example, generalized
+  Reed-Solomon codes and toric codes are described there.
+  
+  
+  5.1 Generating Unrestricted Codes
+  
+  In this section we start with functions that creating code from user defined
+  matrices   or  special  matrices  (see  ElementsCode  (5.1-1),  HadamardCode
+  (5.1-2),  ConferenceCode  (5.1-3)  and  MOLSCode  (5.1-4)).  These codes are
+  unrestricted codes; they may later be discovered to be linear or cyclic.
+  
+  The  next  functions  generate random codes (see RandomCode (5.1-5)) and the
+  Nordstrom-Robinson code (see NordstromRobinsonCode (5.1-6)), respectively.
+  
+  Finally,  we  describe  two functions for generating Greedy codes. These are
+  codes  that  contructed  by gathering codewords from a space (see GreedyCode
+  (5.1-7) and LexiCode (5.1-8)).
+  
+  5.1-1 ElementsCode
+  
+  > ElementsCode( L[, name], F ) _____________________________________function
+  
+  ElementsCode  creates an unrestricted code of the list of elements L, in the
+  field  F.  L  must  be a list of vectors, strings, polynomials or codewords.
+  name can contain a short description of the code.
+  
+  If  L  contains a codeword more than once, it is removed from the list and a
+  GAP set is returned.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+    gap> C := ElementsCode( M, "example code", GF(3) );
+    a (4,3,1..4)2 example code over GF(3)
+    gap> MinimumDistance( C );
+    4
+    gap> AsSSortedList( C );
+    [ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]
+  ------------------------------------------------------------------
+  
+  5.1-2 HadamardCode
+  
+  > HadamardCode( H[, t] ) ___________________________________________function
+  
+  The four forms this command can take are HadamardCode(H,t), HadamardCode(H),
+  HadamardCode(n,t), and HadamardCode(n).
+  
+  In  the case when the arguments H and t are both given, HadamardCode returns
+  a  Hadamard  code of the t^th kind from the Hadamard matrix H In case only H
+  is given, t = 3 is used.
+  
+  By definition, a Hadamard matrix is a square matrix H with H* H^T = -n* I_n,
+  where n is the size of H. The entries of H are either 1 or -1.
+  
+  The  matrix H is first transformed into a binary matrix A_n by replacing the
+  1's by 0's and the -1's by 1s).
+  
+  The  Hadamard matrix of the first kind (t=1) is created by using the rows of
+  A_n  as  elements,  after deleting the first column. This is a (n-1, n, n/2)
+  code.  We  use  this  code for creating the Hadamard code of the second kind
+  (t=2), by adding all the complements of the already existing codewords. This
+  results  in  a  (n-1,  2n,  n/2 -1) code. The third kind (t=3) is created by
+  using  the  rows  of A_n (without cutting a column) and their complements as
+  elements.  This  way,  we  have  an  (n, 2n, n/2)-code. The returned code is
+  generally an unrestricted code, but for n = 2^r, the code is linear.
+  
+  The  command  HadamardCode(n,t)  returns a Hadamard code with parameter n of
+  the t^th kind. For the command HadamardCode(n), t=3 is used.
+  
+  When  called  in  these  forms, HadamardCode first creates a Hadamard matrix
+  (see  HadamardMat (7.3-4)), of size n and then follows the same procedure as
+  described  above.  Therefore  the same restrictions with respect to n as for
+  Hadamard matrices hold.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+    gap> HadamardCode( H4, 1 );
+    a (3,4,2)1 Hadamard code of order 4 over GF(2)
+    gap> HadamardCode( H4, 2 );
+    a (3,8,1)0 Hadamard code of order 4 over GF(2)
+    gap> HadamardCode( H4 );
+    a (4,8,2)1 Hadamard code of order 4 over GF(2) 
+    gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+    gap> C := HadamardCode( 4 );
+    a (4,8,2)1 Hadamard code of order 4 over GF(2)
+    gap> C = HadamardCode( H4 );
+    true 
+  ------------------------------------------------------------------
+  
+  5.1-3 ConferenceCode
+  
+  > ConferenceCode( H ) ______________________________________________function
+  
+  ConferenceCode  returns  a  code  of length n-1 constructed from a symmetric
+  'conference  matrix' H. A conference matrix H is a symmetric matrix of order
+  n,  which  satisfies  H*  H^T  =  ((n-1)*  I,  with n = 2 mod 4. The rows of
+  frac12(H+I+J),  frac12(-H+I+J),  plus the zero and all-ones vectors form the
+  elements of a binary non-linear (n-1, 2n, (n-2)/2) code.
+  
+  GUAVA constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and
+  uses  the  rows  of  that  matrix,  plus  the  zero and all-ones vectors, to
+  construct a binary non-linear (n, 2(n+1), (n-1)/2)-code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+    > [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+    gap> C1 := ConferenceCode( H6 );
+    a (5,12,2)1..4 conference code over GF(2)
+    gap> IsLinearCode( C1 );
+    false 
+    gap> C2 := ConferenceCode( 5 );
+    a (5,12,2)1..4 conference code over GF(2)
+    gap> AsSSortedList( C2 );
+    [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+      [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+      [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+  ------------------------------------------------------------------
+  
+  5.1-4 MOLSCode
+  
+  > MOLSCode( [n][,]q ) ______________________________________________function
+  
+  MOLSCode  returns an (n, q^2, n-1) code over GF(q). The code is created from
+  n-2  'Mutually  Orthogonal  Latin Squares' (MOLS) of size q x q. The default
+  for  n  is 4. GUAVA can construct a MOLS code for n-2 <= q. Here q must be a
+  prime power, q > 2. If there are no n-2 MOLS, an error is signalled.
+  
+  Since  each  of  the n-2 MOLS is a qx q matrix, we can create a code of size
+  q^2  by  listing  in  each  code  element  the  entries that are in the same
+  position  in  each  of the MOLS. We precede each of these lists with the two
+  coordinates that specify this position, making the word length become n.
+  
+  The MOLS codes are MDS codes (see IsMDSCode (4.3-7)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := MOLSCode( 6, 5 );
+    a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
+    gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+    >       local ls, el;
+    >       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+    >       for el in VectorCodeword( AsSSortedList( C1 ) ) do
+    >          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+    >       od;
+    >       return ls;
+    >    end );;
+    gap> AreMOLS( mols );
+    true
+    gap> C2 := MOLSCode( 11 );
+    a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 
+  ------------------------------------------------------------------
+  
+  5.1-5 RandomCode
+  
+  > RandomCode( n, M, F ) ____________________________________________function
+  
+  RandomCode  returns  a random unrestricted code of size M with word length n
+  over  F. M must be less than or equal to the number of elements in the space
+  GF(q)^n.
+  
+  The   function   RandomLinearCode   returns   a   random  linear  code  (see
+  RandomLinearCode (5.2-12)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := RandomCode( 6, 10, GF(8) );
+    a (6,10,1..6)4..6 random unrestricted code over GF(8)
+    gap> MinimumDistance(C1);
+    3
+    gap> C2 := RandomCode( 6, 10, GF(8) );
+    a (6,10,1..6)4..6 random unrestricted code over GF(8)
+    gap> C1 = C2;
+    false 
+  ------------------------------------------------------------------
+  
+  5.1-6 NordstromRobinsonCode
+  
+  > NordstromRobinsonCode(  ) ________________________________________function
+  
+  NordstromRobinsonCode  returns a Nordstrom-Robinson code, the best code with
+  word  length  n=16 and minimum distance d=6 over GF(2). This is a non-linear
+  (16, 256, 6) code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := NordstromRobinsonCode();
+    a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+    gap> OptimalityCode( C );
+    0 
+  ------------------------------------------------------------------
+  
+  5.1-7 GreedyCode
+  
+  > GreedyCode( L, d, F ) ____________________________________________function
+  
+  GreedyCode  returns  a  Greedy  code  with design distance d over the finite
+  field  F.  The code is constructed using the greedy algorithm on the list of
+  vectors  L. (The greedy algorithm checks each vector in L and adds it to the
+  code  if  its distance to the current code is greater than or equal to d. It
+  is obvious that the resulting code has a minimum distance of at least d.
+  
+  Greedy codes are often linear codes.
+  
+  The  function  LexiCode  creates  a  greedy  code from a basis instead of an
+  enumerated list (see LexiCode (5.1-8)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+    a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+    gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
+    >                         (1,4) ), 3, GF(2) );
+    a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+    gap> C1 = C2;
+    false 
+  ------------------------------------------------------------------
+  
+  5.1-8 LexiCode
+  
+  > LexiCode( n, d, F ) ______________________________________________function
+  
+  In  this  format,  Lexicode  returns  a  lexicode with word length n, design
+  distance d over F. The code is constructed using the greedy algorithm on the
+  lexicographically ordered list of all vectors of length n over F. Every time
+  a  vector is found that has a distance to the current code of at least d, it
+  is  added  to  the  code.  This  results,  obviously, in a code with minimum
+  distance greater than or equal to d.
+  
+  Another syntax which one can use is LexiCode( B, d, F ). When called in this
+  format,  LexiCode  uses  the  basis  B instead of the standard basis. B is a
+  matrix of vectors over F. The code is constructed using the greedy algorithm
+  on  the list of vectors spanned by B, ordered lexicographically with respect
+  to B.
+  
+  Note that binary lexicodes are always linear.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := LexiCode( 4, 3, GF(5) );
+    a (4,17,3..4)2..4 lexicode over GF(5) 
+    gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+    gap> C := LexiCode( B, 2, GF(2) );
+    a linear [3,1,2]1..2 lexicode over GF(2) 
+  ------------------------------------------------------------------
+  
+  The  function  GreedyCode  creates a greedy code that is not restricted to a
+  lexicographical order (see GreedyCode (5.1-7)).
+  
+  
+  5.2 Generating Linear Codes
+  
+  In  this  section  we  describe  functions  for constructing linear codes. A
+  linear code always has a generator or check matrix.
+  
+  The  first  two  functions  generate  linear codes from the generator matrix
+  (GeneratorMatCode  (5.2-1))  or  check  matrix  (CheckMatCode  (5.2-3)). All
+  linear codes can be constructed with these functions.
+  
+  The  next functions we describe generate some well-known codes, like Hamming
+  codes  (HammingCode (5.2-4)), Reed-Muller codes (ReedMullerCode (5.2-5)) and
+  the    extended    Golay    codes   (ExtendedBinaryGolayCode   (5.4-2)   and
+  ExtendedTernaryGolayCode (5.4-4)).
+  
+  A  large and powerful family of codes are alternant codes. They are obtained
+  by  a  small  modification  of  the  parity  check matrix of a BCH code (see
+  AlternantCode  (5.2-6), GoppaCode (5.2-7), GeneralizedSrivastavaCode (5.2-8)
+  and SrivastavaCode (5.2-9)).
+  
+  Finally,  we  describe  a  function  for generating random linear codes (see
+  RandomLinearCode (5.2-12)).
+  
+  5.2-1 GeneratorMatCode
+  
+  > GeneratorMatCode( G[, name], F ) _________________________________function
+  
+  GeneratorMatCode  returns a linear code with generator matrix G. G must be a
+  matrix  over  finite  field  F.  name can contain a short description of the
+  code.  The  generator  matrix  is the basis of the elements of the code. The
+  resulting  code  has  word  length n, dimension k if G is a k x n-matrix. If
+  GF(q) is the field of the code, the size of the code will be q^k.
+  
+  If  the generator matrix does not have full row rank, the linearly dependent
+  rows are removed. This is done by the GAP function BaseMat and results in an
+  equal  code.  The  generator  matrix  can  be  retrieved  with  the function
+  GeneratorMat (see GeneratorMat (4.7-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+    gap> C1 := GeneratorMatCode( G, GF(3) );
+    a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
+    gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+    a linear [5,5,1]0 code defined by generator matrix over GF(2)
+    gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
+    > x -> VectorCodeword( x ) ), GF( 2 ) );
+    a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
+    # This is the smallest linear code that contains the N-R code 
+  ------------------------------------------------------------------
+  
+  5.2-2 CheckMatCodeMutable
+  
+  > CheckMatCodeMutable( H[, name], F ) ______________________________function
+  
+  CheckMatCodeMutable is the same as CheckMatCode except that the check matrix
+  and generator matrix are mutable.
+  
+  5.2-3 CheckMatCode
+  
+  > CheckMatCode( H[, name], F ) _____________________________________function
+  
+  CheckMatCode  returns  a linear code with check matrix H. H must be a matrix
+  over Galois field F. [name. can contain a short description of the code. The
+  parity  check  matrix  is  the transposed of the nullmatrix of the generator
+  matrix of the code. Therefore, c* H^T = 0 where c is an element of the code.
+  If  H  is  a  rx  n-matrix,  the  code  has  word length n, redundancy r and
+  dimension n-r.
+  
+  If the check matrix does not have full row rank, the linearly dependent rows
+  are  removed.  This  is  done by the GAP function BaseMat. and results in an
+  equal  code.  The  check  matrix can be retrieved with the function CheckMat
+  (see CheckMat (4.7-2)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+    gap> C1 := CheckMatCode( G, GF(3) );
+    a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
+    gap> CheckMat(C1);
+    [ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
+      [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
+      [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
+    gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+    a cyclic [5,0,5]5 code defined by check matrix over GF(2)
+  ------------------------------------------------------------------
+  
+  5.2-4 HammingCode
+  
+  > HammingCode( r, F ) ______________________________________________function
+  
+  HammingCode  returns a Hamming code with redundancy r over F. A Hamming code
+  is a single-error-correcting code. The parity check matrix of a Hamming code
+  has  all  nonzero  vectors  of  length  r  in  its  columns,  except  for  a
+  multiplication  factor.  The  decoding  algorithm  of  the Hamming code (see
+  Decode (4.10-1)) makes use of this property.
+  
+  If  q  is  the  size  of  its field F, the returned Hamming code is a linear
+  [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 4, GF(2) );
+    a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+    gap> C2 := HammingCode( 3, GF(9) );
+    a linear [91,88,3]1 Hamming (3,9) code over GF(9) 
+  ------------------------------------------------------------------
+  
+  5.2-5 ReedMullerCode
+  
+  > ReedMullerCode( r, k ) ___________________________________________function
+  
+  ReedMullerCode  returns a binary 'Reed-Muller code' R(r, k) with dimension k
+  and  order r. This is a code with length 2^k and minimum distance 2^k-r (see
+  for  example,  section 1.10 in [HP03]). By definition, the r^th order binary
+  Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors
+  f, where f is a Boolean function which is a polynomial of degree at most r.
+  
+  ---------------------------  Example  ----------------------------
+    gap> ReedMullerCode( 1, 3 );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+  ------------------------------------------------------------------
+  
+  See GeneralizedReedMullerCode (5.6-3) for a more general construction.
+  
+  5.2-6 AlternantCode
+  
+  > AlternantCode( r, Y[, alpha], F ) ________________________________function
+  
+  AlternantCode  returns  an  'alternant code', with parameters r, Y and alpha
+  (optional).  F  denotes  the  (finite)  base  field.  Here,  r is the design
+  redundancy  of the code. Y and alpha are both vectors of length n from which
+  the  parity  check  matrix  is  constructed.  The  check matrix has the form
+  H=([a_i^j  y_i]),  where  0 <= j<= r-1, 1 <= i<= n, and where [...] is as in
+  VerticalConversionFieldMat  (7.3-9)).  If  no alpha is specified, the vector
+  [1,  a,  a^2, .., a^n-1] is used, where a is a primitive element of a Galois
+  field F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+    gap> alpha := List( [0..6], i -> a^i );;
+    gap> C := AlternantCode( 2, Y, alpha, GF(8) );
+    a linear [7,3,3..4]3..4 alternant code over GF(8) 
+  ------------------------------------------------------------------
+  
+  5.2-7 GoppaCode
+  
+  > GoppaCode( G, L ) ________________________________________________function
+  
+  GoppaCode   returns   a  Goppa  code  C  from  Goppa  polynomial  g,  having
+  coefficients in a Galois Field GF(q). L must be a list of elements in GF(q),
+  that  are not roots of g. The word length of the code is equal to the length
+  of  L.  The  parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <=
+  deg(g)-1,    a_i    in   L,   where   a_iin   L   and   [...]   is   as   in
+  VerticalConversionFieldMat  (7.3-9), so H has entries in GF(q), q=p^m. It is
+  known  that d(C)>= deg(g)+1, with a better bound in the binary case provided
+  g  has  no  multiple roots. See Huffman and Pless [HP03] section 13.2.2, and
+  MacWilliams and Sloane [MS83] section 12.3, for more details.
+  
+  One  can  also  call  GoppaCode using the syntax GoppaCode(g,n). When called
+  with  parameter  n,  GUAVA  constructs  a  list  L of length n, such that no
+  element of L is a root of g.
+  
+  This is a special case of an alternant code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:=Indeterminate(GF(8),"x");
+    x
+    gap> L:=Elements(GF(8));
+    [ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
+    gap> g:=x^2+x+1;
+    x^2+x+Z(2)^0
+    gap> C:=GoppaCode(g,L);
+    a linear [8,2,5]3 Goppa code over GF(2)
+    gap> xx := Indeterminate( GF(2), "xx" );; 
+    gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
+    gap> C1 := GoppaCode( gg, L );
+    a linear [8,2,5]3 Goppa code over GF(2) 
+    gap> y := Indeterminate( GF(2), "y" );; 
+    gap> h := y^2 + y + 1;;
+    gap> C2 := GoppaCode( h, 8 );
+    a linear [8,2,5]3 Goppa code over GF(2) 
+    gap> C1=C2;
+    true
+    gap> C=C1;
+    true
+  ------------------------------------------------------------------
+  
+  5.2-8 GeneralizedSrivastavaCode
+  
+  > GeneralizedSrivastavaCode( a, w, z[, t], F ) _____________________function
+  
+  GeneralizedSrivastavaCode   returns   a  generalized  Srivastava  code  with
+  parameters  a, w, z, t. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of
+  n+s  distinct  elements  of  F=GF(q^m),  z  is a list of length n of nonzero
+  elements  of GF(q^m). The parameter t determines the designed distance: d >=
+  st + 1. The check matrix of this code is the form
+  
+  
+       H=([\frac{z_i}{(a_i - w_j)^k}]),
+  
+  
+  1<=  k<=  t, where [...] is as in VerticalConversionFieldMat (7.3-9). We use
+  this  definition  of  H  to  define  the  code.  The default for t is 1. The
+  original  Srivastava  codes  (see SrivastavaCode (5.2-9)) are a special case
+  t=1, z_i=a_i^mu, for some mu.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+    gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+    gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+    a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 
+  ------------------------------------------------------------------
+  
+  5.2-9 SrivastavaCode
+  
+  > SrivastavaCode( a, w[, mu], F ) __________________________________function
+  
+  SrivastavaCode   returns  a  Srivastava  code  with  parameters  a,  w  (and
+  optionally  mu).  a  =  a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s
+  distinct elements of F=GF(q^m). The default for mu is 1. The Srivastava code
+  is a generalized Srivastava code, in which z_i = a_i^mu for some mu and t=1.
+  
+  J.  N.  Srivastava  introduced  this  code  in 1967, though his work was not
+  published.  See  Helgert  [Hel72] for more details on the properties of this
+  code.  Related  reference: G. Roelofsen, On Goppa and Generalized Srivastava
+  Codes PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology,
+  the Netherlands, 1982.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := AsSSortedList( GF(11) ){[2..8]};;
+    gap> w := AsSSortedList( GF(11) ){[9..10]};;
+    gap> C := SrivastavaCode( a, w, 2, GF(11) );
+    a linear [7,5,3]2 Srivastava code over GF(11)
+    gap> IsMDSCode( C );
+    true    # Always true if F is a prime field 
+  ------------------------------------------------------------------
+  
+  5.2-10 CordaroWagnerCode
+  
+  > CordaroWagnerCode( n ) ___________________________________________function
+  
+  CordaroWagnerCode  returns  a  binary Cordaro-Wagner code. This is a code of
+  length  n  and dimension 2 having the best possible minimum distance d. This
+  code   is   just   a  little  bit  less  trivial  than  RepetitionCode  (see
+  RepetitionCode (5.5-13)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := CordaroWagnerCode( 11 );
+    a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
+    gap> AsSSortedList(C);                 
+    [ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
+      [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]
+  ------------------------------------------------------------------
+  
+  5.2-11 FerreroDesignCode
+  
+  > FerreroDesignCode( P, m ) ________________________________________function
+  
+  Requires the GAP package SONATA
+  
+  A  group  K  together  with  a  group  of  automorphism H of K such that the
+  semidirect  product  KH  is  a Frobenius group with complement H is called a
+  Ferrero  pair  (K,  H) in SONATA. Take a Frobenius (G,+) group with kernel K
+  and complement H. Consider the design D with point set K and block set a^H +
+  b  |  a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation
+  by  elements of H. Every planar near-ring design of type "*" can be obtained
+  in  this  way from groups. These designs (from a Frobenius kernel of order v
+  and  a  Frobenius  complement  of order k) have v(v-1)/k distinct blocks and
+  they  are all of size k. Moreover each of the v points occurs in exactly v-1
+  distinct blocks. Hence the rows and the columns of the incidence matrix M of
+  the design are always of constant weight.
+  
+  FerreroDesignCode  constructs  binary  linear code arising from the incdence
+  matrix   of  a  design  associated  to  a  "Ferrero  pair"  arising  from  a
+  fixed-point-free (fpf) automorphism groups and Frobenius group.
+  
+  INPUT:  P  is a list of prime powers describing an abelian group G. m > 0 is
+  an  integer  such  that  G admits a cyclic fpf automorphism group of size m.
+  This  means that for all q = p^k in P, OrderMod(p, m) must divide q (see the
+  SONATA documentation for FpfAutomorphismGroupsCyclic).
+  
+  OUTPUT:  The  binary  linear  code  whose  generator matrix is the incidence
+  matrix  of  a  design  associated  to  a  "Ferrero  pair"  arising  from the
+  fixed-point-free  (fpf)  automorphism group of G. The pair (H,K) is called a
+  Ferraro  pair  and  the  semidirect  product  KH  is  a Frobenius group with
+  complement H.
+  
+  AUTHORS: Peter Mayr and David Joyner
+  
+  ---------------------------  Example  ----------------------------
+    gap> G:=AbelianGroup([5,5] );
+     [ pc group of size 25 with 2 generators ]
+    gap> FpfAutomorphismGroupsMaxSize( G );
+    [ 24, 2 ]
+    gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+    [ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
+      [ pc group of size 25 with 2 generators ] ]
+    gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+     [ a 2 - ( 25, 3, 2 ) nearring generated design ]
+    gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+    25
+    200
+    gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
+    a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+    gap> MinimumDistance(C1);
+    24
+    gap> C2:=FerreroDesignCode( [5,5],3);
+    a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+    gap> C1=C2;
+    true
+    
+  ------------------------------------------------------------------
+  
+  5.2-12 RandomLinearCode
+  
+  > RandomLinearCode( n, k, F ) ______________________________________function
+  
+  RandomLinearCode  returns a random linear code with word length n, dimension
+  k  over  field F. The method used is to first construct a kx n matrix of the
+  block  form  (I,A),  where  I  is a kx k identity matrix and A is a kx (n-k)
+  matrix constructed using Random(F) repeatedly. Then the columns are permuted
+  using a randomly selected element of SymmetricGroup(n).
+  
+  To  create  a  random  unrestricted  code,  use  RandomCode  (see RandomCode
+  (5.1-5)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := RandomLinearCode( 15, 4, GF(3) );
+    a  [15,4,?] randomly generated code over GF(3)
+    gap> Display(C);
+    a linear [15,4,1..6]6..10 random linear code over GF(3)
+  ------------------------------------------------------------------
+  
+  The  method GUAVA chooses to output the result of a RandomLinearCode command
+  is  different  than  other  codes.  For  example,  the bounds on the minimum
+  distance  is not displayed. Howeer, you can use the Display command to print
+  this  information. This new display method was added in version 1.9 to speed
+  up  the  command  (if n is about 80 and k about 40, for example, the time it
+  took  to look up and/or calculate the bounds on the minimum distance was too
+  long).
+  
+  5.2-13 OptimalityCode
+  
+  > OptimalityCode( C ) ______________________________________________function
+  
+  OptimalityCode returns the difference between the smallest known upper bound
+  and  the  actual  size  of  the  code.  Note  that the value of the function
+  UpperBound  is  not  always  equal to the actual upper bound A(n,d) thus the
+  result may not be equal to 0 even if the code is optimal!
+  
+  OptimalityLinearCode is similar but applies only to linear codes.
+  
+  5.2-14 BestKnownLinearCode
+  
+  > BestKnownLinearCode( n, k, F ) ___________________________________function
+  
+  BestKnownLinearCode  returns  the best known (as of 11 May 2006) linear code
+  of  length  n,  dimension  k  over  field  F.  The  function uses the tables
+  described in section BoundsMinimumDistance (7.1-13) to construct this code.
+  
+  This command can also be called using the syntax BestKnownLinearCode( rec ),
+  where  rec must be a record containing the fields `lowerBound', `upperBound'
+  and  `construction'.  It  uses  the information in this field to construct a
+  code.   This   form   is  meant  to  be  used  together  with  the  function
+  BoundsMinimumDistance  (see  BoundsMinimumDistance  (7.1-13)), if the bounds
+  are already calculated.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+    a linear [23,12,7]3 punctured code
+    gap> C1 = BinaryGolayCode();
+    false     # it's constructed differently
+    gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+    a linear [23,12,7]3 punctured code
+    gap> G1 := MutableCopyMat(GeneratorMat(C1));;
+    gap> PutStandardForm(G1);
+    ()
+    gap> Display(G1);
+     1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+     . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+     . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+     . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+     . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+     . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+     . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+     . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+     . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+     . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+     . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+     . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+    gap> C2 := BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> G2 := MutableCopyMat(GeneratorMat(C2));;
+    gap> PutStandardForm(G2);
+    ()
+    gap> Display(G2);
+     1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+     . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
+     . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+     . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
+     . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
+     . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
+     . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+     . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+     . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+     . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
+     . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
+     . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+    ## Despite their generator matrices are different, they are equivalent codes, see below.
+    gap> IsEquivalent(C1,C2);
+    true
+    gap> CodeIsomorphism(C1,C2);
+    (4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
+    gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+    a linear [81,77,3]2..3 shortened code of
+    a linear [85,81,3]1 Hamming (4,4) code over GF(4)
+    gap> C:=BestKnownLinearCode(174,72);
+    a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
+    gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+    rec( n := 81, k := 77, q := 4, 
+      references := rec( Ham := [ "%T this reference is unknown, for more info", 
+              "%T contact A.E. Brouwer (aeb at cwi.nl)" ], 
+          cap := [ "%T this reference is unknown, for more info", 
+              "%T contact A.E. Brouwer (aeb at cwi.nl)" ] ), 
+      construction := [ (Operation "ShortenedCode"), 
+          [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
+      lowerBound := 3, 
+      lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
+          "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
+      upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
+          "Ub(18,14)=3, reference: cap" ] )
+    gap> C := BestKnownLinearCode( bounds );
+    a linear [81,77,3]2..3 shortened code
+    gap> C = BestKnownLinearCode(81, 77, GF(4) );
+    true
+  ------------------------------------------------------------------
+  
+  
+  5.3 Gabidulin Codes
+  
+  These  five  binary,  linear codes are derived from an article by Gabidulin,
+  Davydov  and  Tombak [GDT91]. All these codes are defined by check matrices.
+  Exact  definitions  can  be  found  in  the article. The Gabidulin code, the
+  enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged
+  Tombak  code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the
+  article.
+  
+  Like the Hamming codes, these codes have fixed minimum distance and covering
+  radius, but can be arbitrarily long.
+  
+  5.3-1 GabidulinCode
+  
+  > GabidulinCode( m, w1, w2 ) _______________________________________function
+  
+  GabidulinCode  yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum
+  distance 3 and covering radius 2. w1 and w2 should be elements of GF(2^m-2).
+  
+  5.3-2 EnlargedGabidulinCode
+  
+  > EnlargedGabidulinCode( m, w1, w2, e ) ____________________________function
+  
+  EnlargedGabidulinCode  yields  a  code  of length 7. 2^m-2-2, redundancy 2m,
+  minimum  distance  3  and  covering  radius  2.  w1  and  w2 are elements of
+  GF(2^m-2). e is an element of GF(2^m).
+  
+  5.3-3 DavydovCode
+  
+  > DavydovCode( r, v, ei, ej ) ______________________________________function
+  
+  DavydovCode  yields  a code of length 2^v + 2^r-v - 3, redundancy r, minimum
+  distance  4 and covering radius 2. v is an integer between 2 and r-2. ei and
+  ej are elements of GF(2^v) and GF(2^r-v), respectively.
+  
+  5.3-4 TombakCode
+  
+  > TombakCode( m, e, beta, gamma, w1, w2 ) __________________________function
+  
+  TombakCode  yields  a  code of length 15 * 2^m-3 - 3, redundancy 2m, minimum
+  distance 4 and covering radius 2. e is an element of GF(2^m). beta and gamma
+  are elements of GF(2^m-1). w1 and w2 are elements of GF(2^m-3).
+  
+  5.3-5 EnlargedTombakCode
+  
+  > EnlargedTombakCode( m, e, beta, gamma, w1, w2, u ) _______________function
+  
+  EnlargedTombakCode  yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1,
+  minimum  distance 4 and covering radius 2. The parameters m, e, beta, gamma,
+  w1 and w2 are defined as in TombakCode. u is an element of GF(2^m-1).
+  
+  ---------------------------  Example  ----------------------------
+    gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+    a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
+    gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+    a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
+    gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+    a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
+    gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+    a linear [57,47,4]2 Tombak code (m=5) over GF(2)
+    gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
+    > Z(4)^0, Z(4)^0, Z(32)^23 );
+    a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)
+  ------------------------------------------------------------------
+  
+  
+  5.4 Golay Codes
+  
+  "  The  Golay  code  is  probably  the  most important of all codes for both
+  practical  and  theoretical  reasons.  "  ([MS83],  pg.  64). Though born in
+  Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most
+  of  his  career.  For more information on his life, see his obit in the June
+  1990 IEEE Information Society Newsletter.
+  
+  5.4-1 BinaryGolayCode
+  
+  > BinaryGolayCode(  ) ______________________________________________function
+  
+  BinaryGolayCode  returns  a  binary  Golay code. This is a perfect [23,12,7]
+  code.    It    is    also    cyclic,    and    has    generator   polynomial
+  g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11.  Extending it results in an extended Golay
+  code  (see  ExtendedBinaryGolayCode (5.4-2)). There's also the ternary Golay
+  code (see TernaryGolayCode (5.4-3)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+    true
+    gap> IsPerfectCode(C);
+    true 
+    gap> IsCyclicCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  5.4-2 ExtendedBinaryGolayCode
+  
+  > ExtendedBinaryGolayCode(  ) ______________________________________function
+  
+  ExtendedBinaryGolayCode  returns  an  extended  binary Golay code. This is a
+  [24,12,8]  code. Puncturing in the last position results in a perfect binary
+  Golay code (see BinaryGolayCode (5.4-1)). The code is self-dual.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ExtendedBinaryGolayCode();
+    a linear [24,12,8]4 extended binary Golay code over GF(2)
+    gap> IsSelfDualCode(C);
+    true
+    gap> P := PuncturedCode(C);
+    a linear [23,12,7]3 punctured code
+    gap> P = BinaryGolayCode();
+    true 
+    gap> IsCyclicCode(C);
+    false
+    
+  ------------------------------------------------------------------
+  
+  5.4-3 TernaryGolayCode
+  
+  > TernaryGolayCode(  ) _____________________________________________function
+  
+  TernaryGolayCode  returns  a  ternary Golay code. This is a perfect [11,6,5]
+  code.    It    is    also    cyclic,    and    has    generator   polynomial
+  g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see
+  ExtendedTernaryGolayCode  (5.4-4)).  There's also the binary Golay code (see
+  BinaryGolayCode (5.4-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=TernaryGolayCode();
+    a cyclic [11,6,5]2 ternary Golay code over GF(3)
+    gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+    true 
+    gap> IsCyclicCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  5.4-4 ExtendedTernaryGolayCode
+  
+  > ExtendedTernaryGolayCode(  ) _____________________________________function
+  
+  ExtendedTernaryGolayCode  returns  an extended ternary Golay code. This is a
+  [12,6,6]  code. Puncturing this code results in a perfect ternary Golay code
+  (see TernaryGolayCode (5.4-3)). The code is self-dual.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ExtendedTernaryGolayCode();
+    a linear [12,6,6]3 extended ternary Golay code over GF(3)
+    gap> IsSelfDualCode(C);
+    true
+    gap> P := PuncturedCode(C);
+    a linear [11,6,5]2 punctured code
+    gap> P = TernaryGolayCode();
+    true 
+    gap> IsCyclicCode(C);
+    false
+  ------------------------------------------------------------------
+  
+  
+  5.5 Generating Cyclic Codes
+  
+  The  elements  of  a  cyclic  code  C  are  all multiples of a ('generator')
+  polynomial g(x), where calculations are carried out modulo x^n-1. Therefore,
+  as  polynomials  in x, the elements always have degree less than n. A cyclic
+  code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The
+  unique  monic  polynomial  of  least  degree  that generates C is called the
+  generator polynomial of C. It is a divisor of the polynomial x^n-1.
+  
+  The  check  polynomial is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore
+  it is also a divisor of x^n-1. The check polynomial has the property that
+  
+  
+       c(x)h(x) \equiv 0 \pmod{x^n-1},
+  
+  
+  for every codeword c(x)in C.
+  
+  The  first  two functions described below generate cyclic codes from a given
+  generator  or  check  polynomial.  All cyclic codes can be constructed using
+  these functions.
+  
+  Two  of  the  Golay  codes already described are cyclic (see BinaryGolayCode
+  (5.4-1)  and  TernaryGolayCode (5.4-3)). For example, the GUAVA record for a
+  binary Golay code contains the generator polynomial:
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := BinaryGolayCode();
+    a cyclic [23,12,7]3 binary Golay code over GF(2)
+    gap> NamesOfComponents(C);
+    [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+      "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
+      "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
+      "boundsCoveringRadius", "MinimumWeightOfGenerators", 
+      "UpperBoundOptimalMinimumDistance" ]
+    gap> C!.GeneratorPol;
+    x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0
+  ------------------------------------------------------------------
+  
+  Then  functions that generate cyclic codes from a prescribed set of roots of
+  the  generator  polynomial  are  described,  including  the  BCH  codes (see
+  RootsCode  (5.5-3),  BCHCode  (5.5-4),  ReedSolomonCode  (5.5-5)  and QRCode
+  (5.5-7)).
+  
+  Finally we describe the trivial codes (see WholeSpaceCode (5.5-11), NullCode
+  (5.5-12),  RepetitionCode (5.5-13)), and the command CyclicCodes which lists
+  all cyclic codes (CyclicCodes (5.5-14)).
+  
+  5.5-1 GeneratorPolCode
+  
+  > GeneratorPolCode( g, n[, name], F ) ______________________________function
+  
+  GeneratorPolCode  creates  a cyclic code with a generator polynomial g, word
+  length n, over F. name can contain a short description of the code.
+  
+  If g is not a divisor of x^n-1, it cannot be a generator polynomial. In that
+  case,  a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the
+  greatest common divisor of g and x^n-1. This is a valid generator polynomial
+  that generates the ideal (g). See Generating Cyclic Codes (5.5).
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
+    Z(2)^0+x^2
+    gap> C1 := GeneratorPolCode(P, 7, GF(2));
+    a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+    gap> GeneratorPol( C1 );
+    Z(2)^0+x
+    gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+    a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+    gap> GeneratorPol( C2 );
+    Z(2)^0+x
+  ------------------------------------------------------------------
+  
+  5.5-2 CheckPolCode
+  
+  > CheckPolCode( h, n[, name], F ) __________________________________function
+  
+  CheckPolCode creates a cyclic code with a check polynomial h, word length n,
+  over F. name can contain a short description of the code (as a string).
+  
+  If  h  is  not  a divisor of x^n-1, it cannot be a check polynomial. In that
+  case,  a  code  is  created  with check polynomial gcd( h, x^n-1 ), i.e. the
+  greatest  common  divisor  of  h and x^n-1. This is a valid check polynomial
+  that yields the same elements as the ideal (h). See 5.5.
+  
+  ---------------------------  Example  ----------------------------
+    gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
+    -Z(3)^0+x_1^2
+    gap> H := CheckPolCode(P, 7, GF(3));
+    a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
+    gap> CheckPol(H);
+    -Z(3)^0+x_1
+    gap> Gcd(P, X(GF(3))^7-1);
+    -Z(3)^0+x_1
+  ------------------------------------------------------------------
+  
+  5.5-3 RootsCode
+  
+  > RootsCode( n, list ) _____________________________________________function
+  
+  This  is  the  generalization of the BCH, Reed-Solomon and quadratic residue
+  codes (see BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)). The
+  user  can  give  a  length  of the code n and a prescribed set of zeros. The
+  argument  list  must  be  a valid list of primitive n^th roots of unity in a
+  splitting  field  GF(q^m).  The resulting code will be over the field GF(q).
+  The function will return the largest possible cyclic code for which the list
+  list  is a subset of the roots of the code. From this list, GUAVA calculates
+  the entire set of roots.
+  
+  This  command can also be called with the syntax RootsCode( n, list, q ). In
+  this  second form, the second argument is a list of integers, ranging from 0
+  to  n-1.  The  resulting code will be over a field GF(q). GUAVA calculates a
+  primitive  n^th  root  of  unity, alpha, in the extension field of GF(q). It
+  uses  the  set  of  the  powers  of alpha in the list as a prescribed set of
+  zeros.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := PrimitiveUnityRoot( 3, 14 );
+    Z(3^6)^52
+    gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+    a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
+    gap> MinimumDistance( C1 );
+    4
+    gap> b := PrimitiveUnityRoot( 2, 15 );
+    Z(2^4)
+    gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+    a cyclic [15,7,5]3..5 code defined by roots over GF(2)
+    gap> C2 = BCHCode( 15, 5, GF(2) );
+    true 
+    C3 := RootsCode( 4, [ 1, 2 ], 5 );
+    RootsOfCode( C3 );
+    C3 = ReedSolomonCode( 4, 3 );
+    
+  ------------------------------------------------------------------
+  
+  5.5-4 BCHCode
+  
+  > BCHCode( n[, b], delta, F ) ______________________________________function
+  
+  The function BCHCode returns a 'Bose-Chaudhuri-Hockenghem code' (or BCH code
+  for  short). This is the largest possible cyclic code of length n over field
+  F, whose generator polynomial has zeros
+  
+  
+       a^{b},a^{b+1}, ..., a^{b+delta-2},
+  
+  
+  where  a is a primitive n^th root of unity in the splitting field GF(q^m), b
+  is  an  integer  0<=  b<=  n-delta+1  and m is the multiplicative order of q
+  modulo   n.  (The  integers  b,...,b+delta-2  typically  lie  in  the  range
+  1,...,n-1.)  Default  value for b is 1, though the algorithm allows b=0. The
+  length  n  of the code and the size q of the field must be relatively prime.
+  The  generator  polynomial  is  equal  to  the  least common multiple of the
+  minimal polynomials of
+  
+  
+       a^{b}, a^{b+1}, ..., a^{b+delta-2}.
+  
+  
+  The  set  of zeroes of the generator polynomial is equal to the union of the
+  sets
+  
+  
+       \{a^x\ |\ x \in C_k\},
+  
+  
+  where  C_k  is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2
+  (see CyclotomicCosets (7.5-12)).
+  
+  Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes),
+  and  n=q^m-1  (known as 'primitive' BCH codes). GUAVA calculates the largest
+  value  of  d  for which the BCH code with designed distance d coincides with
+  the  BCH  code  with  designed distance delta. This distance d is called the
+  Bose  distance of the code. The true minimum distance of the code is greater
+  than or equal to the Bose distance.
+  
+  Printed  are the designed distance (to be precise, the Bose distance) d, and
+  the starting power b.
+  
+  The  Sugiyama  decoding  algorithm  has  been implemented for this code (see
+  Decode (4.10-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := BCHCode( 15, 3, 5, GF(2) );
+    a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+    gap> DesignedDistance( C1 );
+    7
+    gap> C2 := BCHCode( 23, 2, GF(2) );
+    a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
+    gap> DesignedDistance( C2 );       
+    5
+    gap> MinimumDistance(C2);
+    7 
+  ------------------------------------------------------------------
+  
+  See RootsCode (5.5-3) for a more general construction.
+  
+  5.5-5 ReedSolomonCode
+  
+  > ReedSolomonCode( n, d ) __________________________________________function
+  
+  ReedSolomonCode returns a 'Reed-Solomon code' of length n, designed distance
+  d.  This  code  is  a  primitive narrow-sense BCH code over the field GF(q),
+  where  q=n+1.  The  dimension  of  an  RS  code  is  n-d+1. According to the
+  Singleton  bound  (see  UpperBoundSingleton (7.1-1)) the dimension cannot be
+  greater  than this, so the true minimum distance of an RS code is equal to d
+  and the code is maximum distance separable (see IsMDSCode (4.3-7)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ReedSolomonCode( 3, 2 );
+    a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
+    gap> IsCyclicCode(C1);
+    true
+    gap> C2 := ReedSolomonCode( 4, 3 );
+    a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
+    gap> RootsOfCode( C2 );
+    [ Z(5), Z(5)^2 ]
+    gap> IsMDSCode(C2);
+    true 
+  ------------------------------------------------------------------
+  
+  See GeneralizedReedSolomonCode (5.6-2) for a more general construction.
+  
+  5.5-6 ExtendedReedSolomonCode
+  
+  > ExtendedReedSolomonCode( n, d ) __________________________________function
+  
+  ExtendedReedSolomonCode  creates  a  Reed-Solomon  code  of  length n-1 with
+  designed  distance d-1 and then returns the code which is extended by adding
+  an overall parity-check symbol. The motivation for creating this function is
+  calling  ExtendedCode  (6.1-1)  function  over a Reed-Solomon code will take
+  considerably long time.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := ExtendedReedSolomonCode(17, 13);
+    a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
+    gap> IsMDSCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  5.5-7 QRCode
+  
+  > QRCode( n, F ) ___________________________________________________function
+  
+  QRCode  returns a quadratic residue code. If F is a field GF(q), then q must
+  be  a  quadratic  residue modulo n. That is, an x exists with x^2 = q mod n.
+  Both  n and q must be primes. Its generator polynomial is the product of the
+  polynomials  x-a^i. a is a primitive n^th root of unity, and i is an integer
+  in the set of quadratic residues modulo n.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := QRCode( 7, GF(2) );
+    a cyclic [7,4,3]1 quadratic residue code over GF(2)
+    gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+    true
+    gap> IsCyclicCode(C1);
+    true
+    gap> IsCyclicCode(HammingCode( 3, GF(2) ));
+    false
+    gap> C2 := QRCode( 11, GF(3) );
+    a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
+    gap> C2 = TernaryGolayCode();
+    true 
+    gap> Q1 := QRCode( 7, GF(2));
+    a cyclic [7,4,3]1 quadratic residue code over GF(2)
+    gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
+    Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
+    [ 168, 42 ]
+  ------------------------------------------------------------------
+  
+  5.5-8 QQRCodeNC
+  
+  > QQRCodeNC( p ) ___________________________________________________function
+  
+  QQRCodeNC  is  the  same  as QQRCode, except that it uses GeneratorMatCodeNC
+  instead of GeneratorMatCode.
+  
+  5.5-9 QQRCode
+  
+  > QQRCode( p ) _____________________________________________________function
+  
+  QQRCode  returns  a  quasi-quadratic residue code, as defined by Proposition
+  2.2  in  Bazzi-Mittel [BMd)]. The parameter p must be a prime. Its generator
+  matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top
+  row  is  (0,x_1,...,x_p-1),  where  x_i=1  if  and  only if i is a quadratic
+  residue   mod  p,  and  N  is  a  px  circulant  matrix  whose  top  row  is
+  (0,y_1,...,y_p-1),  where  x_i+y_i=1 for all i. (In fact, this matrix can be
+  recovered as the component DoublyCirculant of the code.)
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := QQRCode( 7);
+    a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
+    gap> G1:=GeneratorMat(C1);;
+    gap> Display(G1);
+     . 1 1 . 1 . . . . . 1 . 1 1
+     1 . 1 1 1 . . . . 1 1 1 . 1
+     . . . 1 1 . 1 . 1 1 . . . 1
+     . . 1 . 1 1 1 1 . 1 . . 1 1
+     . . . . . . . 1 . . 1 1 1 .
+     . . . . . . . . . 1 1 1 . 1
+     . . . . . . . . 1 . . 1 1 1
+    gap> Display(C1!.DoublyCirculant);
+     . 1 1 . 1 . . . . . 1 . 1 1
+     1 1 . 1 . . . . . 1 . 1 1 .
+     1 . 1 . . . 1 . 1 . 1 1 . .
+     . 1 . . . 1 1 1 . 1 1 . . .
+     1 . . . 1 1 . . 1 1 . . . 1
+     . . . 1 1 . 1 1 1 . . . 1 .
+     . . 1 1 . 1 . 1 . . . 1 . 1
+    gap> MinimumDistance(C1);
+    4
+    gap> C2 := QQRCode( 29); MinimumDistance(C2);
+    a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
+    12
+    gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+    [ permutation group of size 812 with 4 generators ]
+    [ 812, 7 ]
+  ------------------------------------------------------------------
+  
+  5.5-10 FireCode
+  
+  > FireCode( g, b ) _________________________________________________function
+  
+  FireCode  constructs  a  (binary)  Fire code. g is a primitive polynomial of
+  degree  m,  and a factor of x^r-1. b an integer 0 <= b <= m not divisible by
+  r,  that  determines  the  burst  length of a single error burst that can be
+  corrected.  The  argument  g  can be a polynomial with base ring GF(2), or a
+  list  of  coefficients  in  GF(2).  The  generator polynomial of the code is
+  defined as the product of g and x^2b-1+1.
+  
+  Here  is  the  general  definition  of 'Fire code', named after P. Fire, who
+  introduced  these  codes  in 1959 in order to correct burst errors. First, a
+  definition.  If  F=GF(q)  and  fin  F[x]  then  we  say  f  has  order  e if
+  f(x)|(x^e-1).  A Fire code is a cyclic code over F with generator polynomial
+  g(x)=  (x^2t-1-1)p(x),  where  p(x)  does  not divide x^2t-1-1 and satisfies
+  deg(p(x))>=  t.  The  length of such a code is the order of g(x). Non-binary
+  Fire codes have not been implemented.
+  
+  .
+  
+  ---------------------------  Example  ----------------------------
+    gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+    Z(2)^0+x^2+x^3
+    gap> Factors( G );
+    [ Z(2)^0+x^2+x^3 ]
+    gap> C := FireCode( G, 3 );
+    a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
+    gap> MinimumDistance( C );
+    4     # Still it can correct bursts of length 3 
+  ------------------------------------------------------------------
+  
+  5.5-11 WholeSpaceCode
+  
+  > WholeSpaceCode( n, F ) ___________________________________________function
+  
+  WholeSpaceCode  returns the cyclic whole space code of length n over F. This
+  code  consists  of all polynomials of degree less than n and coefficients in
+  F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := WholeSpaceCode( 5, GF(3) );
+    a cyclic [5,5,1]0 whole space code over GF(3)
+  ------------------------------------------------------------------
+  
+  5.5-12 NullCode
+  
+  > NullCode( n, F ) _________________________________________________function
+  
+  NullCode  returns  the  zero-dimensional nullcode with length n over F. This
+  code has only one word: the all zero word. It is cyclic though!
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := NullCode( 5, GF(3) );
+    a cyclic [5,0,5]5 nullcode over GF(3)
+    gap> AsSSortedList( C );
+    [ [ 0 0 0 0 0 ] ]
+  ------------------------------------------------------------------
+  
+  5.5-13 RepetitionCode
+  
+  > RepetitionCode( n, F ) ___________________________________________function
+  
+  RepetitionCode  returns  the  cyclic repetition code of length n over F. The
+  code  has  as  many  elements  as  F,  because  each  codeword consists of a
+  repetition of one of these elements.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := RepetitionCode( 3, GF(5) );
+    a cyclic [3,1,3]2 repetition code over GF(5)
+    gap> AsSSortedList( C );
+    [ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
+    gap> IsPerfectCode( C );
+    false
+    gap> IsMDSCode( C );
+    true 
+  ------------------------------------------------------------------
+  
+  5.5-14 CyclicCodes
+  
+  > CyclicCodes( n, F ) ______________________________________________function
+  
+  CyclicCodes  returns  a  list  of  all  cyclic  codes of length n over F. It
+  constructs  all  possible  generator  polynomials from the factors of x^n-1.
+  Each  combination  of  these  factors  yields  a  generator polynomial after
+  multiplication.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CyclicCodes(3,GF(3));
+    [ a cyclic [3,3,1]0 enumerated code over GF(3), 
+    a cyclic [3,2,1..2]1 enumerated code over GF(3), 
+    a cyclic [3,1,3]2 enumerated code over GF(3), 
+    a cyclic [3,0,3]3 enumerated code over GF(3) ]
+  ------------------------------------------------------------------
+  
+  5.5-15 NrCyclicCodes
+  
+  > NrCyclicCodes( n, F ) ____________________________________________function
+  
+  The function NrCyclicCodes calculates the number of cyclic codes of length n
+  over field F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> NrCyclicCodes( 23, GF(2) );
+    8
+    gap> codelist := CyclicCodes( 23, GF(2) );
+    [ a cyclic [23,23,1]0 enumerated code over GF(2), 
+      a cyclic [23,22,1..2]1 enumerated code over GF(2), 
+      a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+      a cyclic [23,0,23]23 enumerated code over GF(2), 
+      a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+      a cyclic [23,12,1..7]3 enumerated code over GF(2), 
+      a cyclic [23,1,23]11 enumerated code over GF(2), 
+      a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
+    gap> BinaryGolayCode() in codelist;
+    true
+    gap> RepetitionCode( 23, GF(2) ) in codelist;
+    true
+    gap> CordaroWagnerCode( 23 ) in codelist;
+    false    # This code is not cyclic 
+  ------------------------------------------------------------------
+  
+  5.5-16 QuasiCyclicCode
+  
+  > QuasiCyclicCode( G, s, F ) _______________________________________function
+  
+  QuasiCyclicCode( G, k, F ) generates a rate 1/m quasi-cyclic code over field
+  F.  The input G is a list of univariate polynomials and m is the cardinality
+  of  this  list.  Note  that m must be at least 2. The input s is the size of
+  each  circulant and it may not necessarily be the same as the code dimension
+  k, i.e. k le s.
+  
+  There  also  exists  another version, QuasiCyclicCode( G, s ) which produces
+  quasi-cyclic  codes  over  F_2  only.  Here  the  parameter s holds the same
+  definition  and  the input G is a list of integers, where each integer is an
+  octal representation of a binary univariate polynomial.
+  
+  ---------------------------  Example  ----------------------------
+    gap> #
+    gap> # This example show the case for k = s
+    gap> #
+    gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+    Z(2)^0
+    gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+    x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
+    gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+    x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
+    gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+    x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
+    Z(2)^0
+    gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+    x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
+    gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+    a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
+    gap> MinimumDistance(C);
+    29
+    gap> Display(C);
+    a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
+    gap> #
+    gap> # This example show the case for k < s
+    gap> #
+    gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+    -x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
+    gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+    x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
+    gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+    x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
+    gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+    a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
+    gap> MinimumDistance(C);
+    34
+    gap> Display(C);
+    a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
+    gap> #
+    gap> # This example show the binary case using octal representation
+    gap> #
+    gap> L1 := 001;;   # 0 000 001
+    gap> L2 := 013;;   # 0 001 011
+    gap> L3 := 015;;   # 0 001 101
+    gap> L4 := 077;;   # 0 111 111
+    gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+    a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
+    gap> MinimumDistance(C);
+    12
+    gap> Display(C);
+    a linear [28,7,12]8..14 quasi-cyclic code over GF(2)
+  ------------------------------------------------------------------
+  
+  5.5-17 CyclicMDSCode
+  
+  > CyclicMDSCode( q, m, k ) _________________________________________function
+  
+  Given  the input parameters q, m and k, this function returns a [q^m + 1, k,
+  q^m  -  k  + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k
+  can be used, otherwise only odd value of k is accepted.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=CyclicMDSCode(2,6,24);
+    a cyclic [65,24,42]31..41 MDS code over GF(64)
+    gap> IsMDSCode(C);
+    true
+    gap> C:=CyclicMDSCode(5,3,77);
+    a cyclic [126,77,50]35..49 MDS code over GF(125)
+    gap> IsMDSCode(C);
+    true
+    gap> C:=CyclicMDSCode(3,3,25);
+    a cyclic [28,25,4]2..3 MDS code over GF(27)
+    gap> GeneratorPol(C);
+    x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
+    gap>
+  ------------------------------------------------------------------
+  
+  5.5-18 FourNegacirculantSelfDualCode
+  
+  > FourNegacirculantSelfDualCode( ax, bx, k ) _______________________function
+  
+  A  four-negacirculant  self-dual  code  has  a generator matrix G of the the
+  following form
+  
+  
+      -                    -
+      |        |  A  |  B  |
+  G = |  I_2k  |-----+-----|
+      |        | -B^T| A^T |
+      -                    -
+  		  where  AA^T  +  BB^T  =  -I_k  and  A,  B and their transposed are all k x k
+  negacirculant  matrices.  The  generator  matrix  G  returns  a [2k, k, d]_q
+  self-dual  code  over  GF(q). For discussion on four-negacirculant self-dual
+  codes, refer to [HHKK07].
+  
+  The  input  parameters  ax and bx are the defining polynomials over GF(q) of
+  negacirculant  matrices  A  and  B respectively. The last parameter k is the
+  dimension of the code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
+    -x_1^4-x_1+Z(3)^0
+    gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
+    x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
+    gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+    gap> MinimumDistance(C);;
+    gap> CoveringRadius(C);;
+    gap> IsSelfDualCode(C);
+    true
+    gap> Display(C);
+    a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
+    gap> Display( GeneratorMat(C) );
+     1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
+     . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
+     . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
+     . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
+     . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
+     . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
+     . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
+     . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
+     . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
+     . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
+     . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
+     . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
+     . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
+     . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
+    gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
+    x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
+    gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
+    Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
+    gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+    a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
+    gap> IsSelfDualCode(C);
+    true
+  ------------------------------------------------------------------
+  
+  5.5-19 FourNegacirculantSelfDualCodeNC
+  
+  > FourNegacirculantSelfDualCodeNC( ax, bx, k ) _____________________function
+  
+  This  function  is  the  same  as FourNegacirculantSelfDualCode, except this
+  version  is faster as it does not estimate the minimum distance and covering
+  radius of the code.
+  
+  
+  5.6 Evaluation Codes
+  
+  5.6-1 EvaluationCode
+  
+  > EvaluationCode( P, L, R ) ________________________________________function
+  
+  Input:  F  is  a  finite  field,  L  is  a  list  of  rational  functions in
+  R=F[x_1,...,x_r],  P  is  a  list  of  n  points  in F^r at which all of the
+  functions in L are defined.
+  Output: The 'evaluation code' C, which is the image of the evalation map
+  
+  
+       Eval_P:span(L)\rightarrow F^n,
+  
+  
+  given  by  flongmapsto  (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L.
+  The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P.
+  
+  This command returns a "record" object C with several extra components (type
+  NamesOfComponents(C) to see them all): C!.EvaluationMat (not the same as the
+  generator matrix in general), C!.points (namely P), C!.basis (namely L), and
+  C!.ring (namely R).
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R := PolynomialRing(F,2);;
+    gap> indets := IndeterminatesOfPolynomialRing(R);;
+    gap> x:=indets[1];; y:=indets[2];;
+    gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+    gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+       [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+       [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+       [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+    gap> C:=EvaluationCode(Pts,L,R);
+    a linear [11,8,1..3]2..3  evaluation code over GF(11)
+    gap> MinimumDistance(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  5.6-2 GeneralizedReedSolomonCode
+  
+  > GeneralizedReedSolomonCode( P, k, R ) ____________________________function
+  
+  Input:  R=F[x],  where  F is a finite field, k is a positive integer, P is a
+  list of n points in F.
+  Output: The C which is the image of the evaluation map
+  
+  
+       Eval_P:F[x]_k\rightarrow F^n,
+  
+  
+  given  by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f
+  ranges over the space F[x]_k of all polynomials of degree less than k.
+  
+  This command returns a "record" object C with several extra components (type
+  NamesOfComponents(C)  to  see  them  all):  C!.points  (namely P), C!.degree
+  (namely k), and C!.ring (namely R).
+  
+  This code can be decoded using Decodeword, which applies the special decoder
+  method (the interpolation method), or using GeneralizedReedSolomonDecoderGao
+  which  applies  an algorithm of S. Gao (see GeneralizedReedSolomonDecoderGao
+  (4.10-3)).  This  code  has  a  special  decoder record which implements the
+  interpolation  algorithm  described  in  section 5.2 of Justesen and Hoholdt
+  [JH04]. See Decode (4.10-1) and Decodeword (4.10-2) for more details.
+  
+  The     weighted     version     has    implemented    with    the    option
+  GeneralizedReedSolomonCode(P,k,R,wts),  where  wts  =  [v_1,  ..., v_n] is a
+  sequence  of  n  non-zero  elements from the base field F of R. See also the
+  generalized Reed--Solomon code GRS_k(P, V) described in [MS83], p.303.
+  
+  The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of
+  [JH04])  has  been  implemented  for  generalized  Reed-Solomon  codes.  See
+  GeneralizedReedSolomonListDecoder (4.10-4).
+  
+  ---------------------------  Example  ----------------------------
+    gap> R:=PolynomialRing(GF(11),["t"]);
+    GF(11)[t]
+    gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+    [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+    gap> C:=GeneralizedReedSolomonCode(P,3,R);
+    a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+    gap> MinimumDistance(C);
+    3
+    gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+    [ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
+    gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
+    a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
+    gap> MinimumDistance(C);
+    3
+  ------------------------------------------------------------------
+  
+  See EvaluationCode (5.6-1) for a more general construction.
+  
+  5.6-3 GeneralizedReedMullerCode
+  
+  > GeneralizedReedMullerCode( Pts, r, F ) ___________________________function
+  
+  GeneralizedReedMullerCode  returns  a 'Reed-Muller code' C with length |Pts|
+  and  order  r.  One  considers (a) a basis of monomials for the vector space
+  over  F=GF(q)  of all polynomials in F[x_1,...,x_d] of degree at most r, and
+  (b)  a  set  Pts  of  points  in F^d. The generator matrix of the associated
+  Reed-Muller  code  C  is G=(f(p))_fin B,p in Pts. This code C is constructed
+  using the command GeneralizedReedMullerCode(Pts,r,F). When Pts is the set of
+  all  q^d  points in F^d then the command GeneralizedReedMuller(d,r,F) yields
+  the code. When Pts is the set of all (q-1)^d points with no coordinate equal
+  to  0  then  this  is  can  be constructed using the ToricCode command (as a
+  special case).
+  
+  This command returns a "record" object C with several extra components (type
+  NamesOfComponents(C)  to see them all): C!.points (namely Pts) and C!.degree
+  (namely r).
+  
+  ---------------------------  Example  ----------------------------
+    gap> Pts:=ToricPoints(2,GF(5));
+    [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
+      [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
+      [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
+      [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+    gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
+    a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)
+  ------------------------------------------------------------------
+  
+  See EvaluationCode (5.6-1) for a more general construction.
+  
+  5.6-4 ToricPoints
+  
+  > ToricPoints( n, F ) ______________________________________________function
+  
+  ToricPoints(n,F) returns the points in (F^x)^n.
+  
+  ---------------------------  Example  ----------------------------
+    gap> ToricPoints(2,GF(5));
+    [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
+      [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
+      [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
+      [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
+      [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+  ------------------------------------------------------------------
+  
+  5.6-5 ToricCode
+  
+  > ToricCode( L, F ) ________________________________________________function
+  
+  This  function  returns the toric codes as in D. Joyner [Joy04] (see also J.
+  P. Hansen [Han99]). This is a truncated (generalized) Reed-Muller code. Here
+  L  is  a  list  of integral vectors and F is the finite field. The size of F
+  must be different from 2.
+  
+  This  command  returns  a  record  object  C  with  an extra component (type
+  NamesOfComponents(C) to see them all): C!.exponents (namely L).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=ToricCode([[1,0],[3,4]],GF(3));
+    a linear [4,1,4]2 toric code over GF(3)
+    gap> Display(GeneratorMat(C));
+     1 1 2 2
+    gap> Elements(C);
+    [ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]
+  ------------------------------------------------------------------
+  
+  See EvaluationCode (5.6-1) for a more general construction.
+  
+  
+  5.7 Algebraic geometric codes
+  
+  Certain  GUAVA  functions related to algebraic geometric codes are described
+  in this section.
+  
+  5.7-1 AffineCurve
+  
+  > AffineCurve( poly, ring ) ________________________________________function
+  
+  This function simply defines the data structure of an affine plane curve. In
+  GUAVA,  an  affine curve is a record crv having two components: a polynomial
+  poly,  accessed  in  GUAVA  by  crv.polynomial, and a polynomial ring over a
+  field  F  in  two  variables ring, accessed in GUAVA by crv.ring, containing
+  poly. You use this function to define a curve in GUAVA.
+  
+  For  example,  for  the ring, one could take Q}[x,y], and for the polynomial
+  one  could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y]
+  for the ring and f(x,y)=y for the polynomial.
+  
+  (Not sure if F neeeds to be a field in fact ...)
+  
+  To  compute  its degree, simply use the DegreeMultivariatePolynomial (7.6-2)
+  command.
+  
+  ---------------------------  Example  ----------------------------
+    gap>
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);
+    PolynomialRing(..., [ x_1, x_2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> x:=vars[1];; y:=vars[2];;
+    gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
+    gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+    1
+    gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
+    gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+    3
+    gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
+    gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+    2
+    gap> q:=3;;
+    gap> F:=GF(q^2);;
+    gap> R:=PolynomialRing(F,2);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R);
+    [ x_1, x_2 ]
+    gap> x:=vars[1];
+    x_1
+    gap> y:=vars[2];
+    x_2
+    gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
+    gap>
+  ------------------------------------------------------------------
+  
+  In  GAP,  a  point  on a curve defined by f(x,y)=0 is simply a list [a,b] of
+  elements of F satisfying this polynomial equation.
+  
+  5.7-2 AffinePointsOnCurve
+  
+  > AffinePointsOnCurve( f, R, E ) ___________________________________function
+  
+  AffinePointsOnCurve(f,R,E)   returns  the  points  (x,y)  in  E^2  satisying
+  f(x,y)=0, where f is an element of R=F[x,y].
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R := PolynomialRing(F,["x","y"]);
+    PolynomialRing(..., [ x, y ])
+    gap> indets := IndeterminatesOfPolynomialRing(R);;
+    gap> x:=indets[1];; y:=indets[2];;
+    gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+    [ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
+      [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
+      [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+      [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]
+  ------------------------------------------------------------------
+  
+  5.7-3 GenusCurve
+  
+  > GenusCurve( crv ) ________________________________________________function
+  
+  If  crv  represents f(x,y)=0, where f is a polynomial of degree d, then this
+  function  simply returns (d-1)(d-2)/2. At the present, the function does not
+  check if the curve is singular (in which case the result may be false).
+  
+  ---------------------------  Example  ----------------------------
+    gap> q:=4;;
+    gap> F:=GF(q^2);;
+    gap> a:=X(F);;
+    gap> R1:=PolynomialRing(F,[a]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);;
+    gap> b:=X(F);;
+    gap> R2:=PolynomialRing(F,[a,b]);;
+    gap> var2:=IndeterminatesOfPolynomialRing(R2);;
+    gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
+    gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
+    rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
+    gap> GenusCurve(crv);
+    36
+    
+  ------------------------------------------------------------------
+  
+  5.7-4 GOrbitPoint 
+  
+  > GOrbitPoint ( GP ) _______________________________________________function
+  
+  P must be a point in projective space P^n(F), G must be a finite subgroup of
+  GL(n+1,F),  This function returns all (representatives of projective) points
+  in the orbit G* P.
+  
+  The  example below computes the orbit of the automorphism group on the Klein
+  quartic over the field GF(43) on the ``point at infinity''.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R:= PolynomialRing( GF(43), 3 );;
+    gap> vars:= IndeterminatesOfPolynomialRing(R);;
+    gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
+    gap> zz:=Z(43)^6;
+    Z(43)^6
+    gap> zzz:=Z(43);
+    Z(43)
+    gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
+    [ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
+    [ 0*Z(43), Z(43)^12, 0*Z(43) ], 
+    [ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
+    gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
+    [ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+    [ 0*Z(43), 0*Z(43), Z(43)^0 ], 
+    [ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
+    gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
+    >             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
+    >             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
+    [ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
+    [ Z(43)^28, Z(43)^12, Z(43)^9 ], 
+    [ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
+    gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
+    gap> Size(G);
+    168
+    gap> P:=[1,0,0]*zzz^0;
+    [ Z(43)^0, 0*Z(43), 0*Z(43) ]
+    gap> O:=GOrbitPoint(G,P);
+    [ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+    [ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
+    [ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
+    [ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
+    [ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
+    [ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
+    [ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
+    [ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
+    [ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
+    [ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
+    [ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
+    [ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
+    gap> Length(O);
+    24
+    
+  ------------------------------------------------------------------
+  
+  Informally,  a  divisor on a curve is a formal integer linear combination of
+  points  on  the  curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the
+  ``multiplicity''  of P_i in D) and P_i are (F-rational) points on the affine
+  plane  curve.  In  other  words, a divisor is an element of the free abelian
+  group generated by the F-rational affine points on the curve. The support of
+  a  divisor  D is simply the set of points which occurs in the sum defining D
+  with  non-zero  ``multiplicity''.  The  data  structure  for a divisor on an
+  affine plane curve is a record having the following components:
+  
+  --    the coefficients (the integer weights of the points in the support),
+  
+  --    the support,
+  
+  --    the  curve,  itself  a  record  which  has  components: polynomial and
+        polynomial ring.
+  
+  5.7-5 DivisorOnAffineCurve
+  
+  > DivisorOnAffineCurve( cdivsdivcrv ) ______________________________function
+  
+  This  is the command you use to define a divisor in GUAVA. Of course, crv is
+  the  curve  on which the divisor lives, cdiv is the list of coefficients (or
+  ``multiplicities''), sdiv is the list of points on crv in the support.
+  
+  ---------------------------  Example  ----------------------------
+    gap> q:=5;
+    5
+    gap> F:=GF(q);
+    GF(5)
+    gap> R:=PolynomialRing(F,2);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R);
+    [ x_1, x_2 ]
+    gap> x:=vars[1];
+    x_1
+    gap> y:=vars[2];
+    x_2
+    gap> crv:=AffineCurve(y^3-x^3-x-1,R);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+         polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
+    gap> Pts:=AffinePointsOnCurve(crv,R,F);;
+    gap> supp:=[Pts[1],Pts[2]];
+    [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
+    gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
+    rec( coeffs := [ 1, -1 ], 
+         support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
+         curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+                       polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )
+    
+  ------------------------------------------------------------------
+  
+  5.7-6 DivisorAddition 
+  
+  > DivisorAddition ( D1D2 ) _________________________________________function
+  
+  If   D_1=m_1P_1+...+m_kP_k   and  D_2=n_1P_1+...+n_kP_k  are  divisors  then
+  D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k.
+  
+  5.7-7 DivisorDegree 
+  
+  > DivisorDegree ( D ) ______________________________________________function
+  
+  If D=m_1P_1+...+m_kP_k is a divisor then the degree is m_1+...+m_k.
+  
+  5.7-8 DivisorNegate 
+  
+  > DivisorNegate ( D ) ______________________________________________function
+  
+  Self-explanatory.
+  
+  5.7-9 DivisorIsZero 
+  
+  > DivisorIsZero ( D ) ______________________________________________function
+  
+  Self-explanatory.
+  
+  5.7-10 DivisorsEqual 
+  
+  > DivisorsEqual ( D1D2 ) ___________________________________________function
+  
+  Self-explanatory.
+  
+  5.7-11 DivisorGCD 
+  
+  > DivisorGCD ( D1D2 ) ______________________________________________function
+  
+  If  m=p_1^e_1...p_k^e_k  and n=p_1^f_1...p_k^f_k are two integers then their
+  greatest  common  divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A
+  similar    definition    works   for   two   divisors   on   a   curve.   If
+  D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve
+  then         their         greatest         common         divisor        is
+  GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k.  This  function  computes this
+  quantity.
+  
+  5.7-12 DivisorLCM 
+  
+  > DivisorLCM ( D1D2 ) ______________________________________________function
+  
+  If  m=p_1^e_1...p_k^e_k  and n=p_1^f_1...p_k^f_k are two integers then their
+  least  common  multiple  is  LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A
+  similar    definition    works   for   two   divisors   on   a   curve.   If
+  D_1=e_1P_1+...+e_kP_k  and D_2=f_1P_1+...+f_kP_k are two divisors on a curve
+  then          their         least         common         multiple         is
+  LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k.  This  function  computes this
+  quantity.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> crvP1:=AffineCurve(b,R2);
+    rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+    gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> DivisorDegree(div1);
+    10
+    gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> DivisorDegree(div2);
+    10
+    gap> div3:=DivisorAddition(div1,div2);
+    rec( coeffs := [ 5, 3, 5, 4, 3 ], 
+         support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> DivisorDegree(div3);
+    20
+    gap> DivisorIsEffective(div1);
+    true
+    gap> DivisorIsEffective(div2);
+    true
+    gap>
+    gap> ndiv1:=DivisorNegate(div1);
+    rec( coeffs := [ -1, -2, -3, -4 ], 
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> zdiv:=DivisorAddition(div1,ndiv1);
+    rec( coeffs := [ 0, 0, 0, 0 ], 
+         support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> DivisorIsZero(zdiv);
+    true
+    gap> div_gcd:=DivisorGCD(div1,div2);
+    rec( coeffs := [ 1, 1, 2, 0, 0 ], 
+         support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> div_lcm:=DivisorLCM(div1,div2);
+    rec( coeffs := [ 4, 2, 3, 4, 3 ], 
+         support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> DivisorDegree(div_gcd);
+    4
+    gap> DivisorDegree(div_lcm);
+    16
+    gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+    true
+    
+  ------------------------------------------------------------------
+  
+  Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the
+  projective  line  P^1(F). If G leaves D unchanged (it may permute the points
+  in  the support of D but must preserve their sum in D) then the Riemann-Roch
+  space  L(D)  is  a  G-module.  The commands in this section help explore the
+  G-module structure of L(D) in the case then the ground field F is finite.
+  
+  5.7-13 RiemannRochSpaceBasisFunctionP1 
+  
+  > RiemannRochSpaceBasisFunctionP1 ( PkR2 ) _________________________function
+  
+  Input: R2 is a polynomial ring in two variables, say F[x,y]; P is an element
+  of the base field, say F; k is an integer. Output: 1/(x-P)^k
+  
+  5.7-14 DivisorOfRationalFunctionP1 
+  
+  > DivisorOfRationalFunctionP1 ( f, R ) _____________________________function
+  
+  Here  R  =  F[x,y]  is  a  polynomial  ring  in the variables x,y and f is a
+  rational  function  of  x.  Simply  returns  the  principal  divisor on P}^1
+  associated to f.
+  
+  ---------------------------  Example  ----------------------------
+    
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> pt:=Z(11);
+    Z(11)
+    gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+    (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
+    gap> Df:=DivisorOfRationalFunctionP1(f,R2);
+    rec( coeffs := [ -2 ], support := [ Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
+       )
+    gap> Df.support;
+    [ Z(11) ]
+    gap> F:=GF(11);;
+    gap> R:=PolynomialRing(F,2);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R);;
+    gap> a:=vars[1];;
+    gap> b:=vars[2];;
+    gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+    gap> divf:=DivisorOfRationalFunctionP1(f,R);
+    rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
+      curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
+    gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+    a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
+    [  ]
+    gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+    a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
+    [ Z(11)^7, Z(11), Z(11), Z(11) ]
+    
+  ------------------------------------------------------------------
+  
+  5.7-15 RiemannRochSpaceBasisP1 
+  
+  > RiemannRochSpaceBasisP1 ( D ) ____________________________________function
+  
+  This  returns  the  basis  of  the Riemann-Roch space L(D) associated to the
+  divisor D on the projective line P}^1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> crvP1:=AffineCurve(b,R2);
+    rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+    gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> B:=RiemannRochSpaceBasisP1(D);
+    [ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
+    (Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
+    (Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
+      (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
+    (Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
+    (Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
+    gap> DivisorOfRationalFunctionP1(B[1],R2).support;
+    [  ]
+    gap> DivisorOfRationalFunctionP1(B[2],R2).support;
+    [ Z(11)^2 ]
+    gap> DivisorOfRationalFunctionP1(B[3],R2).support;
+    [ Z(11)^3 ]
+    gap> DivisorOfRationalFunctionP1(B[4],R2).support;
+    [ Z(11)^3 ]
+    gap> DivisorOfRationalFunctionP1(B[5],R2).support;
+    [ Z(11)^7 ]
+    gap> DivisorOfRationalFunctionP1(B[6],R2).support;
+    [ Z(11)^7 ]
+    gap> DivisorOfRationalFunctionP1(B[7],R2).support;
+    [ Z(11)^7 ]
+    gap> DivisorOfRationalFunctionP1(B[8],R2).support;
+    [ Z(11) ]
+    gap> DivisorOfRationalFunctionP1(B[9],R2).support;
+    [ Z(11) ]
+    gap> DivisorOfRationalFunctionP1(B[10],R2).support;
+    [ Z(11) ]
+    gap> DivisorOfRationalFunctionP1(B[11],R2).support;
+    [ Z(11) ]
+    
+  ------------------------------------------------------------------
+  
+  5.7-16 MoebiusTransformation 
+  
+  > MoebiusTransformation ( AR ) _____________________________________function
+  
+  The arguments are a 2x 2 matrix A with entries in a field F and a polynomial
+  ring Rof one variable, say F[x]. This function returns the linear fractional
+  transformatio  associated  to  A. These transformations can be composed with
+  each other using GAP's Value command.
+  
+  5.7-17 ActionMoebiusTransformationOnFunction 
+  
+  > ActionMoebiusTransformationOnFunction ( AfR2 ) ___________________function
+  
+  The  arguments  are  a  2x  2 matrix A with entries in a field F, a rational
+  function  f  of  one  variable,  say  in F(x), and a polynomial ring R2, say
+  F[x,y].  This function simply returns the composition of the function f with
+  the Möbius transformation of A.
+  
+  5.7-18 ActionMoebiusTransformationOnDivisorP1 
+  
+  > ActionMoebiusTransformationOnDivisorP1 ( AD ) ____________________function
+  
+  A Möbius transformation may be regarded as an automorphism of the projective
+  line  P^1. This function simply returns the image of the divisor D under the
+  Möbius      transformation      defined      by     A,     provided     that
+  IsActionMoebiusTransformationOnDivisorDefinedP1(A,D) returns true.
+  
+  5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 
+  
+  > IsActionMoebiusTransformationOnDivisorDefinedP1 ( AD ) ___________function
+  
+  Returns  true  of  none of the points in the support of the divisor D is the
+  pole of the Möbius transformation.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> crvP1:=AffineCurve(b,R2);
+    rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+    gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> A:=Z(11)^0*[[1,2],[1,4]];
+    [ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
+    gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+    false
+    gap> A:=Z(11)^0*[[1,2],[3,4]];
+    [ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
+    gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+    true
+    gap> ActionMoebiusTransformationOnDivisorP1(A,D);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> f:=MoebiusTransformation(A,R1);
+    (a+Z(11))/(Z(11)^8*a+Z(11)^2)
+    gap> ActionMoebiusTransformationOnFunction(A,f,R1);
+    -Z(11)^0+Z(11)^3*a^-1
+    
+  ------------------------------------------------------------------
+  
+  5.7-20 DivisorAutomorphismGroupP1 
+  
+  > DivisorAutomorphismGroupP1 ( D ) _________________________________function
+  
+  Input:  A divisor D on P^1(F), where F is a finite field. Output: A subgroup
+  Aut(D)subset Aut(P^1) preserving D.
+  
+  Very slow.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> crvP1:=AffineCurve(b,R2);
+    rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+    gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+    rec( coeffs := [ 1, 2, 3, 4 ], 
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+    7305
+    gap> IdGroup(agp);
+    [ 10, 2 ]
+    
+  ------------------------------------------------------------------
+  
+  5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 
+  
+  > MatrixRepresentationOnRiemannRochSpaceP1 ( gD ) __________________function
+  
+  Input: An element g in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor
+  D  on  P^1(F),  where  F is a finite field. Output: a dx d matrix, where d =
+  dim, L(D), representing the action of g on L(D).
+  
+  Note: g sends L(D) to r* L(D), where r is a polynomial of degree 1 depending
+  on g and D.
+  
+  Also very slow.
+  
+  The GAP command BrauerCharacterValue can be used to ``lift'' the eigenvalues
+  of this matrix to the complex numbers.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> crvP1:=AffineCurve(b,R2);
+    rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+    gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+    rec( coeffs := [ 1, 1, 1, 4 ],  
+         support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+         curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+    gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+    7198
+    gap> IdGroup(agp);
+    [ 20, 5 ]
+    gap> g:=Random(agp);
+    [ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
+    gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+    [ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+    [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+      [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+    [ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+      [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
+    [ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
+      [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
+    [ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
+    gap> Display(rho);
+      1  .  .  .  .  .  .  .
+      1  .  .  2  .  .  .  .
+      7  . 10  .  .  .  .  .
+      5  6  .  .  .  .  .  .
+      4  .  .  . 10  .  .  .
+      5  .  .  .  3  1  .  .
+      9  .  .  .  7  1 10  .
+      3  .  .  .  8  8  6  1
+    
+  ------------------------------------------------------------------
+  
+  5.7-22 GoppaCodeClassical
+  
+  > GoppaCodeClassical( div, pts ) ___________________________________function
+  
+  Input:  A  divisor  div on the projective line P}^1(F) over a finite field F
+  and  a  list  pts of points P_1,...,P_nsubset F disjoint from the support of
+  div.
+  Output:  The classical (evaluation) Goppa code associated to this data. This
+  is the code
+  
+  
+       C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> a:=vars[1];;b:=vars[2];;
+    gap> cdiv:=[ 1, 2, -1, -2 ];
+    [ 1, 2, -1, -2 ]
+    gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+    [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
+    gap> crv:=rec(polynomial:=b,ring:=R2);
+    rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
+    gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+    rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
+      curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
+    gap> pts:=Difference(Elements(GF(11)),div.support);
+    [ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
+    gap> C:=GoppaCodeClassical(div,pts);
+    a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
+    gap> MinimumDistance(C);
+    6
+  ------------------------------------------------------------------
+  
+  5.7-23 EvaluationBivariateCode
+  
+  > EvaluationBivariateCode( pts, L, crv ) ___________________________function
+  
+  Input:  pts  is  a  set  of  affine  points  on crv, L is a list of rational
+  functions on crv.
+  Output: The evaluation code associated to the points in pts and functions in
+  L,  but  specifically  for  affine  plane curves and this function checks if
+  points  are  ``bad"  (if so removes them from the list pts automatically). A
+  point  is  ``bad''  if  either  it  does  not lie on the set of non-singular
+  F-rational points (places of degree 1) on the curve.
+  
+  Very  similar  to  EvaluationCode  (see  EvaluationCode  (5.6-1)  for a more
+  general construction).
+  
+  5.7-24 EvaluationBivariateCodeNC
+  
+  > EvaluationBivariateCodeNC( pts, L, crv ) _________________________function
+  
+  As in EvaluationBivariateCode but does not check if the points are ``bad''.
+  
+  Input:  pts  is  a  set  of  affine  points  on crv, L is a list of rational
+  functions on crv.
+  Output: The evaluation code associated to the points in pts and functions in
+  L.
+  
+  ---------------------------  Example  ----------------------------
+    gap> q:=4;;
+    gap> F:=GF(q^2);;
+    gap> R:=PolynomialRing(F,2);;
+    gap> vars:=IndeterminatesOfPolynomialRing(R);;
+    gap> x:=vars[1];;
+    gap> y:=vars[2];;
+    gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+    rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
+    gap> L:=[ x^0, x, x^2*y^-1 ];
+    [ Z(2)^0, x_1, x_1^2/x_2 ]
+    gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+    gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;
+    
+    
+     Automatically removed the following 'bad' points (either a pole or not 
+     on the curve):
+    [ [ 0*Z(2), 0*Z(2) ] ]
+    
+    a linear [63,3,1..60]51..59  evaluation code over GF(16)
+    52
+    gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+    gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+    a linear [63,3,1..60]51..59  evaluation code over GF(16)
+    48
+    gap> C3:=EvaluationCode(P,L,R); time;
+    a linear [63,3,1..56]51..59  evaluation code over GF(16)
+    58
+    gap> MinimumDistance(C1);
+    56
+    gap> MinimumDistance(C2);
+    56
+    gap> MinimumDistance(C3);
+    56
+    gap>
+  ------------------------------------------------------------------
+  
+  5.7-25 OnePointAGCode
+  
+  > OnePointAGCode( f, P, m, R ) _____________________________________function
+  
+  Input:  f  is  a  polynomial  in R=F[x,y], where F is a finite field, m is a
+  positive  integer  (the multiplicity of the `point at infinity' infty on the
+  curve f(x,y)=0), P is a list of n points on the curve over F.
+  Output: The C which is the image of the evaluation map
+  
+  
+       Eval_P:L(m \cdot \infty)\rightarrow F^n,
+  
+  
+  given  by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty)
+  denotes  the  Riemann-Roch space of the divisor m * infty on the curve. This
+  has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon
+  depending on m and f(x,y). For more details on the Riemann-Roch space of the
+  divisor m * infty see Proposition III.10.5 in Stichtenoth [Sti93].
+  
+  This command returns a "record" object C with several extra components (type
+  NamesOfComponents(C) to see them all): C!.points (namely P), C!.multiplicity
+  (namely m), C!.curve (namely f) and C!.ring (namely R).
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R := PolynomialRing(F,["x","y"]);
+    PolynomialRing(..., [ x, y ])
+    gap> indets := IndeterminatesOfPolynomialRing(R);
+    [ x, y ]
+    gap> x:=indets[1]; y:=indets[2];
+    x
+    y
+    gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+    gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+    a linear [11,8,1..0]2..3  one-point AG code over GF(11)
+    gap> MinimumDistance(C);
+    4
+    gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+    gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
+    a linear [9,6,1..4]2..3 one-point AG code over GF(11)
+    gap> MinimumDistance(C);
+    4
+  ------------------------------------------------------------------
+  
+  See EvaluationCode (5.6-1) for a more general construction.
+  
diff --git a/doc/chap6.html b/doc/chap6.html
new file mode 100644
index 0000000..3963c49
--- /dev/null
+++ b/doc/chap6.html
@@ -0,0 +1,983 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 6: Manipulating Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap5.html">Previous Chapter</a>    <a href="chap7.html">Next Chapter</a>   </div>
+
+<p><a id="X866FC1117814B64D" name="X866FC1117814B64D"></a></p>
+<div class="ChapSects"><a href="chap6.html#X866FC1117814B64D">6. <span class="Heading">Manipulating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X8271A4697FDA97B2">6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X794679BE7F9EB5C1">6.1-1 ExtendedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E6E4DDA79574FDB">6.1-2 PuncturedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87691AB67FF5621B">6.1-3 EvenWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79577EB27BE8524B">6.1-4 PermutedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87E5849784BC60D2">6.1-5 ExpurgatedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8134BE2B8478BE8A">6.1-6 AugmentedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B0A6E1F82686B43">6.1-7 RemovedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X784E1255874FCA8A">6.1-8 AddedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9 ShortenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A5D5419846FC867">6.1-10 LengthenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7982D699803ECD0F">6.1-11 SubCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X809376187C1525AA">6.1-12 ResidueCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E92DC9581F96594">6.1-13 ConstructionBCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X799B12F085ACB609">6.1-14 DualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81FE1F387DFCCB22">6.1-15 ConversionFieldCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X82D18907800FE3D9">6.1-16 TraceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8799F4BF81B0842B">6.1-17 CosetCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X873EA5EE85699832">6.1-18 ConstantWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7AA203A380BC4C79">6.1-19 StandardFormCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7EF49A257D6DB53B">6.1-20 PiecewiseConstantCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X7964BF0081CC8352">6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79E00D3A8367D65A">6.2-1 DirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2 UUVCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7BFBBA5784C293C1">6.2-3 DirectProductCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X78F0B1BC81FB109C">6.2-4 IntersectionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8228A1F57A29B8F4">6.2-5 UnionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A85F8AF8154D387">6.2-6 ExtendedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E17107686A845DB">6.2-7 AmalgamatedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7D8981AF7DFE9814">6.2-8 BlockwiseDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7C37D467791CE99B">6.2-9 ConstructionXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B50943B8014134F">6.2-10 ConstructionXXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X790C614985BFAE16">6.2-11 BZCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X820327D6854A50B5">6.2-12 BZCodeNC</a></span>
+</div>
+</div>
+
+<h3>6. <span class="Heading">Manipulating Codes</span></h3>
+
+<p>In this chapter we describe several functions <strong class="pkg">GUAVA</strong> uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it.</p>
+
+<p>In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases.</p>
+
+<p>Because <strong class="pkg">GUAVA</strong> keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch.</p>
+
+<p>In Section <a href="chap6.html#X8271A4697FDA97B2"><b>6.1</b></a>, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>), <code class="func">PuncturedCode</code> (<a href="chap6.html#X7E6E4DDA79574FDB"><b>6.1-2</b></a>), <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>), <cod [...]
+
+<p><a id="X8271A4697FDA97B2" name="X8271A4697FDA97B2"></a></p>
+
+<h4>6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></h4>
+
+<p><a id="X794679BE7F9EB5C1" name="X794679BE7F9EB5C1"></a></p>
+
+<h5>6.1-1 ExtendedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedCode</code>( <var class="Arg">C[, i]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedCode</code> extends the code <var class="Arg">C</var> <var class="Arg">i</var> times and returns the result. <var class="Arg">i</var> is equal to 1 by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight.</p>
+
+<p>The word length increases by <var class="Arg">i</var>. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true.</p>
+
+<p>A cyclic code in general is no longer cyclic after extending.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> C2 := ExtendedCode( C1 );
+a linear [8,4,4]2 extended code
+gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+true
+gap> List( AsSSortedList( C2 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
+gap> C3 := EvenWeightSubcode( C1 );
+a linear [7,3,4]2..3 even weight subcode 
+</pre></td></tr></table>
+
+<p>To undo extending, call <code class="code">PuncturedCode</code> (see <code class="func">PuncturedCode</code> (<a href="chap6.html#X7E6E4DDA79574FDB"><b>6.1-2</b></a>)). The function <code class="code">EvenWeightSubcode</code> (see <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>)) also returns a related code with only even weights, but without changing its word length.</p>
+
+<p><a id="X7E6E4DDA79574FDB" name="X7E6E4DDA79574FDB"></a></p>
+
+<h5>6.1-2 PuncturedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PuncturedCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PuncturedCode</code> punctures <var class="Arg">C</var> in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one.</p>
+
+<p>This command can also be called with the syntax <code class="code">PuncturedCode( C, L )</code>. In this case, <code class="code">PuncturedCode</code> punctures <var class="Arg">C</var> in the columns specified by <var class="Arg">L</var>, a list of integers. All columns specified by <var class="Arg">L</var> are omitted from each codeword. If l is the length of <var class="Arg">L</var> (so the number of removed columns), the word length decreases by l. The minimum distance can also de [...]
+
+<p>Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 5, GF(2) );
+a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
+gap> C2 := PuncturedCode( C1 );
+a linear [14,7,4]3..5 punctured code
+gap> ExtendedCode( C2 ) = C1;
+false
+gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
+a linear [8,7,1]1 punctured code
+gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 
+</pre></td></tr></table>
+
+<p><code class="code">ExtendedCode</code> extends the code again (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>)), although in general this does not result in the old code.</p>
+
+<p><a id="X87691AB67FF5621B" name="X87691AB67FF5621B"></a></p>
+
+<h5>6.1-3 EvenWeightSubcode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvenWeightSubcode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EvenWeightSubcode</code> returns the even weight subcode of <var class="Arg">C</var>, consisting of all codewords of <var class="Arg">C</var> with even weight. If <var class="Arg">C</var> is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If <var class="Arg">C</var> is a binary cyclic code, and g(x) is its generator polynomial, the even weight subcode either [...]
+
+<p>Of course, if all codewords of <var class="Arg">C</var> are already of even weight, the returned code is equal to <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+an (8,33,4..8)3..8 even weight subcode
+gap> List( AsSSortedList( C1 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
+  4, 6, 4, 6, 8, 4, 6, 8 ]
+gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</pre></td></tr></table>
+
+<p><code class="code">ExtendedCode</code> also returns a related code of only even weights, but without reducing its dimension (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>)).</p>
+
+<p><a id="X79577EB27BE8524B" name="X79577EB27BE8524B"></a></p>
+
+<h5>6.1-4 PermutedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutedCode</code> returns <var class="Arg">C</var> after column permutations. <var class="Arg">L</var> (in GAP disjoint cycle notation) is the permutation to be executed on the columns of <var class="Arg">C</var>. If <var class="Arg">C</var> is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as <var class="Arg">C</var>, this permutation belongs to the automorphism group of <var class="Arg">C</var> (see <code class="func [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+a linear [15,5,7]5 punctured code
+gap> C2 := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 = C1;
+false
+gap> p := CodeIsomorphism( C1, C2 );
+( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
+gap> C3 := PermutedCode( C1, p );
+a linear [15,5,7]5 permuted code
+gap> C2 = C3;
+true 
+</pre></td></tr></table>
+
+<p><a id="X87E5849784BC60D2" name="X87E5849784BC60D2"></a></p>
+
+<h5>6.1-5 ExpurgatedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExpurgatedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExpurgatedCode</code> expurgates the code <var class="Arg">C</var>> by throwing away codewords in list <var class="Arg">L</var>. <var class="Arg">C</var> must be a linear code. <var class="Arg">L</var> must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by <var class="Arg">L</var>. Since the returned code is still linear, it is very likely that, besides the words of <var class="Arg">L</var>, more [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := ExpurgatedCode( C1, L );
+a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p>This function does not work on non-linear codes. For removing words from a non-linear code, use <code class="code">RemovedElementsCode</code> (see <code class="func">RemovedElementsCode</code> (<a href="chap6.html#X7B0A6E1F82686B43"><b>6.1-7</b></a>)). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>)).</p>
+
+<p><a id="X8134BE2B8478BE8A" name="X8134BE2B8478BE8A"></a></p>
+
+<h5>6.1-6 AugmentedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AugmentedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AugmentedCode</code> returns <var class="Arg">C</var> after augmenting. <var class="Arg">C</var> must be a linear code, <var class="Arg">L</var> must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by <var class="Arg">L</var> as well as the words that were already in code <var class="Arg">C</var>. Note that the new code in general will consist of more words than only the codewords of <var class="Arg">C</var>  [...]
+
+<p>This command can also be called with the syntax <code class="code">AugmentedCode(C)</code>. When called without a list of codewords, <code class="code">AugmentedCode</code> returns <var class="Arg">C</var> after adding the all-ones vector to the generator matrix. <var class="Arg">C</var> must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If <var class="Arg">C</var> is a binary code which does not contain the a [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C31 := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+a linear [8,7,1..2]1 code, augmented with 3 word(s)
+gap> C32 = ReedMullerCode( 2, 3 );
+true 
+gap> C1 := CordaroWagnerCode(6);
+a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
+gap> Codeword( [0,0,1,1,1,1] ) in C1;
+true
+gap> C2 := AugmentedCode( C1 );
+a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
+gap> Codeword( [1,1,0,0,0,0] ) in C2;
+true
+</pre></td></tr></table>
+
+<p>The function <code class="code">AddedElementsCode</code> adds elements to the codewords instead of adding them to the basis (see <code class="func">AddedElementsCode</code> (<a href="chap6.html#X784E1255874FCA8A"><b>6.1-8</b></a>)).</p>
+
+<p><a id="X7B0A6E1F82686B43" name="X7B0A6E1F82686B43"></a></p>
+
+<h5>6.1-7 RemovedElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RemovedElementsCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RemovedElementsCode</code> returns code <var class="Arg">C</var> after removing a list of codewords <var class="Arg">L</var> from its elements. <var class="Arg">L</var> must be a list of codeword input. The result is an unrestricted code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := RemovedElementsCode( C1, L );
+a (15,2013,3..15)2..15 code with 35 word(s) removed
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> MinimumDistance( C2 );
+3        # C2 is not linear, so the minimum weight does not have to
+         # be equal to the minimum distance 
+</pre></td></tr></table>
+
+<p>Adding elements to a code is done by the function <code class="code">AddedElementsCode</code> (see <code class="func">AddedElementsCode</code> (<a href="chap6.html#X784E1255874FCA8A"><b>6.1-8</b></a>)). To remove codewords from the base of a linear code, use <code class="code">ExpurgatedCode</code> (see <code class="func">ExpurgatedCode</code> (<a href="chap6.html#X87E5849784BC60D2"><b>6.1-5</b></a>)).</p>
+
+<p><a id="X784E1255874FCA8A" name="X784E1255874FCA8A"></a></p>
+
+<h5>6.1-8 AddedElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AddedElementsCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AddedElementsCode</code> returns code <var class="Arg">C</var> after adding a list of codewords <var class="Arg">L</var> to its elements. <var class="Arg">L</var> must be a list of codeword input. The result is an unrestricted code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := NullCode( 6, GF(2) );
+a cyclic [6,0,6]6 nullcode over GF(2)
+gap> C2 := AddedElementsCode( C1, [ "111111" ] );
+a (6,2,1..6)3 code with 1 word(s) added
+gap> IsCyclicCode( C2 );
+true
+gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+a (6,4,1..6)2 code with 2 word(s) added
+gap> IsCyclicCode( C3 );
+true 
+</pre></td></tr></table>
+
+<p>To remove elements from a code, use <code class="code">RemovedElementsCode</code> (see <code class="func">RemovedElementsCode</code> (<a href="chap6.html#X7B0A6E1F82686B43"><b>6.1-7</b></a>)). To add elements to the base of a linear code, use <code class="code">AugmentedCode</code> (see <code class="func">AugmentedCode</code> (<a href="chap6.html#X8134BE2B8478BE8A"><b>6.1-6</b></a>)).</p>
+
+<p><a id="X81CBEAFF7B9DE6EF" name="X81CBEAFF7B9DE6EF"></a></p>
+
+<h5>6.1-9 ShortenedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ShortenedCode</code>( <var class="Arg">C[, L]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ShortenedCode( C )</code> returns the code <var class="Arg">C</var> shortened by taking a cross section. If <var class="Arg">C</var> is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If <var class="Arg">C</var> was a [n,k,d] code, the shortened code generally is a [n-1,k-1,d] code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, <code class="code">ShortenedCode</code> first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as <var class="Arg">C</var>.</p>
+
+<p>This command can also be called using the syntax <code class="code">ShortenedCode(C,L)</code>. When called in this format, <code class="code">ShortenedCode</code> repeats the shortening process on each of the columns specified by <var class="Arg">L</var>. <var class="Arg">L</var> therefore is a list of integers. The column numbers in <var class="Arg">L</var> are the numbers as they are before the shortening process. If <var class="Arg">L</var> has l entries, the returned code has a wo [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := ShortenedCode( C1 );
+a linear [14,10,3]2 shortened code
+gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+a (4,3,1..4)2 user defined unrestricted code over GF(2)
+gap> MinimumDistance( C3 );
+2
+gap> C4 := ShortenedCode( C3 );
+a (3,2,2..3)1..2 shortened code
+gap> AsSSortedList( C4 );
+[ [ 0 0 0 ], [ 1 0 1 ] ]
+gap> C5 := HammingCode( 5, GF(2) );
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+a linear [28,23,3]2 shortened code
+gap> OptimalityLinearCode( C6 );
+0
+</pre></td></tr></table>
+
+<p>The function <code class="code">LengthenedCode</code> lengthens the code again (only for linear codes), see <code class="func">LengthenedCode</code> (<a href="chap6.html#X7A5D5419846FC867"><b>6.1-10</b></a>). In general, this is not exactly the inverse function.</p>
+
+<p><a id="X7A5D5419846FC867" name="X7A5D5419846FC867"></a></p>
+
+<h5>6.1-10 LengthenedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LengthenedCode</code>( <var class="Arg">C[, i]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LengthenedCode( C )</code> returns the code <var class="Arg">C</var> lengthened. <var class="Arg">C</var> must be a linear code. First, the all-ones vector is added to the generator matrix (see <code class="func">AugmentedCode</code> (<a href="chap6.html#X8134BE2B8478BE8A"><b>6.1-6</b></a>)). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended <var class="Arg">i</var> times (see <code class="func">ExtendedCode</code [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := CordaroWagnerCode( 5 );
+a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
+gap> C2 := LengthenedCode( C1 );
+a linear [6,3,2]2..3 code, lengthened with 1 column(s) 
+</pre></td></tr></table>
+
+<p><code class="code">ShortenedCode</code>' shortens the code, see <code class="func">ShortenedCode</code> (<a href="chap6.html#X81CBEAFF7B9DE6EF"><b>6.1-9</b></a>). In general, this is not exactly the inverse function.</p>
+
+<p><a id="X7982D699803ECD0F" name="X7982D699803ECD0F"></a></p>
+
+<h5>6.1-11 SubCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SubCode</code>( <var class="Arg">C[, s]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function <code class="code">SubCode</code> returns a subcode of <var class="Arg">C</var> by taking the first k - s rows of the generator matrix of <var class="Arg">C</var>, where k is the dimension of <var class="Arg">C</var>. The interger <var class="Arg">s</var> may be omitted and in this case it is assumed as 1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode(31,11);
+a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
+gap> S1:= SubCode(C);
+a linear [31,10,11]7..13 subcode
+gap> WeightDistribution(S1);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+gap> S2:= SubCode(C, 8);
+a linear [31,3,11]14..20 subcode
+gap> History(S2);
+[ "a linear [31,3,11]14..20 subcode of",
+  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
+gap> WeightDistribution(S2);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0 ]
+</pre></td></tr></table>
+
+<p><a id="X809376187C1525AA" name="X809376187C1525AA"></a></p>
+
+<h5>6.1-12 ResidueCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ResidueCode</code>( <var class="Arg">C[, c]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">ResidueCode</code> takes a codeword <var class="Arg">c</var> of <var class="Arg">C</var> (if <var class="Arg">c</var> is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where <var class="Arg">c</var> is unequal to zero. The resulting code is an [n-w, k-1, d-lfloor w*(q-1)/q rfloor ] code. <var class="Arg">C</var> must be a linear code and <v [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 7 );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 := ResidueCode( C1 );
+a linear [8,4,4]2 residue code
+gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+gap> C3 := ResidueCode( C1, c );
+a linear [7,4,3]1 residue code 
+</pre></td></tr></table>
+
+<p><a id="X7E92DC9581F96594" name="X7E92DC9581F96594"></a></p>
+
+<h5>6.1-13 ConstructionBCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionBCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">ConstructionBCode</code> takes a binary linear code <var class="Arg">C</var> and calculates the minimum distance of the dual of <var class="Arg">C</var> (see <code class="func">DualCode</code> (<a href="chap6.html#X799B12F085ACB609"><b>6.1-14</b></a>)). It then removes the columns of the parity check matrix of <var class="Arg">C</var> where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity ch [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedMullerCode( 2, 5 );
+a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
+gap> C2 := ConstructionBCode( C1 );
+a linear [24,9,8]5..10 Construction B (8 coordinates)
+gap> BoundsMinimumDistance( 24, 9, GF(2) );
+rec( n := 24, k := 9, q := 2, references := rec(  ), 
+  construction := [ [ Operation "UUVCode" ], 
+      [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
+                      [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
+                  [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
+          [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
+  lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
+      "Lb(12,7)=4, u u+v construction of C1 and C2:", 
+      "Lb(6,5)=2, dual of the repetition code", 
+      "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
+  upperBound := 8, 
+  upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
+                             contradict:", "Ub(18,4)=8, Griesmer bound" ] )
+# so C2 is optimal
+</pre></td></tr></table>
+
+<p><a id="X799B12F085ACB609" name="X799B12F085ACB609"></a></p>
+
+<h5>6.1-14 DualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DualCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DualCode</code> returns the dual code of <var class="Arg">C</var>. The dual code consists of all codewords that are orthogonal to the codewords of <var class="Arg">C</var>. If <var class="Arg">C</var> is a linear code with generator matrix G, the dual code has parity check matrix G (or if <var class="Arg">C</var> has parity check matrix H, the dual code has generator matrix H). So if <var class="Arg">C</var> is a linear [n, k] code, the dual code of <var class="Arg" [...]
+
+<p>The dual code is always a linear code, even if <var class="Arg">C</var> is non-linear.</p>
+
+<p>If a code <var class="Arg">C</var> is equal to its dual code, it is called <em>self-dual</em>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> RD := DualCode( R );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> R = RD;
+true
+gap> N := WholeSpaceCode( 7, GF(4) );
+a cyclic [7,7,1]0 whole space code over GF(4)
+gap> DualCode( N ) = NullCode( 7, GF(4) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X81FE1F387DFCCB22" name="X81FE1F387DFCCB22"></a></p>
+
+<h5>6.1-15 ConversionFieldCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConversionFieldCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConversionFieldCode</code> returns the code obtained from <var class="Arg">C</var> after converting its field. If the field of <var class="Arg">C</var> is GF(q^m), the returned code has field GF(q). Each symbol of every codeword is replaced by a concatenation of m symbols from GF(q). If <var class="Arg">C</var> is an (n, M, d_1) code, the returned code is a (n* m, M, d_2) code, where d_2 > d_1.</p>
+
+<p>See also <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode( 4, GF(4) );
+a cyclic [4,1,4]3 repetition code over GF(4)
+gap> R2 := ConversionFieldCode( R );
+a linear [8,2,4]3..4 code, converted to basefield GF(2)
+gap> Size( R ) = Size( R2 );
+true
+gap> GeneratorMat( R );
+[ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
+gap> GeneratorMat( R2 );
+[ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X82D18907800FE3D9" name="X82D18907800FE3D9"></a></p>
+
+<h5>6.1-16 TraceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TraceCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">C</var> is a linear code defined over an extension E of <var class="Arg">F</var> (<var class="Arg">F</var> is the ``base field'')</p>
+
+<p>Output: The linear code generated by Tr_E/F(c), for all c in C.</p>
+
+<p><code class="code">TraceCode</code> returns the image of the code <var class="Arg">C</var> under the trace map. If the field of <var class="Arg">C</var> is GF(q^m), the returned code has field GF(q).</p>
+
+<p>Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+a  [10,4,?] randomly generated code over GF(4)
+5
+gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
+1
+
+</pre></td></tr></table>
+
+<p><a id="X8799F4BF81B0842B" name="X8799F4BF81B0842B"></a></p>
+
+<h5>6.1-17 CosetCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CosetCode</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CosetCode</code> returns the coset of a code <var class="Arg">C</var> with respect to word <var class="Arg">w</var>. <var class="Arg">w</var> must be of the codeword type. Then, <var class="Arg">w</var> is added to each codeword of <var class="Arg">C</var>, yielding the elements of the new code. If <var class="Arg">C</var> is linear and <var class="Arg">w</var> is an element of <var class="Arg">C</var>, the new code is equal to <var class="Arg">C</var>, otherwise th [...]
+
+<p>Generating a coset is also possible by simply adding the word <var class="Arg">w</var> to <var class="Arg">C</var>. See <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(3, GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := Codeword("1011011");; c in H;
+false
+gap> C := CosetCode(H, c);
+a (7,16,3)1 coset code
+gap> List(AsSSortedList(C), el-> Syndrome(H, el));
+[ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
+# All elements of the coset have the same syndrome in H 
+</pre></td></tr></table>
+
+<p><a id="X873EA5EE85699832" name="X873EA5EE85699832"></a></p>
+
+<h5>6.1-18 ConstantWeightSubcode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstantWeightSubcode</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConstantWeightSubcode</code> returns the subcode of <var class="Arg">C</var> that only has codewords of weight <var class="Arg">w</var>. The resulting code is a non-linear code, because it does not contain the all-zero vector.</p>
+
+<p>This command also can be called with the syntax <code class="code">ConstantWeightSubcode(C)</code> In this format, <code class="code">ConstantWeightSubcode</code> returns the subcode of <var class="Arg">C</var> consisting of all minimum weight codewords of <var class="Arg">C</var>.</p>
+
+<p><code class="code">ConstantWeightSubcode</code> first checks if Leon's binary <code class="code">wtdist</code> exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in <var class="Arg">C</var> to see if it is of the desired weight.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> N := NordstromRobinsonCode();; WeightDistribution(N);
+[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
+gap> C := ConstantWeightSubcode(N, 8);
+a (16,30,6..16)5..8 code with codewords of weight 8
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
+gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+[ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
+gap> C := ConstantWeightSubcode(eg);
+a (12,264,6..12)3..6 code with codewords of weight 6
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X7AA203A380BC4C79" name="X7AA203A380BC4C79"></a></p>
+
+<h5>6.1-19 StandardFormCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> StandardFormCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">StandardFormCode</code> returns <var class="Arg">C</var> after putting it in standard form. If <var class="Arg">C</var> is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'.</p>
+
+<p>If <var class="Arg">C</var> is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although <strong class="pkg">GUAVA</strong> always puts both matrices in a standard form using <code class="code">BaseMat</code>, this never alters the code. <code class="code">StandardFormCode</code> even applies column permutations if un [...]
+
+<p>If <var class="Arg">C</var> is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore <code class="code">StandardFormCode</code> just returns a copy of <var class="Arg">C</var> for cyc [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
+          "random form code", GF(2) );
+a linear [4,2,1..2]1..2 random form code over GF(2)
+gap> Codeword( GeneratorMat( G ) );
+[ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
+gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
+[ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7EF49A257D6DB53B" name="X7EF49A257D6DB53B"></a></p>
+
+<h5>6.1-20 PiecewiseConstantCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PiecewiseConstantCode</code>( <var class="Arg">part, wts[, F]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PiecewiseConstantCode</code> returns a code with length n = sum n_i, where <var class="Arg">part</var>=[ n_1, dots, n_k ]. <var class="Arg">wts</var> is a list of <var class="Arg">constraints</var> w=(w_1,...,w_k), each of length k, where 0 <= w_i <= n_i. The default field is GF(2).</p>
+
+<p>A constraint is a list of integers, and a word c = ( c_1, dots, c_k ) (according to <var class="Arg">part</var>, i.e., each c_i is a subword of length n_i) is in the resulting code if and only if, for some constraint w in <var class="Arg">wts</var>, |c_i| = w_i for all 1 <= i <= k, where | ...| denotes the Hamming weight.</p>
+
+<p>An example might make things clearer:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PiecewiseConstantCode( [ 2, 3 ],
+     [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+a (5,7,1..5)1..5 piecewise constant code over GF(2)
+gap> AsSSortedList(last);
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
+  [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
+gap>
+
+</pre></td></tr></table>
+
+<p>The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7.</p>
+
+<p><a id="X7964BF0081CC8352" name="X7964BF0081CC8352"></a></p>
+
+<h4>6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></h4>
+
+<p><a id="X79E00D3A8367D65A" name="X79E00D3A8367D65A"></a></p>
+
+<h5>6.2-1 DirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DirectSumCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DirectSumCode</code> returns the direct sum of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. The direct sum code consists of every codeword of <var class="Arg">C1</var> concatenated by every codeword of <var class="Arg">C2</var>. Therefore, if <var class="Arg">Ci</var> was a (n_i,M_i,d_i) code, the result is a (n_1+n_2,M_1*M_2,min(d_1,d_2)) code.</p>
+
+<p>If both <var class="Arg">C1</var> and <var class="Arg">C2</var> are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic.</p>
+
+<p>Performing a direct sum can also be done by adding two codes (see Section <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>). Another often used method is the `u, u+v'-construction, described in <code class="func">UUVCode</code> (<a href="chap6.html#X86E9D6DE7F1A07E6"><b>6.2-2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+gap> D := DirectSumCode(C1, C2);;
+gap> AsSSortedList(D);
+[ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
+gap> D = C1 + C2;   # addition = direct sum
+true 
+</pre></td></tr></table>
+
+<p><a id="X86E9D6DE7F1A07E6" name="X86E9D6DE7F1A07E6"></a></p>
+
+<h5>6.2-2 UUVCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UUVCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UUVCode</code> returns the so-called (u|u+v) construction applied to <var class="Arg">C1</var> and <var class="Arg">C2</var>. The resulting code consists of every codeword u of <var class="Arg">C1</var> concatenated by the sum of u and every codeword v of <var class="Arg">C2</var>. If <var class="Arg">C1</var> and <var class="Arg">C2</var> have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If <var class="Arg">Ci</v [...]
+
+<p>If both <var class="Arg">C1</var> and <var class="Arg">C2</var> are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic.</p>
+
+<p>The function <code class="code">DirectSumCode</code> returns another sum of codes (see <code class="func">DirectSumCode</code> (<a href="chap6.html#X79E00D3A8367D65A"><b>6.2-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+a cyclic [4,3,2]1 even weight subcode
+gap> C2 := RepetitionCode(4, GF(2));
+a cyclic [4,1,4]2 repetition code over GF(2)
+gap> R := UUVCode(C1, C2);
+a linear [8,4,4]2 U U+V construction code
+gap> R = ReedMullerCode(1,3);
+true 
+</pre></td></tr></table>
+
+<p><a id="X7BFBBA5784C293C1" name="X7BFBBA5784C293C1"></a></p>
+
+<h5>6.2-3 DirectProductCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DirectProductCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DirectProductCode</code> returns the direct product of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. Both must be linear codes. Suppose <var class="Arg">Ci</var> has generator matrix G_i. The direct product of <var class="Arg">C1</var> and <var class="Arg">C2</var> then has the Kronecker product of G_1 and G_2 as the generator matrix (see the GAP command <code class="code">KroneckerProduct</code>).</p>
+
+<p>If <var class="Arg">Ci</var> is a [n_i, k_i, d_i] code, the direct product then is an [n_1* n_2,k_1* k_2,d_1* d_2] code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L1 := LexiCode(10, 4, GF(2));
+a linear [10,5,4]2..4 lexicode over GF(2)
+gap> L2 := LexiCode(8, 3, GF(2));
+a linear [8,4,3]2..3 lexicode over GF(2)
+gap> D := DirectProductCode(L1, L2);
+a linear [80,20,12]20..45 direct product code 
+</pre></td></tr></table>
+
+<p><a id="X78F0B1BC81FB109C" name="X78F0B1BC81FB109C"></a></p>
+
+<h5>6.2-4 IntersectionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IntersectionCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IntersectionCode</code> returns the intersection of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. This code consists of all codewords that are both in <var class="Arg">C1</var> and <var class="Arg">C2</var>. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := CyclicCodes(7, GF(2));
+[ a cyclic [7,7,1]0 enumerated code over GF(2),
+  a cyclic [7,6,1..2]1 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,0,7]7 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2),
+  a cyclic [7,1,7]3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
+gap> IntersectionCode(C[6], C[8]) = C[7];
+true 
+</pre></td></tr></table>
+
+<p>The <em>hull</em> of a linear code is the intersection of the code with its dual code. In other words, the hull of C is <code class="code">IntersectionCode(C, DualCode(C))</code>.</p>
+
+<p><a id="X8228A1F57A29B8F4" name="X8228A1F57A29B8F4"></a></p>
+
+<h5>6.2-5 UnionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UnionCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UnionCode</code> returns the union of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. This code consists of the union of all codewords of <var class="Arg">C1</var> and <var class="Arg">C2</var> and all linear combinations. Therefore this function works only for linear codes. The function <code class="code">AddedElementsCode</code> can be used for non-linear codes, or if the resulting code should not include linear combinations. See <code class="func"> [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
+gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+a linear [3,1,3]1 code defined by generator matrix over GF(2)
+gap> U := UnionCode(G, H);
+a linear [3,3,1]0 union code
+gap> c := Codeword("010");; c in G;
+false
+gap> c in H;
+false
+gap> c in U;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7A85F8AF8154D387" name="X7A85F8AF8154D387"></a></p>
+
+<h5>6.2-6 ExtendedDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedDirectSumCode</code>( <var class="Arg">L, B, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The extended direct sum construction is described in section V of Graham and Sloane <a href="chapBib.html#biBGS85">[GS85]</a>. The resulting code consists of <var class="Arg">m</var> copies of <var class="Arg">L</var>, extended by repeating the codewords of <var class="Arg">B</var> <var class="Arg">m</var> times.</p>
+
+<p>Suppose <var class="Arg">L</var> is an [n_L, k_L]r_L code, and <var class="Arg">B</var> is an [n_L, k_B]r_B code (non-linear codes are also permitted). The length of <var class="Arg">B</var> must be equal to the length of <var class="Arg">L</var>. The length of the new code is n = m n_L, the dimension (in the case of linear codes) is k <= m k_L + k_B, and the covering radius is r <= lfloor m Psi( L, B ) rfloor, with</p>
+
+<p class="pcenter">
+\Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}}
+               \sum_{v \in B} {\rm d}( L, v + u ).
+</p>
+
+<p>However, this computation will not be executed, because it may be too time consuming for large codes.</p>
+
+<p>If L subseteq B, and L and B are linear codes, the last copy of <var class="Arg">L</var> is omitted. In this case the dimension is k = m k_L + (k_B - k_L).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := WholeSpaceCode( 7, GF(2) );
+a cyclic [7,7,1]0 whole space code over GF(2)
+gap> e := ExtendedDirectSumCode( c, d, 3 );
+a linear [21,15,1..3]2 3-fold extended direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7E17107686A845DB" name="X7E17107686A845DB"></a></p>
+
+<h5>6.2-7 AmalgamatedDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AmalgamatedDirectSumCode</code>( <var class="Arg">c1, c2[, check]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AmalgamatedDirectSumCode</code> returns the amalgamated direct sum of the codes <var class="Arg">c1</var> and <var class="Arg">c2</var>. The amalgamated direct sum code consists of all codewords of the form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | , v) in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <= M_1 * M_2 / 2.</p>
+
+<p>If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively.</p>
+
+<p>If <var class="Arg">c1</var> is a normal code (see <code class="func">IsNormalCode</code> (<a href="chap7.html#X80283A2F7C8101BD"><b>7.4-5</b></a>)) with the last coordinate acceptable (see <code class="func">IsCoordinateAcceptable</code> (<a href="chap7.html#X7D24F8BF7F9A7BF1"><b>7.4-3</b></a>)), and <var class="Arg">c2</var> is a normal code with the first coordinate acceptable, then the covering radius of the new code is r <= r_1 + r_2. However, checking whether a code is normal [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := ReedMullerCode( 1, 4 );
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> e := DirectSumCode( c, d );
+a linear [23,9,3]7 direct sum code
+gap> f := AmalgamatedDirectSumCode( c, d );;
+gap> MinimumDistance( f );;
+gap> CoveringRadius( f );; 
+gap> f;
+a linear [22,8,3]7 amalgamated direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7D8981AF7DFE9814" name="X7D8981AF7DFE9814"></a></p>
+
+<h5>6.2-8 BlockwiseDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BlockwiseDirectSumCode</code>( <var class="Arg">C1, L1, C2, L2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BlockwiseDirectSumCode</code> returns a subcode of the direct sum of <var class="Arg">C1</var> and <var class="Arg">C2</var>. The fields of <var class="Arg">C1</var> and <var class="Arg">C2</var> must be same. The lists <var class="Arg">L1</var> and <var class="Arg">L2</var> are two equally long with elements from the ambient vector spaces of <var class="Arg">C1</var> and <var class="Arg">C2</var>, respectively, <em>or</em> <var class="Arg">L1</var> and <var class=" [...]
+
+<p>In the first case, the blockwise direct sum code is defined as</p>
+
+<p class="pcenter">
+bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ),
+</p>
+
+<p>where ell is the length of <var class="Arg">L1</var> and <var class="Arg">L2</var>, and oplus is the direct sum.</p>
+
+<p>In the second case, it is defined as</p>
+
+<p class="pcenter">
+bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).
+</p>
+
+<p>The length of the new code is n = n_1 + n_2.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 3, GF(2) );;
+gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
+> C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+a (13,1024,1..13)1..2 blockwise direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7C37D467791CE99B" name="X7C37D467791CE99B"></a></p>
+
+<h5>6.2-9 ConstructionXCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionXCode</code>( <var class="Arg">C, A</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Consider a list of j linear codes of the same length N over the same field F, C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N, K_i, D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a list of j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ..., A_j-1 where the parameter of the ith code A_i is [n_i, k_i=(K_i-K_i+1), d_i], an [n, K_1, d] linear code over field F can be constructed where n = N + sum_i=1^j-1 n_i, and d = min D_j, D_ [...]
+
+<p>For more information on Construction X, refer to <a href="chapBib.html#biBSloane72">[SRC72]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode(127, 43);
+a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
+gap> C2 := BCHCode(127, 47);
+a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
+gap> C3 := BCHCode(127, 55);
+a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
+gap> G1 := ShallowCopy( GeneratorMat(C2) );;
+gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
+gap> C1 := GeneratorMatCode(G1, GF(2));
+a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+43
+gap> C := [ C1, C2, C3 ];
+[ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
+  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
+  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
+gap> IsSubset(C[1], C[2]);
+true
+gap> IsSubset(C[2], C[3]);
+true
+gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+[ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
+gap> CX := ConstructionXCode(C, A);
+a linear [148,23,53]43..74 Construction X code
+gap> History(CX);
+[ "a linear [148,23,53]43..74 Construction X code of", 
+  "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
+, a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
+[127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
+  "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
+17,8,6]3..6 even weight subcode ]" ]
+</pre></td></tr></table>
+
+<p><a id="X7B50943B8014134F" name="X7B50943B8014134F"></a></p>
+
+<h5>6.2-10 ConstructionXXCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionXXCode</code>( <var class="Arg">C1, C2, C3, A1, A2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Consider a set of linear codes over field F of the same length, n, C_1=[n, k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1, C_3 subset C_1 and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1, k_1-k_2, e_1] and A_2=[n_2, k_1-k_3, e_2] over the same field F, there exists an [n+n_1+n_2, k_1, d] linear code C_XX over field F, where d = mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2.</p>
+
+<p>The codewords of C_XX can be partitioned into three sections ( v;|;a;|;b ) where v has length n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the following form:</p>
+
+
+<ul>
+<li><p>( v ; | ; 0 ; | ; 0 ) if v in C_4</p>
+
+</li>
+<li><p>( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4</p>
+
+</li>
+<li><p>( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4</p>
+
+</li>
+<li><p>( v ; | ; a_1 ; | ; a_2 ) otherwise</p>
+
+</li>
+</ul>
+<p>For more information on Construction XX, refer to <a href="chapBib.html#biBAlltop84">[All84]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := PrimitiveRoot(GF(32));
+Z(2^5)
+gap> f0 := MinimalPolynomial( GF(2), a^0 );
+x_1+Z(2)^0
+gap> f1 := MinimalPolynomial( GF(2), a^1 );
+x_1^5+x_1^2+Z(2)^0
+gap> f5 := MinimalPolynomial( GF(2), a^5 );
+x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
+gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+a linear [31,11,11]7..11 union code of
+U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
+a linear [10,5,4]2..4 shortened code
+gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
+a cyclic [6,5,2]1 dual code
+gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+a linear [47,11,15..17]13..23 Construction XX code
+gap> MinimumDistance(CXX);
+17
+gap> History(CXX);        
+[ "a linear [47,11,17]13..23 Construction XX code of", 
+  "C1: a cyclic [31,11,11]7..11 union code", 
+  "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "A1: a linear [10,5,4]2..4 shortened code", 
+  "A2: a cyclic [6,5,2]1 dual code" ]
+</pre></td></tr></table>
+
+<p><a id="X790C614985BFAE16" name="X790C614985BFAE16"></a></p>
+
+<h5>6.2-11 BZCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BZCode</code>( <var class="Arg">O, I</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Given a set of outer codes of the same length O_i = [N, K_i, D_i] over GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i = [n, k_i, d_i] over GF(q), <code class="code">BZCode</code> returns a Blokh-Zyablov multilevel concatenated code with parameter [ n x N, sum_i=1^t e_i x K_i, min_i=1,...,td_i x D_i ] over GF(q).</p>
+
+<p>Note that the set of inner codes must satisfy chain condition, i.e. I_1 = [n, k_1, d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t] where 0=k_0 < k_1 < k_2 < ... < k_t. The dimension of the inner codes must satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the ith outer code.</p>
+
+<p>For more information on Blokh-Zyablov multilevel concatenated code, refer to <a href="chapBib.html#biBBrouwer98">[Bro98]</a>.</p>
+
+<p><a id="X820327D6854A50B5" name="X820327D6854A50B5"></a></p>
+
+<h5>6.2-12 BZCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BZCodeNC</code>( <var class="Arg">O, I</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function is the same as <code class="code">BZCode</code>, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> #
+gap> # Binary code
+gap> #
+gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+[ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
+  a cyclic [9,4,6]4..5 MDS code over GF(8) ]
+gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
+gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+[ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
+gap> C := BZCodeNC(O, I);
+a linear [72,38,12]0..72 Blokh Zyablov concatenated code
+gap> #
+gap> # Non binary code
+gap> #
+gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
+gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
+gap> O1 := DualCode( O3 );;
+gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+gap> Cy := CyclicCodes(5, GF(5));;
+gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+gap> O  := [ O1, O2, O3 ];
+[ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
+  a linear [6,2,5]3..4 extended code ]
+gap> I  := [ Cy[5], Cy[4], Cy[3] ];
+[ a cyclic [5,1,5]3..4 enumerated code over GF(5),
+  a cyclic [5,2,4]2..3 enumerated code over GF(5),
+  a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
+gap> C  := BZCodeNC( O, I );
+a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
+gap> MinimumDistance(C);
+15
+gap> History(C);
+[ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
+  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
+,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
+r GF(5) ]",
+  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
+ode, a linear [6,2,5]3..4 extended code ]" ]
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap5.html">Previous Chapter</a>    <a href="chap7.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap6.txt b/doc/chap6.txt
new file mode 100644
index 0000000..fdd62a2
--- /dev/null
+++ b/doc/chap6.txt
@@ -0,0 +1,1041 @@
+  
+  6. Manipulating Codes
+  
+  In  this  chapter  we  describe  several  functions GUAVA uses to manipulate
+  codes.  Some  of  the best codes are obtained by starting with for example a
+  BCH code, and manipulating it.
+  
+  In  some cases, it is faster to perform calculations with a manipulated code
+  than  to use the original code. For example, if the dimension of the code is
+  larger  than  half  the  word  length, it is generally faster to compute the
+  weight distribution by first calculating the weight distribution of the dual
+  code  than  by  directly calculating the weight distribution of the original
+  code. The size of the dual code is smaller in these cases.
+  
+  Because  GUAVA  keeps  all  information  in a code record, in some cases the
+  information can be preserved after manipulations. Therefore, computations do
+  not always have to start from scratch.
+  
+  In  Section  6.1,  we  describe  functions  that  take  a  code with certain
+  parameters,  modify  it  in  some  way  and  return  a  different  code (see
+  ExtendedCode  (6.1-1),  PuncturedCode  (6.1-2),  EvenWeightSubcode  (6.1-3),
+  PermutedCode   (6.1-4),   ExpurgatedCode   (6.1-5),  AugmentedCode  (6.1-6),
+  RemovedElementsCode   (6.1-7),   AddedElementsCode   (6.1-8),  ShortenedCode
+  (6.1-9),  LengthenedCode  (6.1-10),  ResidueCode (6.1-12), ConstructionBCode
+  (6.1-13),      DualCode      (6.1-14),     ConversionFieldCode     (6.1-15),
+  ConstantWeightSubcode  (6.1-18),  StandardFormCode  (6.1-19)  and  CosetCode
+  (6.1-17)).  In  Section  6.2, we describe functions that generate a new code
+  out   of   two   codes   (see   DirectSumCode   (6.2-1),   UUVCode  (6.2-2),
+  DirectProductCode (6.2-3), IntersectionCode (6.2-4) and UnionCode (6.2-5)).
+  
+  
+  6.1 Functions that Generate a New Code from a Given Code
+  
+  6.1-1 ExtendedCode
+  
+  > ExtendedCode( C[, i] ) ___________________________________________function
+  
+  ExtendedCode  extends  the code C i times and returns the result. i is equal
+  to  1  by  default. Extending is done by adding a parity check bit after the
+  last coordinate. The coordinates of all codewords now add up to zero. In the
+  binary case, each codeword has even weight.
+  
+  The  word  length  increases by i. The size of the code remains the same. In
+  the  binary  case,  the  minimum distance increases by one if it was odd. In
+  other cases, that is not always true.
+  
+  A cyclic code in general is no longer cyclic after extending.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 3, GF(2) );
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> C2 := ExtendedCode( C1 );
+    a linear [8,4,4]2 extended code
+    gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+    true
+    gap> List( AsSSortedList( C2 ), WeightCodeword );
+    [ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
+    gap> C3 := EvenWeightSubcode( C1 );
+    a linear [7,3,4]2..3 even weight subcode 
+  ------------------------------------------------------------------
+  
+  To  undo  extending,  call  PuncturedCode  (see  PuncturedCode (6.1-2)). The
+  function  EvenWeightSubcode  (see  EvenWeightSubcode (6.1-3)) also returns a
+  related code with only even weights, but without changing its word length.
+  
+  6.1-2 PuncturedCode
+  
+  > PuncturedCode( C ) _______________________________________________function
+  
+  PuncturedCode  punctures  C  in  the  last  column,  and returns the result.
+  Puncturing is done simply by cutting off the last column from each codeword.
+  This means the word length decreases by one. The minimum distance in general
+  also decrease by one.
+  
+  This  command  can  also be called with the syntax PuncturedCode( C, L ). In
+  this  case,  PuncturedCode punctures C in the columns specified by L, a list
+  of integers. All columns specified by L are omitted from each codeword. If l
+  is  the  length  of  L  (so  the number of removed columns), the word length
+  decreases by l. The minimum distance can also decrease by l or less.
+  
+  Puncturing  a  cyclic  code  in general results in a non-cyclic code. If the
+  code  is  punctured  in  all  the  columns where a word of minimal weight is
+  unequal to zero, the dimension of the resulting code decreases.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := BCHCode( 15, 5, GF(2) );
+    a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
+    gap> C2 := PuncturedCode( C1 );
+    a linear [14,7,4]3..5 punctured code
+    gap> ExtendedCode( C2 ) = C1;
+    false
+    gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
+    a linear [8,7,1]1 punctured code
+    gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+    a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 
+  ------------------------------------------------------------------
+  
+  ExtendedCode  extends the code again (see ExtendedCode (6.1-1)), although in
+  general this does not result in the old code.
+  
+  6.1-3 EvenWeightSubcode
+  
+  > EvenWeightSubcode( C ) ___________________________________________function
+  
+  EvenWeightSubcode  returns  the  even weight subcode of C, consisting of all
+  codewords of C with even weight. If C is a linear code and contains words of
+  odd  weight,  the  resulting  code  has a dimension of one less. The minimum
+  distance  always  increases  with one if it was odd. If C is a binary cyclic
+  code,  and  g(x) is its generator polynomial, the even weight subcode either
+  has  generator  polynomial g(x) (if g(x) is divisible by x-1) or g(x)* (x-1)
+  (if  no factor x-1 was present in g(x)). So the even weight subcode is again
+  cyclic.
+  
+  Of  course,  if  all codewords of C are already of even weight, the returned
+  code is equal to C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+    an (8,33,4..8)3..8 even weight subcode
+    gap> List( AsSSortedList( C1 ), WeightCodeword );
+    [ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
+      4, 6, 4, 6, 8, 4, 6, 8 ]
+    gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+  ------------------------------------------------------------------
+  
+  ExtendedCode  also  returns a related code of only even weights, but without
+  reducing its dimension (see ExtendedCode (6.1-1)).
+  
+  6.1-4 PermutedCode
+  
+  > PermutedCode( C, L ) _____________________________________________function
+  
+  PermutedCode  returns  C after column permutations. L (in GAP disjoint cycle
+  notation)  is  the  permutation  to be executed on the columns of C. If C is
+  cyclic,  the result in general is no longer cyclic. If a permutation results
+  in the same code as C, this permutation belongs to the automorphism group of
+  C  (see  AutomorphismGroup  (4.4-3)).  In  any  case,  the  returned code is
+  equivalent to C (see IsEquivalent (4.4-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+    a linear [15,5,7]5 punctured code
+    gap> C2 := BCHCode( 15, 7, GF(2) );
+    a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+    gap> C2 = C1;
+    false
+    gap> p := CodeIsomorphism( C1, C2 );
+    ( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
+    gap> C3 := PermutedCode( C1, p );
+    a linear [15,5,7]5 permuted code
+    gap> C2 = C3;
+    true 
+  ------------------------------------------------------------------
+  
+  6.1-5 ExpurgatedCode
+  
+  > ExpurgatedCode( C, L ) ___________________________________________function
+  
+  ExpurgatedCode  expurgates the code C> by throwing away codewords in list L.
+  C  must  be a linear code. L must be a list of codeword input. The generator
+  matrix  of  the new code no longer is a basis for the codewords specified by
+  L.  Since the returned code is still linear, it is very likely that, besides
+  the words of L, more codewords of C are no longer in the new code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+    [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+    gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+    gap> C2 := ExpurgatedCode( C1, L );
+    a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
+    gap> WeightDistribution( C2 );
+    [ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 
+  ------------------------------------------------------------------
+  
+  This  function  does not work on non-linear codes. For removing words from a
+  non-linear  code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)).
+  For  expurgating  a code of all words of odd weight, use `EvenWeightSubcode'
+  (see EvenWeightSubcode (6.1-3)).
+  
+  6.1-6 AugmentedCode
+  
+  > AugmentedCode( C, L ) ____________________________________________function
+  
+  AugmentedCode returns C after augmenting. C must be a linear code, L must be
+  a  list  of codeword inputs. The generator matrix of the new code is a basis
+  for  the  codewords specified by L as well as the words that were already in
+  code  C.  Note  that the new code in general will consist of more words than
+  only  the codewords of C and the words L. The returned code is also a linear
+  code.
+  
+  This  command  can  also  be  called  with the syntax AugmentedCode(C). When
+  called without a list of codewords, AugmentedCode returns C after adding the
+  all-ones  vector  to  the  generator matrix. C must be a linear code. If the
+  all-ones  vector  was already in the code, nothing happens and a copy of the
+  argument  is  returned.  If  C  is  a binary code which does not contain the
+  all-ones vector, the complement of all codewords is added.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C31 := ReedMullerCode( 1, 3 );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+    gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+    a linear [8,7,1..2]1 code, augmented with 3 word(s)
+    gap> C32 = ReedMullerCode( 2, 3 );
+    true 
+    gap> C1 := CordaroWagnerCode(6);
+    a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
+    gap> Codeword( [0,0,1,1,1,1] ) in C1;
+    true
+    gap> C2 := AugmentedCode( C1 );
+    a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
+    gap> Codeword( [1,1,0,0,0,0] ) in C2;
+    true
+  ------------------------------------------------------------------
+  
+  The  function  AddedElementsCode  adds  elements to the codewords instead of
+  adding them to the basis (see AddedElementsCode (6.1-8)).
+  
+  6.1-7 RemovedElementsCode
+  
+  > RemovedElementsCode( C, L ) ______________________________________function
+  
+  RemovedElementsCode returns code C after removing a list of codewords L from
+  its  elements.  L  must  be  a  list  of  codeword  input.  The result is an
+  unrestricted code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+    [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+    gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+    gap> C2 := RemovedElementsCode( C1, L );
+    a (15,2013,3..15)2..15 code with 35 word(s) removed
+    gap> WeightDistribution( C2 );
+    [ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+    gap> MinimumDistance( C2 );
+    3        # C2 is not linear, so the minimum weight does not have to
+             # be equal to the minimum distance 
+  ------------------------------------------------------------------
+  
+  Adding  elements  to  a  code is done by the function AddedElementsCode (see
+  AddedElementsCode  (6.1-8)).  To  remove codewords from the base of a linear
+  code, use ExpurgatedCode (see ExpurgatedCode (6.1-5)).
+  
+  6.1-8 AddedElementsCode
+  
+  > AddedElementsCode( C, L ) ________________________________________function
+  
+  AddedElementsCode  returns  code C after adding a list of codewords L to its
+  elements.  L must be a list of codeword input. The result is an unrestricted
+  code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := NullCode( 6, GF(2) );
+    a cyclic [6,0,6]6 nullcode over GF(2)
+    gap> C2 := AddedElementsCode( C1, [ "111111" ] );
+    a (6,2,1..6)3 code with 1 word(s) added
+    gap> IsCyclicCode( C2 );
+    true
+    gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+    a (6,4,1..6)2 code with 2 word(s) added
+    gap> IsCyclicCode( C3 );
+    true 
+  ------------------------------------------------------------------
+  
+  To   remove   elements   from   a   code,   use   RemovedElementsCode   (see
+  RemovedElementsCode  (6.1-7)). To add elements to the base of a linear code,
+  use AugmentedCode (see AugmentedCode (6.1-6)).
+  
+  6.1-9 ShortenedCode
+  
+  > ShortenedCode( C[, L] ) __________________________________________function
+  
+  ShortenedCode(  C  ) returns the code C shortened by taking a cross section.
+  If  C  is  a  linear code, this is done by removing all codewords that start
+  with  a  non-zero entry, after which the first column is cut off. If C was a
+  [n,k,d]  code,  the  shortened  code  generally is a [n-1,k-1,d] code. It is
+  possible  that  the dimension remains the same; it is also possible that the
+  minimum distance increases.
+  
+  If  C  is  a  non-linear code, ShortenedCode first checks which finite field
+  element  occurs  most  often  in  the  first  column  of  the codewords. The
+  codewords  not  starting  with this element are removed from the code, after
+  which the first column is cut off. The resulting shortened code has at least
+  the same minimum distance as C.
+  
+  This  command  can  also be called using the syntax ShortenedCode(C,L). When
+  called  in this format, ShortenedCode repeats the shortening process on each
+  of the columns specified by L. L therefore is a list of integers. The column
+  numbers in L are the numbers as they are before the shortening process. If L
+  has  l  entries,  the returned code has a word length of l positions shorter
+  than C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 4 );
+    a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+    gap> C2 := ShortenedCode( C1 );
+    a linear [14,10,3]2 shortened code
+    gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+    a (4,3,1..4)2 user defined unrestricted code over GF(2)
+    gap> MinimumDistance( C3 );
+    2
+    gap> C4 := ShortenedCode( C3 );
+    a (3,2,2..3)1..2 shortened code
+    gap> AsSSortedList( C4 );
+    [ [ 0 0 0 ], [ 1 0 1 ] ]
+    gap> C5 := HammingCode( 5, GF(2) );
+    a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+    gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+    a linear [28,23,3]2 shortened code
+    gap> OptimalityLinearCode( C6 );
+    0
+  ------------------------------------------------------------------
+  
+  The  function  LengthenedCode  lengthens  the  code  again  (only for linear
+  codes),  see  LengthenedCode  (6.1-10).  In general, this is not exactly the
+  inverse function.
+  
+  6.1-10 LengthenedCode
+  
+  > LengthenedCode( C[, i] ) _________________________________________function
+  
+  LengthenedCode(  C ) returns the code C lengthened. C must be a linear code.
+  First,   the   all-ones  vector  is  added  to  the  generator  matrix  (see
+  AugmentedCode  (6.1-6)).  If  the  all-ones  vector  was already a codeword,
+  nothing  happens  to  the  code.  Then,  the  code  is extended i times (see
+  ExtendedCode  (6.1-1)).  i is equal to 1 by default. If C was an [n,k] code,
+  the new code generally is a [n+i,k+1] code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := CordaroWagnerCode( 5 );
+    a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
+    gap> C2 := LengthenedCode( C1 );
+    a linear [6,3,2]2..3 code, lengthened with 1 column(s) 
+  ------------------------------------------------------------------
+  
+  ShortenedCode'  shortens  the  code,  see ShortenedCode (6.1-9). In general,
+  this is not exactly the inverse function.
+  
+  6.1-11 SubCode
+  
+  > SubCode( C[, s] ) ________________________________________________function
+  
+  This  function SubCode returns a subcode of C by taking the first k - s rows
+  of  the generator matrix of C, where k is the dimension of C. The interger s
+  may be omitted and in this case it is assumed as 1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := BCHCode(31,11);
+    a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
+    gap> S1:= SubCode(C);
+    a linear [31,10,11]7..13 subcode
+    gap> WeightDistribution(S1);
+    [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+    gap> S2:= SubCode(C, 8);
+    a linear [31,3,11]14..20 subcode
+    gap> History(S2);
+    [ "a linear [31,3,11]14..20 subcode of",
+      "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
+    gap> WeightDistribution(S2);
+    [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0 ]
+  ------------------------------------------------------------------
+  
+  6.1-12 ResidueCode
+  
+  > ResidueCode( C[, c] ) ____________________________________________function
+  
+  The  function  ResidueCode  takes  a  codeword  c  of  C (if c is omitted, a
+  codeword of minimal weight is used). It removes this word and all its linear
+  combinations  from  the  code and then punctures the code in the coordinates
+  where  c  is  unequal  to zero. The resulting code is an [n-w, k-1, d-lfloor
+  w*(q-1)/q  rfloor ] code. C must be a linear code and c must be non-zero. If
+  c is not in  then no change is made to C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := BCHCode( 15, 7 );
+    a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+    gap> C2 := ResidueCode( C1 );
+    a linear [8,4,4]2 residue code
+    gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+    gap> C3 := ResidueCode( C1, c );
+    a linear [7,4,3]1 residue code 
+  ------------------------------------------------------------------
+  
+  6.1-13 ConstructionBCode
+  
+  > ConstructionBCode( C ) ___________________________________________function
+  
+  The  function  ConstructionBCode takes a binary linear code C and calculates
+  the  minimum  distance  of  the  dual  of C (see DualCode (6.1-14)). It then
+  removes  the columns of the parity check matrix of C where a codeword of the
+  dual  code  of minimal weight has coordinates unequal to zero. The resulting
+  matrix  is  a parity check matrix for an [n-dd, k-dd+1, >= d] code, where dd
+  is the minimum distance of the dual of C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ReedMullerCode( 2, 5 );
+    a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
+    gap> C2 := ConstructionBCode( C1 );
+    a linear [24,9,8]5..10 Construction B (8 coordinates)
+    gap> BoundsMinimumDistance( 24, 9, GF(2) );
+    rec( n := 24, k := 9, q := 2, references := rec(  ), 
+      construction := [ [ Operation "UUVCode" ], 
+          [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
+                          [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
+                      [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
+              [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
+      lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
+          "Lb(12,7)=4, u u+v construction of C1 and C2:", 
+          "Lb(6,5)=2, dual of the repetition code", 
+          "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
+      upperBound := 8, 
+      upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
+                                 contradict:", "Ub(18,4)=8, Griesmer bound" ] )
+    # so C2 is optimal
+  ------------------------------------------------------------------
+  
+  6.1-14 DualCode
+  
+  > DualCode( C ) ____________________________________________________function
+  
+  DualCode returns the dual code of C. The dual code consists of all codewords
+  that  are  orthogonal  to  the  codewords  of  C. If C is a linear code with
+  generator  matrix  G,  the  dual code has parity check matrix G (or if C has
+  parity  check  matrix H, the dual code has generator matrix H). So if C is a
+  linear  [n, k] code, the dual code of C is a linear [n, n-k] code. If C is a
+  cyclic code with generator polynomial g(x), the dual code has the reciprocal
+  polynomial of g(x) as check polynomial.
+  
+  The dual code is always a linear code, even if C is non-linear.
+  
+  If a code C is equal to its dual code, it is called self-dual.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := ReedMullerCode( 1, 3 );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+    gap> RD := DualCode( R );
+    a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+    gap> R = RD;
+    true
+    gap> N := WholeSpaceCode( 7, GF(4) );
+    a cyclic [7,7,1]0 whole space code over GF(4)
+    gap> DualCode( N ) = NullCode( 7, GF(4) );
+    true 
+  ------------------------------------------------------------------
+  
+  6.1-15 ConversionFieldCode
+  
+  > ConversionFieldCode( C ) _________________________________________function
+  
+  ConversionFieldCode  returns  the  code obtained from C after converting its
+  field. If the field of C is GF(q^m), the returned code has field GF(q). Each
+  symbol  of  every  codeword is replaced by a concatenation of m symbols from
+  GF(q).  If  C  is an (n, M, d_1) code, the returned code is a (n* m, M, d_2)
+  code, where d_2 > d_1.
+  
+  See also HorizontalConversionFieldMat (7.3-10).
+  
+  ---------------------------  Example  ----------------------------
+    gap> R := RepetitionCode( 4, GF(4) );
+    a cyclic [4,1,4]3 repetition code over GF(4)
+    gap> R2 := ConversionFieldCode( R );
+    a linear [8,2,4]3..4 code, converted to basefield GF(2)
+    gap> Size( R ) = Size( R2 );
+    true
+    gap> GeneratorMat( R );
+    [ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
+    gap> GeneratorMat( R2 );
+    [ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
+      [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 
+  ------------------------------------------------------------------
+  
+  6.1-16 TraceCode
+  
+  > TraceCode( C ) ___________________________________________________function
+  
+  Input:  C is a linear code defined over an extension E of F (F is the ``base
+  field'')
+  
+  Output: The linear code generated by Tr_E/F(c), for all c in C.
+  
+  TraceCode  returns the image of the code C under the trace map. If the field
+  of C is GF(q^m), the returned code has field GF(q).
+  
+  Very  slow.  It  does  not  seem to be easy to related the parameters of the
+  trace code to the original except in the ``Galois closed'' case.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+    a  [10,4,?] randomly generated code over GF(4)
+    5
+    gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+    a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
+    1
+    
+  ------------------------------------------------------------------
+  
+  6.1-17 CosetCode
+  
+  > CosetCode( C, w ) ________________________________________________function
+  
+  CosetCode returns the coset of a code C with respect to word w. w must be of
+  the  codeword  type.  Then,  w  is added to each codeword of C, yielding the
+  elements  of  the new code. If C is linear and w is an element of C, the new
+  code is equal to C, otherwise the new code is an unrestricted code.
+  
+  Generating  a  coset  is also possible by simply adding the word w to C. See
+  4.2.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := HammingCode(3, GF(2));
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> c := Codeword("1011011");; c in H;
+    false
+    gap> C := CosetCode(H, c);
+    a (7,16,3)1 coset code
+    gap> List(AsSSortedList(C), el-> Syndrome(H, el));
+    [ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+      [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+      [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
+    # All elements of the coset have the same syndrome in H 
+  ------------------------------------------------------------------
+  
+  6.1-18 ConstantWeightSubcode
+  
+  > ConstantWeightSubcode( C, w ) ____________________________________function
+  
+  ConstantWeightSubcode  returns  the  subcode of C that only has codewords of
+  weight  w.  The  resulting  code  is  a non-linear code, because it does not
+  contain the all-zero vector.
+  
+  This  command also can be called with the syntax ConstantWeightSubcode(C) In
+  this  format,  ConstantWeightSubcode  returns the subcode of C consisting of
+  all minimum weight codewords of C.
+  
+  ConstantWeightSubcode  first  checks  if Leon's binary wtdist exists on your
+  computer  (in  the  default  directory).  If  it  does, then this program is
+  called.  Otherwise,  the  constant  weight  subcode  is computed using a GAP
+  program  which  checks  each  codeword  in  C to see if it is of the desired
+  weight.
+  
+  ---------------------------  Example  ----------------------------
+    gap> N := NordstromRobinsonCode();; WeightDistribution(N);
+    [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
+    gap> C := ConstantWeightSubcode(N, 8);
+    a (16,30,6..16)5..8 code with codewords of weight 8
+    gap> WeightDistribution(C);
+    [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
+    gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+    [ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
+    gap> C := ConstantWeightSubcode(eg);
+    a (12,264,6..12)3..6 code with codewords of weight 6
+    gap> WeightDistribution(C);
+    [ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 
+  ------------------------------------------------------------------
+  
+  6.1-19 StandardFormCode
+  
+  > StandardFormCode( C ) ____________________________________________function
+  
+  StandardFormCode  returns  C  after  putting  it in standard form. If C is a
+  non-linear code, this means the elements are organized using lexicographical
+  order. This means they form a legal GAP `Set'.
+  
+  If  C is a linear code, the generator matrix and parity check matrix are put
+  in  standard  form.  The generator matrix then has an identity matrix in its
+  left part, the parity check matrix has an identity matrix in its right part.
+  Although  GUAVA  always puts both matrices in a standard form using BaseMat,
+  this   never   alters   the   code.  StandardFormCode  even  applies  column
+  permutations  if  unavoidable,  and  thereby  changes  the  code. The column
+  permutations  are  recorded in the construction history of the new code (see
+  Display (4.6-3)). C and the new code are of course equivalent.
+  
+  If C is a cyclic code, its generator matrix cannot be put in the usual upper
+  triangular  form,  because  then it would be inconsistent with the generator
+  polynomial.  The  reason  is that generating the elements from the generator
+  matrix  would  result in a different order than generating the elements from
+  the  generator  polynomial.  This  is  an  unwanted  effect,  and  therefore
+  StandardFormCode just returns a copy of C for cyclic codes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
+              "random form code", GF(2) );
+    a linear [4,2,1..2]1..2 random form code over GF(2)
+    gap> Codeword( GeneratorMat( G ) );
+    [ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
+    gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
+    [ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 
+  ------------------------------------------------------------------
+  
+  6.1-20 PiecewiseConstantCode
+  
+  > PiecewiseConstantCode( part, wts[, F] ) __________________________function
+  
+  PiecewiseConstantCode  returns  a code with length n = sum n_i, where part=[
+  n_1,  dots,  n_k  ].  wts  is a list of constraints w=(w_1,...,w_k), each of
+  length k, where 0 <= w_i <= n_i. The default field is GF(2).
+  
+  A  constraint  is  a  list  of  integers,  and a word c = ( c_1, dots, c_k )
+  (according  to  part,  i.e.,  each c_i is a subword of length n_i) is in the
+  resulting code if and only if, for some constraint w in wts, |c_i| = w_i for
+  all 1 <= i <= k, where | ...| denotes the Hamming weight.
+  
+  An example might make things clearer:
+  
+  ---------------------------  Example  ----------------------------
+    gap> PiecewiseConstantCode( [ 2, 3 ],
+         [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+    the C code programs are compiled, so using Leon's binary....
+    the C code programs are compiled, so using Leon's binary....
+    the C code programs are compiled, so using Leon's binary....
+    the C code programs are compiled, so using Leon's binary....
+    a (5,7,1..5)1..5 piecewise constant code over GF(2)
+    gap> AsSSortedList(last);
+    [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
+      [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
+    gap>
+    
+  ------------------------------------------------------------------
+  
+  The  first  constraint is satisfied by codeword 1, the second by codeword 2,
+  the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7.
+  
+  
+  6.2 Functions that Generate a New Code from Two or More Given Codes
+  
+  6.2-1 DirectSumCode
+  
+  > DirectSumCode( C1, C2 ) __________________________________________function
+  
+  DirectSumCode returns the direct sum of codes C1 and C2. The direct sum code
+  consists  of  every  codeword  of  C1  concatenated by every codeword of C2.
+  Therefore,   if   Ci   was   a   (n_i,M_i,d_i)   code,   the   result  is  a
+  (n_1+n_2,M_1*M_2,min(d_1,d_2)) code.
+  
+  If both C1 and C2 are linear codes, the result is also a linear code. If one
+  of  them  is  non-linear,  the  direct  sum is non-linear too. In general, a
+  direct sum code is not cyclic.
+  
+  Performing  a  direct  sum can also be done by adding two codes (see Section
+  4.2).  Another  often used method is the `u, u+v'-construction, described in
+  UUVCode (6.2-2).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+    gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+    gap> D := DirectSumCode(C1, C2);;
+    gap> AsSSortedList(D);
+    [ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
+    gap> D = C1 + C2;   # addition = direct sum
+    true 
+  ------------------------------------------------------------------
+  
+  6.2-2 UUVCode
+  
+  > UUVCode( C1, C2 ) ________________________________________________function
+  
+  UUVCode returns the so-called (u|u+v) construction applied to C1 and C2. The
+  resulting code consists of every codeword u of C1 concatenated by the sum of
+  u  and  every  codeword  v  of C2. If C1 and C2 have different word lengths,
+  sufficient zeros are added to the shorter code to make this sum possible. If
+  Ci  is  a  (n_i,M_i,d_i)  code,  the  result  is  an  (n_1+max(n_1,n_2),M_1*
+  M_2,min(2* d_1,d_2)) code.
+  
+  If both C1 and C2 are linear codes, the result is also a linear code. If one
+  of  them is non-linear, the UUV sum is non-linear too. In general, a UUV sum
+  code is not cyclic.
+  
+  The  function  DirectSumCode returns another sum of codes (see DirectSumCode
+  (6.2-1)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+    a cyclic [4,3,2]1 even weight subcode
+    gap> C2 := RepetitionCode(4, GF(2));
+    a cyclic [4,1,4]2 repetition code over GF(2)
+    gap> R := UUVCode(C1, C2);
+    a linear [8,4,4]2 U U+V construction code
+    gap> R = ReedMullerCode(1,3);
+    true 
+  ------------------------------------------------------------------
+  
+  6.2-3 DirectProductCode
+  
+  > DirectProductCode( C1, C2 ) ______________________________________function
+  
+  DirectProductCode  returns  the direct product of codes C1 and C2. Both must
+  be  linear codes. Suppose Ci has generator matrix G_i. The direct product of
+  C1  and  C2  then  has the Kronecker product of G_1 and G_2 as the generator
+  matrix (see the GAP command KroneckerProduct).
+  
+  If  Ci  is  a  [n_i,  k_i,  d_i]  code,  the direct product then is an [n_1*
+  n_2,k_1* k_2,d_1* d_2] code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> L1 := LexiCode(10, 4, GF(2));
+    a linear [10,5,4]2..4 lexicode over GF(2)
+    gap> L2 := LexiCode(8, 3, GF(2));
+    a linear [8,4,3]2..3 lexicode over GF(2)
+    gap> D := DirectProductCode(L1, L2);
+    a linear [80,20,12]20..45 direct product code 
+  ------------------------------------------------------------------
+  
+  6.2-4 IntersectionCode
+  
+  > IntersectionCode( C1, C2 ) _______________________________________function
+  
+  IntersectionCode  returns  the  intersection  of  codes C1 and C2. This code
+  consists  of  all  codewords  that  are both in C1 and C2. If both codes are
+  linear,  the  result  is also linear. If both are cyclic, the result is also
+  cyclic.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := CyclicCodes(7, GF(2));
+    [ a cyclic [7,7,1]0 enumerated code over GF(2),
+      a cyclic [7,6,1..2]1 enumerated code over GF(2),
+      a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+      a cyclic [7,0,7]7 enumerated code over GF(2),
+      a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+      a cyclic [7,4,1..3]1 enumerated code over GF(2),
+      a cyclic [7,1,7]3 enumerated code over GF(2),
+      a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
+    gap> IntersectionCode(C[6], C[8]) = C[7];
+    true 
+  ------------------------------------------------------------------
+  
+  The  hull  of  a  linear  code is the intersection of the code with its dual
+  code. In other words, the hull of C is IntersectionCode(C, DualCode(C)).
+  
+  6.2-5 UnionCode
+  
+  > UnionCode( C1, C2 ) ______________________________________________function
+  
+  UnionCode  returns  the  union of codes C1 and C2. This code consists of the
+  union  of  all codewords of C1 and C2 and all linear combinations. Therefore
+  this  function  works  only for linear codes. The function AddedElementsCode
+  can  be  used  for  non-linear  codes,  or  if the resulting code should not
+  include   linear   combinations.  See  AddedElementsCode  (6.1-8).  If  both
+  arguments are cyclic, the result is also cyclic.
+  
+  ---------------------------  Example  ----------------------------
+    gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+    a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
+    gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+    a linear [3,1,3]1 code defined by generator matrix over GF(2)
+    gap> U := UnionCode(G, H);
+    a linear [3,3,1]0 union code
+    gap> c := Codeword("010");; c in G;
+    false
+    gap> c in H;
+    false
+    gap> c in U;
+    true 
+  ------------------------------------------------------------------
+  
+  6.2-6 ExtendedDirectSumCode
+  
+  > ExtendedDirectSumCode( L, B, m ) _________________________________function
+  
+  The extended direct sum construction is described in section V of Graham and
+  Sloane  [GS85].  The  resulting  code consists of m copies of L, extended by
+  repeating the codewords of B m times.
+  
+  Suppose  L  is  an  [n_L,  k_L]r_L  code,  and  B  is  an [n_L, k_B]r_B code
+  (non-linear  codes are also permitted). The length of B must be equal to the
+  length  of L. The length of the new code is n = m n_L, the dimension (in the
+  case  of  linear codes) is k <= m k_L + k_B, and the covering radius is r <=
+  lfloor m Psi( L, B ) rfloor, with
+  
+  
+       \Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v
+       \in B} {\rm d}( L, v + u ).
+  
+  
+  However,  this  computation will not be executed, because it may be too time
+  consuming for large codes.
+  
+  If  L  subseteq  B,  and  L  and  B  are linear codes, the last copy of L is
+  omitted. In this case the dimension is k = m k_L + (k_B - k_L).
+  
+  ---------------------------  Example  ----------------------------
+    gap> c := HammingCode( 3, GF(2) );
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> d := WholeSpaceCode( 7, GF(2) );
+    a cyclic [7,7,1]0 whole space code over GF(2)
+    gap> e := ExtendedDirectSumCode( c, d, 3 );
+    a linear [21,15,1..3]2 3-fold extended direct sum code
+  ------------------------------------------------------------------
+  
+  6.2-7 AmalgamatedDirectSumCode
+  
+  > AmalgamatedDirectSumCode( c1, c2[, check] ) ______________________function
+  
+  AmalgamatedDirectSumCode  returns the amalgamated direct sum of the codes c1
+  and  c2.  The  amalgamated  direct sum code consists of all codewords of the
+  form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all
+  codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | ,
+  v)  in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <=
+  M_1 * M_2 / 2.
+  
+  If  both codes are linear, they will first be standardized, with information
+  symbols  in  the  last  and  first coordinates of the first and second code,
+  respectively.
+  
+  If  c1  is a normal code (see IsNormalCode (7.4-5)) with the last coordinate
+  acceptable  (see  IsCoordinateAcceptable  (7.4-3)),  and c2 is a normal code
+  with  the  first  coordinate acceptable, then the covering radius of the new
+  code is r <= r_1 + r_2. However, checking whether a code is normal or not is
+  a  lot of work, and almost all codes seem to be normal. Therefore, an option
+  check  can be supplied. If check is true, then the codes will be checked for
+  normality. If check is false or omitted, then the codes will not be checked.
+  In  this  case it is assumed that they are normal. Acceptability of the last
+  and  first  coordinate of the first and second code, respectively, is in the
+  last case also assumed to be done by the user.
+  
+  ---------------------------  Example  ----------------------------
+    gap> c := HammingCode( 3, GF(2) );
+    a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+    gap> d := ReedMullerCode( 1, 4 );
+    a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+    gap> e := DirectSumCode( c, d );
+    a linear [23,9,3]7 direct sum code
+    gap> f := AmalgamatedDirectSumCode( c, d );;
+    gap> MinimumDistance( f );;
+    gap> CoveringRadius( f );; 
+    gap> f;
+    a linear [22,8,3]7 amalgamated direct sum code
+  ------------------------------------------------------------------
+  
+  6.2-8 BlockwiseDirectSumCode
+  
+  > BlockwiseDirectSumCode( C1, L1, C2, L2 ) _________________________function
+  
+  BlockwiseDirectSumCode returns a subcode of the direct sum of C1 and C2. The
+  fields  of  C1 and C2 must be same. The lists L1 and L2 are two equally long
+  with  elements from the ambient vector spaces of C1 and C2, respectively, or
+  L1  and  L2  are  two  equally long lists containing codes. The union of the
+  codes in L1 and L2 must be C1 and C2, respectively.
+  
+  In the first case, the blockwise direct sum code is defined as
+  
+  
+       bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2
+       + (L_2)_i ),
+  
+  
+  where ell is the length of L1 and L2, and oplus is the direct sum.
+  
+  In the second case, it is defined as
+  
+  
+       bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).
+  
+  
+  The length of the new code is n = n_1 + n_2.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := HammingCode( 3, GF(2) );;
+    gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+    gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
+    > C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+    a (13,1024,1..13)1..2 blockwise direct sum code
+  ------------------------------------------------------------------
+  
+  6.2-9 ConstructionXCode
+  
+  > ConstructionXCode( C, A ) ________________________________________function
+  
+  Consider  a  list of j linear codes of the same length N over the same field
+  F,  C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N,
+  K_i,  D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a
+  list  of  j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ...,
+  A_j-1  where  the  parameter  of  the ith code A_i is [n_i, k_i=(K_i-K_i+1),
+  d_i], an [n, K_1, d] linear code over field F can be constructed where n = N
+  +  sum_i=1^j-1  n_i,  and d = min D_j, D_j-1 + d_j-1, D_j-2 + d_j-2 + d_j-1,
+  ..., D_1 + sum_i=1^j-1 d_i.
+  
+  For more information on Construction X, refer to [SRC72].
+  
+  ---------------------------  Example  ----------------------------
+    gap> C1 := BCHCode(127, 43);
+    a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
+    gap> C2 := BCHCode(127, 47);
+    a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
+    gap> C3 := BCHCode(127, 55);
+    a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
+    gap> G1 := ShallowCopy( GeneratorMat(C2) );;
+    gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
+    gap> C1 := GeneratorMatCode(G1, GF(2));
+    a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
+    gap> MinimumDistance(C1);
+    43
+    gap> C := [ C1, C2, C3 ];
+    [ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
+      a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
+      a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
+    gap> IsSubset(C[1], C[2]);
+    true
+    gap> IsSubset(C[2], C[3]);
+    true
+    gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+    [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
+    gap> CX := ConstructionXCode(C, A);
+    a linear [148,23,53]43..74 Construction X code
+    gap> History(CX);
+    [ "a linear [148,23,53]43..74 Construction X code of", 
+      "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
+    , a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
+    [127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
+      "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
+    17,8,6]3..6 even weight subcode ]" ]
+  ------------------------------------------------------------------
+  
+  6.2-10 ConstructionXXCode
+  
+  > ConstructionXXCode( C1, C2, C3, A1, A2 ) _________________________function
+  
+  Consider  a  set of linear codes over field F of the same length, n, C_1=[n,
+  k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1,
+  C_3  subset  C_1  and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1,
+  k_1-k_2,  e_1]  and  A_2=[n_2,  k_1-k_3,  e_2]  over the same field F, there
+  exists  an  [n+n_1+n_2,  k_1,  d]  linear  code C_XX over field F, where d =
+  mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2.
+  
+  The  codewords  of C_XX can be partitioned into three sections ( v;|;a;|;b )
+  where v has length n, a has length n_1 and b has length n_2. A codeword from
+  Construction XX takes the following form:
+  
+  --    ( v ; | ; 0 ; | ; 0 ) if v in C_4
+  
+  --    ( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4
+  
+  --    ( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4
+  
+  --    ( v ; | ; a_1 ; | ; a_2 ) otherwise
+  
+  For more information on Construction XX, refer to [All84].
+  
+  ---------------------------  Example  ----------------------------
+    gap> a := PrimitiveRoot(GF(32));
+    Z(2^5)
+    gap> f0 := MinimalPolynomial( GF(2), a^0 );
+    x_1+Z(2)^0
+    gap> f1 := MinimalPolynomial( GF(2), a^1 );
+    x_1^5+x_1^2+Z(2)^0
+    gap> f5 := MinimalPolynomial( GF(2), a^5 );
+    x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
+    gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+    a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+    gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+    a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+    gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+    a linear [31,11,11]7..11 union code of
+    U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+    V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+    gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
+    a linear [10,5,4]2..4 shortened code
+    gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
+    a cyclic [6,5,2]1 dual code
+    gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+    a linear [47,11,15..17]13..23 Construction XX code
+    gap> MinimumDistance(CXX);
+    17
+    gap> History(CXX);        
+    [ "a linear [47,11,17]13..23 Construction XX code of", 
+      "C1: a cyclic [31,11,11]7..11 union code", 
+      "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+      "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+      "A1: a linear [10,5,4]2..4 shortened code", 
+      "A2: a cyclic [6,5,2]1 dual code" ]
+  ------------------------------------------------------------------
+  
+  6.2-11 BZCode
+  
+  > BZCode( O, I ) ___________________________________________________function
+  
+  Given  a  set  of  outer  codes  of the same length O_i = [N, K_i, D_i] over
+  GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i
+  =  [n,  k_i,  d_i]  over  GF(q),  BZCode  returns a Blokh-Zyablov multilevel
+  concatenated   code   with   parameter  [  n  x  N,  sum_i=1^t  e_i  x  K_i,
+  min_i=1,...,td_i x D_i ] over GF(q).
+  
+  Note  that  the  set of inner codes must satisfy chain condition, i.e. I_1 =
+  [n,  k_1,  d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t]
+  where  0=k_0  < k_1 < k_2 < ... < k_t. The dimension of the inner codes must
+  satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the
+  ith outer code.
+  
+  For more information on Blokh-Zyablov multilevel concatenated code, refer to
+  [Bro98].
+  
+  6.2-12 BZCodeNC
+  
+  > BZCodeNC( O, I ) _________________________________________________function
+  
+  This  function  is  the  same as BZCode, except this version is faster as it
+  does  not  estimate the covering radius of the code. Users are encouraged to
+  use this version unless you are working on very small codes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> #
+    gap> # Binary code
+    gap> #
+    gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+    [ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
+      a cyclic [9,4,6]4..5 MDS code over GF(8) ]
+    gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
+    gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+    [ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
+    gap> C := BZCodeNC(O, I);
+    a linear [72,38,12]0..72 Blokh Zyablov concatenated code
+    gap> #
+    gap> # Non binary code
+    gap> #
+    gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
+    gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
+    gap> O1 := DualCode( O3 );;
+    gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+    gap> Cy := CyclicCodes(5, GF(5));;
+    gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+    gap> O  := [ O1, O2, O3 ];
+    [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
+      a linear [6,2,5]3..4 extended code ]
+    gap> I  := [ Cy[5], Cy[4], Cy[3] ];
+    [ a cyclic [5,1,5]3..4 enumerated code over GF(5),
+      a cyclic [5,2,4]2..3 enumerated code over GF(5),
+      a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
+    gap> C  := BZCodeNC( O, I );
+    a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
+    gap> MinimumDistance(C);
+    15
+    gap> History(C);
+    [ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
+      "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
+    ,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
+    r GF(5) ]",
+      "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
+    ode, a linear [6,2,5]3..4 extended code ]" ]
+  ------------------------------------------------------------------
+  
diff --git a/doc/chap7.html b/doc/chap7.html
new file mode 100644
index 0000000..c3e8696
--- /dev/null
+++ b/doc/chap7.html
@@ -0,0 +1,1951 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 7: 
+Bounds on codes, special matrices and miscellaneous functions
+</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap6.html">Previous Chapter</a>    <a href="chapBib.html">Next Chapter</a>   </div>
+
+<p><a id="X7A814D518460862E" name="X7A814D518460862E"></a></p>
+<div class="ChapSects"><a href="chap7.html#X7A814D518460862E">7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X87C753EB840C34D3">7.1 <span class="Heading">
+Distance bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8673277C7F6C04C3">7.1-1 UpperBoundSingleton</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X828095537C91FDFA">7.1-2 UpperBoundHamming</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3 UpperBoundJohnson</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A26E2537DFF4409">7.1-4 UpperBoundPlotkin</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86A5A7C67F625A40">7.1-5 UpperBoundElias</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82366C277E218130">7.1-6 UpperBoundGriesmer</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8301FA9F7C6C7445">7.1-7 IsGriesmerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A5CB74485184FEE">7.1-8 UpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7FDF54BA81115D88">7.1-9 LowerBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CF15D2084499869">7.1-10 LowerBoundGilbertVarshamov</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8217D830871286D8">7.1-11 LowerBoundSpherePacking</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C6A58327BD6B685">7.1-12 UpperBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B3858B27A9E509A">7.1-13 BoundsMinimumDistance</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X817D0A647D3331EB">7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8320D1C180A1AAAD">7.2-1 BoundsCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7881E03E812140F4">7.2-2 IncreaseCoveringRadiusLowerBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3 ExhaustiveSearchCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85D671F4824B4B0C">7.2-4 GeneralLowerBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8638F5A67D6E50C1">7.2-5 GeneralUpperBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E7FBCC87D5562AB">7.2-6 LowerBoundCoveringRadiusSphereCovering</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E20C518360AB70">7.2-7 LowerBoundCoveringRadiusVanWee1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C72994A825228E7">7.2-8 LowerBoundCoveringRadiusVanWee2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F95362485759ACB">7.2-9 LowerBoundCoveringRadiusCountingExcess</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X829C14A383B5BF59">7.2-10 LowerBoundCoveringRadiusEmbedded1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B0C81B88604C448">7.2-11 LowerBoundCoveringRadiusEmbedded2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D27F6E27B9A0D35">7.2-12 LowerBoundCoveringRadiusInduction</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13 UpperBoundCoveringRadiusRedundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X832847A17FD0D142">7.2-14 UpperBoundCoveringRadiusDelsarte</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86F10D9E79AB8796">7.2-15 UpperBoundCoveringRadiusStrength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8585C6A982489FC3">7.2-16 UpperBoundCoveringRadiusGriesmerLike</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82A38F5F858CF3FC">7.2-17 UpperBoundCoveringRadiusCyclicCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X806EBEC77C16E657">7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82899B64802A4BCE">7.3-1 KrawtchoukMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87AFE2C078031CE4">7.3-2 GrayMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E1E7C5287919CDB">7.3-3 SylvesterMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8014A1F181ECD8AA">7.3-4 HadamardMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X797F43607AD8660D">7.3-5 VandermondeMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B47D82485B66F1D">7.3-6 PutStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7 IsInStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A97AD477E7638DE">7.3-8 PermutedCols</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B68119F85E9EC6D">7.3-9 VerticalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8033E9A67BA155C8">7.3-10 HorizontalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X804AAFF2867080F7">7.3-11 MOLS</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F34306B81DC2776">7.3-12 IsLatinSquare</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81B9B40B7B2D97D5">7.3-13 AreMOLS</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7AB5E5CE7FDF7132">7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8032E53078264ABB">7.4-1 CoordinateNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ED2EF368203AF47">7.4-2 CodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3 IsCoordinateAcceptable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87039FD179AD3009">7.4-4 GeneralizedCodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80283A2F7C8101BD">7.4-5 IsNormalCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X8308D685809A4E2F">7.5 <span class="Heading">
+Miscellaneous functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X871286437DE7A6A4">7.5-1 CodeWeightEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84DA928083B103A0">7.5-2 CodeDistanceEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84B2BE66780EFBF9">7.5-3 CodeMacWilliamsTransform</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7903286078F8051B">7.5-4 CodeDensity</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85303BAE7BD46D81">7.5-5 SphereContent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ACDC5377CD17451">7.5-6 Krawtchouk</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X827E39957A87EB51">7.5-7 PrimitiveUnityRoot</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78AEA40F7AD9D541">7.5-8 PrimitivePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A2B54EF868AA752">7.5-9 IrreduciblePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B50D3417F6FD7C6">7.5-10 MatrixRepresentationOfElement</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7805D2BB7CE4D455">7.5-11 ReciprocalPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12 CyclotomicCosets</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A4EA98D794CF410">7.5-13 WeightHistogram</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X805DF25C84585FD6">7.5-14 MultiplicityInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8072B0DA78FBE562">7.5-15 MostCommonInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C5407EF87849857">7.5-16 RotateList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E526367878F72A">7.5-17 CirculantMatrix</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7969103F7A8598F9">7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84D51EBB784E7C5D">7.6-1 MatrixTransformationOnMultivariatePolynomial </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80433A4B792880EF">7.6-2 DegreeMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X83F44E397C56F2E0">7.6-3 DegreesMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E9021697A61A60F">7.6-4 CoefficientMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79E76B6F7D177E27">7.6-5 SolveLinearSystem</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80171AA687FFDC70">7.6-6 GuavaVersion</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7EBBE86D85CC90C0">7.6-7 ZechLog</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8 CoefficientToPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8431985183B63BB7">7.6-9 DegreesMonomialTerm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X860EF39B841380A1">7.6-10 DivisorsMultivariatePolynomial</a></span>
+</div>
+</div>
+
+<h3>7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></h3>
+
+<p>In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section <a href="chap7.html#X87C753EB840C34D3"><b>7.1</b></a>), functions that determine bounds on the size and covering radius of codes (Section <a href="chap7.html#X817D0A647D3331EB"><b>7.2</b></a>), functions that work with special matrices <strong class="pkg">GUAVA</strong> needs for several codes (see Section <a href="chap7.html#X806EBEC77C16E657"><b>7.3</b></a>), and constructi [...]
+
+<p><a id="X87C753EB840C34D3" name="X87C753EB840C34D3"></a></p>
+
+<h4>7.1 <span class="Heading">
+Distance bounds on codes
+</span></h4>
+
+<p>This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist.</p>
+
+<p>A second way to obtain bounds is a table. In <strong class="pkg">GUAVA</strong>, an extensive table is implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to 257, 243 and 256 for codes over GF(2), GF(3) and GF(4) respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwe [...]
+
+<p>Firstly, we describe functions that compute specific upper bounds on the code size (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>), <code class="func">UpperBoundHamming</code> (<a href="chap7.html#X828095537C91FDFA"><b>7.1-2</b></a>), <code class="func">UpperBoundJohnson</code> (<a href="chap7.html#X82EBFAAB7F5BFD4A"><b>7.1-3</b></a>), <code class="func">UpperBoundPlotkin</code> (<a href="chap7.html#X7A26E2537DFF4409"><b>7.1 [...]
+
+<p>Next we describe a function that computes <strong class="pkg">GUAVA</strong>'s best upper bound on the code size (see <code class="func">UpperBound</code> (<a href="chap7.html#X7A5CB74485184FEE"><b>7.1-8</b></a>)).</p>
+
+<p>Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see <code class="func">LowerBoundMinimumDistance</code> (<a href="chap7.html#X7FDF54BA81115D88"><b>7.1-9</b></a>) and <code class="func">UpperBoundMinimumDistance</code> (<a href="chap7.html#X7C6A58327BD6B685"><b>7.1-12</b></a>)).</p>
+
+<p>Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>)).</p>
+
+<p><a id="X8673277C7F6C04C3" name="X8673277C7F6C04C3"></a></p>
+
+<h5>7.1-1 UpperBoundSingleton</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundSingleton</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundSingleton</code> returns the Singleton bound for a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var> over a field of size <var class="Arg">q</var>. This bound is based on the shortening of codes. By shortening an (n, M, d) code d-1 times, an (n-d+1,M,1) code results, with M <= q^n-d+1 (see <code class="func">ShortenedCode</code> (<a href="chap6.html#X81CBEAFF7B9DE6EF"><b>6.1-9</b></a>)). Thus</p>
+
+<p class="pcenter">
+M \leq q^{n-d+1}.
+</p>
+
+<p>Codes that meet this bound are called <em>maximum distance separable</em> (see <code class="func">IsMDSCode</code> (<a href="chap4.html#X789380D28018EC3F"><b>4.3-7</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundSingleton(4, 3, 5);
+25
+gap> C := ReedSolomonCode(4,3);; Size(C);
+25
+gap> IsMDSCode(C);
+true 
+</pre></td></tr></table>
+
+<p><a id="X828095537C91FDFA" name="X828095537C91FDFA"></a></p>
+
+<h5>7.1-2 UpperBoundHamming</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundHamming</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Hamming bound (also known as the <em>sphere packing bound</em>) returns an upper bound on the size of a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var>, over a field of size <var class="Arg">q</var>. The Hamming bound is obtained by dividing the contents of the entire space GF(q)^n by the contents of a ball with radius lfloor(d-1) / 2rfloor. As all these balls are disjoint, they can never contain more than the whole vector space.</p>
+
+<p class="pcenter">
+M \leq {q^n \over V(n,e)},
+</p>
+
+<p>where M is the maxmimum number of codewords and V(n,e) is equal to the contents of a ball of radius e (see <code class="func">SphereContent</code> (<a href="chap7.html#X85303BAE7BD46D81"><b>7.5-5</b></a>)). This bound is useful for small values of <var class="Arg">d</var>. Codes for which equality holds are called <em>perfect</em> (see <code class="func">IsPerfectCode</code> (<a href="chap4.html#X85E3BD26856424F7"><b>4.3-6</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundHamming( 15, 3, 2 );
+2048
+gap> C := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> Size( C );
+2048 
+</pre></td></tr></table>
+
+<p><a id="X82EBFAAB7F5BFD4A" name="X82EBFAAB7F5BFD4A"></a></p>
+
+<h5>7.1-3 UpperBoundJohnson</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundJohnson</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Johnson bound is an improved version of the Hamming bound (see <code class="func">UpperBoundHamming</code> (<a href="chap7.html#X828095537C91FDFA"><b>7.1-2</b></a>)). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius e around the elements of the code. The Johnson bound only works for binary codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundJohnson( 13, 5 );
+77
+gap> UpperBoundHamming( 13, 5, 2);
+89   # in this case the Johnson bound is better 
+</pre></td></tr></table>
+
+<p><a id="X7A26E2537DFF4409" name="X7A26E2537DFF4409"></a></p>
+
+<h5>7.1-4 UpperBoundPlotkin</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundPlotkin</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">UpperBoundPlotkin</code> calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in:</p>
+
+<p class="pcenter">
+M \leq {d \over {d-(1-1/q)n}},
+</p>
+
+<p>where M is the maximum number of codewords. In this case, <var class="Arg">d</var> must be larger than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundPlotkin( 15, 7, 2 );
+32
+gap> C := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> Size(C);
+32
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X86A5A7C67F625A40" name="X86A5A7C67F625A40"></a></p>
+
+<h5>7.1-5 UpperBoundElias</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundElias</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Elias bound is an improvement of the Plotkin bound (see <code class="func">UpperBoundPlotkin</code> (<a href="chap7.html#X7A26E2537DFF4409"><b>7.1-4</b></a>)) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundPlotkin( 16, 3, 2 );
+12288
+gap> UpperBoundElias( 16, 3, 2 );
+10280 
+gap> UpperBoundElias( 20, 10, 3 );
+16255
+</pre></td></tr></table>
+
+<p><a id="X82366C277E218130" name="X82366C277E218130"></a></p>
+
+<h5>7.1-6 UpperBoundGriesmer</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundGriesmer</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundGriesmer( 13, 5, 2 );
+64
+gap> UpperBoundGriesmer( 18, 9, 2 );
+8        # the maximum number of words for a linear code is 8
+gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+20       # this non-linear code has 20 elements 
+</pre></td></tr></table>
+
+<p><a id="X8301FA9F7C6C7445" name="X8301FA9F7C6C7445"></a></p>
+
+<h5>7.1-7 IsGriesmerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsGriesmerCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsGriesmerCode</code> returns `true' if a linear code <var class="Arg">C</var> is a Griesmer code, and `false' otherwise. A code is called <em>Griesmer</em> if its length satisfies</p>
+
+<p class="pcenter">
+n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7A5CB74485184FEE" name="X7A5CB74485184FEE"></a></p>
+
+<h5>7.1-8 UpperBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBound</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBound</code> returns the best known upper bound A(n,d) for the size of a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var> over a field of size <var class="Arg">q</var>. The function <code class="code">UpperBound</code> first checks for trivial cases (like d=1 or n=d), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see <code class="func">UpperBou [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBound( 10, 3, 2 );
+85
+gap> UpperBound( 25, 9, 8 );
+1211778792827540 
+</pre></td></tr></table>
+
+<p><a id="X7FDF54BA81115D88" name="X7FDF54BA81115D88"></a></p>
+
+<h5>7.1-9 LowerBoundMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundMinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this form, <code class="code">LowerBoundMinimumDistance</code> returns a lower bound for the minimum distance of code <var class="Arg">C</var>.</p>
+
+<p>This command can also be called using the syntax <code class="code">LowerBoundMinimumDistance( n, k, F )</code>. In this form, <code class="code">LowerBoundMinimumDistance</code> returns a lower bound for the minimum distance of the best known linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. It uses the mechanism explained in section <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 45, 7 );
+a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
+gap> LowerBoundMinimumDistance( C );
+7     # designed distance is lower bound for minimum distance 
+gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
+10 
+</pre></td></tr></table>
+
+<p><a id="X7CF15D2084499869" name="X7CF15D2084499869"></a></p>
+
+<h5>7.1-10 LowerBoundGilbertVarshamov</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundGilbertVarshamov</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each <var class="Arg">n</var> and <var class="Arg">d</var>, there exists a linear code having length n and minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LowerBoundGilbertVarshamov(3,2,2);
+4
+gap> LowerBoundGilbertVarshamov(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,2,2);
+2
+</pre></td></tr></table>
+
+<p><a id="X8217D830871286D8" name="X8217D830871286D8"></a></p>
+
+<h5>7.1-11 LowerBoundSpherePacking</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundSpherePacking</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each <var class="Arg">n</var> and <var class="Arg">r</var>, there exists an unrestricted code at least of size q^n/ SphereContent(n,d,GF(q)) minimum distance d.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LowerBoundSpherePacking(3,2,2);
+2
+gap> LowerBoundSpherePacking(3,3,2);
+1
+</pre></td></tr></table>
+
+<p><a id="X7C6A58327BD6B685" name="X7C6A58327BD6B685"></a></p>
+
+<h5>7.1-12 UpperBoundMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundMinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this form, <code class="code">UpperBoundMinimumDistance</code> returns an upper bound for the minimum distance of code <var class="Arg">C</var>. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>).</p>
+
+<p>This command can also be called using the syntax <code class="code">UpperBoundMinimumDistance( n, k, F )</code>. In this form, <code class="code">UpperBoundMinimumDistance</code> returns an upper bound for the minimum distance of the best known linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. It uses the mechanism explained in section <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 45, 7 );;
+gap> UpperBoundMinimumDistance( C );
+9 
+gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
+11 
+</pre></td></tr></table>
+
+<p><a id="X7B3858B27A9E509A" name="X7B3858B27A9E509A"></a></p>
+
+<h5>7.1-13 BoundsMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BoundsMinimumDistance</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">BoundsMinimumDistance</code> calculates a lower and upper bound for the minimum distance of an optimal linear code with word length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The function returns a record with the two bounds and an explanation for each bound. The function <code class="code">Display</code> can be used to show the explanations.</p>
+
+<p>The values for the lower and upper bound are obtained from a table. <strong class="pkg">GUAVA</strong> has tables containing lower and upper bounds for q=2 (n <= 257), 3 (n <= 243), 4 (n <= 256). (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See <a href="chapBib.html#biBBr">[Bro06]</a>, <span class="URL"><a href="http://www.win.tue.nl/~aeb/voorlincod.html">http://www.win.tue.nl/~aeb/voorlincod.html</a></span> for the most recent data.) For [...]
+
+<p>The resulting record can be used in the function <code class="code">BestKnownLinearCode</code> (see <code class="func">BestKnownLinearCode</code> (<a href="chap5.html#X871508567CB34D96"><b>5.2-14</b></a>)) to construct a code with minimum distance equal to the lower bound.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
+an optimal linear [7,3,d] code over GF(2) has d=4
+------------------------------------------------------------------------------
+Lb(7,3)=4, by shortening of:
+Lb(8,4)=4, u u+v construction of C1 and C2:
+Lb(4,3)=2, dual of the repetition code
+Lb(4,1)=4, repetition code
+------------------------------------------------------------------------------
+Ub(7,3)=4, Griesmer bound
+# The lower bound is equal to the upper bound, so a code with
+# these parameters is optimal.
+gap> C := BestKnownLinearCode( bounds );; Display( C );
+a linear [7,3,4]2..3 shortened code of
+a linear [8,4,4]2 U U+V construction code of
+U: a cyclic [4,3,2]1 dual code of
+   a cyclic [4,1,4]2 repetition code over GF(2)
+V: a cyclic [4,1,4]2 repetition code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X817D0A647D3331EB" name="X817D0A647D3331EB"></a></p>
+
+<h4>7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></h4>
+
+<p><a id="X8320D1C180A1AAAD" name="X8320D1C180A1AAAD"></a></p>
+
+<h5>7.2-1 BoundsCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BoundsCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BoundsCoveringRadius</code> returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of <var class="Arg">C</var>, the last entry the minimum of some upper bounds of <var class="Arg">C</var>.</p>
+
+<p>If the covering radius of <var class="Arg">C</var> is known, a list of length 1 is returned. <code class="code">BoundsCoveringRadius</code> makes use of the functions <code class="code">GeneralLowerBoundCoveringRadius</code> and <code class="code">GeneralUpperBoundCoveringRadius</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
+[ 3 .. 4 ]
+gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
+[ 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X7881E03E812140F4" name="X7881E03E812140F4"></a></p>
+
+<h5>7.2-2 IncreaseCoveringRadiusLowerBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IncreaseCoveringRadiusLowerBound</code>( <var class="Arg">C[, stopdist][, startword]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IncreaseCoveringRadiusLowerBound</code> tries to increase the lower bound of the covering radius of <var class="Arg">C</var>. It does this by means of a probabilistic algorithm. This algorithm takes a random word in GF(q)^n (or <var class="Arg">startword</var> if it is specified), and, by changing random coordinates, tries to get as far from <var class="Arg">C</var> as possible. If changing a coordinate finds a word that has a larger distance to the code than the pr [...]
+
+<p>If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an <em>orphan</em>).</p>
+
+<p>If the algorithm finds a word that has distance <var class="Arg">stopdist</var> to the code, it ends and returns that word, which can be used for further investigations.</p>
+
+<p>The variable <var class="Arg">InfoCoveringRadius</var> can be set to <var class="Arg">Print</var> to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with <strong class="button">ctrl-C</strong>, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is i, then it correspon [...]
+
+<p>At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be <em>very</em> patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable <var class="Arg">CRMemSize</var> to a lower value. This might cause the algorithm to run slower, but without quitting GAP. T [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> IncreaseCoveringRadiusLowerBound(C,10);
+Number of runs: 1000  best distance so far: 3
+Number of runs: 2000  best distance so far: 3
+Number of changes: 100
+Number of runs: 3000  best distance so far: 3
+Number of runs: 4000  best distance so far: 3
+Number of runs: 5000  best distance so far: 3
+Number of runs: 6000  best distance so far: 3
+Number of runs: 7000  best distance so far: 3
+Number of changes: 200
+Number of runs: 8000  best distance so far: 3
+Number of runs: 9000  best distance so far: 3
+Number of runs: 10000  best distance so far: 3
+Number of changes: 300
+Number of runs: 11000  best distance so far: 3
+Number of runs: 12000  best distance so far: 3
+Number of runs: 13000  best distance so far: 3
+Number of changes: 400
+Number of runs: 14000  best distance so far: 3
+user interrupt at... 
+#
+# used ctrl-c to break out of execution
+#
+... called from 
+IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
+ function( arguments ) called from read-eval-loop
+Entering break read-eval-print loop ...
+you can 'quit;' to quit to outer loop, or
+you can 'return;' to continue
+brk> current;
+[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+brk>
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X7AD9F1D27C52BC0F" name="X7AD9F1D27C52BC0F"></a></p>
+
+<h5>7.2-3 ExhaustiveSearchCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExhaustiveSearchCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExhaustiveSearchCoveringRadius</code> does an exhaustive search to find the covering radius of <var class="Arg">C</var>. Every time a coset leader of a coset with weight w is found, the function tries to find a coset leader of a coset with weight w+1. It does this by enumerating all words of weight w+1, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> ExhaustiveSearchCoveringRadius(C);
+Trying 3 ...
+[ 3 .. 5 ]
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X85D671F4824B4B0C" name="X85D671F4824B4B0C"></a></p>
+
+<h5>7.2-4 GeneralLowerBoundCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralLowerBoundCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralLowerBoundCoveringRadius</code> returns a lower bound on the covering radius of <var class="Arg">C</var>. It uses as many functions which names start with <code class="code">LowerBoundCoveringRadius</code> as possible to find the best known lower bound (at least that <strong class="pkg">GUAVA</strong> knows of) together with tables for the covering radius of binary linear codes with length not greater than 64.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralLowerBoundCoveringRadius(C);
+2
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X8638F5A67D6E50C1" name="X8638F5A67D6E50C1"></a></p>
+
+<h5>7.2-5 GeneralUpperBoundCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralUpperBoundCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralUpperBoundCoveringRadius</code> returns an upper bound on the covering radius of <var class="Arg">C</var>. It uses as many functions which names start with <code class="code">UpperBoundCoveringRadius</code> as possible to find the best known upper bound (at least that <strong class="pkg">GUAVA</strong> knows of).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralUpperBoundCoveringRadius(C);
+4
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X7E7FBCC87D5562AB" name="X7E7FBCC87D5562AB"></a></p>
+
+<h5>7.2-6 LowerBoundCoveringRadiusSphereCovering</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusSphereCovering</code>( <var class="Arg">n, M[, F], false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusSphereCovering</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and c [...]
+
+<p><var class="Arg">F</var> is the field over which the code is defined. If <var class="Arg">F</var> is omitted, it is assumed that the code is over GF(2). The bound is computed according to the sphere covering bound:</p>
+
+<p class="pcenter">
+M \cdot V_q(n,r) \geq q^n
+</p>
+
+<p>where V_q(n,r) is the size of a sphere of radius r in GF(q)^n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+6
+
+</pre></td></tr></table>
+
+<p><a id="X85E20C518360AB70" name="X85E20C518360AB70"></a></p>
+
+<h5>7.2-7 LowerBoundCoveringRadiusVanWee1</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusVanWee1</code>( <var class="Arg">n, M[, F], false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusVanWee1( n, r, [F,] true )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusVanWee1</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius [...]
+
+<p><var class="Arg">F</var> is the field over which the code is defined. If <var class="Arg">F</var> is omitted, it is assumed that the code is over GF(2).</p>
+
+<p>The Van Wee bound is an improvement of the sphere covering bound:</p>
+
+<p class="pcenter">
+M \cdot \left\{ V_q(n,r) -
+\frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil}
+\left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right)
+\right\} \geq q^n
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+6
+
+</pre></td></tr></table>
+
+<p><a id="X7C72994A825228E7" name="X7C72994A825228E7"></a></p>
+
+<h5>7.2-8 LowerBoundCoveringRadiusVanWee2</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusVanWee2</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusVanWee2( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusVanWee2</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <v [...]
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right)
+V_2(n,r) + \varepsilon
+V_2(n,r-2) \right)}
+{(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)}
+\geq 2^n,
+</p>
+
+<p>where</p>
+
+<p class="pcenter">
+\varepsilon = {r+2 \choose 2} \left\lceil
+{n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil
+- {n-r+1 \choose 2}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7F95362485759ACB" name="X7F95362485759ACB"></a></p>
+
+<h5>7.2-9 LowerBoundCoveringRadiusCountingExcess</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusCountingExcess</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusCountingExcess( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusCountingExcess</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius  [...]
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq
+(\rho + \varepsilon) 2^n,
+</p>
+
+<p>where</p>
+
+<p class="pcenter">
+\varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)
+</p>
+
+<p>and</p>
+
+<p class="pcenter">
+\rho = \left\{
+\begin{array}{l}
+n-3+\frac{2}{n}, \ \ \  \ \ \  {\rm if}\   r = 2\\
+n-r-1  ,        \ \ \  \ \ \   {\rm if}\   r \geq 3 .
+\end{array}
+\right.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
+0
+gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X829C14A383B5BF59" name="X829C14A383B5BF59"></a></p>
+
+<h5>7.2-10 LowerBoundCoveringRadiusEmbedded1</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusEmbedded1</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusEmbedded1( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is 'false', then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq
+2^n - A( n, 2r+1 ) {2r \choose r},
+</p>
+
+<p>where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function <code class="code">UpperBound</code> is used to compute this value.</p>
+
+<p>Sometimes <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is better than <code class="code">LowerBoundCoveringRadiusEmbedded2</code>, sometimes it is the other way around.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7B0C81B88604C448" name="X7B0C81B88604C448"></a></p>
+
+<h5>7.2-11 LowerBoundCoveringRadiusEmbedded2</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusEmbedded2</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusEmbedded2( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusEmbedded2</code> is 'false', then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq
+2^n - 2A( n, 2r+1 ) {2r \choose r},
+</p>
+
+<p>where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function <code class="code">UpperBound</code> is used to compute this value.</p>
+
+<p>Sometimes <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is better than <code class="code">LowerBoundCoveringRadiusEmbedded2</code>, sometimes it is the other way around.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+6
+gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7D27F6E27B9A0D35" name="X7D27F6E27B9A0D35"></a></p>
+
+<h5>7.2-12 LowerBoundCoveringRadiusInduction</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusInduction</code>( <var class="Arg">n, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LowerBoundCoveringRadiusInduction</code> returns a lower bound for the size of a code with length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>If n = 2r+2 and r >= 1, the returned value is 4.</p>
+
+<p>If n = 2r+3 and r >= 1, the returned value is 7.</p>
+
+<p>If n = 2r+4 and r >= 4, the returned value is 8.</p>
+
+<p>Otherwise, 0 is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> LowerBoundCoveringRadiusInduction(15,6);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X80F8DFAD7D67CBEC" name="X80F8DFAD7D67CBEC"></a></p>
+
+<h5>7.2-13 UpperBoundCoveringRadiusRedundancy</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusRedundancy</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusRedundancy</code> returns the redundancy of <var class="Arg">C</var> as an upper bound for the covering radius of <var class="Arg">C</var>. <var class="Arg">C</var> must be a linear code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusRedundancy(C);
+10
+
+</pre></td></tr></table>
+
+<p><a id="X832847A17FD0D142" name="X832847A17FD0D142"></a></p>
+
+<h5>7.2-14 UpperBoundCoveringRadiusDelsarte</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusDelsarte</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusDelsarte</code> returns an upper bound for the covering radius of <var class="Arg">C</var>. This upper bound is equal to the external distance of <var class="Arg">C</var>, this is the minimum distance of the dual code, if <var class="Arg">C</var> is a linear code.</p>
+
+<p>This is described in Theorem 11.3.3 of <a href="chapBib.html#biBHP03">[HP03]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusDelsarte(C);
+13
+</pre></td></tr></table>
+
+<p><a id="X86F10D9E79AB8796" name="X86F10D9E79AB8796"></a></p>
+
+<h5>7.2-15 UpperBoundCoveringRadiusStrength</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusStrength</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusStrength</code> returns an upper bound for the covering radius of <var class="Arg">C</var>.</p>
+
+<p>First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has <em>strength</em> 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns fracq-1qm + (n-m) (where q is the size of the field and m is the length of punctured code), otherwise it returns n. This bound works for all codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusStrength(C);
+7
+</pre></td></tr></table>
+
+<p><a id="X8585C6A982489FC3" name="X8585C6A982489FC3"></a></p>
+
+<h5>7.2-16 UpperBoundCoveringRadiusGriesmerLike</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusGriesmerLike</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns an upper bound for the covering radius of <var class="Arg">C</var>, which must be linear, in a Griesmer-like fashion. It returns</p>
+
+<p class="pcenter">
+n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusGriesmerLike(C);
+9
+
+</pre></td></tr></table>
+
+<p><a id="X82A38F5F858CF3FC" name="X82A38F5F858CF3FC"></a></p>
+
+<h5>7.2-17 UpperBoundCoveringRadiusCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusCyclicCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns an upper bound for the covering radius of <var class="Arg">C</var>, which must be a cyclic code. It returns</p>
+
+<p class="pcenter">
+n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,
+</p>
+
+<p>where g(x) is the generator polynomial of <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=CyclicCodes(15,GF(2))[3];
+a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
+gap> CoveringRadius(C);
+3
+gap> UpperBoundCoveringRadiusCyclicCode(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X806EBEC77C16E657" name="X806EBEC77C16E657"></a></p>
+
+<h4>7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></h4>
+
+<p>This section explains functions that work with special matrices <strong class="pkg">GUAVA</strong> needs for several codes.</p>
+
+<p>Firstly, we describe some matrix generating functions (see <code class="func">KrawtchoukMat</code> (<a href="chap7.html#X82899B64802A4BCE"><b>7.3-1</b></a>), <code class="func">GrayMat</code> (<a href="chap7.html#X87AFE2C078031CE4"><b>7.3-2</b></a>), <code class="func">SylvesterMat</code> (<a href="chap7.html#X7E1E7C5287919CDB"><b>7.3-3</b></a>), <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>) and <code class="func">MOLS</code> (<a href= [...]
+
+<p>Next we describe two functions regarding a standard form of matrices (see <code class="func">PutStandardForm</code> (<a href="chap7.html#X7B47D82485B66F1D"><b>7.3-6</b></a>) and <code class="func">IsInStandardForm</code> (<a href="chap7.html#X7D4EDA0A854EBFEF"><b>7.3-7</b></a>)).</p>
+
+<p>Then we describe functions that return a matrix after a manipulation (see <code class="func">PermutedCols</code> (<a href="chap7.html#X7A97AD477E7638DE"><b>7.3-8</b></a>), <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>) and <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>)).</p>
+
+<p>Finally, we describe functions that do some tests on matrices (see <code class="func">IsLatinSquare</code> (<a href="chap7.html#X7F34306B81DC2776"><b>7.3-12</b></a>) and <code class="func">AreMOLS</code> (<a href="chap7.html#X81B9B40B7B2D97D5"><b>7.3-13</b></a>)).</p>
+
+<p><a id="X82899B64802A4BCE" name="X82899B64802A4BCE"></a></p>
+
+<h5>7.3-1 KrawtchoukMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> KrawtchoukMat</code>( <var class="Arg">n, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">KrawtchoukMat</code> returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j) for i,j=0,...,n. K_i(j) is the Krawtchouk number (see <code class="func">Krawtchouk</code> (<a href="chap7.html#X7ACDC5377CD17451"><b>7.5-6</b></a>)). <var class="Arg">n</var> must be a positive integer and <var class="Arg">q</var> a prime power. The Krawtchouk matrix is used in the <em>MacWilliams identities</em>, defining the relation between the weight distribution of a code of len [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrintArray( KrawtchoukMat( 3, 2 ) );
+[ [   1,   1,   1,   1 ],
+  [   3,   1,  -1,  -3 ],
+  [   3,  -1,  -1,   3 ],
+  [   1,  -1,   1,  -1 ] ]
+gap> C := HammingCode( 3 );; a := WeightDistribution( C );
+[ 1, 0, 0, 7, 7, 0, 0, 1 ]
+gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+gap> k := Dimension( C );;
+gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
+[ 1, 0, 0, 0, 7, 0, 0, 0 ]
+gap> WeightDistribution( DualCode( C ) );
+[ 1, 0, 0, 0, 7, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X87AFE2C078031CE4" name="X87AFE2C078031CE4"></a></p>
+
+<h5>7.3-2 GrayMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GrayMat</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GrayMat</code> returns a list of all different vectors (see GAP's <code class="code">Vectors</code> command) of length <var class="Arg">n</var> over the field <var class="Arg">F</var>, using Gray ordering. <var class="Arg">n</var> must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to <code class="code">GrayMat</code> returns a new matrix, so it is saf [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> GrayMat(3);
+[ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
+  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
+gap> G := GrayMat( 4, GF(4) );; Length(G);
+256          # the length of a GrayMat is always q^n
+gap> G[101] - G[100];
+[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 
+</pre></td></tr></table>
+
+<p><a id="X7E1E7C5287919CDB" name="X7E1E7C5287919CDB"></a></p>
+
+<h5>7.3-3 SylvesterMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SylvesterMat</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SylvesterMat</code> returns the nx n Sylvester matrix of order <var class="Arg">n</var>. This is a special case of the Hadamard matrices (see <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>)). For this construction, <var class="Arg">n</var> must be a power of 2. Each call to <code class="code">SylvesterMat</code> returns a new matrix, so it is safe to modify the result.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrintArray(SylvesterMat(2));
+[ [   1,   1 ],
+  [   1,  -1 ] ]
+gap> PrintArray( SylvesterMat(4) );
+[ [   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X8014A1F181ECD8AA" name="X8014A1F181ECD8AA"></a></p>
+
+<h5>7.3-4 HadamardMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HadamardMat</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HadamardMat</code> returns a Hadamard matrix of order <var class="Arg">n</var>. This is an nx n matrix with the property that the matrix multiplied by its transpose returns <var class="Arg">n</var> times the identity matrix. This is only possible for n=1, n=2 or in cases where <var class="Arg">n</var> is a multiple of 4. If the matrix does not exist or is not known (as of 1998), <code class="code">HadamardMat</code> returns an error. A large number of construction m [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HadamardMat(8);; PrintArray(C);
+[ [   1,   1,   1,   1,   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
+  [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
+  [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
+  [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
+  [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
+gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X797F43607AD8660D" name="X797F43607AD8660D"></a></p>
+
+<h5>7.3-5 VandermondeMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VandermondeMat</code>( <var class="Arg">X, a</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">VandermondeMat</code> returns the (a+1)x n matrix of powers x_i^j where <var class="Arg">X</var> is a list of elements of a field, X= x_1,...,x_n, and <var class="Arg">a</var> is a non-negative integer.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+[ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
+  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
+gap> Display(M);
+ 1 2 4
+ 1 4 1
+ 1 1 1
+ 1 3 4
+</pre></td></tr></table>
+
+<p><a id="X7B47D82485B66F1D" name="X7B47D82485B66F1D"></a></p>
+
+<h5>7.3-6 PutStandardForm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PutStandardForm</code>( <var class="Arg">M[, idleft]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>We say that a kx n matrix is in <em>standard form</em> if it is equal to the block matrix (I | A), for some kx (n-k) matrix A and where I is the kx k identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. <code class="code">PutStandardForm</code> puts a matrix <var class="Arg">M</var> in standard form, and returns the permutation needed to do so. [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
+gap> PutStandardForm(M);                   # identity at the left side
+(2,3)
+gap> PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> PutStandardForm(M, false);            # identity at the right side
+(1,4,3)
+gap> PrintArray(M);
+[ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> C := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G:=MutableCopyMat(GeneratorMat(C));;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+
+</pre></td></tr></table>
+
+<p><a id="X7D4EDA0A854EBFEF" name="X7D4EDA0A854EBFEF"></a></p>
+
+<h5>7.3-7 IsInStandardForm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsInStandardForm</code>( <var class="Arg">M[, idleft]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsInStandardForm</code> determines if <var class="Arg">M</var> is in standard form. <var class="Arg">idleft</var> is a boolean that indicates the position of the identity matrix in <var class="Arg">M</var>, as in <code class="code">PutStandardForm</code> (see <code class="func">PutStandardForm</code> (<a href="chap7.html#X7B47D82485B66F1D"><b>7.3-6</b></a>)). <code class="code">IsInStandardForm</code> checks if the identity matrix is at the left side of <var class=" [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsInStandardForm(IdentityMat(7, GF(2)));
+true
+gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
+true
+gap> IsInStandardForm([[1, 3, 2, 7]]);
+true
+gap> IsInStandardForm(HadamardMat(4));
+false 
+</pre></td></tr></table>
+
+<p><a id="X7A97AD477E7638DE" name="X7A97AD477E7638DE"></a></p>
+
+<h5>7.3-8 PermutedCols</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutedCols</code>( <var class="Arg">M, P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutedCols</code> returns a matrix <var class="Arg">M</var> with a permutation <var class="Arg">P</var> applied to its columns.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
+[ [  1,  2,  3,  4 ],
+  [  1,  2,  3,  4 ] ]
+gap> PrintArray(PermutedCols(M, (1,2,3)));
+[ [  3,  1,  2,  4 ],
+  [  3,  1,  2,  4 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7B68119F85E9EC6D" name="X7B68119F85E9EC6D"></a></p>
+
+<h5>7.3-9 VerticalConversionFieldMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VerticalConversionFieldMat</code>( <var class="Arg">M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">VerticalConversionFieldMat</code> returns the matrix <var class="Arg">M</var> with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the GF(p)-vector space isomorphism</p>
+
+<p class="pcenter">
+
+[...] : GF(q)\rightarrow GF(p)^m,
+</p>
+
+<p>with q=p^m.</p>
+
+<p>If <var class="Arg">M</var> is a k by n matrix, the result is a k* m x n matrix, since each element of GF(q^m) can be represented in GF(q) using m elements.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
+[ [  0*Z(3),  0*Z(3) ],
+  [  Z(3)^0,    Z(3) ],
+  [  0*Z(3),  0*Z(3) ],
+  [    Z(3),  Z(3)^0 ] ]
+gap> DefaultField( Flat(VCFM) );
+GF(3) 
+</pre></td></tr></table>
+
+<p>A similar function is <code class="code">HorizontalConversionFieldMat</code> (see <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>)).</p>
+
+<p><a id="X8033E9A67BA155C8" name="X8033E9A67BA155C8"></a></p>
+
+<h5>7.3-10 HorizontalConversionFieldMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HorizontalConversionFieldMat</code>( <var class="Arg">M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HorizontalConversionFieldMat</code> returns the matrix <var class="Arg">M</var> with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed horizontally in the matrix.</p>
+
+<p>If <var class="Arg">M</var> is a k x n matrix, the result is a kx mx n* m matrix. The new word length of the resulting code is equal to n* m, because each element of GF(q^m) can be represented in GF(q) using m elements. The new dimension is equal to kx m because the new matrix should be a basis for the same number of vectors as the old one.</p>
+
+<p><code class="code">ConversionFieldCode</code> uses horizontal conversion to convert a code (see <code class="func">ConversionFieldCode</code> (<a href="chap6.html#X81FE1F387DFCCB22"><b>6.1-15</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
+[ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
+  [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
+  [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
+  [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
+gap> DefaultField( Flat(HCFM) );
+GF(3) 
+</pre></td></tr></table>
+
+<p>A similar function is <code class="code">VerticalConversionFieldMat</code> (see <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>)).</p>
+
+<p><a id="X804AAFF2867080F7" name="X804AAFF2867080F7"></a></p>
+
+<h5>7.3-11 MOLS</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MOLS</code>( <var class="Arg">q[, n]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MOLS</code> returns a list of <var class="Arg">n</var> <em>Mutually Orthogonal Latin Squares</em> (MOLS). A <em>Latin square</em> of order <var class="Arg">q</var> is a qx q matrix whose entries are from a set F_q of <var class="Arg">q</var> distinct symbols (<strong class="pkg">GUAVA</strong> uses the integers from 0 to <var class="Arg">q</var>) such that each row and each column of the matrix contains each symbol exactly once.</p>
+
+<p>A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once.</p>
+
+<p><var class="Arg">n</var> must be less than <var class="Arg">q</var>. If <var class="Arg">n</var> is omitted, two MOLS are returned. If <var class="Arg">q</var> is not a prime power, at most 2 MOLS can be created. For all values of <var class="Arg">q</var> with q > 2 and q <> 6, a list of MOLS can be constructed. However, <strong class="pkg">GUAVA</strong> does not yet construct MOLS for q= 2 mod 4. If it is not possible to construct <var class="Arg">n</var> MOLS, the function [...]
+
+<p>MOLS are used to create <var class="Arg">q</var>-ary codes (see <code class="func">MOLSCode</code> (<a href="chap5.html#X81B7EE4279398F67"><b>5.1-4</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
+[ [  0,  1,  2,  3 ],
+  [  1,  0,  3,  2 ],
+  [  2,  3,  0,  1 ],
+  [  3,  2,  1,  0 ] ]
+gap> PrintArray( M[2] );
+[ [  0,  2,  3,  1 ],
+  [  1,  3,  2,  0 ],
+  [  2,  0,  1,  3 ],
+  [  3,  1,  0,  2 ] ]
+gap> PrintArray( M[3] );
+[ [  0,  3,  1,  2 ],
+  [  1,  2,  0,  3 ],
+  [  2,  1,  3,  0 ],
+  [  3,  0,  2,  1 ] ]
+gap> MOLS( 12, 3 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7F34306B81DC2776" name="X7F34306B81DC2776"></a></p>
+
+<h5>7.3-12 IsLatinSquare</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsLatinSquare</code>( <var class="Arg">M</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsLatinSquare</code> determines if a matrix <var class="Arg">M</var> is a Latin square. For a Latin square of size nx n, each row and each column contains all the integers 1,dots,n exactly once.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsLatinSquare([[1,2],[2,1]]);
+true
+gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
+false 
+</pre></td></tr></table>
+
+<p><a id="X81B9B40B7B2D97D5" name="X81B9B40B7B2D97D5"></a></p>
+
+<h5>7.3-13 AreMOLS</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AreMOLS</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AreMOLS</code> determines if <var class="Arg">L</var> is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function <code class="code">MOLS</code> creates MOLS (see <code class="func">MOLS</code> (<a href="chap7.html#X804AAFF2867080F7"><b>7.3-11</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := MOLS(4,2);
+[ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
+  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
+gap> AreMOLS(M);
+true 
+</pre></td></tr></table>
+
+<p><a id="X7AB5E5CE7FDF7132" name="X7AB5E5CE7FDF7132"></a></p>
+
+<h4>7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></h4>
+
+<p>In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane <a href="chapBib.html#biBGS85">[GS85]</a>.</p>
+
+<p><a id="X8032E53078264ABB" name="X8032E53078264ABB"></a></p>
+
+<h5>7.4-1 CoordinateNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoordinateNorm</code>( <var class="Arg">C, coord</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CoordinateNorm</code> returns the norm of <var class="Arg">C</var> with respect to coordinate <var class="Arg">coord</var>. If C_a = c in C | c_coord = a, then the norm of <var class="Arg">C</var> with respect to <var class="Arg">coord</var> is defined as</p>
+
+<p class="pcenter">
+\max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),
+</p>
+
+<p>with the convention that d(x,C_a) = n if C_a is empty.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
+3 
+</pre></td></tr></table>
+
+<p><a id="X7ED2EF368203AF47" name="X7ED2EF368203AF47"></a></p>
+
+<h5>7.4-2 CodeNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeNorm</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeNorm</code> returns the norm of <var class="Arg">C</var>. The <em>norm</em> of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate <code class="code">CoordinateNorm</code> is called, and the minimum of the calculated numbers is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeNorm( HammingCode( 3, GF(2) ) );
+3 
+</pre></td></tr></table>
+
+<p><a id="X7D24F8BF7F9A7BF1" name="X7D24F8BF7F9A7BF1"></a></p>
+
+<h5>7.4-3 IsCoordinateAcceptable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCoordinateAcceptable</code>( <var class="Arg">C, coord</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCoordinateAcceptable</code> returns `true' if coordinate <var class="Arg">coord</var> of <var class="Arg">C</var> is acceptable. A coordinate is called <em>acceptable</em> if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X87039FD179AD3009" name="X87039FD179AD3009"></a></p>
+
+<h5>7.4-4 GeneralizedCodeNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedCodeNorm</code>( <var class="Arg">C, subcode1, subscode2, ..., subcodek</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedCodeNorm</code> returns the <var class="Arg">k</var>-norm of <var class="Arg">C</var> with respect to <var class="Arg">k</var> subcodes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := RepetitionCode( 7, GF(2) );;
+gap> ham := HammingCode( 3, GF(2) );;
+gap> d := EvenWeightSubcode( ham );;
+gap> e := ConstantWeightSubcode( ham, 3 );;
+gap> GeneralizedCodeNorm( ham, c, d, e );
+4 
+</pre></td></tr></table>
+
+<p><a id="X80283A2F7C8101BD" name="X80283A2F7C8101BD"></a></p>
+
+<h5>7.4-5 IsNormalCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsNormalCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsNormalCode</code> returns `true' if <var class="Arg">C</var> is normal. A code is called <em>normal</em> if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found.</p>
+
+<p>Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, <code class="code">IsNormalCode</code> uses much information from the literature (in particular, <a href="chapBib.html#biBGS85">[GS85]</a>) about normality for certain code parameters.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsNormalCode( HammingCode( 3, GF(2) ) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X8308D685809A4E2F" name="X8308D685809A4E2F"></a></p>
+
+<h4>7.5 <span class="Heading">
+Miscellaneous functions
+</span></h4>
+
+<p>In this section we describe several vector space functions <strong class="pkg">GUAVA</strong> uses for constructing codes or performing calculations with codes.</p>
+
+<p>In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes.</p>
+
+<p><a id="X871286437DE7A6A4" name="X871286437DE7A6A4"></a></p>
+
+<h5>7.5-1 CodeWeightEnumerator</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeWeightEnumerator</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeWeightEnumerator</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} A_i x^i,
+</p>
+
+<p>where A_i is the number of codewords in <var class="Arg">C</var> with weight i.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
+> [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
+x^3 + x^2 + x + 1
+gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
+x^7 + 7*x^4 + 7*x^3 + 1 
+</pre></td></tr></table>
+
+<p><a id="X84DA928083B103A0" name="X84DA928083B103A0"></a></p>
+
+<h5>7.5-2 CodeDistanceEnumerator</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeDistanceEnumerator</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeDistanceEnumerator</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} B_i x^i,
+</p>
+
+<p>where B_i is the number of codewords with distance i to <var class="Arg">w</var>.</p>
+
+<p>If <var class="Arg">w</var> is a codeword, then <code class="code">CodeDistanceEnumerator</code> returns the same polynomial as <code class="code">CodeWeightEnumerator</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
+x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
+x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'
+</pre></td></tr></table>
+
+<p><a id="X84B2BE66780EFBF9" name="X84B2BE66780EFBF9"></a></p>
+
+<h5>7.5-3 CodeMacWilliamsTransform</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeMacWilliamsTransform</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeMacWilliamsTransform</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} C_i x^i,
+</p>
+
+<p>where C_i is the number of codewords with weight i in the <em>dual</em> code of <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
+7*x^4 + 1 
+</pre></td></tr></table>
+
+<p><a id="X7903286078F8051B" name="X7903286078F8051B"></a></p>
+
+<h5>7.5-4 CodeDensity</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeDensity</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeDensity</code> returns the <em>density</em> of <var class="Arg">C</var>. The density of a code is defined as</p>
+
+<p class="pcenter">
+\frac{M \cdot V_q(n,t)}{q^n},
+</p>
+
+<p>where M is the size of the code, V_q(n,t) is the size of a sphere of radius t in GF(q^n) (which may be computed using <code class="code">SphereContent</code>), t is the covering radius of the code and n is the length of the code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeDensity( HammingCode( 3, GF(2) ) );
+1
+gap> CodeDensity( ReedMullerCode( 1, 4 ) );
+14893/2048 
+</pre></td></tr></table>
+
+<p><a id="X85303BAE7BD46D81" name="X85303BAE7BD46D81"></a></p>
+
+<h5>7.5-5 SphereContent</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SphereContent</code>( <var class="Arg">n, t, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SphereContent</code> returns the content of a ball of radius <var class="Arg">t</var> around an arbitrary element of the vectorspace F^n. This is the cardinality of the set of all elements of F^n that are at distance (see <code class="func">DistanceCodeword</code> (<a href="chap3.html#X7CDA1B547D55E6FB"><b>3.6-2</b></a>) less than or equal to <var class="Arg">t</var> from an element of F^n.</p>
+
+<p>In the context of codes, the function is used to determine if a code is perfect. A code is <em>perfect</em> if spheres of radius t around all codewords partition the whole ambient vector space, where <em>t</em> is the number of errors the code can correct.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> SphereContent( 15, 0, GF(2) );
+1    # Only one word with distance 0, which is the word itself
+gap> SphereContent( 11, 3, GF(4) );
+4984
+gap> C := HammingCode(5);
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+#the minimum distance is 3, so the code can correct one error
+gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7ACDC5377CD17451" name="X7ACDC5377CD17451"></a></p>
+
+<h5>7.5-6 Krawtchouk</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Krawtchouk</code>( <var class="Arg">k, i, n, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Krawtchouk</code> returns the Krawtchouk number K_k(i). <var class="Arg">q</var> must be a prime power, <var class="Arg">n</var> must be a positive integer, <var class="Arg">k</var> must be a non-negative integer less then or equal to <var class="Arg">n</var> and <var class="Arg">i</var> can be any integer. (See <code class="func">KrawtchoukMat</code> (<a href="chap7.html#X82899B64802A4BCE"><b>7.3-1</b></a>)). This number is the value at x=i of the polynomial</p>
+
+<p class="pcenter">
+K_k^{n,q}(x)
+=\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),
+</p>
+
+<p>where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are integers. For more properties of these polynomials, see <a href="chapBib.html#biBMS83">[MS83]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Krawtchouk( 2, 0, 3, 2);
+3 
+</pre></td></tr></table>
+
+<p><a id="X827E39957A87EB51" name="X827E39957A87EB51"></a></p>
+
+<h5>7.5-7 PrimitiveUnityRoot</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PrimitiveUnityRoot</code>( <var class="Arg">F, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitiveUnityRoot</code> returns a primitive <var class="Arg">n</var>-th root of unity in an extension field of <var class="Arg">F</var>. This is a finite field element a with the property a^n=1 in <var class="Arg">F</var>, and <var class="Arg">n</var> is the smallest integer such that this equality holds.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrimitiveUnityRoot( GF(2), 15 );
+Z(2^4)
+gap> last^15;
+Z(2)^0
+gap> PrimitiveUnityRoot( GF(8), 21 );
+Z(2^6)^3 
+</pre></td></tr></table>
+
+<p><a id="X78AEA40F7AD9D541" name="X78AEA40F7AD9D541"></a></p>
+
+<h5>7.5-8 PrimitivePolynomialsNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PrimitivePolynomialsNr</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitivePolynomialsNr</code> returns the number of irreducible polynomials over F=GF(q) of degree <var class="Arg">n</var> with (maximum) period q^n-1. (According to a theorem of S. Golomb, this is phi(p^n-1)/n.)</p>
+
+<p>See also the GAP function <code class="code">RandomPrimitivePolynomial</code>, <code class="func">RandomPrimitivePolynomial</code> (<a href="chap2.html#X7ECC593583E68A6C"><b>2.2-2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrimitivePolynomialsNr(3,4);
+12
+
+</pre></td></tr></table>
+
+<p><a id="X7A2B54EF868AA752" name="X7A2B54EF868AA752"></a></p>
+
+<h5>7.5-9 IrreduciblePolynomialsNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IrreduciblePolynomialsNr</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitivePolynomialsNr</code> returns the number of irreducible polynomials over F=GF(q) of degree <var class="Arg">n</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IrreduciblePolynomialsNr(3,4);
+20
+
+</pre></td></tr></table>
+
+<p><a id="X7B50D3417F6FD7C6" name="X7B50D3417F6FD7C6"></a></p>
+
+<h5>7.5-10 MatrixRepresentationOfElement</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixRepresentationOfElement</code>( <var class="Arg">a, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">F</var> is either a finite extension of the ``base field'' GF(p) or of the rationals Q}, and ain F. The command <code class="code">MatrixRepresentationOfElement</code> returns a matrix representation of <var class="Arg">a</var> over the base field.</p>
+
+<p>If the element <var class="Arg">a</var> is defined over the base field then it returns the corresponding 1x 1 matrix.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a:=Random(GF(4));
+0*Z(2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ .
+gap> a:=Random(GF(4));
+Z(2^2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ . 1
+ 1 1
+gap>
+
+</pre></td></tr></table>
+
+<p><a id="X7805D2BB7CE4D455" name="X7805D2BB7CE4D455"></a></p>
+
+<h5>7.5-11 ReciprocalPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReciprocalPolynomial</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReciprocalPolynomial</code> returns the <em>reciprocal</em> of polynomial <var class="Arg">P</var>. This is a polynomial with coefficients of <var class="Arg">P</var> in the reverse order. So if P=a_0 + a_1 X + ... + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0 X^n.</p>
+
+<p>This command can also be called using the syntax <code class="code">ReciprocalPolynomial( P , n )</code>. In this form, the number of coefficients of <var class="Arg">P</var> is assumed to be less than or equal to n+1 (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree n+1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> RecP := ReciprocalPolynomial( P );
+-Z(3)^0+x_1+x_1^3
+gap> ReciprocalPolynomial( RecP ) = P;
+true 
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> ReciprocalPolynomial( P, 6 );
+-x_1^3+x_1^4+x_1^6
+</pre></td></tr></table>
+
+<p><a id="X7AEA9F807E6FFEFF" name="X7AEA9F807E6FFEFF"></a></p>
+
+<h5>7.5-12 CyclotomicCosets</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclotomicCosets</code>( <var class="Arg">q, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CyclotomicCosets</code> returns the cyclotomic cosets of q mod n. <var class="Arg">q</var> and <var class="Arg">n</var> must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A q-cyclotomic coset of s mod n is a set of the form s,sq,sq^2,...,sq^r-1, where r is the smallest positive integer such that sq^r-s is 0 mod n. In other words, each coset contains all multiplications of the coset represent [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> CyclotomicCosets( 2, 15 );
+[ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
+  [ 7, 14, 13, 11 ] ]
+gap> CyclotomicCosets( 7, 6 );
+[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7A4EA98D794CF410" name="X7A4EA98D794CF410"></a></p>
+
+<h5>7.5-13 WeightHistogram</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightHistogram</code>( <var class="Arg">C[, h]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">WeightHistogram</code> plots a histogram of weights in code <var class="Arg">C</var>. The maximum length of a column is <var class="Arg">h</var>. Default value for <var class="Arg">h</var> is 1/3 of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2, GF(5));
+a linear [6,4,3]1 Hamming (2,5) code over GF(5)
+gap> WeightDistribution(H);
+[ 1, 0, 0, 80, 120, 264, 160 ]
+gap> WeightHistogram(H);
+264----------------
+               *
+               *
+               *
+               *
+               *  *
+            *  *  *
+         *  *  *  *
+         *  *  *  *
++--------+--+--+--+--
+0  1  2  3  4  5  6 
+</pre></td></tr></table>
+
+<p><a id="X805DF25C84585FD6" name="X805DF25C84585FD6"></a></p>
+
+<h5>7.5-14 MultiplicityInList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MultiplicityInList</code>( <var class="Arg">L, a</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command <code class="code">Collected</code> does not quite handle this ``extreme" case.)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MultiplicityInList(L,1);
+3
+gap> MultiplicityInList(L,6);
+0
+</pre></td></tr></table>
+
+<p><a id="X8072B0DA78FBE562" name="X8072B0DA78FBE562"></a></p>
+
+<h5>7.5-15 MostCommonInList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MostCommonInList</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: a list L</p>
+
+<p>Output: an a in L which occurs at least as much as any other in L</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MostCommonInList(L);
+1
+</pre></td></tr></table>
+
+<p><a id="X7C5407EF87849857" name="X7C5407EF87849857"></a></p>
+
+<h5>7.5-16 RotateList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RotateList</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: a list L</p>
+
+<p>Output: a list L' which is the cyclic rotation of L (to the right)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4];;
+gap> RotateList(L);
+[2,3,4,1]
+</pre></td></tr></table>
+
+<p><a id="X85E526367878F72A" name="X85E526367878F72A"></a></p>
+
+<h5>7.5-17 CirculantMatrix</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CirculantMatrix</code>( <var class="Arg">k, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: integer k, a list L of length n</p>
+
+<p>Output: kxn matrix whose rows are cyclic rotations of the list L</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> k:=3; L:=[1,2,3,4];;
+gap> M:=CirculantMatrix(k,L);;
+gap> Display(M);
+</pre></td></tr></table>
+
+<p><a id="X7969103F7A8598F9" name="X7969103F7A8598F9"></a></p>
+
+<h4>7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></h4>
+
+<p>In this section we describe several multivariate polynomial GAP functions <strong class="pkg">GUAVA</strong> uses for constructing codes or performing calculations with codes.</p>
+
+<p><a id="X84D51EBB784E7C5D" name="X84D51EBB784E7C5D"></a></p>
+
+<h5>7.6-1 MatrixTransformationOnMultivariatePolynomial </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixTransformationOnMultivariatePolynomial </code>( <var class="Arg">AfR</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><var class="Arg">A</var> is an nx n matrix with entries in a field F, <var class="Arg">R</var> is a polynomial ring of n variables, say F[x_1,...,x_n], and <var class="Arg">f</var> is a polynomial in <var class="Arg">R</var>. Returns the composition fcirc A.</p>
+
+<p><a id="X80433A4B792880EF" name="X80433A4B792880EF"></a></p>
+
+<h5>7.6-2 DegreeMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreeMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command takes two arguments, <var class="Arg">f</var>, a multivariate polynomial, and <var class="Arg">R</var> a polynomial ring over a field F containing <var class="Arg">f</var>, say R=F[x_1,x_2,...,x_n]. The output is simply the maximum degrees of all the monomials occurring in <var class="Arg">f</var>.</p>
+
+<p>This command can be used to compute the degree of an affine plane curve.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreeMultivariatePolynomial(poly,R2);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X83F44E397C56F2E0" name="X83F44E397C56F2E0"></a></p>
+
+<h5>7.6-3 DegreesMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreesMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns a list of information about the multivariate polynomial <var class="Arg">f</var>. Nice for other programs but mostly unreadable by GAP users.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreesMultivariatePolynomial(poly,R2);
+[ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
+  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
+gap>
+
+</pre></td></tr></table>
+
+<p><a id="X7E9021697A61A60F" name="X7E9021697A61A60F"></a></p>
+
+<h5>7.6-4 CoefficientMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoefficientMultivariatePolynomial</code>( <var class="Arg">f, var, power, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">CoefficientMultivariatePolynomial</code> takes four arguments: a multivariant polynomial <var class="Arg">f</var>, a variable name <var class="Arg">var</var>, an integer <var class="Arg">power</var>, and a polynomial ring <var class="Arg">R</var> containing <var class="Arg">f</var>. For example, if <var class="Arg">f</var> is a multivariate polynomial in R = F[x_1,x_2,...,x_n] then <var class="Arg">var</var> must be one of the x_i. The output is the coef [...]
+
+<p>(Not sure if F needs to be a field in fact ...)</p>
+
+<p>Related to the GAP command <code class="code">PolynomialCoefficientsPolynomial</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> PolynomialCoefficientsOfPolynomial(poly,x);
+[ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
+gap> PolynomialCoefficientsOfPolynomial(poly,y);
+[ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
+gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
+-x_1^3+x_1
+gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
+x_2^2
+gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
+-Z(11)^0
+
+</pre></td></tr></table>
+
+<p><a id="X79E76B6F7D177E27" name="X79E76B6F7D177E27"></a></p>
+
+<h5>7.6-5 SolveLinearSystem</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SolveLinearSystem</code>( <var class="Arg">L, vars</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">L</var> is a list of linear forms in the variables <var class="Arg">vars</var>.</p>
+
+<p>Output: the solution of the system, if its unique.</p>
+
+<p>The procedure is straightforward: Find the associated matrix A, find the "constant vector" b, and solve A*v=b. No error checking is performed.</p>
+
+<p>Related to the GAP command <code class="code">SolutionMat( A, b )</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+gap> soln:=SolveLinearSystem([f,g],[x,y]);
+[ Z(11)^3, Z(11)^2 ]
+gap> Value(f,[x,y],soln); # checking okay
+0*Z(11)
+gap> Value(g,[x,y],col); # checking okay
+0*Z(11)
+
+</pre></td></tr></table>
+
+<p><a id="X80171AA687FFDC70" name="X80171AA687FFDC70"></a></p>
+
+<h5>7.6-6 GuavaVersion</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GuavaVersion</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns the current version of Guava. Same as <code class="code">guava\_version()</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GuavaVersion();
+"2.7"
+
+</pre></td></tr></table>
+
+<p><a id="X7EBBE86D85CC90C0" name="X7EBBE86D85CC90C0"></a></p>
+
+<h5>7.6-7 ZechLog</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ZechLog</code>( <var class="Arg">x, b, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns the Zech log of x to base b, ie the i such that $x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);; l := One(F);;
+gap> ZechLog(2*l,8*l,F);
+-24
+gap> 8*l+l;(2*l)^(-24);
+Z(11)^6
+Z(11)^6
+
+</pre></td></tr></table>
+
+<p><a id="X7C8C1E6A7E3497F0" name="X7C8C1E6A7E3497F0"></a></p>
+
+<h5>7.6-8 CoefficientToPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoefficientToPolynomial</code>( <var class="Arg">coeffs, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">CoefficientToPolynomial</code> returns the degree d-1 polynomial c_0+c_1x+...+c_d-1x^d-1, where <var class="Arg">coeffs</var> is a list of elements of a field, coeffs= c_0,...,c_d-1, and <var class="Arg">R</var> is a univariate polynomial ring.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> coeffs:=Z(11)^0*[1,2,3,4];
+[ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
+gap> CoefficientToPolynomial(coeffs,R1);
+Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0
+</pre></td></tr></table>
+
+<p><a id="X8431985183B63BB7" name="X8431985183B63BB7"></a></p>
+
+<h5>7.6-9 DegreesMonomialTerm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreesMonomialTerm</code>( <var class="Arg">m, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">DegreesMonomialTerm</code> returns the list of degrees to which each variable in the multivariate polynomial ring <var class="Arg">R</var> occurs in the monomial <var class="Arg">m</var>, where <var class="Arg">coeffs</var> is a list of elements of a field.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> c:=X(F,"c",var2);
+c
+gap> var3:=Concatenation(var2,[c]);
+[ a, b, c ]
+gap> R3:=PolynomialRing(F,var3);
+PolynomialRing(..., [ a, b, c ])
+gap> m:=b^3*c^7;
+b^3*c^7
+gap> DegreesMonomialTerm(m,R3);
+[ 0, 3, 7 ]
+</pre></td></tr></table>
+
+<p><a id="X860EF39B841380A1" name="X860EF39B841380A1"></a></p>
+
+<h5>7.6-10 DivisorsMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorsMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">DivisorsMultivariatePolynomial</code> returns the list of polynomial divisors of <var class="Arg">f</var> in the multivariate polynomial ring <var class="Arg">R</var> with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, <a href="chapBib.html#biBGG03">[GG03]</a>, exercise 16.10) which first converts the multivariate polynomial <var class="Arg">f</var> to an associated univariate polynomi [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
+PolynomialRing(..., [ x1, x2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);
+[ x1, x2 ]
+gap> x2:=vars[2];
+x2
+gap> x1:=vars[1];
+x1
+gap> f:=x1^3+x2^3;;
+gap> DivisorsMultivariatePolynomial(f,R2);
+[ x1+x2, x1+x2, x1+x2 ]
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap6.html">Previous Chapter</a>    <a href="chapBib.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chap7.txt b/doc/chap7.txt
new file mode 100644
index 0000000..3ed11bb
--- /dev/null
+++ b/doc/chap7.txt
@@ -0,0 +1,1910 @@
+  
+  7. Bounds on codes, special matrices and miscellaneous functions
+  
+  In  this chapter we describe functions that determine bounds on the size and
+  minimum  distance of codes (Section 7.1), functions that determine bounds on
+  the  size  and  covering  radius of codes (Section 7.2), functions that work
+  with  special  matrices GUAVA needs for several codes (see Section 7.3), and
+  constructing codes or performing calculations with codes (see Section 7.5).
+  
+  
+  7.1 Distance bounds on codes
+  
+  This  section  describes  the  functions  that calculate estimates for upper
+  bounds  on  the  size  and minimum distance of codes. Several algorithms are
+  known to compute a largest number of words a code can have with given length
+  and  minimum  distance.  It  is important however to understand that in some
+  cases  the  true upper bound is unknown. A code which has a size equalto the
+  calculated  upper  bound may not have been found. However, codes that have a
+  larger size do not exist.
+  
+  A  second  way  to obtain bounds is a table. In GUAVA, an extensive table is
+  implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds
+  on  the  minimum  distance  for given word length and dimension. It contains
+  entries  for  word  lengths less than or equal to 257, 243 and 256 for codes
+  over  GF(2),  GF(3) and GF(4) respectively. These entries were obtained from
+  Brouwer's  tables  as of 11 May 2006. For the latest information, please see
+  A. E. Brouwer's tables [Bro06] on the internet.
+  
+  Firstly,  we  describe  functions  that compute specific upper bounds on the
+  code  size  (see  UpperBoundSingleton  (7.1-1),  UpperBoundHamming  (7.1-2),
+  UpperBoundJohnson   (7.1-3),   UpperBoundPlotkin   (7.1-4),  UpperBoundElias
+  (7.1-5) and UpperBoundGriesmer (7.1-6)).
+  
+  Next  we  describe  a function that computes GUAVA's best upper bound on the
+  code size (see UpperBound (7.1-8)).
+  
+  Then  we  describe two functions that compute a lower and upper bound on the
+  minimum  distance  of  a  code  (see  LowerBoundMinimumDistance  (7.1-9) and
+  UpperBoundMinimumDistance (7.1-12)).
+  
+  Finally,  we describe a function that returns a lower and upper bound on the
+  minimum  distance  with given parameters and a description of how the bounds
+  were obtained (see BoundsMinimumDistance (7.1-13)).
+  
+  7.1-1 UpperBoundSingleton
+  
+  > UpperBoundSingleton( n, d, q ) ___________________________________function
+  
+  UpperBoundSingleton  returns  the  Singleton  bound  for a code of length n,
+  minimum  distance  d  over  a  field  of  size q. This bound is based on the
+  shortening  of  codes.  By  shortening  an  (n,  M,  d)  code  d-1 times, an
+  (n-d+1,M,1)  code  results,  with  M <= q^n-d+1 (see ShortenedCode (6.1-9)).
+  Thus
+  
+  
+       M \leq q^{n-d+1}.
+  
+  
+  Codes  that  meet  this  bound  are  called  maximum distance separable (see
+  IsMDSCode (4.3-7)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundSingleton(4, 3, 5);
+    25
+    gap> C := ReedSolomonCode(4,3);; Size(C);
+    25
+    gap> IsMDSCode(C);
+    true 
+  ------------------------------------------------------------------
+  
+  7.1-2 UpperBoundHamming
+  
+  > UpperBoundHamming( n, d, q ) _____________________________________function
+  
+  The  Hamming bound (also known as the sphere packing bound) returns an upper
+  bound on the size of a code of length n, minimum distance d, over a field of
+  size q. The Hamming bound is obtained by dividing the contents of the entire
+  space  GF(q)^n  by the contents of a ball with radius lfloor(d-1) / 2rfloor.
+  As  all these balls are disjoint, they can never contain more than the whole
+  vector space.
+  
+  
+       M \leq {q^n \over V(n,e)},
+  
+  
+  where  M  is  the  maxmimum  number  of codewords and V(n,e) is equal to the
+  contents  of  a  ball of radius e (see SphereContent (7.5-5)). This bound is
+  useful  for  small  values  of  d. Codes for which equality holds are called
+  perfect (see IsPerfectCode (4.3-6)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundHamming( 15, 3, 2 );
+    2048
+    gap> C := HammingCode( 4, GF(2) );
+    a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+    gap> Size( C );
+    2048 
+  ------------------------------------------------------------------
+  
+  7.1-3 UpperBoundJohnson
+  
+  > UpperBoundJohnson( n, d ) ________________________________________function
+  
+  The  Johnson  bound  is  an  improved  version  of  the  Hamming  bound (see
+  UpperBoundHamming  (7.1-2)). In addition to the Hamming bound, it takes into
+  account  the  elements of the space outside the balls of radius e around the
+  elements of the code. The Johnson bound only works for binary codes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundJohnson( 13, 5 );
+    77
+    gap> UpperBoundHamming( 13, 5, 2);
+    89   # in this case the Johnson bound is better 
+  ------------------------------------------------------------------
+  
+  7.1-4 UpperBoundPlotkin
+  
+  > UpperBoundPlotkin( n, d, q ) _____________________________________function
+  
+  The  function  UpperBoundPlotkin  calculates the sum of the distances of all
+  ordered  pairs  of  different  codewords.  It  is based on the fact that the
+  minimum  distance  is  at  most  equal to the average distance. It is a good
+  bound if the weights of the codewords do not differ much. It results in:
+  
+  
+       M \leq {d \over {d-(1-1/q)n}},
+  
+  
+  where  M  is the maximum number of codewords. In this case, d must be larger
+  than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered.
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundPlotkin( 15, 7, 2 );
+    32
+    gap> C := BCHCode( 15, 7, GF(2) );
+    a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+    gap> Size(C);
+    32
+    gap> WeightDistribution(C);
+    [ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 
+  ------------------------------------------------------------------
+  
+  7.1-5 UpperBoundElias
+  
+  > UpperBoundElias( n, d, q ) _______________________________________function
+  
+  The   Elias   bound   is   an   improvement   of   the  Plotkin  bound  (see
+  UpperBoundPlotkin  (7.1-4))  for  large codes. Subcodes are used to decrease
+  the  size  of  the  code, in this case the subcode of all codewords within a
+  certain  ball.  This  bound  is useful for large codes with relatively small
+  minimum distances.
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundPlotkin( 16, 3, 2 );
+    12288
+    gap> UpperBoundElias( 16, 3, 2 );
+    10280 
+    gap> UpperBoundElias( 20, 10, 3 );
+    16255
+  ------------------------------------------------------------------
+  
+  7.1-6 UpperBoundGriesmer
+  
+  > UpperBoundGriesmer( n, d, q ) ____________________________________function
+  
+  The  Griesmer  bound  is  valid  only  for  linear  codes. It is obtained by
+  counting  the number of equal symbols in each row of the generator matrix of
+  the  code.  By  omitting  the  coordinates  in which all rows have a zero, a
+  smaller  code  results.  The  Griesmer  bound  is obtained by repeating this
+  proces until a trivial code is left in the end.
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBoundGriesmer( 13, 5, 2 );
+    64
+    gap> UpperBoundGriesmer( 18, 9, 2 );
+    8        # the maximum number of words for a linear code is 8
+    gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+    20       # this non-linear code has 20 elements 
+  ------------------------------------------------------------------
+  
+  7.1-7 IsGriesmerCode
+  
+  > IsGriesmerCode( C ) ______________________________________________function
+  
+  IsGriesmerCode  returns  `true'  if  a linear code C is a Griesmer code, and
+  `false' otherwise. A code is called Griesmer if its length satisfies
+  
+  
+       n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
+    true
+    gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
+    false 
+  ------------------------------------------------------------------
+  
+  7.1-8 UpperBound
+  
+  > UpperBound( n, d, q ) ____________________________________________function
+  
+  UpperBound  returns the best known upper bound A(n,d) for the size of a code
+  of  length  n,  minimum  distance  d  over  a  field of size q. The function
+  UpperBound  first  checks  for  trivial  cases (like d=1 or n=d), and if the
+  value  is in the built-in table. Then it calculates the minimum value of the
+  upper   bound  using  the  methods  of  Singleton  (see  UpperBoundSingleton
+  (7.1-1)),    Hamming   (see   UpperBoundHamming   (7.1-2)),   Johnson   (see
+  UpperBoundJohnson  (7.1-3)),  Plotkin  (see  UpperBoundPlotkin  (7.1-4)) and
+  Elias (see UpperBoundElias (7.1-5)). If the code is binary, A(n, 2* ell-1) =
+  A(n+1,2*  ell),  so  the UpperBound takes the minimum of the values obtained
+  from all methods for the parameters (n, 2*ell-1) and (n+1, 2* ell).
+  
+  ---------------------------  Example  ----------------------------
+    gap> UpperBound( 10, 3, 2 );
+    85
+    gap> UpperBound( 25, 9, 8 );
+    1211778792827540 
+  ------------------------------------------------------------------
+  
+  7.1-9 LowerBoundMinimumDistance
+  
+  > LowerBoundMinimumDistance( C ) ___________________________________function
+  
+  In  this  form,  LowerBoundMinimumDistance  returns  a  lower  bound for the
+  minimum distance of code C.
+  
+  This  command can also be called using the syntax LowerBoundMinimumDistance(
+  n, k, F ). In this form, LowerBoundMinimumDistance returns a lower bound for
+  the  minimum distance of the best known linear code of length n, dimension k
+  over field F. It uses the mechanism explained in section 7.1-13.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := BCHCode( 45, 7 );
+    a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
+    gap> LowerBoundMinimumDistance( C );
+    7     # designed distance is lower bound for minimum distance 
+    gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
+    10 
+  ------------------------------------------------------------------
+  
+  7.1-10 LowerBoundGilbertVarshamov
+  
+  > LowerBoundGilbertVarshamov( n, d, q ) ____________________________function
+  
+  This  is  the  lower  bound due (independently) to Gilbert and Varshamov. It
+  says  that  for each n and d, there exists a linear code having length n and
+  minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> LowerBoundGilbertVarshamov(3,2,2);
+    4
+    gap> LowerBoundGilbertVarshamov(3,3,2);
+    1
+    gap> LowerBoundMinimumDistance(3,3,2);
+    1
+    gap> LowerBoundMinimumDistance(3,2,2);
+    2
+  ------------------------------------------------------------------
+  
+  7.1-11 LowerBoundSpherePacking
+  
+  > LowerBoundSpherePacking( n, d, q ) _______________________________function
+  
+  This  is  the  lower  bound due (independently) to Gilbert and Varshamov. It
+  says  that  for  each n and r, there exists an unrestricted code at least of
+  size q^n/ SphereContent(n,d,GF(q)) minimum distance d.
+  
+  ---------------------------  Example  ----------------------------
+    gap> LowerBoundSpherePacking(3,2,2);
+    2
+    gap> LowerBoundSpherePacking(3,3,2);
+    1
+  ------------------------------------------------------------------
+  
+  7.1-12 UpperBoundMinimumDistance
+  
+  > UpperBoundMinimumDistance( C ) ___________________________________function
+  
+  In  this  form,  UpperBoundMinimumDistance  returns  an  upper bound for the
+  minimum distance of code C. For unrestricted codes, it just returns the word
+  length.  For  linear codes, it takes the minimum of the possibly known value
+  from the method of construction, the weight of the generators, and the value
+  from the table (see 7.1-13).
+  
+  This  command can also be called using the syntax UpperBoundMinimumDistance(
+  n,  k,  F  ). In this form, UpperBoundMinimumDistance returns an upper bound
+  for  the  minimum  distance  of  the  best  known  linear  code of length n,
+  dimension k over field F. It uses the mechanism explained in section 7.1-13.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := BCHCode( 45, 7 );;
+    gap> UpperBoundMinimumDistance( C );
+    9 
+    gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
+    11 
+  ------------------------------------------------------------------
+  
+  7.1-13 BoundsMinimumDistance
+  
+  > BoundsMinimumDistance( n, k, F ) _________________________________function
+  
+  The  function  BoundsMinimumDistance  calculates a lower and upper bound for
+  the minimum distance of an optimal linear code with word length n, dimension
+  k  over  field  F.  The function returns a record with the two bounds and an
+  explanation  for  each  bound.  The function Display can be used to show the
+  explanations.
+  
+  The  values  for  the lower and upper bound are obtained from a table. GUAVA
+  has  tables  containing  lower  and upper bounds for q=2 (n <= 257), 3 (n <=
+  243),  4  (n <= 256). (Current as of 11 May 2006.) These tables were derived
+  from       the       table       of       Brouwer.       (See       [Bro06],
+  http://www.win.tue.nl/~aeb/voorlincod.html  for  the  most recent data.) For
+  codes  over  other  fields  and  for larger word lengths, trivial bounds are
+  used.
+  
+  The  resulting  record  can be used in the function BestKnownLinearCode (see
+  BestKnownLinearCode  (5.2-14))  to  construct  a  code with minimum distance
+  equal to the lower bound.
+  
+  ---------------------------  Example  ----------------------------
+    gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
+    an optimal linear [7,3,d] code over GF(2) has d=4
+    ------------------------------------------------------------------------------
+    Lb(7,3)=4, by shortening of:
+    Lb(8,4)=4, u u+v construction of C1 and C2:
+    Lb(4,3)=2, dual of the repetition code
+    Lb(4,1)=4, repetition code
+    ------------------------------------------------------------------------------
+    Ub(7,3)=4, Griesmer bound
+    # The lower bound is equal to the upper bound, so a code with
+    # these parameters is optimal.
+    gap> C := BestKnownLinearCode( bounds );; Display( C );
+    a linear [7,3,4]2..3 shortened code of
+    a linear [8,4,4]2 U U+V construction code of
+    U: a cyclic [4,3,2]1 dual code of
+       a cyclic [4,1,4]2 repetition code over GF(2)
+    V: a cyclic [4,1,4]2 repetition code over GF(2)
+  ------------------------------------------------------------------
+  
+  
+  7.2 Covering radius bounds on codes
+  
+  7.2-1 BoundsCoveringRadius
+  
+  > BoundsCoveringRadius( C ) ________________________________________function
+  
+  BoundsCoveringRadius  returns  a  list  of integers. The first entry of this
+  list  is  the maximum of some lower bounds for the covering radius of C, the
+  last entry the minimum of some upper bounds of C.
+  
+  If  the  covering  radius  of  C  is  known, a list of length 1 is returned.
+  BoundsCoveringRadius       makes       use       of       the      functions
+  GeneralLowerBoundCoveringRadius and GeneralUpperBoundCoveringRadius.
+  
+  ---------------------------  Example  ----------------------------
+    gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
+    [ 3 .. 4 ]
+    gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
+    [ 1 ] 
+  ------------------------------------------------------------------
+  
+  7.2-2 IncreaseCoveringRadiusLowerBound
+  
+  > IncreaseCoveringRadiusLowerBound( C[, stopdist][, startword] ) ___function
+  
+  IncreaseCoveringRadiusLowerBound  tries  to  increase the lower bound of the
+  covering  radius  of  C. It does this by means of a probabilistic algorithm.
+  This  algorithm  takes  a  random  word  in  GF(q)^n  (or startword if it is
+  specified),  and, by changing random coordinates, tries to get as far from C
+  as  possible.  If  changing  a  coordinate  finds  a  word that has a larger
+  distance  to  the  code than the previous one, the change is made permanent,
+  and  the  algorithm starts all over again. If changing a coordinate does not
+  find  a  coset leader that is further away from the code, then the change is
+  made  permanent with a chance of 1 in 100, if it gets the word closer to the
+  code,  or  with a chance of 1 in 10, if the word stays at the same distance.
+  Otherwise, the algorithm starts again with the same word as before.
+  
+  If  the  algorithm  did  not allow changes that decrease the distance to the
+  code,  it  might  get  stuck  in  a  sub-optimal situation (the coset leader
+  corresponding  to such a situation - i.e. no coordinate of this coset leader
+  can  be changed in such a way that we get at a larger distance from the code
+  - is called an orphan).
+  
+  If  the  algorithm  finds  a word that has distance stopdist to the code, it
+  ends and returns that word, which can be used for further investigations.
+  
+  The  variable  InfoCoveringRadius  can  be set to Print to print the maximum
+  distance  reached  so  far every 1000 runs. The algorithm can be interrupted
+  with  ctrl-C,  allowing the user to look at the word that is currently being
+  examined  (called  `current'), or to change the chances that the new word is
+  made  permanent  (these are called `staychance' and `downchance'). If one of
+  these variables is i, then it corresponds with a i in 100 chance.
+  
+  At  the moment, the algorithm is only useful for codes with small dimension,
+  where  small means that the elements of the code fit in the memory. It works
+  with  larger  codes,  however,  but  when  you  use  it for codes with large
+  dimension,  you  should  be very patient. If running the algorithm quits GAP
+  (due  to memory problems), you can change the global variable CRMemSize to a
+  lower  value.  This  might  cause  the  algorithm to run slower, but without
+  quitting  GAP.  The  only  way to find out the best value of CRMemSize is by
+  experimenting.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> IncreaseCoveringRadiusLowerBound(C,10);
+    Number of runs: 1000  best distance so far: 3
+    Number of runs: 2000  best distance so far: 3
+    Number of changes: 100
+    Number of runs: 3000  best distance so far: 3
+    Number of runs: 4000  best distance so far: 3
+    Number of runs: 5000  best distance so far: 3
+    Number of runs: 6000  best distance so far: 3
+    Number of runs: 7000  best distance so far: 3
+    Number of changes: 200
+    Number of runs: 8000  best distance so far: 3
+    Number of runs: 9000  best distance so far: 3
+    Number of runs: 10000  best distance so far: 3
+    Number of changes: 300
+    Number of runs: 11000  best distance so far: 3
+    Number of runs: 12000  best distance so far: 3
+    Number of runs: 13000  best distance so far: 3
+    Number of changes: 400
+    Number of runs: 14000  best distance so far: 3
+    user interrupt at... 
+    #
+    # used ctrl-c to break out of execution
+    #
+    ... called from 
+    IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
+     function( arguments ) called from read-eval-loop
+    Entering break read-eval-print loop ...
+    you can 'quit;' to quit to outer loop, or
+    you can 'return;' to continue
+    brk> current;
+    [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+    brk>
+    gap> CoveringRadius(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  7.2-3 ExhaustiveSearchCoveringRadius
+  
+  > ExhaustiveSearchCoveringRadius( C ) ______________________________function
+  
+  ExhaustiveSearchCoveringRadius   does  an  exhaustive  search  to  find  the
+  covering  radius of C. Every time a coset leader of a coset with weight w is
+  found, the function tries to find a coset leader of a coset with weight w+1.
+  It  does this by enumerating all words of weight w+1, and checking whether a
+  word is a coset leader. The start weight is the current known lower bound on
+  the covering radius.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> ExhaustiveSearchCoveringRadius(C);
+    Trying 3 ...
+    [ 3 .. 5 ]
+    gap> CoveringRadius(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  7.2-4 GeneralLowerBoundCoveringRadius
+  
+  > GeneralLowerBoundCoveringRadius( C ) _____________________________function
+  
+  GeneralLowerBoundCoveringRadius returns a lower bound on the covering radius
+  of    C.    It   uses   as   many   functions   which   names   start   with
+  LowerBoundCoveringRadius  as possible to find the best known lower bound (at
+  least  that  GUAVA knows of) together with tables for the covering radius of
+  binary linear codes with length not greater than 64.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> GeneralLowerBoundCoveringRadius(C);
+    2
+    gap> CoveringRadius(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  7.2-5 GeneralUpperBoundCoveringRadius
+  
+  > GeneralUpperBoundCoveringRadius( C ) _____________________________function
+  
+  GeneralUpperBoundCoveringRadius  returns  an  upper  bound  on  the covering
+  radius   of   C.   It   uses  as  many  functions  which  names  start  with
+  UpperBoundCoveringRadius  as possible to find the best known upper bound (at
+  least that GUAVA knows of).
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> GeneralUpperBoundCoveringRadius(C);
+    4
+    gap> CoveringRadius(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  7.2-6 LowerBoundCoveringRadiusSphereCovering
+  
+  > LowerBoundCoveringRadiusSphereCovering( n, M[, F], false ) _______function
+  
+  This     command     can     also     be    called    using    the    syntax
+  LowerBoundCoveringRadiusSphereCovering(  n,  r,  [F,]  true  ).  If the last
+  argument of LowerBoundCoveringRadiusSphereCovering is false, then it returns
+  a  lower  bound  for  the  covering radius of a code of size M and length n.
+  Otherwise,  it  returns a lower bound for the size of a code of length n and
+  covering radius r.
+  
+  F  is  the  field  over  which  the  code is defined. If F is omitted, it is
+  assumed  that the code is over GF(2). The bound is computed according to the
+  sphere covering bound:
+  
+  
+       M \cdot V_q(n,r) \geq q^n
+  
+  
+  where V_q(n,r) is the size of a sphere of radius r in GF(q)^n.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    3
+    gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+    2
+    gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+    6
+    
+  ------------------------------------------------------------------
+  
+  7.2-7 LowerBoundCoveringRadiusVanWee1
+  
+  > LowerBoundCoveringRadiusVanWee1( n, M[, F], false ) ______________function
+  
+  This     command     can     also     be    called    using    the    syntax
+  LowerBoundCoveringRadiusVanWee1(  n, r, [F,] true ). If the last argument of
+  LowerBoundCoveringRadiusVanWee1  is false, then it returns a lower bound for
+  the  covering radius of a code of size M and length n. Otherwise, it returns
+  a lower bound for the size of a code of length n and covering radius r.
+  
+  F  is  the  field  over  which  the  code is defined. If F is omitted, it is
+  assumed that the code is over GF(2).
+  
+  The Van Wee bound is an improvement of the sphere covering bound:
+  
+  
+       M \cdot \left\{ V_q(n,r) - \frac{{n \choose
+       r}}{\lceil\frac{n-r}{r+1}\rceil}
+       \left(\left\lceil\frac{n+1}{r+1}\right\rceil -
+       \frac{n+1}{r+1}\right) \right\} \geq q^n
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    3
+    gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+    2
+    gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+    6
+    
+  ------------------------------------------------------------------
+  
+  7.2-8 LowerBoundCoveringRadiusVanWee2
+  
+  > LowerBoundCoveringRadiusVanWee2( n, M, false ) ___________________function
+  
+  This     command     can     also     be    called    using    the    syntax
+  LowerBoundCoveringRadiusVanWee2(  n,  r  [,true]  ). If the last argument of
+  LowerBoundCoveringRadiusVanWee2  is false, then it returns a lower bound for
+  the  covering radius of a code of size M and length n. Otherwise, it returns
+  a lower bound for the size of a code of length n and covering radius r.
+  
+  This  bound  only  works  for  binary  codes.  It  is based on the following
+  inequality:
+  
+  
+       M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1)
+       \right) V_2(n,r) + \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) -
+       \frac{1}{2}(r+2)(r-1) + \varepsilon)} \geq 2^n,
+  
+  
+  where
+  
+  
+       \varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2
+       \choose 2} \right\rceil - {n-r+1 \choose 2}.
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    3
+    gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
+    2
+    gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
+    7
+    
+  ------------------------------------------------------------------
+  
+  7.2-9 LowerBoundCoveringRadiusCountingExcess
+  
+  > LowerBoundCoveringRadiusCountingExcess( n, M, false ) ____________function
+  
+  This command can also be called with LowerBoundCoveringRadiusCountingExcess(
+  n,      r      [,true]      ).      If      the     last     argument     of
+  LowerBoundCoveringRadiusCountingExcess  is  false,  then  it returns a lower
+  bound  for  the covering radius of a code of size M and length n. Otherwise,
+  it  returns  a  lower  bound for the size of a code of length n and covering
+  radius r.
+  
+  This  bound  only  works  for  binary  codes.  It  is based on the following
+  inequality:
+  
+  
+       M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq
+       (\rho + \varepsilon) 2^n,
+  
+  
+  where
+  
+  
+       \varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)
+  
+  
+  and
+  
+  
+       \rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm
+       if}\ r = 2\\ n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array}
+       \right.
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    3
+    gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
+    0
+    gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
+    7
+    
+  ------------------------------------------------------------------
+  
+  7.2-10 LowerBoundCoveringRadiusEmbedded1
+  
+  > LowerBoundCoveringRadiusEmbedded1( n, M, false ) _________________function
+  
+  This command can also be called with LowerBoundCoveringRadiusEmbedded1( n, r
+  [,true]  ).  If  the  last  argument of LowerBoundCoveringRadiusEmbedded1 is
+  'false',  then it returns a lower bound for the covering radius of a code of
+  size  M  and length n. Otherwise, it returns a lower bound for the size of a
+  code of length n and covering radius r.
+  
+  This  bound  only  works  for  binary  codes.  It  is based on the following
+  inequality:
+  
+  
+       M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n,
+       2r+1 ) {2r \choose r},
+  
+  
+  where  A(n,d) denotes the maximal cardinality of a (binary) code of length n
+  and  minimum  distance  d.  The  function UpperBound is used to compute this
+  value.
+  
+  Sometimes      LowerBoundCoveringRadiusEmbedded1      is     better     than
+  LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(10,5,GF(2));
+    a  [10,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    3
+    gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
+    2
+    gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
+    7
+    
+  ------------------------------------------------------------------
+  
+  7.2-11 LowerBoundCoveringRadiusEmbedded2
+  
+  > LowerBoundCoveringRadiusEmbedded2( n, M, false ) _________________function
+  
+  This command can also be called with LowerBoundCoveringRadiusEmbedded2( n, r
+  [,true]  ).  If  the  last  argument of LowerBoundCoveringRadiusEmbedded2 is
+  'false',  then it returns a lower bound for the covering radius of a code of
+  size  M  and length n. Otherwise, it returns a lower bound for the size of a
+  code of length n and covering radius r.
+  
+  This  bound  only  works  for  binary  codes.  It  is based on the following
+  inequality:
+  
+  
+       M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq
+       2^n - 2A( n, 2r+1 ) {2r \choose r},
+  
+  
+  where  A(n,d) denotes the maximal cardinality of a (binary) code of length n
+  and  minimum  distance  d.  The  function UpperBound is used to compute this
+  value.
+  
+  Sometimes      LowerBoundCoveringRadiusEmbedded1      is     better     than
+  LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> Size(C);
+    32
+    gap> CoveringRadius(C);
+    6
+    gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
+    2
+    gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
+    7
+    
+  ------------------------------------------------------------------
+  
+  7.2-12 LowerBoundCoveringRadiusInduction
+  
+  > LowerBoundCoveringRadiusInduction( n, r ) ________________________function
+  
+  LowerBoundCoveringRadiusInduction  returns  a  lower bound for the size of a
+  code with length n and covering radius r.
+  
+  If n = 2r+2 and r >= 1, the returned value is 4.
+  
+  If n = 2r+3 and r >= 1, the returned value is 7.
+  
+  If n = 2r+4 and r >= 4, the returned value is 8.
+  
+  Otherwise, 0 is returned.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(C);
+    5
+    gap> LowerBoundCoveringRadiusInduction(15,6);
+    7
+    
+  ------------------------------------------------------------------
+  
+  7.2-13 UpperBoundCoveringRadiusRedundancy
+  
+  > UpperBoundCoveringRadiusRedundancy( C ) __________________________function
+  
+  UpperBoundCoveringRadiusRedundancy  returns  the redundancy of C as an upper
+  bound for the covering radius of C. C must be a linear code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(C);
+    5
+    gap> UpperBoundCoveringRadiusRedundancy(C);
+    10
+    
+  ------------------------------------------------------------------
+  
+  7.2-14 UpperBoundCoveringRadiusDelsarte
+  
+  > UpperBoundCoveringRadiusDelsarte( C ) ____________________________function
+  
+  UpperBoundCoveringRadiusDelsarte  returns  an  upper  bound for the covering
+  radius  of  C. This upper bound is equal to the external distance of C, this
+  is the minimum distance of the dual code, if C is a linear code.
+  
+  This is described in Theorem 11.3.3 of [HP03].
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(C);
+    5
+    gap> UpperBoundCoveringRadiusDelsarte(C);
+    13
+  ------------------------------------------------------------------
+  
+  7.2-15 UpperBoundCoveringRadiusStrength
+  
+  > UpperBoundCoveringRadiusStrength( C ) ____________________________function
+  
+  UpperBoundCoveringRadiusStrength  returns  an  upper  bound for the covering
+  radius of C.
+  
+  First  the  code  is punctured at the zero coordinates (i.e. the coordinates
+  where all codewords have a zero). If the remaining code has strength 1 (i.e.
+  each  coordinate  contains  each  element  of  the  field an equal number of
+  times),  then it returns fracq-1qm + (n-m) (where q is the size of the field
+  and  m  is the length of punctured code), otherwise it returns n. This bound
+  works for all codes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(C);
+    5
+    gap> UpperBoundCoveringRadiusStrength(C);
+    7
+  ------------------------------------------------------------------
+  
+  7.2-16 UpperBoundCoveringRadiusGriesmerLike
+  
+  > UpperBoundCoveringRadiusGriesmerLike( C ) ________________________function
+  
+  This  function  returns  an  upper bound for the covering radius of C, which
+  must be linear, in a Griesmer-like fashion. It returns
+  
+  
+       n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil
+  
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=RandomLinearCode(15,5,GF(2));
+    a  [15,5,?] randomly generated code over GF(2)
+    gap> CoveringRadius(C);
+    5
+    gap> UpperBoundCoveringRadiusGriesmerLike(C);
+    9
+    
+  ------------------------------------------------------------------
+  
+  7.2-17 UpperBoundCoveringRadiusCyclicCode
+  
+  > UpperBoundCoveringRadiusCyclicCode( C ) __________________________function
+  
+  This  function  returns  an  upper bound for the covering radius of C, which
+  must be a cyclic code. It returns
+  
+  
+       n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,
+  
+  
+  where g(x) is the generator polynomial of C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C:=CyclicCodes(15,GF(2))[3];
+    a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
+    gap> CoveringRadius(C);
+    3
+    gap> UpperBoundCoveringRadiusCyclicCode(C);
+    3
+    
+  ------------------------------------------------------------------
+  
+  
+  7.3 Special matrices in GUAVA
+  
+  This  section explains functions that work with special matrices GUAVA needs
+  for several codes.
+  
+  Firstly,  we  describe  some  matrix generating functions (see KrawtchoukMat
+  (7.3-1), GrayMat (7.3-2), SylvesterMat (7.3-3), HadamardMat (7.3-4) and MOLS
+  (7.3-11)).
+  
+  Next  we  describe  two functions regarding a standard form of matrices (see
+  PutStandardForm (7.3-6) and IsInStandardForm (7.3-7)).
+  
+  Then  we  describe  functions that return a matrix after a manipulation (see
+  PermutedCols     (7.3-8),     VerticalConversionFieldMat     (7.3-9)     and
+  HorizontalConversionFieldMat (7.3-10)).
+  
+  Finally,  we  describe  functions  that  do  some  tests  on  matrices  (see
+  IsLatinSquare (7.3-12) and AreMOLS (7.3-13)).
+  
+  7.3-1 KrawtchoukMat
+  
+  > KrawtchoukMat( n, q ) ____________________________________________function
+  
+  KrawtchoukMat  returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j)
+  for i,j=0,...,n. K_i(j) is the Krawtchouk number (see Krawtchouk (7.5-6)). n
+  must  be  a  positive  integer and q a prime power. The Krawtchouk matrix is
+  used in the MacWilliams identities, defining the relation between the weight
+  distribution  of  a  code  of  length n over a field of size q, and its dual
+  code.  Each  call  to  KrawtchoukMat  returns a new matrix, so it is safe to
+  modify the result.
+  
+  ---------------------------  Example  ----------------------------
+    gap> PrintArray( KrawtchoukMat( 3, 2 ) );
+    [ [   1,   1,   1,   1 ],
+      [   3,   1,  -1,  -3 ],
+      [   3,  -1,  -1,   3 ],
+      [   1,  -1,   1,  -1 ] ]
+    gap> C := HammingCode( 3 );; a := WeightDistribution( C );
+    [ 1, 0, 0, 7, 7, 0, 0, 1 ]
+    gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+    gap> k := Dimension( C );;
+    gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
+    [ 1, 0, 0, 0, 7, 0, 0, 0 ]
+    gap> WeightDistribution( DualCode( C ) );
+    [ 1, 0, 0, 0, 7, 0, 0, 0 ] 
+  ------------------------------------------------------------------
+  
+  7.3-2 GrayMat
+  
+  > GrayMat( n, F ) __________________________________________________function
+  
+  GrayMat  returns a list of all different vectors (see GAP's Vectors command)
+  of  length  n  over  the  field F, using Gray ordering. n must be a positive
+  integer.  This  order  has  the  property  that subsequent vectors differ in
+  exactly  one  coordinate.  The  first vector is always the null vector. Each
+  call to GrayMat returns a new matrix, so it is safe to modify the result.
+  
+  ---------------------------  Example  ----------------------------
+    gap> GrayMat(3);
+    [ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
+      [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
+      [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
+      [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
+    gap> G := GrayMat( 4, GF(4) );; Length(G);
+    256          # the length of a GrayMat is always q^n
+    gap> G[101] - G[100];
+    [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 
+  ------------------------------------------------------------------
+  
+  7.3-3 SylvesterMat
+  
+  > SylvesterMat( n ) ________________________________________________function
+  
+  SylvesterMat returns the nx n Sylvester matrix of order n. This is a special
+  case   of   the  Hadamard  matrices  (see  HadamardMat  (7.3-4)).  For  this
+  construction,  n  must  be a power of 2. Each call to SylvesterMat returns a
+  new matrix, so it is safe to modify the result.
+  
+  ---------------------------  Example  ----------------------------
+    gap> PrintArray(SylvesterMat(2));
+    [ [   1,   1 ],
+      [   1,  -1 ] ]
+    gap> PrintArray( SylvesterMat(4) );
+    [ [   1,   1,   1,   1 ],
+      [   1,  -1,   1,  -1 ],
+      [   1,   1,  -1,  -1 ],
+      [   1,  -1,  -1,   1 ] ] 
+  ------------------------------------------------------------------
+  
+  7.3-4 HadamardMat
+  
+  > HadamardMat( n ) _________________________________________________function
+  
+  HadamardMat  returns  a  Hadamard  matrix of order n. This is an nx n matrix
+  with  the  property  that  the  matrix multiplied by its transpose returns n
+  times  the  identity  matrix. This is only possible for n=1, n=2 or in cases
+  where n is a multiple of 4. If the matrix does not exist or is not known (as
+  of  1998),  HadamardMat  returns  an  error.  A large number of construction
+  methods  is known to create these matrices for different orders. HadamardMat
+  makes   use   of   two  construction  methods  (among  which  the  Sylvester
+  construction  --  see SylvesterMat (7.3-3)). These methods cover most of the
+  possible  Hadamard  matrices, although some special algorithms have not been
+  implemented  yet.  The  following  orders  less  than 100 do not yet have an
+  implementation for a Hadamard matrix in GUAVA: 28, 36, 52, 76, 92.
+  
+  ---------------------------  Example  ----------------------------
+    gap> C := HadamardMat(8);; PrintArray(C);
+    [ [   1,   1,   1,   1,   1,   1,   1,   1 ],
+      [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
+      [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
+      [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
+      [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
+      [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
+      [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
+      [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
+    gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
+    true 
+  ------------------------------------------------------------------
+  
+  7.3-5 VandermondeMat
+  
+  > VandermondeMat( X, a ) ___________________________________________function
+  
+  The  function  VandermondeMat  returns  the  (a+1)x n matrix of powers x_i^j
+  where  X  is  a  list  of  elements  of  a field, X= x_1,...,x_n, and a is a
+  non-negative integer.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+    [ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
+      [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
+    gap> Display(M);
+     1 2 4
+     1 4 1
+     1 1 1
+     1 3 4
+  ------------------------------------------------------------------
+  
+  7.3-6 PutStandardForm
+  
+  > PutStandardForm( M[, idleft] ) ___________________________________function
+  
+  We  say  that  a kx n matrix is in standard form if it is equal to the block
+  matrix  (I | A), for some kx (n-k) matrix A and where I is the kx k identity
+  matrix.  It  follows  from  a  basis  result in linear algebra that, after a
+  possible  permutation of the columns, using elementary row operations, every
+  matrix  can  be reduced to standard form. PutStandardForm puts a matrix M in
+  standard  form,  and  returns  the  permutation needed to do so. idleft is a
+  boolean that sets the position of the identity matrix in M. (The default for
+  idleft is `true'.) If idleft is set to `true', the identity matrix is put on
+  the  left side of M. Otherwise, it is put at the right side. (This option is
+  useful  when  putting  a  check  matrix  of  a code into standard form.) The
+  function  BaseMat  also  returns a similar standard form, but does not apply
+  column permutations. The rows of the matrix still span the same vector space
+  after  BaseMat,  but  after calling PutStandardForm, this is not necessarily
+  true.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
+    [ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+      [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
+    gap> PutStandardForm(M);                   # identity at the left side
+    (2,3)
+    gap> PrintArray(M);
+    [ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+      [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+    gap> PutStandardForm(M, false);            # identity at the right side
+    (1,4,3)
+    gap> PrintArray(M);
+    [ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
+      [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+    gap> C := BestKnownLinearCode( 23, 12, GF(2) );
+    a linear [23,12,7]3 punctured code
+    gap> G:=MutableCopyMat(GeneratorMat(C));;
+    gap> PutStandardForm(G);
+    ()
+    gap> Display(G);
+     1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+     . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+     . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+     . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+     . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+     . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+     . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+     . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+     . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+     . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+     . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+     . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+    
+  ------------------------------------------------------------------
+  
+  7.3-7 IsInStandardForm
+  
+  > IsInStandardForm( M[, idleft] ) __________________________________function
+  
+  IsInStandardForm  determines  if  M is in standard form. idleft is a boolean
+  that   indicates   the   position  of  the  identity  matrix  in  M,  as  in
+  PutStandardForm  (see  PutStandardForm  (7.3-6)). IsInStandardForm checks if
+  the  identity  matrix  is  at  the left side of M, otherwise if it is at the
+  right side. The elements of M may be elements of any field.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsInStandardForm(IdentityMat(7, GF(2)));
+    true
+    gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
+    true
+    gap> IsInStandardForm([[1, 3, 2, 7]]);
+    true
+    gap> IsInStandardForm(HadamardMat(4));
+    false 
+  ------------------------------------------------------------------
+  
+  7.3-8 PermutedCols
+  
+  > PermutedCols( M, P ) _____________________________________________function
+  
+  PermutedCols returns a matrix M with a permutation P applied to its columns.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
+    [ [  1,  2,  3,  4 ],
+      [  1,  2,  3,  4 ] ]
+    gap> PrintArray(PermutedCols(M, (1,2,3)));
+    [ [  3,  1,  2,  4 ],
+      [  3,  1,  2,  4 ] ] 
+  ------------------------------------------------------------------
+  
+  7.3-9 VerticalConversionFieldMat
+  
+  > VerticalConversionFieldMat( M, F ) _______________________________function
+  
+  VerticalConversionFieldMat  returns the matrix M with its elements converted
+  from  a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced
+  by  its  representation  over  the  latter  field,  placed vertically in the
+  matrix, using the GF(p)-vector space isomorphism
+  
+  
+       [...] : GF(q)\rightarrow GF(p)^m,
+  
+  
+  with q=p^m.
+  
+  If M is a k by n matrix, the result is a k* m x n matrix, since each element
+  of GF(q^m) can be represented in GF(q) using m elements.
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+    [ [    Z(3^2),  Z(3^2)^5 ],
+      [  Z(3^2)^5,    Z(3^2) ] ]
+    gap> DefaultField( Flat(M) );
+    GF(3^2)
+    gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
+    [ [  0*Z(3),  0*Z(3) ],
+      [  Z(3)^0,    Z(3) ],
+      [  0*Z(3),  0*Z(3) ],
+      [    Z(3),  Z(3)^0 ] ]
+    gap> DefaultField( Flat(VCFM) );
+    GF(3) 
+  ------------------------------------------------------------------
+  
+  A      similar     function     is     HorizontalConversionFieldMat     (see
+  HorizontalConversionFieldMat (7.3-10)).
+  
+  7.3-10 HorizontalConversionFieldMat
+  
+  > HorizontalConversionFieldMat( M, F ) _____________________________function
+  
+  HorizontalConversionFieldMat   returns   the  matrix  M  with  its  elements
+  converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is
+  replaced by its representation over the latter field, placed horizontally in
+  the matrix.
+  
+  If  M  is  a  k  x n matrix, the result is a kx mx n* m matrix. The new word
+  length  of  the  resulting  code  is  equal to n* m, because each element of
+  GF(q^m)  can  be represented in GF(q) using m elements. The new dimension is
+  equal  to  kx m because the new matrix should be a basis for the same number
+  of vectors as the old one.
+  
+  ConversionFieldCode  uses  horizontal  conversion  to  convert  a  code (see
+  ConversionFieldCode (6.1-15)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+    [ [    Z(3^2),  Z(3^2)^5 ],
+      [  Z(3^2)^5,    Z(3^2) ] ]
+    gap> DefaultField( Flat(M) );
+    GF(3^2)
+    gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
+    [ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
+      [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
+      [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
+      [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
+    gap> DefaultField( Flat(HCFM) );
+    GF(3) 
+  ------------------------------------------------------------------
+  
+  A      similar      function      is     VerticalConversionFieldMat     (see
+  VerticalConversionFieldMat (7.3-9)).
+  
+  7.3-11 MOLS
+  
+  > MOLS( q[, n] ) ___________________________________________________function
+  
+  MOLS  returns  a list of n Mutually Orthogonal Latin Squares (MOLS). A Latin
+  square  of  order  q  is a qx q matrix whose entries are from a set F_q of q
+  distinct  symbols  (GUAVA  uses the integers from 0 to q) such that each row
+  and each column of the matrix contains each symbol exactly once.
+  
+  A  set  of  Latin  squares  is a set of MOLS if and only if for each pair of
+  Latin  squares  in  this set, every ordered pair of elements that are in the
+  same position in these matrices occurs exactly once.
+  
+  n must be less than q. If n is omitted, two MOLS are returned. If q is not a
+  prime  power,  at most 2 MOLS can be created. For all values of q with q > 2
+  and  q  <> 6, a list of MOLS can be constructed. However, GUAVA does not yet
+  construct  MOLS  for  q= 2 mod 4. If it is not possible to construct n MOLS,
+  the function returns `false'.
+  
+  MOLS are used to create q-ary codes (see MOLSCode (5.1-4)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
+    [ [  0,  1,  2,  3 ],
+      [  1,  0,  3,  2 ],
+      [  2,  3,  0,  1 ],
+      [  3,  2,  1,  0 ] ]
+    gap> PrintArray( M[2] );
+    [ [  0,  2,  3,  1 ],
+      [  1,  3,  2,  0 ],
+      [  2,  0,  1,  3 ],
+      [  3,  1,  0,  2 ] ]
+    gap> PrintArray( M[3] );
+    [ [  0,  3,  1,  2 ],
+      [  1,  2,  0,  3 ],
+      [  2,  1,  3,  0 ],
+      [  3,  0,  2,  1 ] ]
+    gap> MOLS( 12, 3 );
+    false 
+  ------------------------------------------------------------------
+  
+  7.3-12 IsLatinSquare
+  
+  > IsLatinSquare( M ) _______________________________________________function
+  
+  IsLatinSquare determines if a matrix M is a Latin square. For a Latin square
+  of  size  nx  n, each row and each column contains all the integers 1,dots,n
+  exactly once.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsLatinSquare([[1,2],[2,1]]);
+    true
+    gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
+    false 
+  ------------------------------------------------------------------
+  
+  7.3-13 AreMOLS
+  
+  > AreMOLS( L ) _____________________________________________________function
+  
+  AreMOLS  determines  if  L  is  a  list of mutually orthogonal Latin squares
+  (MOLS).  For each pair of Latin squares in this list, the function checks if
+  each  ordered  pair  of  elements  that  are  in  the same position in these
+  matrices  occurs  exactly  once.  The  function  MOLS creates MOLS (see MOLS
+  (7.3-11)).
+  
+  ---------------------------  Example  ----------------------------
+    gap> M := MOLS(4,2);
+    [ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
+      [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
+    gap> AreMOLS(M);
+    true 
+  ------------------------------------------------------------------
+  
+  
+  7.4 Some functions related to the norm of a code
+  
+  In  this  section,  some functions that can be used to compute the norm of a
+  code  and  to  decide upon its normality are discussed. Typically, these are
+  applied  to  binary  linear  codes.  The  definitions  of  this section were
+  introduced in Graham and Sloane [GS85].
+  
+  7.4-1 CoordinateNorm
+  
+  > CoordinateNorm( C, coord ) _______________________________________function
+  
+  CoordinateNorm  returns  the  norm of C with respect to coordinate coord. If
+  C_a  =  c  in  C  | c_coord = a, then the norm of C with respect to coord is
+  defined as
+  
+  
+       \max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),
+  
+  
+  with the convention that d(x,C_a) = n if C_a is empty.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
+    3 
+  ------------------------------------------------------------------
+  
+  7.4-2 CodeNorm
+  
+  > CodeNorm( C ) ____________________________________________________function
+  
+  CodeNorm returns the norm of C. The norm of a code is defined as the minimum
+  of the norms for the respective coordinates of the code. In effect, for each
+  coordinate  CoordinateNorm  is  called,  and  the  minimum of the calculated
+  numbers is returned.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CodeNorm( HammingCode( 3, GF(2) ) );
+    3 
+  ------------------------------------------------------------------
+  
+  7.4-3 IsCoordinateAcceptable
+  
+  > IsCoordinateAcceptable( C, coord ) _______________________________function
+  
+  IsCoordinateAcceptable   returns   `true'   if  coordinate  coord  of  C  is
+  acceptable.  A  coordinate is called acceptable if the norm of the code with
+  respect to that coordinate is not more than two times the covering radius of
+  the code plus one.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
+    true 
+  ------------------------------------------------------------------
+  
+  7.4-4 GeneralizedCodeNorm
+  
+  > GeneralizedCodeNorm( C, subcode1, subscode2, ..., subcodek ) _____function
+  
+  GeneralizedCodeNorm returns the k-norm of C with respect to k subcodes.
+  
+  ---------------------------  Example  ----------------------------
+    gap> c := RepetitionCode( 7, GF(2) );;
+    gap> ham := HammingCode( 3, GF(2) );;
+    gap> d := EvenWeightSubcode( ham );;
+    gap> e := ConstantWeightSubcode( ham, 3 );;
+    gap> GeneralizedCodeNorm( ham, c, d, e );
+    4 
+  ------------------------------------------------------------------
+  
+  7.4-5 IsNormalCode
+  
+  > IsNormalCode( C ) ________________________________________________function
+  
+  IsNormalCode  returns  `true' if C is normal. A code is called normal if the
+  norm  of the code is not more than two times the covering radius of the code
+  plus  one.  Almost  all codes are normal, however some (non-linear) abnormal
+  codes have been found.
+  
+  Often,  it  is  difficult  to  find out whether a code is normal, because it
+  involves  computing  the  covering  radius.  However, IsNormalCode uses much
+  information  from the literature (in particular, [GS85]) about normality for
+  certain code parameters.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IsNormalCode( HammingCode( 3, GF(2) ) );
+    true 
+  ------------------------------------------------------------------
+  
+  
+  7.5 Miscellaneous functions
+  
+  In  this  section  we describe several vector space functions GUAVA uses for
+  constructing codes or performing calculations with codes.
+  
+  In  this  section, some new miscellaneous functions are described, including
+  weight  enumerators,  the  MacWilliams-transform  and  affinity  and  almost
+  affinity of codes.
+  
+  7.5-1 CodeWeightEnumerator
+  
+  > CodeWeightEnumerator( C ) ________________________________________function
+  
+  CodeWeightEnumerator returns a polynomial of the following form:
+  
+  
+       f(x) = \sum_{i=0}^{n} A_i x^i,
+  
+  
+  where A_i is the number of codewords in C with weight i.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
+    > [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
+    x^3 + x^2 + x + 1
+    gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
+    x^7 + 7*x^4 + 7*x^3 + 1 
+  ------------------------------------------------------------------
+  
+  7.5-2 CodeDistanceEnumerator
+  
+  > CodeDistanceEnumerator( C, w ) ___________________________________function
+  
+  CodeDistanceEnumerator returns a polynomial of the following form:
+  
+  
+       f(x) = \sum_{i=0}^{n} B_i x^i,
+  
+  
+  where B_i is the number of codewords with distance i to w.
+  
+  If  w is a codeword, then CodeDistanceEnumerator returns the same polynomial
+  as CodeWeightEnumerator.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
+    x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
+    gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
+    x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'
+  ------------------------------------------------------------------
+  
+  7.5-3 CodeMacWilliamsTransform
+  
+  > CodeMacWilliamsTransform( C ) ____________________________________function
+  
+  CodeMacWilliamsTransform returns a polynomial of the following form:
+  
+  
+       f(x) = \sum_{i=0}^{n} C_i x^i,
+  
+  
+  where C_i is the number of codewords with weight i in the dual code of C.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
+    7*x^4 + 1 
+  ------------------------------------------------------------------
+  
+  7.5-4 CodeDensity
+  
+  > CodeDensity( C ) _________________________________________________function
+  
+  CodeDensity returns the density of C. The density of a code is defined as
+  
+  
+       \frac{M \cdot V_q(n,t)}{q^n},
+  
+  
+  where  M is the size of the code, V_q(n,t) is the size of a sphere of radius
+  t  in GF(q^n) (which may be computed using SphereContent), t is the covering
+  radius of the code and n is the length of the code.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CodeDensity( HammingCode( 3, GF(2) ) );
+    1
+    gap> CodeDensity( ReedMullerCode( 1, 4 ) );
+    14893/2048 
+  ------------------------------------------------------------------
+  
+  7.5-5 SphereContent
+  
+  > SphereContent( n, t, F ) _________________________________________function
+  
+  SphereContent  returns the content of a ball of radius t around an arbitrary
+  element  of  the  vectorspace F^n. This is the cardinality of the set of all
+  elements of F^n that are at distance (see DistanceCodeword (3.6-2) less than
+  or equal to t from an element of F^n.
+  
+  In  the  context  of  codes,  the function is used to determine if a code is
+  perfect.  A  code  is  perfect  if  spheres of radius t around all codewords
+  partition  the  whole  ambient vector space, where t is the number of errors
+  the code can correct.
+  
+  ---------------------------  Example  ----------------------------
+    gap> SphereContent( 15, 0, GF(2) );
+    1    # Only one word with distance 0, which is the word itself
+    gap> SphereContent( 11, 3, GF(4) );
+    4984
+    gap> C := HammingCode(5);
+    a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+    #the minimum distance is 3, so the code can correct one error
+    gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
+    true 
+  ------------------------------------------------------------------
+  
+  7.5-6 Krawtchouk
+  
+  > Krawtchouk( k, i, n, q ) _________________________________________function
+  
+  Krawtchouk  returns the Krawtchouk number K_k(i). q must be a prime power, n
+  must  be  a  positive integer, k must be a non-negative integer less then or
+  equal  to  n  and  i  can  be any integer. (See KrawtchoukMat (7.3-1)). This
+  number is the value at x=i of the polynomial
+  
+  
+       K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),
+  
+  
+  where  $b(v,u)=u!/(v!(v-u)!)$  is  the  binomial  coefficient  if  $u,v$ are
+  integers. For more properties of these polynomials, see [MS83].
+  
+  ---------------------------  Example  ----------------------------
+    gap> Krawtchouk( 2, 0, 3, 2);
+    3 
+  ------------------------------------------------------------------
+  
+  7.5-7 PrimitiveUnityRoot
+  
+  > PrimitiveUnityRoot( F, n ) _______________________________________function
+  
+  PrimitiveUnityRoot  returns  a  primitive n-th root of unity in an extension
+  field  of  F. This is a finite field element a with the property a^n=1 in F,
+  and n is the smallest integer such that this equality holds.
+  
+  ---------------------------  Example  ----------------------------
+    gap> PrimitiveUnityRoot( GF(2), 15 );
+    Z(2^4)
+    gap> last^15;
+    Z(2)^0
+    gap> PrimitiveUnityRoot( GF(8), 21 );
+    Z(2^6)^3 
+  ------------------------------------------------------------------
+  
+  7.5-8 PrimitivePolynomialsNr
+  
+  > PrimitivePolynomialsNr( n, F ) ___________________________________function
+  
+  PrimitivePolynomialsNr  returns  the  number of irreducible polynomials over
+  F=GF(q)  of degree n with (maximum) period q^n-1. (According to a theorem of
+  S. Golomb, this is phi(p^n-1)/n.)
+  
+  See      also      the      GAP      function     RandomPrimitivePolynomial,
+  RandomPrimitivePolynomial (2.2-2).
+  
+  ---------------------------  Example  ----------------------------
+    gap> PrimitivePolynomialsNr(3,4);
+    12
+    
+  ------------------------------------------------------------------
+  
+  7.5-9 IrreduciblePolynomialsNr
+  
+  > IrreduciblePolynomialsNr( n, F ) _________________________________function
+  
+  PrimitivePolynomialsNr  returns  the  number of irreducible polynomials over
+  F=GF(q) of degree n.
+  
+  ---------------------------  Example  ----------------------------
+    gap> IrreduciblePolynomialsNr(3,4);
+    20
+    
+  ------------------------------------------------------------------
+  
+  7.5-10 MatrixRepresentationOfElement
+  
+  > MatrixRepresentationOfElement( a, F ) ____________________________function
+  
+  Here  F  is  either a finite extension of the ``base field'' GF(p) or of the
+  rationals Q}, and ain F. The command MatrixRepresentationOfElement returns a
+  matrix representation of a over the base field.
+  
+  If  the  element  a  is  defined  over  the  base  field then it returns the
+  corresponding 1x 1 matrix.
+  
+  ---------------------------  Example  ----------------------------
+    gap> a:=Random(GF(4));
+    0*Z(2)
+    gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+     .
+    gap> a:=Random(GF(4));
+    Z(2^2)
+    gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+     . 1
+     1 1
+    gap>
+    
+  ------------------------------------------------------------------
+  
+  7.5-11 ReciprocalPolynomial
+  
+  > ReciprocalPolynomial( P ) ________________________________________function
+  
+  ReciprocalPolynomial  returns  the  reciprocal  of  polynomial  P. This is a
+  polynomial  with coefficients of P in the reverse order. So if P=a_0 + a_1 X
+  +  ...  + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0
+  X^n.
+  
+  This command can also be called using the syntax ReciprocalPolynomial( P , n
+  ).  In this form, the number of coefficients of P is assumed to be less than
+  or  equal  to  n+1  (with zero coefficients added in the highest degrees, if
+  necessary). Therefore, the reciprocal polynomial also has degree n+1.
+  
+  ---------------------------  Example  ----------------------------
+    gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+    Z(3)^0+x_1^2-x_1^3
+    gap> RecP := ReciprocalPolynomial( P );
+    -Z(3)^0+x_1+x_1^3
+    gap> ReciprocalPolynomial( RecP ) = P;
+    true 
+    gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+    Z(3)^0+x_1^2-x_1^3
+    gap> ReciprocalPolynomial( P, 6 );
+    -x_1^3+x_1^4+x_1^6
+  ------------------------------------------------------------------
+  
+  7.5-12 CyclotomicCosets
+  
+  > CyclotomicCosets( q, n ) _________________________________________function
+  
+  CyclotomicCosets  returns  the cyclotomic cosets of q mod n. q and n must be
+  relatively  prime.  Each  of  the elements of the returned list is a list of
+  integers  that belong to one cyclotomic coset. A q-cyclotomic coset of s mod
+  n  is  a  set  of  the  form  s,sq,sq^2,...,sq^r-1,  where r is the smallest
+  positive  integer  such  that  sq^r-s is 0 mod n. In other words, each coset
+  contains  all  multiplications  of  the coset representative by q mod n. The
+  coset  representative  is  the  smallest  integer that isn't in the previous
+  cosets.
+  
+  ---------------------------  Example  ----------------------------
+    gap> CyclotomicCosets( 2, 15 );
+    [ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
+      [ 7, 14, 13, 11 ] ]
+    gap> CyclotomicCosets( 7, 6 );
+    [ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 
+  ------------------------------------------------------------------
+  
+  7.5-13 WeightHistogram
+  
+  > WeightHistogram( C[, h] ) ________________________________________function
+  
+  The  function  WeightHistogram  plots  a histogram of weights in code C. The
+  maximum  length  of a column is h. Default value for h is 1/3 of the size of
+  the  screen.  The  number  that  appears  at the top of the histogram is the
+  maximum value of the list of weights.
+  
+  ---------------------------  Example  ----------------------------
+    gap> H := HammingCode(2, GF(5));
+    a linear [6,4,3]1 Hamming (2,5) code over GF(5)
+    gap> WeightDistribution(H);
+    [ 1, 0, 0, 80, 120, 264, 160 ]
+    gap> WeightHistogram(H);
+    264----------------
+                   *
+                   *
+                   *
+                   *
+                   *  *
+                *  *  *
+             *  *  *  *
+             *  *  *  *
+    +--------+--+--+--+--
+    0  1  2  3  4  5  6 
+  ------------------------------------------------------------------
+  
+  7.5-14 MultiplicityInList
+  
+  > MultiplicityInList( L, a ) _______________________________________function
+  
+  This  is a very simple list command which returns how many times a occurs in
+  L.  It returns 0 if a is not in L. (The GAP command Collected does not quite
+  handle this ``extreme" case.)
+  
+  ---------------------------  Example  ----------------------------
+    gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+    gap> MultiplicityInList(L,1);
+    3
+    gap> MultiplicityInList(L,6);
+    0
+  ------------------------------------------------------------------
+  
+  7.5-15 MostCommonInList
+  
+  > MostCommonInList( L ) ____________________________________________function
+  
+  Input: a list L
+  
+  Output: an a in L which occurs at least as much as any other in L
+  
+  ---------------------------  Example  ----------------------------
+    gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+    gap> MostCommonInList(L);
+    1
+  ------------------------------------------------------------------
+  
+  7.5-16 RotateList
+  
+  > RotateList( L ) __________________________________________________function
+  
+  Input: a list L
+  
+  Output: a list L' which is the cyclic rotation of L (to the right)
+  
+  ---------------------------  Example  ----------------------------
+    gap> L:=[1,2,3,4];;
+    gap> RotateList(L);
+    [2,3,4,1]
+  ------------------------------------------------------------------
+  
+  7.5-17 CirculantMatrix
+  
+  > CirculantMatrix( k, L ) __________________________________________function
+  
+  Input: integer k, a list L of length n
+  
+  Output: kxn matrix whose rows are cyclic rotations of the list L
+  
+  ---------------------------  Example  ----------------------------
+    gap> k:=3; L:=[1,2,3,4];;
+    gap> M:=CirculantMatrix(k,L);;
+    gap> Display(M);
+  ------------------------------------------------------------------
+  
+  
+  7.6 Miscellaneous polynomial functions
+  
+  In  this  section  we describe several multivariate polynomial GAP functions
+  GUAVA uses for constructing codes or performing calculations with codes.
+  
+  7.6-1 MatrixTransformationOnMultivariatePolynomial 
+  
+  > MatrixTransformationOnMultivariatePolynomial ( AfR ) _____________function
+  
+  A  is  an nx n matrix with entries in a field F, R is a polynomial ring of n
+  variables,  say  F[x_1,...,x_n],  and  f  is  a polynomial in R. Returns the
+  composition fcirc A.
+  
+  7.6-2 DegreeMultivariatePolynomial
+  
+  > DegreeMultivariatePolynomial( f, R ) _____________________________function
+  
+  This  command  takes  two  arguments,  f, a multivariate polynomial, and R a
+  polynomial  ring  over a field F containing f, say R=F[x_1,x_2,...,x_n]. The
+  output is simply the maximum degrees of all the monomials occurring in f.
+  
+  This command can be used to compute the degree of an affine plane curve.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);
+    PolynomialRing(..., [ x_1, x_2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> x:=vars[1];; y:=vars[2];;
+    gap> poly:=y^2-x*(x^2-1);;
+    gap> DegreeMultivariatePolynomial(poly,R2);
+    3
+    
+  ------------------------------------------------------------------
+  
+  7.6-3 DegreesMultivariatePolynomial
+  
+  > DegreesMultivariatePolynomial( f, R ) ____________________________function
+  
+  Returns  a list of information about the multivariate polynomial f. Nice for
+  other programs but mostly unreadable by GAP users.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);
+    PolynomialRing(..., [ x_1, x_2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> x:=vars[1];; y:=vars[2];;
+    gap> poly:=y^2-x*(x^2-1);;
+    gap> DegreesMultivariatePolynomial(poly,R2);
+    [ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
+      [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
+    gap>
+    
+  ------------------------------------------------------------------
+  
+  7.6-4 CoefficientMultivariatePolynomial
+  
+  > CoefficientMultivariatePolynomial( f, var, power, R ) ____________function
+  
+  The   command  CoefficientMultivariatePolynomial  takes  four  arguments:  a
+  multivariant  polynomial  f,  a  variable  name var, an integer power, and a
+  polynomial  ring  R  containing  f.  For  example,  if  f  is a multivariate
+  polynomial  in  R  = F[x_1,x_2,...,x_n] then var must be one of the x_i. The
+  output is the coefficient of x_i^power in f.
+  
+  (Not sure if F needs to be a field in fact ...)
+  
+  Related to the GAP command PolynomialCoefficientsPolynomial.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);
+    PolynomialRing(..., [ x_1, x_2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> x:=vars[1];; y:=vars[2];;
+    gap> poly:=y^2-x*(x^2-1);;
+    gap> PolynomialCoefficientsOfPolynomial(poly,x);
+    [ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
+    gap> PolynomialCoefficientsOfPolynomial(poly,y);
+    [ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
+    gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
+    -x_1^3+x_1
+    gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
+    0*Z(11)
+    gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
+    Z(11)^0
+    gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
+    x_2^2
+    gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
+    Z(11)^0
+    gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
+    0*Z(11)
+    gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
+    -Z(11)^0
+    
+  ------------------------------------------------------------------
+  
+  7.6-5 SolveLinearSystem
+  
+  > SolveLinearSystem( L, vars ) _____________________________________function
+  
+  Input: L is a list of linear forms in the variables vars.
+  
+  Output: the solution of the system, if its unique.
+  
+  The  procedure  is  straightforward:  Find the associated matrix A, find the
+  "constant vector" b, and solve A*v=b. No error checking is performed.
+  
+  Related to the GAP command SolutionMat( A, b ).
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);;
+    gap> R2:=PolynomialRing(F,2);
+    PolynomialRing(..., [ x_1, x_2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+    gap> x:=vars[1];; y:=vars[2];;
+    gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+    gap> soln:=SolveLinearSystem([f,g],[x,y]);
+    [ Z(11)^3, Z(11)^2 ]
+    gap> Value(f,[x,y],soln); # checking okay
+    0*Z(11)
+    gap> Value(g,[x,y],col); # checking okay
+    0*Z(11)
+    
+  ------------------------------------------------------------------
+  
+  7.6-6 GuavaVersion
+  
+  > GuavaVersion(  ) _________________________________________________function
+  
+  Returns the current version of Guava. Same as guava\_version().
+  
+  ---------------------------  Example  ----------------------------
+    gap> GuavaVersion();
+    "2.7"
+    
+  ------------------------------------------------------------------
+  
+  7.6-7 ZechLog
+  
+  > ZechLog( x, b, F ) _______________________________________________function
+  
+  Returns  the  Zech  log  of  x  to  base b, ie the i such that $x+1=b^i$, so
+  $y+z=y(1+z/y)=b^k$,   where   k=Log(y,b)+ZechLog(z/y,b)  and  b  must  be  a
+  primitive element of F.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);; l := One(F);;
+    gap> ZechLog(2*l,8*l,F);
+    -24
+    gap> 8*l+l;(2*l)^(-24);
+    Z(11)^6
+    Z(11)^6
+    
+  ------------------------------------------------------------------
+  
+  7.6-8 CoefficientToPolynomial
+  
+  > CoefficientToPolynomial( coeffs, R ) _____________________________function
+  
+  The  function  CoefficientToPolynomial  returns  the  degree  d-1 polynomial
+  c_0+c_1x+...+c_d-1x^d-1,  where  coeffs  is  a  list of elements of a field,
+  coeffs= c_0,...,c_d-1, and R is a univariate polynomial ring.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> coeffs:=Z(11)^0*[1,2,3,4];
+    [ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
+    gap> CoefficientToPolynomial(coeffs,R1);
+    Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0
+  ------------------------------------------------------------------
+  
+  7.6-9 DegreesMonomialTerm
+  
+  > DegreesMonomialTerm( m, R ) ______________________________________function
+  
+  The  function  DegreesMonomialTerm returns the list of degrees to which each
+  variable  in  the  multivariate  polynomial ring R occurs in the monomial m,
+  where coeffs is a list of elements of a field.
+  
+  ---------------------------  Example  ----------------------------
+    gap> F:=GF(11);
+    GF(11)
+    gap> R1:=PolynomialRing(F,["a"]);;
+    gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+    gap> b:=X(F,"b",var1);
+    b
+    gap> var2:=Concatenation(var1,[b]);
+    [ a, b ]
+    gap> R2:=PolynomialRing(F,var2);
+    PolynomialRing(..., [ a, b ])
+    gap> c:=X(F,"c",var2);
+    c
+    gap> var3:=Concatenation(var2,[c]);
+    [ a, b, c ]
+    gap> R3:=PolynomialRing(F,var3);
+    PolynomialRing(..., [ a, b, c ])
+    gap> m:=b^3*c^7;
+    b^3*c^7
+    gap> DegreesMonomialTerm(m,R3);
+    [ 0, 3, 7 ]
+  ------------------------------------------------------------------
+  
+  7.6-10 DivisorsMultivariatePolynomial
+  
+  > DivisorsMultivariatePolynomial( f, R ) ___________________________function
+  
+  The  function  DivisorsMultivariatePolynomial returns the list of polynomial
+  divisors  of  f in the multivariate polynomial ring R with coefficients in a
+  field.  This  program  uses a simple but slow algorithm (see Joachim von zur
+  Gathen,  Jürgen  Gerhard,  [GG03],  exercise 16.10) which first converts the
+  multivariate  polynomial  f to an associated univariate polynomial f^*, then
+  Factors  f^*,  and  finally  converts these univariate factors back into the
+  multivariate  polynomial  factors  of f. Since Factors is non-deterministic,
+  DivisorsMultivariatePolynomial is non-deterministic as well.
+  
+  ---------------------------  Example  ----------------------------
+    gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
+    PolynomialRing(..., [ x1, x2 ])
+    gap> vars:=IndeterminatesOfPolynomialRing(R2);
+    [ x1, x2 ]
+    gap> x2:=vars[2];
+    x2
+    gap> x1:=vars[1];
+    x1
+    gap> f:=x1^3+x2^3;;
+    gap> DivisorsMultivariatePolynomial(f,R2);
+    [ x1+x2, x1+x2, x1+x2 ]
+  ------------------------------------------------------------------
+  
diff --git a/doc/chapBib.html b/doc/chapBib.html
new file mode 100644
index 0000000..8e6760c
--- /dev/null
+++ b/doc/chapBib.html
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - References</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap7.html">Previous Chapter</a>    <a href="chapInd.html">Next Chapter</a>   </div>
+
+<p><a id="X7A6F98FD85F02BFE" name="X7A6F98FD85F02BFE"></a></p>
+
+<h3>References</h3>
+
+
+<p><a id="biBAlltop84" name="biBAlltop84"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">All84</span>]   <b class='Bib_author'>Alltop, W. O.</b> <i class='Bib_title'>A method for extending binary linear codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>30</em>,
+ (<span class='Bib_year'>1984)</span>,
+ <span class='Bib_pages'>p. 871--872</span></p>
+
+
+<p><a id="biBBM03" name="biBBM03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">BMd)</span>]   <b class='Bib_author'>Bazzi, L. and Mitter, S. K.</b> <i class='Bib_title'>Some constructions of codes from group actions</i>,
+ <span class='Bib_journal'>preprint</span>,
+ (<span class='Bib_year'>March 2003 (submitted))</span></p>
+
+
+<p><a id="biBBr" name="biBBr"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Bro06</span>]   <b class='Bib_author'>Brouwer, A. E.</b> <i class='Bib_title'>Bounds on the minimum distance of linear codes</i>,
+ <span class='Bib_publisher'>On the internet at the URL:
+      http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html</span>,
+ (<span class='Bib_year'>1997-2006)</span></p>
+
+
+<p><a id="biBBrouwer98" name="biBBrouwer98"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Bro98</span>]   <b class='Bib_author'>Brouwer, A. E.</b> (<span class='Bib_editor'>Pless, V. S. and Huffman, W. C.</span>, Ed.)<i class='Bib_title'>Bounds on the Size of Linear Codes</i> in ,
+ <i class='Bib_booktitle'>Handbook of Coding Theory</i>,
+ <span class='Bib_publisher'>{Elsevier, North Holland}</span>,
+ (<span class='Bib_year'>1998)</span>,
+ <span class='Bib_pages'>p. 295--461</span></p>
+
+
+<p><a id="biBChen69" name="biBChen69"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Che69</span>]   <b class='Bib_author'>Chen, C. L.</b> <i class='Bib_title'>Some Results on Algebraically Structured Error-Correcting
+      Codes</i>,
+ <span class='Bib_school'>{University of Hawaii}</span>,
+ <span class='Bib_address'>USA</span>,
+ (<span class='Bib_year'>1969)</span></p>
+
+
+<p><a id="biBGDT91" name="biBGDT91"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GDT91</span>]   <b class='Bib_author'>Gabidulin, E., Davydov, A. and Tombak, L.</b> <i class='Bib_title'>Linear codes with covering radius 2 and other new covering
+              codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>37</em> (<span class='Bib_number'>1)</span>,
+ (<span class='Bib_year'>1991)</span>,
+ <span class='Bib_pages'>p. 219--224</span></p>
+
+
+<p><a id="biBGao03" name="biBGao03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Gao03</span>]   <b class='Bib_author'>Gao, S.</b> <i class='Bib_title'>A new algorithm for decoding Reed-Solomon codes</i>,
+ <span class='Bib_journal'>Communications, Information and Network Security 
+(V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.)</span>,
+ <span class='Bib_publisher'>Kluwer Academic Publishers</span>,
+ (<span class='Bib_year'>2003)</span>,
+ <span class='Bib_pages'>p. pp. 55-68</span></p>
+
+
+<p><a id="biBGS85" name="biBGS85"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GS85</span>]   <b class='Bib_author'>Graham, R. and Sloane, N.</b> <i class='Bib_title'>On the covering radius of codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>31</em> (<span class='Bib_number'>1)</span>,
+ (<span class='Bib_year'>1985)</span>,
+ <span class='Bib_pages'>p. 385--401</span></p>
+
+
+<p><a id="biBHan99" name="biBHan99"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Han99</span>]   <b class='Bib_author'>Hansen, J. P.</b> <i class='Bib_title'>Toric surfaces and error-correcting codes</i>,
+ <span class='Bib_journal'>Coding theory, cryptography, and related areas 
+(ed., Bachmann et al) Springer-Verlag</span>,
+ (<span class='Bib_year'>1999)</span></p>
+
+
+<p><a id="biBHHKK07" name="biBHHKK07"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">HHKK07</span>]   <b class='Bib_author'>Harada, M., Holzmann, W., Kharaghani, H. and Khorvash, M.</b> <i class='Bib_title'>Extremal Ternary Self-Dual Codes Constructed from Negacirculant
+      Matrices</i>,
+ <span class='Bib_journal'>Graphs and Combinatorics</span>,
+ <em class='Bib_volume'>23</em> (<span class='Bib_number'>4)</span>,
+ (<span class='Bib_year'>2007)</span>,
+ <span class='Bib_pages'>p. 401--417</span></p>
+
+
+<p><a id="biBHe72" name="biBHe72"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Hel72</span>]   <b class='Bib_author'>Helgert, H. J.</b> <i class='Bib_title'>Srivastava codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>18</em>,
+ (<span class='Bib_year'>1972)</span>,
+ <span class='Bib_pages'>p. 292--297</span></p>
+
+
+<p><a id="biBHP03" name="biBHP03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">HP03</span>]   <b class='Bib_author'>Huffman, W. C. and Pless, V.</b> <i class='Bib_title'>Fundamentals of error-correcting codes</i>,
+ <span class='Bib_publisher'>Cambridge Univ. Press</span>,
+ (<span class='Bib_year'>2003)</span></p>
+
+
+<p><a id="biBJo04" name="biBJo04"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Joy04</span>]   <b class='Bib_author'>Joyner, D.</b> <i class='Bib_title'>Toric codes over finite fields</i>,
+ <span class='Bib_journal'>Applicable Algebra in Engineering, 
+                      Communication and Computing</span>,
+ <em class='Bib_volume'>15</em>,
+ (<span class='Bib_year'>2004)</span>,
+ <span class='Bib_pages'>p. 63--79</span></p>
+
+
+<p><a id="biBJH04" name="biBJH04"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">JH04</span>]   <b class='Bib_author'>Justesen, J. and Hoholdt, T.</b> <i class='Bib_title'>A course in error-correcting codes</i>,
+ <span class='Bib_publisher'>European Mathematical Society</span>,
+ (<span class='Bib_year'>2004)</span></p>
+
+
+<p><a id="biBLeon82" name="biBLeon82"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo82</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>Computing automorphism groups of error-correcting codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>28</em>,
+ (<span class='Bib_year'>1982)</span>,
+ <span class='Bib_pages'>p. 496--511</span></p>
+
+
+<p><a id="biBLeon88" name="biBLeon88"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo88</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>A probabilistic algorithm for computing minimum weights of
+                   large error-correcting codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>34</em>,
+ (<span class='Bib_year'>1988)</span>,
+ <span class='Bib_pages'>p. 1354--1359</span></p>
+
+
+<p><a id="biBLeon91" name="biBLeon91"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo91</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>Permutation group algorithms based on partitions, I: theory
+      and algorithms</i>,
+ <span class='Bib_journal'>J. Symbolic Comput.</span>,
+ <em class='Bib_volume'>12</em>,
+ (<span class='Bib_year'>1991)</span>,
+ <span class='Bib_pages'>p. 533--583</span></p>
+
+
+<p><a id="biBMS83" name="biBMS83"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">MS83</span>]   <b class='Bib_author'>MacWilliams, F. J. and Sloane, N. J. A.</b> <i class='Bib_title'>The theory of error-correcting codes</i>,
+ <span class='Bib_publisher'>Amsterdam: North-Holland</span>,
+ (<span class='Bib_year'>1983)</span></p>
+
+
+<p><a id="biBSloane72" name="biBSloane72"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">SRC72</span>]   <b class='Bib_author'>Sloane, N., Reddy, S. and Chen, C.</b> <i class='Bib_title'>New binary codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>18</em>,
+ (<span class='Bib_year'>1972)</span>,
+ <span class='Bib_pages'>p. 503--510</span></p>
+
+
+<p><a id="biBSt93" name="biBSt93"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Sti93</span>]   <b class='Bib_author'>Stichtenoth, H.</b> <i class='Bib_title'>Algebraic function fields and codes</i>,
+ <span class='Bib_publisher'>Springer-Verlag</span>,
+ (<span class='Bib_year'>1993)</span></p>
+
+
+<p><a id="biBGG03" name="biBGG03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GG03</span>]   <b class='Bib_author'>von zur Gathen, J. and J. Gerhard,</b> <i class='Bib_title'>Modern computer algebra</i>,
+ <span class='Bib_publisher'>Cambridge Univ. Press</span>,
+ (<span class='Bib_year'>2003)</span></p>
+
+
+<p><a id="biBZimmermann96" name="biBZimmermann96"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Zim96</span>]   <b class='Bib_author'>Zimmermann, K. -.H.</b> <i class='Bib_title'>Integral Hecke Modules, Integral Generalized Reed-Muller
+      Codes, and Linear Codes</i> (<span class='Bib_number'>3--96)</span>,
+ <span class='Bib_address'>Hamburg, Germany</span>,
+ (<span class='Bib_year'>1996)</span></p>
+
+<p> </p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap7.html">Previous Chapter</a>    <a href="chapInd.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chapBib.txt b/doc/chapBib.txt
new file mode 100644
index 0000000..846ec17
--- /dev/null
+++ b/doc/chapBib.txt
@@ -0,0 +1,82 @@
+  
+  
+  References
+  
+  [All84]  Alltop, W. O., A method for extending binary linear codes, IEEE
+  Trans. Inform. Theory, 30 (1984), 871--872
+  
+  [BMd)]  Bazzi,  L.  and  Mitter, S. K., Some constructions of codes from
+  group actions, preprint (March 2003 (submitted))
+  
+  [Bro06]  Brouwer, A. E., Bounds on the minimum distance of linear codes,
+  On          the          internet          at          the          URL:
+  http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html (1997-2006)
+  
+  [Bro98] Brouwer, A. E. (Pless, V. S. and Huffman, W. C., Ed.), Bounds on
+  the Size of Linear Codes, in Handbook of Coding Theory, {Elsevier, North
+  Holland} (1998), 295--461
+  
+  [Che69]   Chen,   C.   L.,  Some  Results  on  Algebraically  Structured
+  Error-Correcting Codes, {University of Hawaii}, USA (1969)
+  
+  [GDT91]  Gabidulin,  E.,  Davydov,  A. and Tombak, L., Linear codes with
+  covering  radius  2  and  other  new covering codes, IEEE Trans. Inform.
+  Theory, 37, 1 (1991), 219--224
+  
+  [Gao03]  Gao,  S.,  A  new  algorithm  for  decoding Reed-Solomon codes,
+  Communications,  Information  and  Network  Security (V. Bhargava, H. V.
+  Poor,  V.  Tarokh and S. Yoon, Eds.), Kluwer Academic Publishers (2003),
+  pp. 55-68
+  
+  [GS85]  Graham, R. and Sloane, N., On the covering radius of codes, IEEE
+  Trans. Inform. Theory, 31, 1 (1985), 385--401
+  
+  [Han99] Hansen, J. P., Toric surfaces and error-correcting codes, Coding
+  theory,   cryptography,   and   related  areas  (ed.,  Bachmann  et  al)
+  Springer-Verlag (1999)
+  
+  [HHKK07]  Harada,  M.,  Holzmann,  W.,  Kharaghani, H. and Khorvash, M.,
+  Extremal   Ternary   Self-Dual   Codes  Constructed  from  Negacirculant
+  Matrices, Graphs and Combinatorics, 23, 4 (2007), 401--417
+  
+  [Hel72] Helgert, H. J., Srivastava codes, IEEE Trans. Inform. Theory, 18
+  (1972), 292--297
+  
+  [HP03]  Huffman,  W.  C. and Pless, V., Fundamentals of error-correcting
+  codes, Cambridge Univ. Press (2003)
+  
+  [Joy04]  Joyner,  D., Toric codes over finite fields, Applicable Algebra
+  in Engineering, Communication and Computing, 15 (2004), 63--79
+  
+  [JH04] Justesen, J. and Hoholdt, T., A course in error-correcting codes,
+  European Mathematical Society (2004)
+  
+  [Leo82]  Leon,  J. S., Computing automorphism groups of error-correcting
+  codes, IEEE Trans. Inform. Theory, 28 (1982), 496--511
+  
+  [Leo88]  Leon,  J.  S.,  A probabilistic algorithm for computing minimum
+  weights  of large error-correcting codes, IEEE Trans. Inform. Theory, 34
+  (1988), 1354--1359
+  
+  [Leo91]  Leon,  J. S., Permutation group algorithms based on partitions,
+  I: theory and algorithms, J. Symbolic Comput., 12 (1991), 533--583
+  
+  [MS83]  MacWilliams,  F.  J.  and  Sloane,  N.  J.  A.,  The  theory  of
+  error-correcting codes, Amsterdam: North-Holland (1983)
+  
+  [SRC72]  Sloane,  N.,  Reddy,  S.  and  Chen, C., New binary codes, IEEE
+  Trans. Inform. Theory, 18 (1972), 503--510
+  
+  [Sti93]   Stichtenoth,   H.,   Algebraic   function  fields  and  codes,
+  Springer-Verlag (1993)
+  
+  [GG03]  von  zur  Gathen,  J. and J. Gerhard, , Modern computer algebra,
+  Cambridge Univ. Press (2003)
+  
+  [Zim96]   Zimmermann,   K.   -.H.,   Integral  Hecke  Modules,  Integral
+  Generalized Reed-Muller Codes, and Linear Codes, 3--96, Hamburg, Germany
+  (1996)
+  
+  
+  
+  -------------------------------------------------------
diff --git a/doc/chapInd.html b/doc/chapInd.html
new file mode 100644
index 0000000..88ce5ea
--- /dev/null
+++ b/doc/chapInd.html
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Index</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chapBib.html">Previous Chapter</a>   </div>
+
+<p><a id="X83A0356F839C696F" name="X83A0356F839C696F"></a></p>
+
+<div class="index">
+<h3>Index</h3>
+
+< >  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+< >  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+<code class="func">*</code>  <a href="chap4.html#X8123456781234567">4.2-2</a><br />
+<code class="func">*</code>  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+<code class="func">+</code>  <a href="chap3.html#X7F2703417F270341">3.3-1</a><br />
+<code class="func">+</code>  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+<code class="func">+</code>  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+<code class="func">-</code>  <a href="chap3.html#X81B1391281B13912">3.3-2</a><br />
+<code class="func">=</code>  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+<code class="func">=</code>  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+A(n,d)  <a href="chap7.html#X8301FA9F7C6C7445">7.1-7</a><br />
+acceptable coordinate  <a href="chap7.html#X7ED2EF368203AF47">7.4-2</a><br />
+acceptable coordinate  <a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3</a><br />
+<code class="func">AClosestVectorComb..MatFFEVecFFECoords</code>  <a href="chap2.html#X870DE258833C5AA0">2.1-2</a><br />
+<code class="func">AClosestVectorCombinationsMatFFEVecFFE</code>  <a href="chap2.html#X82E5987E81487D18">2.1-1</a><br />
+<code class="func">ActionMoebiusTransformationOnDivisorP1 </code>  <a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18</a><br />
+<code class="func">ActionMoebiusTransformationOnFunction </code>  <a href="chap5.html#X85A0419580ED0391">5.7-17</a><br />
+<code class="func">AddedElementsCode</code>  <a href="chap6.html#X784E1255874FCA8A">6.1-8</a><br />
+affine code  <a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13</a><br />
+<code class="func">AffineCurve</code>  <a href="chap5.html#X802DD9FB79A9ACA7">5.7-1</a><br />
+<code class="func">AffinePointsOnCurve</code>  <a href="chap5.html#X857EFE567C05C981">5.7-2</a><br />
+<code class="func">AlternantCode</code>  <a href="chap5.html#X851592C7811D3D2A">5.2-6</a><br />
+<code class="func">AmalgamatedDirectSumCode</code>  <a href="chap6.html#X7E17107686A845DB">6.2-7</a><br />
+<code class="func">AreMOLS</code>  <a href="chap7.html#X81B9B40B7B2D97D5">7.3-13</a><br />
+<code class="func">AsSSortedList</code>  <a href="chap4.html#X856D927378C33548">4.5-5</a><br />
+<code class="func">AugmentedCode</code>  <a href="chap6.html#X8134BE2B8478BE8A">6.1-6</a><br />
+<code class="func">AutomorphismGroup</code>  <a href="chap4.html#X87677B0787B4461A">4.4-3</a><br />
+<code class="func">BCHCode</code>  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+<code class="func">BestKnownLinearCode</code>  <a href="chap5.html#X871508567CB34D96">5.2-14</a><br />
+<code class="func">BinaryGolayCode</code>  <a href="chap5.html#X80ED89C079CD0D09">5.4-1</a><br />
+<code class="func">BitFlipDecoder</code>  <a href="chap4.html#X80E17FA27DCAB676">4.10-5</a><br />
+<code class="func">BlockwiseDirectSumCode</code>  <a href="chap6.html#X7D8981AF7DFE9814">6.2-8</a><br />
+Bose distance  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+bound, Gilbert-Varshamov lower  <a href="chap7.html#X7FDF54BA81115D88">7.1-9</a><br />
+bound, sphere packing lower  <a href="chap7.html#X7CF15D2084499869">7.1-10</a><br />
+bounds, Elias  <a href="chap7.html#X7A26E2537DFF4409">7.1-4</a><br />
+bounds, Griesmer  <a href="chap7.html#X86A5A7C67F625A40">7.1-5</a><br />
+bounds, Hamming  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+bounds, Johnson  <a href="chap7.html#X828095537C91FDFA">7.1-2</a><br />
+bounds, Plotkin  <a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3</a><br />
+bounds, Singleton  <a href="chap7.html#X87C753EB840C34D3">7.1</a><br />
+bounds, sphere packing bound  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+<code class="func">BoundsCoveringRadius</code>  <a href="chap7.html#X8320D1C180A1AAAD">7.2-1</a><br />
+<code class="func">BoundsMinimumDistance</code>  <a href="chap7.html#X7B3858B27A9E509A">7.1-13</a><br />
+<code class="func">BZCode</code>  <a href="chap6.html#X790C614985BFAE16">6.2-11</a><br />
+<code class="func">BZCodeNC</code>  <a href="chap6.html#X820327D6854A50B5">6.2-12</a><br />
+check polynomial  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+check polynomial  <a href="chap5.html#X8366CC3685F0BC85">5.5</a><br />
+<code class="func">CheckMat</code>  <a href="chap4.html#X85D4B26E7FB38D57">4.7-2</a><br />
+<code class="func">CheckMatCode</code>  <a href="chap5.html#X848D3F7B805DEB66">5.2-3</a><br />
+<code class="func">CheckMatCodeMutable</code>  <a href="chap5.html#X7CDDDFE47A10A008">5.2-2</a><br />
+<code class="func">CheckPol</code>  <a href="chap4.html#X7C45AA317BB1195F">4.7-4</a><br />
+<code class="func">CheckPolCode</code>  <a href="chap5.html#X82440B78845F7F6E">5.5-2</a><br />
+<code class="func">CirculantMatrix</code>  <a href="chap7.html#X85E526367878F72A">7.5-17</a><br />
+code  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, (n,M,d)  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, [n, k, d]r  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, AG  <a href="chap5.html#X7AE2B2CD7C647990">5.7</a><br />
+code, alternant  <a href="chap5.html#X801C88D578DA6ACA">5.2-5</a><br />
+code, Bose-Chaudhuri-Hockenghem  <a href="chap5.html#X818F0E6583E01D4B">5.5-3</a><br />
+code, conference  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+code, Cordaro-Wagner  <a href="chap5.html#X7A38EB3178961F3E">5.2-9</a><br />
+code, cyclic  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, Davydov  <a href="chap5.html#X873950F67D4A9184">5.3-2</a><br />
+code, doubly-even  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+code, element test  <a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1</a><br />
+code, elements of  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, evaluation  <a href="chap5.html#X850A28C579137220">5.6</a><br />
+code, even  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+code, Fire  <a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9</a><br />
+code, Gabidulin  <a href="chap5.html#X858721967BE44000">5.3</a><br />
+code, Golay (binary)  <a href="chap5.html#X81F6E4A785F368B0">5.4</a><br />
+code, Golay (ternary)  <a href="chap5.html#X84520C7983538806">5.4-2</a><br />
+code, Goppa (classical)  <a href="chap5.html#X851592C7811D3D2A">5.2-6</a><br />
+code, greedy  <a href="chap5.html#X816353397F25B62E">5.1-6</a><br />
+code, Hadamard  <a href="chap5.html#X81AACBDD86E89D7D">5.1-1</a><br />
+code, Hamming  <a href="chap5.html#X848D3F7B805DEB66">5.2-3</a><br />
+code, linear  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, maximum distance separable  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+code, Nordstrom-Robinson  <a href="chap5.html#X7D87DD6380B2CE69">5.1-5</a><br />
+code, perfect  <a href="chap4.html#X85E3BD26856424F7">4.3-6</a><br />
+code, Reed-Muller  <a href="chap5.html#X7DECB0A57C798583">5.2-4</a><br />
+code, Reed-Solomon  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+code, self-dual  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+code, self-orthogonal  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+code, singly-even  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+code, Srivastava  <a href="chap5.html#X7EE808BB7D1E487A">5.2-7</a><br />
+code, subcode  <a href="chap4.html#X79CA175481F8105F">4.3-2</a><br />
+code, Tombak  <a href="chap5.html#X7F5BE77B7F343182">5.3-3</a><br />
+code, toric  <a href="chap5.html#X7EE68B58872D7E82">5.6-4</a><br />
+code, unrestricted  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">CodeDensity</code>  <a href="chap7.html#X7903286078F8051B">7.5-4</a><br />
+<code class="func">CodeDistanceEnumerator</code>  <a href="chap7.html#X84DA928083B103A0">7.5-2</a><br />
+<code class="func">CodeIsomorphism</code>  <a href="chap4.html#X874DED8E86BC180B">4.4-2</a><br />
+<code class="func">CodeMacWilliamsTransform</code>  <a href="chap7.html#X84B2BE66780EFBF9">7.5-3</a><br />
+<code class="func">CodeNorm</code>  <a href="chap7.html#X7ED2EF368203AF47">7.4-2</a><br />
+codes, addition  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+codes, decoding  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+codes, direct sum  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+codes, encoding  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+codes, product  <a href="chap4.html#X8123456781234567">4.2-2</a><br />
+<code class="func">CodeWeightEnumerator</code>  <a href="chap7.html#X871286437DE7A6A4">7.5-1</a><br />
+<code class="func">Codeword</code>  <a href="chap3.html#X7B9E353D852851AA">3.1-1</a><br />
+<code class="func">CodewordNr</code>  <a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2</a><br />
+codewords, addition  <a href="chap3.html#X7F2703417F270341">3.3-1</a><br />
+codewords, cosets  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+codewords, subtraction  <a href="chap3.html#X81B1391281B13912">3.3-2</a><br />
+<code class="func">CoefficientMultivariatePolynomial</code>  <a href="chap7.html#X7E9021697A61A60F">7.6-4</a><br />
+<code class="func">CoefficientToPolynomial</code>  <a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8</a><br />
+conference matrix  <a href="chap5.html#X8122BA417F705997">5.1-3</a><br />
+<code class="func">ConferenceCode</code>  <a href="chap5.html#X8122BA417F705997">5.1-3</a><br />
+<code class="func">ConstantWeightSubcode</code>  <a href="chap6.html#X873EA5EE85699832">6.1-18</a><br />
+<code class="func">ConstructionBCode</code>  <a href="chap6.html#X7E92DC9581F96594">6.1-13</a><br />
+<code class="func">ConstructionXCode</code>  <a href="chap6.html#X7C37D467791CE99B">6.2-9</a><br />
+<code class="func">ConstructionXXCode</code>  <a href="chap6.html#X7B50943B8014134F">6.2-10</a><br />
+<code class="func">ConversionFieldCode</code>  <a href="chap6.html#X81FE1F387DFCCB22">6.1-15</a><br />
+<code class="func">ConwayPolynomial</code>  <a href="chap2.html#X7C2425A786F09054">2.2-1</a><br />
+<code class="func">CoordinateNorm</code>  <a href="chap7.html#X8032E53078264ABB">7.4-1</a><br />
+<code class="func">CordaroWagnerCode</code>  <a href="chap5.html#X87F7CB8B7A8BE624">5.2-10</a><br />
+coset  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+<code class="func">CosetCode</code>  <a href="chap6.html#X8799F4BF81B0842B">6.1-17</a><br />
+covering code  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">CoveringRadius</code>  <a href="chap4.html#X7A195E317D2AB7CE">4.8-8</a><br />
+cyclic  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+<code class="func">CyclicCodes</code>  <a href="chap5.html#X82FA9F65854D98A6">5.5-14</a><br />
+<code class="func">CyclicMDSCode</code>  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+<code class="func">CyclotomicCosets</code>  <a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12</a><br />
+<code class="func">DavydovCode</code>  <a href="chap5.html#X7F5BE77B7F343182">5.3-3</a><br />
+<code class="func">Decode</code>  <a href="chap4.html#X7A42FF7D87FC34AC">4.10-1</a><br />
+<code class="func">Decodeword</code>  <a href="chap4.html#X7D870C9387C47D9F">4.10-2</a><br />
+<code class="func">DecreaseMinimumDistanceUpperBound</code>  <a href="chap4.html#X823B9A797EE42F6D">4.8-6</a><br />
+defining polynomial  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+degree  <a href="chap5.html#X865FE28D828C1EAD">5.7-7</a><br />
+<code class="func">DegreeMultivariatePolynomial</code>  <a href="chap7.html#X80433A4B792880EF">7.6-2</a><br />
+<code class="func">DegreesMonomialTerm</code>  <a href="chap7.html#X8431985183B63BB7">7.6-9</a><br />
+<code class="func">DegreesMultivariatePolynomial</code>  <a href="chap7.html#X83F44E397C56F2E0">7.6-3</a><br />
+density of a code  <a href="chap7.html#X84B2BE66780EFBF9">7.5-3</a><br />
+<code class="func">Dimension</code>  <a href="chap4.html#X7E6926C6850E7C4E">4.5-4</a><br />
+<code class="func">DirectProductCode</code>  <a href="chap6.html#X7BFBBA5784C293C1">6.2-3</a><br />
+<code class="func">DirectSumCode</code>  <a href="chap6.html#X79E00D3A8367D65A">6.2-1</a><br />
+<code class="func">Display</code>  <a href="chap4.html#X83A5C59278E13248">4.6-3</a><br />
+<code class="func">DisplayBoundsInfo</code>  <a href="chap4.html#X7CD08C8C780543C4">4.6-4</a><br />
+distance  <a href="chap4.html#X871FD301820717A4">4.9-3</a><br />
+<code class="func">DistanceCodeword</code>  <a href="chap3.html#X7CDA1B547D55E6FB">3.6-2</a><br />
+<code class="func">DistancesDistribution</code>  <a href="chap4.html#X87AD54F87C5EE77E">4.9-4</a><br />
+<code class="func">DistancesDistributionMatFFEVecFFE</code>  <a href="chap2.html#X85135CEB86E61D49">2.1-3</a><br />
+<code class="func">DistancesDistributionVecFFEsVecFFE</code>  <a href="chap2.html#X7F2F630984A9D3D6">2.1-4</a><br />
+<code class="func">DistanceVecFFE</code>  <a href="chap2.html#X85AA5C6587559C1C">2.1-6</a><br />
+divisor  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">DivisorAddition </code>  <a href="chap5.html#X8626E2B57D01F2DC">5.7-6</a><br />
+<code class="func">DivisorAutomorphismGroupP1 </code>  <a href="chap5.html#X823386037F450B0E">5.7-20</a><br />
+<code class="func">DivisorDegree </code>  <a href="chap5.html#X865FE28D828C1EAD">5.7-7</a><br />
+<code class="func">DivisorGCD </code>  <a href="chap5.html#X857B89847A649A26">5.7-11</a><br />
+<code class="func">DivisorIsZero </code>  <a href="chap5.html#X8688C0E187B5C7DB">5.7-9</a><br />
+<code class="func">DivisorLCM </code>  <a href="chap5.html#X82231CF08073695F">5.7-12</a><br />
+<code class="func">DivisorNegate </code>  <a href="chap5.html#X789DC358819A8F54">5.7-8</a><br />
+<code class="func">DivisorOfRationalFunctionP1 </code>  <a href="chap5.html#X856DDA207EDDF256">5.7-14</a><br />
+<code class="func">DivisorOnAffineCurve</code>  <a href="chap5.html#X79742B7183051D99">5.7-5</a><br />
+<code class="func">DivisorsEqual </code>  <a href="chap5.html#X816A07997D9A7075">5.7-10</a><br />
+<code class="func">DivisorsMultivariatePolynomial</code>  <a href="chap7.html#X860EF39B841380A1">7.6-10</a><br />
+doubly-even  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+<code class="func">DualCode</code>  <a href="chap6.html#X799B12F085ACB609">6.1-14</a><br />
+<code class="func">ElementsCode</code>  <a href="chap5.html#X81AACBDD86E89D7D">5.1-1</a><br />
+encoder map  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+<code class="func">EnlargedGabidulinCode</code>  <a href="chap5.html#X873950F67D4A9184">5.3-2</a><br />
+<code class="func">EnlargedTombakCode</code>  <a href="chap5.html#X7D6583347C0D4292">5.3-5</a><br />
+equivalent codes  <a href="chap4.html#X86442DCD7A0B2146">4.4</a><br />
+<code class="func">EvaluationBivariateCode</code>  <a href="chap5.html#X8422A310854C09B0">5.7-23</a><br />
+<code class="func">EvaluationBivariateCodeNC</code>  <a href="chap5.html#X7B6C2BED8319C811">5.7-24</a><br />
+<code class="func">EvaluationCode</code>  <a href="chap5.html#X78E078567D19D433">5.6-1</a><br />
+even  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+<code class="func">EvenWeightSubcode</code>  <a href="chap6.html#X87691AB67FF5621B">6.1-3</a><br />
+<code class="func">ExhaustiveSearchCoveringRadius</code>  <a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3</a><br />
+<code class="func">ExpurgatedCode</code>  <a href="chap6.html#X87E5849784BC60D2">6.1-5</a><br />
+<code class="func">ExtendedBinaryGolayCode</code>  <a href="chap5.html#X84520C7983538806">5.4-2</a><br />
+<code class="func">ExtendedCode</code>  <a href="chap6.html#X794679BE7F9EB5C1">6.1-1</a><br />
+<code class="func">ExtendedDirectSumCode</code>  <a href="chap6.html#X7A85F8AF8154D387">6.2-6</a><br />
+<code class="func">ExtendedReedSolomonCode</code>  <a href="chap5.html#X8730B90A862A3B3E">5.5-6</a><br />
+<code class="func">ExtendedTernaryGolayCode</code>  <a href="chap5.html#X81088A66816BCAE4">5.4-4</a><br />
+external distance  <a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13</a><br />
+<code class="func">FerreroDesignCode</code>  <a href="chap5.html#X865534267C8E902A">5.2-11</a><br />
+<code class="func">FireCode</code>  <a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10</a><br />
+<code class="func">FourNegacirculantSelfDualCode</code>  <a href="chap5.html#X7F40AF3B81C252DC">5.5-18</a><br />
+<code class="func">FourNegacirculantSelfDualCodeNC</code>  <a href="chap5.html#X87137A257E761291">5.5-19</a><br />
+<code class="func">GabidulinCode</code>  <a href="chap5.html#X79BE5D497CB2E59E">5.3-1</a><br />
+Gary code  <a href="chap7.html#X82899B64802A4BCE">7.3-1</a><br />
+<code class="func">GeneralizedCodeNorm</code>  <a href="chap7.html#X87039FD179AD3009">7.4-4</a><br />
+<code class="func">GeneralizedReedMullerCode</code>  <a href="chap5.html#X85B8699680B9D786">5.6-3</a><br />
+<code class="func">GeneralizedReedSolomonCode</code>  <a href="chap5.html#X810AB3DB844FFCE9">5.6-2</a><br />
+<code class="func">GeneralizedReedSolomonDecoderGao</code>  <a href="chap4.html#X7D48DE2A84474C6A">4.10-3</a><br />
+<code class="func">GeneralizedReedSolomonListDecoder</code>  <a href="chap4.html#X7CFF98D483502053">4.10-4</a><br />
+<code class="func">GeneralizedSrivastavaCode</code>  <a href="chap5.html#X7F9C0A727EE075B7">5.2-8</a><br />
+<code class="func">GeneralLowerBoundCoveringRadius</code>  <a href="chap7.html#X85D671F4824B4B0C">7.2-4</a><br />
+<code class="func">GeneralUpperBoundCoveringRadius</code>  <a href="chap7.html#X8638F5A67D6E50C1">7.2-5</a><br />
+generator polynomial  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+generator polynomial  <a href="chap5.html#X8366CC3685F0BC85">5.5</a><br />
+<code class="func">GeneratorMat</code>  <a href="chap4.html#X817224657C9829C4">4.7-1</a><br />
+<code class="func">GeneratorMatCode</code>  <a href="chap5.html#X83F400A681CFC0D6">5.2-1</a><br />
+<code class="func">GeneratorPol</code>  <a href="chap4.html#X78E33C3A843B0261">4.7-3</a><br />
+<code class="func">GeneratorPolCode</code>  <a href="chap5.html#X853D34A5796CEB73">5.5-1</a><br />
+<code class="func">GenusCurve</code>  <a href="chap5.html#X857E36ED814A40B8">5.7-3</a><br />
+GF(p)  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+GF(q)  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+<code class="func">GoppaCode</code>  <a href="chap5.html#X7EE808BB7D1E487A">5.2-7</a><br />
+<code class="func">GoppaCodeClassical</code>  <a href="chap5.html#X8777388C7885E335">5.7-22</a><br />
+<code class="func">GOrbitPoint </code>  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">GrayMat</code>  <a href="chap7.html#X87AFE2C078031CE4">7.3-2</a><br />
+greatest common divisor  <a href="chap5.html#X857B89847A649A26">5.7-11</a><br />
+<code class="func">GreedyCode</code>  <a href="chap5.html#X7880D34485C60BAF">5.1-7</a><br />
+Griesmer code  <a href="chap7.html#X82366C277E218130">7.1-6</a><br />
+<code class="func">GuavaVersion</code>  <a href="chap7.html#X80171AA687FFDC70">7.6-6</a><br />
+Hadamard matrix  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+Hadamard matrix  <a href="chap7.html#X7E1E7C5287919CDB">7.3-3</a><br />
+<code class="func">HadamardCode</code>  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+<code class="func">HadamardMat</code>  <a href="chap7.html#X8014A1F181ECD8AA">7.3-4</a><br />
+Hamming metric  <a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5</a><br />
+<code class="func">HammingCode</code>  <a href="chap5.html#X7DECB0A57C798583">5.2-4</a><br />
+<code class="func">HorizontalConversionFieldMat</code>  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+hull  <a href="chap6.html#X78F0B1BC81FB109C">6.2-4</a><br />
+<code class="func">in</code>  <a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1</a><br />
+<code class="func">IncreaseCoveringRadiusLowerBound</code>  <a href="chap7.html#X7881E03E812140F4">7.2-2</a><br />
+information bits  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+<code class="func">InformationWord</code>  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+<code class="func">InnerDistribution</code>  <a href="chap4.html#X871FD301820717A4">4.9-3</a><br />
+<code class="func">IntersectionCode</code>  <a href="chap6.html#X78F0B1BC81FB109C">6.2-4</a><br />
+<code class="func">IrreduciblePolynomialsNr</code>  <a href="chap7.html#X7A2B54EF868AA752">7.5-9</a><br />
+<code class="func">IsActionMoebiusTransformationOnDivisorDefinedP1 </code>  <a href="chap5.html#X79FD980E7B24DB9C">5.7-19</a><br />
+<code class="func">IsAffineCode</code>  <a href="chap4.html#X7AFD3844859B20BF">4.3-14</a><br />
+<code class="func">IsAlmostAffineCode</code>  <a href="chap4.html#X861D32FB81EF0D77">4.3-15</a><br />
+IsCheapConwayPolynomial  <a href="chap2.html#X7C2425A786F09054">2.2-1</a><br />
+<code class="func">IsCode</code>  <a href="chap4.html#X7F71186281DEA83A">4.3-3</a><br />
+<code class="func">IsCodeword</code>  <a href="chap3.html#X7F25479781E6E109">3.1-3</a><br />
+<code class="func">IsCoordinateAcceptable</code>  <a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3</a><br />
+<code class="func">IsCyclicCode</code>  <a href="chap4.html#X850C23D07C9A9B19">4.3-5</a><br />
+<code class="func">IsDoublyEvenCode</code>  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+<code class="func">IsEquivalent</code>  <a href="chap4.html#X843034687D9C75B0">4.4-1</a><br />
+<code class="func">IsEvenCode</code>  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+<code class="func">IsFinite</code>  <a href="chap4.html#X808A4061809A6E67">4.5-1</a><br />
+<code class="func">IsGriesmerCode</code>  <a href="chap7.html#X8301FA9F7C6C7445">7.1-7</a><br />
+<code class="func">IsInStandardForm</code>  <a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7</a><br />
+<code class="func">IsLatinSquare</code>  <a href="chap7.html#X7F34306B81DC2776">7.3-12</a><br />
+<code class="func">IsLinearCode</code>  <a href="chap4.html#X7B24748A7CE8D4B9">4.3-4</a><br />
+<code class="func">IsMDSCode</code>  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+<code class="func">IsNormalCode</code>  <a href="chap7.html#X80283A2F7C8101BD">7.4-5</a><br />
+<code class="func">IsPerfectCode</code>  <a href="chap4.html#X85E3BD26856424F7">4.3-6</a><br />
+IsPrimitivePolynomial  <a href="chap2.html#X7ECC593583E68A6C">2.2-2</a><br />
+<code class="func">IsSelfComplementaryCode</code>  <a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13</a><br />
+<code class="func">IsSelfDualCode</code>  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+<code class="func">IsSelfOrthogonalCode</code>  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+<code class="func">IsSinglyEvenCode</code>  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+<code class="func">IsSubset</code>  <a href="chap4.html#X79CA175481F8105F">4.3-2</a><br />
+<code class="func">Krawtchouk</code>  <a href="chap7.html#X7ACDC5377CD17451">7.5-6</a><br />
+<code class="func">KrawtchoukMat</code>  <a href="chap7.html#X82899B64802A4BCE">7.3-1</a><br />
+Latin square  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+least common multiple  <a href="chap5.html#X82231CF08073695F">5.7-12</a><br />
+<code class="func">LeftActingDomain</code>  <a href="chap4.html#X86F070E0807DC34E">4.5-3</a><br />
+length  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">LengthenedCode</code>  <a href="chap6.html#X7A5D5419846FC867">6.1-10</a><br />
+<code class="func">LexiCode</code>  <a href="chap5.html#X7C1B374583AFB923">5.1-8</a><br />
+linear code  <a href="chap3.html#X836BAA9A7EBD08B1">3.</a><br />
+<code class="func">LowerBoundCoveringRadiusCountingExcess</code>  <a href="chap7.html#X7F95362485759ACB">7.2-9</a><br />
+<code class="func">LowerBoundCoveringRadiusEmbedded1</code>  <a href="chap7.html#X829C14A383B5BF59">7.2-10</a><br />
+<code class="func">LowerBoundCoveringRadiusEmbedded2</code>  <a href="chap7.html#X7B0C81B88604C448">7.2-11</a><br />
+<code class="func">LowerBoundCoveringRadiusInduction</code>  <a href="chap7.html#X7D27F6E27B9A0D35">7.2-12</a><br />
+<code class="func">LowerBoundCoveringRadiusSphereCovering</code>  <a href="chap7.html#X7E7FBCC87D5562AB">7.2-6</a><br />
+<code class="func">LowerBoundCoveringRadiusVanWee1</code>  <a href="chap7.html#X85E20C518360AB70">7.2-7</a><br />
+<code class="func">LowerBoundCoveringRadiusVanWee2</code>  <a href="chap7.html#X7C72994A825228E7">7.2-8</a><br />
+<code class="func">LowerBoundGilbertVarshamov</code>  <a href="chap7.html#X7CF15D2084499869">7.1-10</a><br />
+<code class="func">LowerBoundMinimumDistance</code>  <a href="chap7.html#X7FDF54BA81115D88">7.1-9</a><br />
+<code class="func">LowerBoundSpherePacking</code>  <a href="chap7.html#X8217D830871286D8">7.1-11</a><br />
+MacWilliams transform  <a href="chap7.html#X84DA928083B103A0">7.5-2</a><br />
+<code class="func">MatrixRepresentationOfElement</code>  <a href="chap7.html#X7B50D3417F6FD7C6">7.5-10</a><br />
+<code class="func">MatrixRepresentationOnRiemannRochSpaceP1 </code>  <a href="chap5.html#X80EDF3D682E7EF3F">5.7-21</a><br />
+<code class="func">MatrixTransformationOnMultivariatePolynomial </code>  <a href="chap7.html#X84D51EBB784E7C5D">7.6-1</a><br />
+maximum distance separable  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+MDS  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+MDS  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+minimum distance  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">MinimumDistance</code>  <a href="chap4.html#X7B31613D8538BD29">4.8-3</a><br />
+<code class="func">MinimumDistanceLeon</code>  <a href="chap4.html#X813F226F855590EE">4.8-4</a><br />
+<code class="func">MinimumDistanceRandom</code>  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">MinimumWeight</code>  <a href="chap4.html#X84EDF67B86B4154C">4.8-5</a><br />
+<code class="func">MinimumWeightWords</code>  <a href="chap4.html#X7AEE64467FB1E0B9">4.9-1</a><br />
+<code class="func">MoebiusTransformation </code>  <a href="chap5.html#X807C52E67A440DEB">5.7-16</a><br />
+<code class="func">MOLS</code>  <a href="chap7.html#X804AAFF2867080F7">7.3-11</a><br />
+<code class="func">MOLSCode</code>  <a href="chap5.html#X81B7EE4279398F67">5.1-4</a><br />
+<code class="func">MostCommonInList</code>  <a href="chap7.html#X8072B0DA78FBE562">7.5-15</a><br />
+<code class="func">MultiplicityInList</code>  <a href="chap7.html#X805DF25C84585FD6">7.5-14</a><br />
+mutually orthogonal Latin squares  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+<code class="func">NearestNeighborDecodewords</code>  <a href="chap4.html#X825E35757D778787">4.10-7</a><br />
+<code class="func">NearestNeighborGRSDecodewords</code>  <a href="chap4.html#X7B88DEB37F28404A">4.10-6</a><br />
+<code class="func">NordstromRobinsonCode</code>  <a href="chap5.html#X816353397F25B62E">5.1-6</a><br />
+norm of a code  <a href="chap7.html#X8032E53078264ABB">7.4-1</a><br />
+normal code  <a href="chap7.html#X87039FD179AD3009">7.4-4</a><br />
+not =  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+not =  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+<code class="func">NrCyclicCodes</code>  <a href="chap5.html#X8263CE4A790D294A">5.5-15</a><br />
+<code class="func">NullCode</code>  <a href="chap5.html#X7B4EF2017B2C61AD">5.5-12</a><br />
+<code class="func">NullWord</code>  <a href="chap3.html#X8000B6597EF0282F">3.6-1</a><br />
+<code class="func">OnePointAGCode</code>  <a href="chap5.html#X842E227E8785168E">5.7-25</a><br />
+<code class="func">OptimalityCode</code>  <a href="chap5.html#X839CFE4C7A567D4D">5.2-13</a><br />
+order of polynomial  <a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10</a><br />
+<code class="func">OuterDistribution</code>  <a href="chap4.html#X8495870687195324">4.9-5</a><br />
+Parity check  <a href="chap6.html#X8271A4697FDA97B2">6.1</a><br />
+parity check matrix  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+perfect  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+perfect code  <a href="chap7.html#X7903286078F8051B">7.5-4</a><br />
+permutation equivalent codes  <a href="chap4.html#X86442DCD7A0B2146">4.4</a><br />
+PermutationAutomorphismGroup  <a href="chap4.html#X87677B0787B4461A">4.4-3</a><br />
+<code class="func">PermutationAutomorphismGroup</code>  <a href="chap4.html#X79F3261F86C29F6D">4.4-4</a><br />
+<code class="func">PermutationDecode</code>  <a href="chap4.html#X83231E717CCB0247">4.10-11</a><br />
+<code class="func">PermutationDecodeNC</code>  <a href="chap4.html#X85B692177E2A745D">4.10-12</a><br />
+<code class="func">PermutedCode</code>  <a href="chap6.html#X79577EB27BE8524B">6.1-4</a><br />
+<code class="func">PermutedCols</code>  <a href="chap7.html#X7A97AD477E7638DE">7.3-8</a><br />
+<code class="func">PiecewiseConstantCode</code>  <a href="chap6.html#X7EF49A257D6DB53B">6.1-20</a><br />
+point  <a href="chap5.html#X802DD9FB79A9ACA7">5.7-1</a><br />
+<code class="func">PolyCodeword</code>  <a href="chap3.html#X822465E884D0F484">3.4-2</a><br />
+primitive element  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+<code class="func">PrimitivePolynomialsNr</code>  <a href="chap7.html#X78AEA40F7AD9D541">7.5-8</a><br />
+<code class="func">PrimitiveUnityRoot</code>  <a href="chap7.html#X827E39957A87EB51">7.5-7</a><br />
+<code class="func">Print</code>  <a href="chap4.html#X7AFA64D97A1F39A3">4.6-1</a><br />
+<code class="func">PuncturedCode</code>  <a href="chap6.html#X7E6E4DDA79574FDB">6.1-2</a><br />
+<code class="func">PutStandardForm</code>  <a href="chap7.html#X7B47D82485B66F1D">7.3-6</a><br />
+<code class="func">QQRCode</code>  <a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9</a><br />
+<code class="func">QQRCodeNC</code>  <a href="chap5.html#X8764ABCF854C695E">5.5-8</a><br />
+<code class="func">QRCode</code>  <a href="chap5.html#X825F42F68179D2AB">5.5-7</a><br />
+<code class="func">QuasiCyclicCode</code>  <a href="chap5.html#X79826B16785E8BD3">5.5-16</a><br />
+<code class="func">RandomCode</code>  <a href="chap5.html#X7D87DD6380B2CE69">5.1-5</a><br />
+<code class="func">RandomLinearCode</code>  <a href="chap5.html#X7BCA10CE8660357F">5.2-12</a><br />
+<code class="func">RandomPrimitivePolynomial</code>  <a href="chap2.html#X7ECC593583E68A6C">2.2-2</a><br />
+reciprocal polynomial  <a href="chap7.html#X7B50D3417F6FD7C6">7.5-10</a><br />
+<code class="func">ReciprocalPolynomial</code>  <a href="chap7.html#X7805D2BB7CE4D455">7.5-11</a><br />
+<code class="func">Redundancy</code>  <a href="chap4.html#X7E33FD56792DBF3D">4.8-2</a><br />
+<code class="func">ReedMullerCode</code>  <a href="chap5.html#X801C88D578DA6ACA">5.2-5</a><br />
+<code class="func">ReedSolomonCode</code>  <a href="chap5.html#X838F3CB3872CEF95">5.5-5</a><br />
+<code class="func">RemovedElementsCode</code>  <a href="chap6.html#X7B0A6E1F82686B43">6.1-7</a><br />
+<code class="func">RepetitionCode</code>  <a href="chap5.html#X83C5F8FE7827EAA7">5.5-13</a><br />
+<code class="func">ResidueCode</code>  <a href="chap6.html#X809376187C1525AA">6.1-12</a><br />
+<code class="func">RiemannRochSpaceBasisFunctionP1 </code>  <a href="chap5.html#X79C878697F99A10F">5.7-13</a><br />
+<code class="func">RiemannRochSpaceBasisP1 </code>  <a href="chap5.html#X878970A17E580224">5.7-15</a><br />
+<code class="func">RootsCode</code>  <a href="chap5.html#X818F0E6583E01D4B">5.5-3</a><br />
+<code class="func">RootsOfCode</code>  <a href="chap4.html#X7F4CB9DB7CD97178">4.7-5</a><br />
+<code class="func">RotateList</code>  <a href="chap7.html#X7C5407EF87849857">7.5-16</a><br />
+self complementary code  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+self-dual  <a href="chap5.html#X7F40AF3B81C252DC">5.5-18</a><br />
+self-dual  <a href="chap6.html#X799B12F085ACB609">6.1-14</a><br />
+self-orthogonal  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+<code class="func">SetCoveringRadius</code>  <a href="chap4.html#X81004B007EC5DF58">4.8-9</a><br />
+<code class="func">ShortenedCode</code>  <a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9</a><br />
+singly-even  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+size  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">Size</code>  <a href="chap4.html#X858ADA3B7A684421">4.5-2</a><br />
+<code class="func">SolveLinearSystem</code>  <a href="chap7.html#X79E76B6F7D177E27">7.6-5</a><br />
+<code class="func">SphereContent</code>  <a href="chap7.html#X85303BAE7BD46D81">7.5-5</a><br />
+<code class="func">SrivastavaCode</code>  <a href="chap5.html#X7A38EB3178961F3E">5.2-9</a><br />
+standard form  <a href="chap7.html#X797F43607AD8660D">7.3-5</a><br />
+<code class="func">StandardArray</code>  <a href="chap4.html#X8642D0BD789DA9B5">4.10-10</a><br />
+<code class="func">StandardFormCode</code>  <a href="chap6.html#X7AA203A380BC4C79">6.1-19</a><br />
+strength  <a href="chap7.html#X86F10D9E79AB8796">7.2-15</a><br />
+<code class="func">String</code>  <a href="chap4.html#X81FB5BE27903EC32">4.6-2</a><br />
+<code class="func">SubCode</code>  <a href="chap6.html#X7982D699803ECD0F">6.1-11</a><br />
+<code class="func">Support</code>  <a href="chap3.html#X7B689C0284AC4296">3.6-3</a><br />
+support  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">SylvesterMat</code>  <a href="chap7.html#X7E1E7C5287919CDB">7.3-3</a><br />
+<code class="func">Syndrome</code>  <a href="chap4.html#X7D02E0FE8735D3E6">4.10-8</a><br />
+syndrome table  <a href="chap4.html#X7B9E71987E4294A7">4.10-9</a><br />
+<code class="func">SyndromeTable</code>  <a href="chap4.html#X7B9E71987E4294A7">4.10-9</a><br />
+t(n,k)  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">TernaryGolayCode</code>  <a href="chap5.html#X7E0CCCD7866ADB94">5.4-3</a><br />
+<code class="func">TombakCode</code>  <a href="chap5.html#X845B4DBE83288D2D">5.3-4</a><br />
+<code class="func">ToricCode</code>  <a href="chap5.html#X7B24BE418010F596">5.6-5</a><br />
+<code class="func">ToricPoints</code>  <a href="chap5.html#X7EE68B58872D7E82">5.6-4</a><br />
+<code class="func">TraceCode</code>  <a href="chap6.html#X82D18907800FE3D9">6.1-16</a><br />
+<code class="func">TreatAsPoly</code>  <a href="chap3.html#X7A6828148490BD2E">3.5-2</a><br />
+<code class="func">TreatAsVector</code>  <a href="chap3.html#X7E3E174B7954AA6B">3.5-1</a><br />
+<code class="func">UnionCode</code>  <a href="chap6.html#X8228A1F57A29B8F4">6.2-5</a><br />
+<code class="func">UpperBound</code>  <a href="chap7.html#X7A5CB74485184FEE">7.1-8</a><br />
+<code class="func">UpperBoundCoveringRadiusCyclicCode</code>  <a href="chap7.html#X82A38F5F858CF3FC">7.2-17</a><br />
+<code class="func">UpperBoundCoveringRadiusDelsarte</code>  <a href="chap7.html#X832847A17FD0D142">7.2-14</a><br />
+<code class="func">UpperBoundCoveringRadiusGriesmerLike</code>  <a href="chap7.html#X8585C6A982489FC3">7.2-16</a><br />
+<code class="func">UpperBoundCoveringRadiusRedundancy</code>  <a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13</a><br />
+<code class="func">UpperBoundCoveringRadiusStrength</code>  <a href="chap7.html#X86F10D9E79AB8796">7.2-15</a><br />
+<code class="func">UpperBoundElias</code>  <a href="chap7.html#X86A5A7C67F625A40">7.1-5</a><br />
+<code class="func">UpperBoundGriesmer</code>  <a href="chap7.html#X82366C277E218130">7.1-6</a><br />
+<code class="func">UpperBoundHamming</code>  <a href="chap7.html#X828095537C91FDFA">7.1-2</a><br />
+<code class="func">UpperBoundJohnson</code>  <a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3</a><br />
+<code class="func">UpperBoundMinimumDistance</code>  <a href="chap7.html#X7C6A58327BD6B685">7.1-12</a><br />
+<code class="func">UpperBoundPlotkin</code>  <a href="chap7.html#X7A26E2537DFF4409">7.1-4</a><br />
+<code class="func">UpperBoundSingleton</code>  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+<code class="func">UUVCode</code>  <a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2</a><br />
+<code class="func">VandermondeMat</code>  <a href="chap7.html#X797F43607AD8660D">7.3-5</a><br />
+<code class="func">VectorCodeword</code>  <a href="chap3.html#X87C8B0B178496F6A">3.4-1</a><br />
+<code class="func">VerticalConversionFieldMat</code>  <a href="chap7.html#X7B68119F85E9EC6D">7.3-9</a><br />
+weight enumerator polynomial  <a href="chap7.html#X8308D685809A4E2F">7.5</a><br />
+<code class="func">WeightCodeword</code>  <a href="chap3.html#X7AD61C237D8D3849">3.6-4</a><br />
+<code class="func">WeightDistribution</code>  <a href="chap4.html#X8728BCC9842A6E5D">4.9-2</a><br />
+<code class="func">WeightHistogram</code>  <a href="chap7.html#X7A4EA98D794CF410">7.5-13</a><br />
+<code class="func">WeightVecFFE</code>  <a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5</a><br />
+<code class="func">WholeSpaceCode</code>  <a href="chap5.html#X7BC245E37EB7B23F">5.5-11</a><br />
+<code class="func">WordLength</code>  <a href="chap4.html#X7A36C3C67B0062E8">4.8-1</a><br />
+<code class="func">ZechLog</code>  <a href="chap7.html#X7EBBE86D85CC90C0">7.6-7</a><br />
+<p> </p>
+</div>
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chapBib.html">Previous Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/doc/chapInd.txt b/doc/chapInd.txt
new file mode 100644
index 0000000..b7ad771
--- /dev/null
+++ b/doc/chapInd.txt
@@ -0,0 +1,408 @@
+  
+  
+  Index
+  
+  *  4.2-2
+  *  4.2-3
+  +  3.3-1
+  +  3.3-3
+  +  4.2-1
+  -  3.3-2
+  < >  3.2-1
+  < >  4.1-1
+  =  3.2-1
+  =  4.1-1
+  A(n,d)  7.1-7
+  acceptable coordinate  7.4-2
+  acceptable coordinate  7.4-3
+  AClosestVectorComb..MatFFEVecFFECoords  2.1-2
+  AClosestVectorCombinationsMatFFEVecFFE  2.1-1
+  ActionMoebiusTransformationOnDivisorP1   5.7-18
+  ActionMoebiusTransformationOnFunction   5.7-17
+  AddedElementsCode  6.1-8
+  affine code  4.3-13
+  AffineCurve  5.7-1
+  AffinePointsOnCurve  5.7-2
+  AlternantCode  5.2-6
+  AmalgamatedDirectSumCode  6.2-7
+  AreMOLS  7.3-13
+  AsSSortedList  4.5-5
+  AugmentedCode  6.1-6
+  AutomorphismGroup  4.4-3
+  BCHCode  5.5-4
+  BestKnownLinearCode  5.2-14
+  BinaryGolayCode  5.4-1
+  BitFlipDecoder  4.10-5
+  BlockwiseDirectSumCode  6.2-8
+  Bose distance  5.5-4
+  bound, Gilbert-Varshamov lower  7.1-9
+  bound, sphere packing lower  7.1-10
+  bounds, Elias  7.1-4
+  bounds, Griesmer  7.1-5
+  bounds, Hamming  7.1-1
+  bounds, Johnson  7.1-2
+  bounds, Plotkin  7.1-3
+  bounds, Singleton  7.1
+  bounds, sphere packing bound  7.1-1
+  BoundsCoveringRadius  7.2-1
+  BoundsMinimumDistance  7.1-13
+  BZCode  6.2-11
+  BZCodeNC  6.2-12
+  check polynomial  4.
+  check polynomial  5.5
+  CheckMat  4.7-2
+  CheckMatCode  5.2-3
+  CheckMatCodeMutable  5.2-2
+  CheckPol  4.7-4
+  CheckPolCode  5.5-2
+  CirculantMatrix  7.5-17
+  code  4.
+  code, (n,M,d)  4.
+  code, [n, k, d]r  4.
+  code, AG  5.7
+  code, alternant  5.2-5
+  code, Bose-Chaudhuri-Hockenghem  5.5-3
+  code, conference  5.1-2
+  code, Cordaro-Wagner  5.2-9
+  code, cyclic  4.
+  code, Davydov  5.3-2
+  code, doubly-even  4.3-10
+  code, element test  4.3-1
+  code, elements of  4.
+  code, evaluation  5.6
+  code, even  4.3-12
+  code, Fire  5.5-9
+  code, Gabidulin  5.3
+  code, Golay (binary)  5.4
+  code, Golay (ternary)  5.4-2
+  code, Goppa (classical)  5.2-6
+  code, greedy  5.1-6
+  code, Hadamard  5.1-1
+  code, Hamming  5.2-3
+  code, linear  4.
+  code, maximum distance separable  4.3-7
+  code, Nordstrom-Robinson  5.1-5
+  code, perfect  4.3-6
+  code, Reed-Muller  5.2-4
+  code, Reed-Solomon  5.5-4
+  code, self-dual  4.3-8
+  code, self-orthogonal  4.3-9
+  code, singly-even  4.3-11
+  code, Srivastava  5.2-7
+  code, subcode  4.3-2
+  code, Tombak  5.3-3
+  code, toric  5.6-4
+  code, unrestricted  4.
+  CodeDensity  7.5-4
+  CodeDistanceEnumerator  7.5-2
+  CodeIsomorphism  4.4-2
+  CodeMacWilliamsTransform  7.5-3
+  CodeNorm  7.4-2
+  codes, addition  4.2-1
+  codes, decoding  4.2-4
+  codes, direct sum  4.2-1
+  codes, encoding  4.2-3
+  codes, product  4.2-2
+  CodeWeightEnumerator  7.5-1
+  Codeword  3.1-1
+  CodewordNr  3.1-2
+  codewords, addition  3.3-1
+  codewords, cosets  3.3-3
+  codewords, subtraction  3.3-2
+  CoefficientMultivariatePolynomial  7.6-4
+  CoefficientToPolynomial  7.6-8
+  conference matrix  5.1-3
+  ConferenceCode  5.1-3
+  ConstantWeightSubcode  6.1-18
+  ConstructionBCode  6.1-13
+  ConstructionXCode  6.2-9
+  ConstructionXXCode  6.2-10
+  ConversionFieldCode  6.1-15
+  ConwayPolynomial  2.2-1
+  CoordinateNorm  7.4-1
+  CordaroWagnerCode  5.2-10
+  coset  3.3-3
+  CosetCode  6.1-17
+  covering code  4.8-7
+  CoveringRadius  4.8-8
+  cyclic  5.5-17
+  CyclicCodes  5.5-14
+  CyclicMDSCode  5.5-17
+  CyclotomicCosets  7.5-12
+  DavydovCode  5.3-3
+  Decode  4.10-1
+  Decodeword  4.10-2
+  DecreaseMinimumDistanceUpperBound  4.8-6
+  defining polynomial  2.2
+  degree  5.7-7
+  DegreeMultivariatePolynomial  7.6-2
+  DegreesMonomialTerm  7.6-9
+  DegreesMultivariatePolynomial  7.6-3
+  density of a code  7.5-3
+  Dimension  4.5-4
+  DirectProductCode  6.2-3
+  DirectSumCode  6.2-1
+  Display  4.6-3
+  DisplayBoundsInfo  4.6-4
+  distance  4.9-3
+  DistanceCodeword  3.6-2
+  DistancesDistribution  4.9-4
+  DistancesDistributionMatFFEVecFFE  2.1-3
+  DistancesDistributionVecFFEsVecFFE  2.1-4
+  DistanceVecFFE  2.1-6
+  divisor  5.7-4
+  DivisorAddition   5.7-6
+  DivisorAutomorphismGroupP1   5.7-20
+  DivisorDegree   5.7-7
+  DivisorGCD   5.7-11
+  DivisorIsZero   5.7-9
+  DivisorLCM   5.7-12
+  DivisorNegate   5.7-8
+  DivisorOfRationalFunctionP1   5.7-14
+  DivisorOnAffineCurve  5.7-5
+  DivisorsEqual   5.7-10
+  DivisorsMultivariatePolynomial  7.6-10
+  doubly-even  4.3-9
+  DualCode  6.1-14
+  ElementsCode  5.1-1
+  encoder map  4.2-3
+  EnlargedGabidulinCode  5.3-2
+  EnlargedTombakCode  5.3-5
+  equivalent codes  4.4
+  EvaluationBivariateCode  5.7-23
+  EvaluationBivariateCodeNC  5.7-24
+  EvaluationCode  5.6-1
+  even  4.3-11
+  EvenWeightSubcode  6.1-3
+  ExhaustiveSearchCoveringRadius  7.2-3
+  ExpurgatedCode  6.1-5
+  ExtendedBinaryGolayCode  5.4-2
+  ExtendedCode  6.1-1
+  ExtendedDirectSumCode  6.2-6
+  ExtendedReedSolomonCode  5.5-6
+  ExtendedTernaryGolayCode  5.4-4
+  external distance  7.2-13
+  FerreroDesignCode  5.2-11
+  FireCode  5.5-10
+  FourNegacirculantSelfDualCode  5.5-18
+  FourNegacirculantSelfDualCodeNC  5.5-19
+  GabidulinCode  5.3-1
+  Gary code  7.3-1
+  GeneralizedCodeNorm  7.4-4
+  GeneralizedReedMullerCode  5.6-3
+  GeneralizedReedSolomonCode  5.6-2
+  GeneralizedReedSolomonDecoderGao  4.10-3
+  GeneralizedReedSolomonListDecoder  4.10-4
+  GeneralizedSrivastavaCode  5.2-8
+  GeneralLowerBoundCoveringRadius  7.2-4
+  GeneralUpperBoundCoveringRadius  7.2-5
+  generator polynomial  4.
+  generator polynomial  5.5
+  GeneratorMat  4.7-1
+  GeneratorMatCode  5.2-1
+  GeneratorPol  4.7-3
+  GeneratorPolCode  5.5-1
+  GenusCurve  5.7-3
+  GF(p)  2.2
+  GF(q)  2.2
+  GoppaCode  5.2-7
+  GoppaCodeClassical  5.7-22
+  GOrbitPoint   5.7-4
+  GrayMat  7.3-2
+  greatest common divisor  5.7-11
+  GreedyCode  5.1-7
+  Griesmer code  7.1-6
+  GuavaVersion  7.6-6
+  Hadamard matrix  5.1-2
+  Hadamard matrix  7.3-3
+  HadamardCode  5.1-2
+  HadamardMat  7.3-4
+  Hamming metric  2.1-5
+  HammingCode  5.2-4
+  HorizontalConversionFieldMat  7.3-10
+  hull  6.2-4
+  in  4.3-1
+  IncreaseCoveringRadiusLowerBound  7.2-2
+  information bits  4.2-4
+  InformationWord  4.2-4
+  InnerDistribution  4.9-3
+  IntersectionCode  6.2-4
+  IrreduciblePolynomialsNr  7.5-9
+  IsActionMoebiusTransformationOnDivisorDefinedP1   5.7-19
+  IsAffineCode  4.3-14
+  IsAlmostAffineCode  4.3-15
+  IsCheapConwayPolynomial  2.2-1
+  IsCode  4.3-3
+  IsCodeword  3.1-3
+  IsCoordinateAcceptable  7.4-3
+  IsCyclicCode  4.3-5
+  IsDoublyEvenCode  4.3-10
+  IsEquivalent  4.4-1
+  IsEvenCode  4.3-12
+  IsFinite  4.5-1
+  IsGriesmerCode  7.1-7
+  IsInStandardForm  7.3-7
+  IsLatinSquare  7.3-12
+  IsLinearCode  4.3-4
+  IsMDSCode  4.3-7
+  IsNormalCode  7.4-5
+  IsPerfectCode  4.3-6
+  IsPrimitivePolynomial  2.2-2
+  IsSelfComplementaryCode  4.3-13
+  IsSelfDualCode  4.3-8
+  IsSelfOrthogonalCode  4.3-9
+  IsSinglyEvenCode  4.3-11
+  IsSubset  4.3-2
+  Krawtchouk  7.5-6
+  KrawtchoukMat  7.3-1
+  Latin square  7.3-10
+  least common multiple  5.7-12
+  LeftActingDomain  4.5-3
+  length  4.
+  LengthenedCode  6.1-10
+  LexiCode  5.1-8
+  linear code  3.
+  LowerBoundCoveringRadiusCountingExcess  7.2-9
+  LowerBoundCoveringRadiusEmbedded1  7.2-10
+  LowerBoundCoveringRadiusEmbedded2  7.2-11
+  LowerBoundCoveringRadiusInduction  7.2-12
+  LowerBoundCoveringRadiusSphereCovering  7.2-6
+  LowerBoundCoveringRadiusVanWee1  7.2-7
+  LowerBoundCoveringRadiusVanWee2  7.2-8
+  LowerBoundGilbertVarshamov  7.1-10
+  LowerBoundMinimumDistance  7.1-9
+  LowerBoundSpherePacking  7.1-11
+  MacWilliams transform  7.5-2
+  MatrixRepresentationOfElement  7.5-10
+  MatrixRepresentationOnRiemannRochSpaceP1   5.7-21
+  MatrixTransformationOnMultivariatePolynomial   7.6-1
+  maximum distance separable  7.1-1
+  MDS  4.3-7
+  MDS  5.5-17
+  minimum distance  4.
+  MinimumDistance  4.8-3
+  MinimumDistanceLeon  4.8-4
+  MinimumDistanceRandom  4.8-7
+  MinimumWeight  4.8-5
+  MinimumWeightWords  4.9-1
+  MoebiusTransformation   5.7-16
+  MOLS  7.3-11
+  MOLSCode  5.1-4
+  MostCommonInList  7.5-15
+  MultiplicityInList  7.5-14
+  mutually orthogonal Latin squares  7.3-10
+  NearestNeighborDecodewords  4.10-7
+  NearestNeighborGRSDecodewords  4.10-6
+  NordstromRobinsonCode  5.1-6
+  norm of a code  7.4-1
+  normal code  7.4-4
+  not =  3.2-1
+  not =  4.1-1
+  NrCyclicCodes  5.5-15
+  NullCode  5.5-12
+  NullWord  3.6-1
+  OnePointAGCode  5.7-25
+  OptimalityCode  5.2-13
+  order of polynomial  5.5-10
+  OuterDistribution  4.9-5
+  Parity check  6.1
+  parity check matrix  4.
+  perfect  7.1-1
+  perfect code  7.5-4
+  permutation equivalent codes  4.4
+  PermutationAutomorphismGroup  4.4-3
+  PermutationAutomorphismGroup  4.4-4
+  PermutationDecode  4.10-11
+  PermutationDecodeNC  4.10-12
+  PermutedCode  6.1-4
+  PermutedCols  7.3-8
+  PiecewiseConstantCode  6.1-20
+  point  5.7-1
+  PolyCodeword  3.4-2
+  primitive element  2.2
+  PrimitivePolynomialsNr  7.5-8
+  PrimitiveUnityRoot  7.5-7
+  Print  4.6-1
+  PuncturedCode  6.1-2
+  PutStandardForm  7.3-6
+  QQRCode  5.5-9
+  QQRCodeNC  5.5-8
+  QRCode  5.5-7
+  QuasiCyclicCode  5.5-16
+  RandomCode  5.1-5
+  RandomLinearCode  5.2-12
+  RandomPrimitivePolynomial  2.2-2
+  reciprocal polynomial  7.5-10
+  ReciprocalPolynomial  7.5-11
+  Redundancy  4.8-2
+  ReedMullerCode  5.2-5
+  ReedSolomonCode  5.5-5
+  RemovedElementsCode  6.1-7
+  RepetitionCode  5.5-13
+  ResidueCode  6.1-12
+  RiemannRochSpaceBasisFunctionP1   5.7-13
+  RiemannRochSpaceBasisP1   5.7-15
+  RootsCode  5.5-3
+  RootsOfCode  4.7-5
+  RotateList  7.5-16
+  self complementary code  4.3-12
+  self-dual  5.5-18
+  self-dual  6.1-14
+  self-orthogonal  4.3-8
+  SetCoveringRadius  4.8-9
+  ShortenedCode  6.1-9
+  singly-even  4.3-10
+  size  4.
+  Size  4.5-2
+  SolveLinearSystem  7.6-5
+  SphereContent  7.5-5
+  SrivastavaCode  5.2-9
+  standard form  7.3-5
+  StandardArray  4.10-10
+  StandardFormCode  6.1-19
+  strength  7.2-15
+  String  4.6-2
+  SubCode  6.1-11
+  Support  3.6-3
+  support  5.7-4
+  SylvesterMat  7.3-3
+  Syndrome  4.10-8
+  syndrome table  4.10-9
+  SyndromeTable  4.10-9
+  t(n,k)  4.8-7
+  TernaryGolayCode  5.4-3
+  TombakCode  5.3-4
+  ToricCode  5.6-5
+  ToricPoints  5.6-4
+  TraceCode  6.1-16
+  TreatAsPoly  3.5-2
+  TreatAsVector  3.5-1
+  UnionCode  6.2-5
+  UpperBound  7.1-8
+  UpperBoundCoveringRadiusCyclicCode  7.2-17
+  UpperBoundCoveringRadiusDelsarte  7.2-14
+  UpperBoundCoveringRadiusGriesmerLike  7.2-16
+  UpperBoundCoveringRadiusRedundancy  7.2-13
+  UpperBoundCoveringRadiusStrength  7.2-15
+  UpperBoundElias  7.1-5
+  UpperBoundGriesmer  7.1-6
+  UpperBoundHamming  7.1-2
+  UpperBoundJohnson  7.1-3
+  UpperBoundMinimumDistance  7.1-12
+  UpperBoundPlotkin  7.1-4
+  UpperBoundSingleton  7.1-1
+  UUVCode  6.2-2
+  VandermondeMat  7.3-5
+  VectorCodeword  3.4-1
+  VerticalConversionFieldMat  7.3-9
+  weight enumerator polynomial  7.5
+  WeightCodeword  3.6-4
+  WeightDistribution  4.9-2
+  WeightHistogram  7.5-13
+  WeightVecFFE  2.1-5
+  WholeSpaceCode  5.5-11
+  WordLength  4.8-1
+  ZechLog  7.6-7
+  
+  
+  -------------------------------------------------------
diff --git a/doc/guava.aux b/doc/guava.aux
new file mode 100644
index 0000000..3cc0306
--- /dev/null
+++ b/doc/guava.aux
@@ -0,0 +1,765 @@
+\relax 
+\ifx\hyper at anchor\@undefined
+\global \let \oldcontentsline\contentsline
+\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global \let \oldnewlabel\newlabel
+\gdef \newlabel#1#2{\newlabelxx{#1}#2}
+\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\let \contentsline\oldcontentsline
+\let \newlabel\oldnewlabel}
+\else
+\global \let \hyper at last\relax 
+\fi
+
+\citation{Leon91}
+\citation{MS83}
+\citation{HP03}
+\@writefile{toc}{\contentsline {chapter}{\numberline {1}\leavevmode {\color  {Chapter }Introduction}}{12}{chapter.1}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {1.1}\leavevmode {\color  {Chapter }Introduction to the \textsf  {GUAVA} package}}{12}{section.1.1}}
+\@writefile{brf}{\backcite{Leon91}{{12}{1.1}{section.1.1}}}
+\@writefile{brf}{\backcite{MS83}{{12}{1.1}{section.1.1}}}
+\@writefile{brf}{\backcite{HP03}{{12}{1.1}{section.1.1}}}
+\@writefile{toc}{\contentsline {section}{\numberline {1.2}\leavevmode {\color  {Chapter }Installing \textsf  {GUAVA}}}{12}{section.1.2}}
+\newlabel{Installing GUAVA}{{1.2}{12}{\textcolor {Chapter }{Installing \textsf {GUAVA}}\relax }{section.1.2}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {1.3}\leavevmode {\color  {Chapter }Loading \textsf  {GUAVA}}}{13}{section.1.3}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {2}\leavevmode {\color  {Chapter }Coding theory functions in GAP}}{14}{chapter.2}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\newlabel{Coding theory functions in the GAP}{{2}{14}{\textcolor {Chapter }{Coding theory functions in GAP}\relax }{chapter.2}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.1}\leavevmode {\color  {Chapter } Distance functions }}{14}{section.2.1}}
+\newlabel{Distance functions}{{2.1}{14}{\textcolor {Chapter }{ Distance functions }\relax }{section.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}\leavevmode {\color  {Chapter }AClosestVectorCombinationsMatFFEVecFFE}}{14}{subsection.2.1.1}}
+\newlabel{AClosestVectorCombinationsMatFFEVecFFE}{{2.1.1}{14}{\textcolor {Chapter }{AClosestVectorCombinationsMatFFEVecFFE}\relax }{subsection.2.1.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}\leavevmode {\color  {Chapter }AClosestVectorComb..MatFFEVecFFECoords}}{15}{subsection.2.1.2}}
+\newlabel{AClosestVectorComb..MatFFEVecFFECoords}{{2.1.2}{15}{\textcolor {Chapter }{AClosestVectorComb..MatFFEVecFFECoords}\relax }{subsection.2.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3}\leavevmode {\color  {Chapter }DistancesDistributionMatFFEVecFFE}}{15}{subsection.2.1.3}}
+\newlabel{DistancesDistributionMatFFEVecFFE}{{2.1.3}{15}{\textcolor {Chapter }{DistancesDistributionMatFFEVecFFE}\relax }{subsection.2.1.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.4}\leavevmode {\color  {Chapter }DistancesDistributionVecFFEsVecFFE}}{16}{subsection.2.1.4}}
+\newlabel{DistancesDistributionVecFFEsVecFFE}{{2.1.4}{16}{\textcolor {Chapter }{DistancesDistributionVecFFEsVecFFE}\relax }{subsection.2.1.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.5}\leavevmode {\color  {Chapter }WeightVecFFE}}{16}{subsection.2.1.5}}
+\newlabel{WeightVecFFE}{{2.1.5}{16}{\textcolor {Chapter }{WeightVecFFE}\relax }{subsection.2.1.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.6}\leavevmode {\color  {Chapter }DistanceVecFFE}}{16}{subsection.2.1.6}}
+\newlabel{DistanceVecFFE}{{2.1.6}{16}{\textcolor {Chapter }{DistanceVecFFE}\relax }{subsection.2.1.6}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.2}\leavevmode {\color  {Chapter } Other functions }}{17}{section.2.2}}
+\newlabel{Other functions}{{2.2}{17}{\textcolor {Chapter }{ Other functions }\relax }{section.2.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}\leavevmode {\color  {Chapter }ConwayPolynomial}}{17}{subsection.2.2.1}}
+\newlabel{ConwayPolynomial}{{2.2.1}{17}{\textcolor {Chapter }{ConwayPolynomial}\relax }{subsection.2.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}\leavevmode {\color  {Chapter }RandomPrimitivePolynomial}}{18}{subsection.2.2.2}}
+\newlabel{RandomPrimitivePolynomial}{{2.2.2}{18}{\textcolor {Chapter }{RandomPrimitivePolynomial}\relax }{subsection.2.2.2}{}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {3}\leavevmode {\color  {Chapter }Codewords}}{19}{chapter.3}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\newlabel{Codewords}{{3}{19}{\textcolor {Chapter }{Codewords}\relax }{chapter.3}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.1}\leavevmode {\color  {Chapter }Construction of Codewords}}{20}{section.3.1}}
+\newlabel{Construction of Codewords}{{3.1}{20}{\textcolor {Chapter }{Construction of Codewords}\relax }{section.3.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}\leavevmode {\color  {Chapter }Codeword}}{20}{subsection.3.1.1}}
+\newlabel{Codeword}{{3.1.1}{20}{\textcolor {Chapter }{Codeword}\relax }{subsection.3.1.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}\leavevmode {\color  {Chapter }CodewordNr}}{21}{subsection.3.1.2}}
+\newlabel{CodewordNr}{{3.1.2}{21}{\textcolor {Chapter }{CodewordNr}\relax }{subsection.3.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}\leavevmode {\color  {Chapter }IsCodeword}}{22}{subsection.3.1.3}}
+\newlabel{IsCodeword}{{3.1.3}{22}{\textcolor {Chapter }{IsCodeword}\relax }{subsection.3.1.3}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.2}\leavevmode {\color  {Chapter }Comparisons of Codewords}}{22}{section.3.2}}
+\newlabel{Comparisons of Codewords}{{3.2}{22}{\textcolor {Chapter }{Comparisons of Codewords}\relax }{section.3.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}\leavevmode {\color  {Chapter }=}}{22}{subsection.3.2.1}}
+\newlabel{=}{{3.2.1}{22}{\textcolor {Chapter }{=}\relax }{subsection.3.2.1}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.3}\leavevmode {\color  {Chapter }Arithmetic Operations for Codewords}}{23}{section.3.3}}
+\newlabel{Arithmetic Operations for Codewords}{{3.3}{23}{\textcolor {Chapter }{Arithmetic Operations for Codewords}\relax }{section.3.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}\leavevmode {\color  {Chapter }+}}{23}{subsection.3.3.1}}
+\newlabel{+}{{3.3.1}{23}{\textcolor {Chapter }{+}\relax }{subsection.3.3.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}\leavevmode {\color  {Chapter }-}}{23}{subsection.3.3.2}}
+\newlabel{-}{{3.3.2}{23}{\textcolor {Chapter }{-}\relax }{subsection.3.3.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}\leavevmode {\color  {Chapter }+}}{23}{subsection.3.3.3}}
+\newlabel{+}{{3.3.3}{23}{\textcolor {Chapter }{+}\relax }{subsection.3.3.3}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.4}\leavevmode {\color  {Chapter } Functions that Convert Codewords to Vectors or Polynomials }}{24}{section.3.4}}
+\newlabel{convert Codewords to Vectors or Polynomials}{{3.4}{24}{\textcolor {Chapter }{ Functions that Convert Codewords to Vectors or Polynomials }\relax }{section.3.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.1}\leavevmode {\color  {Chapter }VectorCodeword}}{24}{subsection.3.4.1}}
+\newlabel{VectorCodeword}{{3.4.1}{24}{\textcolor {Chapter }{VectorCodeword}\relax }{subsection.3.4.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.2}\leavevmode {\color  {Chapter }PolyCodeword}}{24}{subsection.3.4.2}}
+\newlabel{PolyCodeword}{{3.4.2}{24}{\textcolor {Chapter }{PolyCodeword}\relax }{subsection.3.4.2}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.5}\leavevmode {\color  {Chapter } Functions that Change the Display Form of a Codeword }}{25}{section.3.5}}
+\newlabel{Functions that Change the Display Form of a Codeword}{{3.5}{25}{\textcolor {Chapter }{ Functions that Change the Display Form of a Codeword }\relax }{section.3.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.5.1}\leavevmode {\color  {Chapter }TreatAsVector}}{25}{subsection.3.5.1}}
+\newlabel{TreatAsVector}{{3.5.1}{25}{\textcolor {Chapter }{TreatAsVector}\relax }{subsection.3.5.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.5.2}\leavevmode {\color  {Chapter }TreatAsPoly}}{25}{subsection.3.5.2}}
+\newlabel{TreatAsPoly}{{3.5.2}{25}{\textcolor {Chapter }{TreatAsPoly}\relax }{subsection.3.5.2}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.6}\leavevmode {\color  {Chapter } Other Codeword Functions }}{26}{section.3.6}}
+\newlabel{Other Codeword Functions}{{3.6}{26}{\textcolor {Chapter }{ Other Codeword Functions }\relax }{section.3.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.1}\leavevmode {\color  {Chapter }NullWord}}{26}{subsection.3.6.1}}
+\newlabel{NullWord}{{3.6.1}{26}{\textcolor {Chapter }{NullWord}\relax }{subsection.3.6.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.2}\leavevmode {\color  {Chapter }DistanceCodeword}}{26}{subsection.3.6.2}}
+\newlabel{DistanceCodeword}{{3.6.2}{26}{\textcolor {Chapter }{DistanceCodeword}\relax }{subsection.3.6.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.3}\leavevmode {\color  {Chapter }Support}}{26}{subsection.3.6.3}}
+\newlabel{Support}{{3.6.3}{26}{\textcolor {Chapter }{Support}\relax }{subsection.3.6.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.4}\leavevmode {\color  {Chapter }WeightCodeword}}{27}{subsection.3.6.4}}
+\newlabel{WeightCodeword}{{3.6.4}{27}{\textcolor {Chapter }{WeightCodeword}\relax }{subsection.3.6.4}{}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {4}\leavevmode {\color  {Chapter }Codes}}{28}{chapter.4}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\newlabel{Codes}{{4}{28}{\textcolor {Chapter }{Codes}\relax }{chapter.4}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.1}\leavevmode {\color  {Chapter }Comparisons of Codes}}{30}{section.4.1}}
+\newlabel{Comparisons of Codes}{{4.1}{30}{\textcolor {Chapter }{Comparisons of Codes}\relax }{section.4.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}\leavevmode {\color  {Chapter }=}}{30}{subsection.4.1.1}}
+\newlabel{=}{{4.1.1}{30}{\textcolor {Chapter }{=}\relax }{subsection.4.1.1}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.2}\leavevmode {\color  {Chapter } Operations for Codes }}{31}{section.4.2}}
+\newlabel{Operations for Codes}{{4.2}{31}{\textcolor {Chapter }{ Operations for Codes }\relax }{section.4.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}\leavevmode {\color  {Chapter }+}}{31}{subsection.4.2.1}}
+\newlabel{+}{{4.2.1}{31}{\textcolor {Chapter }{+}\relax }{subsection.4.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}\leavevmode {\color  {Chapter }*}}{31}{subsection.4.2.2}}
+\newlabel{*}{{4.2.2}{31}{\textcolor {Chapter }{*}\relax }{subsection.4.2.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}\leavevmode {\color  {Chapter }*}}{31}{subsection.4.2.3}}
+\newlabel{*}{{4.2.3}{31}{\textcolor {Chapter }{*}\relax }{subsection.4.2.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}\leavevmode {\color  {Chapter }InformationWord}}{32}{subsection.4.2.4}}
+\newlabel{InformationWord}{{4.2.4}{32}{\textcolor {Chapter }{InformationWord}\relax }{subsection.4.2.4}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.3}\leavevmode {\color  {Chapter } Boolean Functions for Codes }}{32}{section.4.3}}
+\newlabel{Boolean Functions for Codes}{{4.3}{32}{\textcolor {Chapter }{ Boolean Functions for Codes }\relax }{section.4.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}\leavevmode {\color  {Chapter }in}}{32}{subsection.4.3.1}}
+\newlabel{in}{{4.3.1}{32}{\textcolor {Chapter }{in}\relax }{subsection.4.3.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.2}\leavevmode {\color  {Chapter }IsSubset}}{33}{subsection.4.3.2}}
+\newlabel{IsSubset}{{4.3.2}{33}{\textcolor {Chapter }{IsSubset}\relax }{subsection.4.3.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.3}\leavevmode {\color  {Chapter }IsCode}}{33}{subsection.4.3.3}}
+\newlabel{IsCode}{{4.3.3}{33}{\textcolor {Chapter }{IsCode}\relax }{subsection.4.3.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.4}\leavevmode {\color  {Chapter }IsLinearCode}}{33}{subsection.4.3.4}}
+\newlabel{IsLinearCode}{{4.3.4}{33}{\textcolor {Chapter }{IsLinearCode}\relax }{subsection.4.3.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.5}\leavevmode {\color  {Chapter }IsCyclicCode}}{33}{subsection.4.3.5}}
+\newlabel{IsCyclicCode}{{4.3.5}{33}{\textcolor {Chapter }{IsCyclicCode}\relax }{subsection.4.3.5}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.6}\leavevmode {\color  {Chapter }IsPerfectCode}}{34}{subsection.4.3.6}}
+\newlabel{IsPerfectCode}{{4.3.6}{34}{\textcolor {Chapter }{IsPerfectCode}\relax }{subsection.4.3.6}{}}
+\@writefile{brf}{\backcite{HP03}{{34}{4.3.6}{subsection.4.3.6}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.7}\leavevmode {\color  {Chapter }IsMDSCode}}{34}{subsection.4.3.7}}
+\newlabel{IsMDSCode}{{4.3.7}{34}{\textcolor {Chapter }{IsMDSCode}\relax }{subsection.4.3.7}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.8}\leavevmode {\color  {Chapter }IsSelfDualCode}}{35}{subsection.4.3.8}}
+\newlabel{IsSelfDualCode}{{4.3.8}{35}{\textcolor {Chapter }{IsSelfDualCode}\relax }{subsection.4.3.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.9}\leavevmode {\color  {Chapter }IsSelfOrthogonalCode}}{35}{subsection.4.3.9}}
+\newlabel{IsSelfOrthogonalCode}{{4.3.9}{35}{\textcolor {Chapter }{IsSelfOrthogonalCode}\relax }{subsection.4.3.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.10}\leavevmode {\color  {Chapter }IsDoublyEvenCode}}{35}{subsection.4.3.10}}
+\newlabel{IsDoublyEvenCode}{{4.3.10}{35}{\textcolor {Chapter }{IsDoublyEvenCode}\relax }{subsection.4.3.10}{}}
+\@writefile{brf}{\backcite{HP03}{{36}{4.3.10}{subsection.4.3.10}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.11}\leavevmode {\color  {Chapter }IsSinglyEvenCode}}{36}{subsection.4.3.11}}
+\newlabel{IsSinglyEvenCode}{{4.3.11}{36}{\textcolor {Chapter }{IsSinglyEvenCode}\relax }{subsection.4.3.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.12}\leavevmode {\color  {Chapter }IsEvenCode}}{36}{subsection.4.3.12}}
+\newlabel{IsEvenCode}{{4.3.12}{36}{\textcolor {Chapter }{IsEvenCode}\relax }{subsection.4.3.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.13}\leavevmode {\color  {Chapter }IsSelfComplementaryCode}}{37}{subsection.4.3.13}}
+\newlabel{IsSelfComplementaryCode}{{4.3.13}{37}{\textcolor {Chapter }{IsSelfComplementaryCode}\relax }{subsection.4.3.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.14}\leavevmode {\color  {Chapter }IsAffineCode}}{37}{subsection.4.3.14}}
+\newlabel{IsAffineCode}{{4.3.14}{37}{\textcolor {Chapter }{IsAffineCode}\relax }{subsection.4.3.14}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.15}\leavevmode {\color  {Chapter }IsAlmostAffineCode}}{38}{subsection.4.3.15}}
+\newlabel{IsAlmostAffineCode}{{4.3.15}{38}{\textcolor {Chapter }{IsAlmostAffineCode}\relax }{subsection.4.3.15}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.4}\leavevmode {\color  {Chapter } Equivalence and Isomorphism of Codes }}{38}{section.4.4}}
+\newlabel{Equivalence and Isomorphism of Codes}{{4.4}{38}{\textcolor {Chapter }{ Equivalence and Isomorphism of Codes }\relax }{section.4.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}\leavevmode {\color  {Chapter }IsEquivalent}}{38}{subsection.4.4.1}}
+\newlabel{IsEquivalent}{{4.4.1}{38}{\textcolor {Chapter }{IsEquivalent}\relax }{subsection.4.4.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.2}\leavevmode {\color  {Chapter }CodeIsomorphism}}{38}{subsection.4.4.2}}
+\newlabel{CodeIsomorphism}{{4.4.2}{38}{\textcolor {Chapter }{CodeIsomorphism}\relax }{subsection.4.4.2}{}}
+\citation{Leon82}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.3}\leavevmode {\color  {Chapter }AutomorphismGroup}}{39}{subsection.4.4.3}}
+\newlabel{AutomorphismGroup}{{4.4.3}{39}{\textcolor {Chapter }{AutomorphismGroup}\relax }{subsection.4.4.3}{}}
+\@writefile{brf}{\backcite{Leon82}{{39}{4.4.3}{subsection.4.4.3}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.4}\leavevmode {\color  {Chapter }PermutationAutomorphismGroup}}{40}{subsection.4.4.4}}
+\newlabel{PermutationAutomorphismGroup}{{4.4.4}{40}{\textcolor {Chapter }{PermutationAutomorphismGroup}\relax }{subsection.4.4.4}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.5}\leavevmode {\color  {Chapter } Domain Functions for Codes }}{40}{section.4.5}}
+\newlabel{Domain Functions for Codes}{{4.5}{40}{\textcolor {Chapter }{ Domain Functions for Codes }\relax }{section.4.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}\leavevmode {\color  {Chapter }IsFinite}}{40}{subsection.4.5.1}}
+\newlabel{IsFinite}{{4.5.1}{40}{\textcolor {Chapter }{IsFinite}\relax }{subsection.4.5.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.2}\leavevmode {\color  {Chapter }Size}}{40}{subsection.4.5.2}}
+\newlabel{Size}{{4.5.2}{40}{\textcolor {Chapter }{Size}\relax }{subsection.4.5.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.3}\leavevmode {\color  {Chapter }LeftActingDomain}}{41}{subsection.4.5.3}}
+\newlabel{LeftActingDomain}{{4.5.3}{41}{\textcolor {Chapter }{LeftActingDomain}\relax }{subsection.4.5.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.4}\leavevmode {\color  {Chapter }Dimension}}{41}{subsection.4.5.4}}
+\newlabel{Dimension}{{4.5.4}{41}{\textcolor {Chapter }{Dimension}\relax }{subsection.4.5.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.5}\leavevmode {\color  {Chapter }AsSSortedList}}{41}{subsection.4.5.5}}
+\newlabel{AsSSortedList}{{4.5.5}{41}{\textcolor {Chapter }{AsSSortedList}\relax }{subsection.4.5.5}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.6}\leavevmode {\color  {Chapter } Printing and Displaying Codes }}{42}{section.4.6}}
+\newlabel{Printing and Displaying Codes}{{4.6}{42}{\textcolor {Chapter }{ Printing and Displaying Codes }\relax }{section.4.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}\leavevmode {\color  {Chapter }Print}}{42}{subsection.4.6.1}}
+\newlabel{Print}{{4.6.1}{42}{\textcolor {Chapter }{Print}\relax }{subsection.4.6.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.2}\leavevmode {\color  {Chapter }String}}{42}{subsection.4.6.2}}
+\newlabel{String}{{4.6.2}{42}{\textcolor {Chapter }{String}\relax }{subsection.4.6.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.3}\leavevmode {\color  {Chapter }Display}}{43}{subsection.4.6.3}}
+\newlabel{Display}{{4.6.3}{43}{\textcolor {Chapter }{Display}\relax }{subsection.4.6.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.4}\leavevmode {\color  {Chapter }DisplayBoundsInfo}}{43}{subsection.4.6.4}}
+\newlabel{DisplayBoundsInfo}{{4.6.4}{43}{\textcolor {Chapter }{DisplayBoundsInfo}\relax }{subsection.4.6.4}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.7}\leavevmode {\color  {Chapter } Generating (Check) Matrices and Polynomials }}{44}{section.4.7}}
+\newlabel{Generating (Check) Matrices and Polynomials}{{4.7}{44}{\textcolor {Chapter }{ Generating (Check) Matrices and Polynomials }\relax }{section.4.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.1}\leavevmode {\color  {Chapter }GeneratorMat}}{44}{subsection.4.7.1}}
+\newlabel{GeneratorMat}{{4.7.1}{44}{\textcolor {Chapter }{GeneratorMat}\relax }{subsection.4.7.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.2}\leavevmode {\color  {Chapter }CheckMat}}{44}{subsection.4.7.2}}
+\newlabel{CheckMat}{{4.7.2}{44}{\textcolor {Chapter }{CheckMat}\relax }{subsection.4.7.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.3}\leavevmode {\color  {Chapter }GeneratorPol}}{45}{subsection.4.7.3}}
+\newlabel{GeneratorPol}{{4.7.3}{45}{\textcolor {Chapter }{GeneratorPol}\relax }{subsection.4.7.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.4}\leavevmode {\color  {Chapter }CheckPol}}{45}{subsection.4.7.4}}
+\newlabel{CheckPol}{{4.7.4}{45}{\textcolor {Chapter }{CheckPol}\relax }{subsection.4.7.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.5}\leavevmode {\color  {Chapter }RootsOfCode}}{45}{subsection.4.7.5}}
+\newlabel{RootsOfCode}{{4.7.5}{45}{\textcolor {Chapter }{RootsOfCode}\relax }{subsection.4.7.5}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.8}\leavevmode {\color  {Chapter } Parameters of Codes }}{46}{section.4.8}}
+\newlabel{Parameters of Codes}{{4.8}{46}{\textcolor {Chapter }{ Parameters of Codes }\relax }{section.4.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.1}\leavevmode {\color  {Chapter }WordLength}}{46}{subsection.4.8.1}}
+\newlabel{WordLength}{{4.8.1}{46}{\textcolor {Chapter }{WordLength}\relax }{subsection.4.8.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.2}\leavevmode {\color  {Chapter }Redundancy}}{46}{subsection.4.8.2}}
+\newlabel{Redundancy}{{4.8.2}{46}{\textcolor {Chapter }{Redundancy}\relax }{subsection.4.8.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.3}\leavevmode {\color  {Chapter }MinimumDistance}}{46}{subsection.4.8.3}}
+\newlabel{MinimumDistance}{{4.8.3}{46}{\textcolor {Chapter }{MinimumDistance}\relax }{subsection.4.8.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.4}\leavevmode {\color  {Chapter }MinimumDistanceLeon}}{47}{subsection.4.8.4}}
+\newlabel{MinimumDistanceLeon}{{4.8.4}{47}{\textcolor {Chapter }{MinimumDistanceLeon}\relax }{subsection.4.8.4}{}}
+\citation{Leon88}
+\citation{Chen69}
+\citation{Zimmermann96}
+\@writefile{brf}{\backcite{Leon88}{{48}{4.8.4}{subsection.4.8.4}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.5}\leavevmode {\color  {Chapter }MinimumWeight}}{48}{subsection.4.8.5}}
+\newlabel{MinimumWeight}{{4.8.5}{48}{\textcolor {Chapter }{MinimumWeight}\relax }{subsection.4.8.5}{}}
+\@writefile{brf}{\backcite{Chen69}{{48}{4.8.5}{subsection.4.8.5}}}
+\@writefile{brf}{\backcite{Zimmermann96}{{48}{4.8.5}{subsection.4.8.5}}}
+\citation{Leon88}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.6}\leavevmode {\color  {Chapter }DecreaseMinimumDistanceUpperBound}}{51}{subsection.4.8.6}}
+\newlabel{DecreaseMinimumDistanceUpperBound}{{4.8.6}{51}{\textcolor {Chapter }{DecreaseMinimumDistanceUpperBound}\relax }{subsection.4.8.6}{}}
+\@writefile{brf}{\backcite{Leon88}{{51}{4.8.6}{subsection.4.8.6}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.7}\leavevmode {\color  {Chapter }MinimumDistanceRandom}}{51}{subsection.4.8.7}}
+\newlabel{MinimumDistanceRandom}{{4.8.7}{51}{\textcolor {Chapter }{MinimumDistanceRandom}\relax }{subsection.4.8.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.8}\leavevmode {\color  {Chapter }CoveringRadius}}{53}{subsection.4.8.8}}
+\newlabel{CoveringRadius}{{4.8.8}{53}{\textcolor {Chapter }{CoveringRadius}\relax }{subsection.4.8.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.9}\leavevmode {\color  {Chapter }SetCoveringRadius}}{54}{subsection.4.8.9}}
+\newlabel{SetCoveringRadius}{{4.8.9}{54}{\textcolor {Chapter }{SetCoveringRadius}\relax }{subsection.4.8.9}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.9}\leavevmode {\color  {Chapter } Distributions }}{54}{section.4.9}}
+\newlabel{Distributions}{{4.9}{54}{\textcolor {Chapter }{ Distributions }\relax }{section.4.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.1}\leavevmode {\color  {Chapter }MinimumWeightWords}}{54}{subsection.4.9.1}}
+\newlabel{MinimumWeightWords}{{4.9.1}{54}{\textcolor {Chapter }{MinimumWeightWords}\relax }{subsection.4.9.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.2}\leavevmode {\color  {Chapter }WeightDistribution}}{54}{subsection.4.9.2}}
+\newlabel{WeightDistribution}{{4.9.2}{54}{\textcolor {Chapter }{WeightDistribution}\relax }{subsection.4.9.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.3}\leavevmode {\color  {Chapter }InnerDistribution}}{55}{subsection.4.9.3}}
+\newlabel{InnerDistribution}{{4.9.3}{55}{\textcolor {Chapter }{InnerDistribution}\relax }{subsection.4.9.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.4}\leavevmode {\color  {Chapter }DistancesDistribution}}{55}{subsection.4.9.4}}
+\newlabel{DistancesDistribution}{{4.9.4}{55}{\textcolor {Chapter }{DistancesDistribution}\relax }{subsection.4.9.4}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.5}\leavevmode {\color  {Chapter }OuterDistribution}}{56}{subsection.4.9.5}}
+\newlabel{OuterDistribution}{{4.9.5}{56}{\textcolor {Chapter }{OuterDistribution}\relax }{subsection.4.9.5}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.10}\leavevmode {\color  {Chapter } Decoding Functions }}{56}{section.4.10}}
+\newlabel{Decoding Functions}{{4.10}{56}{\textcolor {Chapter }{ Decoding Functions }\relax }{section.4.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.1}\leavevmode {\color  {Chapter }Decode}}{56}{subsection.4.10.1}}
+\newlabel{Decode}{{4.10.1}{56}{\textcolor {Chapter }{Decode}\relax }{subsection.4.10.1}{}}
+\@writefile{brf}{\backcite{HP03}{{56}{4.10.1}{subsection.4.10.1}}}
+\citation{HP03}
+\citation{JH04}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.2}\leavevmode {\color  {Chapter }Decodeword}}{57}{subsection.4.10.2}}
+\newlabel{Decodeword}{{4.10.2}{57}{\textcolor {Chapter }{Decodeword}\relax }{subsection.4.10.2}{}}
+\@writefile{brf}{\backcite{HP03}{{57}{4.10.2}{subsection.4.10.2}}}
+\@writefile{brf}{\backcite{JH04}{{57}{4.10.2}{subsection.4.10.2}}}
+\citation{Gao03}
+\citation{JH04}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.3}\leavevmode {\color  {Chapter }GeneralizedReedSolomonDecoderGao}}{58}{subsection.4.10.3}}
+\newlabel{GeneralizedReedSolomonDecoderGao}{{4.10.3}{58}{\textcolor {Chapter }{GeneralizedReedSolomonDecoderGao}\relax }{subsection.4.10.3}{}}
+\@writefile{brf}{\backcite{Gao03}{{58}{4.10.3}{subsection.4.10.3}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.4}\leavevmode {\color  {Chapter }GeneralizedReedSolomonListDecoder}}{58}{subsection.4.10.4}}
+\newlabel{GeneralizedReedSolomonListDecoder}{{4.10.4}{58}{\textcolor {Chapter }{GeneralizedReedSolomonListDecoder}\relax }{subsection.4.10.4}{}}
+\@writefile{brf}{\backcite{JH04}{{58}{4.10.4}{subsection.4.10.4}}}
+\citation{JH04}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.5}\leavevmode {\color  {Chapter }BitFlipDecoder}}{59}{subsection.4.10.5}}
+\newlabel{BitFlipDecoder}{{4.10.5}{59}{\textcolor {Chapter }{BitFlipDecoder}\relax }{subsection.4.10.5}{}}
+\@writefile{brf}{\backcite{JH04}{{59}{4.10.5}{subsection.4.10.5}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.6}\leavevmode {\color  {Chapter }NearestNeighborGRSDecodewords}}{60}{subsection.4.10.6}}
+\newlabel{NearestNeighborGRSDecodewords}{{4.10.6}{60}{\textcolor {Chapter }{NearestNeighborGRSDecodewords}\relax }{subsection.4.10.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.7}\leavevmode {\color  {Chapter }NearestNeighborDecodewords}}{61}{subsection.4.10.7}}
+\newlabel{NearestNeighborDecodewords}{{4.10.7}{61}{\textcolor {Chapter }{NearestNeighborDecodewords}\relax }{subsection.4.10.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.8}\leavevmode {\color  {Chapter }Syndrome}}{61}{subsection.4.10.8}}
+\newlabel{Syndrome}{{4.10.8}{61}{\textcolor {Chapter }{Syndrome}\relax }{subsection.4.10.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.9}\leavevmode {\color  {Chapter }SyndromeTable}}{62}{subsection.4.10.9}}
+\newlabel{SyndromeTable}{{4.10.9}{62}{\textcolor {Chapter }{SyndromeTable}\relax }{subsection.4.10.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.10}\leavevmode {\color  {Chapter }StandardArray}}{62}{subsection.4.10.10}}
+\newlabel{StandardArray}{{4.10.10}{62}{\textcolor {Chapter }{StandardArray}\relax }{subsection.4.10.10}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.11}\leavevmode {\color  {Chapter }PermutationDecode}}{63}{subsection.4.10.11}}
+\newlabel{PermutationDecode}{{4.10.11}{63}{\textcolor {Chapter }{PermutationDecode}\relax }{subsection.4.10.11}{}}
+\@writefile{brf}{\backcite{HP03}{{63}{4.10.11}{subsection.4.10.11}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.10.12}\leavevmode {\color  {Chapter }PermutationDecodeNC}}{63}{subsection.4.10.12}}
+\newlabel{PermutationDecodeNC}{{4.10.12}{63}{\textcolor {Chapter }{PermutationDecodeNC}\relax }{subsection.4.10.12}{}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {5}\leavevmode {\color  {Chapter }Generating Codes}}{65}{chapter.5}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\newlabel{Generating Codes}{{5}{65}{\textcolor {Chapter }{Generating Codes}\relax }{chapter.5}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.1}\leavevmode {\color  {Chapter } Generating Unrestricted Codes }}{65}{section.5.1}}
+\newlabel{Generating Unrestricted Codes}{{5.1}{65}{\textcolor {Chapter }{ Generating Unrestricted Codes }\relax }{section.5.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.1}\leavevmode {\color  {Chapter }ElementsCode}}{65}{subsection.5.1.1}}
+\newlabel{ElementsCode}{{5.1.1}{65}{\textcolor {Chapter }{ElementsCode}\relax }{subsection.5.1.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.2}\leavevmode {\color  {Chapter }HadamardCode}}{66}{subsection.5.1.2}}
+\newlabel{HadamardCode}{{5.1.2}{66}{\textcolor {Chapter }{HadamardCode}\relax }{subsection.5.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.3}\leavevmode {\color  {Chapter }ConferenceCode}}{66}{subsection.5.1.3}}
+\newlabel{ConferenceCode}{{5.1.3}{66}{\textcolor {Chapter }{ConferenceCode}\relax }{subsection.5.1.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.4}\leavevmode {\color  {Chapter }MOLSCode}}{67}{subsection.5.1.4}}
+\newlabel{MOLSCode}{{5.1.4}{67}{\textcolor {Chapter }{MOLSCode}\relax }{subsection.5.1.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.5}\leavevmode {\color  {Chapter }RandomCode}}{68}{subsection.5.1.5}}
+\newlabel{RandomCode}{{5.1.5}{68}{\textcolor {Chapter }{RandomCode}\relax }{subsection.5.1.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.6}\leavevmode {\color  {Chapter }NordstromRobinsonCode}}{68}{subsection.5.1.6}}
+\newlabel{NordstromRobinsonCode}{{5.1.6}{68}{\textcolor {Chapter }{NordstromRobinsonCode}\relax }{subsection.5.1.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.7}\leavevmode {\color  {Chapter }GreedyCode}}{68}{subsection.5.1.7}}
+\newlabel{GreedyCode}{{5.1.7}{68}{\textcolor {Chapter }{GreedyCode}\relax }{subsection.5.1.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.8}\leavevmode {\color  {Chapter }LexiCode}}{69}{subsection.5.1.8}}
+\newlabel{LexiCode}{{5.1.8}{69}{\textcolor {Chapter }{LexiCode}\relax }{subsection.5.1.8}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.2}\leavevmode {\color  {Chapter } Generating Linear Codes }}{69}{section.5.2}}
+\newlabel{Generating Linear Codes}{{5.2}{69}{\textcolor {Chapter }{ Generating Linear Codes }\relax }{section.5.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.1}\leavevmode {\color  {Chapter }GeneratorMatCode}}{69}{subsection.5.2.1}}
+\newlabel{GeneratorMatCode}{{5.2.1}{69}{\textcolor {Chapter }{GeneratorMatCode}\relax }{subsection.5.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.2}\leavevmode {\color  {Chapter }CheckMatCodeMutable}}{70}{subsection.5.2.2}}
+\newlabel{CheckMatCodeMutable}{{5.2.2}{70}{\textcolor {Chapter }{CheckMatCodeMutable}\relax }{subsection.5.2.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.3}\leavevmode {\color  {Chapter }CheckMatCode}}{70}{subsection.5.2.3}}
+\newlabel{CheckMatCode}{{5.2.3}{70}{\textcolor {Chapter }{CheckMatCode}\relax }{subsection.5.2.3}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.4}\leavevmode {\color  {Chapter }HammingCode}}{71}{subsection.5.2.4}}
+\newlabel{HammingCode}{{5.2.4}{71}{\textcolor {Chapter }{HammingCode}\relax }{subsection.5.2.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.5}\leavevmode {\color  {Chapter }ReedMullerCode}}{71}{subsection.5.2.5}}
+\newlabel{ReedMullerCode}{{5.2.5}{71}{\textcolor {Chapter }{ReedMullerCode}\relax }{subsection.5.2.5}{}}
+\@writefile{brf}{\backcite{HP03}{{71}{5.2.5}{subsection.5.2.5}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.6}\leavevmode {\color  {Chapter }AlternantCode}}{71}{subsection.5.2.6}}
+\newlabel{AlternantCode}{{5.2.6}{71}{\textcolor {Chapter }{AlternantCode}\relax }{subsection.5.2.6}{}}
+\citation{HP03}
+\citation{MS83}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.7}\leavevmode {\color  {Chapter }GoppaCode}}{72}{subsection.5.2.7}}
+\newlabel{GoppaCode}{{5.2.7}{72}{\textcolor {Chapter }{GoppaCode}\relax }{subsection.5.2.7}{}}
+\@writefile{brf}{\backcite{HP03}{{72}{5.2.7}{subsection.5.2.7}}}
+\@writefile{brf}{\backcite{MS83}{{72}{5.2.7}{subsection.5.2.7}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.8}\leavevmode {\color  {Chapter }GeneralizedSrivastavaCode}}{72}{subsection.5.2.8}}
+\newlabel{GeneralizedSrivastavaCode}{{5.2.8}{72}{\textcolor {Chapter }{GeneralizedSrivastavaCode}\relax }{subsection.5.2.8}{}}
+\citation{He72}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.9}\leavevmode {\color  {Chapter }SrivastavaCode}}{73}{subsection.5.2.9}}
+\newlabel{SrivastavaCode}{{5.2.9}{73}{\textcolor {Chapter }{SrivastavaCode}\relax }{subsection.5.2.9}{}}
+\@writefile{brf}{\backcite{He72}{{73}{5.2.9}{subsection.5.2.9}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.10}\leavevmode {\color  {Chapter }CordaroWagnerCode}}{73}{subsection.5.2.10}}
+\newlabel{CordaroWagnerCode}{{5.2.10}{73}{\textcolor {Chapter }{CordaroWagnerCode}\relax }{subsection.5.2.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.11}\leavevmode {\color  {Chapter }FerreroDesignCode}}{73}{subsection.5.2.11}}
+\newlabel{FerreroDesignCode}{{5.2.11}{73}{\textcolor {Chapter }{FerreroDesignCode}\relax }{subsection.5.2.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.12}\leavevmode {\color  {Chapter }RandomLinearCode}}{74}{subsection.5.2.12}}
+\newlabel{RandomLinearCode}{{5.2.12}{74}{\textcolor {Chapter }{RandomLinearCode}\relax }{subsection.5.2.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.13}\leavevmode {\color  {Chapter }OptimalityCode}}{75}{subsection.5.2.13}}
+\newlabel{OptimalityCode}{{5.2.13}{75}{\textcolor {Chapter }{OptimalityCode}\relax }{subsection.5.2.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.14}\leavevmode {\color  {Chapter }BestKnownLinearCode}}{75}{subsection.5.2.14}}
+\newlabel{BestKnownLinearCode}{{5.2.14}{75}{\textcolor {Chapter }{BestKnownLinearCode}\relax }{subsection.5.2.14}{}}
+\citation{GDT91}
+\@writefile{toc}{\contentsline {section}{\numberline {5.3}\leavevmode {\color  {Chapter } Gabidulin Codes }}{77}{section.5.3}}
+\newlabel{Gabidulin Codes}{{5.3}{77}{\textcolor {Chapter }{ Gabidulin Codes }\relax }{section.5.3}{}}
+\@writefile{brf}{\backcite{GDT91}{{77}{5.3}{section.5.3}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.1}\leavevmode {\color  {Chapter }GabidulinCode}}{77}{subsection.5.3.1}}
+\newlabel{GabidulinCode}{{5.3.1}{77}{\textcolor {Chapter }{GabidulinCode}\relax }{subsection.5.3.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.2}\leavevmode {\color  {Chapter }EnlargedGabidulinCode}}{77}{subsection.5.3.2}}
+\newlabel{EnlargedGabidulinCode}{{5.3.2}{77}{\textcolor {Chapter }{EnlargedGabidulinCode}\relax }{subsection.5.3.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}\leavevmode {\color  {Chapter }DavydovCode}}{77}{subsection.5.3.3}}
+\newlabel{DavydovCode}{{5.3.3}{77}{\textcolor {Chapter }{DavydovCode}\relax }{subsection.5.3.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}\leavevmode {\color  {Chapter }TombakCode}}{77}{subsection.5.3.4}}
+\newlabel{TombakCode}{{5.3.4}{77}{\textcolor {Chapter }{TombakCode}\relax }{subsection.5.3.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.5}\leavevmode {\color  {Chapter }EnlargedTombakCode}}{77}{subsection.5.3.5}}
+\newlabel{EnlargedTombakCode}{{5.3.5}{77}{\textcolor {Chapter }{EnlargedTombakCode}\relax }{subsection.5.3.5}{}}
+\citation{MS83}
+\@writefile{toc}{\contentsline {section}{\numberline {5.4}\leavevmode {\color  {Chapter } Golay Codes }}{78}{section.5.4}}
+\newlabel{Golay Codes}{{5.4}{78}{\textcolor {Chapter }{ Golay Codes }\relax }{section.5.4}{}}
+\@writefile{brf}{\backcite{MS83}{{78}{5.4}{section.5.4}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}\leavevmode {\color  {Chapter }BinaryGolayCode}}{78}{subsection.5.4.1}}
+\newlabel{BinaryGolayCode}{{5.4.1}{78}{\textcolor {Chapter }{BinaryGolayCode}\relax }{subsection.5.4.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}\leavevmode {\color  {Chapter }ExtendedBinaryGolayCode}}{78}{subsection.5.4.2}}
+\newlabel{ExtendedBinaryGolayCode}{{5.4.2}{78}{\textcolor {Chapter }{ExtendedBinaryGolayCode}\relax }{subsection.5.4.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}\leavevmode {\color  {Chapter }TernaryGolayCode}}{79}{subsection.5.4.3}}
+\newlabel{TernaryGolayCode}{{5.4.3}{79}{\textcolor {Chapter }{TernaryGolayCode}\relax }{subsection.5.4.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.4}\leavevmode {\color  {Chapter }ExtendedTernaryGolayCode}}{79}{subsection.5.4.4}}
+\newlabel{ExtendedTernaryGolayCode}{{5.4.4}{79}{\textcolor {Chapter }{ExtendedTernaryGolayCode}\relax }{subsection.5.4.4}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.5}\leavevmode {\color  {Chapter } Generating Cyclic Codes }}{79}{section.5.5}}
+\newlabel{Generating Cyclic Codes}{{5.5}{79}{\textcolor {Chapter }{ Generating Cyclic Codes }\relax }{section.5.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.1}\leavevmode {\color  {Chapter }GeneratorPolCode}}{80}{subsection.5.5.1}}
+\newlabel{GeneratorPolCode}{{5.5.1}{80}{\textcolor {Chapter }{GeneratorPolCode}\relax }{subsection.5.5.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.2}\leavevmode {\color  {Chapter }CheckPolCode}}{81}{subsection.5.5.2}}
+\newlabel{CheckPolCode}{{5.5.2}{81}{\textcolor {Chapter }{CheckPolCode}\relax }{subsection.5.5.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.3}\leavevmode {\color  {Chapter }RootsCode}}{81}{subsection.5.5.3}}
+\newlabel{RootsCode}{{5.5.3}{81}{\textcolor {Chapter }{RootsCode}\relax }{subsection.5.5.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.4}\leavevmode {\color  {Chapter }BCHCode}}{82}{subsection.5.5.4}}
+\newlabel{BCHCode}{{5.5.4}{82}{\textcolor {Chapter }{BCHCode}\relax }{subsection.5.5.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.5}\leavevmode {\color  {Chapter }ReedSolomonCode}}{83}{subsection.5.5.5}}
+\newlabel{ReedSolomonCode}{{5.5.5}{83}{\textcolor {Chapter }{ReedSolomonCode}\relax }{subsection.5.5.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.6}\leavevmode {\color  {Chapter }ExtendedReedSolomonCode}}{83}{subsection.5.5.6}}
+\newlabel{ExtendedReedSolomonCode}{{5.5.6}{83}{\textcolor {Chapter }{ExtendedReedSolomonCode}\relax }{subsection.5.5.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.7}\leavevmode {\color  {Chapter }QRCode}}{83}{subsection.5.5.7}}
+\newlabel{QRCode}{{5.5.7}{83}{\textcolor {Chapter }{QRCode}\relax }{subsection.5.5.7}{}}
+\citation{BM03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.8}\leavevmode {\color  {Chapter }QQRCodeNC}}{84}{subsection.5.5.8}}
+\newlabel{QQRCodeNC}{{5.5.8}{84}{\textcolor {Chapter }{QQRCodeNC}\relax }{subsection.5.5.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.9}\leavevmode {\color  {Chapter }QQRCode}}{84}{subsection.5.5.9}}
+\newlabel{QQRCode}{{5.5.9}{84}{\textcolor {Chapter }{QQRCode}\relax }{subsection.5.5.9}{}}
+\@writefile{brf}{\backcite{BM03}{{84}{5.5.9}{subsection.5.5.9}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.10}\leavevmode {\color  {Chapter }FireCode}}{85}{subsection.5.5.10}}
+\newlabel{FireCode}{{5.5.10}{85}{\textcolor {Chapter }{FireCode}\relax }{subsection.5.5.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.11}\leavevmode {\color  {Chapter }WholeSpaceCode}}{85}{subsection.5.5.11}}
+\newlabel{WholeSpaceCode}{{5.5.11}{85}{\textcolor {Chapter }{WholeSpaceCode}\relax }{subsection.5.5.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.12}\leavevmode {\color  {Chapter }NullCode}}{86}{subsection.5.5.12}}
+\newlabel{NullCode}{{5.5.12}{86}{\textcolor {Chapter }{NullCode}\relax }{subsection.5.5.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.13}\leavevmode {\color  {Chapter }RepetitionCode}}{86}{subsection.5.5.13}}
+\newlabel{RepetitionCode}{{5.5.13}{86}{\textcolor {Chapter }{RepetitionCode}\relax }{subsection.5.5.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.14}\leavevmode {\color  {Chapter }CyclicCodes}}{86}{subsection.5.5.14}}
+\newlabel{CyclicCodes}{{5.5.14}{86}{\textcolor {Chapter }{CyclicCodes}\relax }{subsection.5.5.14}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.15}\leavevmode {\color  {Chapter }NrCyclicCodes}}{86}{subsection.5.5.15}}
+\newlabel{NrCyclicCodes}{{5.5.15}{86}{\textcolor {Chapter }{NrCyclicCodes}\relax }{subsection.5.5.15}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.16}\leavevmode {\color  {Chapter }QuasiCyclicCode}}{87}{subsection.5.5.16}}
+\newlabel{QuasiCyclicCode}{{5.5.16}{87}{\textcolor {Chapter }{QuasiCyclicCode}\relax }{subsection.5.5.16}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.17}\leavevmode {\color  {Chapter }CyclicMDSCode}}{88}{subsection.5.5.17}}
+\newlabel{CyclicMDSCode}{{5.5.17}{88}{\textcolor {Chapter }{CyclicMDSCode}\relax }{subsection.5.5.17}{}}
+\citation{HHKK07}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.18}\leavevmode {\color  {Chapter }FourNegacirculantSelfDualCode}}{89}{subsection.5.5.18}}
+\newlabel{FourNegacirculantSelfDualCode}{{5.5.18}{89}{\textcolor {Chapter }{FourNegacirculantSelfDualCode}\relax }{subsection.5.5.18}{}}
+\@writefile{brf}{\backcite{HHKK07}{{89}{5.5.18}{subsection.5.5.18}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.5.19}\leavevmode {\color  {Chapter }FourNegacirculantSelfDualCodeNC}}{90}{subsection.5.5.19}}
+\newlabel{FourNegacirculantSelfDualCodeNC}{{5.5.19}{90}{\textcolor {Chapter }{FourNegacirculantSelfDualCodeNC}\relax }{subsection.5.5.19}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.6}\leavevmode {\color  {Chapter } Evaluation Codes }}{90}{section.5.6}}
+\newlabel{Evaluation Codes}{{5.6}{90}{\textcolor {Chapter }{ Evaluation Codes }\relax }{section.5.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.6.1}\leavevmode {\color  {Chapter }EvaluationCode}}{90}{subsection.5.6.1}}
+\newlabel{EvaluationCode}{{5.6.1}{90}{\textcolor {Chapter }{EvaluationCode}\relax }{subsection.5.6.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.6.2}\leavevmode {\color  {Chapter }GeneralizedReedSolomonCode}}{90}{subsection.5.6.2}}
+\newlabel{GeneralizedReedSolomonCode}{{5.6.2}{90}{\textcolor {Chapter }{GeneralizedReedSolomonCode}\relax }{subsection.5.6.2}{}}
+\citation{JH04}
+\citation{MS83}
+\citation{JH04}
+\@writefile{brf}{\backcite{JH04}{{91}{5.6.2}{subsection.5.6.2}}}
+\@writefile{brf}{\backcite{MS83}{{91}{5.6.2}{subsection.5.6.2}}}
+\@writefile{brf}{\backcite{JH04}{{91}{5.6.2}{subsection.5.6.2}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.6.3}\leavevmode {\color  {Chapter }GeneralizedReedMullerCode}}{91}{subsection.5.6.3}}
+\newlabel{GeneralizedReedMullerCode}{{5.6.3}{91}{\textcolor {Chapter }{GeneralizedReedMullerCode}\relax }{subsection.5.6.3}{}}
+\citation{Jo04}
+\citation{Han99}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.6.4}\leavevmode {\color  {Chapter }ToricPoints}}{92}{subsection.5.6.4}}
+\newlabel{ToricPoints}{{5.6.4}{92}{\textcolor {Chapter }{ToricPoints}\relax }{subsection.5.6.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.6.5}\leavevmode {\color  {Chapter }ToricCode}}{92}{subsection.5.6.5}}
+\newlabel{ToricCode}{{5.6.5}{92}{\textcolor {Chapter }{ToricCode}\relax }{subsection.5.6.5}{}}
+\@writefile{brf}{\backcite{Jo04}{{92}{5.6.5}{subsection.5.6.5}}}
+\@writefile{brf}{\backcite{Han99}{{92}{5.6.5}{subsection.5.6.5}}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.7}\leavevmode {\color  {Chapter } Algebraic geometric codes }}{93}{section.5.7}}
+\newlabel{Algebraic geometric codes}{{5.7}{93}{\textcolor {Chapter }{ Algebraic geometric codes }\relax }{section.5.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.1}\leavevmode {\color  {Chapter }AffineCurve}}{93}{subsection.5.7.1}}
+\newlabel{AffineCurve}{{5.7.1}{93}{\textcolor {Chapter }{AffineCurve}\relax }{subsection.5.7.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.2}\leavevmode {\color  {Chapter }AffinePointsOnCurve}}{94}{subsection.5.7.2}}
+\newlabel{AffinePointsOnCurve}{{5.7.2}{94}{\textcolor {Chapter }{AffinePointsOnCurve}\relax }{subsection.5.7.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.3}\leavevmode {\color  {Chapter }GenusCurve}}{94}{subsection.5.7.3}}
+\newlabel{GenusCurve}{{5.7.3}{94}{\textcolor {Chapter }{GenusCurve}\relax }{subsection.5.7.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.4}\leavevmode {\color  {Chapter }GOrbitPoint }}{94}{subsection.5.7.4}}
+\newlabel{GOrbitPoint }{{5.7.4}{94}{\textcolor {Chapter }{GOrbitPoint }\relax }{subsection.5.7.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.5}\leavevmode {\color  {Chapter }DivisorOnAffineCurve}}{96}{subsection.5.7.5}}
+\newlabel{DivisorOnAffineCurve}{{5.7.5}{96}{\textcolor {Chapter }{DivisorOnAffineCurve}\relax }{subsection.5.7.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.6}\leavevmode {\color  {Chapter }DivisorAddition }}{96}{subsection.5.7.6}}
+\newlabel{DivisorAddition }{{5.7.6}{96}{\textcolor {Chapter }{DivisorAddition }\relax }{subsection.5.7.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.7}\leavevmode {\color  {Chapter }DivisorDegree }}{96}{subsection.5.7.7}}
+\newlabel{DivisorDegree }{{5.7.7}{96}{\textcolor {Chapter }{DivisorDegree }\relax }{subsection.5.7.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.8}\leavevmode {\color  {Chapter }DivisorNegate }}{97}{subsection.5.7.8}}
+\newlabel{DivisorNegate }{{5.7.8}{97}{\textcolor {Chapter }{DivisorNegate }\relax }{subsection.5.7.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.9}\leavevmode {\color  {Chapter }DivisorIsZero }}{97}{subsection.5.7.9}}
+\newlabel{DivisorIsZero }{{5.7.9}{97}{\textcolor {Chapter }{DivisorIsZero }\relax }{subsection.5.7.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.10}\leavevmode {\color  {Chapter }DivisorsEqual }}{97}{subsection.5.7.10}}
+\newlabel{DivisorsEqual }{{5.7.10}{97}{\textcolor {Chapter }{DivisorsEqual }\relax }{subsection.5.7.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.11}\leavevmode {\color  {Chapter }DivisorGCD }}{97}{subsection.5.7.11}}
+\newlabel{DivisorGCD }{{5.7.11}{97}{\textcolor {Chapter }{DivisorGCD }\relax }{subsection.5.7.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.12}\leavevmode {\color  {Chapter }DivisorLCM }}{97}{subsection.5.7.12}}
+\newlabel{DivisorLCM }{{5.7.12}{97}{\textcolor {Chapter }{DivisorLCM }\relax }{subsection.5.7.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.13}\leavevmode {\color  {Chapter }RiemannRochSpaceBasisFunctionP1 }}{99}{subsection.5.7.13}}
+\newlabel{RiemannRochSpaceBasisFunctionP1 }{{5.7.13}{99}{\textcolor {Chapter }{RiemannRochSpaceBasisFunctionP1 }\relax }{subsection.5.7.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.14}\leavevmode {\color  {Chapter }DivisorOfRationalFunctionP1 }}{99}{subsection.5.7.14}}
+\newlabel{DivisorOfRationalFunctionP1 }{{5.7.14}{99}{\textcolor {Chapter }{DivisorOfRationalFunctionP1 }\relax }{subsection.5.7.14}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.15}\leavevmode {\color  {Chapter }RiemannRochSpaceBasisP1 }}{100}{subsection.5.7.15}}
+\newlabel{RiemannRochSpaceBasisP1 }{{5.7.15}{100}{\textcolor {Chapter }{RiemannRochSpaceBasisP1 }\relax }{subsection.5.7.15}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.16}\leavevmode {\color  {Chapter }MoebiusTransformation }}{101}{subsection.5.7.16}}
+\newlabel{MoebiusTransformation }{{5.7.16}{101}{\textcolor {Chapter }{MoebiusTransformation }\relax }{subsection.5.7.16}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.17}\leavevmode {\color  {Chapter }ActionMoebiusTransformationOnFunction }}{101}{subsection.5.7.17}}
+\newlabel{ActionMoebiusTransformationOnFunction }{{5.7.17}{101}{\textcolor {Chapter }{ActionMoebiusTransformationOnFunction }\relax }{subsection.5.7.17}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.18}\leavevmode {\color  {Chapter }ActionMoebiusTransformationOnDivisorP1 }}{101}{subsection.5.7.18}}
+\newlabel{ActionMoebiusTransformationOnDivisorP1 }{{5.7.18}{101}{\textcolor {Chapter }{ActionMoebiusTransformationOnDivisorP1 }\relax }{subsection.5.7.18}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.19}\leavevmode {\color  {Chapter }IsActionMoebiusTransformationOnDivisorDefinedP1 }}{101}{subsection.5.7.19}}
+\newlabel{IsActionMoebiusTransformationOnDivisorDefinedP1 }{{5.7.19}{101}{\textcolor {Chapter }{IsActionMoebiusTransformationOnDivisorDefinedP1 }\relax }{subsection.5.7.19}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.20}\leavevmode {\color  {Chapter }DivisorAutomorphismGroupP1 }}{102}{subsection.5.7.20}}
+\newlabel{DivisorAutomorphismGroupP1 }{{5.7.20}{102}{\textcolor {Chapter }{DivisorAutomorphismGroupP1 }\relax }{subsection.5.7.20}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.21}\leavevmode {\color  {Chapter }MatrixRepresentationOnRiemannRochSpaceP1 }}{103}{subsection.5.7.21}}
+\newlabel{MatrixRepresentationOnRiemannRochSpaceP1 }{{5.7.21}{103}{\textcolor {Chapter }{MatrixRepresentationOnRiemannRochSpaceP1 }\relax }{subsection.5.7.21}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.22}\leavevmode {\color  {Chapter }GoppaCodeClassical}}{104}{subsection.5.7.22}}
+\newlabel{GoppaCodeClassical}{{5.7.22}{104}{\textcolor {Chapter }{GoppaCodeClassical}\relax }{subsection.5.7.22}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.23}\leavevmode {\color  {Chapter }EvaluationBivariateCode}}{104}{subsection.5.7.23}}
+\newlabel{EvaluationBivariateCode}{{5.7.23}{104}{\textcolor {Chapter }{EvaluationBivariateCode}\relax }{subsection.5.7.23}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.24}\leavevmode {\color  {Chapter }EvaluationBivariateCodeNC}}{104}{subsection.5.7.24}}
+\newlabel{EvaluationBivariateCodeNC}{{5.7.24}{104}{\textcolor {Chapter }{EvaluationBivariateCodeNC}\relax }{subsection.5.7.24}{}}
+\citation{St93}
+\@writefile{toc}{\contentsline {subsection}{\numberline {5.7.25}\leavevmode {\color  {Chapter }OnePointAGCode}}{105}{subsection.5.7.25}}
+\newlabel{OnePointAGCode}{{5.7.25}{105}{\textcolor {Chapter }{OnePointAGCode}\relax }{subsection.5.7.25}{}}
+\@writefile{brf}{\backcite{St93}{{105}{5.7.25}{subsection.5.7.25}}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {6}\leavevmode {\color  {Chapter }Manipulating Codes}}{107}{chapter.6}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\newlabel{Manipulating Codes}{{6}{107}{\textcolor {Chapter }{Manipulating Codes}\relax }{chapter.6}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {6.1}\leavevmode {\color  {Chapter } Functions that Generate a New Code from a Given Code }}{107}{section.6.1}}
+\newlabel{Functions that Generate a New Code from a Given Code}{{6.1}{107}{\textcolor {Chapter }{ Functions that Generate a New Code from a Given Code }\relax }{section.6.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.1}\leavevmode {\color  {Chapter }ExtendedCode}}{107}{subsection.6.1.1}}
+\newlabel{ExtendedCode}{{6.1.1}{107}{\textcolor {Chapter }{ExtendedCode}\relax }{subsection.6.1.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.2}\leavevmode {\color  {Chapter }PuncturedCode}}{108}{subsection.6.1.2}}
+\newlabel{PuncturedCode}{{6.1.2}{108}{\textcolor {Chapter }{PuncturedCode}\relax }{subsection.6.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.3}\leavevmode {\color  {Chapter }EvenWeightSubcode}}{108}{subsection.6.1.3}}
+\newlabel{EvenWeightSubcode}{{6.1.3}{108}{\textcolor {Chapter }{EvenWeightSubcode}\relax }{subsection.6.1.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.4}\leavevmode {\color  {Chapter }PermutedCode}}{109}{subsection.6.1.4}}
+\newlabel{PermutedCode}{{6.1.4}{109}{\textcolor {Chapter }{PermutedCode}\relax }{subsection.6.1.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.5}\leavevmode {\color  {Chapter }ExpurgatedCode}}{109}{subsection.6.1.5}}
+\newlabel{ExpurgatedCode}{{6.1.5}{109}{\textcolor {Chapter }{ExpurgatedCode}\relax }{subsection.6.1.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.6}\leavevmode {\color  {Chapter }AugmentedCode}}{110}{subsection.6.1.6}}
+\newlabel{AugmentedCode}{{6.1.6}{110}{\textcolor {Chapter }{AugmentedCode}\relax }{subsection.6.1.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.7}\leavevmode {\color  {Chapter }RemovedElementsCode}}{110}{subsection.6.1.7}}
+\newlabel{RemovedElementsCode}{{6.1.7}{110}{\textcolor {Chapter }{RemovedElementsCode}\relax }{subsection.6.1.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.8}\leavevmode {\color  {Chapter }AddedElementsCode}}{111}{subsection.6.1.8}}
+\newlabel{AddedElementsCode}{{6.1.8}{111}{\textcolor {Chapter }{AddedElementsCode}\relax }{subsection.6.1.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.9}\leavevmode {\color  {Chapter }ShortenedCode}}{111}{subsection.6.1.9}}
+\newlabel{ShortenedCode}{{6.1.9}{111}{\textcolor {Chapter }{ShortenedCode}\relax }{subsection.6.1.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.10}\leavevmode {\color  {Chapter }LengthenedCode}}{112}{subsection.6.1.10}}
+\newlabel{LengthenedCode}{{6.1.10}{112}{\textcolor {Chapter }{LengthenedCode}\relax }{subsection.6.1.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.11}\leavevmode {\color  {Chapter }SubCode}}{113}{subsection.6.1.11}}
+\newlabel{SubCode}{{6.1.11}{113}{\textcolor {Chapter }{SubCode}\relax }{subsection.6.1.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.12}\leavevmode {\color  {Chapter }ResidueCode}}{113}{subsection.6.1.12}}
+\newlabel{ResidueCode}{{6.1.12}{113}{\textcolor {Chapter }{ResidueCode}\relax }{subsection.6.1.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.13}\leavevmode {\color  {Chapter }ConstructionBCode}}{113}{subsection.6.1.13}}
+\newlabel{ConstructionBCode}{{6.1.13}{113}{\textcolor {Chapter }{ConstructionBCode}\relax }{subsection.6.1.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.14}\leavevmode {\color  {Chapter }DualCode}}{114}{subsection.6.1.14}}
+\newlabel{DualCode}{{6.1.14}{114}{\textcolor {Chapter }{DualCode}\relax }{subsection.6.1.14}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.15}\leavevmode {\color  {Chapter }ConversionFieldCode}}{115}{subsection.6.1.15}}
+\newlabel{ConversionFieldCode}{{6.1.15}{115}{\textcolor {Chapter }{ConversionFieldCode}\relax }{subsection.6.1.15}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.16}\leavevmode {\color  {Chapter }TraceCode}}{115}{subsection.6.1.16}}
+\newlabel{TraceCode}{{6.1.16}{115}{\textcolor {Chapter }{TraceCode}\relax }{subsection.6.1.16}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.17}\leavevmode {\color  {Chapter }CosetCode}}{115}{subsection.6.1.17}}
+\newlabel{CosetCode}{{6.1.17}{115}{\textcolor {Chapter }{CosetCode}\relax }{subsection.6.1.17}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.18}\leavevmode {\color  {Chapter }ConstantWeightSubcode}}{116}{subsection.6.1.18}}
+\newlabel{ConstantWeightSubcode}{{6.1.18}{116}{\textcolor {Chapter }{ConstantWeightSubcode}\relax }{subsection.6.1.18}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.19}\leavevmode {\color  {Chapter }StandardFormCode}}{116}{subsection.6.1.19}}
+\newlabel{StandardFormCode}{{6.1.19}{116}{\textcolor {Chapter }{StandardFormCode}\relax }{subsection.6.1.19}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.20}\leavevmode {\color  {Chapter }PiecewiseConstantCode}}{117}{subsection.6.1.20}}
+\newlabel{PiecewiseConstantCode}{{6.1.20}{117}{\textcolor {Chapter }{PiecewiseConstantCode}\relax }{subsection.6.1.20}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {6.2}\leavevmode {\color  {Chapter } Functions that Generate a New Code from Two or More Given Codes }}{118}{section.6.2}}
+\newlabel{Functions that Generate a New Code from Two or More Given Codes}{{6.2}{118}{\textcolor {Chapter }{ Functions that Generate a New Code from Two or More Given Codes }\relax }{section.6.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}\leavevmode {\color  {Chapter }DirectSumCode}}{118}{subsection.6.2.1}}
+\newlabel{DirectSumCode}{{6.2.1}{118}{\textcolor {Chapter }{DirectSumCode}\relax }{subsection.6.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}\leavevmode {\color  {Chapter }UUVCode}}{118}{subsection.6.2.2}}
+\newlabel{UUVCode}{{6.2.2}{118}{\textcolor {Chapter }{UUVCode}\relax }{subsection.6.2.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}\leavevmode {\color  {Chapter }DirectProductCode}}{118}{subsection.6.2.3}}
+\newlabel{DirectProductCode}{{6.2.3}{118}{\textcolor {Chapter }{DirectProductCode}\relax }{subsection.6.2.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.4}\leavevmode {\color  {Chapter }IntersectionCode}}{119}{subsection.6.2.4}}
+\newlabel{IntersectionCode}{{6.2.4}{119}{\textcolor {Chapter }{IntersectionCode}\relax }{subsection.6.2.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.5}\leavevmode {\color  {Chapter }UnionCode}}{119}{subsection.6.2.5}}
+\newlabel{UnionCode}{{6.2.5}{119}{\textcolor {Chapter }{UnionCode}\relax }{subsection.6.2.5}{}}
+\citation{GS85}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.6}\leavevmode {\color  {Chapter }ExtendedDirectSumCode}}{120}{subsection.6.2.6}}
+\newlabel{ExtendedDirectSumCode}{{6.2.6}{120}{\textcolor {Chapter }{ExtendedDirectSumCode}\relax }{subsection.6.2.6}{}}
+\@writefile{brf}{\backcite{GS85}{{120}{6.2.6}{subsection.6.2.6}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.7}\leavevmode {\color  {Chapter }AmalgamatedDirectSumCode}}{120}{subsection.6.2.7}}
+\newlabel{AmalgamatedDirectSumCode}{{6.2.7}{120}{\textcolor {Chapter }{AmalgamatedDirectSumCode}\relax }{subsection.6.2.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.8}\leavevmode {\color  {Chapter }BlockwiseDirectSumCode}}{121}{subsection.6.2.8}}
+\newlabel{BlockwiseDirectSumCode}{{6.2.8}{121}{\textcolor {Chapter }{BlockwiseDirectSumCode}\relax }{subsection.6.2.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.9}\leavevmode {\color  {Chapter }ConstructionXCode}}{121}{subsection.6.2.9}}
+\newlabel{ConstructionXCode}{{6.2.9}{121}{\textcolor {Chapter }{ConstructionXCode}\relax }{subsection.6.2.9}{}}
+\citation{Sloane72}
+\@writefile{brf}{\backcite{Sloane72}{{122}{6.2.9}{subsection.6.2.9}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.10}\leavevmode {\color  {Chapter }ConstructionXXCode}}{122}{subsection.6.2.10}}
+\newlabel{ConstructionXXCode}{{6.2.10}{122}{\textcolor {Chapter }{ConstructionXXCode}\relax }{subsection.6.2.10}{}}
+\citation{Alltop84}
+\citation{Brouwer98}
+\@writefile{brf}{\backcite{Alltop84}{{123}{6.2.10}{subsection.6.2.10}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.11}\leavevmode {\color  {Chapter }BZCode}}{123}{subsection.6.2.11}}
+\newlabel{BZCode}{{6.2.11}{123}{\textcolor {Chapter }{BZCode}\relax }{subsection.6.2.11}{}}
+\@writefile{brf}{\backcite{Brouwer98}{{123}{6.2.11}{subsection.6.2.11}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.12}\leavevmode {\color  {Chapter }BZCodeNC}}{124}{subsection.6.2.12}}
+\newlabel{BZCodeNC}{{6.2.12}{124}{\textcolor {Chapter }{BZCodeNC}\relax }{subsection.6.2.12}{}}
+\citation{Br}
+\@writefile{toc}{\contentsline {chapter}{\numberline {7}\leavevmode {\color  {Chapter } Bounds on codes, special matrices and miscellaneous functions }}{125}{chapter.7}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {7.1}\leavevmode {\color  {Chapter } Distance bounds on codes }}{125}{section.7.1}}
+\newlabel{Distance bounds on codes}{{7.1}{125}{\textcolor {Chapter }{ Distance bounds on codes }\relax }{section.7.1}{}}
+\@writefile{brf}{\backcite{Br}{{125}{7.1}{section.7.1}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.1}\leavevmode {\color  {Chapter }UpperBoundSingleton}}{126}{subsection.7.1.1}}
+\newlabel{UpperBoundSingleton}{{7.1.1}{126}{\textcolor {Chapter }{UpperBoundSingleton}\relax }{subsection.7.1.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.2}\leavevmode {\color  {Chapter }UpperBoundHamming}}{126}{subsection.7.1.2}}
+\newlabel{UpperBoundHamming}{{7.1.2}{126}{\textcolor {Chapter }{UpperBoundHamming}\relax }{subsection.7.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.3}\leavevmode {\color  {Chapter }UpperBoundJohnson}}{126}{subsection.7.1.3}}
+\newlabel{UpperBoundJohnson}{{7.1.3}{126}{\textcolor {Chapter }{UpperBoundJohnson}\relax }{subsection.7.1.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.4}\leavevmode {\color  {Chapter }UpperBoundPlotkin}}{127}{subsection.7.1.4}}
+\newlabel{UpperBoundPlotkin}{{7.1.4}{127}{\textcolor {Chapter }{UpperBoundPlotkin}\relax }{subsection.7.1.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.5}\leavevmode {\color  {Chapter }UpperBoundElias}}{127}{subsection.7.1.5}}
+\newlabel{UpperBoundElias}{{7.1.5}{127}{\textcolor {Chapter }{UpperBoundElias}\relax }{subsection.7.1.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.6}\leavevmode {\color  {Chapter }UpperBoundGriesmer}}{128}{subsection.7.1.6}}
+\newlabel{UpperBoundGriesmer}{{7.1.6}{128}{\textcolor {Chapter }{UpperBoundGriesmer}\relax }{subsection.7.1.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.7}\leavevmode {\color  {Chapter }IsGriesmerCode}}{128}{subsection.7.1.7}}
+\newlabel{IsGriesmerCode}{{7.1.7}{128}{\textcolor {Chapter }{IsGriesmerCode}\relax }{subsection.7.1.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.8}\leavevmode {\color  {Chapter }UpperBound}}{128}{subsection.7.1.8}}
+\newlabel{UpperBound}{{7.1.8}{128}{\textcolor {Chapter }{UpperBound}\relax }{subsection.7.1.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.9}\leavevmode {\color  {Chapter }LowerBoundMinimumDistance}}{129}{subsection.7.1.9}}
+\newlabel{LowerBoundMinimumDistance}{{7.1.9}{129}{\textcolor {Chapter }{LowerBoundMinimumDistance}\relax }{subsection.7.1.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.10}\leavevmode {\color  {Chapter }LowerBoundGilbertVarshamov}}{129}{subsection.7.1.10}}
+\newlabel{LowerBoundGilbertVarshamov}{{7.1.10}{129}{\textcolor {Chapter }{LowerBoundGilbertVarshamov}\relax }{subsection.7.1.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.11}\leavevmode {\color  {Chapter }LowerBoundSpherePacking}}{129}{subsection.7.1.11}}
+\newlabel{LowerBoundSpherePacking}{{7.1.11}{129}{\textcolor {Chapter }{LowerBoundSpherePacking}\relax }{subsection.7.1.11}{}}
+\citation{Br}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.12}\leavevmode {\color  {Chapter }UpperBoundMinimumDistance}}{130}{subsection.7.1.12}}
+\newlabel{UpperBoundMinimumDistance}{{7.1.12}{130}{\textcolor {Chapter }{UpperBoundMinimumDistance}\relax }{subsection.7.1.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.13}\leavevmode {\color  {Chapter }BoundsMinimumDistance}}{130}{subsection.7.1.13}}
+\newlabel{BoundsMinimumDistance}{{7.1.13}{130}{\textcolor {Chapter }{BoundsMinimumDistance}\relax }{subsection.7.1.13}{}}
+\@writefile{brf}{\backcite{Br}{{130}{7.1.13}{subsection.7.1.13}}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.2}\leavevmode {\color  {Chapter } Covering radius bounds on codes }}{131}{section.7.2}}
+\newlabel{Covering radius bounds on codes}{{7.2}{131}{\textcolor {Chapter }{ Covering radius bounds on codes }\relax }{section.7.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.1}\leavevmode {\color  {Chapter }BoundsCoveringRadius}}{131}{subsection.7.2.1}}
+\newlabel{BoundsCoveringRadius}{{7.2.1}{131}{\textcolor {Chapter }{BoundsCoveringRadius}\relax }{subsection.7.2.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.2}\leavevmode {\color  {Chapter }IncreaseCoveringRadiusLowerBound}}{131}{subsection.7.2.2}}
+\newlabel{IncreaseCoveringRadiusLowerBound}{{7.2.2}{131}{\textcolor {Chapter }{IncreaseCoveringRadiusLowerBound}\relax }{subsection.7.2.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.3}\leavevmode {\color  {Chapter }ExhaustiveSearchCoveringRadius}}{132}{subsection.7.2.3}}
+\newlabel{ExhaustiveSearchCoveringRadius}{{7.2.3}{132}{\textcolor {Chapter }{ExhaustiveSearchCoveringRadius}\relax }{subsection.7.2.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.4}\leavevmode {\color  {Chapter }GeneralLowerBoundCoveringRadius}}{133}{subsection.7.2.4}}
+\newlabel{GeneralLowerBoundCoveringRadius}{{7.2.4}{133}{\textcolor {Chapter }{GeneralLowerBoundCoveringRadius}\relax }{subsection.7.2.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.5}\leavevmode {\color  {Chapter }GeneralUpperBoundCoveringRadius}}{133}{subsection.7.2.5}}
+\newlabel{GeneralUpperBoundCoveringRadius}{{7.2.5}{133}{\textcolor {Chapter }{GeneralUpperBoundCoveringRadius}\relax }{subsection.7.2.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.6}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusSphereCovering}}{134}{subsection.7.2.6}}
+\newlabel{LowerBoundCoveringRadiusSphereCovering}{{7.2.6}{134}{\textcolor {Chapter }{LowerBoundCoveringRadiusSphereCovering}\relax }{subsection.7.2.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.7}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusVanWee1}}{134}{subsection.7.2.7}}
+\newlabel{LowerBoundCoveringRadiusVanWee1}{{7.2.7}{134}{\textcolor {Chapter }{LowerBoundCoveringRadiusVanWee1}\relax }{subsection.7.2.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.8}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusVanWee2}}{135}{subsection.7.2.8}}
+\newlabel{LowerBoundCoveringRadiusVanWee2}{{7.2.8}{135}{\textcolor {Chapter }{LowerBoundCoveringRadiusVanWee2}\relax }{subsection.7.2.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.9}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusCountingExcess}}{135}{subsection.7.2.9}}
+\newlabel{LowerBoundCoveringRadiusCountingExcess}{{7.2.9}{135}{\textcolor {Chapter }{LowerBoundCoveringRadiusCountingExcess}\relax }{subsection.7.2.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.10}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusEmbedded1}}{136}{subsection.7.2.10}}
+\newlabel{LowerBoundCoveringRadiusEmbedded1}{{7.2.10}{136}{\textcolor {Chapter }{LowerBoundCoveringRadiusEmbedded1}\relax }{subsection.7.2.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.11}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusEmbedded2}}{136}{subsection.7.2.11}}
+\newlabel{LowerBoundCoveringRadiusEmbedded2}{{7.2.11}{136}{\textcolor {Chapter }{LowerBoundCoveringRadiusEmbedded2}\relax }{subsection.7.2.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.12}\leavevmode {\color  {Chapter }LowerBoundCoveringRadiusInduction}}{137}{subsection.7.2.12}}
+\newlabel{LowerBoundCoveringRadiusInduction}{{7.2.12}{137}{\textcolor {Chapter }{LowerBoundCoveringRadiusInduction}\relax }{subsection.7.2.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.13}\leavevmode {\color  {Chapter }UpperBoundCoveringRadiusRedundancy}}{137}{subsection.7.2.13}}
+\newlabel{UpperBoundCoveringRadiusRedundancy}{{7.2.13}{137}{\textcolor {Chapter }{UpperBoundCoveringRadiusRedundancy}\relax }{subsection.7.2.13}{}}
+\citation{HP03}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.14}\leavevmode {\color  {Chapter }UpperBoundCoveringRadiusDelsarte}}{138}{subsection.7.2.14}}
+\newlabel{UpperBoundCoveringRadiusDelsarte}{{7.2.14}{138}{\textcolor {Chapter }{UpperBoundCoveringRadiusDelsarte}\relax }{subsection.7.2.14}{}}
+\@writefile{brf}{\backcite{HP03}{{138}{7.2.14}{subsection.7.2.14}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.15}\leavevmode {\color  {Chapter }UpperBoundCoveringRadiusStrength}}{138}{subsection.7.2.15}}
+\newlabel{UpperBoundCoveringRadiusStrength}{{7.2.15}{138}{\textcolor {Chapter }{UpperBoundCoveringRadiusStrength}\relax }{subsection.7.2.15}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.16}\leavevmode {\color  {Chapter }UpperBoundCoveringRadiusGriesmerLike}}{138}{subsection.7.2.16}}
+\newlabel{UpperBoundCoveringRadiusGriesmerLike}{{7.2.16}{138}{\textcolor {Chapter }{UpperBoundCoveringRadiusGriesmerLike}\relax }{subsection.7.2.16}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2.17}\leavevmode {\color  {Chapter }UpperBoundCoveringRadiusCyclicCode}}{139}{subsection.7.2.17}}
+\newlabel{UpperBoundCoveringRadiusCyclicCode}{{7.2.17}{139}{\textcolor {Chapter }{UpperBoundCoveringRadiusCyclicCode}\relax }{subsection.7.2.17}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.3}\leavevmode {\color  {Chapter } Special matrices in \textsf  {GUAVA} }}{139}{section.7.3}}
+\newlabel{Special matrices in GUAVA}{{7.3}{139}{\textcolor {Chapter }{ Special matrices in \textsf {GUAVA} }\relax }{section.7.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.1}\leavevmode {\color  {Chapter }KrawtchoukMat}}{140}{subsection.7.3.1}}
+\newlabel{KrawtchoukMat}{{7.3.1}{140}{\textcolor {Chapter }{KrawtchoukMat}\relax }{subsection.7.3.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.2}\leavevmode {\color  {Chapter }GrayMat}}{140}{subsection.7.3.2}}
+\newlabel{GrayMat}{{7.3.2}{140}{\textcolor {Chapter }{GrayMat}\relax }{subsection.7.3.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.3}\leavevmode {\color  {Chapter }SylvesterMat}}{140}{subsection.7.3.3}}
+\newlabel{SylvesterMat}{{7.3.3}{140}{\textcolor {Chapter }{SylvesterMat}\relax }{subsection.7.3.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.4}\leavevmode {\color  {Chapter }HadamardMat}}{141}{subsection.7.3.4}}
+\newlabel{HadamardMat}{{7.3.4}{141}{\textcolor {Chapter }{HadamardMat}\relax }{subsection.7.3.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.5}\leavevmode {\color  {Chapter }VandermondeMat}}{141}{subsection.7.3.5}}
+\newlabel{VandermondeMat}{{7.3.5}{141}{\textcolor {Chapter }{VandermondeMat}\relax }{subsection.7.3.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.6}\leavevmode {\color  {Chapter }PutStandardForm}}{142}{subsection.7.3.6}}
+\newlabel{PutStandardForm}{{7.3.6}{142}{\textcolor {Chapter }{PutStandardForm}\relax }{subsection.7.3.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.7}\leavevmode {\color  {Chapter }IsInStandardForm}}{143}{subsection.7.3.7}}
+\newlabel{IsInStandardForm}{{7.3.7}{143}{\textcolor {Chapter }{IsInStandardForm}\relax }{subsection.7.3.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.8}\leavevmode {\color  {Chapter }PermutedCols}}{143}{subsection.7.3.8}}
+\newlabel{PermutedCols}{{7.3.8}{143}{\textcolor {Chapter }{PermutedCols}\relax }{subsection.7.3.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.9}\leavevmode {\color  {Chapter }VerticalConversionFieldMat}}{143}{subsection.7.3.9}}
+\newlabel{VerticalConversionFieldMat}{{7.3.9}{143}{\textcolor {Chapter }{VerticalConversionFieldMat}\relax }{subsection.7.3.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.10}\leavevmode {\color  {Chapter }HorizontalConversionFieldMat}}{144}{subsection.7.3.10}}
+\newlabel{HorizontalConversionFieldMat}{{7.3.10}{144}{\textcolor {Chapter }{HorizontalConversionFieldMat}\relax }{subsection.7.3.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.11}\leavevmode {\color  {Chapter }MOLS}}{144}{subsection.7.3.11}}
+\newlabel{MOLS}{{7.3.11}{144}{\textcolor {Chapter }{MOLS}\relax }{subsection.7.3.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.12}\leavevmode {\color  {Chapter }IsLatinSquare}}{145}{subsection.7.3.12}}
+\newlabel{IsLatinSquare}{{7.3.12}{145}{\textcolor {Chapter }{IsLatinSquare}\relax }{subsection.7.3.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.13}\leavevmode {\color  {Chapter }AreMOLS}}{145}{subsection.7.3.13}}
+\newlabel{AreMOLS}{{7.3.13}{145}{\textcolor {Chapter }{AreMOLS}\relax }{subsection.7.3.13}{}}
+\citation{GS85}
+\@writefile{toc}{\contentsline {section}{\numberline {7.4}\leavevmode {\color  {Chapter } Some functions related to the norm of a code }}{146}{section.7.4}}
+\newlabel{Some functions related to the norm of a code}{{7.4}{146}{\textcolor {Chapter }{ Some functions related to the norm of a code }\relax }{section.7.4}{}}
+\@writefile{brf}{\backcite{GS85}{{146}{7.4}{section.7.4}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.1}\leavevmode {\color  {Chapter }CoordinateNorm}}{146}{subsection.7.4.1}}
+\newlabel{CoordinateNorm}{{7.4.1}{146}{\textcolor {Chapter }{CoordinateNorm}\relax }{subsection.7.4.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.2}\leavevmode {\color  {Chapter }CodeNorm}}{146}{subsection.7.4.2}}
+\newlabel{CodeNorm}{{7.4.2}{146}{\textcolor {Chapter }{CodeNorm}\relax }{subsection.7.4.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.3}\leavevmode {\color  {Chapter }IsCoordinateAcceptable}}{146}{subsection.7.4.3}}
+\newlabel{IsCoordinateAcceptable}{{7.4.3}{146}{\textcolor {Chapter }{IsCoordinateAcceptable}\relax }{subsection.7.4.3}{}}
+\citation{GS85}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.4}\leavevmode {\color  {Chapter }GeneralizedCodeNorm}}{147}{subsection.7.4.4}}
+\newlabel{GeneralizedCodeNorm}{{7.4.4}{147}{\textcolor {Chapter }{GeneralizedCodeNorm}\relax }{subsection.7.4.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.5}\leavevmode {\color  {Chapter }IsNormalCode}}{147}{subsection.7.4.5}}
+\newlabel{IsNormalCode}{{7.4.5}{147}{\textcolor {Chapter }{IsNormalCode}\relax }{subsection.7.4.5}{}}
+\@writefile{brf}{\backcite{GS85}{{147}{7.4.5}{subsection.7.4.5}}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.5}\leavevmode {\color  {Chapter } Miscellaneous functions }}{147}{section.7.5}}
+\newlabel{Miscellaneous functions}{{7.5}{147}{\textcolor {Chapter }{ Miscellaneous functions }\relax }{section.7.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.1}\leavevmode {\color  {Chapter }CodeWeightEnumerator}}{147}{subsection.7.5.1}}
+\newlabel{CodeWeightEnumerator}{{7.5.1}{147}{\textcolor {Chapter }{CodeWeightEnumerator}\relax }{subsection.7.5.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.2}\leavevmode {\color  {Chapter }CodeDistanceEnumerator}}{148}{subsection.7.5.2}}
+\newlabel{CodeDistanceEnumerator}{{7.5.2}{148}{\textcolor {Chapter }{CodeDistanceEnumerator}\relax }{subsection.7.5.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.3}\leavevmode {\color  {Chapter }CodeMacWilliamsTransform}}{148}{subsection.7.5.3}}
+\newlabel{CodeMacWilliamsTransform}{{7.5.3}{148}{\textcolor {Chapter }{CodeMacWilliamsTransform}\relax }{subsection.7.5.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.4}\leavevmode {\color  {Chapter }CodeDensity}}{148}{subsection.7.5.4}}
+\newlabel{CodeDensity}{{7.5.4}{148}{\textcolor {Chapter }{CodeDensity}\relax }{subsection.7.5.4}{}}
+\citation{MS83}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.5}\leavevmode {\color  {Chapter }SphereContent}}{149}{subsection.7.5.5}}
+\newlabel{SphereContent}{{7.5.5}{149}{\textcolor {Chapter }{SphereContent}\relax }{subsection.7.5.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.6}\leavevmode {\color  {Chapter }Krawtchouk}}{149}{subsection.7.5.6}}
+\newlabel{Krawtchouk}{{7.5.6}{149}{\textcolor {Chapter }{Krawtchouk}\relax }{subsection.7.5.6}{}}
+\@writefile{brf}{\backcite{MS83}{{149}{7.5.6}{subsection.7.5.6}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.7}\leavevmode {\color  {Chapter }PrimitiveUnityRoot}}{149}{subsection.7.5.7}}
+\newlabel{PrimitiveUnityRoot}{{7.5.7}{149}{\textcolor {Chapter }{PrimitiveUnityRoot}\relax }{subsection.7.5.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.8}\leavevmode {\color  {Chapter }PrimitivePolynomialsNr}}{150}{subsection.7.5.8}}
+\newlabel{PrimitivePolynomialsNr}{{7.5.8}{150}{\textcolor {Chapter }{PrimitivePolynomialsNr}\relax }{subsection.7.5.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.9}\leavevmode {\color  {Chapter }IrreduciblePolynomialsNr}}{150}{subsection.7.5.9}}
+\newlabel{IrreduciblePolynomialsNr}{{7.5.9}{150}{\textcolor {Chapter }{IrreduciblePolynomialsNr}\relax }{subsection.7.5.9}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.10}\leavevmode {\color  {Chapter }MatrixRepresentationOfElement}}{150}{subsection.7.5.10}}
+\newlabel{MatrixRepresentationOfElement}{{7.5.10}{150}{\textcolor {Chapter }{MatrixRepresentationOfElement}\relax }{subsection.7.5.10}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.11}\leavevmode {\color  {Chapter }ReciprocalPolynomial}}{151}{subsection.7.5.11}}
+\newlabel{ReciprocalPolynomial}{{7.5.11}{151}{\textcolor {Chapter }{ReciprocalPolynomial}\relax }{subsection.7.5.11}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.12}\leavevmode {\color  {Chapter }CyclotomicCosets}}{151}{subsection.7.5.12}}
+\newlabel{CyclotomicCosets}{{7.5.12}{151}{\textcolor {Chapter }{CyclotomicCosets}\relax }{subsection.7.5.12}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.13}\leavevmode {\color  {Chapter }WeightHistogram}}{152}{subsection.7.5.13}}
+\newlabel{WeightHistogram}{{7.5.13}{152}{\textcolor {Chapter }{WeightHistogram}\relax }{subsection.7.5.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.14}\leavevmode {\color  {Chapter }MultiplicityInList}}{152}{subsection.7.5.14}}
+\newlabel{MultiplicityInList}{{7.5.14}{152}{\textcolor {Chapter }{MultiplicityInList}\relax }{subsection.7.5.14}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.15}\leavevmode {\color  {Chapter }MostCommonInList}}{152}{subsection.7.5.15}}
+\newlabel{MostCommonInList}{{7.5.15}{152}{\textcolor {Chapter }{MostCommonInList}\relax }{subsection.7.5.15}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.16}\leavevmode {\color  {Chapter }RotateList}}{153}{subsection.7.5.16}}
+\newlabel{RotateList}{{7.5.16}{153}{\textcolor {Chapter }{RotateList}\relax }{subsection.7.5.16}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5.17}\leavevmode {\color  {Chapter }CirculantMatrix}}{153}{subsection.7.5.17}}
+\newlabel{CirculantMatrix}{{7.5.17}{153}{\textcolor {Chapter }{CirculantMatrix}\relax }{subsection.7.5.17}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.6}\leavevmode {\color  {Chapter } Miscellaneous polynomial functions }}{153}{section.7.6}}
+\newlabel{Miscellaneous polynomial functions}{{7.6}{153}{\textcolor {Chapter }{ Miscellaneous polynomial functions }\relax }{section.7.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.1}\leavevmode {\color  {Chapter }MatrixTransformationOnMultivariatePolynomial }}{153}{subsection.7.6.1}}
+\newlabel{MatrixTransformationOnMultivariatePolynomial }{{7.6.1}{153}{\textcolor {Chapter }{MatrixTransformationOnMultivariatePolynomial }\relax }{subsection.7.6.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.2}\leavevmode {\color  {Chapter }DegreeMultivariatePolynomial}}{153}{subsection.7.6.2}}
+\newlabel{DegreeMultivariatePolynomial}{{7.6.2}{153}{\textcolor {Chapter }{DegreeMultivariatePolynomial}\relax }{subsection.7.6.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.3}\leavevmode {\color  {Chapter }DegreesMultivariatePolynomial}}{154}{subsection.7.6.3}}
+\newlabel{DegreesMultivariatePolynomial}{{7.6.3}{154}{\textcolor {Chapter }{DegreesMultivariatePolynomial}\relax }{subsection.7.6.3}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.4}\leavevmode {\color  {Chapter }CoefficientMultivariatePolynomial}}{154}{subsection.7.6.4}}
+\newlabel{CoefficientMultivariatePolynomial}{{7.6.4}{154}{\textcolor {Chapter }{CoefficientMultivariatePolynomial}\relax }{subsection.7.6.4}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.5}\leavevmode {\color  {Chapter }SolveLinearSystem}}{155}{subsection.7.6.5}}
+\newlabel{SolveLinearSystem}{{7.6.5}{155}{\textcolor {Chapter }{SolveLinearSystem}\relax }{subsection.7.6.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.6}\leavevmode {\color  {Chapter }GuavaVersion}}{155}{subsection.7.6.6}}
+\newlabel{GuavaVersion}{{7.6.6}{155}{\textcolor {Chapter }{GuavaVersion}\relax }{subsection.7.6.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.7}\leavevmode {\color  {Chapter }ZechLog}}{155}{subsection.7.6.7}}
+\newlabel{ZechLog}{{7.6.7}{155}{\textcolor {Chapter }{ZechLog}\relax }{subsection.7.6.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.8}\leavevmode {\color  {Chapter }CoefficientToPolynomial}}{156}{subsection.7.6.8}}
+\newlabel{CoefficientToPolynomial}{{7.6.8}{156}{\textcolor {Chapter }{CoefficientToPolynomial}\relax }{subsection.7.6.8}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.9}\leavevmode {\color  {Chapter }DegreesMonomialTerm}}{156}{subsection.7.6.9}}
+\newlabel{DegreesMonomialTerm}{{7.6.9}{156}{\textcolor {Chapter }{DegreesMonomialTerm}\relax }{subsection.7.6.9}{}}
+\citation{GG03}
+\bibstyle{alpha}
+\bibdata{guava}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6.10}\leavevmode {\color  {Chapter }DivisorsMultivariatePolynomial}}{157}{subsection.7.6.10}}
+\newlabel{DivisorsMultivariatePolynomial}{{7.6.10}{157}{\textcolor {Chapter }{DivisorsMultivariatePolynomial}\relax }{subsection.7.6.10}{}}
+\@writefile{brf}{\backcite{GG03}{{157}{7.6.10}{subsection.7.6.10}}}
+\bibcite{Alltop84}{All84}
+\bibcite{BM03}{BMed}
+\bibcite{Brouwer98}{Bro98}
+\bibcite{Br}{Bro06}
+\bibcite{Chen69}{Che69}
+\bibcite{Gao03}{Gao03}
+\bibcite{GDT91}{GDT91}
+\bibcite{GS85}{GS85}
+\bibcite{Han99}{Han99}
+\bibcite{He72}{Hel72}
+\bibcite{HHKK07}{HHKK07}
+\bibcite{HP03}{HP03}
+\bibcite{JH04}{JH04}
+\bibcite{Jo04}{Joy04}
+\bibcite{Leon82}{Leo82}
+\bibcite{Leon88}{Leo88}
+\bibcite{Leon91}{Leo91}
+\bibcite{MS83}{MS83}
+\bibcite{Sloane72}{SRC72}
+\bibcite{St93}{Sti93}
+\bibcite{GG03}{vzGG03}
+\bibcite{Zimmermann96}{Zim96}
diff --git a/doc/guava.bbl b/doc/guava.bbl
new file mode 100644
index 0000000..8f8a57f
--- /dev/null
+++ b/doc/guava.bbl
@@ -0,0 +1,124 @@
+\begin{thebibliography}{HHKK07}
+
+\bibitem[All84]{Alltop84}
+W.~O. Alltop.
+\newblock A method for extending binary linear codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 30:871--872, 1984.
+
+\bibitem[BMed]{BM03}
+L.~Bazzi and S.~K. Mitter.
+\newblock Some constructions of codes from group actions.
+\newblock {\em preprint}, March 2003 (submitted).
+
+\bibitem[Bro98]{Brouwer98}
+A.~E. Brouwer.
+\newblock Bounds on the size of linear codes.
+\newblock In V.~S. Pless and W.~C. Huffman, editors, {\em Handbook of Coding
+  Theory}, pages 295--461. {Elsevier, North Holland}, 1998.
+
+\bibitem[Bro06]{Br}
+A.~E. Brouwer.
+\newblock {\em Bounds on the minimum distance of linear codes}.
+\newblock On the internet at the URL:
+  http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html, 1997-2006.
+
+\bibitem[Che69]{Chen69}
+C.~L. Chen.
+\newblock {\em Some Results on Algebraically Structured Error-Correcting
+  Codes}.
+\newblock Ph.{D} dissertation, {University of Hawaii}, USA, 1969.
+
+\bibitem[Gao03]{Gao03}
+S.~Gao.
+\newblock A new algorithm for decoding reed-solomon codes.
+\newblock {\em Communications, Information and Network Security (V. Bhargava,
+  H. V. Poor, V. Tarokh and S. Yoon, Eds.)}, pages pp. 55--68, 2003.
+
+\bibitem[GDT91]{GDT91}
+E.~Gabidulin, A.~Davydov, and L.~Tombak.
+\newblock Linear codes with covering radius 2 and other new covering codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 37(1):219--224, 1991.
+
+\bibitem[GS85]{GS85}
+R.~Graham and N.~Sloane.
+\newblock On the covering radius of codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 31(1):385--401, 1985.
+
+\bibitem[Han99]{Han99}
+J.~P. Hansen.
+\newblock Toric surfaces and error-correcting codes.
+\newblock {\em Coding theory, cryptography, and related areas (ed., Bachmann et
+  al) Springer-Verlag}, 1999.
+
+\bibitem[Hel72]{He72}
+Hermann~J. Helgert.
+\newblock Srivastava codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 18:292--297, March 1972.
+
+\bibitem[HHKK07]{HHKK07}
+M.~Harada, W.~Holzmann, H.~Kharaghani, and M.~Khorvash.
+\newblock Extremal ternary self-dual codes constructed from negacirculant
+  matrices.
+\newblock {\em Graphs and Combinatorics}, 23(4):401--417, 2007.
+
+\bibitem[HP03]{HP03}
+W.~C. Huffman and V.~Pless.
+\newblock {\em Fundamentals of error-correcting codes}.
+\newblock Cambridge Univ. Press, 2003.
+
+\bibitem[JH04]{JH04}
+J.~Justesen and T.~Hoholdt.
+\newblock {\em A course in error-correcting codes}.
+\newblock European Mathematical Society, 2004.
+
+\bibitem[Joy04]{Jo04}
+D.~Joyner.
+\newblock Toric codes over finite fields.
+\newblock {\em Applicable Algebra in Engineering, Communication and Computing},
+  15:63--79, 2004.
+
+\bibitem[Leo82]{Leon82}
+Jeffrey~S. Leon.
+\newblock Computing automorphism groups of error-correcting codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 28:496--511, May 1982.
+
+\bibitem[Leo88]{Leon88}
+Jeffrey~S. Leon.
+\newblock A probabilistic algorithm for computing minimum weights of large
+  error-correcting codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 34:1354--1359, September 1988.
+
+\bibitem[Leo91]{Leon91}
+Jeffrey~S. Leon.
+\newblock Permutation group algorithms based on partitions, {I}: theory and
+  algorithms.
+\newblock {\em J. Symbolic Comput.}, 12:533--583, 1991.
+
+\bibitem[MS83]{MS83}
+F.~J. MacWilliams and N.~J.~A. Sloane.
+\newblock {\em The theory of error-correcting codes}.
+\newblock Amsterdam: North-Holland, 1983.
+
+\bibitem[SRC72]{Sloane72}
+N.~Sloane, S.~Reddy, and C.~Chen.
+\newblock New binary codes.
+\newblock {\em IEEE Trans. Inform. Theory}, 18:503--510, Jul 1972.
+
+\bibitem[Sti93]{St93}
+H.~Stichtenoth.
+\newblock {\em Algebraic function fields and codes}.
+\newblock Springer-Verlag, 1993.
+
+\bibitem[vzGG03]{GG03}
+J.~von~zur Gathen and J.~Gerhard.
+\newblock {\em Modern computer algebra}.
+\newblock Cambridge Univ. Press, 2003.
+
+\bibitem[Zim96]{Zimmermann96}
+K.-H. Zimmermann.
+\newblock Integral hecke modules, integral generalized {Reed-Muller} codes, and
+  linear codes.
+\newblock Technical Report 3--96, Technische Universit\"at Hamburg-Harburg,
+  Hamburg, Germany, 1996.
+
+\end{thebibliography}
diff --git a/doc/guava.bib b/doc/guava.bib
new file mode 100644
index 0000000..65772f1
--- /dev/null
+++ b/doc/guava.bib
@@ -0,0 +1,205 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%A  guava.bib               GUAVA documentation                Reinald Baart
+%A                                                       & Jasper Cramwinckel
+%A                                                          & Erik Roijackers
+%A                                                             & David Joyner
+%
+%H  $Id: manual.bib,v 1.2 2003/02/12 03:40:23 gap Exp $
+%
+%Y  Copyright (C)  1995,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+%Y  Copyright (C)  2005,  David Joyner
+%
+
+ at article{BM03,
+    AUTHOR = {L. Bazzi and S. K. Mitter}, 
+     TITLE = "Some constructions of codes from group actions",
+   JOURNAL = {preprint},
+      YEAR = {March 2003 (submitted)},
+}
+
+ at article{GDT91,
+    AUTHOR = {E. Gabidulin and A. Davydov and L. Tombak},
+     TITLE = {Linear codes with covering radius 2 and other new covering
+              codes},
+   JOURNAL = {IEEE Trans. Inform. Theory},
+    VOLUME = {37},
+      YEAR = {1991},
+    NUMBER = {1},
+     PAGES = {219--224},
+}
+
+ at article{Gao03,
+        author  = "S. Gao",
+        title   = "A new algorithm for decoding Reed-Solomon codes",
+        journal = {Communications, Information and Network Security 
+(V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.)}, 
+publisher={Kluwer Academic Publishers}, 
+pages={pp. 55-68},
+        year    = 2003,
+}
+
+ at book{GG03,
+    AUTHOR = {J. von zur Gathen and J. Gerhard,},
+     TITLE = {Modern computer algebra},
+      YEAR = {2003},
+ publisher = {Cambridge Univ. Press},
+}
+
+ at article{GS85,
+    AUTHOR = {R. Graham and N. Sloane},
+     TITLE = "On the covering radius of codes",
+   JOURNAL = {IEEE Trans. Inform. Theory},
+    VOLUME = {31},
+      YEAR = {1985},
+    NUMBER = {1},
+     PAGES = {385--401},
+}
+
+ at article{Han99,
+        author  = "J. P. Hansen",
+        title   = "Toric surfaces and error-correcting codes",
+        journal = "Coding theory, cryptography, and related areas 
+(ed., Bachmann et al) Springer-Verlag",
+        year    = 1999,
+}
+
+ at article{He72,
+        author  = "Hermann J. Helgert",
+        title   = "Srivastava codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 18,
+        month   = "March",
+        year    = 1972,
+        pages   = "292--297",
+}
+
+ at book{HP03,
+author="W. C. Huffman and V. Pless",
+title="Fundamentals of error-correcting codes",
+publisher="Cambridge Univ. Press",
+year=2003}
+
+ at article{Jo04,
+        author  = "D. Joyner",
+        title   = "Toric codes over finite fields",
+        journal = "Applicable Algebra in Engineering, 
+                      Communication and Computing",
+        volume  = 15,
+        year    = 2004,
+        pages   = "63--79",
+}
+
+ at book{JH04,
+author="J. Justesen and T. Hoholdt",
+title="A course in error-correcting codes",
+publisher="European Mathematical Society",
+year=2004}
+
+ at article{Leon82,
+        author  = "Jeffrey S. Leon",
+        title   = "Computing automorphism groups of error-correcting codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 28,
+        month   = "May",
+        year    = 1982,
+        pages   = "496--511",
+}
+
+ at article{Leon88,
+        author  = "Jeffrey S. Leon",
+        title   = "A probabilistic algorithm for computing minimum weights of
+                   large error-correcting codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 34,
+        month   = "September",
+        year    = 1988,
+        pages   = "1354--1359",
+}
+
+ at article{Leon91,
+        author  = "Jeffrey S. Leon",
+        title   = "Permutation group algorithms based on partitions, {I}: theory and algorithms",
+        journal = "J. Symbolic Comput.",
+        volume  = 12,
+        year    = 1991,
+        pages   = "533--583",
+}
+
+ at book{MS83,
+        author="F. J. MacWilliams and N. J. A. Sloane",
+        title="The theory of error-correcting codes",
+        publisher="Amsterdam: North-Holland",
+        year=1983,
+}
+
+ at book{St93,
+        author="H. Stichtenoth",
+        title="Algebraic function fields and codes",
+        publisher="Springer-Verlag",
+        year=1993,
+}
+
+ at book{Br,
+AUTHOR = {A. E. Brouwer}, 
+TITLE = "Bounds on the minimum distance of linear codes",
+publisher={On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html},
+Year={1997-2006}
+}
+
+ at article{HHKK07,
+        author  = "M.~Harada and W.~Holzmann and H.~Kharaghani and M.~Khorvash",
+        title   = "Extremal Ternary Self-Dual Codes Constructed from Negacirculant Matrices",
+        journal = "Graphs and Combinatorics",
+        volume  = 23,
+        number  = 4,
+        year    = 2007,
+        pages   = "401--417",
+}
+
+ at article{Sloane72,
+        author  = "N.~Sloane and S.~Reddy and C.~Chen",
+        title   = "New binary codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 18,
+        month   = "Jul",
+        year    = 1972,
+        pages   = "503--510",
+}
+
+ at article{Alltop84,
+        author  = "W.~O.~Alltop",
+        title   = "A method for extending binary linear codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 30,
+        year    = 1984,
+        pages   = "871--872",
+}
+
+ at INCOLLECTION{Brouwer98,
+	author 		= {A.~E. Brouwer},
+	title  		= {Bounds on the Size of Linear Codes},
+	booktitle	= {Handbook of Coding Theory},
+	publisher	= {{Elsevier, North Holland}},
+	year		= {1998},
+	pages		= {295--461},
+	editor		= {V.~S. Pless and W.~C. Huffman},
+}
+
+ at PHDTHESIS{Chen69,
+	author		= {C.~L. Chen},
+	title		= {Some Results on Algebraically Structured Error-Correcting Codes},
+	school		= {{University of Hawaii}},
+	type		= {Ph.{D} Dissertation},
+	address		= {USA},
+	year		= {1969},
+}
+
+ at TECHREPORT{Zimmermann96,
+	author		= {K.-H.~Zimmermann},
+	title		= {Integral Hecke Modules, Integral Generalized {Reed-Muller} Codes, and Linear Codes},
+	institution = {Technische Universit\"at Hamburg-Harburg},
+	address		= {Hamburg, Germany},
+	year		= {1996},
+	number		= {3--96},
+}
diff --git a/doc/guava.blg b/doc/guava.blg
new file mode 100644
index 0000000..9831682
--- /dev/null
+++ b/doc/guava.blg
@@ -0,0 +1,54 @@
+This is BibTeX, Version 0.99c (Web2C 7.5.6)
+The top-level auxiliary file: guava.aux
+The style file: alpha.bst
+Database file #1: guava.bib
+Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03
+while executing---line 1185 of file alpha.bst
+Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03
+while executing---line 1185 of file alpha.bst
+Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03
+while executing---line 1185 of file alpha.bst
+Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03
+while executing---line 1250 of file alpha.bst
+You've used 22 entries,
+            2543 wiz_defined-function locations,
+            704 strings with 7040 characters,
+and the built_in function-call counts, 7961 in all, are:
+= -- 806
+> -- 307
+< -- 16
++ -- 99
+- -- 94
+* -- 526
+:= -- 1316
+add.period$ -- 67
+call.type$ -- 22
+change.case$ -- 117
+chr.to.int$ -- 22
+cite$ -- 22
+duplicate$ -- 349
+empty$ -- 604
+format.name$ -- 129
+if$ -- 1619
+int.to.chr$ -- 1
+int.to.str$ -- 0
+missing$ -- 26
+newline$ -- 113
+num.names$ -- 68
+pop$ -- 118
+preamble$ -- 1
+purify$ -- 145
+quote$ -- 0
+skip$ -- 279
+stack$ -- 0
+substring$ -- 481
+swap$ -- 46
+text.length$ -- 16
+text.prefix$ -- 13
+top$ -- 0
+type$ -- 152
+warning$ -- 0
+while$ -- 79
+width$ -- 25
+write$ -- 283
+(There were 4 error messages)
diff --git a/doc/guava.brf b/doc/guava.brf
new file mode 100644
index 0000000..fbfc1bb
--- /dev/null
+++ b/doc/guava.brf
@@ -0,0 +1,42 @@
+\backcite {Leon91}{{12}{1.1}{section.1.1}}
+\backcite {MS83}{{12}{1.1}{section.1.1}}
+\backcite {HP03}{{12}{1.1}{section.1.1}}
+\backcite {HP03}{{34}{4.3.6}{subsection.4.3.6}}
+\backcite {HP03}{{36}{4.3.10}{subsection.4.3.10}}
+\backcite {Leon82}{{39}{4.4.3}{subsection.4.4.3}}
+\backcite {Leon88}{{48}{4.8.4}{subsection.4.8.4}}
+\backcite {Chen69}{{48}{4.8.5}{subsection.4.8.5}}
+\backcite {Zimmermann96}{{48}{4.8.5}{subsection.4.8.5}}
+\backcite {Leon88}{{51}{4.8.6}{subsection.4.8.6}}
+\backcite {HP03}{{56}{4.10.1}{subsection.4.10.1}}
+\backcite {HP03}{{57}{4.10.2}{subsection.4.10.2}}
+\backcite {JH04}{{57}{4.10.2}{subsection.4.10.2}}
+\backcite {Gao03}{{58}{4.10.3}{subsection.4.10.3}}
+\backcite {JH04}{{58}{4.10.4}{subsection.4.10.4}}
+\backcite {JH04}{{59}{4.10.5}{subsection.4.10.5}}
+\backcite {HP03}{{63}{4.10.11}{subsection.4.10.11}}
+\backcite {HP03}{{71}{5.2.5}{subsection.5.2.5}}
+\backcite {HP03}{{72}{5.2.7}{subsection.5.2.7}}
+\backcite {MS83}{{72}{5.2.7}{subsection.5.2.7}}
+\backcite {He72}{{73}{5.2.9}{subsection.5.2.9}}
+\backcite {GDT91}{{77}{5.3}{section.5.3}}
+\backcite {MS83}{{78}{5.4}{section.5.4}}
+\backcite {BM03}{{84}{5.5.9}{subsection.5.5.9}}
+\backcite {HHKK07}{{89}{5.5.18}{subsection.5.5.18}}
+\backcite {JH04}{{91}{5.6.2}{subsection.5.6.2}}
+\backcite {MS83}{{91}{5.6.2}{subsection.5.6.2}}
+\backcite {JH04}{{91}{5.6.2}{subsection.5.6.2}}
+\backcite {Jo04}{{92}{5.6.5}{subsection.5.6.5}}
+\backcite {Han99}{{92}{5.6.5}{subsection.5.6.5}}
+\backcite {St93}{{105}{5.7.25}{subsection.5.7.25}}
+\backcite {GS85}{{120}{6.2.6}{subsection.6.2.6}}
+\backcite {Sloane72}{{122}{6.2.9}{subsection.6.2.9}}
+\backcite {Alltop84}{{123}{6.2.10}{subsection.6.2.10}}
+\backcite {Brouwer98}{{123}{6.2.11}{subsection.6.2.11}}
+\backcite {Br}{{125}{7.1}{section.7.1}}
+\backcite {Br}{{130}{7.1.13}{subsection.7.1.13}}
+\backcite {HP03}{{138}{7.2.14}{subsection.7.2.14}}
+\backcite {GS85}{{146}{7.4}{section.7.4}}
+\backcite {GS85}{{147}{7.4.5}{subsection.7.4.5}}
+\backcite {MS83}{{149}{7.5.6}{subsection.7.5.6}}
+\backcite {GG03}{{157}{7.6.10}{subsection.7.6.10}}
diff --git a/doc/guava.idx b/doc/guava.idx
new file mode 100644
index 0000000..fe949b8
--- /dev/null
+++ b/doc/guava.idx
@@ -0,0 +1,401 @@
+\indexentry{AClosestVectorCombinationsMatFFEVecFFE@\texttt  {AClosestVectorCombinationsMatFFEVecFFE}|hyperpage}{14}
+\indexentry{AClosestVectorComb..MatFFEVecFFECoords@\texttt  {AClosestVectorComb..MatFFEVecFFECoords}|hyperpage}{15}
+\indexentry{DistancesDistributionMatFFEVecFFE@\texttt  {DistancesDistributionMatFFEVecFFE}|hyperpage}{15}
+\indexentry{DistancesDistributionVecFFEsVecFFE@\texttt  {DistancesDistributionVecFFEsVecFFE}|hyperpage}{16}
+\indexentry{WeightVecFFE@\texttt  {WeightVecFFE}|hyperpage}{16}
+\indexentry{Hamming metric|hyperpage}{16}
+\indexentry{DistanceVecFFE@\texttt  {DistanceVecFFE}|hyperpage}{16}
+\indexentry{$GF(p)$|hyperpage}{17}
+\indexentry{$GF(q)$|hyperpage}{17}
+\indexentry{defining polynomial|hyperpage}{17}
+\indexentry{primitive element|hyperpage}{17}
+\indexentry{ConwayPolynomial@\texttt  {ConwayPolynomial}|hyperpage}{17}
+\indexentry{IsCheapConwayPolynomial|hyperpage}{17}
+\indexentry{RandomPrimitivePolynomial@\texttt  {RandomPrimitivePolynomial}|hyperpage}{18}
+\indexentry{IsPrimitivePolynomial|hyperpage}{18}
+\indexentry{linear code|hyperpage}{19}
+\indexentry{Codeword@\texttt  {Codeword}|hyperpage}{20}
+\indexentry{CodewordNr@\texttt  {CodewordNr}|hyperpage}{21}
+\indexentry{IsCodeword@\texttt  {IsCodeword}|hyperpage}{22}
+\indexentry{=@\texttt  {=}|hyperpage}{22}
+\indexentry{not =|hyperpage}{22}
+\indexentry{{\textless} {\textgreater}|hyperpage}{22}
+\indexentry{+@\texttt  {+}|hyperpage}{23}
+\indexentry{codewords, addition|hyperpage}{23}
+\indexentry{-@\texttt  {-}|hyperpage}{23}
+\indexentry{codewords, subtraction|hyperpage}{23}
+\indexentry{+@\texttt  {+}|hyperpage}{23}
+\indexentry{codewords, cosets|hyperpage}{23}
+\indexentry{coset|hyperpage}{23}
+\indexentry{VectorCodeword@\texttt  {VectorCodeword}|hyperpage}{24}
+\indexentry{PolyCodeword@\texttt  {PolyCodeword}|hyperpage}{24}
+\indexentry{TreatAsVector@\texttt  {TreatAsVector}|hyperpage}{25}
+\indexentry{TreatAsPoly@\texttt  {TreatAsPoly}|hyperpage}{25}
+\indexentry{NullWord@\texttt  {NullWord}|hyperpage}{26}
+\indexentry{DistanceCodeword@\texttt  {DistanceCodeword}|hyperpage}{26}
+\indexentry{Support@\texttt  {Support}|hyperpage}{26}
+\indexentry{WeightCodeword@\texttt  {WeightCodeword}|hyperpage}{27}
+\indexentry{code|hyperpage}{28}
+\indexentry{code, elements of|hyperpage}{28}
+\indexentry{code, unrestricted|hyperpage}{28}
+\indexentry{code, $(n,M,d)$|hyperpage}{28}
+\indexentry{minimum distance|hyperpage}{28}
+\indexentry{length|hyperpage}{28}
+\indexentry{size|hyperpage}{28}
+\indexentry{code, linear|hyperpage}{28}
+\indexentry{parity check matrix|hyperpage}{28}
+\indexentry{code, $[n, k, d]r$|hyperpage}{29}
+\indexentry{code, cyclic|hyperpage}{29}
+\indexentry{generator polynomial|hyperpage}{29}
+\indexentry{check polynomial|hyperpage}{29}
+\indexentry{=@\texttt  {=}|hyperpage}{30}
+\indexentry{not =|hyperpage}{30}
+\indexentry{{\textless} {\textgreater}|hyperpage}{30}
+\indexentry{+@\texttt  {+}|hyperpage}{31}
+\indexentry{codes, addition|hyperpage}{31}
+\indexentry{codes, direct sum|hyperpage}{31}
+\indexentry{*@\texttt  {*}|hyperpage}{31}
+\indexentry{codes, product|hyperpage}{31}
+\indexentry{*@\texttt  {*}|hyperpage}{31}
+\indexentry{codes, encoding|hyperpage}{31}
+\indexentry{encoder map|hyperpage}{31}
+\indexentry{InformationWord@\texttt  {InformationWord}|hyperpage}{32}
+\indexentry{codes, decoding|hyperpage}{32}
+\indexentry{information bits|hyperpage}{32}
+\indexentry{in@\texttt  {in}|hyperpage}{32}
+\indexentry{code, element test|hyperpage}{32}
+\indexentry{IsSubset@\texttt  {IsSubset}|hyperpage}{33}
+\indexentry{code, subcode|hyperpage}{33}
+\indexentry{IsCode@\texttt  {IsCode}|hyperpage}{33}
+\indexentry{IsLinearCode@\texttt  {IsLinearCode}|hyperpage}{33}
+\indexentry{IsCyclicCode@\texttt  {IsCyclicCode}|hyperpage}{33}
+\indexentry{IsPerfectCode@\texttt  {IsPerfectCode}|hyperpage}{34}
+\indexentry{code, perfect|hyperpage}{34}
+\indexentry{IsMDSCode@\texttt  {IsMDSCode}|hyperpage}{34}
+\indexentry{code, maximum distance separable|hyperpage}{35}
+\indexentry{MDS|hyperpage}{35}
+\indexentry{IsSelfDualCode@\texttt  {IsSelfDualCode}|hyperpage}{35}
+\indexentry{code, self-dual|hyperpage}{35}
+\indexentry{self-orthogonal|hyperpage}{35}
+\indexentry{IsSelfOrthogonalCode@\texttt  {IsSelfOrthogonalCode}|hyperpage}{35}
+\indexentry{code, self-orthogonal|hyperpage}{35}
+\indexentry{doubly-even|hyperpage}{35}
+\indexentry{IsDoublyEvenCode@\texttt  {IsDoublyEvenCode}|hyperpage}{35}
+\indexentry{code, doubly-even|hyperpage}{36}
+\indexentry{singly-even|hyperpage}{36}
+\indexentry{IsSinglyEvenCode@\texttt  {IsSinglyEvenCode}|hyperpage}{36}
+\indexentry{code, singly-even|hyperpage}{36}
+\indexentry{even|hyperpage}{36}
+\indexentry{IsEvenCode@\texttt  {IsEvenCode}|hyperpage}{36}
+\indexentry{code, even|hyperpage}{36}
+\indexentry{self complementary code|hyperpage}{37}
+\indexentry{IsSelfComplementaryCode@\texttt  {IsSelfComplementaryCode}|hyperpage}{37}
+\indexentry{affine code|hyperpage}{37}
+\indexentry{IsAffineCode@\texttt  {IsAffineCode}|hyperpage}{37}
+\indexentry{IsAlmostAffineCode@\texttt  {IsAlmostAffineCode}|hyperpage}{38}
+\indexentry{permutation equivalent codes|hyperpage}{38}
+\indexentry{equivalent codes|hyperpage}{38}
+\indexentry{IsEquivalent@\texttt  {IsEquivalent}|hyperpage}{38}
+\indexentry{CodeIsomorphism@\texttt  {CodeIsomorphism}|hyperpage}{38}
+\indexentry{AutomorphismGroup@\texttt  {AutomorphismGroup}|hyperpage}{39}
+\indexentry{PermutationAutomorphismGroup|hyperpage}{39}
+\indexentry{PermutationAutomorphismGroup@\texttt  {PermutationAutomorphismGroup}|hyperpage}{40}
+\indexentry{IsFinite@\texttt  {IsFinite}|hyperpage}{40}
+\indexentry{Size@\texttt  {Size}|hyperpage}{40}
+\indexentry{LeftActingDomain@\texttt  {LeftActingDomain}|hyperpage}{41}
+\indexentry{Dimension@\texttt  {Dimension}|hyperpage}{41}
+\indexentry{AsSSortedList@\texttt  {AsSSortedList}|hyperpage}{41}
+\indexentry{Print@\texttt  {Print}|hyperpage}{42}
+\indexentry{String@\texttt  {String}|hyperpage}{42}
+\indexentry{Display@\texttt  {Display}|hyperpage}{43}
+\indexentry{DisplayBoundsInfo@\texttt  {DisplayBoundsInfo}|hyperpage}{43}
+\indexentry{GeneratorMat@\texttt  {GeneratorMat}|hyperpage}{44}
+\indexentry{CheckMat@\texttt  {CheckMat}|hyperpage}{44}
+\indexentry{GeneratorPol@\texttt  {GeneratorPol}|hyperpage}{45}
+\indexentry{CheckPol@\texttt  {CheckPol}|hyperpage}{45}
+\indexentry{RootsOfCode@\texttt  {RootsOfCode}|hyperpage}{45}
+\indexentry{WordLength@\texttt  {WordLength}|hyperpage}{46}
+\indexentry{Redundancy@\texttt  {Redundancy}|hyperpage}{46}
+\indexentry{MinimumDistance@\texttt  {MinimumDistance}|hyperpage}{46}
+\indexentry{MinimumDistanceLeon@\texttt  {MinimumDistanceLeon}|hyperpage}{47}
+\indexentry{MinimumWeight@\texttt  {MinimumWeight}|hyperpage}{48}
+\indexentry{DecreaseMinimumDistanceUpperBound@\texttt  {DecreaseMinimumDistanceUpperBound}|hyperpage}{51}
+\indexentry{MinimumDistanceRandom@\texttt  {MinimumDistanceRandom}|hyperpage}{51}
+\indexentry{$t(n,k)$|hyperpage}{53}
+\indexentry{covering code|hyperpage}{53}
+\indexentry{CoveringRadius@\texttt  {CoveringRadius}|hyperpage}{53}
+\indexentry{SetCoveringRadius@\texttt  {SetCoveringRadius}|hyperpage}{54}
+\indexentry{MinimumWeightWords@\texttt  {MinimumWeightWords}|hyperpage}{54}
+\indexentry{WeightDistribution@\texttt  {WeightDistribution}|hyperpage}{54}
+\indexentry{InnerDistribution@\texttt  {InnerDistribution}|hyperpage}{55}
+\indexentry{distance|hyperpage}{55}
+\indexentry{DistancesDistribution@\texttt  {DistancesDistribution}|hyperpage}{55}
+\indexentry{OuterDistribution@\texttt  {OuterDistribution}|hyperpage}{56}
+\indexentry{Decode@\texttt  {Decode}|hyperpage}{56}
+\indexentry{Decodeword@\texttt  {Decodeword}|hyperpage}{57}
+\indexentry{GeneralizedReedSolomonDecoderGao@\texttt  {GeneralizedReedSolomonDecoderGao}|hyperpage}{58}
+\indexentry{GeneralizedReedSolomonListDecoder@\texttt  {GeneralizedReedSolomonListDecoder}|hyperpage}{58}
+\indexentry{BitFlipDecoder@\texttt  {BitFlipDecoder}|hyperpage}{59}
+\indexentry{NearestNeighborGRSDecodewords@\texttt  {NearestNeighborGRSDecodewords}|hyperpage}{60}
+\indexentry{NearestNeighborDecodewords@\texttt  {NearestNeighborDecodewords}|hyperpage}{61}
+\indexentry{Syndrome@\texttt  {Syndrome}|hyperpage}{61}
+\indexentry{SyndromeTable@\texttt  {SyndromeTable}|hyperpage}{62}
+\indexentry{syndrome table|hyperpage}{62}
+\indexentry{StandardArray@\texttt  {StandardArray}|hyperpage}{62}
+\indexentry{PermutationDecode@\texttt  {PermutationDecode}|hyperpage}{63}
+\indexentry{PermutationDecodeNC@\texttt  {PermutationDecodeNC}|hyperpage}{63}
+\indexentry{ElementsCode@\texttt  {ElementsCode}|hyperpage}{65}
+\indexentry{code, Hadamard|hyperpage}{66}
+\indexentry{HadamardCode@\texttt  {HadamardCode}|hyperpage}{66}
+\indexentry{Hadamard matrix|hyperpage}{66}
+\indexentry{code, conference|hyperpage}{66}
+\indexentry{ConferenceCode@\texttt  {ConferenceCode}|hyperpage}{66}
+\indexentry{conference matrix|hyperpage}{67}
+\indexentry{MOLSCode@\texttt  {MOLSCode}|hyperpage}{67}
+\indexentry{RandomCode@\texttt  {RandomCode}|hyperpage}{68}
+\indexentry{code, Nordstrom-Robinson|hyperpage}{68}
+\indexentry{NordstromRobinsonCode@\texttt  {NordstromRobinsonCode}|hyperpage}{68}
+\indexentry{code, greedy|hyperpage}{68}
+\indexentry{GreedyCode@\texttt  {GreedyCode}|hyperpage}{68}
+\indexentry{LexiCode@\texttt  {LexiCode}|hyperpage}{69}
+\indexentry{GeneratorMatCode@\texttt  {GeneratorMatCode}|hyperpage}{69}
+\indexentry{CheckMatCodeMutable@\texttt  {CheckMatCodeMutable}|hyperpage}{70}
+\indexentry{CheckMatCode@\texttt  {CheckMatCode}|hyperpage}{70}
+\indexentry{code, Hamming|hyperpage}{70}
+\indexentry{HammingCode@\texttt  {HammingCode}|hyperpage}{71}
+\indexentry{code, Reed-Muller|hyperpage}{71}
+\indexentry{ReedMullerCode@\texttt  {ReedMullerCode}|hyperpage}{71}
+\indexentry{code, alternant|hyperpage}{71}
+\indexentry{AlternantCode@\texttt  {AlternantCode}|hyperpage}{71}
+\indexentry{code, Goppa (classical)|hyperpage}{71}
+\indexentry{GoppaCode@\texttt  {GoppaCode}|hyperpage}{72}
+\indexentry{code, Srivastava|hyperpage}{72}
+\indexentry{GeneralizedSrivastavaCode@\texttt  {GeneralizedSrivastavaCode}|hyperpage}{72}
+\indexentry{SrivastavaCode@\texttt  {SrivastavaCode}|hyperpage}{73}
+\indexentry{code, Cordaro-Wagner|hyperpage}{73}
+\indexentry{CordaroWagnerCode@\texttt  {CordaroWagnerCode}|hyperpage}{73}
+\indexentry{FerreroDesignCode@\texttt  {FerreroDesignCode}|hyperpage}{73}
+\indexentry{RandomLinearCode@\texttt  {RandomLinearCode}|hyperpage}{74}
+\indexentry{OptimalityCode@\texttt  {OptimalityCode}|hyperpage}{75}
+\indexentry{BestKnownLinearCode@\texttt  {BestKnownLinearCode}|hyperpage}{75}
+\indexentry{code, Gabidulin|hyperpage}{77}
+\indexentry{GabidulinCode@\texttt  {GabidulinCode}|hyperpage}{77}
+\indexentry{EnlargedGabidulinCode@\texttt  {EnlargedGabidulinCode}|hyperpage}{77}
+\indexentry{code, Davydov|hyperpage}{77}
+\indexentry{DavydovCode@\texttt  {DavydovCode}|hyperpage}{77}
+\indexentry{code, Tombak|hyperpage}{77}
+\indexentry{TombakCode@\texttt  {TombakCode}|hyperpage}{77}
+\indexentry{EnlargedTombakCode@\texttt  {EnlargedTombakCode}|hyperpage}{77}
+\indexentry{code, Golay (binary)|hyperpage}{78}
+\indexentry{BinaryGolayCode@\texttt  {BinaryGolayCode}|hyperpage}{78}
+\indexentry{ExtendedBinaryGolayCode@\texttt  {ExtendedBinaryGolayCode}|hyperpage}{78}
+\indexentry{code, Golay (ternary)|hyperpage}{79}
+\indexentry{TernaryGolayCode@\texttt  {TernaryGolayCode}|hyperpage}{79}
+\indexentry{ExtendedTernaryGolayCode@\texttt  {ExtendedTernaryGolayCode}|hyperpage}{79}
+\indexentry{generator polynomial|hyperpage}{80}
+\indexentry{check polynomial|hyperpage}{80}
+\indexentry{GeneratorPolCode@\texttt  {GeneratorPolCode}|hyperpage}{80}
+\indexentry{CheckPolCode@\texttt  {CheckPolCode}|hyperpage}{81}
+\indexentry{RootsCode@\texttt  {RootsCode}|hyperpage}{81}
+\indexentry{code, Bose-Chaudhuri-Hockenghem|hyperpage}{82}
+\indexentry{BCHCode@\texttt  {BCHCode}|hyperpage}{82}
+\indexentry{Bose distance|hyperpage}{82}
+\indexentry{code, Reed-Solomon|hyperpage}{82}
+\indexentry{ReedSolomonCode@\texttt  {ReedSolomonCode}|hyperpage}{83}
+\indexentry{ExtendedReedSolomonCode@\texttt  {ExtendedReedSolomonCode}|hyperpage}{83}
+\indexentry{QRCode@\texttt  {QRCode}|hyperpage}{83}
+\indexentry{QQRCodeNC@\texttt  {QQRCodeNC}|hyperpage}{84}
+\indexentry{QQRCode@\texttt  {QQRCode}|hyperpage}{84}
+\indexentry{code, Fire|hyperpage}{85}
+\indexentry{FireCode@\texttt  {FireCode}|hyperpage}{85}
+\indexentry{order of polynomial|hyperpage}{85}
+\indexentry{WholeSpaceCode@\texttt  {WholeSpaceCode}|hyperpage}{85}
+\indexentry{NullCode@\texttt  {NullCode}|hyperpage}{86}
+\indexentry{RepetitionCode@\texttt  {RepetitionCode}|hyperpage}{86}
+\indexentry{CyclicCodes@\texttt  {CyclicCodes}|hyperpage}{86}
+\indexentry{NrCyclicCodes@\texttt  {NrCyclicCodes}|hyperpage}{86}
+\indexentry{QuasiCyclicCode@\texttt  {QuasiCyclicCode}|hyperpage}{87}
+\indexentry{CyclicMDSCode@\texttt  {CyclicMDSCode}|hyperpage}{88}
+\indexentry{MDS|hyperpage}{88}
+\indexentry{cyclic|hyperpage}{88}
+\indexentry{FourNegacirculantSelfDualCode@\texttt  {FourNegacirculantSelfDualCode}|hyperpage}{89}
+\indexentry{self-dual|hyperpage}{90}
+\indexentry{FourNegacirculantSelfDualCodeNC@\texttt  {FourNegacirculantSelfDualCodeNC}|hyperpage}{90}
+\indexentry{code, evaluation|hyperpage}{90}
+\indexentry{EvaluationCode@\texttt  {EvaluationCode}|hyperpage}{90}
+\indexentry{GeneralizedReedSolomonCode@\texttt  {GeneralizedReedSolomonCode}|hyperpage}{90}
+\indexentry{GeneralizedReedMullerCode@\texttt  {GeneralizedReedMullerCode}|hyperpage}{91}
+\indexentry{ToricPoints@\texttt  {ToricPoints}|hyperpage}{92}
+\indexentry{code, toric|hyperpage}{92}
+\indexentry{ToricCode@\texttt  {ToricCode}|hyperpage}{92}
+\indexentry{code, AG|hyperpage}{93}
+\indexentry{AffineCurve@\texttt  {AffineCurve}|hyperpage}{93}
+\indexentry{point|hyperpage}{93}
+\indexentry{AffinePointsOnCurve@\texttt  {AffinePointsOnCurve}|hyperpage}{94}
+\indexentry{GenusCurve@\texttt  {GenusCurve}|hyperpage}{94}
+\indexentry{GOrbitPoint @\texttt  {GOrbitPoint }|hyperpage}{94}
+\indexentry{divisor|hyperpage}{95}
+\indexentry{support|hyperpage}{95}
+\indexentry{DivisorOnAffineCurve@\texttt  {DivisorOnAffineCurve}|hyperpage}{96}
+\indexentry{DivisorAddition @\texttt  {DivisorAddition }|hyperpage}{96}
+\indexentry{DivisorDegree @\texttt  {DivisorDegree }|hyperpage}{96}
+\indexentry{degree|hyperpage}{96}
+\indexentry{DivisorNegate @\texttt  {DivisorNegate }|hyperpage}{97}
+\indexentry{DivisorIsZero @\texttt  {DivisorIsZero }|hyperpage}{97}
+\indexentry{DivisorsEqual @\texttt  {DivisorsEqual }|hyperpage}{97}
+\indexentry{DivisorGCD @\texttt  {DivisorGCD }|hyperpage}{97}
+\indexentry{greatest common divisor|hyperpage}{97}
+\indexentry{DivisorLCM @\texttt  {DivisorLCM }|hyperpage}{97}
+\indexentry{least common multiple|hyperpage}{97}
+\indexentry{RiemannRochSpaceBasisFunctionP1 @\texttt  {RiemannRochSpaceBasisFunctionP1 }|hyperpage}{99}
+\indexentry{DivisorOfRationalFunctionP1 @\texttt  {DivisorOfRationalFunctionP1 }|hyperpage}{99}
+\indexentry{RiemannRochSpaceBasisP1 @\texttt  {RiemannRochSpaceBasisP1 }|hyperpage}{100}
+\indexentry{MoebiusTransformation @\texttt  {MoebiusTransformation }|hyperpage}{101}
+\indexentry{ActionMoebiusTransformationOnFunction @\texttt  {ActionMoebiusTransformationOnFunction }|hyperpage}{101}
+\indexentry{ActionMoebiusTransformationOnDivisorP1 @\texttt  {ActionMoebiusTransformationOnDivisorP1 }|hyperpage}{101}
+\indexentry{IsActionMoebiusTransformationOnDivisorDefinedP1 @\texttt  {IsAction}\discretionary {-}{}{}\texttt  {Moebius}\discretionary {-}{}{}\texttt  {Transformation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Divisor}\discretionary {-}{}{}\texttt  {DefinedP1 }|hyperpage}{101}
+\indexentry{DivisorAutomorphismGroupP1 @\texttt  {DivisorAutomorphismGroupP1 }|hyperpage}{102}
+\indexentry{MatrixRepresentationOnRiemannRochSpaceP1 @\texttt  {Matrix}\discretionary {-}{}{}\texttt  {Representation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Riemann}\discretionary {-}{}{}\texttt  {Roch}\discretionary {-}{}{}\texttt  {SpaceP1 }|hyperpage}{103}
+\indexentry{GoppaCodeClassical@\texttt  {GoppaCodeClassical}|hyperpage}{104}
+\indexentry{EvaluationBivariateCode@\texttt  {EvaluationBivariateCode}|hyperpage}{104}
+\indexentry{EvaluationBivariateCodeNC@\texttt  {EvaluationBivariateCodeNC}|hyperpage}{104}
+\indexentry{OnePointAGCode@\texttt  {OnePointAGCode}|hyperpage}{105}
+\indexentry{Parity check|hyperpage}{107}
+\indexentry{ExtendedCode@\texttt  {ExtendedCode}|hyperpage}{107}
+\indexentry{PuncturedCode@\texttt  {PuncturedCode}|hyperpage}{108}
+\indexentry{EvenWeightSubcode@\texttt  {EvenWeightSubcode}|hyperpage}{108}
+\indexentry{PermutedCode@\texttt  {PermutedCode}|hyperpage}{109}
+\indexentry{ExpurgatedCode@\texttt  {ExpurgatedCode}|hyperpage}{109}
+\indexentry{AugmentedCode@\texttt  {AugmentedCode}|hyperpage}{110}
+\indexentry{RemovedElementsCode@\texttt  {RemovedElementsCode}|hyperpage}{110}
+\indexentry{AddedElementsCode@\texttt  {AddedElementsCode}|hyperpage}{111}
+\indexentry{ShortenedCode@\texttt  {ShortenedCode}|hyperpage}{111}
+\indexentry{LengthenedCode@\texttt  {LengthenedCode}|hyperpage}{112}
+\indexentry{SubCode@\texttt  {SubCode}|hyperpage}{113}
+\indexentry{ResidueCode@\texttt  {ResidueCode}|hyperpage}{113}
+\indexentry{ConstructionBCode@\texttt  {ConstructionBCode}|hyperpage}{113}
+\indexentry{DualCode@\texttt  {DualCode}|hyperpage}{114}
+\indexentry{self-dual|hyperpage}{114}
+\indexentry{ConversionFieldCode@\texttt  {ConversionFieldCode}|hyperpage}{115}
+\indexentry{TraceCode@\texttt  {TraceCode}|hyperpage}{115}
+\indexentry{CosetCode@\texttt  {CosetCode}|hyperpage}{115}
+\indexentry{ConstantWeightSubcode@\texttt  {ConstantWeightSubcode}|hyperpage}{116}
+\indexentry{StandardFormCode@\texttt  {StandardFormCode}|hyperpage}{116}
+\indexentry{PiecewiseConstantCode@\texttt  {PiecewiseConstantCode}|hyperpage}{117}
+\indexentry{DirectSumCode@\texttt  {DirectSumCode}|hyperpage}{118}
+\indexentry{UUVCode@\texttt  {UUVCode}|hyperpage}{118}
+\indexentry{DirectProductCode@\texttt  {DirectProductCode}|hyperpage}{118}
+\indexentry{IntersectionCode@\texttt  {IntersectionCode}|hyperpage}{119}
+\indexentry{hull|hyperpage}{119}
+\indexentry{UnionCode@\texttt  {UnionCode}|hyperpage}{119}
+\indexentry{ExtendedDirectSumCode@\texttt  {ExtendedDirectSumCode}|hyperpage}{120}
+\indexentry{AmalgamatedDirectSumCode@\texttt  {AmalgamatedDirectSumCode}|hyperpage}{120}
+\indexentry{BlockwiseDirectSumCode@\texttt  {BlockwiseDirectSumCode}|hyperpage}{121}
+\indexentry{ConstructionXCode@\texttt  {ConstructionXCode}|hyperpage}{121}
+\indexentry{ConstructionXXCode@\texttt  {ConstructionXXCode}|hyperpage}{122}
+\indexentry{BZCode@\texttt  {BZCode}|hyperpage}{123}
+\indexentry{BZCodeNC@\texttt  {BZCodeNC}|hyperpage}{124}
+\indexentry{bounds, Singleton|hyperpage}{125}
+\indexentry{UpperBoundSingleton@\texttt  {UpperBoundSingleton}|hyperpage}{126}
+\indexentry{maximum distance separable|hyperpage}{126}
+\indexentry{bounds, Hamming|hyperpage}{126}
+\indexentry{bounds, sphere packing bound|hyperpage}{126}
+\indexentry{perfect|hyperpage}{126}
+\indexentry{UpperBoundHamming@\texttt  {UpperBoundHamming}|hyperpage}{126}
+\indexentry{bounds, Johnson|hyperpage}{126}
+\indexentry{UpperBoundJohnson@\texttt  {UpperBoundJohnson}|hyperpage}{126}
+\indexentry{bounds, Plotkin|hyperpage}{127}
+\indexentry{UpperBoundPlotkin@\texttt  {UpperBoundPlotkin}|hyperpage}{127}
+\indexentry{bounds, Elias|hyperpage}{127}
+\indexentry{UpperBoundElias@\texttt  {UpperBoundElias}|hyperpage}{127}
+\indexentry{bounds, Griesmer|hyperpage}{127}
+\indexentry{UpperBoundGriesmer@\texttt  {UpperBoundGriesmer}|hyperpage}{128}
+\indexentry{Griesmer code|hyperpage}{128}
+\indexentry{IsGriesmerCode@\texttt  {IsGriesmerCode}|hyperpage}{128}
+\indexentry{$A(n,d)$|hyperpage}{128}
+\indexentry{UpperBound@\texttt  {UpperBound}|hyperpage}{128}
+\indexentry{LowerBoundMinimumDistance@\texttt  {LowerBoundMinimumDistance}|hyperpage}{129}
+\indexentry{bound, Gilbert-Varshamov lower|hyperpage}{129}
+\indexentry{LowerBoundGilbertVarshamov@\texttt  {LowerBoundGilbertVarshamov}|hyperpage}{129}
+\indexentry{bound, sphere packing lower|hyperpage}{129}
+\indexentry{LowerBoundSpherePacking@\texttt  {LowerBoundSpherePacking}|hyperpage}{129}
+\indexentry{UpperBoundMinimumDistance@\texttt  {UpperBoundMinimumDistance}|hyperpage}{130}
+\indexentry{BoundsMinimumDistance@\texttt  {BoundsMinimumDistance}|hyperpage}{130}
+\indexentry{BoundsCoveringRadius@\texttt  {BoundsCoveringRadius}|hyperpage}{131}
+\indexentry{IncreaseCoveringRadiusLowerBound@\texttt  {IncreaseCoveringRadiusLowerBound}|hyperpage}{131}
+\indexentry{ExhaustiveSearchCoveringRadius@\texttt  {ExhaustiveSearchCoveringRadius}|hyperpage}{132}
+\indexentry{GeneralLowerBoundCoveringRadius@\texttt  {GeneralLowerBoundCoveringRadius}|hyperpage}{133}
+\indexentry{GeneralUpperBoundCoveringRadius@\texttt  {GeneralUpperBoundCoveringRadius}|hyperpage}{133}
+\indexentry{LowerBoundCoveringRadiusSphereCovering@\texttt  {LowerBoundCoveringRadiusSphereCovering}|hyperpage}{134}
+\indexentry{LowerBoundCoveringRadiusVanWee1@\texttt  {LowerBoundCoveringRadiusVanWee1}|hyperpage}{134}
+\indexentry{LowerBoundCoveringRadiusVanWee2@\texttt  {LowerBoundCoveringRadiusVanWee2}|hyperpage}{135}
+\indexentry{LowerBoundCoveringRadiusCountingExcess@\texttt  {LowerBoundCoveringRadiusCountingExcess}|hyperpage}{135}
+\indexentry{LowerBoundCoveringRadiusEmbedded1@\texttt  {LowerBoundCoveringRadiusEmbedded1}|hyperpage}{136}
+\indexentry{LowerBoundCoveringRadiusEmbedded2@\texttt  {LowerBoundCoveringRadiusEmbedded2}|hyperpage}{136}
+\indexentry{LowerBoundCoveringRadiusInduction@\texttt  {LowerBoundCoveringRadiusInduction}|hyperpage}{137}
+\indexentry{UpperBoundCoveringRadiusRedundancy@\texttt  {UpperBoundCoveringRadiusRedundancy}|hyperpage}{137}
+\indexentry{external distance|hyperpage}{138}
+\indexentry{UpperBoundCoveringRadiusDelsarte@\texttt  {UpperBoundCoveringRadiusDelsarte}|hyperpage}{138}
+\indexentry{UpperBoundCoveringRadiusStrength@\texttt  {UpperBoundCoveringRadiusStrength}|hyperpage}{138}
+\indexentry{strength|hyperpage}{138}
+\indexentry{UpperBoundCoveringRadiusGriesmerLike@\texttt  {UpperBoundCoveringRadiusGriesmerLike}|hyperpage}{138}
+\indexentry{UpperBoundCoveringRadiusCyclicCode@\texttt  {UpperBoundCoveringRadiusCyclicCode}|hyperpage}{139}
+\indexentry{KrawtchoukMat@\texttt  {KrawtchoukMat}|hyperpage}{140}
+\indexentry{Gary code|hyperpage}{140}
+\indexentry{GrayMat@\texttt  {GrayMat}|hyperpage}{140}
+\indexentry{SylvesterMat@\texttt  {SylvesterMat}|hyperpage}{140}
+\indexentry{Hadamard matrix|hyperpage}{141}
+\indexentry{HadamardMat@\texttt  {HadamardMat}|hyperpage}{141}
+\indexentry{VandermondeMat@\texttt  {VandermondeMat}|hyperpage}{141}
+\indexentry{standard form|hyperpage}{142}
+\indexentry{PutStandardForm@\texttt  {PutStandardForm}|hyperpage}{142}
+\indexentry{IsInStandardForm@\texttt  {IsInStandardForm}|hyperpage}{143}
+\indexentry{PermutedCols@\texttt  {PermutedCols}|hyperpage}{143}
+\indexentry{VerticalConversionFieldMat@\texttt  {VerticalConversionFieldMat}|hyperpage}{143}
+\indexentry{HorizontalConversionFieldMat@\texttt  {HorizontalConversionFieldMat}|hyperpage}{144}
+\indexentry{mutually orthogonal Latin squares|hyperpage}{144}
+\indexentry{Latin square|hyperpage}{144}
+\indexentry{MOLS@\texttt  {MOLS}|hyperpage}{144}
+\indexentry{IsLatinSquare@\texttt  {IsLatinSquare}|hyperpage}{145}
+\indexentry{AreMOLS@\texttt  {AreMOLS}|hyperpage}{145}
+\indexentry{CoordinateNorm@\texttt  {CoordinateNorm}|hyperpage}{146}
+\indexentry{norm of a code|hyperpage}{146}
+\indexentry{CodeNorm@\texttt  {CodeNorm}|hyperpage}{146}
+\indexentry{acceptable coordinate|hyperpage}{146}
+\indexentry{IsCoordinateAcceptable@\texttt  {IsCoordinateAcceptable}|hyperpage}{146}
+\indexentry{acceptable coordinate|hyperpage}{147}
+\indexentry{GeneralizedCodeNorm@\texttt  {GeneralizedCodeNorm}|hyperpage}{147}
+\indexentry{normal code|hyperpage}{147}
+\indexentry{IsNormalCode@\texttt  {IsNormalCode}|hyperpage}{147}
+\indexentry{weight enumerator polynomial|hyperpage}{147}
+\indexentry{CodeWeightEnumerator@\texttt  {CodeWeightEnumerator}|hyperpage}{147}
+\indexentry{CodeDistanceEnumerator@\texttt  {CodeDistanceEnumerator}|hyperpage}{148}
+\indexentry{MacWilliams transform|hyperpage}{148}
+\indexentry{CodeMacWilliamsTransform@\texttt  {CodeMacWilliamsTransform}|hyperpage}{148}
+\indexentry{density of a code|hyperpage}{148}
+\indexentry{CodeDensity@\texttt  {CodeDensity}|hyperpage}{148}
+\indexentry{perfect code|hyperpage}{149}
+\indexentry{SphereContent@\texttt  {SphereContent}|hyperpage}{149}
+\indexentry{Krawtchouk@\texttt  {Krawtchouk}|hyperpage}{149}
+\indexentry{PrimitiveUnityRoot@\texttt  {PrimitiveUnityRoot}|hyperpage}{149}
+\indexentry{PrimitivePolynomialsNr@\texttt  {PrimitivePolynomialsNr}|hyperpage}{150}
+\indexentry{IrreduciblePolynomialsNr@\texttt  {IrreduciblePolynomialsNr}|hyperpage}{150}
+\indexentry{MatrixRepresentationOfElement@\texttt  {MatrixRepresentationOfElement}|hyperpage}{150}
+\indexentry{reciprocal polynomial|hyperpage}{151}
+\indexentry{ReciprocalPolynomial@\texttt  {ReciprocalPolynomial}|hyperpage}{151}
+\indexentry{CyclotomicCosets@\texttt  {CyclotomicCosets}|hyperpage}{151}
+\indexentry{WeightHistogram@\texttt  {WeightHistogram}|hyperpage}{152}
+\indexentry{MultiplicityInList@\texttt  {MultiplicityInList}|hyperpage}{152}
+\indexentry{MostCommonInList@\texttt  {MostCommonInList}|hyperpage}{152}
+\indexentry{RotateList@\texttt  {RotateList}|hyperpage}{153}
+\indexentry{CirculantMatrix@\texttt  {CirculantMatrix}|hyperpage}{153}
+\indexentry{MatrixTransformationOnMultivariatePolynomial @\texttt  {Matrix}\discretionary {-}{}{}\texttt  {Transformation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Multivariate}\discretionary {-}{}{}\texttt  {Polynomial }|hyperpage}{153}
+\indexentry{DegreeMultivariatePolynomial@\texttt  {DegreeMultivariatePolynomial}|hyperpage}{153}
+\indexentry{DegreesMultivariatePolynomial@\texttt  {DegreesMultivariatePolynomial}|hyperpage}{154}
+\indexentry{CoefficientMultivariatePolynomial@\texttt  {CoefficientMultivariatePolynomial}|hyperpage}{154}
+\indexentry{SolveLinearSystem@\texttt  {SolveLinearSystem}|hyperpage}{155}
+\indexentry{GuavaVersion@\texttt  {GuavaVersion}|hyperpage}{155}
+\indexentry{ZechLog@\texttt  {ZechLog}|hyperpage}{155}
+\indexentry{CoefficientToPolynomial@\texttt  {CoefficientToPolynomial}|hyperpage}{156}
+\indexentry{DegreesMonomialTerm@\texttt  {DegreesMonomialTerm}|hyperpage}{156}
+\indexentry{DivisorsMultivariatePolynomial@\texttt  {DivisorsMultivariatePolynomial}|hyperpage}{157}
diff --git a/doc/guava.ilg b/doc/guava.ilg
new file mode 100644
index 0000000..d44e873
--- /dev/null
+++ b/doc/guava.ilg
@@ -0,0 +1,6 @@
+This is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support).
+Scanning input file guava.idx....done (401 entries accepted, 0 rejected).
+Sorting entries......done (4001 comparisons).
+Generating output file guava.ind....done (472 lines written, 0 warnings).
+Output written in guava.ind.
+Transcript written in guava.ilg.
diff --git a/doc/guava.ind b/doc/guava.ind
new file mode 100644
index 0000000..a277b2b
--- /dev/null
+++ b/doc/guava.ind
@@ -0,0 +1,472 @@
+\begin{theindex}
+
+  \item $A(n,d)$, \hyperpage{128}
+  \item $GF(p)$, \hyperpage{17}
+  \item $GF(q)$, \hyperpage{17}
+  \item $t(n,k)$, \hyperpage{53}
+  \item \texttt  {*}, \hyperpage{31}
+  \item \texttt  {+}, \hyperpage{23}, \hyperpage{31}
+  \item \texttt  {-}, \hyperpage{23}
+  \item \texttt  {=}, \hyperpage{22}, \hyperpage{30}
+  \item {\textless} {\textgreater}, \hyperpage{22}, \hyperpage{30}
+
+  \indexspace
+
+  \item acceptable coordinate, \hyperpage{146, 147}
+  \item \texttt  {AClosestVectorComb..MatFFEVecFFECoords}, 
+		\hyperpage{15}
+  \item \texttt  {AClosestVectorCombinationsMatFFEVecFFE}, 
+		\hyperpage{14}
+  \item \texttt  {ActionMoebiusTransformationOnDivisorP1 }, 
+		\hyperpage{101}
+  \item \texttt  {ActionMoebiusTransformationOnFunction }, 
+		\hyperpage{101}
+  \item \texttt  {AddedElementsCode}, \hyperpage{111}
+  \item affine code, \hyperpage{37}
+  \item \texttt  {AffineCurve}, \hyperpage{93}
+  \item \texttt  {AffinePointsOnCurve}, \hyperpage{94}
+  \item \texttt  {AlternantCode}, \hyperpage{71}
+  \item \texttt  {AmalgamatedDirectSumCode}, \hyperpage{120}
+  \item \texttt  {AreMOLS}, \hyperpage{145}
+  \item \texttt  {AsSSortedList}, \hyperpage{41}
+  \item \texttt  {AugmentedCode}, \hyperpage{110}
+  \item \texttt  {AutomorphismGroup}, \hyperpage{39}
+
+  \indexspace
+
+  \item \texttt  {BCHCode}, \hyperpage{82}
+  \item \texttt  {BestKnownLinearCode}, \hyperpage{75}
+  \item \texttt  {BinaryGolayCode}, \hyperpage{78}
+  \item \texttt  {BitFlipDecoder}, \hyperpage{59}
+  \item \texttt  {BlockwiseDirectSumCode}, \hyperpage{121}
+  \item Bose distance, \hyperpage{82}
+  \item bound, Gilbert-Varshamov lower, \hyperpage{129}
+  \item bound, sphere packing lower, \hyperpage{129}
+  \item bounds, Elias, \hyperpage{127}
+  \item bounds, Griesmer, \hyperpage{127}
+  \item bounds, Hamming, \hyperpage{126}
+  \item bounds, Johnson, \hyperpage{126}
+  \item bounds, Plotkin, \hyperpage{127}
+  \item bounds, Singleton, \hyperpage{125}
+  \item bounds, sphere packing bound, \hyperpage{126}
+  \item \texttt  {BoundsCoveringRadius}, \hyperpage{131}
+  \item \texttt  {BoundsMinimumDistance}, \hyperpage{130}
+  \item \texttt  {BZCode}, \hyperpage{123}
+  \item \texttt  {BZCodeNC}, \hyperpage{124}
+
+  \indexspace
+
+  \item check polynomial, \hyperpage{29}, \hyperpage{80}
+  \item \texttt  {CheckMat}, \hyperpage{44}
+  \item \texttt  {CheckMatCode}, \hyperpage{70}
+  \item \texttt  {CheckMatCodeMutable}, \hyperpage{70}
+  \item \texttt  {CheckPol}, \hyperpage{45}
+  \item \texttt  {CheckPolCode}, \hyperpage{81}
+  \item \texttt  {CirculantMatrix}, \hyperpage{153}
+  \item code, \hyperpage{28}
+  \item code, $(n,M,d)$, \hyperpage{28}
+  \item code, $[n, k, d]r$, \hyperpage{29}
+  \item code, AG, \hyperpage{93}
+  \item code, alternant, \hyperpage{71}
+  \item code, Bose-Chaudhuri-Hockenghem, \hyperpage{82}
+  \item code, conference, \hyperpage{66}
+  \item code, Cordaro-Wagner, \hyperpage{73}
+  \item code, cyclic, \hyperpage{29}
+  \item code, Davydov, \hyperpage{77}
+  \item code, doubly-even, \hyperpage{36}
+  \item code, element test, \hyperpage{32}
+  \item code, elements of, \hyperpage{28}
+  \item code, evaluation, \hyperpage{90}
+  \item code, even, \hyperpage{36}
+  \item code, Fire, \hyperpage{85}
+  \item code, Gabidulin, \hyperpage{77}
+  \item code, Golay (binary), \hyperpage{78}
+  \item code, Golay (ternary), \hyperpage{79}
+  \item code, Goppa (classical), \hyperpage{71}
+  \item code, greedy, \hyperpage{68}
+  \item code, Hadamard, \hyperpage{66}
+  \item code, Hamming, \hyperpage{70}
+  \item code, linear, \hyperpage{28}
+  \item code, maximum distance separable, \hyperpage{35}
+  \item code, Nordstrom-Robinson, \hyperpage{68}
+  \item code, perfect, \hyperpage{34}
+  \item code, Reed-Muller, \hyperpage{71}
+  \item code, Reed-Solomon, \hyperpage{82}
+  \item code, self-dual, \hyperpage{35}
+  \item code, self-orthogonal, \hyperpage{35}
+  \item code, singly-even, \hyperpage{36}
+  \item code, Srivastava, \hyperpage{72}
+  \item code, subcode, \hyperpage{33}
+  \item code, Tombak, \hyperpage{77}
+  \item code, toric, \hyperpage{92}
+  \item code, unrestricted, \hyperpage{28}
+  \item \texttt  {CodeDensity}, \hyperpage{148}
+  \item \texttt  {CodeDistanceEnumerator}, \hyperpage{148}
+  \item \texttt  {CodeIsomorphism}, \hyperpage{38}
+  \item \texttt  {CodeMacWilliamsTransform}, \hyperpage{148}
+  \item \texttt  {CodeNorm}, \hyperpage{146}
+  \item codes, addition, \hyperpage{31}
+  \item codes, decoding, \hyperpage{32}
+  \item codes, direct sum, \hyperpage{31}
+  \item codes, encoding, \hyperpage{31}
+  \item codes, product, \hyperpage{31}
+  \item \texttt  {CodeWeightEnumerator}, \hyperpage{147}
+  \item \texttt  {Codeword}, \hyperpage{20}
+  \item \texttt  {CodewordNr}, \hyperpage{21}
+  \item codewords, addition, \hyperpage{23}
+  \item codewords, cosets, \hyperpage{23}
+  \item codewords, subtraction, \hyperpage{23}
+  \item \texttt  {CoefficientMultivariatePolynomial}, \hyperpage{154}
+  \item \texttt  {CoefficientToPolynomial}, \hyperpage{156}
+  \item conference matrix, \hyperpage{67}
+  \item \texttt  {ConferenceCode}, \hyperpage{66}
+  \item \texttt  {ConstantWeightSubcode}, \hyperpage{116}
+  \item \texttt  {ConstructionBCode}, \hyperpage{113}
+  \item \texttt  {ConstructionXCode}, \hyperpage{121}
+  \item \texttt  {ConstructionXXCode}, \hyperpage{122}
+  \item \texttt  {ConversionFieldCode}, \hyperpage{115}
+  \item \texttt  {ConwayPolynomial}, \hyperpage{17}
+  \item \texttt  {CoordinateNorm}, \hyperpage{146}
+  \item \texttt  {CordaroWagnerCode}, \hyperpage{73}
+  \item coset, \hyperpage{23}
+  \item \texttt  {CosetCode}, \hyperpage{115}
+  \item covering code, \hyperpage{53}
+  \item \texttt  {CoveringRadius}, \hyperpage{53}
+  \item cyclic, \hyperpage{88}
+  \item \texttt  {CyclicCodes}, \hyperpage{86}
+  \item \texttt  {CyclicMDSCode}, \hyperpage{88}
+  \item \texttt  {CyclotomicCosets}, \hyperpage{151}
+
+  \indexspace
+
+  \item \texttt  {DavydovCode}, \hyperpage{77}
+  \item \texttt  {Decode}, \hyperpage{56}
+  \item \texttt  {Decodeword}, \hyperpage{57}
+  \item \texttt  {DecreaseMinimumDistanceUpperBound}, \hyperpage{51}
+  \item defining polynomial, \hyperpage{17}
+  \item degree, \hyperpage{96}
+  \item \texttt  {DegreeMultivariatePolynomial}, \hyperpage{153}
+  \item \texttt  {DegreesMonomialTerm}, \hyperpage{156}
+  \item \texttt  {DegreesMultivariatePolynomial}, \hyperpage{154}
+  \item density of a code, \hyperpage{148}
+  \item \texttt  {Dimension}, \hyperpage{41}
+  \item \texttt  {DirectProductCode}, \hyperpage{118}
+  \item \texttt  {DirectSumCode}, \hyperpage{118}
+  \item \texttt  {Display}, \hyperpage{43}
+  \item \texttt  {DisplayBoundsInfo}, \hyperpage{43}
+  \item distance, \hyperpage{55}
+  \item \texttt  {DistanceCodeword}, \hyperpage{26}
+  \item \texttt  {DistancesDistribution}, \hyperpage{55}
+  \item \texttt  {DistancesDistributionMatFFEVecFFE}, \hyperpage{15}
+  \item \texttt  {DistancesDistributionVecFFEsVecFFE}, \hyperpage{16}
+  \item \texttt  {DistanceVecFFE}, \hyperpage{16}
+  \item divisor, \hyperpage{95}
+  \item \texttt  {DivisorAddition }, \hyperpage{96}
+  \item \texttt  {DivisorAutomorphismGroupP1 }, \hyperpage{102}
+  \item \texttt  {DivisorDegree }, \hyperpage{96}
+  \item \texttt  {DivisorGCD }, \hyperpage{97}
+  \item \texttt  {DivisorIsZero }, \hyperpage{97}
+  \item \texttt  {DivisorLCM }, \hyperpage{97}
+  \item \texttt  {DivisorNegate }, \hyperpage{97}
+  \item \texttt  {DivisorOfRationalFunctionP1 }, \hyperpage{99}
+  \item \texttt  {DivisorOnAffineCurve}, \hyperpage{96}
+  \item \texttt  {DivisorsEqual }, \hyperpage{97}
+  \item \texttt  {DivisorsMultivariatePolynomial}, \hyperpage{157}
+  \item doubly-even, \hyperpage{35}
+  \item \texttt  {DualCode}, \hyperpage{114}
+
+  \indexspace
+
+  \item \texttt  {ElementsCode}, \hyperpage{65}
+  \item encoder map, \hyperpage{31}
+  \item \texttt  {EnlargedGabidulinCode}, \hyperpage{77}
+  \item \texttt  {EnlargedTombakCode}, \hyperpage{77}
+  \item equivalent codes, \hyperpage{38}
+  \item \texttt  {EvaluationBivariateCode}, \hyperpage{104}
+  \item \texttt  {EvaluationBivariateCodeNC}, \hyperpage{104}
+  \item \texttt  {EvaluationCode}, \hyperpage{90}
+  \item even, \hyperpage{36}
+  \item \texttt  {EvenWeightSubcode}, \hyperpage{108}
+  \item \texttt  {ExhaustiveSearchCoveringRadius}, \hyperpage{132}
+  \item \texttt  {ExpurgatedCode}, \hyperpage{109}
+  \item \texttt  {ExtendedBinaryGolayCode}, \hyperpage{78}
+  \item \texttt  {ExtendedCode}, \hyperpage{107}
+  \item \texttt  {ExtendedDirectSumCode}, \hyperpage{120}
+  \item \texttt  {ExtendedReedSolomonCode}, \hyperpage{83}
+  \item \texttt  {ExtendedTernaryGolayCode}, \hyperpage{79}
+  \item external distance, \hyperpage{138}
+
+  \indexspace
+
+  \item \texttt  {FerreroDesignCode}, \hyperpage{73}
+  \item \texttt  {FireCode}, \hyperpage{85}
+  \item \texttt  {FourNegacirculantSelfDualCode}, \hyperpage{89}
+  \item \texttt  {FourNegacirculantSelfDualCodeNC}, \hyperpage{90}
+
+  \indexspace
+
+  \item \texttt  {GabidulinCode}, \hyperpage{77}
+  \item Gary code, \hyperpage{140}
+  \item \texttt  {GeneralizedCodeNorm}, \hyperpage{147}
+  \item \texttt  {GeneralizedReedMullerCode}, \hyperpage{91}
+  \item \texttt  {GeneralizedReedSolomonCode}, \hyperpage{90}
+  \item \texttt  {GeneralizedReedSolomonDecoderGao}, \hyperpage{58}
+  \item \texttt  {GeneralizedReedSolomonListDecoder}, \hyperpage{58}
+  \item \texttt  {GeneralizedSrivastavaCode}, \hyperpage{72}
+  \item \texttt  {GeneralLowerBoundCoveringRadius}, \hyperpage{133}
+  \item \texttt  {GeneralUpperBoundCoveringRadius}, \hyperpage{133}
+  \item generator polynomial, \hyperpage{29}, \hyperpage{80}
+  \item \texttt  {GeneratorMat}, \hyperpage{44}
+  \item \texttt  {GeneratorMatCode}, \hyperpage{69}
+  \item \texttt  {GeneratorPol}, \hyperpage{45}
+  \item \texttt  {GeneratorPolCode}, \hyperpage{80}
+  \item \texttt  {GenusCurve}, \hyperpage{94}
+  \item \texttt  {GoppaCode}, \hyperpage{72}
+  \item \texttt  {GoppaCodeClassical}, \hyperpage{104}
+  \item \texttt  {GOrbitPoint }, \hyperpage{94}
+  \item \texttt  {GrayMat}, \hyperpage{140}
+  \item greatest common divisor, \hyperpage{97}
+  \item \texttt  {GreedyCode}, \hyperpage{68}
+  \item Griesmer code, \hyperpage{128}
+  \item \texttt  {GuavaVersion}, \hyperpage{155}
+
+  \indexspace
+
+  \item Hadamard matrix, \hyperpage{66}, \hyperpage{141}
+  \item \texttt  {HadamardCode}, \hyperpage{66}
+  \item \texttt  {HadamardMat}, \hyperpage{141}
+  \item Hamming metric, \hyperpage{16}
+  \item \texttt  {HammingCode}, \hyperpage{71}
+  \item \texttt  {HorizontalConversionFieldMat}, \hyperpage{144}
+  \item hull, \hyperpage{119}
+
+  \indexspace
+
+  \item \texttt  {in}, \hyperpage{32}
+  \item \texttt  {IncreaseCoveringRadiusLowerBound}, \hyperpage{131}
+  \item information bits, \hyperpage{32}
+  \item \texttt  {InformationWord}, \hyperpage{32}
+  \item \texttt  {InnerDistribution}, \hyperpage{55}
+  \item \texttt  {IntersectionCode}, \hyperpage{119}
+  \item \texttt  {IrreduciblePolynomialsNr}, \hyperpage{150}
+  \item \texttt  {IsAction}\discretionary {-}{}{}\texttt  {Moebius}\discretionary {-}{}{}\texttt  {Transformation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Divisor}\discretionary {-}{}{}\texttt  {DefinedP1 }, 
+		\hyperpage{101}
+  \item \texttt  {IsAffineCode}, \hyperpage{37}
+  \item \texttt  {IsAlmostAffineCode}, \hyperpage{38}
+  \item IsCheapConwayPolynomial, \hyperpage{17}
+  \item \texttt  {IsCode}, \hyperpage{33}
+  \item \texttt  {IsCodeword}, \hyperpage{22}
+  \item \texttt  {IsCoordinateAcceptable}, \hyperpage{146}
+  \item \texttt  {IsCyclicCode}, \hyperpage{33}
+  \item \texttt  {IsDoublyEvenCode}, \hyperpage{35}
+  \item \texttt  {IsEquivalent}, \hyperpage{38}
+  \item \texttt  {IsEvenCode}, \hyperpage{36}
+  \item \texttt  {IsFinite}, \hyperpage{40}
+  \item \texttt  {IsGriesmerCode}, \hyperpage{128}
+  \item \texttt  {IsInStandardForm}, \hyperpage{143}
+  \item \texttt  {IsLatinSquare}, \hyperpage{145}
+  \item \texttt  {IsLinearCode}, \hyperpage{33}
+  \item \texttt  {IsMDSCode}, \hyperpage{34}
+  \item \texttt  {IsNormalCode}, \hyperpage{147}
+  \item \texttt  {IsPerfectCode}, \hyperpage{34}
+  \item IsPrimitivePolynomial, \hyperpage{18}
+  \item \texttt  {IsSelfComplementaryCode}, \hyperpage{37}
+  \item \texttt  {IsSelfDualCode}, \hyperpage{35}
+  \item \texttt  {IsSelfOrthogonalCode}, \hyperpage{35}
+  \item \texttt  {IsSinglyEvenCode}, \hyperpage{36}
+  \item \texttt  {IsSubset}, \hyperpage{33}
+
+  \indexspace
+
+  \item \texttt  {Krawtchouk}, \hyperpage{149}
+  \item \texttt  {KrawtchoukMat}, \hyperpage{140}
+
+  \indexspace
+
+  \item Latin square, \hyperpage{144}
+  \item least common multiple, \hyperpage{97}
+  \item \texttt  {LeftActingDomain}, \hyperpage{41}
+  \item length, \hyperpage{28}
+  \item \texttt  {LengthenedCode}, \hyperpage{112}
+  \item \texttt  {LexiCode}, \hyperpage{69}
+  \item linear code, \hyperpage{19}
+  \item \texttt  {LowerBoundCoveringRadiusCountingExcess}, 
+		\hyperpage{135}
+  \item \texttt  {LowerBoundCoveringRadiusEmbedded1}, \hyperpage{136}
+  \item \texttt  {LowerBoundCoveringRadiusEmbedded2}, \hyperpage{136}
+  \item \texttt  {LowerBoundCoveringRadiusInduction}, \hyperpage{137}
+  \item \texttt  {LowerBoundCoveringRadiusSphereCovering}, 
+		\hyperpage{134}
+  \item \texttt  {LowerBoundCoveringRadiusVanWee1}, \hyperpage{134}
+  \item \texttt  {LowerBoundCoveringRadiusVanWee2}, \hyperpage{135}
+  \item \texttt  {LowerBoundGilbertVarshamov}, \hyperpage{129}
+  \item \texttt  {LowerBoundMinimumDistance}, \hyperpage{129}
+  \item \texttt  {LowerBoundSpherePacking}, \hyperpage{129}
+
+  \indexspace
+
+  \item MacWilliams transform, \hyperpage{148}
+  \item \texttt  {MatrixRepresentationOfElement}, \hyperpage{150}
+  \item \texttt  {Matrix}\discretionary {-}{}{}\texttt  {Representation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Riemann}\discretionary {-}{}{}\texttt  {Roch}\discretionary {-}{}{}\texttt  {SpaceP1 }, 
+		\hyperpage{103}
+  \item \texttt  {Matrix}\discretionary {-}{}{}\texttt  {Transformation}\discretionary {-}{}{}\texttt  {On}\discretionary {-}{}{}\texttt  {Multivariate}\discretionary {-}{}{}\texttt  {Polynomial }, 
+		\hyperpage{153}
+  \item maximum distance separable, \hyperpage{126}
+  \item MDS, \hyperpage{35}, \hyperpage{88}
+  \item minimum distance, \hyperpage{28}
+  \item \texttt  {MinimumDistance}, \hyperpage{46}
+  \item \texttt  {MinimumDistanceLeon}, \hyperpage{47}
+  \item \texttt  {MinimumDistanceRandom}, \hyperpage{51}
+  \item \texttt  {MinimumWeight}, \hyperpage{48}
+  \item \texttt  {MinimumWeightWords}, \hyperpage{54}
+  \item \texttt  {MoebiusTransformation }, \hyperpage{101}
+  \item \texttt  {MOLS}, \hyperpage{144}
+  \item \texttt  {MOLSCode}, \hyperpage{67}
+  \item \texttt  {MostCommonInList}, \hyperpage{152}
+  \item \texttt  {MultiplicityInList}, \hyperpage{152}
+  \item mutually orthogonal Latin squares, \hyperpage{144}
+
+  \indexspace
+
+  \item \texttt  {NearestNeighborDecodewords}, \hyperpage{61}
+  \item \texttt  {NearestNeighborGRSDecodewords}, \hyperpage{60}
+  \item \texttt  {NordstromRobinsonCode}, \hyperpage{68}
+  \item norm of a code, \hyperpage{146}
+  \item normal code, \hyperpage{147}
+  \item not =, \hyperpage{22}, \hyperpage{30}
+  \item \texttt  {NrCyclicCodes}, \hyperpage{86}
+  \item \texttt  {NullCode}, \hyperpage{86}
+  \item \texttt  {NullWord}, \hyperpage{26}
+
+  \indexspace
+
+  \item \texttt  {OnePointAGCode}, \hyperpage{105}
+  \item \texttt  {OptimalityCode}, \hyperpage{75}
+  \item order of polynomial, \hyperpage{85}
+  \item \texttt  {OuterDistribution}, \hyperpage{56}
+
+  \indexspace
+
+  \item Parity check, \hyperpage{107}
+  \item parity check matrix, \hyperpage{28}
+  \item perfect, \hyperpage{126}
+  \item perfect code, \hyperpage{149}
+  \item permutation equivalent codes, \hyperpage{38}
+  \item PermutationAutomorphismGroup, \hyperpage{39}
+  \item \texttt  {PermutationAutomorphismGroup}, \hyperpage{40}
+  \item \texttt  {PermutationDecode}, \hyperpage{63}
+  \item \texttt  {PermutationDecodeNC}, \hyperpage{63}
+  \item \texttt  {PermutedCode}, \hyperpage{109}
+  \item \texttt  {PermutedCols}, \hyperpage{143}
+  \item \texttt  {PiecewiseConstantCode}, \hyperpage{117}
+  \item point, \hyperpage{93}
+  \item \texttt  {PolyCodeword}, \hyperpage{24}
+  \item primitive element, \hyperpage{17}
+  \item \texttt  {PrimitivePolynomialsNr}, \hyperpage{150}
+  \item \texttt  {PrimitiveUnityRoot}, \hyperpage{149}
+  \item \texttt  {Print}, \hyperpage{42}
+  \item \texttt  {PuncturedCode}, \hyperpage{108}
+  \item \texttt  {PutStandardForm}, \hyperpage{142}
+
+  \indexspace
+
+  \item \texttt  {QQRCode}, \hyperpage{84}
+  \item \texttt  {QQRCodeNC}, \hyperpage{84}
+  \item \texttt  {QRCode}, \hyperpage{83}
+  \item \texttt  {QuasiCyclicCode}, \hyperpage{87}
+
+  \indexspace
+
+  \item \texttt  {RandomCode}, \hyperpage{68}
+  \item \texttt  {RandomLinearCode}, \hyperpage{74}
+  \item \texttt  {RandomPrimitivePolynomial}, \hyperpage{18}
+  \item reciprocal polynomial, \hyperpage{151}
+  \item \texttt  {ReciprocalPolynomial}, \hyperpage{151}
+  \item \texttt  {Redundancy}, \hyperpage{46}
+  \item \texttt  {ReedMullerCode}, \hyperpage{71}
+  \item \texttt  {ReedSolomonCode}, \hyperpage{83}
+  \item \texttt  {RemovedElementsCode}, \hyperpage{110}
+  \item \texttt  {RepetitionCode}, \hyperpage{86}
+  \item \texttt  {ResidueCode}, \hyperpage{113}
+  \item \texttt  {RiemannRochSpaceBasisFunctionP1 }, \hyperpage{99}
+  \item \texttt  {RiemannRochSpaceBasisP1 }, \hyperpage{100}
+  \item \texttt  {RootsCode}, \hyperpage{81}
+  \item \texttt  {RootsOfCode}, \hyperpage{45}
+  \item \texttt  {RotateList}, \hyperpage{153}
+
+  \indexspace
+
+  \item self complementary code, \hyperpage{37}
+  \item self-dual, \hyperpage{90}, \hyperpage{114}
+  \item self-orthogonal, \hyperpage{35}
+  \item \texttt  {SetCoveringRadius}, \hyperpage{54}
+  \item \texttt  {ShortenedCode}, \hyperpage{111}
+  \item singly-even, \hyperpage{36}
+  \item \texttt  {Size}, \hyperpage{40}
+  \item size, \hyperpage{28}
+  \item \texttt  {SolveLinearSystem}, \hyperpage{155}
+  \item \texttt  {SphereContent}, \hyperpage{149}
+  \item \texttt  {SrivastavaCode}, \hyperpage{73}
+  \item standard form, \hyperpage{142}
+  \item \texttt  {StandardArray}, \hyperpage{62}
+  \item \texttt  {StandardFormCode}, \hyperpage{116}
+  \item strength, \hyperpage{138}
+  \item \texttt  {String}, \hyperpage{42}
+  \item \texttt  {SubCode}, \hyperpage{113}
+  \item \texttt  {Support}, \hyperpage{26}
+  \item support, \hyperpage{95}
+  \item \texttt  {SylvesterMat}, \hyperpage{140}
+  \item \texttt  {Syndrome}, \hyperpage{61}
+  \item syndrome table, \hyperpage{62}
+  \item \texttt  {SyndromeTable}, \hyperpage{62}
+
+  \indexspace
+
+  \item \texttt  {TernaryGolayCode}, \hyperpage{79}
+  \item \texttt  {TombakCode}, \hyperpage{77}
+  \item \texttt  {ToricCode}, \hyperpage{92}
+  \item \texttt  {ToricPoints}, \hyperpage{92}
+  \item \texttt  {TraceCode}, \hyperpage{115}
+  \item \texttt  {TreatAsPoly}, \hyperpage{25}
+  \item \texttt  {TreatAsVector}, \hyperpage{25}
+
+  \indexspace
+
+  \item \texttt  {UnionCode}, \hyperpage{119}
+  \item \texttt  {UpperBound}, \hyperpage{128}
+  \item \texttt  {UpperBoundCoveringRadiusCyclicCode}, \hyperpage{139}
+  \item \texttt  {UpperBoundCoveringRadiusDelsarte}, \hyperpage{138}
+  \item \texttt  {UpperBoundCoveringRadiusGriesmerLike}, 
+		\hyperpage{138}
+  \item \texttt  {UpperBoundCoveringRadiusRedundancy}, \hyperpage{137}
+  \item \texttt  {UpperBoundCoveringRadiusStrength}, \hyperpage{138}
+  \item \texttt  {UpperBoundElias}, \hyperpage{127}
+  \item \texttt  {UpperBoundGriesmer}, \hyperpage{128}
+  \item \texttt  {UpperBoundHamming}, \hyperpage{126}
+  \item \texttt  {UpperBoundJohnson}, \hyperpage{126}
+  \item \texttt  {UpperBoundMinimumDistance}, \hyperpage{130}
+  \item \texttt  {UpperBoundPlotkin}, \hyperpage{127}
+  \item \texttt  {UpperBoundSingleton}, \hyperpage{126}
+  \item \texttt  {UUVCode}, \hyperpage{118}
+
+  \indexspace
+
+  \item \texttt  {VandermondeMat}, \hyperpage{141}
+  \item \texttt  {VectorCodeword}, \hyperpage{24}
+  \item \texttt  {VerticalConversionFieldMat}, \hyperpage{143}
+
+  \indexspace
+
+  \item weight enumerator polynomial, \hyperpage{147}
+  \item \texttt  {WeightCodeword}, \hyperpage{27}
+  \item \texttt  {WeightDistribution}, \hyperpage{54}
+  \item \texttt  {WeightHistogram}, \hyperpage{152}
+  \item \texttt  {WeightVecFFE}, \hyperpage{16}
+  \item \texttt  {WholeSpaceCode}, \hyperpage{85}
+  \item \texttt  {WordLength}, \hyperpage{46}
+
+  \indexspace
+
+  \item \texttt  {ZechLog}, \hyperpage{155}
+
+\end{theindex}
diff --git a/doc/guava.log b/doc/guava.log
new file mode 100644
index 0000000..e59a6dd
--- /dev/null
+++ b/doc/guava.log
@@ -0,0 +1,2102 @@
+This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2007.12.9)  25 APR 2008 21:21
+entering extended mode
+ %&-line parsing enabled.
+**guava
+(./guava.tex
+LaTeX2e <2005/12/01>
+Babel <v3.8h> and hyphenation patterns for english, usenglishmax, dumylang, noh
+yphenation, loaded.
+(/usr/share/texmf-texlive/tex/latex/base/report.cls
+Document Class: report 2005/09/16 v1.4f Standard LaTeX document class
+(/usr/share/texmf-texlive/tex/latex/base/size11.clo
+File: size11.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
+)
+\c at part=\count79
+\c at chapter=\count80
+\c at section=\count81
+\c at subsection=\count82
+\c at subsubsection=\count83
+\c at paragraph=\count84
+\c at subparagraph=\count85
+\c at figure=\count86
+\c at table=\count87
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/usr/share/texmf-texlive/tex/latex/ltxmisc/a4wide.sty
+Package: a4wide 1994/08/30
+
+(/usr/share/texmf-texlive/tex/latex/ntgclass/a4.sty
+Package: a4 2004/04/15 v1.2g A4 based page layout
+))
+(/usr/share/texmf-texlive/tex/latex/amsfonts/amssymb.sty
+Package: amssymb 2002/01/22 v2.2d
+
+(/usr/share/texmf-texlive/tex/latex/amsfonts/amsfonts.sty
+Package: amsfonts 2001/10/25 v2.2f
+\@emptytoks=\toks14
+\symAMSa=\mathgroup4
+\symAMSb=\mathgroup5
+LaTeX Font Info:    Overwriting math alphabet `\mathfrak' in version `bold'
+(Font)                  U/euf/m/n --> U/euf/b/n on input line 132.
+))
+(/usr/share/texmf-texlive/tex/latex/base/inputenc.sty
+Package: inputenc 2006/05/05 v1.1b Input encoding file
+\inpenc at prehook=\toks15
+\inpenc at posthook=\toks16
+
+(/usr/share/texmf-texlive/tex/latex/base/latin1.def
+File: latin1.def 2006/05/05 v1.1b Input encoding file
+))
+(/usr/share/texmf-texlive/tex/latex/base/makeidx.sty
+Package: makeidx 2000/03/29 v1.0m Standard LaTeX package
+)
+\@indexfile=\write3
+\openout3 = `guava.idx'.
+
+
+Writing index file guava.idx
+(/usr/share/texmf-texlive/tex/latex/graphics/color.sty
+Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC)
+
+(/etc/texmf/tex/latex/config/color.cfg
+File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
+)
+Package color Info: Driver file: pdftex.def on input line 130.
+
+(/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def
+File: pdftex.def 2007/01/08 v0.04d Graphics/color for pdfTeX
+\Gread at gobject=\count88
+))
+(/usr/share/texmf-texlive/tex/latex/fancyvrb/fancyvrb.sty
+Package: fancyvrb 1998/07/17
+
+Style option: `fancyvrb' v2.6, with DG/SPQR fixes <1998/07/17> (tvz)
+(/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV at toks@=\toks17
+)
+\FV at CodeLineNo=\count89
+\FV at InFile=\read1
+\FV at TabBox=\box26
+\c at FancyVerbLine=\count90
+\FV at StepNumber=\count91
+\FV at OutFile=\write4
+
+No file fancyvrb.cfg.
+) (/usr/share/texmf-texlive/tex/latex/pslatex/pslatex.sty
+Package: pslatex 1996/07/24 v1.2 pslatex emulation (DPC)
+LaTeX Font Info:    Redeclaring symbol font `operators' on input line 65.
+LaTeX Font Info:    Overwriting symbol font `operators' in version `normal'
+(Font)                  OT1/cmr/m/n --> OT1/ptmcm/m/n on input line 65.
+LaTeX Font Info:    Overwriting symbol font `operators' in version `bold'
+(Font)                  OT1/cmr/bx/n --> OT1/ptmcm/m/n on input line 65.
+LaTeX Font Info:    Redeclaring symbol font `letters' on input line 66.
+LaTeX Font Info:    Overwriting symbol font `letters' in version `normal'
+(Font)                  OML/cmm/m/it --> OML/ptmcm/m/it on input line 66.
+LaTeX Font Info:    Overwriting symbol font `letters' in version `bold'
+(Font)                  OML/cmm/b/it --> OML/ptmcm/m/it on input line 66.
+LaTeX Font Info:    Redeclaring symbol font `symbols' on input line 67.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `normal'
+(Font)                  OMS/cmsy/m/n --> OMS/pzccm/m/n on input line 67.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `bold'
+(Font)                  OMS/cmsy/b/n --> OMS/pzccm/m/n on input line 67.
+LaTeX Font Info:    Redeclaring symbol font `largesymbols' on input line 68.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `normal'
+(Font)                  OMX/cmex/m/n --> OMX/psycm/m/n on input line 68.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `bold'
+(Font)                  OMX/cmex/m/n --> OMX/psycm/m/n on input line 68.
+\symbold=\mathgroup6
+\symitalic=\mathgroup7
+LaTeX Font Info:    Redeclaring math alphabet \mathbf on input line 74.
+LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `normal'
+(Font)                  OT1/cmr/bx/n --> OT1/ptm/bx/n on input line 74.
+LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `bold'
+(Font)                  OT1/cmr/bx/n --> OT1/ptm/bx/n on input line 74.
+LaTeX Font Info:    Redeclaring math alphabet \mathit on input line 75.
+LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `normal'
+(Font)                  OT1/cmr/m/it --> OT1/ptm/m/it on input line 75.
+LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `bold'
+(Font)                  OT1/cmr/bx/it --> OT1/ptm/m/it on input line 75.
+)
+(/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2007/02/07 v6.75r Hypertext links for LaTeX
+\@linkdim=\dimen103
+\Hy at linkcounter=\count92
+\Hy at pagecounter=\count93
+
+(/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2007/02/07 v6.75r Hyperref: PDFDocEncoding definition (HO)
+)
+(/etc/texmf/tex/latex/config/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+)
+(/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2006/08/22 v2.4 Connects package keyval with LaTeX options (
+HO)
+)
+Package hyperref Info: Option `bookmarks' set `false' on input line 2238.
+Package hyperref Info: Option `colorlinks' set `true' on input line 2238.
+Package hyperref Info: Option `breaklinks' set `true' on input line 2238.
+Package hyperref Info: Hyper figures OFF on input line 2288.
+Package hyperref Info: Link nesting OFF on input line 2293.
+Package hyperref Info: Hyper index ON on input line 2296.
+Package hyperref Info: Plain pages OFF on input line 2303.
+Package hyperref Info: Backreferencing ON on input line 2306.
+
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks OFF on input line 2450.
+(/usr/share/texmf-texlive/tex/latex/hyperref/backref.sty
+Package: backref 2006/10/06 v1.27 Bibliographical back referencing
+)
+(/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty
+\Urlmuskip=\muskip10
+Package: url 2005/06/27  ver 3.2  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 2599.
+\Fld at menulength=\count94
+\Field at Width=\dimen104
+\Fld at charsize=\dimen105
+\Choice at toks=\toks18
+\Field at toks=\toks19
+Package hyperref Info: Hyper figures OFF on input line 3102.
+Package hyperref Info: Link nesting OFF on input line 3107.
+Package hyperref Info: Hyper index ON on input line 3110.
+Package hyperref Info: backreferencing ON on input line 3115.
+Package hyperref Info: Link coloring ON on input line 3120.
+\Hy at abspage=\count95
+\c at Item=\count96
+\c at Hfootnote=\count97
+)
+*hyperref using driver hpdftex*
+(/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2007/02/07 v6.75r Hyperref driver for pdfTeX
+\Fld at listcount=\count98
+)
+\pagenrlog=\write5
+\openout5 = `guava.pnr'.
+
+ (./guava.aux
+
+LaTeX Warning: Label `+' multiply defined.
+
+
+LaTeX Warning: Label `=' multiply defined.
+
+
+LaTeX Warning: Label `+' multiply defined.
+
+
+LaTeX Warning: Label `*' multiply defined.
+
+)
+\openout1 = `guava.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for OMS/pzccm/m/n on input line 47.
+LaTeX Font Info:    Try loading font information for OMS+pzccm on input line 47
+.
+ (/usr/share/texmf-texlive/tex/latex/psnfss/omspzccm.fd
+File: omspzccm.fd 2000/01/03 Fontinst v1.801 font definitions for OMS/pzccm.
+)
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 47.
+LaTeX Font Info:    ... okay on input line 47.
+Package hyperref Info: Link coloring ON on input line 47.
+
+(/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty
+Package: nameref 2006/12/27 v2.28 Cross-referencing by name of section
+
+(/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty
+Package: refcount 2006/02/20 v3.0 Data extraction from references (HO)
+)
+\c at section@level=\count99
+)
+LaTeX Info: Redefining \ref on input line 47.
+LaTeX Info: Redefining \pageref on input line 47.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <24.88> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 51.
+LaTeX Font Info:    Font shape `OT1/phv/bx/n' in size <24.88> not available
+(Font)              Font shape `OT1/phv/b/n' tried instead on input line 51.
+LaTeX Font Info:    Font shape `OT1/phv/b/n' will be
+(Font)              scaled to size 22.39185pt on input line 51.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <14.4> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 54.
+LaTeX Font Info:    Font shape `OT1/phv/bx/n' in size <14.4> not available
+(Font)              Font shape `OT1/phv/b/n' tried instead on input line 54.
+LaTeX Font Info:    Font shape `OT1/phv/b/n' will be
+(Font)              scaled to size 12.9599pt on input line 54.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <12> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 58.
+
+
+! Package keyval Error: Lea Ruscio ; Robert L Miller undefined.
+
+See the keyval package documentation for explanation.
+Type  H <return>  for immediate help.
+ ...                                              
+                                                  
+l.66 ...ai     ;  David Joyner (Maintainer),     }
+                                                  
+Try typing  <return>  to proceed.
+If that doesn't work, type  X <return>  to quit.
+
+
+! Package keyval Error: ; Tom Boothby ; Cen (``CJ'') Tjhai ; David Joyner (Main
+tainer) undefined.
+
+See the keyval package documentation for explanation.
+Type  H <return>  for immediate help.
+ ...                                              
+                                                  
+l.66 ...ai     ;  David Joyner (Maintainer),     }
+                                                  
+Try typing  <return>  to proceed.
+If that doesn't work, type  X <return>  to quit.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <10> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 71.
+
+Underfull \hbox (badness 10000) in paragraph at lines 69--78
+
+ []
+
+[1
+
+{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
+LaTeX Font Info:    Font shape `OMS/ptm/m/n' in size <10> not available
+(Font)              Font shape `OMS/pzccm/m/n' tried instead on input line 84.
+LaTeX Font Info:    Font shape `OT1/phv/m/n' will be
+(Font)              scaled to size 8.99994pt on input line 90.
+
+Underfull \hbox (badness 7168) in paragraph at lines 90--92
+[]\OT1/phv/m/n/10 GUAVA \OT1/ptm/m/n/10 is re-leased un-der the GNU Gen-eral Pu
+b-lic Li-cense (GPL). This file is part of
+ []
+
+
+Underfull \hbox (badness 2126) in paragraph at lines 90--92
+\OT1/phv/m/n/10 GUAVA\OT1/ptm/m/n/10 , though as doc-u-men-ta-tion it is re-lea
+sed un-der the GNU Free Doc-u-men-ta-tion Li-cense (see
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 106--114
+
+ []
+
+
+Underfull \hbox (badness 1057) in paragraph at lines 138--139
+\OT1/ptm/m/n/10 Cur-rently known bugs and sug-gested \OT1/phv/m/n/10 GUAVA \OT1
+/ptm/m/n/10 projects are listed on the bugs and projects web page
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 144--145
+
+ []
+
+LaTeX Font Info:    Font shape `OT1/phv/m/sl' will be
+(Font)              scaled to size 7.19995pt on input line 145.
+[2] [3] (./guava.toc
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <10.95> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1.
+LaTeX Font Info:    Font shape `OT1/phv/m/n' will be
+(Font)              scaled to size 9.85492pt on input line 2.
+LaTeX Font Info:    Try loading font information for OT1+ptmcm on input line 2.
+
+ (/usr/share/texmf-texlive/tex/latex/psnfss/ot1ptmcm.fd
+File: ot1ptmcm.fd 2000/01/03 Fontinst v1.801 font definitions for OT1/ptmcm.
+)
+LaTeX Font Info:    Try loading font information for OML+ptmcm on input line 2.
+
+
+(/usr/share/texmf-texlive/tex/latex/psnfss/omlptmcm.fd
+File: omlptmcm.fd 2000/01/03 Fontinst v1.801 font definitions for OML/ptmcm.
+)
+LaTeX Font Info:    Try loading font information for OMX+psycm on input line 2.
+
+
+(/usr/share/texmf-texlive/tex/latex/psnfss/omxpsycm.fd
+File: omxpsycm.fd 2000/01/03 Fontinst v1.801 font definitions for OMX/psycm.
+)
+LaTeX Font Info:    Try loading font information for U+msa on input line 2.
+
+(/usr/share/texmf-texlive/tex/latex/amsfonts/umsa.fd
+File: umsa.fd 2002/01/19 v2.2g AMS font definitions
+)
+LaTeX Font Info:    Try loading font information for U+msb on input line 2.
+
+(/usr/share/texmf-texlive/tex/latex/amsfonts/umsb.fd
+File: umsb.fd 2002/01/19 v2.2g AMS font definitions
+)
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <8> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 2.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <6> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 2.
+ [4
+
+] [5] [6] [7] [8]
+[9] [10])
+\tf at toc=\write6
+\openout6 = `guava.toc'.
+
+ [11]
+Chapter 1.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <20.74> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 153.
+LaTeX Font Info:    Font shape `OMS/ptm/m/n' in size <10.95> not available
+(Font)              Font shape `OMS/pzccm/m/n' tried instead on input line 167.
+
+[12
+
+] [13]
+Chapter 2.
+
+Underfull \hbox (badness 10000) in paragraph at lines 264--267
+
+ []
+
+[14
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 299--302
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 325--328
+
+ []
+
+[15]
+Underfull \hbox (badness 10000) in paragraph at lines 350--353
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 375--378
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 393--396
+
+ []
+
+
+Underfull \hbox (badness 2150) in paragraph at lines 399--402
+\OT1/ptm/m/n/10.95 This is also called the (Ham-ming) dis-tance be-tween $\OML/
+ptmcm/m/it/10.95 v \OT1/ptmcm/m/n/10.95 = (\OML/ptmcm/m/it/10.95 v[]; :::; v[]\
+OT1/ptmcm/m/n/10.95 )$ \OT1/ptm/m/n/10.95 and $\OML/ptmcm/m/it/10.95 w \OT1/ptm
+cm/m/n/10.95 = (\OML/ptmcm/m/it/10.95 w[]; :::; w[]\OT1/ptmcm/m/n/10.95 )$\OT1/
+ptm/m/n/10.95 .
+ []
+
+[16]
+Underfull \hbox (badness 10000) in paragraph at lines 427--430
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 453--456
+
+ []
+
+[17] [18]
+Chapter 3.
+[19
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 515--518
+
+ []
+
+[20]
+Underfull \hbox (badness 10000) in paragraph at lines 584--587
+
+ []
+
+[21]
+Underfull \hbox (badness 10000) in paragraph at lines 612--615
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 642--645
+
+ []
+
+LaTeX Font Info:    Try loading font information for OML+ptm on input line 656.
+
+(/usr/share/texmf-texlive/tex/latex/psnfss/omlptm.fd
+File: omlptm.fd 
+)
+LaTeX Font Info:    Font shape `OML/ptm/m/n' in size <10.95> not available
+(Font)              Font shape `OML/cmm/m/it' tried instead on input line 656.
+ [22]
+Underfull \hbox (badness 10000) in paragraph at lines 692--695
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 718--721
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 730--733
+
+ []
+
+[23pdfTeX warning (ext4): destination with the same identifier (name{L.X7F27034
+17F270341}) has been already used, duplicate ignored
+<to be read again> 
+                   \endgroup \set at typeset@protect 
+l.748 ...5,?] randomly generated code over GF(2) ]
+                                                  ]
+Underfull \hbox (badness 10000) in paragraph at lines 789--792
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 808--811
+
+ []
+
+[24]
+Underfull \hbox (badness 10000) in paragraph at lines 833--836
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 859--862
+
+ []
+
+[25]
+Underfull \hbox (badness 10000) in paragraph at lines 895--898
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 918--921
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 942--945
+
+ []
+
+[26]
+Underfull \hbox (badness 10000) in paragraph at lines 971--974
+
+ []
+
+[27]
+Chapter 4.
+[28
+
+] [29]pdfTeX warning (ext4): destination with the same identifier (name{L.X8123
+456781234567}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.1090 \hyperdef{L}{X8123456781234567}{}
+                                        
+Underfull \hbox (badness 10000) in paragraph at lines 1091--1094
+
+ []
+
+[30]pdfTeX warning (ext4): destination with the same identifier (name{L.X7F2703
+417F270341}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.1131 \hyperdef{L}{X7F2703417F270341}{}
+                                        
+Underfull \hbox (badness 10000) in paragraph at lines 1132--1135
+
+ []
+
+pdfTeX warning (ext4): destination with the same identifier (name{L.X8123456781
+234567}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.1154 \hyperdef{L}{X8123456781234567}{}
+                                        
+Underfull \hbox (badness 10000) in paragraph at lines 1155--1158
+
+ []
+
+pdfTeX warning (ext4): destination with the same identifier (name{L.X8123456781
+234567}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.1175 \hyperdef{L}{X8123456781234567}{}
+                                        
+Underfull \hbox (badness 10000) in paragraph at lines 1176--1179
+
+ []
+
+[31]
+Underfull \hbox (badness 10000) in paragraph at lines 1201--1204
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1240--1243
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1261--1264
+
+ []
+
+[32]
+Underfull \hbox (badness 10000) in paragraph at lines 1282--1285
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1302--1305
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1327--1330
+
+ []
+
+[33]
+Underfull \hbox (badness 10000) in paragraph at lines 1352--1355
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1382--1385
+
+ []
+
+[34]
+Underfull \hbox (badness 10000) in paragraph at lines 1406--1409
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1432--1435
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1454--1457
+
+ []
+
+[35]
+Underfull \hbox (badness 10000) in paragraph at lines 1483--1486
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1509--1512
+
+ []
+
+[36]
+Underfull \hbox (badness 10000) in paragraph at lines 1543--1546
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1565--1568
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1588--1591
+
+ []
+
+[37]
+Underfull \hbox (badness 10000) in paragraph at lines 1619--1622
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1648--1651
+
+ []
+
+[38]
+Underfull \hbox (badness 10000) in paragraph at lines 1673--1676
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1712--1715
+
+ []
+
+[39]
+Underfull \hbox (badness 10000) in paragraph at lines 1744--1747
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1761--1764
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1781--1784
+
+ []
+
+[40]
+Underfull \hbox (badness 10000) in paragraph at lines 1803--1806
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1827--1830
+
+ []
+
+[41]
+Underfull \hbox (badness 10000) in paragraph at lines 1861--1864
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1900--1903
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1923--1926
+
+ []
+
+[42]
+Underfull \hbox (badness 10000) in paragraph at lines 1950--1953
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 1988--1991
+
+ []
+
+[43]
+Underfull \hbox (badness 10000) in paragraph at lines 2023--2026
+
+ []
+
+[44]
+Underfull \hbox (badness 10000) in paragraph at lines 2058--2061
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2082--2085
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2108--2111
+
+ []
+
+[45]
+Underfull \hbox (badness 10000) in paragraph at lines 2142--2145
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2164--2167
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2187--2190
+
+ []
+
+[46]
+LaTeX Font Info:    Font shape `OT1/pcr/m/it' in size <10.95> not available
+(Font)              Font shape `OT1/pcr/m/sl' tried instead on input line 2200.
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2231--2234
+
+ []
+
+[47]
+Underfull \hbox (badness 10000) in paragraph at lines 2267--2270
+
+ []
+
+[48] [49]
+Underfull \hbox (badness 10000) in paragraph at lines 2400--2403
+
+ []
+
+[50]
+Underfull \hbox (badness 2042) in paragraph at lines 2410--2412
+[]\OT1/ptm/m/n/10.95 The re-sult re-turned is a record with two fields; the fir
+st, \OT1/pcr/m/n/10.95 mindist\OT1/ptm/m/n/10.95 , gives the low-est
+ []
+
+
+Underfull \hbox (badness 1590) in paragraph at lines 2410--2412
+\OT1/ptm/m/n/10.95 rectly, so the com-mand was only found af-ter read-ing all t
+he \OT1/ptm/m/it/10.95 *.gi \OT1/ptm/m/n/10.95 files in the \OT1/phv/m/n/10.95 
+GUAVA \OT1/ptm/m/n/10.95 li-
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2434--2437
+
+ []
+
+[51] [52]
+Underfull \hbox (badness 10000) in paragraph at lines 2510--2513
+
+ []
+
+[53]
+Underfull \hbox (badness 10000) in paragraph at lines 2567--2570
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2599--2602
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2624--2627
+
+ []
+
+[54]
+Underfull \hbox (badness 10000) in paragraph at lines 2649--2652
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2672--2675
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2695--2698
+
+ []
+
+[55]
+Underfull \hbox (badness 10000) in paragraph at lines 2729--2732
+
+ []
+
+[56]
+Underfull \hbox (badness 10000) in paragraph at lines 2776--2779
+
+ []
+
+[57]
+Underfull \hbox (badness 10000) in paragraph at lines 2829--2832
+
+ []
+
+
+Underfull \hbox (badness 1102) in paragraph at lines 2837--2839
+[]\OT1/ptm/m/n/10.95 For long codes, this method is faster in prac-tice than th
+e in-ter-po-la-tion method used in
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 2862--2865
+
+ []
+
+[58]
+Underfull \hbox (badness 10000) in paragraph at lines 2913--2916
+
+ []
+
+[59]
+Underfull \hbox (badness 10000) in paragraph at lines 2956--2959
+
+ []
+
+[60]
+Underfull \hbox (badness 10000) in paragraph at lines 2997--3000
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3039--3042
+
+ []
+
+[61]
+Underfull \hbox (badness 10000) in paragraph at lines 3068--3071
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3102--3105
+
+ []
+
+[62]
+Underfull \hbox (badness 10000) in paragraph at lines 3126--3129
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3134--3136
+[]\OT1/ptm/m/n/10.95 This uses \OT1/pcr/m/n/10.95 AutomorphismGroup \OT1/ptm/m/
+n/10.95 in the bi-nary case, and (the slower)
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3172--3175
+
+ []
+
+[63] [64]
+Chapter 5.
+
+Underfull \hbox (badness 10000) in paragraph at lines 3220--3223
+
+ []
+
+[65
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 3245--3248
+
+ []
+
+
+Underfull \hbox (badness 3623) in paragraph at lines 3250--3251
+[]\OT1/ptm/m/n/10.95 The four forms this com-mand can take are \OT1/pcr/m/n/10.
+95 HadamardCode(H,t)\OT1/ptm/m/n/10.95 , \OT1/pcr/m/n/10.95 HadamardCode(H)\OT1
+/ptm/m/n/10.95 ,
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3287--3290
+
+ []
+
+[66]
+Underfull \hbox (badness 10000) in paragraph at lines 3317--3320
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3352--3355
+
+ []
+
+[67]
+Underfull \hbox (badness 1546) in paragraph at lines 3359--3360
+[]\OT1/ptm/m/n/10.95 The func-tion \OT1/pcr/m/n/10.95 RandomLinearCode \OT1/ptm
+/m/n/10.95 re-turns a ran-dom lin-ear code (see \OT1/pcr/m/n/10.95 RandomLinear
+Code
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3377--3380
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3396--3399
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3423--3426
+
+ []
+
+[68]
+Underfull \hbox (badness 1430) in paragraph at lines 3457--3459
+[]\OT1/ptm/m/n/10.95 The next func-tions we de-scribe gen-er-ate some well-know
+n codes, like Ham-ming codes
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3470--3473
+
+ []
+
+[69]
+Underfull \hbox (badness 10000) in paragraph at lines 3499--3502
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3511--3514
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3540--3543
+
+ []
+
+[70]
+Underfull \hbox (badness 10000) in paragraph at lines 3563--3566
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3580--3583
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3600--3603
+
+ []
+
+[71]
+Underfull \hbox (badness 10000) in paragraph at lines 3639--3642
+
+ []
+
+[72]
+Underfull \hbox (badness 10000) in paragraph at lines 3660--3663
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3686--3689
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3706--3709
+
+ []
+
+[73]
+Underfull \hbox (badness 10000) in paragraph at lines 3757--3760
+
+ []
+
+[74]
+Underfull \hbox (badness 10000) in paragraph at lines 3781--3784
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3796--3799
+
+ []
+
+[75] [76]
+Underfull \hbox (badness 10000) in paragraph at lines 3895--3898
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3907--3910
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3919--3922
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3931--3934
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 3943--3946
+
+ []
+
+[77]
+Underfull \hbox (badness 10000) in paragraph at lines 3978--3981
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4001--4004
+
+ []
+
+[78]
+Underfull \hbox (badness 10000) in paragraph at lines 4028--4031
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4049--4052
+
+ []
+
+[79]
+Underfull \hbox (badness 1194) in paragraph at lines 4101--4102
+[]\OT1/ptm/m/n/10.95 Finally we de-scribe the triv-ial codes (see \OT1/pcr/m/n/
+10.95 WholeSpaceCode \OT1/ptm/m/n/10.95 ([][]5.5.11[][]), \OT1/pcr/m/n/10.95 Nu
+llCode \OT1/ptm/m/n/10.95 ([][]5.5.12[][]),
+ []
+
+
+Underfull \hbox (badness 3668) in paragraph at lines 4101--4102
+\OT1/pcr/m/n/10.95 RepetitionCode \OT1/ptm/m/n/10.95 ([][]5.5.13[][])), and the
+ com-mand \OT1/pcr/m/n/10.95 CyclicCodes \OT1/ptm/m/n/10.95 which lists all cyc
+lic codes
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4106--4109
+
+ []
+
+[80]
+Underfull \hbox (badness 10000) in paragraph at lines 4134--4137
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4160--4163
+
+ []
+
+[81]
+Underfull \hbox (badness 10000) in paragraph at lines 4194--4197
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4234--4237
+
+ []
+
+[82]
+Underfull \hbox (badness 10000) in paragraph at lines 4260--4263
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4280--4283
+
+ []
+
+[83]
+Underfull \hbox (badness 10000) in paragraph at lines 4312--4315
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4324--4327
+
+ []
+
+[84]
+Underfull \hbox (badness 10000) in paragraph at lines 4367--4370
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4395--4398
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4412--4415
+
+ []
+
+[85]
+Underfull \hbox (badness 10000) in paragraph at lines 4431--4434
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4454--4457
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4475--4478
+
+ []
+
+[86]
+Underfull \hbox (badness 10000) in paragraph at lines 4507--4510
+
+ []
+
+[87]
+Underfull \hbox (badness 10000) in paragraph at lines 4574--4577
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4602--4605
+
+ []
+
+[88] [89]
+Underfull \hbox (badness 10000) in paragraph at lines 4662--4665
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4681--4684
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4691--4692
+[]\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10.
+95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4716--4719
+
+ []
+
+[90]
+Underfull \hbox (badness 10000) in paragraph at lines 4726--4727
+[]\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10.
+95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type
+ []
+
+
+Underfull \hbox (badness 1158) in paragraph at lines 4726--4727
+\OT1/pcr/m/n/10.95 NamesOfComponents(C) \OT1/ptm/m/n/10.95 to see them all): \O
+T1/pcr/m/n/10.95 C!.points \OT1/ptm/m/n/10.95 (namely []), \OT1/pcr/m/n/10.95 C
+!.degree \OT1/ptm/m/n/10.95 (namely []),
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4732--4733
+[]\OT1/ptm/m/n/10.95 The weighted ver-sion has im-ple-mented with the op-tion
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4758--4761
+
+ []
+
+[91]
+Underfull \hbox (badness 10000) in paragraph at lines 4765--4766
+[]\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10.
+95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4782--4785
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4803--4806
+
+ []
+
+[92]
+Underfull \hbox (badness 10000) in paragraph at lines 4832--4835
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4883--4886
+
+ []
+
+[93]
+Underfull \hbox (badness 10000) in paragraph at lines 4908--4911
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 4938--4941
+
+ []
+
+[94] [95]
+Underfull \hbox (badness 10000) in paragraph at lines 5012--5015
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5050--5053
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5062--5065
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5074--5077
+
+ []
+
+[96]
+Underfull \hbox (badness 10000) in paragraph at lines 5086--5089
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5098--5101
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5110--5113
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5122--5125
+
+ []
+
+[97]
+Underfull \hbox (badness 10000) in paragraph at lines 5199--5202
+
+ []
+
+[98]
+Underfull \hbox (badness 10000) in paragraph at lines 5211--5214
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5263--5266
+
+ []
+
+[99] [100]
+Underfull \hbox (badness 10000) in paragraph at lines 5324--5327
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5336--5339
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5348--5351
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5361--5364
+
+ []
+
+[101]
+Underfull \hbox (badness 10000) in paragraph at lines 5409--5412
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5447--5450
+
+ []
+
+[102]
+Underfull \hbox (badness 10000) in paragraph at lines 5511--5514
+
+ []
+
+[103]
+Underfull \hbox (badness 10000) in paragraph at lines 5549--5552
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5566--5569
+
+ []
+
+[104]
+Underfull \hbox (badness 10000) in paragraph at lines 5618--5621
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5628--5629
+[]\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10.
+95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type
+ []
+
+[105] [106]
+Chapter 6.
+
+Underfull \hbox (badness 1127) in paragraph at lines 5674--5676
+\OT1/ptm/m/n/10.95 ([][]6.1.6[][]), \OT1/pcr/m/n/10.95 RemovedElementsCode \OT1
+/ptm/m/n/10.95 ([][]6.1.7[][]), \OT1/pcr/m/n/10.95 AddedElementsCode \OT1/ptm/m
+/n/10.95 ([][]6.1.8[][]), \OT1/pcr/m/n/10.95 ShortenedCode \OT1/ptm/m/n/10.95 (
+[][]6.1.9[][]),
+ []
+
+
+Underfull \hbox (badness 3078) in paragraph at lines 5674--5676
+\OT1/pcr/m/n/10.95 LengthenedCode \OT1/ptm/m/n/10.95 ([][]6.1.10[][]), \OT1/pcr
+/m/n/10.95 ResidueCode \OT1/ptm/m/n/10.95 ([][]6.1.12[][]), \OT1/pcr/m/n/10.95 
+ConstructionBCode \OT1/ptm/m/n/10.95 ([][]6.1.13[][]), \OT1/pcr/m/n/10.95 DualC
+ode
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5684--5687
+
+ []
+
+[107
+
+]
+Underfull \hbox (badness 5578) in paragraph at lines 5712--5714
+\OT1/ptm/m/n/10.95 To undo ex-tend-ing, call \OT1/pcr/m/n/10.95 PuncturedCode \
+OT1/ptm/m/n/10.95 (see \OT1/pcr/m/n/10.95 PuncturedCode \OT1/ptm/m/n/10.95 ([][
+]6.1.2[][])). The func-tion
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5718--5721
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5751--5754
+
+ []
+
+[108]
+Underfull \hbox (badness 10000) in paragraph at lines 5779--5782
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5808--5811
+
+ []
+
+[109]
+Underfull \hbox (badness 10000) in paragraph at lines 5834--5837
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5869--5872
+
+ []
+
+[110]
+Underfull \hbox (badness 10000) in paragraph at lines 5894--5897
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5919--5922
+
+ []
+
+[111]
+Underfull \hbox (badness 10000) in paragraph at lines 5961--5964
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 5982--5985
+
+ []
+
+[112]
+Underfull \hbox (badness 10000) in paragraph at lines 6012--6015
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6036--6039
+
+ []
+
+[113]
+Underfull \hbox (badness 10000) in paragraph at lines 6071--6074
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6101--6104
+
+ []
+
+[114]
+Underfull \hbox (badness 10000) in paragraph at lines 6129--6132
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6158--6161
+
+ []
+
+[115]
+Underfull \hbox (badness 10000) in paragraph at lines 6186--6189
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6220--6223
+
+ []
+
+[116]
+Underfull \hbox (badness 10000) in paragraph at lines 6256--6259
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6294--6297
+
+ []
+
+[117]
+Underfull \hbox (badness 10000) in paragraph at lines 6322--6325
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6352--6355
+
+ []
+
+[118]
+Underfull \hbox (badness 10000) in paragraph at lines 6375--6378
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6403--6406
+
+ []
+
+[119]
+Underfull \hbox (badness 10000) in paragraph at lines 6432--6435
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6462--6465
+
+ []
+
+[120]
+Underfull \hbox (badness 10000) in paragraph at lines 6499--6502
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6527--6530
+
+ []
+
+[121]
+Underfull \hbox (badness 10000) in paragraph at lines 6576--6579
+
+ []
+
+[122]
+Underfull \hbox (badness 10000) in paragraph at lines 6631--6634
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6649--6652
+
+ []
+
+[123] [124]
+Chapter 7.
+
+Underfull \hbox (badness 3514) in paragraph at lines 6725--6727
+[]\OT1/ptm/m/n/10.95 Firstly, we de-scribe func-tions that com-pute spe-cific u
+p-per bounds on the code size
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6740--6743
+
+ []
+
+[125
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 6763--6766
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6787--6790
+
+ []
+
+[126]
+Underfull \hbox (badness 10000) in paragraph at lines 6808--6811
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6836--6839
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6859--6862
+
+ []
+
+[127]
+Underfull \hbox (badness 10000) in paragraph at lines 6884--6887
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6905--6908
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6925--6928
+
+ []
+
+[128]
+Underfull \hbox (badness 10000) in paragraph at lines 6949--6952
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6973--6976
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 6993--6996
+
+ []
+
+[129]
+Underfull \hbox (badness 10000) in paragraph at lines 7018--7021
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7031--7032
+[]\OT1/ptm/m/n/10.95 The re-sult-ing record can be used in the func-tion \OT1/p
+cr/m/n/10.95 BestKnownLinearCode \OT1/ptm/m/n/10.95 (see
+ []
+
+[130]
+Underfull \hbox (badness 10000) in paragraph at lines 7064--7067
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7072--7073
+[]\OT1/ptm/m/n/10.95 If the cov-er-ing ra-dius of [] is known, a list of length
+ 1 is re-turned.
+ []
+
+
+Underfull \hbox (badness 4739) in paragraph at lines 7072--7073
+\OT1/pcr/m/n/10.95 BoundsCoveringRadius \OT1/ptm/m/n/10.95 makes use of the fun
+c-tions \OT1/pcr/m/n/10.95 GeneralLowerBoundCoveringRadius
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7086--7089
+
+ []
+
+[131]
+Underfull \hbox (badness 10000) in paragraph at lines 7167--7170
+
+ []
+
+[132]
+Underfull \hbox (badness 10000) in paragraph at lines 7191--7194
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7214--7217
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7236--7239
+
+ []
+
+
+Overfull \hbox (8.54312pt too wide) in paragraph at lines 7241--7242
+[]\OT1/ptm/m/n/10.95 This com-mand can also be called us-ing the syn-tax \OT1/p
+cr/m/n/10.95 LowerBoundCoveringRadiusSphereCovering(
+ []
+
+[133]
+Underfull \hbox (badness 10000) in paragraph at lines 7266--7269
+
+ []
+
+[134]
+Underfull \hbox (badness 10000) in paragraph at lines 7300--7303
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7336--7339
+
+ []
+
+[135]
+Underfull \hbox (badness 10000) in paragraph at lines 7373--7376
+
+ []
+
+
+Underfull \hbox (badness 3396) in paragraph at lines 7378--7380
+[]\OT1/ptm/m/n/10.95 This com-mand can also be called with \OT1/pcr/m/n/10.95 L
+owerBoundCoveringRadiusEmbedded1( n, r
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7387--7388
+[]\OT1/ptm/m/n/10.95 Sometimes \OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusEmbed
+ded1 \OT1/ptm/m/n/10.95 is bet-ter than
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7408--7411
+
+ []
+
+
+Underfull \hbox (badness 3396) in paragraph at lines 7413--7415
+[]\OT1/ptm/m/n/10.95 This com-mand can also be called with \OT1/pcr/m/n/10.95 L
+owerBoundCoveringRadiusEmbedded2( n, r
+ []
+
+[136]
+Underfull \hbox (badness 10000) in paragraph at lines 7422--7423
+[]\OT1/ptm/m/n/10.95 Sometimes \OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusEmbed
+ded1 \OT1/ptm/m/n/10.95 is bet-ter than
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7443--7446
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7473--7476
+
+ []
+
+[137]
+Underfull \hbox (badness 10000) in paragraph at lines 7495--7498
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7518--7521
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7543--7546
+
+ []
+
+[138]
+Underfull \hbox (badness 10000) in paragraph at lines 7567--7570
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7605--7608
+
+ []
+
+[139]
+Underfull \hbox (badness 10000) in paragraph at lines 7633--7636
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7659--7662
+
+ []
+
+[140]
+Underfull \hbox (badness 10000) in paragraph at lines 7682--7685
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7712--7715
+
+ []
+
+[141]
+Underfull \hbox (badness 10000) in paragraph at lines 7735--7738
+
+ []
+
+[142]
+Underfull \hbox (badness 10000) in paragraph at lines 7786--7789
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7809--7812
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7830--7833
+
+ []
+
+[143]
+Underfull \hbox (badness 10000) in paragraph at lines 7862--7865
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7895--7898
+
+ []
+
+[144]
+Underfull \hbox (badness 10000) in paragraph at lines 7936--7939
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 7955--7958
+
+ []
+
+[145]
+Underfull \hbox (badness 10000) in paragraph at lines 7987--7990
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8006--8009
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8024--8027
+
+ []
+
+[146]
+Underfull \hbox (badness 10000) in paragraph at lines 8042--8045
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8063--8066
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8095--8098
+
+ []
+
+[147]
+Underfull \hbox (badness 10000) in paragraph at lines 8117--8120
+
+ []
+
+
+Underfull \hbox (badness 2762) in paragraph at lines 8126--8127
+[]\OT1/ptm/m/n/10.95 If [] is a code-word, then \OT1/pcr/m/n/10.95 CodeDistance
+Enumerator \OT1/ptm/m/n/10.95 re-turns the same poly-no-mial as
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8140--8143
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8159--8162
+
+ []
+
+[148]
+Underfull \hbox (badness 10000) in paragraph at lines 8180--8183
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8207--8210
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8227--8230
+
+ []
+
+[149]
+Underfull \hbox (badness 10000) in paragraph at lines 8248--8251
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8268--8271
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8286--8289
+
+ []
+
+[150]
+Underfull \hbox (badness 10000) in paragraph at lines 8314--8317
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8342--8345
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8365--8368
+
+ []
+
+[151]
+Underfull \hbox (badness 10000) in paragraph at lines 8397--8400
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8418--8421
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8438--8441
+
+ []
+
+[152]
+Underfull \hbox (badness 10000) in paragraph at lines 8458--8461
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8484--8487
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8496--8499
+
+ []
+
+[153]
+Underfull \hbox (badness 10000) in paragraph at lines 8522--8525
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8548--8551
+
+ []
+
+[154]
+Underfull \hbox (badness 10000) in paragraph at lines 8592--8595
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8626--8629
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8644--8647
+
+ []
+
+[155]
+Underfull \hbox (badness 10000) in paragraph at lines 8668--8671
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 8691--8694
+
+ []
+
+[156]
+Underfull \hbox (badness 10000) in paragraph at lines 8727--8730
+
+ []
+
+(./guava.bbl (./guava.brf)
+\tf at brf=\write7
+\openout7 = `guava.brf'.
+
+ [157]
+! Missing { inserted.
+<to be read again> 
+                   $
+l.24 
+     
+A left brace was mandatory here, so I've put one in.
+You might want to delete and/or insert some corrections
+so that I will find a matching right brace soon.
+(If you're confused by all this, try typing `I}' now.)
+
+! Missing } inserted.
+<inserted text> 
+                }
+l.24 
+     
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+[158
+
+]) (./guava.ind [159]
+Underfull \hbox (badness 10000) in paragraph at lines 16--18
+[]\OT1/pcr/m/n/10.95 AClosestVectorComb..MatFFEVecFFECoords\OT1/ptm/m/n/10.95 ,
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 18--20
+[]\OT1/pcr/m/n/10.95 AClosestVectorCombinationsMatFFEVecFFE\OT1/ptm/m/n/10.95 ,
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 20--22
+[]\OT1/pcr/m/n/10.95 ActionMoebiusTransformationOnDivisorP1
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 22--24
+[]\OT1/pcr/m/n/10.95 ActionMoebiusTransformationOnFunction \OT1/ptm/m/n/10.95 ,
+
+ []
+
+[160
+
+] [161]
+Underfull \hbox (badness 10000) in paragraph at lines 252--254
+[]\OT1/pcr/m/n/10.95 IsAction\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Moebius\OT1
+/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Transformation\OT1/ptm/m/n/10.95 -\OT1/pcr/m
+/n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Divisor\OT1/ptm/m/n/10.95 -
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 293--295
+[]\OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusCountingExcess\OT1/ptm/m/n/10.95 ,
+
+ []
+
+[162]
+Underfull \hbox (badness 10000) in paragraph at lines 298--300
+[]\OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusSphereCovering\OT1/ptm/m/n/10.95 ,
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 310--312
+[]\OT1/pcr/m/n/10.95 Matrix\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Representatio
+n\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.9
+5 Riemann\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Roch\OT1/ptm/m/n/10.95 -
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 312--314
+[]\OT1/pcr/m/n/10.95 Matrix\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Transformatio
+n\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.9
+5 Multivariate\OT1/ptm/m/n/10.95 -
+ []
+
+[163]
+Underfull \hbox (badness 10000) in paragraph at lines 439--441
+[]\OT1/pcr/m/n/10.95 UpperBoundCoveringRadiusGriesmerLike\OT1/ptm/m/n/10.95 ,
+ []
+
+[164]) (./guava.aux)
+
+LaTeX Warning: There were multiply-defined labels.
+
+ ) 
+Here is how much of TeX's memory you used:
+ 4749 strings out of 95086
+ 68660 string characters out of 1183255
+ 125081 words of memory out of 1500000
+ 7013 multiletter control sequences out of 10000+50000
+ 55745 words of font info for 104 fonts, out of 1200000 for 2000
+ 28 hyphenation exceptions out of 8191
+ 27i,7n,27p,1328b,619s stack positions out of 5000i,500n,6000p,200000b,5000s
+{/usr/share/texmf-texlive/fonts/enc/dvips/base/8r.enc}</usr/share/texmf-texli
+ve/fonts/type1/bluesky/cm/cmex10.pfb></usr/share/texmf-texlive/fonts/type1/blue
+sky/cm/cmmi10.pfb></usr/share/texmf-texlive/fonts/type1/bluesky/cm/cmr10.pfb></
+usr/share/texmf-texlive/fonts/type1/bluesky/cm/cmsy10.pfb></usr/share/texmf-tex
+live/fonts/type1/public/cmex/fmex9.pfb></usr/share/texmf-texlive/fonts/type1/bl
+uesky/ams/msam10.pfb></usr/share/texmf-texlive/fonts/type1/bluesky/ams/msbm10.p
+fb></usr/share/texmf-texlive/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/tex
+mf-texlive/fonts/type1/urw/courier/ucrro8a.pfb></usr/share/texmf-texlive/fonts/
+type1/urw/helvetic/uhvb8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/helveti
+c/uhvr8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/helvetic/uhvro8a.pfb></u
+sr/share/texmf-texlive/fonts/type1/urw/symbol/usyr.pfb></usr/share/texmf-texliv
+e/fonts/type1/urw/times/utmb8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/ti
+mes/utmr8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/times/utmri8a.pfb>
+Output written on guava.pdf (164 pages, 895936 bytes).
+PDF statistics:
+ 2679 PDF objects out of 2984 (max. 8388607)
+ 822 named destinations out of 1000 (max. 131072)
+ 17 words of extra memory for PDF output out of 10000 (max. 10000000)
+
diff --git a/doc/guava.pnr b/doc/guava.pnr
new file mode 100644
index 0000000..6a88cce
--- /dev/null
+++ b/doc/guava.pnr
@@ -0,0 +1,325 @@
+PAGENRS := [
+[ 0, 0, 0 ], 1,
+[ 0, 0, 1 ], 2,
+[ 0, 0, 2 ], 2,
+[ 0, 0, 3 ], 4,
+[ 1, 0, 0 ], 12,
+[ 1, 1, 0 ], 12,
+[ 1, 2, 0 ], 12,
+[ 1, 3, 0 ], 13,
+[ 2, 0, 0 ], 14,
+[ 2, 1, 0 ], 14,
+[ 2, 1, 1 ], 14,
+[ 2, 1, 2 ], 15,
+[ 2, 1, 3 ], 15,
+[ 2, 1, 4 ], 16,
+[ 2, 1, 5 ], 16,
+[ 2, 1, 6 ], 16,
+[ 2, 2, 0 ], 17,
+[ 2, 2, 1 ], 17,
+[ 2, 2, 2 ], 18,
+[ 3, 0, 0 ], 19,
+[ 3, 1, 0 ], 20,
+[ 3, 1, 1 ], 20,
+[ 3, 1, 2 ], 21,
+[ 3, 1, 3 ], 22,
+[ 3, 2, 0 ], 22,
+[ 3, 2, 1 ], 22,
+[ 3, 3, 0 ], 23,
+[ 3, 3, 1 ], 23,
+[ 3, 3, 2 ], 23,
+[ 3, 3, 3 ], 23,
+[ 3, 4, 0 ], 24,
+[ 3, 4, 1 ], 24,
+[ 3, 4, 2 ], 24,
+[ 3, 5, 0 ], 25,
+[ 3, 5, 1 ], 25,
+[ 3, 5, 2 ], 25,
+[ 3, 6, 0 ], 26,
+[ 3, 6, 1 ], 26,
+[ 3, 6, 2 ], 26,
+[ 3, 6, 3 ], 26,
+[ 3, 6, 4 ], 27,
+[ 4, 0, 0 ], 28,
+[ 4, 1, 0 ], 30,
+[ 4, 1, 1 ], 30,
+[ 4, 2, 0 ], 31,
+[ 4, 2, 1 ], 31,
+[ 4, 2, 2 ], 31,
+[ 4, 2, 3 ], 31,
+[ 4, 2, 4 ], 32,
+[ 4, 3, 0 ], 32,
+[ 4, 3, 1 ], 32,
+[ 4, 3, 2 ], 33,
+[ 4, 3, 3 ], 33,
+[ 4, 3, 4 ], 33,
+[ 4, 3, 5 ], 33,
+[ 4, 3, 6 ], 34,
+[ 4, 3, 7 ], 34,
+[ 4, 3, 8 ], 35,
+[ 4, 3, 9 ], 35,
+[ 4, 3, 10 ], 35,
+[ 4, 3, 11 ], 36,
+[ 4, 3, 12 ], 36,
+[ 4, 3, 13 ], 37,
+[ 4, 3, 14 ], 37,
+[ 4, 3, 15 ], 38,
+[ 4, 4, 0 ], 38,
+[ 4, 4, 1 ], 38,
+[ 4, 4, 2 ], 38,
+[ 4, 4, 3 ], 39,
+[ 4, 4, 4 ], 40,
+[ 4, 5, 0 ], 40,
+[ 4, 5, 1 ], 40,
+[ 4, 5, 2 ], 40,
+[ 4, 5, 3 ], 41,
+[ 4, 5, 4 ], 41,
+[ 4, 5, 5 ], 41,
+[ 4, 6, 0 ], 42,
+[ 4, 6, 1 ], 42,
+[ 4, 6, 2 ], 42,
+[ 4, 6, 3 ], 43,
+[ 4, 6, 4 ], 43,
+[ 4, 7, 0 ], 44,
+[ 4, 7, 1 ], 44,
+[ 4, 7, 2 ], 44,
+[ 4, 7, 3 ], 45,
+[ 4, 7, 4 ], 45,
+[ 4, 7, 5 ], 45,
+[ 4, 8, 0 ], 46,
+[ 4, 8, 1 ], 46,
+[ 4, 8, 2 ], 46,
+[ 4, 8, 3 ], 46,
+[ 4, 8, 4 ], 47,
+[ 4, 8, 5 ], 48,
+[ 4, 8, 6 ], 51,
+[ 4, 8, 7 ], 51,
+[ 4, 8, 8 ], 53,
+[ 4, 8, 9 ], 54,
+[ 4, 9, 0 ], 54,
+[ 4, 9, 1 ], 54,
+[ 4, 9, 2 ], 54,
+[ 4, 9, 3 ], 55,
+[ 4, 9, 4 ], 55,
+[ 4, 9, 5 ], 56,
+[ 4, 10, 0 ], 56,
+[ 4, 10, 1 ], 56,
+[ 4, 10, 2 ], 57,
+[ 4, 10, 3 ], 58,
+[ 4, 10, 4 ], 58,
+[ 4, 10, 5 ], 59,
+[ 4, 10, 6 ], 60,
+[ 4, 10, 7 ], 61,
+[ 4, 10, 8 ], 61,
+[ 4, 10, 9 ], 62,
+[ 4, 10, 10 ], 62,
+[ 4, 10, 11 ], 63,
+[ 4, 10, 12 ], 63,
+[ 5, 0, 0 ], 65,
+[ 5, 1, 0 ], 65,
+[ 5, 1, 1 ], 65,
+[ 5, 1, 2 ], 66,
+[ 5, 1, 3 ], 66,
+[ 5, 1, 4 ], 67,
+[ 5, 1, 5 ], 68,
+[ 5, 1, 6 ], 68,
+[ 5, 1, 7 ], 68,
+[ 5, 1, 8 ], 69,
+[ 5, 2, 0 ], 69,
+[ 5, 2, 1 ], 69,
+[ 5, 2, 2 ], 70,
+[ 5, 2, 3 ], 70,
+[ 5, 2, 4 ], 71,
+[ 5, 2, 5 ], 71,
+[ 5, 2, 6 ], 71,
+[ 5, 2, 7 ], 72,
+[ 5, 2, 8 ], 72,
+[ 5, 2, 9 ], 73,
+[ 5, 2, 10 ], 73,
+[ 5, 2, 11 ], 73,
+[ 5, 2, 12 ], 74,
+[ 5, 2, 13 ], 75,
+[ 5, 2, 14 ], 75,
+[ 5, 3, 0 ], 77,
+[ 5, 3, 1 ], 77,
+[ 5, 3, 2 ], 77,
+[ 5, 3, 3 ], 77,
+[ 5, 3, 4 ], 77,
+[ 5, 3, 5 ], 77,
+[ 5, 4, 0 ], 78,
+[ 5, 4, 1 ], 78,
+[ 5, 4, 2 ], 78,
+[ 5, 4, 3 ], 79,
+[ 5, 4, 4 ], 79,
+[ 5, 5, 0 ], 79,
+[ 5, 5, 1 ], 80,
+[ 5, 5, 2 ], 81,
+[ 5, 5, 3 ], 81,
+[ 5, 5, 4 ], 82,
+[ 5, 5, 5 ], 83,
+[ 5, 5, 6 ], 83,
+[ 5, 5, 7 ], 83,
+[ 5, 5, 8 ], 84,
+[ 5, 5, 9 ], 84,
+[ 5, 5, 10 ], 85,
+[ 5, 5, 11 ], 85,
+[ 5, 5, 12 ], 86,
+[ 5, 5, 13 ], 86,
+[ 5, 5, 14 ], 86,
+[ 5, 5, 15 ], 86,
+[ 5, 5, 16 ], 87,
+[ 5, 5, 17 ], 88,
+[ 5, 5, 18 ], 89,
+[ 5, 5, 19 ], 90,
+[ 5, 6, 0 ], 90,
+[ 5, 6, 1 ], 90,
+[ 5, 6, 2 ], 90,
+[ 5, 6, 3 ], 91,
+[ 5, 6, 4 ], 92,
+[ 5, 6, 5 ], 92,
+[ 5, 7, 0 ], 93,
+[ 5, 7, 1 ], 93,
+[ 5, 7, 2 ], 94,
+[ 5, 7, 3 ], 94,
+[ 5, 7, 4 ], 94,
+[ 5, 7, 5 ], 96,
+[ 5, 7, 6 ], 96,
+[ 5, 7, 7 ], 96,
+[ 5, 7, 8 ], 97,
+[ 5, 7, 9 ], 97,
+[ 5, 7, 10 ], 97,
+[ 5, 7, 11 ], 97,
+[ 5, 7, 12 ], 97,
+[ 5, 7, 13 ], 99,
+[ 5, 7, 14 ], 99,
+[ 5, 7, 15 ], 100,
+[ 5, 7, 16 ], 101,
+[ 5, 7, 17 ], 101,
+[ 5, 7, 18 ], 101,
+[ 5, 7, 19 ], 101,
+[ 5, 7, 20 ], 102,
+[ 5, 7, 21 ], 103,
+[ 5, 7, 22 ], 104,
+[ 5, 7, 23 ], 104,
+[ 5, 7, 24 ], 104,
+[ 5, 7, 25 ], 105,
+[ 6, 0, 0 ], 107,
+[ 6, 1, 0 ], 107,
+[ 6, 1, 1 ], 107,
+[ 6, 1, 2 ], 108,
+[ 6, 1, 3 ], 108,
+[ 6, 1, 4 ], 109,
+[ 6, 1, 5 ], 109,
+[ 6, 1, 6 ], 110,
+[ 6, 1, 7 ], 110,
+[ 6, 1, 8 ], 111,
+[ 6, 1, 9 ], 111,
+[ 6, 1, 10 ], 112,
+[ 6, 1, 11 ], 113,
+[ 6, 1, 12 ], 113,
+[ 6, 1, 13 ], 113,
+[ 6, 1, 14 ], 114,
+[ 6, 1, 15 ], 115,
+[ 6, 1, 16 ], 115,
+[ 6, 1, 17 ], 115,
+[ 6, 1, 18 ], 116,
+[ 6, 1, 19 ], 116,
+[ 6, 1, 20 ], 117,
+[ 6, 2, 0 ], 118,
+[ 6, 2, 1 ], 118,
+[ 6, 2, 2 ], 118,
+[ 6, 2, 3 ], 118,
+[ 6, 2, 4 ], 119,
+[ 6, 2, 5 ], 119,
+[ 6, 2, 6 ], 120,
+[ 6, 2, 7 ], 120,
+[ 6, 2, 8 ], 121,
+[ 6, 2, 9 ], 121,
+[ 6, 2, 10 ], 122,
+[ 6, 2, 11 ], 123,
+[ 6, 2, 12 ], 124,
+[ 7, 0, 0 ], 125,
+[ 7, 1, 0 ], 125,
+[ 7, 1, 1 ], 126,
+[ 7, 1, 2 ], 126,
+[ 7, 1, 3 ], 126,
+[ 7, 1, 4 ], 127,
+[ 7, 1, 5 ], 127,
+[ 7, 1, 6 ], 128,
+[ 7, 1, 7 ], 128,
+[ 7, 1, 8 ], 128,
+[ 7, 1, 9 ], 129,
+[ 7, 1, 10 ], 129,
+[ 7, 1, 11 ], 129,
+[ 7, 1, 12 ], 130,
+[ 7, 1, 13 ], 130,
+[ 7, 2, 0 ], 131,
+[ 7, 2, 1 ], 131,
+[ 7, 2, 2 ], 131,
+[ 7, 2, 3 ], 132,
+[ 7, 2, 4 ], 133,
+[ 7, 2, 5 ], 133,
+[ 7, 2, 6 ], 134,
+[ 7, 2, 7 ], 134,
+[ 7, 2, 8 ], 135,
+[ 7, 2, 9 ], 135,
+[ 7, 2, 10 ], 136,
+[ 7, 2, 11 ], 136,
+[ 7, 2, 12 ], 137,
+[ 7, 2, 13 ], 137,
+[ 7, 2, 14 ], 138,
+[ 7, 2, 15 ], 138,
+[ 7, 2, 16 ], 138,
+[ 7, 2, 17 ], 139,
+[ 7, 3, 0 ], 139,
+[ 7, 3, 1 ], 140,
+[ 7, 3, 2 ], 140,
+[ 7, 3, 3 ], 140,
+[ 7, 3, 4 ], 141,
+[ 7, 3, 5 ], 141,
+[ 7, 3, 6 ], 142,
+[ 7, 3, 7 ], 143,
+[ 7, 3, 8 ], 143,
+[ 7, 3, 9 ], 143,
+[ 7, 3, 10 ], 144,
+[ 7, 3, 11 ], 144,
+[ 7, 3, 12 ], 145,
+[ 7, 3, 13 ], 145,
+[ 7, 4, 0 ], 146,
+[ 7, 4, 1 ], 146,
+[ 7, 4, 2 ], 146,
+[ 7, 4, 3 ], 146,
+[ 7, 4, 4 ], 147,
+[ 7, 4, 5 ], 147,
+[ 7, 5, 0 ], 147,
+[ 7, 5, 1 ], 147,
+[ 7, 5, 2 ], 148,
+[ 7, 5, 3 ], 148,
+[ 7, 5, 4 ], 148,
+[ 7, 5, 5 ], 149,
+[ 7, 5, 6 ], 149,
+[ 7, 5, 7 ], 149,
+[ 7, 5, 8 ], 150,
+[ 7, 5, 9 ], 150,
+[ 7, 5, 10 ], 150,
+[ 7, 5, 11 ], 151,
+[ 7, 5, 12 ], 151,
+[ 7, 5, 13 ], 152,
+[ 7, 5, 14 ], 152,
+[ 7, 5, 15 ], 152,
+[ 7, 5, 16 ], 153,
+[ 7, 5, 17 ], 153,
+[ 7, 6, 0 ], 153,
+[ 7, 6, 1 ], 153,
+[ 7, 6, 2 ], 153,
+[ 7, 6, 3 ], 154,
+[ 7, 6, 4 ], 154,
+[ 7, 6, 5 ], 155,
+[ 7, 6, 6 ], 155,
+[ 7, 6, 7 ], 155,
+[ 7, 6, 8 ], 156,
+[ 7, 6, 9 ], 156,
+[ 7, 6, 10 ], 157,
+[ "Bib", 0, 0 ], 158,
+[ "Ind", 0, 0 ], 160,
+["End"], 165];
diff --git a/doc/guava.tex b/doc/guava.tex
new file mode 100644
index 0000000..b943f46
--- /dev/null
+++ b/doc/guava.tex
@@ -0,0 +1,8771 @@
+% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
+\documentclass[a4paper,11pt]{report}
+\usepackage{a4wide}
+\sloppy
+\pagestyle{myheadings}
+\usepackage{amssymb}
+\usepackage[latin1]{inputenc}
+\usepackage{makeidx}
+\makeindex
+\usepackage{color}
+\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
+\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{FuncColor}{rgb}{1.0,0.0,0.0}
+%% strange name because of pdflatex bug:
+\definecolor{Chapter }{rgb}{0.0,0.0,1.0}
+
+\usepackage{fancyvrb}
+
+\usepackage{pslatex}
+
+\usepackage[pdftex=true,
+        a4paper=true,bookmarks=false,pdftitle={Written with GAPDoc},
+        pdfcreator={LaTeX with hyperref package / GAPDoc},
+        colorlinks=true,backref=page,breaklinks=true,linkcolor=RoyalBlue,
+        citecolor=RoyalGreen,filecolor=RoyalRed,
+        urlcolor=RoyalRed,pagecolor=RoyalBlue]{hyperref}
+
+% 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,}}
+\newcommand{\Q}{\mathbb{Q}}
+\newcommand{\R}{\mathbb{R}}
+\newcommand{\C}{\mathbb{C}}
+\newcommand{\Z}{\mathbb{Z}}
+\newcommand{\N}{\mathbb{N}}
+\newcommand{\F}{\mathbb{F}}
+
+\newcommand{\GAP}{\textsf{GAP}}
+
+\begin{document}
+
+\logpage{[ 0, 0, 0 ]}
+\begin{titlepage}
+\begin{center}{\Huge \textbf{ \textsf{GUAVA} \mbox{}}}\\[1cm]
+\hypersetup{pdftitle= \textsf{GUAVA} }
+\markright{\scriptsize \mbox{}\hfill  \textsf{GUAVA}  \hfill\mbox{}}
+{\Large \textbf{  A \textsf{GAP}4 Package for computing with error-correcting codes {\nobreakspace} \mbox{}}}\\[1cm]
+{Version 3.5\mbox{}}\\[1cm]
+{April 25, 2008\mbox{}}\\[1cm]
+\mbox{}\\[2cm]
+{\large \textbf{ Jasper Cramwinckel \mbox{}}}\\
+{\large \textbf{ Erik Roijackers \mbox{}}}\\
+{\large \textbf{ Reinald Baart \mbox{}}}\\
+{\large \textbf{Eric Minkes, Lea Ruscio \mbox{}}}\\
+{\large \textbf{ Robert L Miller,  \mbox{}}}\\
+{\large \textbf{ Tom Boothby  \mbox{}}}\\
+{\large \textbf{ Cen (``CJ'') Tjhai     \mbox{}}}\\
+{\large \textbf{ David Joyner (Maintainer),     \mbox{}}}\\
+\hypersetup{pdfauthor= Jasper Cramwinckel ;  Erik Roijackers ;  Reinald Baart ; Eric Minkes, Lea Ruscio ;  Robert L Miller,  ;  Tom Boothby  ;  Cen (``CJ'') Tjhai     ;  David Joyner (Maintainer),     }
+\end{center}\vfill
+
+\mbox{}\\
+{\mbox{}\\
+\small \noindent \textbf{ Robert L Miller,  } --- Email: \href{mailto://rlm@robertlmiller.com} {\texttt{rlm at robertlmiller.com}}}\\
+{\mbox{}\\
+\small \noindent \textbf{ Cen (``CJ'') Tjhai     } --- Email: \href{mailto://cen.tjhai@plymouth.ac.uk} {\texttt{cen.tjhai at plymouth.ac.uk}}\\
+ --- Homepage: \href{http://www.plymouth.ac.uk/staff/ctjhai} {\texttt{http://www.plymouth.ac.uk/staff/ctjhai}}}\\
+{\mbox{}\\
+\small \noindent \textbf{ David Joyner (Maintainer),     } --- Email: \href{mailto://wdjoyner@gmail.com} {\texttt{wdjoyner at gmail.com}}\\
+ --- Homepage: \href{http://sage.math.washington.edu/home/wdj/guava/} {\texttt{http://sage.math.washington.edu/home/wdj/guava/}}}\\
+\end{titlepage}
+
+\newpage\setcounter{page}{2}
+{\small 
+\section*{Copyright}
+\logpage{[ 0, 0, 1 ]}
+  {\copyright} The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik
+Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version),
+Jeffrey Leon {\copyright} 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel,
+Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. {\copyright} 2007
+Robert L Miller, Tom Boothby 
+
+ \textsf{GUAVA} is released under the GNU General Public License (GPL). This file is part of \textsf{GUAVA}, though as documentation it is released under the GNU Free Documentation
+License (see \href{http://www.gnu.org/licenses/licenses.html#FDL} {\texttt{http://www.gnu.org/licenses/licenses.html\#FDL}}). 
+
+ \textsf{GUAVA} is free software; you can redistribute it and/or modify it under the terms of
+the GNU General Public License as published by the Free Software Foundation;
+either version 2 of the License, or (at your option) any later version. 
+
+ \textsf{GUAVA} is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details. 
+
+ You should have received a copy of the GNU General Public License along with \textsf{GUAVA}; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite
+330, Boston, MA 02111-1307 USA 
+
+ For more details, see \href{http://www.fsf.org/licenses/gpl.html} {\texttt{http://www.fsf.org/licenses/gpl.html}}. 
+
+ For many years \textsf{GUAVA} has been released along with the ``backtracking'' C programs of J. Leon. In
+one of his *.c files the following statements occur: ``Copyright (C) 1992 by
+Jeffrey S. Leon. This software may be used freely for educational and research
+purposes. Any other use requires permission from the author.'' The following
+should now be appended: ``I, Jeffrey S. Leon, agree to license all the
+partition backtrack code which I have written under the GPL (www.fsf.org) as
+of this date, April 17, 2007.'' \mbox{}}\\[1cm]
+{\small 
+\section*{Acknowledgements}
+\logpage{[ 0, 0, 2 ]}
+  
+
+ \textsf{GUAVA} was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald
+Baart in the early-to-mid 1990's as a final project during their study of
+Mathematics at the Delft University of Technology, Department of Pure
+Mathematics, under the direction of Professor Juriaan Simonis. This work was
+continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new
+functions were added by Eric Minkes, also from Delft University of Technology. 
+
+ JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their
+support, A.E. Brouwer for his advice and J. Simonis for his supervision. 
+
+ The GAP 4 version of \textsf{GUAVA} (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting
+with version 1.6) is currently maintained by David Joyner, who (with the help
+of several students) has added several new functions. Starting with version
+2.7, the ``best linear code'' tables have been updated. For further details,
+see the CHANGES file in the \textsf{GUAVA} directory, also available at \href{http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava} {\texttt{http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava}}. 
+
+ 
+
+This documentation was prepared with the \textsf{GAPDoc} package of Frank L{\"u}beck and Max Neunh{\"o}ffer. The conversion from TeX to \textsf{GAPDoc}'s XML was done by David Joyner in 2004. 
+
+ Please send bug reports, suggestions and other comments about \textsf{GUAVA} to \href{mailto://support@gap-system.org} {\texttt{support at gap-system.org}}. Currently known bugs and suggested \textsf{GUAVA} projects are listed on the bugs and projects web page \href{http://sage.math.washington.edu/home/wdj/guava/guava2do.html} {\texttt{http://sage.math.washington.edu/home/wdj/guava/guava2do.html}}. Older releases and further history can be found on the \textsf{GUAVA} web page \href{http:// [...]
+
+ \emph{Contributors}: Other than the authors listed on the title page, the following people have
+contributed code to the \textsf{GUAVA} project: Alexander Hulpke, Steve Linton, Frank L{\"u}beck, Aron Foster, Wayne
+Irons, Clifton (``Clipper") Lennon, Jason McGowan, Shuhong Gao, Greg Gamble. 
+
+ For documentation on Leon's programs, see the src/leon/doc subdirectory of \textsf{GUAVA}. \mbox{}}\\[1cm]
+\newpage
+
+\def\contentsname{Contents\logpage{[ 0, 0, 3 ]}}
+
+\tableofcontents
+\newpage
+
+  
+\chapter{\textcolor{Chapter }{Introduction}}\logpage{[ 1, 0, 0 ]}
+\hyperdef{L}{X7DFB63A97E67C0A1}{}
+{
+ 
+\section{\textcolor{Chapter }{Introduction to the \textsf{GUAVA} package}}\logpage{[ 1, 1, 0 ]}
+\hyperdef{L}{X787D826579603719}{}
+{
+  
+
+ This is the manual of the GAP package \textsf{GUAVA} that provides implementations of some routines designed for the construction
+and analysis of in the theory of error-correcting codes. This version of \textsf{GUAVA} requires GAP 4.4.5 or later. 
+
+ The functions can be divided into three subcategories: 
+\begin{itemize}
+\item  Construction of codes: \textsf{GUAVA} can construct unrestricted, linear and cyclic codes. Information about the
+code, such as operations applicable to the code, is stored in a record-like
+data structure called a GAP object. 
+\item  Manipulations of codes: Manipulation transforms one code into another, or
+constructs a new code from two codes. The new code can profit from the data in
+the record of the old code(s), so in these cases calculation time decreases. 
+\item  Computations of information about codes: \textsf{GUAVA} can calculate important parameters of codes quickly. The results are stored in
+the codes' object components. 
+\end{itemize}
+ 
+
+ Except for the automorphism group and isomorphism testing functions, which
+make use of J.S. Leon's programs (see \cite{Leon91} and the documentation in the 'src/leon' subdirectory of the 'guava' directory
+for some details), and \texttt{MinimumWeight} (\ref{MinimumWeight}) function, \textsf{GUAVA} is written in the GAP language, and runs on any system supporting GAP4.3 and
+above. Several algorithms that need the speed were integrated in the GAP
+kernel. 
+
+ Good general references for error-correcting codes and the technical terms in
+this manual are MacWilliams and Sloane \cite{MS83} Huffman and Pless \cite{HP03}. }
+
+ 
+\section{\textcolor{Chapter }{Installing \textsf{GUAVA}}}\logpage{[ 1, 2, 0 ]}
+\hyperdef{L}{X7E2CB7DF83B514A8}{}
+{
+  \label{Installing GUAVA} To install \textsf{GUAVA} (as a GAP 4 Package) unpack the archive file in a directory in the `pkg'
+hierarchy of your version of GAP 4. 
+
+ After unpacking \textsf{GUAVA} the GAP-only part of \textsf{GUAVA} is installed. The parts of \textsf{GUAVA} depending on J. Leon's backtrack programs package (for computing automorphism
+groups) are only available in a UNIX environment, where you should proceed as
+follows: Go to the newly created `guava' directory and call \texttt{`./configure /gappath'} where \texttt{/gappath} is the path to the GAP home directory. So for example, if you install the
+package in the main `pkg' directory call 
+\begin{verbatim}  
+  ./configure ../..
+\end{verbatim}
+ This will fetch the architecture type for which GAP has been compiled last and
+create a `Makefile'. Now call 
+\begin{verbatim}  
+  make
+\end{verbatim}
+ to compile the binary and to install it in the appropriate place. (For a
+windows machine with CYGWIN installed - see \href{http://www.cygwin.com/} {\texttt{http://www.cygwin.com/}} - instructions for compiling Leon's binaries are likely to be similar to those
+above. On a 64-bit SUSE linux computer, instead of the configure command above
+- which will only compile the 32-bit binary - type 
+\begin{verbatim}  
+  ./configure ../.. --enable-libsuffix=64 
+  make
+\end{verbatim}
+ to compile Leon's program as a 64 bit native binary. This may also work for
+other 64-bit linux distributions as well.) 
+
+ Starting with version 2.5, you should also install the GAP package \textsf{SONATA} to load GAP. You can download this from the GAP website and unpack it in the
+`pkg' subdirectory. 
+
+ This completes the installation of \textsf{GUAVA} for a single architecture. If you use this installation of \textsf{GUAVA} on different hardware platforms you will have to compile the binary for each
+platform separately. }
+
+ 
+\section{\textcolor{Chapter }{Loading \textsf{GUAVA}}}\logpage{[ 1, 3, 0 ]}
+\hyperdef{L}{X80EAA631863F805B}{}
+{
+  After starting up GAP, the \textsf{GUAVA} package needs to be loaded. Load \textsf{GUAVA} by typing at the GAP prompt: 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> LoadPackage( "guava" );
+\end{Verbatim}
+ If \textsf{GUAVA} isn't already in memory, it is loaded and the author information is displayed.
+If you are a frequent user of \textsf{GUAVA}, you might consider putting this line in your `.gaprc' file. }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{Coding theory functions in GAP}}\logpage{[ 2, 0, 0 ]}
+\hyperdef{L}{X7A93308C82637F4F}{}
+{
+  \label{Coding theory functions in the GAP} This chapter will recall from the GAP4.4.5 manual some of the GAP coding
+theory and finite field functions useful for coding theory. Some of these
+functions are partially written in C for speed. The main functions are 
+\begin{itemize}
+\item  \texttt{AClosestVectorCombinationsMatFFEVecFFE}, 
+\item  \texttt{AClosestVectorCombinationsMatFFEVecFFECoords}, 
+\item  \texttt{CosetLeadersMatFFE}, 
+\item  \texttt{DistancesDistributionMatFFEVecFFE}, 
+\item  \texttt{DistancesDistributionVecFFEsVecFFE}, 
+\item  \texttt{DistanceVecFFE} and \texttt{WeightVecFFE}, 
+\item  \texttt{ConwayPolynomial} and \texttt{IsCheapConwayPolynomial}, 
+\item  \texttt{IsPrimitivePolynomial}, and \texttt{RandomPrimitivePolynomial}. 
+\end{itemize}
+ However, the GAP command \texttt{PrimitivePolynomial} returns an integer primitive polynomial not the finite field kind. 
+
+ 
+\section{\textcolor{Chapter }{ Distance functions }}\logpage{[ 2, 1, 0 ]}
+\hyperdef{L}{X80F192497C008691}{}
+{
+  \label{Distance functions} 
+
+\subsection{\textcolor{Chapter }{AClosestVectorCombinationsMatFFEVecFFE}}
+\logpage{[ 2, 1, 1 ]}\nobreak
+\hyperdef{L}{X82E5987E81487D18}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AClosestVectorCombinationsMatFFEVecFFE({\slshape mat, F, vec, r, st})\index{AClosestVectorCombinationsMatFFEVecFFE@\texttt{AClosestVectorCombinationsMatFFEVecFFE}}
+\label{AClosestVectorCombinationsMatFFEVecFFE}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command runs through the \mbox{\texttt{\slshape F}}-linear combinations of the vectors in the rows of the matrix \mbox{\texttt{\slshape mat}} that can be written as linear combinations of exactly \mbox{\texttt{\slshape r}} rows (that is without using zero as a coefficient) and returns a vector from
+these that is closest to the vector \mbox{\texttt{\slshape vec}}. The length of the rows of \mbox{\texttt{\slshape mat}} and the length of \mbox{\texttt{\slshape vec}} must be equal, and all elements must lie in \mbox{\texttt{\slshape F}}. The rows of \mbox{\texttt{\slshape mat}} must be linearly independent. If it finds a vector of distance at most \mbox{\texttt{\slshape st}}, which must be a nonnegative integer, then it stops immediately and returns
+this vector. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(3);;
+  gap> x:= Indeterminate( F );; pol:= x^2+1;
+  x_1^2+Z(3)^0
+  gap> C := GeneratorPolCode(pol,8,F);
+  a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+  gap> v:=Codeword("12101111");
+  [ 1 2 1 0 1 1 1 1 ]
+  gap> v:=VectorCodeword(v);
+  [ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
+  gap> G:=GeneratorMat(C);
+  [ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+    [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+    [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+    [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+    [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
+  gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{AClosestVectorComb..MatFFEVecFFECoords}}
+\logpage{[ 2, 1, 2 ]}\nobreak
+\hyperdef{L}{X870DE258833C5AA0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AClosestVectorComb..MatFFEVecFFECoords({\slshape mat, F, vec, r, st})\index{AClosestVectorComb..MatFFEVecFFECoords@\texttt{AClosestVectorComb..MatFFEVecFFECoords}}
+\label{AClosestVectorComb..MatFFEVecFFECoords}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AClosestVectorCombinationsMatFFEVecFFECoords} returns a two element list containing (a) the same closest vector as in \texttt{AClosestVectorCombinationsMatFFEVecFFE}, and (b) a vector \mbox{\texttt{\slshape v}} with exactly \mbox{\texttt{\slshape r}} non-zero entries, such that $v*mat$ is the closest vector. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(3);;
+  gap> x:= Indeterminate( F );; pol:= x^2+1;
+  x_1^2+Z(3)^0
+  gap> C := GeneratorPolCode(pol,8,F);
+  a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+  gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
+  [ 1 2 1 0 1 1 1 1 ]
+  gap> G:=GeneratorMat(C);;
+  gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+  [ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
+    [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DistancesDistributionMatFFEVecFFE}}
+\logpage{[ 2, 1, 3 ]}\nobreak
+\hyperdef{L}{X85135CEB86E61D49}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistributionMatFFEVecFFE({\slshape mat, f, vec})\index{DistancesDistributionMatFFEVecFFE@\texttt{DistancesDistributionMatFFEVecFFE}}
+\label{DistancesDistributionMatFFEVecFFE}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DistancesDistributionMatFFEVecFFE} returns the distances distribution of the vector \mbox{\texttt{\slshape vec}} to the vectors in the vector space generated by the rows of the matrix \mbox{\texttt{\slshape mat}} over the finite field \mbox{\texttt{\slshape f}}. All vectors must have the same length, and all elements must lie in a common
+field. The distances distribution is a list $d$ of length $Length(vec)+1$, such that the value $d[i]$ is the number of vectors in vecs that have distance $i+1$ to \mbox{\texttt{\slshape vec}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+  gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+  gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+  [ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DistancesDistributionVecFFEsVecFFE}}
+\logpage{[ 2, 1, 4 ]}\nobreak
+\hyperdef{L}{X7F2F630984A9D3D6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistributionVecFFEsVecFFE({\slshape vecs, vec})\index{DistancesDistributionVecFFEsVecFFE@\texttt{DistancesDistributionVecFFEsVecFFE}}
+\label{DistancesDistributionVecFFEsVecFFE}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DistancesDistributionVecFFEsVecFFE} returns the distances distribution of the vector \mbox{\texttt{\slshape vec}} to the vectors in the list \mbox{\texttt{\slshape vecs}}. All vectors must have the same length, and all elements must lie in a common
+field. The distances distribution is a list $d$ of length $Length(vec)+1$, such that the value $d[i]$ is the number of vectors in \mbox{\texttt{\slshape vecs}} that have distance $i+1$ to \mbox{\texttt{\slshape vec}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+  gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+  >   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+  gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
+  [ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{WeightVecFFE}}
+\logpage{[ 2, 1, 5 ]}\nobreak
+\hyperdef{L}{X7C9F4D657F9BA5A1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightVecFFE({\slshape vec})\index{WeightVecFFE@\texttt{WeightVecFFE}}
+\label{WeightVecFFE}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{WeightVecFFE} returns the weight of the finite field vector \mbox{\texttt{\slshape vec}}, i.e. the number of nonzero entries. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+  gap> WeightVecFFE(v);
+  7
+\end{Verbatim}
+  \index{Hamming metric} 
+
+\subsection{\textcolor{Chapter }{DistanceVecFFE}}
+\logpage{[ 2, 1, 6 ]}\nobreak
+\hyperdef{L}{X85AA5C6587559C1C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistanceVecFFE({\slshape vec1, vec2})\index{DistanceVecFFE@\texttt{DistanceVecFFE}}
+\label{DistanceVecFFE}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The \emph{Hamming metric} on $GF(q)^n$ is the function 
+\[ dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|. \]
+ This is also called the (Hamming) distance between $v=(v_1,...,v_n)$ and $w=(w_1,...,w_n)$. \texttt{DistanceVecFFE} returns the distance between the two vectors \mbox{\texttt{\slshape vec1}} and \mbox{\texttt{\slshape vec2}}, which must have the same length and whose elements must lie in a common
+field. The distance is the number of places where \mbox{\texttt{\slshape vec1}} and \mbox{\texttt{\slshape vec2}} differ. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+  gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+  gap> DistanceVecFFE(v1,v2);
+  2
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Other functions }}\logpage{[ 2, 2, 0 ]}
+\hyperdef{L}{X87C3D1B984960984}{}
+{
+  \label{Other functions} We basically repeat, with minor variation, the material in the GAP manual or
+from Frank Luebeck's website \href{http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol} {\texttt{http://www.math.rwth-aachen.de:8001/\texttt{\symbol{126}}Frank.Luebeck/data/ConwayPol}} on Conway polynomials. \index{$GF(p)$} The \textsc{prime fields}: If $p\geq 2$ is a prime then $GF(p)$ denotes the field ${\mathbb{Z}}/p{\mathbb{Z}}$, with addition and multiplication performed mod $p$. 
+
+ \index{$GF(q)$} The \textsc{prime power fields}: Suppose $q=p^r$ is a prime power, $r>1$, and put $F=GF(p)$. Let $F[x]$ denote the ring of all polynomials over $F$ and let $f(x)$ denote a monic irreducible polynomial in $F[x]$ of degree $r$. The quotient $E = F[x]/(f(x))= F[x]/f(x)F[x]$ is a field with $q$ elements. If $f(x)$ and $E$ are related in this way, we say that $f(x)$ is the \textsc{defining polynomial} of $E$. \index{defining polynomial} Any defining polynomial factors complet [...]
+the field it defines. 
+
+ For any finite field $F$, the multiplicative group of non-zero elements $F^\times$ is a cyclic group. An $\alpha \in F$ is called a \textsc{primitive element} if it is a generator of $F^\times$. A defining polynomial $f(x)$ of $F$ is said to be \textsc{primitive} if it has a root in $F$ which is a primitive element. \index{primitive element} 
+
+\subsection{\textcolor{Chapter }{ConwayPolynomial}}
+\logpage{[ 2, 2, 1 ]}\nobreak
+\hyperdef{L}{X7C2425A786F09054}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConwayPolynomial({\slshape p, n})\index{ConwayPolynomial@\texttt{ConwayPolynomial}}
+\label{ConwayPolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ A standard notation for the elements of $GF(p)$ is given via the representatives $0, ..., p-1$ of the cosets modulo $p$. We order these elements by $0 \ \ \langle\ \ 1 \ \ \langle\ \ 2 \ \ \langle\ \ ... \ \ \langle\ \ p-1$. We introduce an ordering of the polynomials of degree $r$ over $GF(p)$. Let $g(x) = g_rx^r + ... + g_0$ and $h(x) = h_rx^r + ... + h_0$ (by convention, $g_i=h_i=0$ for $i\ \ \rangle\ \ r$). Then we define $g \ \ \langle\ \ h$ if and only if there is an index $k$ wit [...]
+
+ The \textsc{Conway polynomial} $f_{p,r}(x)$ for $GF(p^r)$ is the smallest polynomial of degree $r$ with respect to this ordering such that: 
+\begin{itemize}
+\item  $f_{p,r}(x)$ is monic, 
+\item  $f_{p,r}(x)$ is primitive, that is, any zero is a generator of the (cyclic) multiplicative
+group of $GF(p^r)$, 
+\item  for each proper divisor $m$ of $r$ we have that $f_{p,m}(x^{(p^r-1) / (p^m-1)}) \equiv 0 \pmod{f_{p,r}(x)}$; that is, the $(p^r-1) / (p^m-1)$-th power of a zero of $f_{p,r}(x)$ is a zero of $f_{p,m}(x)$. 
+\end{itemize}
+ 
+
+ \texttt{ConwayPolynomial(p,n)} returns the polynomial $f_{p,r}(x)$ defined above. 
+
+ \texttt{IsCheapConwayPolynomial(p,n)} returns true if \texttt{ConwayPolynomial( p, n )} will give a result in reasonable time. This is either the case when this
+polynomial is pre-computed, or if $n,p$ are not too big. }
+
+ \index{IsCheapConwayPolynomial} 
+
+\subsection{\textcolor{Chapter }{RandomPrimitivePolynomial}}
+\logpage{[ 2, 2, 2 ]}\nobreak
+\hyperdef{L}{X7ECC593583E68A6C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomPrimitivePolynomial({\slshape F, n})\index{RandomPrimitivePolynomial@\texttt{RandomPrimitivePolynomial}}
+\label{RandomPrimitivePolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ For a finite field \mbox{\texttt{\slshape F}} and a positive integer \mbox{\texttt{\slshape n}} this function returns a primitive polynomial of degree \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}, that is a zero of this polynomial has maximal multiplicative order $|F|^n-1$. 
+
+ \texttt{IsPrimitivePolynomial(f)} can be used to check if a univariate polynomial \mbox{\texttt{\slshape f}} is primitive or not. }
+
+ \index{IsPrimitivePolynomial} }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{Codewords}}\logpage{[ 3, 0, 0 ]}
+\hyperdef{L}{X836BAA9A7EBD08B1}{}
+{
+  \label{Codewords} Let $GF(q)$ denote a finite field with $q$ (a prime power) elements. A \emph{code} is a subset $C$ of some finite-dimensional vector space $V$ over $GF(q)$. The \emph{length} of $C$ is the dimension of $V$. Usually, $V=GF(q)^n$ and the length is the number of coordinate entries. When $C$ is itself a vector space over $GF(q)$ then it is called a \emph{linear code} \index{linear code} and the \emph{dimension} of $C$ is its dimension as a vector space over $GF(q)$. 
+
+ In \textsf{GUAVA}, a `codeword' is a GAP record, with one of its components being an element in $V$. Likewise, a `code' is a GAP record, with one of its components being a
+subset (or subspace with given basis, if $C$ is linear) of $V$. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+    gap> C:=RandomLinearCode(20,10,GF(4));
+    a  [20,10,?] randomly generated code over GF(4)
+    gap> c:=Random(C);
+    [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
+    gap> NamesOfComponents(C);
+    [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+      "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
+       "Representative", "ZeroImmutable" ]
+    gap> NamesOfComponents(c);
+    [ "VectorCodeword", "WordLength", "treatAsPoly" ]
+    gap> c!.VectorCodeword;
+    [ immutable compressed vector length 20 over GF(4) ] 
+    gap> Display(last);
+    [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
+      Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
+      Z(2)^0, 0*Z(2) ]
+    gap> C!.Dimension;
+    10
+\end{Verbatim}
+  Mathematically, a `codeword' is an element of a code $C$, but in \textsf{GUAVA} the \texttt{Codeword} and \texttt{VectorCodeword} commands have implementations which do not check if the codeword belongs to $C$ (i.e., are independent of the code itself). They exist primarily to make it
+easier for the user to construct a the associated GAP record. Using these
+commands, one can enter into a GAP both a codeword $c$ (belonging to $C$) and a received word $r$ (not belonging to $C$) using the same command. The user can input codewords in different formats
+(as strings, vectors, and polynomials), and output information is formatted in
+a readable way. 
+
+ A codeword $c$ in a linear code $C$ arises in practice by an initial encoding of a 'block' message $m$, adding enough redundancy to recover $m$ after $c$ is transmitted via a 'noisy' communication medium. In \textsf{GUAVA}, for linear codes, the map $m\longmapsto c$ is computed using the command \texttt{c:=m*C} and recovering $m$ from $c$ is obtained by the command \texttt{InformationWord(C,c)}. These commands are explained more below. 
+
+ Many operations are available on codewords themselves, although codewords also
+work together with codes (see chapter \ref{Codes} on Codes). 
+
+ The first section describes how codewords are constructed (see \texttt{Codeword} (\ref{Codeword}) and \texttt{IsCodeword} (\ref{IsCodeword})). Sections \ref{Comparisons of Codewords} and \ref{Arithmetic Operations for Codewords} describe the arithmetic operations applicable to codewords. Section \ref{convert Codewords to Vectors or Polynomials} describe functions that convert codewords back to vectors or polynomials (see \texttt{VectorCodeword} (\ref{VectorCodeword}) and \texttt{PolyCod [...]
+Codeword} describe functions that change the way a codeword is displayed (see \texttt{TreatAsVector} (\ref{TreatAsVector}) and \texttt{TreatAsPoly} (\ref{TreatAsPoly})). Finally, Section \ref{Other Codeword Functions} describes a function to generate a null word (see \texttt{NullWord} (\ref{NullWord})) and some functions for extracting properties of codewords (see \texttt{DistanceCodeword} (\ref{DistanceCodeword}), \texttt{Support} (\ref{Support}) and \texttt{WeightCodeword} (\ref{Weight [...]
+\section{\textcolor{Chapter }{Construction of Codewords}}\logpage{[ 3, 1, 0 ]}
+\hyperdef{L}{X81B73ABB87DA8E49}{}
+{
+  \label{Construction of Codewords} 
+
+\subsection{\textcolor{Chapter }{Codeword}}
+\logpage{[ 3, 1, 1 ]}\nobreak
+\hyperdef{L}{X7B9E353D852851AA}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Codeword({\slshape obj[, n][, F]})\index{Codeword@\texttt{Codeword}}
+\label{Codeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Codeword} returns a codeword or a list of codewords constructed from \mbox{\texttt{\slshape obj}}. The object \mbox{\texttt{\slshape obj}} can be a vector, a string, a polynomial or a codeword. It may also be a list
+of those (even a mixed list). 
+
+ If a number \mbox{\texttt{\slshape n}} is specified, all constructed codewords have length \mbox{\texttt{\slshape n}}. This is the only way to make sure that all elements of \mbox{\texttt{\slshape obj}} are converted to codewords of the same length. Elements of \mbox{\texttt{\slshape obj}} that are longer than \mbox{\texttt{\slshape n}} are reduced in length by cutting of the last positions. Elements of \mbox{\texttt{\slshape obj}} that are shorter than \mbox{\texttt{\slshape n}} are le [...]
+
+ If a Galois field \mbox{\texttt{\slshape F}} is specified, all codewords are constructed over this field. This is the only
+way to make sure that all elements of \mbox{\texttt{\slshape obj}} are converted to the same field \mbox{\texttt{\slshape F}} (otherwise they are converted one by one). Note that all elements of \mbox{\texttt{\slshape obj}} must have elements over \mbox{\texttt{\slshape F}} or over `Integers'. Converting from one Galois field to another is not
+allowed. If no \mbox{\texttt{\slshape F}} is specified, vectors or strings with integer elements will be converted to
+the smallest Galois field possible. 
+
+ Note that a significant speed increase is achieved if \mbox{\texttt{\slshape F}} is specified, even when all elements of \mbox{\texttt{\slshape obj}} already have elements over \mbox{\texttt{\slshape F}}. 
+
+ Every vector in \mbox{\texttt{\slshape obj}} can be a finite field vector over \mbox{\texttt{\slshape F}} or a vector over `Integers'. In the last case, it is converted to \mbox{\texttt{\slshape F}} or, if omitted, to the smallest Galois field possible. 
+
+ Every string in \mbox{\texttt{\slshape obj}} must be a string of numbers, without spaces, commas or any other characters.
+These numbers must be from 0 to 9. The string is converted to a codeword over \mbox{\texttt{\slshape F}} or, if \mbox{\texttt{\slshape F}} is omitted, over the smallest Galois field possible. Note that since all
+numbers in the string are interpreted as one-digit numbers, Galois fields of
+size larger than 10 are not properly represented when using strings. In fact,
+no finite field of size larger than 11 arises in this fashion at all. 
+
+ Every polynomial in \mbox{\texttt{\slshape obj}} is converted to a codeword of length \mbox{\texttt{\slshape n}} or, if omitted, of a length dictated by the degree of the polynomial. If \mbox{\texttt{\slshape F}} is specified, a polynomial in \mbox{\texttt{\slshape obj}} must be over \mbox{\texttt{\slshape F}}. 
+
+ Every element of \mbox{\texttt{\slshape obj}} that is already a codeword is changed to a codeword of length \mbox{\texttt{\slshape n}}. If no \mbox{\texttt{\slshape n}} was specified, the codeword doesn't change. If \mbox{\texttt{\slshape F}} is specified, the codeword must have base field \mbox{\texttt{\slshape F}}. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> c := Codeword([0,1,1,1,0]);
+  [ 0 1 1 1 0 ]
+  gap> VectorCodeword( c ); 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
+  gap> c2 := Codeword([0,1,1,1,0], GF(3));
+  [ 0 1 1 1 0 ]
+  gap> VectorCodeword( c2 );
+  [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
+  gap> Codeword([c, c2, "0110"]);
+  [ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
+  gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+  Z(2)^0+x_1^2
+  gap> Codeword(p);
+  x^2 + 1 
+\end{Verbatim}
+  
+
+ This command can also be called using the syntax \texttt{Codeword(obj,C)}. In this format, the elements of \mbox{\texttt{\slshape obj}} are converted to elements of the same ambient vector space as the elements of
+a code \mbox{\texttt{\slshape C}}. The command \texttt{Codeword(c,C)} is the same as calling \texttt{Codeword(c,n,F)}, where \mbox{\texttt{\slshape n}} is the word length of \mbox{\texttt{\slshape C}} and the \mbox{\texttt{\slshape F}} is the ground field of \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := WholeSpaceCode(7,GF(5));
+  a cyclic [7,7,1]0 whole space code over GF(5)
+  gap> Codeword(["0220110", [1,1,1]], C);
+  [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
+  gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
+  [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
+  gap> C:=RandomLinearCode(10,5,GF(3));
+  a linear [10,5,1..3]3..5 random linear code over GF(3)
+  gap> Codeword("1000000000",C);
+  [ 1 0 0 0 0 0 0 0 0 0 ]
+  gap> Codeword("1000000000",10,GF(3));
+  [ 1 0 0 0 0 0 0 0 0 0 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CodewordNr}}
+\logpage{[ 3, 1, 2 ]}\nobreak
+\hyperdef{L}{X7E7ED91C79BF3EF3}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodewordNr({\slshape C, list})\index{CodewordNr@\texttt{CodewordNr}}
+\label{CodewordNr}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodewordNr} returns a list of codewords of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape list}} may be a list of integers or a single integer. For each integer of \mbox{\texttt{\slshape list}}, the corresponding codeword of \mbox{\texttt{\slshape C}} is returned. The correspondence of a number $i$ with a codeword is determined as follows: if a list of elements of \mbox{\texttt{\slshape C}} is available, the $i^{th}$ element is taken. Otherwise, it is calculated by multiplic [...]
+information vectors are ordered lexicographically. In particular, the returned
+codeword(s) could be a vector or a polynomial. So \texttt{CodewordNr(C, i)} is equal to \texttt{AsSSortedList(C)[i]}, described in the next chapter. The latter function first calculates the set
+of all the elements of $C$ and then returns the $i^{th}$ element of that set, whereas the former only calculates the $i^{th}$ codeword. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> B := BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> c := CodewordNr(B, 4);
+  x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+  gap> R := ReedSolomonCode(2,2);
+  a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
+  gap> AsSSortedList(R);
+  [ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
+  gap> CodewordNr(R, [1,3]);
+  [ [ 0 0 ], [ 2 2 ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsCodeword}}
+\logpage{[ 3, 1, 3 ]}\nobreak
+\hyperdef{L}{X7F25479781E6E109}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCodeword({\slshape obj})\index{IsCodeword@\texttt{IsCodeword}}
+\label{IsCodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsCodeword} returns `true' if \mbox{\texttt{\slshape obj}}, which can be an object of arbitrary type, is of the codeword type and
+`false' otherwise. The function will signal an error if \mbox{\texttt{\slshape obj}} is an unbound variable. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsCodeword(1);
+  false
+  gap> IsCodeword(ReedMullerCode(2,3));
+  false
+  gap> IsCodeword("11111");
+  false
+  gap> IsCodeword(Codeword("11111"));
+  true 
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{Comparisons of Codewords}}\logpage{[ 3, 2, 0 ]}
+\hyperdef{L}{X8253374284B475B6}{}
+{
+  \label{Comparisons of Codewords} 
+
+\subsection{\textcolor{Chapter }{=}}
+\logpage{[ 3, 2, 1 ]}\nobreak
+\hyperdef{L}{X8123456781234567}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{=({\slshape c1, c2})\index{=@\texttt{=}}
+\label{=}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The equality operator \texttt{c1 = c2} evaluates to `true' if the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}} are equal, and to `false' otherwise. Note that codewords are equal if and only
+if their base vectors are equal. Whether they are represented as a vector or
+polynomial has nothing to do with the comparison. 
+
+ Comparing codewords with objects of other types is not recommended, although
+it is possible. If \mbox{\texttt{\slshape c2}} is the codeword, the other object \mbox{\texttt{\slshape c1}} is first converted to a codeword, after which comparison is possible. This
+way, a codeword can be compared with a vector, polynomial, or string. If \mbox{\texttt{\slshape c1}} is the codeword, then problems may arise if \mbox{\texttt{\slshape c2}} is a polynomial. In that case, the comparison always yields a `false', because
+the polynomial comparison is called. 
+
+ The equality operator is also denoted \texttt{EQ}, and \texttt{EQ(c1,c2)} is the same as \texttt{c1 = c2}. There is also an inequality operator, {\textless} {\textgreater}, or \texttt{not EQ}. \index{not =} \index{{\textless} {\textgreater}} }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+  Z(2)^0+x_1^3
+  gap> c := Codeword(P, GF(2));
+  x^3 + 1
+  gap> P = c;        # codeword operation
+  true
+  gap> c2 := Codeword("1001", GF(2));
+  [ 1 0 0 1 ]
+  gap> c = c2;
+  true 
+  gap> C:=HammingCode(3);
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> c1:=Random(C);
+  [ 1 0 0 1 1 0 0 ]
+  gap> c2:=Random(C);
+  [ 0 1 0 0 1 0 1 ]
+  gap> EQ(c1,c2);
+  false
+  gap> not EQ(c1,c2);
+  true
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{Arithmetic Operations for Codewords}}\logpage{[ 3, 3, 0 ]}
+\hyperdef{L}{X7ADE7E95867A14E1}{}
+{
+  \label{Arithmetic Operations for Codewords} 
+
+\subsection{\textcolor{Chapter }{+}}
+\logpage{[ 3, 3, 1 ]}\nobreak
+\hyperdef{L}{X7F2703417F270341}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape c1, c2})\index{+@\texttt{+}}
+\label{+}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The following operations are always available for codewords. The operands must
+have a common base field, and must have the same length. No implicit
+conversions are performed. \index{codewords, addition} 
+
+ The operator \texttt{+} evaluates to the sum of the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(3));
+  a linear [10,5,1..3]3..5 random linear code over GF(3)
+  gap> c:=Random(C);
+  [ 1 0 2 2 2 2 1 0 2 0 ]
+  gap> Codeword(c+"2000000000");
+  [ 0 0 2 2 2 2 1 0 2 0 ]
+  gap> Codeword(c+"1000000000");
+\end{Verbatim}
+  The last command returns a GAP ERROR since the `codeword' which \textsf{GUAVA} associates to "1000000000" belongs to $GF(2)$ and not $GF(3)$. 
+
+\subsection{\textcolor{Chapter }{-}}
+\logpage{[ 3, 3, 2 ]}\nobreak
+\hyperdef{L}{X81B1391281B13912}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{-({\slshape c1, c2})\index{-@\texttt{-}}
+\label{-}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Similar to addition: the operator \texttt{-} evaluates to the difference of the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. \index{codewords, subtraction} }
+
+ 
+
+\subsection{\textcolor{Chapter }{+}}
+\logpage{[ 3, 3, 3 ]}\nobreak
+\hyperdef{L}{X7F2703417F270341}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape v, C})\index{+@\texttt{+}}
+\label{+}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The operator \texttt{v+C} evaluates to the coset code of code \mbox{\texttt{\slshape C}} after adding a `codeword' \mbox{\texttt{\slshape v}} to all codewords in \mbox{\texttt{\slshape C}}. Note that if $c \in C$ then mathematically $c+C=C$ but \textsf{GUAVA} only sees them equal as \emph{sets}. See \texttt{CosetCode} (\ref{CosetCode}). 
+
+ Note that the command \texttt{C+v} returns the same output as the command \texttt{v+C}. 
+
+ \index{codewords, cosets} }
+
+ \index{coset} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5);
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> c:=Random(C);
+  [ 0 0 0 0 0 0 0 0 0 0 ]
+  gap> c+C;
+  [ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+  gap> c+C=C;
+  true
+  gap> IsLinearCode(c+C);
+  false
+  gap> v:=Codeword("100000000");
+  [ 1 0 0 0 0 0 0 0 0 ]
+  gap> v+C;
+  [ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+  gap> C=v+C;
+  false
+  gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+  a linear [4,2,1]1 code defined by generator matrix over GF(2)
+  gap> Elements(C);
+  [ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
+  gap> v:=Codeword("0011");
+  [ 0 0 1 1 ]
+  gap> C+v;
+  [ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
+  gap> Elements(C+v);
+  [ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]
+\end{Verbatim}
+  In general, the operations just described can also be performed on codewords
+expressed as vectors, strings or polynomials, although this is not
+recommended. The vector, string or polynomial is first converted to a
+codeword, after which the normal operation is performed. For this to go right,
+make sure that at least one of the operands is a codeword. Further more, it
+will not work when the right operand is a polynomial. In that case, the
+polynomial operations (\texttt{FiniteFieldPolynomialOps}) are called, instead of the codeword operations (\texttt{CodewordOps}). 
+
+ Some other code-oriented operations with codewords are described in \ref{Operations for Codes}. }
+
+ 
+\section{\textcolor{Chapter }{ Functions that Convert Codewords to Vectors or Polynomials }}\logpage{[ 3, 4, 0 ]}
+\hyperdef{L}{X7BBA5DCD7A8BD60D}{}
+{
+  \label{convert Codewords to Vectors or Polynomials} 
+
+\subsection{\textcolor{Chapter }{VectorCodeword}}
+\logpage{[ 3, 4, 1 ]}\nobreak
+\hyperdef{L}{X87C8B0B178496F6A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VectorCodeword({\slshape obj})\index{VectorCodeword@\texttt{VectorCodeword}}
+\label{VectorCodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Here \mbox{\texttt{\slshape obj}} can be a code word or a list of code words. This function returns the
+corresponding vectors over a finite field. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Codeword("011011");; 
+  gap> VectorCodeword(a);
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{PolyCodeword}}
+\logpage{[ 3, 4, 2 ]}\nobreak
+\hyperdef{L}{X822465E884D0F484}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PolyCodeword({\slshape obj})\index{PolyCodeword@\texttt{PolyCodeword}}
+\label{PolyCodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PolyCodeword} returns a polynomial or a list of polynomials over a Galois field, converted
+from \mbox{\texttt{\slshape obj}}. The object \mbox{\texttt{\slshape obj}} can be a codeword, or a list of codewords. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Codeword("011011");; 
+  gap> PolyCodeword(a);
+  x_1+x_1^2+x_1^4+x_1^5
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Functions that Change the Display Form of a Codeword }}\logpage{[ 3, 5, 0 ]}
+\hyperdef{L}{X81D3230A797FE6E3}{}
+{
+  \label{Functions that Change the Display Form of a Codeword} 
+
+\subsection{\textcolor{Chapter }{TreatAsVector}}
+\logpage{[ 3, 5, 1 ]}\nobreak
+\hyperdef{L}{X7E3E174B7954AA6B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TreatAsVector({\slshape obj})\index{TreatAsVector@\texttt{TreatAsVector}}
+\label{TreatAsVector}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{TreatAsVector} adapts the codewords in \mbox{\texttt{\slshape obj}} to make sure they are printed as vectors. \mbox{\texttt{\slshape obj}} may be a codeword or a list of codewords. Elements of \mbox{\texttt{\slshape obj}} that are not codewords are ignored. After this function is called, the
+codewords will be treated as vectors. The vector representation is obtained by
+using the coefficient list of the polynomial. 
+
+ Note that this \emph{only} changes the way a codeword is \emph{printed}. \texttt{TreatAsVector} returns nothing, it is called only for its side effect. The function \texttt{VectorCodeword} converts codewords to vectors (see \texttt{VectorCodeword} (\ref{VectorCodeword})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> B := BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> c := CodewordNr(B, 4);
+  x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+  gap> TreatAsVector(c);
+  gap> c;
+  [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{TreatAsPoly}}
+\logpage{[ 3, 5, 2 ]}\nobreak
+\hyperdef{L}{X7A6828148490BD2E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TreatAsPoly({\slshape obj})\index{TreatAsPoly@\texttt{TreatAsPoly}}
+\label{TreatAsPoly}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{TreatAsPoly} adapts the codewords in \mbox{\texttt{\slshape obj}} to make sure they are printed as polynomials. \mbox{\texttt{\slshape obj}} may be a codeword or a list of codewords. Elements of \mbox{\texttt{\slshape obj}} that are not codewords are ignored. After this function is called, the
+codewords will be treated as polynomials. The finite field vector that defines
+the codeword is used as a coefficient list of the polynomial representation,
+where the first element of the vector is the coefficient of degree zero, the
+second element is the coefficient of degree one, etc, until the last element,
+which is the coefficient of highest degree. 
+
+ Note that this \emph{only} changes the way a codeword is \emph{printed}. \texttt{TreatAsPoly} returns nothing, it is called only for its side effect. The function \texttt{PolyCodeword} converts codewords to polynomials (see \texttt{PolyCodeword} (\ref{PolyCodeword})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Codeword("00001",GF(2));
+  [ 0 0 0 0 1 ]
+  gap> TreatAsPoly(a); a;
+  x^4
+  gap> b := NullWord(6,GF(4));
+  [ 0 0 0 0 0 0 ]
+  gap> TreatAsPoly(b); b;
+  0 
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Other Codeword Functions }}\logpage{[ 3, 6, 0 ]}
+\hyperdef{L}{X805BF7147C68CACD}{}
+{
+  \label{Other Codeword Functions} 
+
+\subsection{\textcolor{Chapter }{NullWord}}
+\logpage{[ 3, 6, 1 ]}\nobreak
+\hyperdef{L}{X8000B6597EF0282F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NullWord({\slshape n, F})\index{NullWord@\texttt{NullWord}}
+\label{NullWord}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Other uses: \texttt{NullWord( n )} (default $F=GF(2)$) and \texttt{NullWord( C )}. \texttt{NullWord} returns a codeword of length \mbox{\texttt{\slshape n}} over the field \mbox{\texttt{\slshape F}} of only zeros. The integer \mbox{\texttt{\slshape n}} must be greater then zero. If only a code \mbox{\texttt{\slshape C}} is specified, \texttt{NullWord} will return a null word with both the word length and the Galois field of \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> NullWord(8);
+  [ 0 0 0 0 0 0 0 0 ]
+  gap> Codeword("0000") = NullWord(4);
+  true
+  gap> NullWord(5,GF(16));
+  [ 0 0 0 0 0 ]
+  gap> NullWord(ExtendedTernaryGolayCode());
+  [ 0 0 0 0 0 0 0 0 0 0 0 0 ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DistanceCodeword}}
+\logpage{[ 3, 6, 2 ]}\nobreak
+\hyperdef{L}{X7CDA1B547D55E6FB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistanceCodeword({\slshape c1, c2})\index{DistanceCodeword@\texttt{DistanceCodeword}}
+\label{DistanceCodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DistanceCodeword} returns the Hamming distance from \mbox{\texttt{\slshape c1}} to \mbox{\texttt{\slshape c2}}. Both variables must be codewords with equal word length over the same Galois
+field. The Hamming distance between two words is the number of places in which
+they differ. As a result, \texttt{DistanceCodeword} always returns an integer between zero and the word length of the codewords. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+  gap> DistanceCodeword(a, b);
+  4
+  gap> DistanceCodeword(b, a);
+  4
+  gap> DistanceCodeword(a, a);
+  0 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{Support}}
+\logpage{[ 3, 6, 3 ]}\nobreak
+\hyperdef{L}{X7B689C0284AC4296}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Support({\slshape c})\index{Support@\texttt{Support}}
+\label{Support}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Support} returns a set of integers indicating the positions of the non-zero entries in
+a codeword \mbox{\texttt{\slshape c}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Codeword("012320023002");; Support(a);
+  [ 2, 3, 4, 5, 8, 9, 12 ]
+  gap> Support(NullWord(7));
+  [  ] 
+\end{Verbatim}
+  The support of a list with codewords can be calculated by taking the union of
+the individual supports. The weight of the support is the length of the set. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
+  gap> S := Union(List(L, i -> Support(i)));
+  [ 1, 2, 3, 5 ]
+  gap> Length(S);
+  4 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{WeightCodeword}}
+\logpage{[ 3, 6, 4 ]}\nobreak
+\hyperdef{L}{X7AD61C237D8D3849}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightCodeword({\slshape c})\index{WeightCodeword@\texttt{WeightCodeword}}
+\label{WeightCodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{WeightCodeword} returns the weight of a codeword $c$, the number of non-zero entries in \mbox{\texttt{\slshape c}}. As a result, \texttt{WeightCodeword} always returns an integer between zero and the word length of the codeword. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> WeightCodeword(Codeword("22222"));
+  5
+  gap> WeightCodeword(NullWord(3));
+  0
+  gap> C := HammingCode(3);
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+  3 
+\end{Verbatim}
+  }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{Codes}}\logpage{[ 4, 0, 0 ]}
+\hyperdef{L}{X85FDDF0B7B7D87FB}{}
+{
+  \label{Codes} A \emph{code} is a set of codewords (recall a \index{code} \index{code, elements of} codeword in \textsf{GUAVA} is simply a sequence of elements of a finite field $GF(q)$, where $q$ is a prime power). We call these the \emph{elements} of the code. Depending on the type of code, a codeword can be interpreted as a
+vector or as a polynomial. This is explained in more detail in Chapter \ref{Codewords}. 
+
+ In \textsf{GUAVA}, codes can be a set specified by its elements (this will be called an \emph{unrestricted code}), \index{code, unrestricted} by a generator matrix listing a set of basis elements (for a linear code) or
+by a generator polynomial (for a cyclic code). 
+
+ Any code can be defined by its elements. If you like, you can give the code a
+name. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+  a (4,3,1..4)2..4 example code over GF(2) 
+\end{Verbatim}
+ An $(n,M,d)$ code is a code with word \emph{length} $n$, \emph{size} $M$ and \emph{minimum distance} $d$. \index{code, $(n,M,d)$} \index{minimum distance} \index{length} \index{size} If the minimum distance has not yet been calculated, the lower bound and upper
+bound are printed (except in the case where the code is a random linear codes,
+where these are not printed for efficiency reasons). So 
+\begin{verbatim}  
+  a (4,3,1..4)2..4 code over GF(2)
+\end{verbatim}
+ means a binary unrestricted code of length $4$, with $3$ elements and the minimum distance is greater than or equal to $1$ and less than or equal to $4$ and the covering radius is greater than or equal to $2$ and less than or equal to $4$. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+  a (4,3,1..4)2..4 example code over GF(2) 
+  gap> MinimumDistance(C);
+  2
+  gap> C;
+  a (4,3,2)2..4 example code over GF(2) 
+\end{Verbatim}
+  If the set of elements is a linear subspace of $GF(q)^n$, the code is called \emph{linear}. If a code is linear, it can be defined by its \emph{generator matrix} or \emph{parity check matrix}. \index{code, linear} \index{parity check matrix} By definition, the rows of the generator matrix is a basis for the code (as a
+vector space over $GF(q)$). By definition, the rows of the parity check matrix is a basis for the dual
+space of the code, 
+\[ C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}. \]
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
+  a linear [3,2,1..2]1 demo code over GF(3) 
+\end{Verbatim}
+ So a linear $[n, k, d]r$ code \index{code, $[n, k, d]r$} is a code with word \emph{length} $n$, \emph{dimension} $k$, \emph{minimum distance} $d$ and \emph{covering radius} $r$. 
+
+ If the code is linear and all cyclic shifts of its codewords (regarded as $n$-tuples) are again codewords, the code is called \emph{cyclic}. \index{code, cyclic} All elements of a cyclic code are multiples of the monic polynomial modulo a
+polynomial $x^n -1$, where $n$ is the word length of the code. Such a polynomial is called a \emph{generator polynomial} \index{generator polynomial} The generator polynomial must divide $x^n-1$ and its quotient is called a \emph{check polynomial}. \index{check polynomial} Multiplying a codeword in a cyclic code by the check polynomial yields zero
+(modulo the polynomial $x^n -1$). In \textsf{GUAVA}, a cyclic code can be defined by either its generator polynomial or check
+polynomial. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
+  a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+\end{Verbatim}
+ It is possible that \textsf{GUAVA} does not know that an unrestricted code is in fact linear. This situation
+occurs for example when a code is generated from a list of elements with the
+function \texttt{ElementsCode} (see \texttt{ElementsCode} (\ref{ElementsCode})). By calling the function \texttt{IsLinearCode} (see \texttt{IsLinearCode} (\ref{IsLinearCode})), \textsf{GUAVA} tests if the code can be represented by a generator matrix. If so, the code
+record and the operations are converted accordingly. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+  gap> C := ElementsCode( L, GF(2) );
+  a (3,4,1..3)1 user defined unrestricted code over GF(2)
+  # so far, GUAVA does not know what kind of code this is
+  gap> IsLinearCode( C );
+  true                      # it is linear
+  gap> C;
+  a linear [3,2,1]1 user defined unrestricted code over GF(2) 
+\end{Verbatim}
+  Of course the same holds for unrestricted codes that in fact are cyclic, or
+codes, defined by a generator matrix, that actually are cyclic. 
+
+ Codes are printed simply by giving a small description of their parameters,
+the word length, size or dimension and perhaps the minimum distance, followed
+by a short description and the base field of the code. The function \texttt{Display} gives a more detailed description, showing the construction history of the
+code. 
+
+ \textsf{GUAVA} doesn't place much emphasis on the actual encoding and decoding processes;
+some algorithms have been included though. Encoding works simply by
+multiplying an information vector with a code, decoding is done by the
+functions \texttt{Decode} or \texttt{Decodeword}. For more information about encoding and decoding, see sections \ref{Operations for Codes} and \ref{Decode}. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := ReedMullerCode( 1, 3 );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+  gap> w := [ 1, 0, 1, 1 ] * R;
+  [ 1 0 0 1 1 0 0 1 ]
+  gap> Decode( R, w );
+  [ 1 0 1 1 ]
+  gap> Decode( R, w + "10000000" ); # One error at the first position
+  [ 1 0 1 1 ]                       # Corrected by Guava 
+\end{Verbatim}
+  Sections \ref{Comparisons of Codes} and \ref{Operations for Codes} describe the operations that are available for codes. Section \ref{Boolean Functions for Codes} describe the functions that tests whether an object is a code and what kind of
+code it is (see \texttt{IsCode}, \texttt{IsLinearCode} (\ref{IsLinearCode}) and \texttt{IsCyclicCode}) and various other boolean functions for codes. Section \ref{Equivalence and Isomorphism of Codes} describe functions about equivalence and isomorphism of codes (see \texttt{IsEquivalent} (\ref{IsEquivalent}), \texttt{CodeIsomorphism} (\ref{CodeIsomorphism}) and \texttt{AutomorphismGroup} (\ref{AutomorphismGroup})). Section \ref{Domain Functions for Codes} describes functions that work o [...]
+Section \ref{Printing and Displaying Codes} describes functions for printing and displaying codes. Section \ref{Generating (Check) Matrices and Polynomials} describes functions that return the matrices and polynomials that define a
+code (see \texttt{GeneratorMat} (\ref{GeneratorMat}), \texttt{CheckMat} (\ref{CheckMat}), \texttt{GeneratorPol} (\ref{GeneratorPol}), \texttt{CheckPol} (\ref{CheckPol}), \texttt{RootsOfCode} (\ref{RootsOfCode})). Section \ref{Parameters of Codes} describes functions that return the basic parameters of codes (see \texttt{WordLength} (\ref{WordLength}), \texttt{Redundancy} (\ref{Redundancy}) and \texttt{MinimumDistance} (\ref{MinimumDistance})). Section \ref{Distributions} describes functi [...]
+\section{\textcolor{Chapter }{Comparisons of Codes}}\logpage{[ 4, 1, 0 ]}
+\hyperdef{L}{X7ECE60E1873B49A6}{}
+{
+  \label{Comparisons of Codes} 
+
+\subsection{\textcolor{Chapter }{=}}
+\logpage{[ 4, 1, 1 ]}\nobreak
+\hyperdef{L}{X8123456781234567}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{=({\slshape C1, C2})\index{=@\texttt{=}}
+\label{=}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The equality operator \texttt{C1 = C2} evaluates to `true' if the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are equal, and to `false' otherwise. 
+
+ The equality operator is also denoted \texttt{EQ}, and \texttt{Eq(C1,C2)} is the same as \texttt{C1 = C2}. There is also an inequality operator, {\textless} {\textgreater}, or \texttt{not EQ}. 
+
+ Note that codes are equal if and only if their set of elements are equal.
+Codes can also be compared with objects of other types. Of course they are
+never equal. }
+
+ \index{not =} \index{{\textless} {\textgreater}} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+  gap> C1 := ElementsCode( M, GF(2) );
+  a (2,4,1..2)0 user defined unrestricted code over GF(2)
+  gap> M = C1;
+  false
+  gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+  a linear [2,2,1]0 code defined by generator matrix over GF(2)
+  gap> C1 = C2;
+  true
+  gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+  true
+  gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+  false
+\end{Verbatim}
+  Another way of comparing codes is \texttt{IsEquivalent}, which checks if two codes are equivalent (see \texttt{IsEquivalent} (\ref{IsEquivalent})). By the way, this called \texttt{CodeIsomorphism}. For the current version of \textsf{GUAVA}, unless one of the codes is unrestricted, this calls Leon's C program (which
+only works for binary linear codes and only on a unix/linux computer). }
+
+ 
+\section{\textcolor{Chapter }{ Operations for Codes }}\logpage{[ 4, 2, 0 ]}
+\hyperdef{L}{X832DA51986A3882C}{}
+{
+  \label{Operations for Codes} 
+
+\subsection{\textcolor{Chapter }{+}}
+\logpage{[ 4, 2, 1 ]}\nobreak
+\hyperdef{L}{X7F2703417F270341}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape C1, C2})\index{+@\texttt{+}}
+\label{+}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{codes, addition} \index{codes, direct sum} The operator `+' evaluates to the direct sum of the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. See \texttt{DirectSumCode} (\ref{DirectSumCode}). 
+
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1:=RandomLinearCode(10,5);
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> C2:=RandomLinearCode(9,4);
+  a  [9,4,?] randomly generated code over GF(2)
+  gap> C1+C2;
+  a linear [10,9,1]0..10 unknown linear code over GF(2)
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{*}}
+\logpage{[ 4, 2, 2 ]}\nobreak
+\hyperdef{L}{X8123456781234567}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{*({\slshape C1, C2})\index{*@\texttt{*}}
+\label{*}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{codes, product} The operator `*' evaluates to the direct product of the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. See \texttt{DirectProductCode} (\ref{DirectProductCode}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+  a linear [4,2,1]1 code defined by generator matrix over GF(2)
+  gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+  a linear [4,2,1]1 code defined by generator matrix over GF(2)
+  gap> C1*C2;
+  a linear [16,4,1]4..12 direct product code
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{*}}
+\logpage{[ 4, 2, 3 ]}\nobreak
+\hyperdef{L}{X8123456781234567}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{*({\slshape m, C})\index{*@\texttt{*}}
+\label{*}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{codes, encoding} \index{encoder map} The operator \texttt{m*C} evaluates to the element of \mbox{\texttt{\slshape C}} belonging to information word ('message') \mbox{\texttt{\slshape m}}. Here \mbox{\texttt{\slshape m}} may be a vector, polynomial, string or codeword or a list of those. This is
+the way to do encoding in \textsf{GUAVA}. \mbox{\texttt{\slshape C}} must be linear, because in \textsf{GUAVA}, encoding by multiplication is only defined for linear codes. If \mbox{\texttt{\slshape C}} is a cyclic code, this multiplication is the same as multiplying an
+information polynomial \mbox{\texttt{\slshape m}} by the generator polynomial of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is a linear code, it is equal to the multiplication of an information vector \mbox{\texttt{\slshape m}} by a generator matrix of \mbox{\texttt{\slshape C}}. 
+
+ To invert this, use the function \texttt{InformationWord} (see \texttt{InformationWord} (\ref{InformationWord}), which simply calls the function \texttt{Decode}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+  a linear [4,2,1]1 code defined by generator matrix over GF(2)
+  gap> m:=Codeword("11");
+  [ 1 1 ]
+  gap> m*C;
+  [ 1 1 0 0 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{InformationWord}}
+\logpage{[ 4, 2, 4 ]}\nobreak
+\hyperdef{L}{X8744BA5E78BCF3F9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{InformationWord({\slshape C, c})\index{InformationWord@\texttt{InformationWord}}
+\label{InformationWord}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{codes, decoding} \index{information bits} Here \mbox{\texttt{\slshape C}} is a linear code and \mbox{\texttt{\slshape c}} is a codeword in it. The command \texttt{InformationWord} returns the message word (or 'information digits') $m$ satisfying \texttt{c=m*C}. This command simply calls \texttt{Decode}, provided \texttt{c in C} is true. Otherwise, it returns an error. 
+
+ To invert this, use the encoding function \texttt{*} (see \texttt{*} (\ref{*})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=HammingCode(3);
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> c:=Random(C);
+  [ 0 0 0 1 1 1 1 ]
+  gap> InformationWord(C,c);
+  [ 0 1 1 1 ]
+  gap> c:=Codeword("1111100");
+  [ 1 1 1 1 1 0 0 ]
+  gap> InformationWord(C,c);
+  "ERROR: codeword must belong to code"
+  gap> C:=NordstromRobinsonCode();
+  a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+  gap> c:=Random(C);
+  [ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
+  gap> InformationWord(C,c);
+  "ERROR: code must be linear"
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Boolean Functions for Codes }}\logpage{[ 4, 3, 0 ]}
+\hyperdef{L}{X864091AA7D4AFE86}{}
+{
+  \label{Boolean Functions for Codes} 
+
+\subsection{\textcolor{Chapter }{in}}
+\logpage{[ 4, 3, 1 ]}\nobreak
+\hyperdef{L}{X87BDB89B7AAFE8AD}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{in({\slshape c, C})\index{in@\texttt{in}}
+\label{in}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{code, element test} The command \texttt{c in C} evaluates to `true' if \mbox{\texttt{\slshape C}} contains the codeword or list of codewords specified by \mbox{\texttt{\slshape c}}. Of course, \mbox{\texttt{\slshape c}} and \mbox{\texttt{\slshape C}} must have the same word lengths and base fields. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+  [ [ 0 0 0 ], [ 1 1 1 ] ]
+  gap> eC[2] in C;
+  true
+  gap> [ 0 ] in C;
+  false 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsSubset}}
+\logpage{[ 4, 3, 2 ]}\nobreak
+\hyperdef{L}{X79CA175481F8105F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSubset({\slshape C1, C2})\index{IsSubset@\texttt{IsSubset}}
+\label{IsSubset}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \index{code, subcode} The command \texttt{IsSubset(C1,C2)} returns `true' if \mbox{\texttt{\slshape C2}} is a subcode of \mbox{\texttt{\slshape C1}}, i.e. if \mbox{\texttt{\slshape C1}} contains all the elements of \mbox{\texttt{\slshape C2}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+  true
+  gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+  false
+  gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsCode}}
+\logpage{[ 4, 3, 3 ]}\nobreak
+\hyperdef{L}{X7F71186281DEA83A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCode({\slshape obj})\index{IsCode@\texttt{IsCode}}
+\label{IsCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsCode} returns `true' if \mbox{\texttt{\slshape obj}}, which can be an object of arbitrary type, is a code and `false' otherwise.
+Will cause an error if \mbox{\texttt{\slshape obj}} is an unbound variable. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsCode( 1 );
+  false
+  gap> IsCode( ReedMullerCode( 2,3 ) );
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsLinearCode}}
+\logpage{[ 4, 3, 4 ]}\nobreak
+\hyperdef{L}{X7B24748A7CE8D4B9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsLinearCode({\slshape obj})\index{IsLinearCode@\texttt{IsLinearCode}}
+\label{IsLinearCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsLinearCode} checks if object \mbox{\texttt{\slshape obj}} (not necessarily a code) is a linear code. If a code has already been marked
+as linear or cyclic, the function automatically returns `true'. Otherwise, the
+function checks if a basis $G$ of the elements of \mbox{\texttt{\slshape obj}} exists that generates the elements of \mbox{\texttt{\slshape obj}}. If so, $G$ is recorded as a generator matrix of \mbox{\texttt{\slshape obj}} and the function returns `true'. If not, the function returns `false'. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+  a (3,2,1..3)1 user defined unrestricted code over GF(2)
+  gap> IsLinearCode( C );
+  true
+  gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+  false
+  gap> IsLinearCode( 1 );
+  false 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsCyclicCode}}
+\logpage{[ 4, 3, 5 ]}\nobreak
+\hyperdef{L}{X850C23D07C9A9B19}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCyclicCode({\slshape obj})\index{IsCyclicCode@\texttt{IsCyclicCode}}
+\label{IsCyclicCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsCyclicCode} checks if the object \mbox{\texttt{\slshape obj}} is a cyclic code. If a code has already been marked as cyclic, the function
+automatically returns `true'. Otherwise, the function checks if a polynomial $g$ exists that generates the elements of \mbox{\texttt{\slshape obj}}. If so, $g$ is recorded as a generator polynomial of \mbox{\texttt{\slshape obj}} and the function returns `true'. If not, the function returns `false'. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+  a (3,2,1..3)1 user defined unrestricted code over GF(2)
+  gap> # GUAVA does not know the code is cyclic
+  gap> IsCyclicCode( C );      # this command tells GUAVA to find out
+  true
+  gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
+  false
+  gap> IsCyclicCode( 1 );
+  false 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsPerfectCode}}
+\logpage{[ 4, 3, 6 ]}\nobreak
+\hyperdef{L}{X85E3BD26856424F7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsPerfectCode({\slshape C})\index{IsPerfectCode@\texttt{IsPerfectCode}}
+\label{IsPerfectCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsPerfectCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a perfect code. If $C\subset GF(q)^n$ then, by definition, this means that for some positive integer $t$, the space $GF(q)^n$ is covered by non-overlapping spheres of (Hamming) radius $t$ centered at the codewords in \mbox{\texttt{\slshape C}}. For a code with odd minimum distance $d = 2t+1$, this is the case when every word of the vector space of \mbox{\texttt{\slshape C}} is at distance at most $t$ from exactly  [...]
+
+ In fact, a code that is not "trivially perfect" (the binary repetition codes
+of odd length, the codes consisting of one word, and the codes consisting of
+the whole vector space), and does not have the parameters of a Hamming or
+Golay code, cannot be perfect (see section 1.12 in \cite{HP03}). }
+
+ \index{code, perfect} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := HammingCode(2);
+  a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+  gap> IsPerfectCode( H );
+  true
+  gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+  true
+  gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+  false
+  gap> IsPerfectCode( BinaryGolayCode() );
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsMDSCode}}
+\logpage{[ 4, 3, 7 ]}\nobreak
+\hyperdef{L}{X789380D28018EC3F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsMDSCode({\slshape C})\index{IsMDSCode@\texttt{IsMDSCode}}
+\label{IsMDSCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsMDSCode(C)} returns true if \mbox{\texttt{\slshape C}} is a maximum distance separable (MDS) code. A linear $[n, k, d]$-code of length $n$, dimension $k$ and minimum distance $d$ is an MDS code if $k=n-d+1$, in other words if \mbox{\texttt{\slshape C}} meets the Singleton bound (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})). An unrestricted $(n, M, d)$ code is called \emph{MDS} if $k=n-d+1$, with $k$ equal to the largest integer less than or equal to the logari [...]
+
+ Well-known MDS codes include the repetition codes, the whole space codes, the
+even weight codes (these are the only \emph{binary} MDS codes) and the Reed-Solomon codes. }
+
+ \index{code, maximum distance separable} \index{MDS} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ReedSolomonCode( 6, 3 );
+  a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
+  gap> IsMDSCode( C1 );
+  true    # 6-3+1 = 4
+  gap> IsMDSCode( QRCode( 23, GF(2) ) );
+  false 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IsSelfDualCode}}
+\logpage{[ 4, 3, 8 ]}\nobreak
+\hyperdef{L}{X80166D8D837FEB58}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfDualCode({\slshape C})\index{IsSelfDualCode@\texttt{IsSelfDualCode}}
+\label{IsSelfDualCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsSelfDualCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is self-dual, i.e. when \mbox{\texttt{\slshape C}} is equal to its dual code (see also \texttt{DualCode} (\ref{DualCode})). A code is self-dual if it contains all vectors that its elements are
+orthogonal to. If a code is self-dual, it automatically is self-orthogonal
+(see \texttt{IsSelfOrthogonalCode} (\ref{IsSelfOrthogonalCode})). 
+
+ If \mbox{\texttt{\slshape C}} is a non-linear code, it cannot be self-dual (the dual code is always linear),
+so `false' is returned. A linear code can only be self-dual when its dimension $k$ is equal to the redundancy $r$. }
+
+ \index{code, self-dual} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
+  true
+  gap> C := ReedMullerCode( 1, 3 );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+  gap> DualCode( C ) = C;
+  true 
+\end{Verbatim}
+ \index{self-orthogonal} 
+
+\subsection{\textcolor{Chapter }{IsSelfOrthogonalCode}}
+\logpage{[ 4, 3, 9 ]}\nobreak
+\hyperdef{L}{X7B2A0CC481D2366F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfOrthogonalCode({\slshape C})\index{IsSelfOrthogonalCode@\texttt{IsSelfOrthogonalCode}}
+\label{IsSelfOrthogonalCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsSelfOrthogonalCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is self-orthogonal. A code is \emph{self-orthogonal} if every element of \mbox{\texttt{\slshape C}} is orthogonal to all elements of \mbox{\texttt{\slshape C}}, including itself. (In the linear case, this simply means that the generator
+matrix of \mbox{\texttt{\slshape C}} multiplied with its transpose yields a null matrix.) }
+
+ \index{code, self-orthogonal} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := ReedMullerCode(1,4);
+  a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+  gap> IsSelfOrthogonalCode(R);
+  true
+  gap> IsSelfDualCode(R);
+  false 
+\end{Verbatim}
+  \index{doubly-even} 
+
+\subsection{\textcolor{Chapter }{IsDoublyEvenCode}}
+\logpage{[ 4, 3, 10 ]}\nobreak
+\hyperdef{L}{X8358D43981EBE970}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsDoublyEvenCode({\slshape C})\index{IsDoublyEvenCode@\texttt{IsDoublyEvenCode}}
+\label{IsDoublyEvenCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsDoublyEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary linear code which has codewords of weight divisible by 4 only.
+According to \cite{HP03}, a doubly-even code is self-orthogonal and every row in its generator matrix
+has weight that is divisible by 4. }
+
+ \index{code, doubly-even} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> WeightDistribution(C);
+  [ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
+  gap> IsDoublyEvenCode(C);  
+  false
+  gap> C:=ExtendedCode(C);  
+  a linear [24,12,8]4 extended code
+  gap> WeightDistribution(C);
+  [ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
+  gap> IsDoublyEvenCode(C);  
+  true
+\end{Verbatim}
+  \index{singly-even} 
+
+\subsection{\textcolor{Chapter }{IsSinglyEvenCode}}
+\logpage{[ 4, 3, 11 ]}\nobreak
+\hyperdef{L}{X79ACAEF5865414A0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSinglyEvenCode({\slshape C})\index{IsSinglyEvenCode@\texttt{IsSinglyEvenCode}}
+\label{IsSinglyEvenCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsSinglyEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary self-orthogonal linear code which is not doubly-even. In other
+words, \mbox{\texttt{\slshape C}} is a binary self-orthogonal code which has codewords of even weight. }
+
+ \index{code, singly-even} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:=Indeterminate(GF(2));                     
+  x_1
+  gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+  a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
+  gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
+  true
+  gap> IsDoublyEvenCode(C);
+  false
+  gap> IsSinglyEvenCode(C);
+  true
+\end{Verbatim}
+  \index{even} 
+
+\subsection{\textcolor{Chapter }{IsEvenCode}}
+\logpage{[ 4, 3, 12 ]}\nobreak
+\hyperdef{L}{X7CE150ED7C3DC455}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsEvenCode({\slshape C})\index{IsEvenCode@\texttt{IsEvenCode}}
+\label{IsEvenCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary linear code which has codewords of even weight--regardless whether
+or not it is self-orthogonal. }
+
+ \index{code, even} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> IsSelfOrthogonalCode(C);
+  false
+  gap> IsEvenCode(C);
+  false
+  gap> C:=ExtendedCode(C);
+  a linear [24,12,8]4 extended code
+  gap> IsSelfOrthogonalCode(C);
+  true
+  gap> IsEvenCode(C);
+  true
+  gap> C:=ExtendedCode(QRCode(17,GF(2)));
+  a linear [18,9,6]3..5 extended code
+  gap> IsSelfOrthogonalCode(C);
+  false
+  gap> IsEvenCode(C);
+  true
+\end{Verbatim}
+  \index{self complementary code} 
+
+\subsection{\textcolor{Chapter }{IsSelfComplementaryCode}}
+\logpage{[ 4, 3, 13 ]}\nobreak
+\hyperdef{L}{X7B6DB8CC84FCAC1C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfComplementaryCode({\slshape C})\index{IsSelfComplementaryCode@\texttt{IsSelfComplementaryCode}}
+\label{IsSelfComplementaryCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsSelfComplementaryCode} returns `true' if 
+\[ v \in C \Rightarrow 1 - v \in C, \]
+ where $1$ is the all-one word of length $n$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
+  true
+  gap> IsSelfComplementaryCode( EvenWeightSubcode(
+  > HammingCode( 3, GF(2) ) ) );
+  false 
+\end{Verbatim}
+ \index{affine code} 
+
+\subsection{\textcolor{Chapter }{IsAffineCode}}
+\logpage{[ 4, 3, 14 ]}\nobreak
+\hyperdef{L}{X7AFD3844859B20BF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsAffineCode({\slshape C})\index{IsAffineCode@\texttt{IsAffineCode}}
+\label{IsAffineCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsAffineCode} returns `true' if \mbox{\texttt{\slshape C}} is an affine code. A code is called \emph{affine} if it is an affine space. In other words, a code is affine if it is a coset of
+a linear code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsAffineCode( HammingCode( 3, GF(2) ) );
+  true
+  gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
+  > [ 1, 0, 0, 0, 0, 0, 0 ] ) );
+  true
+  gap> IsAffineCode( NordstromRobinsonCode() );
+  false 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{IsAlmostAffineCode}}
+\logpage{[ 4, 3, 15 ]}\nobreak
+\hyperdef{L}{X861D32FB81EF0D77}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsAlmostAffineCode({\slshape C})\index{IsAlmostAffineCode@\texttt{IsAlmostAffineCode}}
+\label{IsAlmostAffineCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsAlmostAffineCode} returns `true' if \mbox{\texttt{\slshape C}} is an almost affine code. A code is called \emph{almost affine} if the size of any punctured code of \mbox{\texttt{\slshape C}} is $q^r$ for some $r$, where $q$ is the size of the alphabet of the code. Every affine code is also almost
+affine, and every code over $GF(2)$ and $GF(3)$ that is almost affine is also affine. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
+  >                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
+  >                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
+  >                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
+  >                             GF(4) );;
+  gap> IsAlmostAffineCode( code );
+  true
+  gap> IsAlmostAffineCode( NordstromRobinsonCode() );
+  false 
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Equivalence and Isomorphism of Codes }}\logpage{[ 4, 4, 0 ]}
+\hyperdef{L}{X86442DCD7A0B2146}{}
+{
+  \label{Equivalence and Isomorphism of Codes} \index{permutation equivalent codes} \index{equivalent codes} 
+
+\subsection{\textcolor{Chapter }{IsEquivalent}}
+\logpage{[ 4, 4, 1 ]}\nobreak
+\hyperdef{L}{X843034687D9C75B0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsEquivalent({\slshape C1, C2})\index{IsEquivalent@\texttt{IsEquivalent}}
+\label{IsEquivalent}
+}\hfill{\scriptsize (function)}}\\
+
+
+ We say that \mbox{\texttt{\slshape C1}} is \emph{permutation equivalent} to \mbox{\texttt{\slshape C2}} if \mbox{\texttt{\slshape C1}} can be obtained from \mbox{\texttt{\slshape C2}} by carrying out column permutations. \texttt{IsEquivalent} returns true if \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are equivalent codes. At this time, \texttt{IsEquivalent} only handles \emph{binary} codes. (The external unix/linux program \textsc{desauto} from J. S. Leon is called by \ [...]
+
+ Note that the algorithm is \emph{very slow} for non-linear codes. 
+
+ More generally, we say that \mbox{\texttt{\slshape C1}} is \emph{equivalent} to \mbox{\texttt{\slshape C2}} if \mbox{\texttt{\slshape C1}} can be obtained from \mbox{\texttt{\slshape C2}} by carrying out column permutations and a permutation of the alphabet. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+  Z(2)^0+x_1+x_1^3
+  gap> H := GeneratorPolCode( pol, 7, GF(2));          
+  a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+  gap> H = HammingCode(3, GF(2));
+  false
+  gap> IsEquivalent(H, HammingCode(3, GF(2)));
+  true                        # H is equivalent to a Hamming code
+  gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+  (3,4)(5,6,7) 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CodeIsomorphism}}
+\logpage{[ 4, 4, 2 ]}\nobreak
+\hyperdef{L}{X874DED8E86BC180B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeIsomorphism({\slshape C1, C2})\index{CodeIsomorphism@\texttt{CodeIsomorphism}}
+\label{CodeIsomorphism}
+}\hfill{\scriptsize (function)}}\\
+
+
+ If the two codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are permutation equivalent codes (see \texttt{IsEquivalent} (\ref{IsEquivalent})), \texttt{CodeIsomorphism} returns the permutation that transforms \mbox{\texttt{\slshape C1}} into \mbox{\texttt{\slshape C2}}. If the codes are not equivalent, it returns `false'. 
+
+ At this time, \texttt{IsEquivalent} only computes isomorphisms between \emph{binary} codes on a linux/unix computer (since it calls Leon's C program \textsc{desauto}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+  Z(2)^0+x_1+x_1^3
+  gap> H := GeneratorPolCode( pol, 7, GF(2));          
+  a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+  gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+  (3,4)(5,6,7) 
+  gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{AutomorphismGroup}}
+\logpage{[ 4, 4, 3 ]}\nobreak
+\hyperdef{L}{X87677B0787B4461A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AutomorphismGroup({\slshape C})\index{AutomorphismGroup@\texttt{AutomorphismGroup}}
+\label{AutomorphismGroup}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AutomorphismGroup} returns the automorphism group of a linear code \mbox{\texttt{\slshape C}}. For a binary code, the automorphism group is the largest permutation group
+of degree $n$ such that each permutation applied to the columns of \mbox{\texttt{\slshape C}} again yields \mbox{\texttt{\slshape C}}. \textsf{GUAVA} calls the external program \textsc{desauto} written by J. S. Leon, if it exists, to compute the automorphism group. If
+Leon's program is not compiled on the system (and in the default directory)
+then it calls instead the much slower program \texttt{PermutationAutomorphismGroup}. 
+
+ See Leon \cite{Leon82} for a more precise description of the method, and the \texttt{guava/src/leon/doc} subdirectory for for details about Leon's C programs. 
+
+ The function \texttt{PermutedCode} permutes the columns of a code (see \texttt{PermutedCode} (\ref{PermutedCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := RepetitionCode(7,GF(2));
+  a cyclic [7,1,7]3 repetition code over GF(2)
+  gap> AutomorphismGroup(R);
+  Sym( [ 1 .. 7 ] )
+                          # every permutation keeps R identical
+  gap> C := CordaroWagnerCode(7);
+  a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
+  gap> AsSSortedList(C);
+  [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+  gap> AutomorphismGroup(C);
+  Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
+  gap> C2 :=  PermutedCode(C, (1,6)(2,7));
+  a linear [7,2,4]3 permuted code
+  gap> AsSSortedList(C2);
+  [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+  gap> C2 = C;
+  true 
+\end{Verbatim}
+  \index{PermutationAutomorphismGroup} 
+
+\subsection{\textcolor{Chapter }{PermutationAutomorphismGroup}}
+\logpage{[ 4, 4, 4 ]}\nobreak
+\hyperdef{L}{X79F3261F86C29F6D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationAutomorphismGroup({\slshape C})\index{PermutationAutomorphismGroup@\texttt{PermutationAutomorphismGroup}}
+\label{PermutationAutomorphismGroup}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PermutationAutomorphismGroup} returns the permutation automorphism group of a linear code \mbox{\texttt{\slshape C}}. This is the largest permutation group of degree $n$ such that each permutation applied to the columns of \mbox{\texttt{\slshape C}} again yields \mbox{\texttt{\slshape C}}. It is written in GAP, so is much slower than \texttt{AutomorphismGroup}. 
+
+ When \mbox{\texttt{\slshape C}} is binary \texttt{PermutationAutomorphismGroup} does \emph{not} call \texttt{AutomorphismGroup}, even though they agree mathematically in that case. This way \texttt{PermutationAutomorphismGroup} can be called on any platform which runs GAP. 
+
+ The older name for this command, \texttt{PermutationGroup}, will become obsolete in the next version of GAP. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := RepetitionCode(3,GF(3));
+  a cyclic [3,1,3]2 repetition code over GF(3)
+  gap> G:=PermutationAutomorphismGroup(R);
+  Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
+  gap> G=SymmetricGroup(3);
+  true
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Domain Functions for Codes }}\logpage{[ 4, 5, 0 ]}
+\hyperdef{L}{X866EB39483DDAE72}{}
+{
+  \label{Domain Functions for Codes} These are some GAP functions that work on `Domains' in general. Their specific
+effect on `Codes' is explained here. 
+
+\subsection{\textcolor{Chapter }{IsFinite}}
+\logpage{[ 4, 5, 1 ]}\nobreak
+\hyperdef{L}{X808A4061809A6E67}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFinite({\slshape C})\index{IsFinite@\texttt{IsFinite}}
+\label{IsFinite}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsFinite} is an implementation of the GAP domain function \texttt{IsFinite}. It returns true for a code \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
+  true 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{Size}}
+\logpage{[ 4, 5, 2 ]}\nobreak
+\hyperdef{L}{X858ADA3B7A684421}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Size({\slshape C})\index{Size@\texttt{Size}}
+\label{Size}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Size} returns the size of \mbox{\texttt{\slshape C}}, the number of elements of the code. If the code is linear, the size of the
+code is equal to $q^k$, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}} and $k$ is the dimension. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Size( RepetitionCode( 1000, GF(11) ) );
+  11
+  gap> Size( NordstromRobinsonCode() );
+  256 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{LeftActingDomain}}
+\logpage{[ 4, 5, 3 ]}\nobreak
+\hyperdef{L}{X86F070E0807DC34E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LeftActingDomain({\slshape C})\index{LeftActingDomain@\texttt{LeftActingDomain}}
+\label{LeftActingDomain}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{LeftActingDomain} returns the base field of a code \mbox{\texttt{\slshape C}}. Each element of \mbox{\texttt{\slshape C}} consists of elements of this base field. If the base field is $F$, and the word length of the code is $n$, then the codewords are elements of $F^n$. If \mbox{\texttt{\slshape C}} is a cyclic code, its elements are interpreted as polynomials with
+coefficients over $F$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
+  a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
+  gap> LeftActingDomain( C1 );
+  GF(2^2)
+  gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
+  GF(3^2) 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{Dimension}}
+\logpage{[ 4, 5, 4 ]}\nobreak
+\hyperdef{L}{X7E6926C6850E7C4E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Dimension({\slshape C})\index{Dimension@\texttt{Dimension}}
+\label{Dimension}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Dimension} returns the parameter $k$ of \mbox{\texttt{\slshape C}}, the dimension of the code, or the number of information symbols in each
+codeword. The dimension is not defined for non-linear codes; \texttt{Dimension} then returns an error. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Dimension( NullCode( 5, GF(5) ) );
+  0
+  gap> C := BCHCode( 15, 4, GF(4) );
+  a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
+  gap> Dimension( C );
+  9
+  gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{AsSSortedList}}
+\logpage{[ 4, 5, 5 ]}\nobreak
+\hyperdef{L}{X856D927378C33548}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AsSSortedList({\slshape C})\index{AsSSortedList@\texttt{AsSSortedList}}
+\label{AsSSortedList}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AsSSortedList} (as strictly sorted list) returns an immutable, duplicate free list of the
+elements of \mbox{\texttt{\slshape C}}. For a finite field $GF(q)$ generated by powers of $Z(q)$, the ordering on 
+\[ GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} \]
+ is that determined by the exponents $i$. These elements are of the type codeword (see \texttt{Codeword} (\ref{Codeword})). Note that for large codes, generating the elements may be very time- and
+memory-consuming. For generating a specific element or a subset of the
+elements, use \texttt{CodewordNr} (see \texttt{CodewordNr} (\ref{CodewordNr})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ConferenceCode( 5 );
+  a (5,12,2)1..4 conference code over GF(2)
+  gap> AsSSortedList( C );
+  [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+    [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+    [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+  gap> CodewordNr( C, [ 1, 2 ] );
+  [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Printing and Displaying Codes }}\logpage{[ 4, 6, 0 ]}
+\hyperdef{L}{X823827927D6A8235}{}
+{
+  \label{Printing and Displaying Codes} 
+
+\subsection{\textcolor{Chapter }{Print}}
+\logpage{[ 4, 6, 1 ]}\nobreak
+\hyperdef{L}{X7AFA64D97A1F39A3}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Print({\slshape C})\index{Print@\texttt{Print}}
+\label{Print}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Print} prints information about \mbox{\texttt{\slshape C}}. This is the same as typing the identifier \mbox{\texttt{\slshape C}} at the GAP-prompt. 
+
+ If the argument is an unrestricted code, information in the form 
+\begin{verbatim}  
+  a (n,M,d)r ... code over GF(q)
+\end{verbatim}
+ is printed, where \mbox{\texttt{\slshape n}} is the word length, \mbox{\texttt{\slshape M}} the number of elements of the code, \mbox{\texttt{\slshape d}} the minimum distance and \mbox{\texttt{\slshape r}} the covering radius. 
+
+ If the argument is a linear code, information in the form 
+\begin{verbatim}  
+  a linear [n,k,d]r ... code over GF(q)
+\end{verbatim}
+ is printed, where \mbox{\texttt{\slshape n}} is the word length, \mbox{\texttt{\slshape k}} the dimension of the code, \mbox{\texttt{\slshape d}} the minimum distance and \mbox{\texttt{\slshape r}} the covering radius. 
+
+ Except for codes produced by \texttt{RandomLinearCode}, if \mbox{\texttt{\slshape d}} is not yet known, it is displayed in the form 
+\begin{verbatim}  
+  lowerbound..upperbound
+\end{verbatim}
+ and if \mbox{\texttt{\slshape r}} is not yet known, it is displayed in the same way. For certain ranges of $n$, the values of \mbox{\texttt{\slshape lowerbound}} and \mbox{\texttt{\slshape upperbound}} are obtained from tables. 
+
+ The function \texttt{Display} gives more information. See \texttt{Display} (\ref{Display}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
+  a linear [8,4,4]2 extended code
+  gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
+  This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{String}}
+\logpage{[ 4, 6, 2 ]}\nobreak
+\hyperdef{L}{X81FB5BE27903EC32}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{String({\slshape C})\index{String@\texttt{String}}
+\label{String}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{String} returns information about \mbox{\texttt{\slshape C}} in a string. This function is used by \texttt{Print}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
+  x_1^2+Z(3)^0
+  gap> Factors(pol);
+  [ x_1^2+Z(3)^0 ]
+  gap> H := GeneratorPolCode( pol, 8, GF(3));
+  a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+  gap> String(H);
+  "a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{Display}}
+\logpage{[ 4, 6, 3 ]}\nobreak
+\hyperdef{L}{X83A5C59278E13248}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Display({\slshape C})\index{Display@\texttt{Display}}
+\label{Display}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Display} prints the method of construction of code \mbox{\texttt{\slshape C}}. With this history, in most cases an equal or equivalent code can be
+reconstructed. If \mbox{\texttt{\slshape C}} is an unmanipulated code, the result is equal to output of the function \texttt{Print} (see \texttt{Print} (\ref{Print})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Display( RepetitionCode( 6, GF(3) ) );
+  a cyclic [6,1,6]4 repetition code over GF(3)
+  gap> C1 := ExtendedCode( HammingCode(2) );;
+  gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+  gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+  a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
+  a linear [11,8,1]1..2 U U+V construction code of
+  U: a linear [4,1,4]2 extended code of
+     a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+  V: a linear [7,7,1]0 punctured code of
+     a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DisplayBoundsInfo}}
+\logpage{[ 4, 6, 4 ]}\nobreak
+\hyperdef{L}{X7CD08C8C780543C4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DisplayBoundsInfo({\slshape bds})\index{DisplayBoundsInfo@\texttt{DisplayBoundsInfo}}
+\label{DisplayBoundsInfo}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DisplayBoundsInfo} prints the method of construction of the code $C$ indicated in \texttt{bds:= BoundsMinimumDistance( n, k, GF(q) )}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+  gap> DisplayBoundsInfo(bounds);
+  an optimal linear [20,17,d] code over GF(4) has d=3
+  --------------------------------------------------------------------------------------------------
+  Lb(20,17)=3, by shortening of:
+  Lb(21,18)=3, by applying contruction B to a [81,77,3] code
+  Lb(81,77)=3, by shortening of:
+  Lb(85,81)=3, reference: Ham
+  --------------------------------------------------------------------------------------------------
+  Ub(20,17)=3, by considering shortening to:
+  Ub(7,4)=3, by considering puncturing to:
+  Ub(6,4)=2, by construction B applied to:
+  Ub(2,1)=2, repetition code
+  --------------------------------------------------------------------------------------------------
+  Reference Ham:
+  %T this reference is unknown, for more info
+  %T contact A.E. Brouwer (aeb at cwi.nl)
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Generating (Check) Matrices and Polynomials }}\logpage{[ 4, 7, 0 ]}
+\hyperdef{L}{X7D0F48B685A3ECDD}{}
+{
+  \label{Generating (Check) Matrices and Polynomials} 
+
+\subsection{\textcolor{Chapter }{GeneratorMat}}
+\logpage{[ 4, 7, 1 ]}\nobreak
+\hyperdef{L}{X817224657C9829C4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorMat({\slshape C})\index{GeneratorMat@\texttt{GeneratorMat}}
+\label{GeneratorMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneratorMat} returns a generator matrix of \mbox{\texttt{\slshape C}}. The code consists of all linear combinations of the rows of this matrix. 
+
+ If until now no generator matrix of \mbox{\texttt{\slshape C}} was determined, it is computed from either the parity check matrix, the
+generator polynomial, the check polynomial or the elements (if possible),
+whichever is available. 
+
+ If \mbox{\texttt{\slshape C}} is a non-linear code, the function returns an error. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> GeneratorMat( HammingCode( 3, GF(2) ) );
+  [ [ an immutable GF2 vector of length 7], 
+    [ an immutable GF2 vector of length 7], 
+    [ an immutable GF2 vector of length 7], 
+    [ an immutable GF2 vector of length 7] ]
+  gap> Display(last);
+   1 1 1 . . . .
+   1 . . 1 1 . .
+   . 1 . 1 . 1 .
+   1 1 . 1 . . 1
+  gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
+  [ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
+  gap> GeneratorMat( NullCode( 14, GF(4) ) );
+  [  ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CheckMat}}
+\logpage{[ 4, 7, 2 ]}\nobreak
+\hyperdef{L}{X85D4B26E7FB38D57}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMat({\slshape C})\index{CheckMat@\texttt{CheckMat}}
+\label{CheckMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CheckMat} returns a parity check matrix of \mbox{\texttt{\slshape C}}. The code consists of all words orthogonal to each of the rows of this
+matrix. The transpose of the matrix is a right inverse of the generator
+matrix. The parity check matrix is computed from either the generator matrix,
+the generator polynomial, the check polynomial or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. 
+
+ If \mbox{\texttt{\slshape C}} is a non-linear code, the function returns an error. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CheckMat( HammingCode(3, GF(2) ) );
+  [ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+    [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
+    [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
+  gap> Display(last);
+   . . . 1 1 1 1
+   . 1 1 . . 1 1
+   1 . 1 . 1 . 1
+  gap> CheckMat( RepetitionCode( 5, GF(25) ) );
+  [ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
+    [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
+    [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
+    [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
+  gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
+  [  ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneratorPol}}
+\logpage{[ 4, 7, 3 ]}\nobreak
+\hyperdef{L}{X78E33C3A843B0261}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorPol({\slshape C})\index{GeneratorPol@\texttt{GeneratorPol}}
+\label{GeneratorPol}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneratorPol} returns the generator polynomial of \mbox{\texttt{\slshape C}}. The code consists of all multiples of the generator polynomial modulo $x^{n}-1$, where $n$ is the word length of \mbox{\texttt{\slshape C}}. The generator polynomial is determined from either the check polynomial, the
+generator or check matrix or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. 
+
+ If \mbox{\texttt{\slshape C}} is not a cyclic code, the function returns `false'. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+  Z(2)^0+x_1
+  gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+  Z(2)^0
+  gap> GeneratorPol( NullCode( 7, GF(3) ) );
+  -Z(3)^0+x_1^7
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CheckPol}}
+\logpage{[ 4, 7, 4 ]}\nobreak
+\hyperdef{L}{X7C45AA317BB1195F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckPol({\slshape C})\index{CheckPol@\texttt{CheckPol}}
+\label{CheckPol}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CheckPol} returns the check polynomial of \mbox{\texttt{\slshape C}}. The code consists of all polynomials $f$ with 
+\[ f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1), \]
+ where $h$ is the check polynomial, and $n$ is the word length of \mbox{\texttt{\slshape C}}. The check polynomial is computed from the generator polynomial, the
+generator or parity check matrix or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. 
+
+ If \mbox{\texttt{\slshape C}} if not a cyclic code, the function returns an error. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+  Z(2)^0+x_1+x_1^2
+  gap> CheckPol(WholeSpaceCode(4, GF(2)));
+  Z(2)^0+x_1^4
+  gap> CheckPol(NullCode(7,GF(3)));
+  Z(3)^0
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RootsOfCode}}
+\logpage{[ 4, 7, 5 ]}\nobreak
+\hyperdef{L}{X7F4CB9DB7CD97178}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RootsOfCode({\slshape C})\index{RootsOfCode@\texttt{RootsOfCode}}
+\label{RootsOfCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{RootsOfCode} returns a list of all zeros of the generator polynomial of a cyclic code \mbox{\texttt{\slshape C}}. These are finite field elements in the splitting field of the generator
+polynomial, $GF(q^m)$, $m$ is the multiplicative order of the size of the base field of the code, modulo
+the word length. 
+
+ The reverse process, constructing a code from a set of roots, can be carried
+out by the function \texttt{RootsCode} (see \texttt{RootsCode} (\ref{RootsCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ReedSolomonCode( 16, 5 );
+  a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
+  gap> RootsOfCode( C1 );
+  [ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
+  gap> C2 := RootsCode( 16, last );
+  a cyclic [16,12,5]3..4 code defined by roots over GF(17)
+  gap> C1 = C2;
+  true 
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Parameters of Codes }}\logpage{[ 4, 8, 0 ]}
+\hyperdef{L}{X8170B52D7C154247}{}
+{
+  \label{Parameters of Codes} 
+
+\subsection{\textcolor{Chapter }{WordLength}}
+\logpage{[ 4, 8, 1 ]}\nobreak
+\hyperdef{L}{X7A36C3C67B0062E8}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WordLength({\slshape C})\index{WordLength@\texttt{WordLength}}
+\label{WordLength}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{WordLength} returns the parameter $n$ of \mbox{\texttt{\slshape C}}, the word length of the elements. Elements of cyclic codes are polynomials of
+maximum degree $n-1$, as calculations are carried out modulo $x^{n}-1$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> WordLength( NordstromRobinsonCode() );
+  16
+  gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+  6
+  gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+  14 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{Redundancy}}
+\logpage{[ 4, 8, 2 ]}\nobreak
+\hyperdef{L}{X7E33FD56792DBF3D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Redundancy({\slshape C})\index{Redundancy@\texttt{Redundancy}}
+\label{Redundancy}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Redundancy} returns the redundancy $r$ of \mbox{\texttt{\slshape C}}, which is equal to the number of check symbols in each element. If \mbox{\texttt{\slshape C}} is not a linear code the redundancy is not defined and \texttt{Redundancy} returns an error. 
+
+ If a linear code \mbox{\texttt{\slshape C}} has dimension $k$ and word length $n$, it has redundancy $r=n-k$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := TernaryGolayCode();
+  a cyclic [11,6,5]2 ternary Golay code over GF(3)
+  gap> Redundancy(C);
+  5
+  gap> Redundancy( DualCode(C) );
+  6 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MinimumDistance}}
+\logpage{[ 4, 8, 3 ]}\nobreak
+\hyperdef{L}{X7B31613D8538BD29}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistance({\slshape C})\index{MinimumDistance@\texttt{MinimumDistance}}
+\label{MinimumDistance}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MinimumDistance} returns the minimum distance of \mbox{\texttt{\slshape C}}, the largest integer $d$ with the property that every element of \mbox{\texttt{\slshape C}} has at least a Hamming distance $d$ (see \texttt{DistanceCodeword} (\ref{DistanceCodeword})) to any other element of \mbox{\texttt{\slshape C}}. For linear codes, the minimum distance is equal to the minimum weight. This
+means that $d$ is also the smallest positive value with $w[d+1] \neq 0$, where $w=(w[1],w[2],...,w[n])$ is the weight distribution of \mbox{\texttt{\slshape C}} (see \texttt{WeightDistribution} (\ref{WeightDistribution})). For unrestricted codes, $d$ is the smallest positive value with $w[d+1] \neq 0$, where $w$ is the inner distribution of \mbox{\texttt{\slshape C}} (see \texttt{InnerDistribution} (\ref{InnerDistribution})). 
+
+ For codes with only one element, the minimum distance is defined to be equal
+to the word length. 
+
+ For linear codes \mbox{\texttt{\slshape C}}, the algorithm used is the following: After replacing \mbox{\texttt{\slshape C}} by a permutation equivalent \mbox{\texttt{\slshape C'}}, one may assume the generator matrix has the following form $G=(I_{k} \, | \, A)$, for some $k\times (n-k)$ matrix $A$. If $A=0$ then return $d(C)=1$. Next, find the minimum distance of the code spanned by the rows of $A$. Call this distance $d(A)$. Note that $d(A)$ is equal to the the Hamming distance $d(v,0 [...]
+
+ This command may also be called using the syntax \texttt{MinimumDistance(C, w)}. In this form, \texttt{MinimumDistance} returns the minimum distance of a codeword \mbox{\texttt{\slshape w}} to the code \mbox{\texttt{\slshape C}}, also called the \emph{distance from \mbox{\texttt{\slshape w}} to} \mbox{\texttt{\slshape C}}. This is the smallest value $d$ for which there is an element $c$ of the code \mbox{\texttt{\slshape C}} which is at distance $d$ from \mbox{\texttt{\slshape w}}. So $ [...]
+
+ Note that \mbox{\texttt{\slshape w}} must be an element of the same vector space as the elements of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape w}} does not necessarily belong to the code (if it does, the minimum distance is
+zero). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := MOLSCode(7);; MinimumDistance(C);
+  3
+  gap> WeightDistribution(C);
+  [ 1, 0, 0, 24, 24 ]
+  gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+  1
+  gap> MinimumDistance( NullCode( 4, GF(2) ) );
+  4
+  gap> C := ConferenceCode(9);; MinimumDistance(C);
+  4
+  gap> InnerDistribution(C);
+  [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
+  gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
+  [ 3 3 6 2 ]
+  gap> MinimumDistance( C, w );
+  0
+  gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+  3                           # so w no longer belongs to C 
+\end{Verbatim}
+  See also the \textsf{GUAVA} commands relating to bounds on the minimum distance in section \ref{Distance bounds on codes}. 
+
+\subsection{\textcolor{Chapter }{MinimumDistanceLeon}}
+\logpage{[ 4, 8, 4 ]}\nobreak
+\hyperdef{L}{X813F226F855590EE}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistanceLeon({\slshape C})\index{MinimumDistanceLeon@\texttt{MinimumDistanceLeon}}
+\label{MinimumDistanceLeon}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MinimumDistanceLeon} returns the ``probable'' minimum distance $d_{Leon}$ of a linear binary code \mbox{\texttt{\slshape C}}, using an implementation of Leon's probabilistic polynomial time algorithm.
+Briefly: Let \mbox{\texttt{\slshape C}} be a linear code of dimension $k$ over $GF(q)$ as above. The algorithm has input parameters $s$ and $\rho$, where $s$ is an integer between $2$ and $n-k$, and $\rho$ is an integer between $2$ and $k$. 
+\begin{itemize}
+\item  Find a generator matrix $G$ of $C$. 
+\item  Randomly permute the columns of $G$. 
+\item  Perform Gaussian elimination on the permuted matrix to obtain a new matrix of
+the following form: 
+\[ G=(I_{k} \, | \, Z \, | \, B) \]
+ with $Z$ a $k\times s$ matrix. If $(Z,B)$ is the zero matrix then return $1$ for the minimum distance. If $Z=0$ but not $B$ then either choose another permutation of the rows of \mbox{\texttt{\slshape C}} or return `method fails'. 
+\item  Search $Z$ for at most $\rho$ rows that lead to codewords of weight less than $\rho$. 
+\item  For these codewords, compute the weight of the whole word in \mbox{\texttt{\slshape C}}. Return this weight. 
+\end{itemize}
+ (See for example J. S. Leon, \cite{Leon88} for more details.) Sometimes (as is the case in \textsf{GUAVA}) this probabilistic algorithm is repeated several times and the most commonly
+occurring value is taken. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(50,22,GF(2));
+  a  [50,22,?] randomly generated code over GF(2)
+  gap> MinimumDistanceLeon(C); time;
+  6
+  211
+  gap> MinimumDistance(C); time;
+  6
+  1204
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MinimumWeight}}
+\logpage{[ 4, 8, 5 ]}\nobreak
+\hyperdef{L}{X84EDF67B86B4154C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumWeight({\slshape C})\index{MinimumWeight@\texttt{MinimumWeight}}
+\label{MinimumWeight}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MinimumWeight} returns the minimum Hamming weight of a linear code \mbox{\texttt{\slshape C}}. At the moment, this function works for binary and ternary codes only. The \texttt{MinimumWeight} function relies on an external executable program which is written in C
+language. As a consequence, the execution time of \texttt{MinimumWeight} function is faster than that of \texttt{MinimumDistance} (\ref{MinimumDistance}) function. 
+
+ The \texttt{MinimumWeight} function implements Chen's \cite{Chen69} algorithm if \mbox{\texttt{\slshape C}} is cyclic, and Zimmermann's \cite{Zimmermann96} algorithm if \mbox{\texttt{\slshape C}} is a general linear code. This function has a built-in check on the
+constraints of the minimum weight codewords. For example, for a
+self-orthogonal code over GF(3), the minimum weight codewords have weight that
+is divisible by 3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes
+over GF(2) have codeword weights that are divisible by 4 and even codes over
+GF(2) have codewords weights that are divisible by 2. By taking these
+constraints into account, in many cases, the execution time may be
+significantly reduced. Consider the minimum Hamming weight enumeration of the $[151,45]$ binary cyclic code (second example below). This cyclic code is
+self-orthogonal, so the weight of all codewords is divisible by 4. Without
+considering this constraint, the computation will finish at information weight $10$, rather than $9$. We can see that, this 0 mod 4 constraint on the codeword weights, has
+allowed us to avoid enumeration of $b(45,10) = 3,190,187,286$ additional codewords, where $b(n,k)=n!/((n-k)!k!)$ is the binomial coefficient of integers $n$ and $k$. 
+
+ Note that the C source code for this minimum weight computation has not yet
+been optimised, especially the code for GF(3), and there are chances to
+improve the speed of this function. Your contributions are most welcomed. 
+
+ If you find any bugs on this function, please report it to
+ctjhai at plymouth.ac.uk. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> # Extended ternary quadratic residue code of length 48
+  gap> n := 47;;
+  gap> x := Indeterminate(GF(3));;
+  gap> F := Factors(x^n-1);;
+  gap> v := List([1..n], i->Zero(GF(3)));;
+  gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+  gap> G := CirculantMatrix(24, v);;
+  gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
+  > for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+  > od;;
+  gap> C := GeneratorMatCodeNC(G, GF(3));
+  a  [48,24,?] randomly generated code over GF(3)
+  gap> MinimumWeight(C);
+  [48,24] linear code over GF(3) - minimum weight evaluation
+  Known lower-bound: 1
+  There are 2 generator matrices, ranks : 24 24 
+  The weight of the minimum weight codeword satisfies 0 mod 3 congruence
+  Enumerating codewords with information weight 1 (w=1)
+      Found new minimum weight 15
+  Number of matrices required for codeword enumeration 2
+  Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
+  Termination expected with information weight 6 at matrix 1
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 2 (w=2) using 2 matrices
+  Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
+  Termination expected with information weight 6 at matrix 1
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 3 (w=3) using 2 matrices
+  Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
+  Termination expected with information weight 6 at matrix 1
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 4 (w=4) using 2 matrices
+  Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
+  Termination expected with information weight 6 at matrix 1
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 5 (w=5) using 2 matrices
+  Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
+  Termination expected with information weight 6 at matrix 1
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 6 (w=6) using 1 matrices
+  Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
+  -----------------------------------------------------------------------------
+  Minimum weight: 15
+  15
+  gap> 
+  
+  gap> # Binary cyclic code [151,45,36]
+  gap> n := 151;;
+  gap> x := Indeterminate(GF(2));;
+  gap> F := Factors(x^n-1);;
+  gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+  a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
+  gap> MinimumWeight(C);
+  [151,45] cyclic code over GF(2) - minimum weight evaluation
+  Known lower-bound: 1
+  The weight of the minimum weight codeword satisfies 0 mod 4 congruence
+  Enumerating codewords with information weight 1 (w=1)
+      Found new minimum weight 56
+      Found new minimum weight 44
+  Number of matrices required for codeword enumeration 1
+  Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
+  Termination expected with information weight 11
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 2 (w=2) using 1 matrix
+  Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
+  Termination expected with information weight 11
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 3 (w=3) using 1 matrix
+     Found new minimum weight 40
+     Found new minimum weight 36
+  Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 4 (w=4) using 1 matrix
+  Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 5 (w=5) using 1 matrix
+  Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 6 (w=6) using 1 matrix
+  Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 7 (w=7) using 1 matrix
+  Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 8 (w=8) using 1 matrix
+  Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
+  Termination expected with information weight 9
+  -----------------------------------------------------------------------------
+  Enumerating codewords with information weight 9 (w=9) using 1 matrix
+  Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
+  -----------------------------------------------------------------------------
+  Minimum weight: 36
+  36
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DecreaseMinimumDistanceUpperBound}}
+\logpage{[ 4, 8, 6 ]}\nobreak
+\hyperdef{L}{X823B9A797EE42F6D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DecreaseMinimumDistanceUpperBound({\slshape C, t, m})\index{DecreaseMinimumDistanceUpperBound@\texttt{DecreaseMinimumDistanceUpperBound}}
+\label{DecreaseMinimumDistanceUpperBound}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DecreaseMinimumDistanceUpperBound} is an implementation of the algorithm for the minimum distance of a linear
+binary code \mbox{\texttt{\slshape C}} by Leon \cite{Leon88}. This algorithm tries to find codewords with small minimum weights. The
+parameter \mbox{\texttt{\slshape t}} is at least $1$ and less than the dimension of \mbox{\texttt{\slshape C}}. The best results are obtained if it is close to the dimension of the code.
+The parameter \mbox{\texttt{\slshape m}} gives the number of runs that the algorithm will perform. 
+
+ The result returned is a record with two fields; the first, \texttt{mindist}, gives the lowest weight found, and \texttt{word} gives the corresponding codeword. (This was implemented before \texttt{MinimumDistanceLeon} but independently. The older manual had given the command incorrectly, so the
+command was only found after reading all the \emph{*.gi} files in the \textsf{GUAVA} library. Though both \texttt{MinimumDistance} and \texttt{MinimumDistanceLeon} often run much faster than \texttt{DecreaseMinimumDistanceUpperBound}, \texttt{DecreaseMinimumDistanceUpperBound} appears to be more accurate than \texttt{MinimumDistanceLeon}.) }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(5,2,GF(2));
+  a  [5,2,?] randomly generated code over GF(2)
+  gap> DecreaseMinimumDistanceUpperBound(C,1,4);
+  rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
+  gap> MinimumDistance(C);
+  3
+  gap> C:=RandomLinearCode(8,4,GF(2));
+  a  [8,4,?] randomly generated code over GF(2)
+  gap> DecreaseMinimumDistanceUpperBound(C,3,4);
+  rec( mindist := 2,
+    word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
+  gap> MinimumDistance(C);
+  2
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{MinimumDistanceRandom}}
+\logpage{[ 4, 8, 7 ]}\nobreak
+\hyperdef{L}{X7A679B0A7816B030}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistanceRandom({\slshape C, num, s})\index{MinimumDistanceRandom@\texttt{MinimumDistanceRandom}}
+\label{MinimumDistanceRandom}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MinimumDistanceRandom} returns an upper bound for the minimum distance $d_{random}$ of a linear binary code \mbox{\texttt{\slshape C}}, using a probabilistic polynomial time algorithm. Briefly: Let \mbox{\texttt{\slshape C}} be a linear code of dimension $k$ over $GF(q)$ as above. The algorithm has input parameters $num$ and $s$, where $s$ is an integer between $2$ and $n-1$, and $num$ is an integer greater than or equal to $1$. 
+\begin{itemize}
+\item  Find a generator matrix $G$ of $C$. 
+\item  Randomly permute the columns of $G$, written $G_p$.. 
+\item  
+\[ G=(A, B) \]
+ with $A$ a $k\times s$ matrix. If $A$ is the zero matrix then return `method fails'. 
+\item  Search $A$ for at most $5$ rows that lead to codewords, in the code $C_A$ with generator matrix $A$, of minimum weight. 
+\item  For these codewords, use the associated linear combination to compute the
+weight of the whole word in \mbox{\texttt{\slshape C}}. Return this weight and codeword. 
+\end{itemize}
+ This probabilistic algorithm is repeated \mbox{\texttt{\slshape num}} times (with different random permutations of the rows of $G$ each time) and the weight and codeword of the lowest occurring weight is
+taken. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(60,20,GF(2));
+  a  [60,20,?] randomly generated code over GF(2)
+  gap> #mindist(C);time;
+  gap> #mindistleon(C,10,30);time; #doesn't work well
+  gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!
+  
+   This is a probabilistic algorithm which may return the wrong answer.
+  [ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
+          1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
+  130
+  gap> a[2] in C;
+  true
+  gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
+  rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+        Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+        0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+        Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+        0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+        0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+        0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
+  649
+  gap> Codeword(b!.word) in C;
+  true
+  gap> MinimumDistance(C);time;
+  12
+  196
+  gap> c:=MinimumDistanceLeon(C);time;
+  12
+  66
+  gap> C:=RandomLinearCode(30,10,GF(3));
+  a  [30,10,?] randomly generated code over GF(3)
+  gap> a:=MinimumDistanceRandom(C,10,10);time;
+  
+   This is a probabilistic algorithm which may return the wrong answer.
+  [ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
+  229
+  gap> a[2] in C;
+  true
+  gap> MinimumDistance(C);time;
+  9
+  45
+  gap> c:=MinimumDistanceLeon(C);
+  Code must be binary. Quitting.
+  0
+  gap> a:=MinimumDistanceRandom(C,1,29);time;
+  
+   This is a probabilistic algorithm which may return the wrong answer.
+  [ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
+  53
+\end{Verbatim}
+  \index{$t(n,k)$} \index{covering code} 
+
+\subsection{\textcolor{Chapter }{CoveringRadius}}
+\logpage{[ 4, 8, 8 ]}\nobreak
+\hyperdef{L}{X7A195E317D2AB7CE}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoveringRadius({\slshape C})\index{CoveringRadius@\texttt{CoveringRadius}}
+\label{CoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CoveringRadius} returns the \emph{covering radius} of a linear code \mbox{\texttt{\slshape C}}. This is the smallest number $r$ with the property that each element $v$ of the ambient vector space of \mbox{\texttt{\slshape C}} has at most a distance $r$ to the code \mbox{\texttt{\slshape C}}. So for each vector $v$ there must be an element $c$ of \mbox{\texttt{\slshape C}} with $d(v,c) \leq r$. The smallest covering radius of any $[n,k]$ binary linear code is denoted $t(n,k)$. A  [...]
+
+ If \mbox{\texttt{\slshape C}} is a perfect code (see \texttt{IsPerfectCode} (\ref{IsPerfectCode})), the covering radius is equal to $t$, the number of errors the code can correct, where $d = 2t+1$, with $d$ the minimum distance of \mbox{\texttt{\slshape C}} (see \texttt{MinimumDistance} (\ref{MinimumDistance})). 
+
+ If there exists a function called \texttt{SpecialCoveringRadius} in the `operations' field of the code, then this function will be called to
+compute the covering radius of the code. At the moment, no code-specific
+functions are implemented. 
+
+ If the length of \texttt{BoundsCoveringRadius} (see \texttt{BoundsCoveringRadius} (\ref{BoundsCoveringRadius})), is 1, then the value in 
+\begin{verbatim}  
+  C.boundsCoveringRadius
+\end{verbatim}
+ is returned. Otherwise, the function 
+\begin{verbatim}  
+  C.operations.CoveringRadius
+\end{verbatim}
+ is executed, unless the redundancy of \mbox{\texttt{\slshape C}} is too large. In the last case, a warning is issued. 
+
+ The algorithm used to compute the covering radius is the following. First, \texttt{CosetLeadersMatFFE} is used to compute the list of coset leaders (which returns a codeword in each
+coset of $GF(q)^n/C$ of minimum weight). Then \texttt{WeightVecFFE} is used to compute the weight of each of these coset leaders. The program
+returns the maximum of these weights.  }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := RandomLinearCode(10, 5, GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(H);
+  3
+  gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
+  true
+  gap> CoveringRadius(H);
+  1                       # Hamming codes have minimum distance 3
+  gap> CoveringRadius(ReedSolomonCode(7,4));
+  3 
+  gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+  3
+  gap> CoveringRadius( HammingCode( 5, GF(2) ) );
+  1
+  gap> C := ReedMullerCode( 1, 9 );;
+  gap> CoveringRadius( C );
+  CoveringRadius: warning, the covering radius of
+  this code cannot be computed straightforward.
+  Try to use IncreaseCoveringRadiusLowerBound( code ).
+  (see the manual for more details).
+  The covering radius of code lies in the interval:
+  [ 240 .. 248 ]
+\end{Verbatim}
+  See also the \textsf{GUAVA} commands relating to bounds on the minimum distance in section \ref{Covering radius bounds on codes}. 
+
+\subsection{\textcolor{Chapter }{SetCoveringRadius}}
+\logpage{[ 4, 8, 9 ]}\nobreak
+\hyperdef{L}{X81004B007EC5DF58}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SetCoveringRadius({\slshape C, intlist})\index{SetCoveringRadius@\texttt{SetCoveringRadius}}
+\label{SetCoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{SetCoveringRadius} enables the user to set the covering radius herself, instead of letting \textsf{GUAVA} compute it. If \mbox{\texttt{\slshape intlist}} is an integer, \textsf{GUAVA} will simply put it in the `boundsCoveringRadius' field. If it is a list of
+integers, however, it will intersect this list with the `boundsCoveringRadius'
+field, thus taking the best of both lists. If this would leave an empty list,
+the field is set to \mbox{\texttt{\slshape intlist}}. Because some other computations use the covering radius of the code, it is
+important that the entered value is not wrong, otherwise new results may be
+invalid. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := BCHCode( 17, 3, GF(2) );;
+  gap> BoundsCoveringRadius( C );
+  [ 3 .. 4 ]
+  gap> SetCoveringRadius( C, [ 2 .. 3 ] );
+  gap> BoundsCoveringRadius( C );
+  [ [ 2 .. 3 ] ]
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Distributions }}\logpage{[ 4, 9, 0 ]}
+\hyperdef{L}{X806384B4815EFF2E}{}
+{
+  \label{Distributions} 
+
+\subsection{\textcolor{Chapter }{MinimumWeightWords}}
+\logpage{[ 4, 9, 1 ]}\nobreak
+\hyperdef{L}{X7AEE64467FB1E0B9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumWeightWords({\slshape C})\index{MinimumWeightWords@\texttt{MinimumWeightWords}}
+\label{MinimumWeightWords}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MinimumWeightWords} returns the list of minimum weight codewords of \mbox{\texttt{\slshape C}}. 
+
+ This algorithm is written in GAP is slow, so is only suitable for small codes. 
+
+ This does not call the very fast function \texttt{MinimumWeight} (see \texttt{MinimumWeight} (\ref{MinimumWeight})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=HammingCode(3,GF(2));
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> MinimumWeightWords(C);
+  [ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
+    [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{WeightDistribution}}
+\logpage{[ 4, 9, 2 ]}\nobreak
+\hyperdef{L}{X8728BCC9842A6E5D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightDistribution({\slshape C})\index{WeightDistribution@\texttt{WeightDistribution}}
+\label{WeightDistribution}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{WeightDistribution} returns the weight distribution of \mbox{\texttt{\slshape C}}, as a vector. The $i^{th}$ element of this vector contains the number of elements of \mbox{\texttt{\slshape C}} with weight $i-1$. For linear codes, the weight distribution is equal to the inner distribution
+(see \texttt{InnerDistribution} (\ref{InnerDistribution})). If $w$ is the weight distribution of a linear code \mbox{\texttt{\slshape C}}, it must have the zero codeword, so $w[1] = 1$ (one word of weight 0). 
+
+ Some codes, such as the Hamming codes, have precomputed weight distributions.
+For others, the program WeightDistribution calls the GAP program \texttt{DistancesDistributionMatFFEVecFFE}, which is written in C. See also \texttt{CodeWeightEnumerator}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> WeightDistribution( ConferenceCode(9) );
+  [ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
+  gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
+  [ 1, 0, 0, 0, 0, 0, 0, 3 ]
+  gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+  [ 1, 5, 10, 10, 5, 1 ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{InnerDistribution}}
+\logpage{[ 4, 9, 3 ]}\nobreak
+\hyperdef{L}{X871FD301820717A4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{InnerDistribution({\slshape C})\index{InnerDistribution@\texttt{InnerDistribution}}
+\label{InnerDistribution}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{InnerDistribution} returns the inner distribution of \mbox{\texttt{\slshape C}}. The $i^{th}$ element of the vector contains the average number of elements of \mbox{\texttt{\slshape C}} at distance $i-1$ to an element of \mbox{\texttt{\slshape C}}. For linear codes, the inner distribution is equal to the weight distribution
+(see \texttt{WeightDistribution} (\ref{WeightDistribution})). 
+
+ Suppose $w$ is the inner distribution of \mbox{\texttt{\slshape C}}. Then $w[1] = 1$, because each element of \mbox{\texttt{\slshape C}} has exactly one element at distance zero (the element itself). The minimum
+distance of \mbox{\texttt{\slshape C}} is the smallest value $d > 0$ with $w[d+1] \neq 0$, because a distance between zero and $d$ never occurs. See \texttt{MinimumDistance} (\ref{MinimumDistance}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> InnerDistribution( ConferenceCode(9) );
+  [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
+  gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
+  [ 1, 0, 0, 0, 0, 0, 0, 3 ] 
+\end{Verbatim}
+  \index{distance} 
+
+\subsection{\textcolor{Chapter }{DistancesDistribution}}
+\logpage{[ 4, 9, 4 ]}\nobreak
+\hyperdef{L}{X87AD54F87C5EE77E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistribution({\slshape C, w})\index{DistancesDistribution@\texttt{DistancesDistribution}}
+\label{DistancesDistribution}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DistancesDistribution} returns the distribution of the distances of all elements of \mbox{\texttt{\slshape C}} to a codeword \mbox{\texttt{\slshape w}} in the same vector space. The $i^{th}$ element of the distance distribution is the number of codewords of \mbox{\texttt{\slshape C}} that have distance $i-1$ to \mbox{\texttt{\slshape w}}. The smallest value $d$ with $w[d+1] \neq 0$, is defined as the \emph{distance to} \mbox{\texttt{\slshape C}} (see \texttt{MinimumDistance} (\r [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := HadamardCode(20);
+  a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
+  gap> c := Codeword("10110101101010010101", H);
+  [ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
+  gap> DistancesDistribution(H, c);
+  [ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
+  gap> MinimumDistance(H, c);
+  5                           # distance to H 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{OuterDistribution}}
+\logpage{[ 4, 9, 5 ]}\nobreak
+\hyperdef{L}{X8495870687195324}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OuterDistribution({\slshape C})\index{OuterDistribution@\texttt{OuterDistribution}}
+\label{OuterDistribution}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{OuterDistribution} returns a list of length $q^n$, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}} and $n$ is the word length. The elements of the list consist of pairs, the first
+coordinate being an element of $GF(q)^n$ (this is a codeword type) and the second coordinate being a distribution of
+distances to the code (a list of integers). This table is \emph{very} large, and for $n > 20$ it will not fit in the memory of most computers. The function \texttt{DistancesDistribution} (see \texttt{DistancesDistribution} (\ref{DistancesDistribution})) can be used to calculate one entry of the list. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := RepetitionCode( 3, GF(2) );
+  a cyclic [3,1,3]1 repetition code over GF(2)
+  gap> OD := OuterDistribution(C);
+  [ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
+    [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
+    [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
+    [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
+  gap> WeightDistribution(C) = OD[1][2];
+  true
+  gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+  true 
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Decoding Functions }}\logpage{[ 4, 10, 0 ]}
+\hyperdef{L}{X7D9A39BF801948C8}{}
+{
+  \label{Decoding Functions} 
+
+\subsection{\textcolor{Chapter }{Decode}}
+\logpage{[ 4, 10, 1 ]}\nobreak
+\hyperdef{L}{X7A42FF7D87FC34AC}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Decode({\slshape C, r})\index{Decode@\texttt{Decode}}
+\label{Decode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Decode} decodes \mbox{\texttt{\slshape r}} (a 'received word') with respect to code \mbox{\texttt{\slshape C}} and returns the `message word' (i.e., the information digits associated to the
+codeword $c \in C$ closest to \mbox{\texttt{\slshape r}}). Here \mbox{\texttt{\slshape r}} can be a \textsf{GUAVA} codeword or a list of codewords. First, possible errors in \mbox{\texttt{\slshape r}} are corrected, then the codeword is decoded to an \emph{information codeword} $m$ (and not an element of \mbox{\texttt{\slshape C}}). If the code record has a field `specialDecoder', this special algorithm is
+used to decode the vector. Hamming codes, BCH codes, cyclic codes, and
+generalized Reed-Solomon have such a special algorithm. (The algorithm used
+for BCH codes is the Sugiyama algorithm described, for example, in section
+5.4.3 of \cite{HP03}. A special decoder has also being written for the generalized Reed-Solomon
+code using the interpolation algorithm. For cyclic codes, the error-trapping
+algorithm is used.) If \mbox{\texttt{\slshape C}} is linear and no special decoder field has been set then syndrome decoding is
+used. Otherwise (when \mbox{\texttt{\slshape C}} is non-linear), the nearest neighbor decoding algorithm is used (which is very
+slow). 
+
+ A special decoder can be created by defining a function 
+\begin{verbatim}  
+  C!.SpecialDecoder := function(C, r) ... end;
+\end{verbatim}
+ The function uses the arguments \mbox{\texttt{\slshape C}} (the code record itself) and \mbox{\texttt{\slshape r}} (a vector of the codeword type) to decode \mbox{\texttt{\slshape r}} to an information vector. A normal decoder would take a codeword \mbox{\texttt{\slshape r}} of the same word length and field as \mbox{\texttt{\slshape C}}, and would return an information vector of length $k$, the dimension of \mbox{\texttt{\slshape C}}. The user is not restricted to these normal demands  [...]
+instance define a decoder for non-linear codes. 
+
+ Encoding is done by multiplying the information vector with the code (see \ref{Operations for Codes}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := HammingCode(3);
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> c := "1010"*C;                    # encoding
+  [ 1 0 1 1 0 1 0 ]
+  gap> Decode(C, c);                     # decoding
+  [ 1 0 1 0 ]
+  gap> Decode(C, Codeword("0010101"));
+  [ 1 1 0 1 ]                            # one error corrected
+  gap> C!.SpecialDecoder := function(C, c)
+  > return NullWord(Dimension(C));
+  > end;
+  function ( C, c ) ... end
+  gap> Decode(C, c);
+  [ 0 0 0 0 ]           # new decoder always returns null word 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{Decodeword}}
+\logpage{[ 4, 10, 2 ]}\nobreak
+\hyperdef{L}{X7D870C9387C47D9F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Decodeword({\slshape C, r})\index{Decodeword@\texttt{Decodeword}}
+\label{Decodeword}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Decodeword} decodes \mbox{\texttt{\slshape r}} (a 'received word') with respect to code \mbox{\texttt{\slshape C}} and returns the codeword $c \in C$ closest to \mbox{\texttt{\slshape r}}. Here \mbox{\texttt{\slshape r}} can be a \textsf{GUAVA} codeword or a list of codewords. If the code record has a field
+`specialDecoder', this special algorithm is used to decode the vector. Hamming
+codes, generalized Reed-Solomon codes, and BCH codes have such a special
+algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm
+described, for example, in section 5.4.3 of \cite{HP03}. The algorithm used for generalized Reed-Solomon codes is the ``interpolation
+algorithm'' described for example in chapter 5 of \cite{JH04}.) If \mbox{\texttt{\slshape C}} is linear and no special decoder field has been set then syndrome decoding is
+used. Otherwise, when \mbox{\texttt{\slshape C}} is non-linear, the nearest neighbor algorithm has been implemented (which
+should only be used for small-sized codes). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := HammingCode(3);
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> c := "1010"*C;                    # encoding
+  [ 1 0 1 1 0 1 0 ]
+  gap> Decodeword(C, c);                     # decoding
+  [ 1 0 1 1 0 1 0 ]
+  gap>
+  gap> R:=PolynomialRing(GF(11),["t"]);
+  GF(11)[t]
+  gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+  [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+  gap> C:=GeneralizedReedSolomonCode(P,3,R);
+  a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+  gap> MinimumDistance(C);
+  3
+  gap> c:=Random(C);
+  [ 0 9 6 2 1 ]
+  gap> v:=Codeword("09620");
+  [ 0 9 6 2 0 ]
+  gap> GeneralizedReedSolomonDecoderGao(C,v);
+  [ 0 9 6 2 1 ]
+  gap> Decodeword(C,v); # calls the special interpolation decoder
+  [ 0 9 6 2 1 ]
+  gap> G:=GeneratorMat(C);
+  [ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
+    [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
+    [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
+  gap> C1:=GeneratorMatCode(G,GF(11));
+  a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+  gap> Decodeword(C,v); # calls syndrome decoding
+  [ 0 9 6 2 1 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneralizedReedSolomonDecoderGao}}
+\logpage{[ 4, 10, 3 ]}\nobreak
+\hyperdef{L}{X7D48DE2A84474C6A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonDecoderGao({\slshape C, r})\index{GeneralizedReedSolomonDecoderGao@\texttt{GeneralizedReedSolomonDecoderGao}}
+\label{GeneralizedReedSolomonDecoderGao}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralizedReedSolomonDecoderGao} decodes \mbox{\texttt{\slshape r}} (a 'received word') to a codeword $c \in C$ in a generalized Reed-Solomon code \mbox{\texttt{\slshape C}} (see \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode})), closest to \mbox{\texttt{\slshape r}}. Here \mbox{\texttt{\slshape r}} must be a \textsf{GUAVA} codeword. If the code record does not have name `generalized Reed-Solomon
+code' then an error is returned. Otherwise, the Gao decoder \cite{Gao03} is used to compute $c$. 
+
+ For long codes, this method is faster in practice than the interpolation
+method used in \texttt{Decodeword}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R:=PolynomialRing(GF(11),["t"]);
+  GF(11)[t]
+  gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+  [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+  gap> C:=GeneralizedReedSolomonCode(P,3,R);
+  a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+  gap> MinimumDistance(C);
+  3
+  gap> c:=Random(C);
+  [ 0 9 6 2 1 ]
+  gap> v:=Codeword("09620");
+  [ 0 9 6 2 0 ]
+  gap> GeneralizedReedSolomonDecoderGao(C,v); 
+  [ 0 9 6 2 1 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneralizedReedSolomonListDecoder}}
+\logpage{[ 4, 10, 4 ]}\nobreak
+\hyperdef{L}{X7CFF98D483502053}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonListDecoder({\slshape C, r, tau})\index{GeneralizedReedSolomonListDecoder@\texttt{GeneralizedReedSolomonListDecoder}}
+\label{GeneralizedReedSolomonListDecoder}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralizedReedSolomonListDecoder} implements Sudans list-decoding algorithm (see section 12.1 of \cite{JH04}) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in
+C which are a distance of at most \mbox{\texttt{\slshape tau}} from \mbox{\texttt{\slshape r}} (a 'received word'). \mbox{\texttt{\slshape C}} must be a generalized Reed-Solomon code \mbox{\texttt{\slshape C}} (see \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode})) and \mbox{\texttt{\slshape r}} must be a \textsf{GUAVA} codeword. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(16);
+  GF(2^4)
+  gap>
+  gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
+  0*Z(2)
+  gap> Pts:=List([0..14],i->b^i);
+  [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
+    Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
+  gap> x:=X(F);;
+  gap> R1:=PolynomialRing(F,[x]);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+  gap> y:=X(F,vars);;
+  gap> R2:=PolynomialRing(F,[x,y]);;
+  gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+  a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+  gap> MinimumDistance(C); ## 6 error correcting
+  13
+  gap> z:=Zero(F);;
+  gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+  gap> r:=Codeword(r);
+  [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+  gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
+    [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
+  250
+  gap> c1:=cs[1]; c1 in C;
+  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+  true
+  gap> c2:=cs[2]; c2 in C;
+  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
+  true
+  gap> WeightCodeword(c1-r);
+  7
+  gap> WeightCodeword(c2-r);
+  7
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{BitFlipDecoder}}
+\logpage{[ 4, 10, 5 ]}\nobreak
+\hyperdef{L}{X80E17FA27DCAB676}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BitFlipDecoder({\slshape C, r})\index{BitFlipDecoder@\texttt{BitFlipDecoder}}
+\label{BitFlipDecoder}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The iterative decoding method \texttt{BitFlipDecoder} must only be applied to LDPC codes. These have not been implemented in GUAVA
+(but see \texttt{FerreroDesignCode} for a code with similar properties). A binary low density parity check (LDPC)
+code of length \$n\$ and redundancy \$r\$ is defined in terms of its check
+matrix \$H\$: 
+\begin{itemize}
+\item  Each row of \$H\$ has exactly \$x\$ 1's. 
+\item  Each column has exactly \$y\$ 1's. 
+\item  The number of 1's in common between any two columns is less than or equal to
+one. 
+\item  \$x/n\$ and \$y/r\$ are 'small'. 
+\end{itemize}
+ For these codes, \texttt{BitFlipDecoder} decodes very quickly. (Warning: it can give wildly wrong results for arbitrary
+binary linear codes.) The bit flipping algorithm is described for example in
+chapter 13 of \cite{JH04}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=HammingCode(4,GF(2));
+  a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+  gap> c:=Random(C);
+  [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+  gap> v:=List(c);
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
+    Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+  gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+  Z(2)^0
+  gap> v:=Codeword(v);
+  [ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+  gap> BitFlipDecoder(C,v);
+  [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+  
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{NearestNeighborGRSDecodewords}}
+\logpage{[ 4, 10, 6 ]}\nobreak
+\hyperdef{L}{X7B88DEB37F28404A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NearestNeighborGRSDecodewords({\slshape C, v, dist})\index{NearestNeighborGRSDecodewords@\texttt{NearestNeighborGRSDecodewords}}
+\label{NearestNeighborGRSDecodewords}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{NearestNeighborGRSDecodewords} finds all generalized Reed-Solomon codewords within distance \mbox{\texttt{\slshape dist}} from \mbox{\texttt{\slshape v}} \emph{and} the associated polynomial, using ``brute force''. Input: \mbox{\texttt{\slshape v}} is a received vector (a \textsf{GUAVA} codeword), \mbox{\texttt{\slshape C}} is a GRS code, \mbox{\texttt{\slshape dist}} {\textgreater} 0 is the distance from \mbox{\texttt{\slshape v}} to search in \mbox{\texttt{\slshape C}}. Output [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(16);
+  GF(2^4)
+  gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+  Z(2^4)^7
+  0*Z(2)
+  gap> Pts:=List([0..14],i->b^i);
+  [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+    Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+    Z(2^4)^8 ]
+  gap> x:=X(F);;
+  gap> R1:=PolynomialRing(F,[x]);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+  gap> y:=X(F,vars);;
+  gap> R2:=PolynomialRing(F,[x,y]);;
+  gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+  a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+  gap> MinimumDistance(C); # 6 error correcting
+  13
+  gap> z:=Zero(F);
+  0*Z(2)
+  gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+  gap> r:=Codeword(r);
+  [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+  gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
+  [ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
+    [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{NearestNeighborDecodewords}}
+\logpage{[ 4, 10, 7 ]}\nobreak
+\hyperdef{L}{X825E35757D778787}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NearestNeighborDecodewords({\slshape C, v, dist})\index{NearestNeighborDecodewords@\texttt{NearestNeighborDecodewords}}
+\label{NearestNeighborDecodewords}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{NearestNeighborDecodewords} finds all codewords in a linear code \mbox{\texttt{\slshape C}} within distance \mbox{\texttt{\slshape dist}} from \mbox{\texttt{\slshape v}}, using ``brute force''. Input: \mbox{\texttt{\slshape v}} is a received vector (a \textsf{GUAVA} codeword), \mbox{\texttt{\slshape C}} is a linear code, \mbox{\texttt{\slshape dist}} {\textgreater} 0 is the distance from \mbox{\texttt{\slshape v}} to search in \mbox{\texttt{\slshape C}}. Output: a list of $c \in [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(16);
+  GF(2^4)
+  gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+  Z(2^4)^7
+  0*Z(2)
+  gap> Pts:=List([0..14],i->b^i);
+  [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+    Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+    Z(2^4)^8 ]
+  gap> x:=X(F);;
+  gap> R1:=PolynomialRing(F,[x]);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+  gap> y:=X(F,vars);;
+  gap> R2:=PolynomialRing(F,[x,y]);;
+  gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+  a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+  gap> MinimumDistance(C);
+  13
+  gap> z:=Zero(F);
+  0*Z(2)
+  gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
+  gap> r:=Codeword(r);
+  [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+  gap> cs:=NearestNeighborDecodewords(C,r,7);
+  [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
+    [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{Syndrome}}
+\logpage{[ 4, 10, 8 ]}\nobreak
+\hyperdef{L}{X7D02E0FE8735D3E6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Syndrome({\slshape C, v})\index{Syndrome@\texttt{Syndrome}}
+\label{Syndrome}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Syndrome} returns the syndrome of word \mbox{\texttt{\slshape v}} with respect to a linear code \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape v}} is a codeword in the ambient vector space of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape v}} is an element of \mbox{\texttt{\slshape C}}, the syndrome is a zero vector. The syndrome can be used for looking up an
+error vector in the syndrome table (see \texttt{SyndromeTable} (\ref{SyndromeTable})) that is needed to correct an error in $v$. 
+
+ A syndrome is not defined for non-linear codes. \texttt{Syndrome} then returns an error. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := HammingCode(4);
+  a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+  gap> v := CodewordNr( C, 7 );
+  [ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
+  gap> Syndrome( C, v );
+  [ 0 0 0 0 ]
+  gap> Syndrome( C, Codeword( "000000001100111" ) );
+  [ 1 1 1 1 ]
+  gap> Syndrome( C, Codeword( "000000000000001" ) );
+  [ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
+                 # coset of C 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{SyndromeTable}}
+\logpage{[ 4, 10, 9 ]}\nobreak
+\hyperdef{L}{X7B9E71987E4294A7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SyndromeTable({\slshape C})\index{SyndromeTable@\texttt{SyndromeTable}}
+\label{SyndromeTable}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{SyndromeTable} returns a \emph{syndrome table} of a linear code \mbox{\texttt{\slshape C}}, consisting of two columns. The first column consists of the error vectors
+that correspond to the syndrome vectors in the second column. These vectors
+both are of the codeword type. After calculating the syndrome of a word \mbox{\texttt{\slshape v}} with \texttt{Syndrome} (see \texttt{Syndrome} (\ref{Syndrome})), the error vector needed to correct \mbox{\texttt{\slshape v}} can be found in the syndrome table. Subtracting this vector from \mbox{\texttt{\slshape v}} yields an element of \mbox{\texttt{\slshape C}}. To make the search for the syndrome as fast as possible, the syndrome table
+is sorted according to the syndrome vectors. }
+
+ \index{syndrome table} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := HammingCode(2);
+  a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+  gap> SyndromeTable(H);
+  [ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
+    [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
+  gap> c := Codeword("101");
+  [ 1 0 1 ]
+  gap> c in H;
+  false          # c is not an element of H
+  gap> Syndrome(H,c);
+  [ 1 0 ]        # according to the syndrome table,
+                 # the error vector [ 0 1 0 ] belongs to this syndrome
+  gap> c - Codeword("010") in H;
+  true           # so the corrected codeword is
+                 # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
+                 # this is an element of H 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{StandardArray}}
+\logpage{[ 4, 10, 10 ]}\nobreak
+\hyperdef{L}{X8642D0BD789DA9B5}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StandardArray({\slshape C})\index{StandardArray@\texttt{StandardArray}}
+\label{StandardArray}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{StandardArray} returns the standard array of a code \mbox{\texttt{\slshape C}}. This is a matrix with elements of the codeword type. It has $q^r$ rows and $q^k$ columns, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}}, $r=n-k$ is the redundancy of \mbox{\texttt{\slshape C}}, and $k$ is the dimension of \mbox{\texttt{\slshape C}}. The first row contains all the elements of \mbox{\texttt{\slshape C}}. Each other row contains words that do not belong to the co [...]
+first column their syndrome vector (see \texttt{Syndrome} (\ref{Syndrome})). 
+
+ A non-linear code does not have a standard array. \texttt{StandardArray} then returns an error. 
+
+ Note that calculating a standard array can be very time- and memory-
+consuming. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> StandardArray(RepetitionCode(3)); 
+  [ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
+    [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{PermutationDecode}}
+\logpage{[ 4, 10, 11 ]}\nobreak
+\hyperdef{L}{X83231E717CCB0247}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationDecode({\slshape C, v})\index{PermutationDecode@\texttt{PermutationDecode}}
+\label{PermutationDecode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PermutationDecode} performs permutation decoding when possible and returns original vector and
+prints 'fail' when not possible. 
+
+ This uses \texttt{AutomorphismGroup} in the binary case, and (the slower) \texttt{PermutationAutomorphismGroup} otherwise, to compute the permutation automorphism group $P$ of \mbox{\texttt{\slshape C}}. The algorithm runs through the elements $p$ of $P$ checking if the weight of $H(p\cdot v)$ is less than $(d-1)/2$. If it is then the vector $p\cdot v$ is used to decode $v$: assuming \mbox{\texttt{\slshape C}} is in standard form then $c=p^{-1}Em$ is the decoded word, where $m$ is the i [...]
+and Pless \cite{HP03} for more details. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C0:=HammingCode(3,GF(2));
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> G0:=GeneratorMat(C0);;
+  gap> G := List(G0, ShallowCopy);;
+  gap> PutStandardForm(G);
+  ()
+  gap> Display(G);
+   1 . . . . 1 1
+   . 1 . . 1 . 1
+   . . 1 . 1 1 .
+   . . . 1 1 1 1
+  gap> H0:=CheckMat(C0);;
+  gap> Display(H0);
+   . . . 1 1 1 1
+   . 1 1 . . 1 1
+   1 . 1 . 1 . 1
+  gap> c0:=Random(C0);
+  [ 0 0 0 1 1 1 1 ]
+  gap> v01:=c0[1]+Z(2)^2;;
+  gap> v1:=List(c0, ShallowCopy);;
+  gap> v1[1]:=v01;;
+  gap> v1:=Codeword(v1);
+  [ 1 0 0 1 1 1 1 ]
+  gap> c1:=PermutationDecode(C0,v1);
+  [ 0 0 0 1 1 1 1 ]
+  gap> c1=c0;
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{PermutationDecodeNC}}
+\logpage{[ 4, 10, 12 ]}\nobreak
+\hyperdef{L}{X85B692177E2A745D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationDecodeNC({\slshape C, v, P})\index{PermutationDecodeNC@\texttt{PermutationDecodeNC}}
+\label{PermutationDecodeNC}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Same as \texttt{PermutationDecode} except that one may enter the permutation automorphism group \mbox{\texttt{\slshape P}} in as an argument, saving time. Here \mbox{\texttt{\slshape P}} is a subgroup of the symmetric group on $n$ letters, where $n$ is the word length of \mbox{\texttt{\slshape C}}. }
+
+ }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{Generating Codes}}\logpage{[ 5, 0, 0 ]}
+\hyperdef{L}{X87EB64ED831CCE99}{}
+{
+  \label{Generating Codes} In this chapter we describe functions for generating codes. 
+
+ Section \ref{Generating Unrestricted Codes} describes functions for generating unrestricted codes. 
+
+ Section \ref{Generating Linear Codes} describes functions for generating linear codes. 
+
+ Section \ref{Gabidulin Codes} describes functions for constructing certain covering codes, such as the
+Gabidulin codes. 
+
+ Section \ref{Golay Codes} describes functions for constructing the Golay codes. 
+
+ Section \ref{Generating Cyclic Codes} describes functions for generating cyclic codes. 
+
+ Section \ref{Evaluation Codes} describes functions for generating codes as the image of an evaluation map
+applied to a space of functions. For example, generalized Reed-Solomon codes
+and toric codes are described there. 
+
+ 
+\section{\textcolor{Chapter }{ Generating Unrestricted Codes }}\logpage{[ 5, 1, 0 ]}
+\hyperdef{L}{X86A92CB184CBD3C7}{}
+{
+  \label{Generating Unrestricted Codes} In this section we start with functions that creating code from user defined
+matrices or special matrices (see \texttt{ElementsCode} (\ref{ElementsCode}), \texttt{HadamardCode} (\ref{HadamardCode}), \texttt{ConferenceCode} (\ref{ConferenceCode}) and \texttt{MOLSCode} (\ref{MOLSCode})). These codes are unrestricted codes; they may later be discovered to be
+linear or cyclic. 
+
+ The next functions generate random codes (see \texttt{RandomCode} (\ref{RandomCode})) and the Nordstrom-Robinson code (see \texttt{NordstromRobinsonCode} (\ref{NordstromRobinsonCode})), respectively. 
+
+ Finally, we describe two functions for generating Greedy codes. These are
+codes that contructed by gathering codewords from a space (see \texttt{GreedyCode} (\ref{GreedyCode}) and \texttt{LexiCode} (\ref{LexiCode})). 
+
+\subsection{\textcolor{Chapter }{ElementsCode}}
+\logpage{[ 5, 1, 1 ]}\nobreak
+\hyperdef{L}{X81AACBDD86E89D7D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ElementsCode({\slshape L[, name], F})\index{ElementsCode@\texttt{ElementsCode}}
+\label{ElementsCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ElementsCode} creates an unrestricted code of the list of elements \mbox{\texttt{\slshape L}}, in the field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape L}} must be a list of vectors, strings, polynomials or codewords. \mbox{\texttt{\slshape name}} can contain a short description of the code. 
+
+ If \mbox{\texttt{\slshape L}} contains a codeword more than once, it is removed from the list and a GAP set
+is returned. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+  gap> C := ElementsCode( M, "example code", GF(3) );
+  a (4,3,1..4)2 example code over GF(3)
+  gap> MinimumDistance( C );
+  4
+  gap> AsSSortedList( C );
+  [ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]
+\end{Verbatim}
+  \index{code, Hadamard} 
+
+\subsection{\textcolor{Chapter }{HadamardCode}}
+\logpage{[ 5, 1, 2 ]}\nobreak
+\hyperdef{L}{X86755AAC83A0AF4B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HadamardCode({\slshape H[, t]})\index{HadamardCode@\texttt{HadamardCode}}
+\label{HadamardCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The four forms this command can take are \texttt{HadamardCode(H,t)}, \texttt{HadamardCode(H)}, \texttt{HadamardCode(n,t)}, and \texttt{HadamardCode(n)}. 
+
+ In the case when the arguments \mbox{\texttt{\slshape H}} and \mbox{\texttt{\slshape t}} are both given, \texttt{HadamardCode} returns a Hadamard code of the $t^{th}$ kind from the Hadamard matrix \mbox{\texttt{\slshape H}} In case only \mbox{\texttt{\slshape H}} is given, $t = 3$ is used. 
+
+ By definition, a Hadamard matrix is a square matrix \mbox{\texttt{\slshape H}} with $H\cdot H^T = -n\cdot I_n$, where $n$ is the size of \mbox{\texttt{\slshape H}}. The entries of \mbox{\texttt{\slshape H}} are either 1 or -1. \index{Hadamard matrix} 
+
+ The matrix \mbox{\texttt{\slshape H}} is first transformed into a binary matrix $A_n$ by replacing the $1$'s by $0$'s and the $-1$'s by $1$s). 
+
+ The Hadamard matrix of the \emph{first kind} ($t=1$) is created by using the rows of $A_n$ as elements, after deleting the first column. This is a $(n-1, n, n/2)$ code. We use this code for creating the Hadamard code of the \emph{second kind} ($t=2$), by adding all the complements of the already existing codewords. This
+results in a $(n-1, 2n, n/2 -1)$ code. The \emph{third kind} ($t=3$) is created by using the rows of $A_n$ (without cutting a column) and their complements as elements. This way, we
+have an $(n, 2n, n/2)$-code. The returned code is generally an unrestricted code, but for $n = 2^r$, the code is linear. 
+
+ The command \texttt{HadamardCode(n,t)} returns a Hadamard code with parameter \mbox{\texttt{\slshape n}} of the $t^{th}$ kind. For the command \texttt{HadamardCode(n)}, $t=3$ is used. 
+
+ When called in these forms, \texttt{HadamardCode} first creates a Hadamard matrix (see \texttt{HadamardMat} (\ref{HadamardMat})), of size \mbox{\texttt{\slshape n}} and then follows the same procedure as described above. Therefore the same
+restrictions with respect to \mbox{\texttt{\slshape n}} as for Hadamard matrices hold. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+  gap> HadamardCode( H4, 1 );
+  a (3,4,2)1 Hadamard code of order 4 over GF(2)
+  gap> HadamardCode( H4, 2 );
+  a (3,8,1)0 Hadamard code of order 4 over GF(2)
+  gap> HadamardCode( H4 );
+  a (4,8,2)1 Hadamard code of order 4 over GF(2) 
+  gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+  gap> C := HadamardCode( 4 );
+  a (4,8,2)1 Hadamard code of order 4 over GF(2)
+  gap> C = HadamardCode( H4 );
+  true 
+\end{Verbatim}
+  \index{code, conference} 
+
+\subsection{\textcolor{Chapter }{ConferenceCode}}
+\logpage{[ 5, 1, 3 ]}\nobreak
+\hyperdef{L}{X8122BA417F705997}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConferenceCode({\slshape H})\index{ConferenceCode@\texttt{ConferenceCode}}
+\label{ConferenceCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ConferenceCode} returns a code of length $n-1$ constructed from a symmetric 'conference matrix' \mbox{\texttt{\slshape H}}. A \emph{conference matrix} \mbox{\texttt{\slshape H}} is a symmetric matrix of order $n$, which satisfies $H\cdot H^T = ((n-1)\cdot I$, with $n \equiv 2 \pmod 4$. The rows of $\frac{1}{2}(H+I+J)$, $\frac{1}{2}(-H+I+J)$, plus the zero and all-ones vectors form the elements of a binary non-linear $(n-1, 2n, (n-2)/2)$ code. \index{conference matrix} 
+
+ \textsf{GUAVA} constructs a symmetric conference matrix of order $n+1$ ($n\equiv 1 \pmod 4$) and uses the rows of that matrix, plus the zero and all-ones vectors, to
+construct a binary non-linear $(n, 2(n+1), (n-1)/2)$-code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+  > [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+  gap> C1 := ConferenceCode( H6 );
+  a (5,12,2)1..4 conference code over GF(2)
+  gap> IsLinearCode( C1 );
+  false 
+  gap> C2 := ConferenceCode( 5 );
+  a (5,12,2)1..4 conference code over GF(2)
+  gap> AsSSortedList( C2 );
+  [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+    [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+    [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MOLSCode}}
+\logpage{[ 5, 1, 4 ]}\nobreak
+\hyperdef{L}{X81B7EE4279398F67}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MOLSCode({\slshape [n][,]q})\index{MOLSCode@\texttt{MOLSCode}}
+\label{MOLSCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MOLSCode} returns an $(n, q^2, n-1)$ code over $GF(q)$. The code is created from $n-2$ 'Mutually Orthogonal Latin Squares' (MOLS) of size $q \times q$. The default for \mbox{\texttt{\slshape n}} is $4$. \textsf{GUAVA} can construct a MOLS code for $n-2 \leq q$. Here \mbox{\texttt{\slshape q}} must be a prime power, $q > 2$. If there are no $n-2$ MOLS, an error is signalled. 
+
+ Since each of the $n-2$ MOLS is a $q\times q$ matrix, we can create a code of size $q^2$ by listing in each code element the entries that are in the same position in
+each of the MOLS. We precede each of these lists with the two coordinates that
+specify this position, making the word length become $n$. 
+
+ The MOLS codes are MDS codes (see \texttt{IsMDSCode} (\ref{IsMDSCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := MOLSCode( 6, 5 );
+  a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
+  gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+  >       local ls, el;
+  >       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+  >       for el in VectorCodeword( AsSSortedList( C1 ) ) do
+  >          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+  >       od;
+  >       return ls;
+  >    end );;
+  gap> AreMOLS( mols );
+  true
+  gap> C2 := MOLSCode( 11 );
+  a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RandomCode}}
+\logpage{[ 5, 1, 5 ]}\nobreak
+\hyperdef{L}{X7D87DD6380B2CE69}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomCode({\slshape n, M, F})\index{RandomCode@\texttt{RandomCode}}
+\label{RandomCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{RandomCode} returns a random unrestricted code of size \mbox{\texttt{\slshape M}} with word length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape M}} must be less than or equal to the number of elements in the space $GF(q)^n$. 
+
+ The function \texttt{RandomLinearCode} returns a random linear code (see \texttt{RandomLinearCode} (\ref{RandomLinearCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := RandomCode( 6, 10, GF(8) );
+  a (6,10,1..6)4..6 random unrestricted code over GF(8)
+  gap> MinimumDistance(C1);
+  3
+  gap> C2 := RandomCode( 6, 10, GF(8) );
+  a (6,10,1..6)4..6 random unrestricted code over GF(8)
+  gap> C1 = C2;
+  false 
+\end{Verbatim}
+ \index{code, Nordstrom-Robinson} 
+
+\subsection{\textcolor{Chapter }{NordstromRobinsonCode}}
+\logpage{[ 5, 1, 6 ]}\nobreak
+\hyperdef{L}{X816353397F25B62E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NordstromRobinsonCode({\slshape })\index{NordstromRobinsonCode@\texttt{NordstromRobinsonCode}}
+\label{NordstromRobinsonCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{NordstromRobinsonCode} returns a Nordstrom-Robinson code, the best code with word length $n=16$ and minimum distance $d=6$ over $GF(2)$. This is a non-linear $(16, 256, 6)$ code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := NordstromRobinsonCode();
+  a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+  gap> OptimalityCode( C );
+  0 
+\end{Verbatim}
+ \index{code, greedy} 
+
+\subsection{\textcolor{Chapter }{GreedyCode}}
+\logpage{[ 5, 1, 7 ]}\nobreak
+\hyperdef{L}{X7880D34485C60BAF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GreedyCode({\slshape L, d, F})\index{GreedyCode@\texttt{GreedyCode}}
+\label{GreedyCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GreedyCode} returns a Greedy code with design distance \mbox{\texttt{\slshape d}} over the finite field \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the list of vectors \mbox{\texttt{\slshape L}}. (The greedy algorithm checks each vector in \mbox{\texttt{\slshape L}} and adds it to the code if its distance to the current code is greater than or
+equal to \mbox{\texttt{\slshape d}}. It is obvious that the resulting code has a minimum distance of at least \mbox{\texttt{\slshape d}}. 
+
+ Greedy codes are often linear codes. 
+
+ The function \texttt{LexiCode} creates a greedy code from a basis instead of an enumerated list (see \texttt{LexiCode} (\ref{LexiCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+  a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+  gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
+  >                         (1,4) ), 3, GF(2) );
+  a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+  gap> C1 = C2;
+  false 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LexiCode}}
+\logpage{[ 5, 1, 8 ]}\nobreak
+\hyperdef{L}{X7C1B374583AFB923}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LexiCode({\slshape n, d, F})\index{LexiCode@\texttt{LexiCode}}
+\label{LexiCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ In this format, \texttt{Lexicode} returns a lexicode with word length \mbox{\texttt{\slshape n}}, design distance \mbox{\texttt{\slshape d}} over \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the lexicographically
+ordered list of all vectors of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. Every time a vector is found that has a distance to the current code of at
+least \mbox{\texttt{\slshape d}}, it is added to the code. This results, obviously, in a code with minimum
+distance greater than or equal to \mbox{\texttt{\slshape d}}. 
+
+ Another syntax which one can use is \texttt{LexiCode( B, d, F )}. When called in this format, \texttt{LexiCode} uses the basis \mbox{\texttt{\slshape B}} instead of the standard basis. \mbox{\texttt{\slshape B}} is a matrix of vectors over \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the list of vectors
+spanned by \mbox{\texttt{\slshape B}}, ordered lexicographically with respect to \mbox{\texttt{\slshape B}}. 
+
+ Note that binary lexicodes are always linear. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := LexiCode( 4, 3, GF(5) );
+  a (4,17,3..4)2..4 lexicode over GF(5) 
+  gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+  gap> C := LexiCode( B, 2, GF(2) );
+  a linear [3,1,2]1..2 lexicode over GF(2) 
+\end{Verbatim}
+ The function \texttt{GreedyCode} creates a greedy code that is not restricted to a lexicographical order (see \texttt{GreedyCode} (\ref{GreedyCode})). }
+
+ 
+\section{\textcolor{Chapter }{ Generating Linear Codes }}\logpage{[ 5, 2, 0 ]}
+\hyperdef{L}{X7A11F29F7BBF45BB}{}
+{
+  \label{Generating Linear Codes} In this section we describe functions for constructing linear codes. A linear
+code always has a generator or check matrix. 
+
+ The first two functions generate linear codes from the generator matrix (\texttt{GeneratorMatCode} (\ref{GeneratorMatCode})) or check matrix (\texttt{CheckMatCode} (\ref{CheckMatCode})). All linear codes can be constructed with these functions. 
+
+ The next functions we describe generate some well-known codes, like Hamming
+codes (\texttt{HammingCode} (\ref{HammingCode})), Reed-Muller codes (\texttt{ReedMullerCode} (\ref{ReedMullerCode})) and the extended Golay codes (\texttt{ExtendedBinaryGolayCode} (\ref{ExtendedBinaryGolayCode}) and \texttt{ExtendedTernaryGolayCode} (\ref{ExtendedTernaryGolayCode})). 
+
+ A large and powerful family of codes are alternant codes. They are obtained by
+a small modification of the parity check matrix of a BCH code (see \texttt{AlternantCode} (\ref{AlternantCode}), \texttt{GoppaCode} (\ref{GoppaCode}), \texttt{GeneralizedSrivastavaCode} (\ref{GeneralizedSrivastavaCode}) and \texttt{SrivastavaCode} (\ref{SrivastavaCode})). 
+
+ Finally, we describe a function for generating random linear codes (see \texttt{RandomLinearCode} (\ref{RandomLinearCode})). 
+
+ 
+
+\subsection{\textcolor{Chapter }{GeneratorMatCode}}
+\logpage{[ 5, 2, 1 ]}\nobreak
+\hyperdef{L}{X83F400A681CFC0D6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorMatCode({\slshape G[, name], F})\index{GeneratorMatCode@\texttt{GeneratorMatCode}}
+\label{GeneratorMatCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneratorMatCode} returns a linear code with generator matrix \mbox{\texttt{\slshape G}}. \mbox{\texttt{\slshape G}} must be a matrix over finite field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code. The generator matrix is the basis
+of the elements of the code. The resulting code has word length $n$, dimension $k$ if \mbox{\texttt{\slshape G}} is a $k \times n$-matrix. If $GF(q)$ is the field of the code, the size of the code will be $q^k$. 
+
+ If the generator matrix does not have full row rank, the linearly dependent
+rows are removed. This is done by the GAP function \texttt{BaseMat} and results in an equal code. The generator matrix can be retrieved with the
+function \texttt{GeneratorMat} (see \texttt{GeneratorMat} (\ref{GeneratorMat})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+  gap> C1 := GeneratorMatCode( G, GF(3) );
+  a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
+  gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+  a linear [5,5,1]0 code defined by generator matrix over GF(2)
+  gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
+  > x -> VectorCodeword( x ) ), GF( 2 ) );
+  a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
+  # This is the smallest linear code that contains the N-R code 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CheckMatCodeMutable}}
+\logpage{[ 5, 2, 2 ]}\nobreak
+\hyperdef{L}{X7CDDDFE47A10A008}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMatCodeMutable({\slshape H[, name], F})\index{CheckMatCodeMutable@\texttt{CheckMatCodeMutable}}
+\label{CheckMatCodeMutable}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CheckMatCodeMutable} is the same as \texttt{CheckMatCode} except that the check matrix and generator matrix are mutable. }
+
+ 
+
+\subsection{\textcolor{Chapter }{CheckMatCode}}
+\logpage{[ 5, 2, 3 ]}\nobreak
+\hyperdef{L}{X848D3F7B805DEB66}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMatCode({\slshape H[, name], F})\index{CheckMatCode@\texttt{CheckMatCode}}
+\label{CheckMatCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CheckMatCode} returns a linear code with check matrix \mbox{\texttt{\slshape H}}. \mbox{\texttt{\slshape H}} must be a matrix over Galois field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape [name.}} can contain a short description of the code. The parity check matrix is the
+transposed of the nullmatrix of the generator matrix of the code. Therefore, $c\cdot H^T = 0$ where $c$ is an element of the code. If \mbox{\texttt{\slshape H}} is a $r\times n$-matrix, the code has word length $n$, redundancy $r$ and dimension $n-r$. 
+
+ If the check matrix does not have full row rank, the linearly dependent rows
+are removed. This is done by the GAP function \texttt{BaseMat}. and results in an equal code. The check matrix can be retrieved with the
+function \texttt{CheckMat} (see \texttt{CheckMat} (\ref{CheckMat})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+  gap> C1 := CheckMatCode( G, GF(3) );
+  a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
+  gap> CheckMat(C1);
+  [ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
+    [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
+    [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
+  gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+  a cyclic [5,0,5]5 code defined by check matrix over GF(2)
+\end{Verbatim}
+  \index{code, Hamming} 
+
+\subsection{\textcolor{Chapter }{HammingCode}}
+\logpage{[ 5, 2, 4 ]}\nobreak
+\hyperdef{L}{X7DECB0A57C798583}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HammingCode({\slshape r, F})\index{HammingCode@\texttt{HammingCode}}
+\label{HammingCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{HammingCode} returns a Hamming code with redundancy \mbox{\texttt{\slshape r}} over \mbox{\texttt{\slshape F}}. A Hamming code is a single-error-correcting code. The parity check matrix of
+a Hamming code has all nonzero vectors of length \mbox{\texttt{\slshape r}} in its columns, except for a multiplication factor. The decoding algorithm of
+the Hamming code (see \texttt{Decode} (\ref{Decode})) makes use of this property. 
+
+ If $q$ is the size of its field \mbox{\texttt{\slshape F}}, the returned Hamming code is a linear $[(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3]$ code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 4, GF(2) );
+  a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+  gap> C2 := HammingCode( 3, GF(9) );
+  a linear [91,88,3]1 Hamming (3,9) code over GF(9) 
+\end{Verbatim}
+  \index{code, Reed-Muller} 
+
+\subsection{\textcolor{Chapter }{ReedMullerCode}}
+\logpage{[ 5, 2, 5 ]}\nobreak
+\hyperdef{L}{X801C88D578DA6ACA}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReedMullerCode({\slshape r, k})\index{ReedMullerCode@\texttt{ReedMullerCode}}
+\label{ReedMullerCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ReedMullerCode} returns a binary 'Reed-Muller code' \mbox{\texttt{\slshape R(r, k)}} with dimension \mbox{\texttt{\slshape k}} and order \mbox{\texttt{\slshape r}}. This is a code with length $2^k$ and minimum distance $2^{k-r}$ (see for example, section 1.10 in \cite{HP03}). By definition, the $r^{th}$ order binary Reed-Muller code of length $n=2^m$, for $0 \leq r \leq m$, is the set of all vectors $f$, where $f$ is a Boolean function which is a polynomial of degree at most $r$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> ReedMullerCode( 1, 3 );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+\end{Verbatim}
+  See \texttt{GeneralizedReedMullerCode} (\ref{GeneralizedReedMullerCode}) for a more general construction. \index{code, alternant} 
+
+\subsection{\textcolor{Chapter }{AlternantCode}}
+\logpage{[ 5, 2, 6 ]}\nobreak
+\hyperdef{L}{X851592C7811D3D2A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AlternantCode({\slshape r, Y[, alpha], F})\index{AlternantCode@\texttt{AlternantCode}}
+\label{AlternantCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AlternantCode} returns an 'alternant code', with parameters \mbox{\texttt{\slshape r}}, \mbox{\texttt{\slshape Y}} and \mbox{\texttt{\slshape alpha}} (optional). \mbox{\texttt{\slshape F}} denotes the (finite) base field. Here, \mbox{\texttt{\slshape r}} is the design redundancy of the code. \mbox{\texttt{\slshape Y}} and \mbox{\texttt{\slshape alpha}} are both vectors of length \mbox{\texttt{\slshape n}} from which the parity check matrix is constructed. The check matrix has the
+form $H=([a_i^j y_i])$, where $0 \leq j\leq r-1$, $1 \leq i\leq n$, and where $[...]$ is as in \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat})). If no \mbox{\texttt{\slshape alpha}} is specified, the vector $[1, a, a^2, .., a^{n-1}]$ is used, where $a$ is a primitive element of a Galois field \mbox{\texttt{\slshape F}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+  gap> alpha := List( [0..6], i -> a^i );;
+  gap> C := AlternantCode( 2, Y, alpha, GF(8) );
+  a linear [7,3,3..4]3..4 alternant code over GF(8) 
+\end{Verbatim}
+  \index{code, Goppa (classical)} 
+
+\subsection{\textcolor{Chapter }{GoppaCode}}
+\logpage{[ 5, 2, 7 ]}\nobreak
+\hyperdef{L}{X7EE808BB7D1E487A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GoppaCode({\slshape G, L})\index{GoppaCode@\texttt{GoppaCode}}
+\label{GoppaCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GoppaCode} returns a Goppa code \mbox{\texttt{\slshape C}} from Goppa polynomial \mbox{\texttt{\slshape g}}, having coefficients in a Galois Field $GF(q)$. \mbox{\texttt{\slshape L}} must be a list of elements in $GF(q)$, that are not roots of \mbox{\texttt{\slshape g}}. The word length of the code is equal to the length of \mbox{\texttt{\slshape L}}. The parity check matrix has the form $H=([a_i^j / G(a_i)])_{0 \leq j \leq deg(g)-1,\ a_i \in L}$, where $a_i\in L$ and $[...]$ is [...]
+
+ One can also call \texttt{GoppaCode} using the syntax \texttt{GoppaCode(g,n)}. When called with parameter \mbox{\texttt{\slshape n}}, \textsf{GUAVA} constructs a list $L$ of length \mbox{\texttt{\slshape n}}, such that no element of \mbox{\texttt{\slshape L}} is a root of \mbox{\texttt{\slshape g}}. 
+
+ This is a special case of an alternant code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:=Indeterminate(GF(8),"x");
+  x
+  gap> L:=Elements(GF(8));
+  [ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
+  gap> g:=x^2+x+1;
+  x^2+x+Z(2)^0
+  gap> C:=GoppaCode(g,L);
+  a linear [8,2,5]3 Goppa code over GF(2)
+  gap> xx := Indeterminate( GF(2), "xx" );; 
+  gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
+  gap> C1 := GoppaCode( gg, L );
+  a linear [8,2,5]3 Goppa code over GF(2) 
+  gap> y := Indeterminate( GF(2), "y" );; 
+  gap> h := y^2 + y + 1;;
+  gap> C2 := GoppaCode( h, 8 );
+  a linear [8,2,5]3 Goppa code over GF(2) 
+  gap> C1=C2;
+  true
+  gap> C=C1;
+  true
+\end{Verbatim}
+  \index{code, Srivastava} 
+
+\subsection{\textcolor{Chapter }{GeneralizedSrivastavaCode}}
+\logpage{[ 5, 2, 8 ]}\nobreak
+\hyperdef{L}{X7F9C0A727EE075B7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedSrivastavaCode({\slshape a, w, z[, t], F})\index{GeneralizedSrivastavaCode@\texttt{GeneralizedSrivastavaCode}}
+\label{GeneralizedSrivastavaCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralizedSrivastavaCode} returns a generalized Srivastava code with parameters \mbox{\texttt{\slshape a}}, \mbox{\texttt{\slshape w}}, \mbox{\texttt{\slshape z}}, \mbox{\texttt{\slshape t}}. $a =\{ a_1, ..., a_n\}$ and $w =\{ w_1, ..., w_s\}$ are lists of $n+s$ distinct elements of $F=GF(q^m)$, $z$ is a list of length $n$ of nonzero elements of $GF(q^m)$. The parameter \mbox{\texttt{\slshape t}} determines the designed distance: $d \geq st + 1$. The check matrix of this code i [...]
+\[ H=([\frac{z_i}{(a_i - w_j)^k}]), \]
+ $1\leq k\leq t$, where $[...]$ is as in \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat}). We use this definition of $H$ to define the code. The default for \mbox{\texttt{\slshape t}} is 1. The original Srivastava codes (see \texttt{SrivastavaCode} (\ref{SrivastavaCode})) are a special case $t=1$, $z_i=a_i^\mu$, for some $\mu$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+  gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+  gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+  a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{SrivastavaCode}}
+\logpage{[ 5, 2, 9 ]}\nobreak
+\hyperdef{L}{X7A38EB3178961F3E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SrivastavaCode({\slshape a, w[, mu], F})\index{SrivastavaCode@\texttt{SrivastavaCode}}
+\label{SrivastavaCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ $SrivastavaCode$ returns a Srivastava code with parameters \mbox{\texttt{\slshape a}}, \mbox{\texttt{\slshape w}} (and optionally \mbox{\texttt{\slshape mu}}). $a =\{ a_1, ..., a_n\}$ and $w =\{ w_1, ..., w_s\}$ are lists of $n+s$ distinct elements of $F=GF(q^m)$. The default for \mbox{\texttt{\slshape mu}} is 1. The Srivastava code is a generalized Srivastava code, in which $z_i = a_i^{mu}$ for some \mbox{\texttt{\slshape mu}} and $t=1$. 
+
+ J. N. Srivastava introduced this code in 1967, though his work was not
+published. See Helgert \cite{He72} for more details on the properties of this code. Related reference: G.
+Roelofsen, \textsc{On Goppa and Generalized Srivastava Codes} PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the
+Netherlands, 1982.  }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := AsSSortedList( GF(11) ){[2..8]};;
+  gap> w := AsSSortedList( GF(11) ){[9..10]};;
+  gap> C := SrivastavaCode( a, w, 2, GF(11) );
+  a linear [7,5,3]2 Srivastava code over GF(11)
+  gap> IsMDSCode( C );
+  true    # Always true if F is a prime field 
+\end{Verbatim}
+  \index{code, Cordaro-Wagner} 
+
+\subsection{\textcolor{Chapter }{CordaroWagnerCode}}
+\logpage{[ 5, 2, 10 ]}\nobreak
+\hyperdef{L}{X87F7CB8B7A8BE624}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CordaroWagnerCode({\slshape n})\index{CordaroWagnerCode@\texttt{CordaroWagnerCode}}
+\label{CordaroWagnerCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CordaroWagnerCode} returns a binary Cordaro-Wagner code. This is a code of length \mbox{\texttt{\slshape n}} and dimension $2$ having the best possible minimum distance $d$. This code is just a little bit less trivial than \texttt{RepetitionCode} (see \texttt{RepetitionCode} (\ref{RepetitionCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := CordaroWagnerCode( 11 );
+  a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
+  gap> AsSSortedList(C);                 
+  [ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
+    [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{FerreroDesignCode}}
+\logpage{[ 5, 2, 11 ]}\nobreak
+\hyperdef{L}{X865534267C8E902A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FerreroDesignCode({\slshape P, m})\index{FerreroDesignCode@\texttt{FerreroDesignCode}}
+\label{FerreroDesignCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \emph{Requires the GAP package SONATA} 
+
+ A group $K$ together with a group of automorphism $H$ of $K$ such that the semidirect product $KH$ is a Frobenius group with complement $H$ is called a Ferrero pair $(K, H)$ in SONATA. Take a Frobenius $(G,+)$ group with kernel $K$ and complement $H$. Consider the design $D$ with point set $K$ and block set $\{ a^H + b\ |\ a, b \in K, a \not= 0 \}$. Here $a^H$ denotes the orbit of a under conjugation by elements of $H$. Every planar near-ring design of type "*" can be obtained in this way from
+groups. These designs (from a Frobenius kernel of order $v$ and a Frobenius complement of order $k$) have $v(v-1)/k$ distinct blocks and they are all of size $k$. Moreover each of the $v$ points occurs in exactly $v-1$ distinct blocks. Hence the rows and the columns of the incidence matrix $M$ of the design are always of constant weight. 
+
+ \texttt{FerreroDesignCode} constructs binary linear code arising from the incdence matrix of a design
+associated to a "Ferrero pair" arising from a fixed-point-free (fpf)
+automorphism groups and Frobenius group. 
+
+ INPUT: $P$ is a list of prime powers describing an abelian group $G$. $m > 0$ is an integer such that $G$ admits a cyclic fpf automorphism group of size $m$. This means that for all $q = p^k \in P$, OrderMod($p$, $m$) must divide $q$ (see the SONATA documentation for \texttt{FpfAutomorphismGroupsCyclic}). 
+
+ OUTPUT: The binary linear code whose generator matrix is the incidence matrix
+of a design associated to a "Ferrero pair" arising from the fixed-point-free
+(fpf) automorphism group of $G$. The pair $(H,K)$ is called a Ferraro pair and the semidirect product $KH$ is a Frobenius group with complement $H$. 
+
+ AUTHORS: Peter Mayr and David Joyner }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G:=AbelianGroup([5,5] );
+   [ pc group of size 25 with 2 generators ]
+  gap> FpfAutomorphismGroupsMaxSize( G );
+  [ 24, 2 ]
+  gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+  [ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
+    [ pc group of size 25 with 2 generators ] ]
+  gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+   [ a 2 - ( 25, 3, 2 ) nearring generated design ]
+  gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+  25
+  200
+  gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
+  a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+  gap> MinimumDistance(C1);
+  24
+  gap> C2:=FerreroDesignCode( [5,5],3);
+  a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+  gap> C1=C2;
+  true
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RandomLinearCode}}
+\logpage{[ 5, 2, 12 ]}\nobreak
+\hyperdef{L}{X7BCA10CE8660357F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomLinearCode({\slshape n, k, F})\index{RandomLinearCode@\texttt{RandomLinearCode}}
+\label{RandomLinearCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{RandomLinearCode} returns a random linear code with word length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The method used is to first construct a $k\times n$ matrix of the block form $(I,A)$, where $I$ is a $k\times k$ identity matrix and $A$ is a $k\times (n-k)$ matrix constructed using \texttt{Random(F)} repeatedly. Then the columns are permuted using a randomly selected element of \texttt{SymmetricGroup(n)}. 
+
+ To create a random unrestricted code, use \texttt{RandomCode} (see \texttt{RandomCode} (\ref{RandomCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := RandomLinearCode( 15, 4, GF(3) );
+  a  [15,4,?] randomly generated code over GF(3)
+  gap> Display(C);
+  a linear [15,4,1..6]6..10 random linear code over GF(3)
+\end{Verbatim}
+  The method \textsf{GUAVA} chooses to output the result of a \texttt{RandomLinearCode} command is different than other codes. For example, the bounds on the minimum
+distance is not displayed. Howeer, you can use the \texttt{Display} command to print this information. This new display method was added in
+version 1.9 to speed up the command (if $n$ is about 80 and $k$ about 40, for example, the time it took to look up and/or calculate the bounds
+on the minimum distance was too long). 
+
+\subsection{\textcolor{Chapter }{OptimalityCode}}
+\logpage{[ 5, 2, 13 ]}\nobreak
+\hyperdef{L}{X839CFE4C7A567D4D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OptimalityCode({\slshape C})\index{OptimalityCode@\texttt{OptimalityCode}}
+\label{OptimalityCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+  \texttt{OptimalityCode} returns the difference between the smallest known upper bound and the actual
+size of the code. Note that the value of the function \texttt{UpperBound} is not always equal to the actual upper bound $A(n,d)$ thus the result may not be equal to $0$ even if the code is optimal! 
+
+ \texttt{OptimalityLinearCode} is similar but applies only to linear codes. }
+
+ 
+
+\subsection{\textcolor{Chapter }{BestKnownLinearCode}}
+\logpage{[ 5, 2, 14 ]}\nobreak
+\hyperdef{L}{X871508567CB34D96}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BestKnownLinearCode({\slshape n, k, F})\index{BestKnownLinearCode@\texttt{BestKnownLinearCode}}
+\label{BestKnownLinearCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+  \texttt{BestKnownLinearCode} returns the best known (as of 11 May 2006) linear code of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The function uses the tables described in section \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance}) to construct this code. 
+
+ This command can also be called using the syntax \texttt{BestKnownLinearCode( rec )}, where \mbox{\texttt{\slshape rec}} must be a record containing the fields `lowerBound', `upperBound' and
+`construction'. It uses the information in this field to construct a code.
+This form is meant to be used together with the function \texttt{BoundsMinimumDistance} (see \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance})), if the bounds are already calculated. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+  a linear [23,12,7]3 punctured code
+  gap> C1 = BinaryGolayCode();
+  false     # it's constructed differently
+  gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+  a linear [23,12,7]3 punctured code
+  gap> G1 := MutableCopyMat(GeneratorMat(C1));;
+  gap> PutStandardForm(G1);
+  ()
+  gap> Display(G1);
+   1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+   . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+   . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+   . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+   . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+   . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+   . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+   . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+   . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+   . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+   . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+   . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+  gap> C2 := BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> G2 := MutableCopyMat(GeneratorMat(C2));;
+  gap> PutStandardForm(G2);
+  ()
+  gap> Display(G2);
+   1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+   . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
+   . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+   . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
+   . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
+   . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
+   . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+   . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+   . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+   . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
+   . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
+   . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+  ## Despite their generator matrices are different, they are equivalent codes, see below.
+  gap> IsEquivalent(C1,C2);
+  true
+  gap> CodeIsomorphism(C1,C2);
+  (4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
+  gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+  a linear [81,77,3]2..3 shortened code of
+  a linear [85,81,3]1 Hamming (4,4) code over GF(4)
+  gap> C:=BestKnownLinearCode(174,72);
+  a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
+  gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+  rec( n := 81, k := 77, q := 4, 
+    references := rec( Ham := [ "%T this reference is unknown, for more info", 
+            "%T contact A.E. Brouwer (aeb at cwi.nl)" ], 
+        cap := [ "%T this reference is unknown, for more info", 
+            "%T contact A.E. Brouwer (aeb at cwi.nl)" ] ), 
+    construction := [ (Operation "ShortenedCode"), 
+        [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
+    lowerBound := 3, 
+    lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
+        "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
+    upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
+        "Ub(18,14)=3, reference: cap" ] )
+  gap> C := BestKnownLinearCode( bounds );
+  a linear [81,77,3]2..3 shortened code
+  gap> C = BestKnownLinearCode(81, 77, GF(4) );
+  true
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Gabidulin Codes }}\logpage{[ 5, 3, 0 ]}
+\hyperdef{L}{X858721967BE44000}{}
+{
+  \label{Gabidulin Codes}  These five binary, linear codes are derived from an article by Gabidulin,
+Davydov and Tombak \cite{GDT91}. All these codes are defined by check matrices. Exact definitions can be
+found in the article. The Gabidulin code, the enlarged Gabidulin code, the
+Davydov code, the Tombak code, and the enlarged Tombak code, correspond with
+theorem 1, 2, 3, 4, and 5, respectively in the article. 
+
+ Like the Hamming codes, these codes have fixed minimum distance and covering
+radius, but can be arbitrarily long. \index{code, Gabidulin} 
+
+\subsection{\textcolor{Chapter }{GabidulinCode}}
+\logpage{[ 5, 3, 1 ]}\nobreak
+\hyperdef{L}{X79BE5D497CB2E59E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GabidulinCode({\slshape m, w1, w2})\index{GabidulinCode@\texttt{GabidulinCode}}
+\label{GabidulinCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GabidulinCode} yields a code of length $5$ . $2^{m-2}-1$, redundancy $2m-1$, minimum distance $3$ and covering radius $2$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} should be elements of $GF(2^{m-2})$. }
+
+ 
+
+\subsection{\textcolor{Chapter }{EnlargedGabidulinCode}}
+\logpage{[ 5, 3, 2 ]}\nobreak
+\hyperdef{L}{X873950F67D4A9184}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EnlargedGabidulinCode({\slshape m, w1, w2, e})\index{EnlargedGabidulinCode@\texttt{EnlargedGabidulinCode}}
+\label{EnlargedGabidulinCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{EnlargedGabidulinCode} yields a code of length $7$. $2^{m-2}-2$, redundancy $2m$, minimum distance $3$ and covering radius $2$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are elements of $GF(2^{m-2})$. \mbox{\texttt{\slshape e}} is an element of $GF(2^m)$.  }
+
+ \index{code, Davydov} 
+
+\subsection{\textcolor{Chapter }{DavydovCode}}
+\logpage{[ 5, 3, 3 ]}\nobreak
+\hyperdef{L}{X7F5BE77B7F343182}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DavydovCode({\slshape r, v, ei, ej})\index{DavydovCode@\texttt{DavydovCode}}
+\label{DavydovCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DavydovCode} yields a code of length $2^v + 2^{r-v} - 3$, redundancy \mbox{\texttt{\slshape r}}, minimum distance $4$ and covering radius $2$. \mbox{\texttt{\slshape v}} is an integer between $2$ and $r-2$. \mbox{\texttt{\slshape ei}} and \mbox{\texttt{\slshape ej}} are elements of $GF(2^v)$ and $GF(2^{r-v})$, respectively. }
+
+ \index{code, Tombak} 
+
+\subsection{\textcolor{Chapter }{TombakCode}}
+\logpage{[ 5, 3, 4 ]}\nobreak
+\hyperdef{L}{X845B4DBE83288D2D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TombakCode({\slshape m, e, beta, gamma, w1, w2})\index{TombakCode@\texttt{TombakCode}}
+\label{TombakCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{TombakCode} yields a code of length $15 \cdot 2^{m-3} - 3$, redundancy $2m$, minimum distance $4$ and covering radius $2$. \mbox{\texttt{\slshape e}} is an element of $GF(2^m)$. \mbox{\texttt{\slshape beta}} and \mbox{\texttt{\slshape gamma}} are elements of $GF(2^{m-1})$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are elements of $GF(2^{m-3})$. }
+
+ 
+
+\subsection{\textcolor{Chapter }{EnlargedTombakCode}}
+\logpage{[ 5, 3, 5 ]}\nobreak
+\hyperdef{L}{X7D6583347C0D4292}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EnlargedTombakCode({\slshape m, e, beta, gamma, w1, w2, u})\index{EnlargedTombakCode@\texttt{EnlargedTombakCode}}
+\label{EnlargedTombakCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{EnlargedTombakCode} yields a code of length $23 \cdot 2^{m-4} - 3$, redundancy $2m-1$, minimum distance $4$ and covering radius $2$. The parameters \mbox{\texttt{\slshape m}}, \mbox{\texttt{\slshape e}}, \mbox{\texttt{\slshape beta}}, \mbox{\texttt{\slshape gamma}}, \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are defined as in \texttt{TombakCode}. \mbox{\texttt{\slshape u}} is an element of $GF(2^{m-1})$.  }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+  a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
+  gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+  a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
+  gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+  a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
+  gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+  a linear [57,47,4]2 Tombak code (m=5) over GF(2)
+  gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
+  > Z(4)^0, Z(4)^0, Z(32)^23 );
+  a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Golay Codes }}\logpage{[ 5, 4, 0 ]}
+\hyperdef{L}{X81F6E4A785F368B0}{}
+{
+  \label{Golay Codes} `` The Golay code is probably the most important of all codes for both practical
+and theoretical reasons. '' (\cite{MS83}, pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for
+the US Army Labs for most of his career. For more information on his life, see
+his obit in the June 1990 IEEE Information Society Newsletter. \index{code, Golay (binary)} 
+
+\subsection{\textcolor{Chapter }{BinaryGolayCode}}
+\logpage{[ 5, 4, 1 ]}\nobreak
+\hyperdef{L}{X80ED89C079CD0D09}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BinaryGolayCode({\slshape })\index{BinaryGolayCode@\texttt{BinaryGolayCode}}
+\label{BinaryGolayCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{BinaryGolayCode} returns a binary Golay code. This is a perfect $[23,12,7]$ code. It is also cyclic, and has generator polynomial $g(x)=1+x^2+x^4+x^5+x^6+x^{10}+x^{11}$. Extending it results in an extended Golay code (see \texttt{ExtendedBinaryGolayCode} (\ref{ExtendedBinaryGolayCode})). There's also the ternary Golay code (see \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+  true
+  gap> IsPerfectCode(C);
+  true 
+  gap> IsCyclicCode(C);
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ExtendedBinaryGolayCode}}
+\logpage{[ 5, 4, 2 ]}\nobreak
+\hyperdef{L}{X84520C7983538806}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedBinaryGolayCode({\slshape })\index{ExtendedBinaryGolayCode@\texttt{ExtendedBinaryGolayCode}}
+\label{ExtendedBinaryGolayCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExtendedBinaryGolayCode} returns an extended binary Golay code. This is a $[24,12,8]$ code. Puncturing in the last position results in a perfect binary Golay code
+(see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode})). The code is self-dual. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ExtendedBinaryGolayCode();
+  a linear [24,12,8]4 extended binary Golay code over GF(2)
+  gap> IsSelfDualCode(C);
+  true
+  gap> P := PuncturedCode(C);
+  a linear [23,12,7]3 punctured code
+  gap> P = BinaryGolayCode();
+  true 
+  gap> IsCyclicCode(C);
+  false
+  
+\end{Verbatim}
+  \index{code, Golay (ternary)} 
+
+\subsection{\textcolor{Chapter }{TernaryGolayCode}}
+\logpage{[ 5, 4, 3 ]}\nobreak
+\hyperdef{L}{X7E0CCCD7866ADB94}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TernaryGolayCode({\slshape })\index{TernaryGolayCode@\texttt{TernaryGolayCode}}
+\label{TernaryGolayCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{TernaryGolayCode} returns a ternary Golay code. This is a perfect $[11,6,5]$ code. It is also cyclic, and has generator polynomial $g(x)=2+x^2+2x^3+x^4+x^5$. Extending it results in an extended Golay code (see \texttt{ExtendedTernaryGolayCode} (\ref{ExtendedTernaryGolayCode})). There's also the binary Golay code (see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=TernaryGolayCode();
+  a cyclic [11,6,5]2 ternary Golay code over GF(3)
+  gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+  true 
+  gap> IsCyclicCode(C);
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ExtendedTernaryGolayCode}}
+\logpage{[ 5, 4, 4 ]}\nobreak
+\hyperdef{L}{X81088A66816BCAE4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedTernaryGolayCode({\slshape })\index{ExtendedTernaryGolayCode@\texttt{ExtendedTernaryGolayCode}}
+\label{ExtendedTernaryGolayCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExtendedTernaryGolayCode} returns an extended ternary Golay code. This is a $[12,6,6]$ code. Puncturing this code results in a perfect ternary Golay code (see \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). The code is self-dual. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ExtendedTernaryGolayCode();
+  a linear [12,6,6]3 extended ternary Golay code over GF(3)
+  gap> IsSelfDualCode(C);
+  true
+  gap> P := PuncturedCode(C);
+  a linear [11,6,5]2 punctured code
+  gap> P = TernaryGolayCode();
+  true 
+  gap> IsCyclicCode(C);
+  false
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Generating Cyclic Codes }}\logpage{[ 5, 5, 0 ]}
+\hyperdef{L}{X8366CC3685F0BC85}{}
+{
+  \label{Generating Cyclic Codes} The elements of a cyclic code $C$ are all multiples of a ('generator') polynomial $g(x)$, where calculations are carried out modulo $x^n-1$. Therefore, as polynomials in $x$, the elements always have degree less than $n$. A cyclic code is an ideal in the ring $F[x]/(x^n-1)$ of polynomials modulo $x^n - 1$. The unique monic polynomial of least degree that generates $C$ is called the \emph{generator polynomial} of $C$. It is a divisor of the polynomial $x^ [...]
+
+ The \emph{check polynomial} is the polynomial $h(x)$ with $g(x)h(x)=x^n-1$. Therefore it is also a divisor of $x^n-1$. The check polynomial has the property that 
+\[ c(x)h(x) \equiv 0 \pmod{x^n-1}, \]
+ for every codeword $c(x)\in C$. 
+
+ The first two functions described below generate cyclic codes from a given
+generator or check polynomial. All cyclic codes can be constructed using these
+functions. 
+
+ Two of the Golay codes already described are cyclic (see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode}) and \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). For example, the \textsf{GUAVA} record for a binary Golay code contains the generator polynomial: 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := BinaryGolayCode();
+  a cyclic [23,12,7]3 binary Golay code over GF(2)
+  gap> NamesOfComponents(C);
+  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+    "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
+    "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
+    "boundsCoveringRadius", "MinimumWeightOfGenerators", 
+    "UpperBoundOptimalMinimumDistance" ]
+  gap> C!.GeneratorPol;
+  x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0
+\end{Verbatim}
+  Then functions that generate cyclic codes from a prescribed set of roots of
+the generator polynomial are described, including the BCH codes (see \texttt{RootsCode} (\ref{RootsCode}), \texttt{BCHCode} (\ref{BCHCode}), \texttt{ReedSolomonCode} (\ref{ReedSolomonCode}) and \texttt{QRCode} (\ref{QRCode})). 
+
+ Finally we describe the trivial codes (see \texttt{WholeSpaceCode} (\ref{WholeSpaceCode}), \texttt{NullCode} (\ref{NullCode}), \texttt{RepetitionCode} (\ref{RepetitionCode})), and the command \texttt{CyclicCodes} which lists all cyclic codes (\texttt{CyclicCodes} (\ref{CyclicCodes})). 
+
+\subsection{\textcolor{Chapter }{GeneratorPolCode}}
+\logpage{[ 5, 5, 1 ]}\nobreak
+\hyperdef{L}{X853D34A5796CEB73}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorPolCode({\slshape g, n[, name], F})\index{GeneratorPolCode@\texttt{GeneratorPolCode}}
+\label{GeneratorPolCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneratorPolCode} creates a cyclic code with a generator polynomial \mbox{\texttt{\slshape g}}, word length \mbox{\texttt{\slshape n}}, over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code. 
+
+ If \mbox{\texttt{\slshape g}} is not a divisor of $x^n-1$, it cannot be a generator polynomial. In that case, a code is created with
+generator polynomial $gcd( g, x^n-1 )$, i.e. the greatest common divisor of \mbox{\texttt{\slshape g}} and $x^n-1$. This is a valid generator polynomial that generates the ideal $(g)$. See \texttt{Generating Cyclic Codes} (\ref{Generating Cyclic Codes}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
+  Z(2)^0+x^2
+  gap> C1 := GeneratorPolCode(P, 7, GF(2));
+  a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+  gap> GeneratorPol( C1 );
+  Z(2)^0+x
+  gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+  a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+  gap> GeneratorPol( C2 );
+  Z(2)^0+x
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CheckPolCode}}
+\logpage{[ 5, 5, 2 ]}\nobreak
+\hyperdef{L}{X82440B78845F7F6E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckPolCode({\slshape h, n[, name], F})\index{CheckPolCode@\texttt{CheckPolCode}}
+\label{CheckPolCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CheckPolCode} creates a cyclic code with a check polynomial \mbox{\texttt{\slshape h}}, word length \mbox{\texttt{\slshape n}}, over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code (as a string). 
+
+ If \mbox{\texttt{\slshape h}} is not a divisor of $x^n-1$, it cannot be a check polynomial. In that case, a code is created with check
+polynomial $gcd( h, x^n-1 )$, i.e. the greatest common divisor of \mbox{\texttt{\slshape h}} and $x^n-1$. This is a valid check polynomial that yields the same elements as the ideal $(h)$. See \ref{Generating Cyclic Codes}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
+  -Z(3)^0+x_1^2
+  gap> H := CheckPolCode(P, 7, GF(3));
+  a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
+  gap> CheckPol(H);
+  -Z(3)^0+x_1
+  gap> Gcd(P, X(GF(3))^7-1);
+  -Z(3)^0+x_1
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RootsCode}}
+\logpage{[ 5, 5, 3 ]}\nobreak
+\hyperdef{L}{X818F0E6583E01D4B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RootsCode({\slshape n, list})\index{RootsCode@\texttt{RootsCode}}
+\label{RootsCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This is the generalization of the BCH, Reed-Solomon and quadratic residue
+codes (see \texttt{BCHCode} (\ref{BCHCode}), \texttt{ReedSolomonCode} (\ref{ReedSolomonCode}) and \texttt{QRCode} (\ref{QRCode})). The user can give a length of the code \mbox{\texttt{\slshape n}} and a prescribed set of zeros. The argument \mbox{\texttt{\slshape list}} must be a valid list of primitive $n^{th}$ roots of unity in a splitting field $GF(q^m)$. The resulting code will be over the field $GF(q)$. The function will return the largest possible cyclic code for which the list \mb [...]
+
+ This command can also be called with the syntax \texttt{RootsCode( n, list, q )}. In this second form, the second argument is a list of integers, ranging from $0$ to $n-1$. The resulting code will be over a field $GF(q)$. \textsf{GUAVA} calculates a primitive $n^{th}$ root of unity, $\alpha$, in the extension field of $GF(q)$. It uses the set of the powers of $\alpha$ in the list as a prescribed set of zeros. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := PrimitiveUnityRoot( 3, 14 );
+  Z(3^6)^52
+  gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+  a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
+  gap> MinimumDistance( C1 );
+  4
+  gap> b := PrimitiveUnityRoot( 2, 15 );
+  Z(2^4)
+  gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+  a cyclic [15,7,5]3..5 code defined by roots over GF(2)
+  gap> C2 = BCHCode( 15, 5, GF(2) );
+  true 
+  C3 := RootsCode( 4, [ 1, 2 ], 5 );
+  RootsOfCode( C3 );
+  C3 = ReedSolomonCode( 4, 3 );
+  
+\end{Verbatim}
+  \index{code, Bose-Chaudhuri-Hockenghem} 
+
+\subsection{\textcolor{Chapter }{BCHCode}}
+\logpage{[ 5, 5, 4 ]}\nobreak
+\hyperdef{L}{X7C6BB07C87853C00}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BCHCode({\slshape n[, b], delta, F})\index{BCHCode@\texttt{BCHCode}}
+\label{BCHCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{BCHCode} returns a 'Bose-Chaudhuri-Hockenghem code' (or \emph{BCH code} for short). This is the largest possible cyclic code of length \mbox{\texttt{\slshape n}} over field \mbox{\texttt{\slshape F}}, whose generator polynomial has zeros 
+\[ a^{b},a^{b+1}, ..., a^{b+delta-2}, \]
+ where $a$ is a primitive $n^{th}$ root of unity in the splitting field $GF(q^m)$, \mbox{\texttt{\slshape b}} is an integer $0\leq b\leq n-delta+1$ and $m$ is the multiplicative order of $q$ modulo \mbox{\texttt{\slshape n}}. (The integers $\{b,...,b+delta-2\}$ typically lie in the range $\{1,...,n-1\}$.) Default value for \mbox{\texttt{\slshape b}} is $1$, though the algorithm allows $b=0$. The length \mbox{\texttt{\slshape n}} of the code and the size $q$ of the field must be relativel [...]
+the least common multiple of the minimal polynomials of 
+\[ a^{b}, a^{b+1}, ..., a^{b+delta-2}. \]
+ The set of zeroes of the generator polynomial is equal to the union of the
+sets 
+\[ \{a^x\ |\ x \in C_k\}, \]
+ where $C_k$ is the $k^{th}$ cyclotomic coset of $q$ modulo $n$ and $b\leq k\leq b+delta-2$ (see \texttt{CyclotomicCosets} (\ref{CyclotomicCosets})). 
+
+ Special cases are $b=1$ (resulting codes are called 'narrow-sense' BCH codes), and $n=q^m-1$ (known as 'primitive' BCH codes). \textsf{GUAVA} calculates the largest value of $d$ for which the BCH code with designed distance $d$ coincides with the BCH code with designed distance \mbox{\texttt{\slshape delta}}. This distance $d$ is called the \emph{Bose distance} of the code. The true minimum distance of the code is greater than or equal to
+the Bose distance. \index{Bose distance} 
+
+ Printed are the designed distance (to be precise, the Bose distance) $d$, and the starting power $b$. 
+
+ The Sugiyama decoding algorithm has been implemented for this code (see \texttt{Decode} (\ref{Decode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := BCHCode( 15, 3, 5, GF(2) );
+  a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+  gap> DesignedDistance( C1 );
+  7
+  gap> C2 := BCHCode( 23, 2, GF(2) );
+  a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
+  gap> DesignedDistance( C2 );       
+  5
+  gap> MinimumDistance(C2);
+  7 
+\end{Verbatim}
+  See \texttt{RootsCode} (\ref{RootsCode}) for a more general construction. \index{code, Reed-Solomon} 
+
+\subsection{\textcolor{Chapter }{ReedSolomonCode}}
+\logpage{[ 5, 5, 5 ]}\nobreak
+\hyperdef{L}{X838F3CB3872CEF95}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReedSolomonCode({\slshape n, d})\index{ReedSolomonCode@\texttt{ReedSolomonCode}}
+\label{ReedSolomonCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ReedSolomonCode} returns a 'Reed-Solomon code' of length \mbox{\texttt{\slshape n}}, designed distance \mbox{\texttt{\slshape d}}. This code is a primitive narrow-sense BCH code over the field $GF(q)$, where $q=n+1$. The dimension of an RS code is $n-d+1$. According to the Singleton bound (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})) the dimension cannot be greater than this, so the true minimum distance of
+an RS code is equal to \mbox{\texttt{\slshape d}} and the code is maximum distance separable (see \texttt{IsMDSCode} (\ref{IsMDSCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ReedSolomonCode( 3, 2 );
+  a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
+  gap> IsCyclicCode(C1);
+  true
+  gap> C2 := ReedSolomonCode( 4, 3 );
+  a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
+  gap> RootsOfCode( C2 );
+  [ Z(5), Z(5)^2 ]
+  gap> IsMDSCode(C2);
+  true 
+\end{Verbatim}
+  See \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode}) for a more general construction. 
+
+\subsection{\textcolor{Chapter }{ExtendedReedSolomonCode}}
+\logpage{[ 5, 5, 6 ]}\nobreak
+\hyperdef{L}{X8730B90A862A3B3E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedReedSolomonCode({\slshape n, d})\index{ExtendedReedSolomonCode@\texttt{ExtendedReedSolomonCode}}
+\label{ExtendedReedSolomonCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExtendedReedSolomonCode} creates a Reed-Solomon code of length $n-1$ with designed distance $d-1$ and then returns the code which is extended by adding an overall parity-check
+symbol. The motivation for creating this function is calling \texttt{ExtendedCode} (\ref{ExtendedCode}) function over a Reed-Solomon code will take considerably long time. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := ExtendedReedSolomonCode(17, 13);
+  a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
+  gap> IsMDSCode(C);
+  true
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{QRCode}}
+\logpage{[ 5, 5, 7 ]}\nobreak
+\hyperdef{L}{X825F42F68179D2AB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QRCode({\slshape n, F})\index{QRCode@\texttt{QRCode}}
+\label{QRCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{QRCode} returns a quadratic residue code. If \mbox{\texttt{\slshape F}} is a field $GF(q)$, then $q$ must be a quadratic residue modulo \mbox{\texttt{\slshape n}}. That is, an $x$ exists with $x^2 \equiv q \pmod n$. Both \mbox{\texttt{\slshape n}} and $q$ must be primes. Its generator polynomial is the product of the polynomials $x-a^i$. $a$ is a primitive $n^{th}$ root of unity, and $i$ is an integer in the set of quadratic residues modulo \mbox{\texttt{\slshape n}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := QRCode( 7, GF(2) );
+  a cyclic [7,4,3]1 quadratic residue code over GF(2)
+  gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+  true
+  gap> IsCyclicCode(C1);
+  true
+  gap> IsCyclicCode(HammingCode( 3, GF(2) ));
+  false
+  gap> C2 := QRCode( 11, GF(3) );
+  a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
+  gap> C2 = TernaryGolayCode();
+  true 
+  gap> Q1 := QRCode( 7, GF(2));
+  a cyclic [7,4,3]1 quadratic residue code over GF(2)
+  gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
+  Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
+  [ 168, 42 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{QQRCodeNC}}
+\logpage{[ 5, 5, 8 ]}\nobreak
+\hyperdef{L}{X8764ABCF854C695E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QQRCodeNC({\slshape p})\index{QQRCodeNC@\texttt{QQRCodeNC}}
+\label{QQRCodeNC}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{QQRCodeNC} is the same as \texttt{QQRCode}, except that it uses \texttt{GeneratorMatCodeNC} instead of \texttt{GeneratorMatCode}. }
+
+ 
+
+\subsection{\textcolor{Chapter }{QQRCode}}
+\logpage{[ 5, 5, 9 ]}\nobreak
+\hyperdef{L}{X7F4C3AD2795A8D7A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QQRCode({\slshape p})\index{QQRCode@\texttt{QQRCode}}
+\label{QQRCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{QQRCode} returns a quasi-quadratic residue code, as defined by Proposition 2.2 in
+Bazzi-Mittel \cite{BM03}. The parameter \mbox{\texttt{\slshape p}} must be a prime. Its generator matrix has the block form $G=(Q,N)$. Here $Q$ is a $p\times $ circulant matrix whose top row is $(0,x_1,...,x_{p-1})$, where $x_i=1$ if and only if $i$ is a quadratic residue mod $p$, and $N$ is a $p\times $ circulant matrix whose top row is $(0,y_1,...,y_{p-1})$, where $x_i+y_i=1$ for all $i$. (In fact, this matrix can be recovered as the component \texttt{DoublyCirculant} of the code.) }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := QQRCode( 7);
+  a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
+  gap> G1:=GeneratorMat(C1);;
+  gap> Display(G1);
+   . 1 1 . 1 . . . . . 1 . 1 1
+   1 . 1 1 1 . . . . 1 1 1 . 1
+   . . . 1 1 . 1 . 1 1 . . . 1
+   . . 1 . 1 1 1 1 . 1 . . 1 1
+   . . . . . . . 1 . . 1 1 1 .
+   . . . . . . . . . 1 1 1 . 1
+   . . . . . . . . 1 . . 1 1 1
+  gap> Display(C1!.DoublyCirculant);
+   . 1 1 . 1 . . . . . 1 . 1 1
+   1 1 . 1 . . . . . 1 . 1 1 .
+   1 . 1 . . . 1 . 1 . 1 1 . .
+   . 1 . . . 1 1 1 . 1 1 . . .
+   1 . . . 1 1 . . 1 1 . . . 1
+   . . . 1 1 . 1 1 1 . . . 1 .
+   . . 1 1 . 1 . 1 . . . 1 . 1
+  gap> MinimumDistance(C1);
+  4
+  gap> C2 := QQRCode( 29); MinimumDistance(C2);
+  a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
+  12
+  gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+  [ permutation group of size 812 with 4 generators ]
+  [ 812, 7 ]
+\end{Verbatim}
+  \index{code, Fire} 
+
+\subsection{\textcolor{Chapter }{FireCode}}
+\logpage{[ 5, 5, 10 ]}\nobreak
+\hyperdef{L}{X7F3B8CC8831DA0E4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FireCode({\slshape g, b})\index{FireCode@\texttt{FireCode}}
+\label{FireCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{FireCode} constructs a (binary) Fire code. \mbox{\texttt{\slshape g}} is a primitive polynomial of degree $m$, and a factor of $x^r-1$. \mbox{\texttt{\slshape b}} an integer $0 \leq b \leq m$ not divisible by $r$, that determines the burst length of a single error burst that can be
+corrected. The argument \mbox{\texttt{\slshape g}} can be a polynomial with base ring $GF(2)$, or a list of coefficients in $GF(2)$. The generator polynomial of the code is defined as the product of \mbox{\texttt{\slshape g}} and $x^{2b-1}+1$. 
+
+ Here is the general definition of 'Fire code', named after P. Fire, who
+introduced these codes in 1959 in order to correct burst errors. First, a
+definition. If $F=GF(q)$ and $f\in F[x]$ then we say $f$ has \emph{order} $e$ if $f(x)|(x^e-1)$. \index{order of polynomial} A \emph{Fire code} is a cyclic code over $F$ with generator polynomial $g(x)= (x^{2t-1}-1)p(x)$, where $p(x)$ does not divide $x^{2t-1}-1$ and satisfies $deg(p(x))\geq t$. The length of such a code is the order of $g(x)$.  Non-binary Fire codes have not been implemented. }
+
+ . 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+  Z(2)^0+x^2+x^3
+  gap> Factors( G );
+  [ Z(2)^0+x^2+x^3 ]
+  gap> C := FireCode( G, 3 );
+  a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
+  gap> MinimumDistance( C );
+  4     # Still it can correct bursts of length 3 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{WholeSpaceCode}}
+\logpage{[ 5, 5, 11 ]}\nobreak
+\hyperdef{L}{X7BC245E37EB7B23F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WholeSpaceCode({\slshape n, F})\index{WholeSpaceCode@\texttt{WholeSpaceCode}}
+\label{WholeSpaceCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{WholeSpaceCode} returns the cyclic whole space code of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. This code consists of all polynomials of degree less than \mbox{\texttt{\slshape n}} and coefficients in \mbox{\texttt{\slshape F}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := WholeSpaceCode( 5, GF(3) );
+  a cyclic [5,5,1]0 whole space code over GF(3)
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{NullCode}}
+\logpage{[ 5, 5, 12 ]}\nobreak
+\hyperdef{L}{X7B4EF2017B2C61AD}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NullCode({\slshape n, F})\index{NullCode@\texttt{NullCode}}
+\label{NullCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{NullCode} returns the zero-dimensional nullcode with length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. This code has only one word: the all zero word. It is cyclic though! }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := NullCode( 5, GF(3) );
+  a cyclic [5,0,5]5 nullcode over GF(3)
+  gap> AsSSortedList( C );
+  [ [ 0 0 0 0 0 ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RepetitionCode}}
+\logpage{[ 5, 5, 13 ]}\nobreak
+\hyperdef{L}{X83C5F8FE7827EAA7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RepetitionCode({\slshape n, F})\index{RepetitionCode@\texttt{RepetitionCode}}
+\label{RepetitionCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{RepetitionCode} returns the cyclic repetition code of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. The code has as many elements as \mbox{\texttt{\slshape F}}, because each codeword consists of a repetition of one of these elements. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := RepetitionCode( 3, GF(5) );
+  a cyclic [3,1,3]2 repetition code over GF(5)
+  gap> AsSSortedList( C );
+  [ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
+  gap> IsPerfectCode( C );
+  false
+  gap> IsMDSCode( C );
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CyclicCodes}}
+\logpage{[ 5, 5, 14 ]}\nobreak
+\hyperdef{L}{X82FA9F65854D98A6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclicCodes({\slshape n, F})\index{CyclicCodes@\texttt{CyclicCodes}}
+\label{CyclicCodes}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CyclicCodes} returns a list of all cyclic codes of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. It constructs all possible generator polynomials from the factors of $x^n-1$. Each combination of these factors yields a generator polynomial after
+multiplication. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CyclicCodes(3,GF(3));
+  [ a cyclic [3,3,1]0 enumerated code over GF(3), 
+  a cyclic [3,2,1..2]1 enumerated code over GF(3), 
+  a cyclic [3,1,3]2 enumerated code over GF(3), 
+  a cyclic [3,0,3]3 enumerated code over GF(3) ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{NrCyclicCodes}}
+\logpage{[ 5, 5, 15 ]}\nobreak
+\hyperdef{L}{X8263CE4A790D294A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NrCyclicCodes({\slshape n, F})\index{NrCyclicCodes@\texttt{NrCyclicCodes}}
+\label{NrCyclicCodes}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{NrCyclicCodes} calculates the number of cyclic codes of length \mbox{\texttt{\slshape n}} over field \mbox{\texttt{\slshape F}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> NrCyclicCodes( 23, GF(2) );
+  8
+  gap> codelist := CyclicCodes( 23, GF(2) );
+  [ a cyclic [23,23,1]0 enumerated code over GF(2), 
+    a cyclic [23,22,1..2]1 enumerated code over GF(2), 
+    a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+    a cyclic [23,0,23]23 enumerated code over GF(2), 
+    a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+    a cyclic [23,12,1..7]3 enumerated code over GF(2), 
+    a cyclic [23,1,23]11 enumerated code over GF(2), 
+    a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
+  gap> BinaryGolayCode() in codelist;
+  true
+  gap> RepetitionCode( 23, GF(2) ) in codelist;
+  true
+  gap> CordaroWagnerCode( 23 ) in codelist;
+  false    # This code is not cyclic 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{QuasiCyclicCode}}
+\logpage{[ 5, 5, 16 ]}\nobreak
+\hyperdef{L}{X79826B16785E8BD3}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QuasiCyclicCode({\slshape G, s, F})\index{QuasiCyclicCode@\texttt{QuasiCyclicCode}}
+\label{QuasiCyclicCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{QuasiCyclicCode( G, k, F )} generates a rate $1/m$ quasi-cyclic code over field \mbox{\texttt{\slshape F}}. The input \mbox{\texttt{\slshape G}} is a list of univariate polynomials and $m$ is the cardinality of this list. Note that $m$ must be at least $2$. The input \mbox{\texttt{\slshape s}} is the size of each circulant and it may not necessarily be the same as the
+code dimension $k$, i.e. $k \le s$. 
+
+ There also exists another version, \texttt{QuasiCyclicCode( G, s )} which produces quasi-cyclic codes over $F_2$ only. Here the parameter \mbox{\texttt{\slshape s}} holds the same definition and the input \mbox{\texttt{\slshape G}} is a list of integers, where each integer is an octal representation of a
+binary univariate polynomial. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> #
+  gap> # This example show the case for k = s
+  gap> #
+  gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+  Z(2)^0
+  gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+  x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
+  gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+  x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
+  gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+  x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
+  Z(2)^0
+  gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+  x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
+  gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+  a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
+  gap> MinimumDistance(C);
+  29
+  gap> Display(C);
+  a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
+  gap> #
+  gap> # This example show the case for k < s
+  gap> #
+  gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+  -x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
+  gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+  x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
+  gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+  x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
+  gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+  a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
+  gap> MinimumDistance(C);
+  34
+  gap> Display(C);
+  a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
+  gap> #
+  gap> # This example show the binary case using octal representation
+  gap> #
+  gap> L1 := 001;;   # 0 000 001
+  gap> L2 := 013;;   # 0 001 011
+  gap> L3 := 015;;   # 0 001 101
+  gap> L4 := 077;;   # 0 111 111
+  gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+  a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
+  gap> MinimumDistance(C);
+  12
+  gap> Display(C);
+  a linear [28,7,12]8..14 quasi-cyclic code over GF(2)
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CyclicMDSCode}}
+\logpage{[ 5, 5, 17 ]}\nobreak
+\hyperdef{L}{X7BFEDA52835A601D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclicMDSCode({\slshape q, m, k})\index{CyclicMDSCode@\texttt{CyclicMDSCode}}
+\label{CyclicMDSCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Given the input parameters \mbox{\texttt{\slshape q}}, \mbox{\texttt{\slshape m}} and \mbox{\texttt{\slshape k}}, this function returns a $[q^m + 1, k, q^m - k + 2]$ cyclic MDS code over GF($q^m$). If $q^m$ is even, any value of $k$ can be used, otherwise only odd value of $k$ is accepted. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=CyclicMDSCode(2,6,24);
+  a cyclic [65,24,42]31..41 MDS code over GF(64)
+  gap> IsMDSCode(C);
+  true
+  gap> C:=CyclicMDSCode(5,3,77);
+  a cyclic [126,77,50]35..49 MDS code over GF(125)
+  gap> IsMDSCode(C);
+  true
+  gap> C:=CyclicMDSCode(3,3,25);
+  a cyclic [28,25,4]2..3 MDS code over GF(27)
+  gap> GeneratorPol(C);
+  x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
+  gap>
+\end{Verbatim}
+  \index{MDS} \index{cyclic} 
+
+\subsection{\textcolor{Chapter }{FourNegacirculantSelfDualCode}}
+\logpage{[ 5, 5, 18 ]}\nobreak
+\hyperdef{L}{X7F40AF3B81C252DC}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FourNegacirculantSelfDualCode({\slshape ax, bx, k})\index{FourNegacirculantSelfDualCode@\texttt{FourNegacirculantSelfDualCode}}
+\label{FourNegacirculantSelfDualCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ A four-negacirculant self-dual code has a generator matrix $G$ of the the following form 
+\begin{verbatim}  
+      -                    -
+      |        |  A  |  B  |
+  G = |  I_2k  |-----+-----|
+      |        | -B^T| A^T |
+      -                    -
+  		
+\end{verbatim}
+ where $AA^T + BB^T = -I_k$ and $A$, $B$ and their transposed are all $k \times k$ negacirculant matrices. The generator matrix $G$ returns a $[2k, k, d]_q$ self-dual code over GF($q$). For discussion on four-negacirculant self-dual codes, refer to \cite{HHKK07}. 
+
+ The input parameters \mbox{\texttt{\slshape ax}} and \mbox{\texttt{\slshape bx}} are the defining polynomials over GF($q$) of negacirculant matrices $A$ and $B$ respectively. The last parameter \mbox{\texttt{\slshape k}} is the dimension of the code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
+  -x_1^4-x_1+Z(3)^0
+  gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
+  x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
+  gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+  gap> MinimumDistance(C);;
+  gap> CoveringRadius(C);;
+  gap> IsSelfDualCode(C);
+  true
+  gap> Display(C);
+  a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
+  gap> Display( GeneratorMat(C) );
+   1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
+   . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
+   . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
+   . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
+   . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
+   . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
+   . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
+   . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
+   . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
+   . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
+   . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
+   . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
+   . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
+   . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
+  gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
+  x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
+  gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
+  Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
+  gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+  a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
+  gap> IsSelfDualCode(C);
+  true
+\end{Verbatim}
+  \index{self-dual} 
+
+\subsection{\textcolor{Chapter }{FourNegacirculantSelfDualCodeNC}}
+\logpage{[ 5, 5, 19 ]}\nobreak
+\hyperdef{L}{X87137A257E761291}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FourNegacirculantSelfDualCodeNC({\slshape ax, bx, k})\index{FourNegacirculantSelfDualCodeNC@\texttt{FourNegacirculantSelfDualCodeNC}}
+\label{FourNegacirculantSelfDualCodeNC}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function is the same as \texttt{FourNegacirculantSelfDualCode}, except this version is faster as it does not estimate the minimum distance
+and covering radius of the code. }
+
+ }
+
+ 
+\section{\textcolor{Chapter }{ Evaluation Codes }}\logpage{[ 5, 6, 0 ]}
+\hyperdef{L}{X850A28C579137220}{}
+{
+  \label{Evaluation Codes} \index{code, evaluation} 
+
+\subsection{\textcolor{Chapter }{EvaluationCode}}
+\logpage{[ 5, 6, 1 ]}\nobreak
+\hyperdef{L}{X78E078567D19D433}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationCode({\slshape P, L, R})\index{EvaluationCode@\texttt{EvaluationCode}}
+\label{EvaluationCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape L}} is a list of rational functions in $R=F[x_1,...,x_r]$, \mbox{\texttt{\slshape P}} is a list of $n$ points in $F^r$ at which all of the functions in \mbox{\texttt{\slshape L}} are defined. \\
+ Output: The 'evaluation code' $C$, which is the image of the evalation map 
+\[ Eval_P:span(L)\rightarrow F^n, \]
+ given by $f\longmapsto (f(p_1),...,f(p_n))$, where $P=\{p_1,...,p_n\}$ and $f \in L$. The generator matrix of $C$ is $G=(f_i(p_j))_{f_i\in L,p_j\in P}$. 
+
+ This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.EvaluationMat} (not the same as the generator matrix in general), \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.basis} (namely \mbox{\texttt{\slshape L}}), and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R := PolynomialRing(F,2);;
+  gap> indets := IndeterminatesOfPolynomialRing(R);;
+  gap> x:=indets[1];; y:=indets[2];;
+  gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+  gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+     [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+     [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+     [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+  gap> C:=EvaluationCode(Pts,L,R);
+  a linear [11,8,1..3]2..3  evaluation code over GF(11)
+  gap> MinimumDistance(C);
+  3
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneralizedReedSolomonCode}}
+\logpage{[ 5, 6, 2 ]}\nobreak
+\hyperdef{L}{X810AB3DB844FFCE9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonCode({\slshape P, k, R})\index{GeneralizedReedSolomonCode@\texttt{GeneralizedReedSolomonCode}}
+\label{GeneralizedReedSolomonCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: R=F[x], where \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape k}} is a positive integer, \mbox{\texttt{\slshape P}} is a list of $n$ points in $F$. \\
+ Output: The $C$ which is the image of the evaluation map 
+\[ Eval_P:F[x]_k\rightarrow F^n, \]
+ given by $f\longmapsto (f(p_1),...,f(p_n))$, where $P=\{p_1,...,p_n\}\subset F$ and $f$ ranges over the space $F[x]_k$ of all polynomials of degree less than $k$. 
+
+ This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.degree} (namely \mbox{\texttt{\slshape k}}), and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). 
+
+ This code can be decoded using \texttt{Decodeword}, which applies the special decoder method (the interpolation method), or
+using \texttt{GeneralizedReedSolomonDecoderGao} which applies an algorithm of S. Gao (see \texttt{GeneralizedReedSolomonDecoderGao} (\ref{GeneralizedReedSolomonDecoderGao})). This code has a special decoder record which implements the interpolation
+algorithm described in section 5.2 of Justesen and Hoholdt \cite{JH04}. See \texttt{Decode} (\ref{Decode}) and \texttt{Decodeword} (\ref{Decodeword}) for more details. 
+
+ The weighted version has implemented with the option \texttt{GeneralizedReedSolomonCode(P,k,R,wts)}, where $wts = [v_1, ..., v_n]$ is a sequence of $n$ non-zero elements from the base field $F$ of \mbox{\texttt{\slshape R}}. See also the generalized Reed--Solomon code $GRS_k(P, V)$ described in \cite{MS83}, p.303. 
+
+ The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of \cite{JH04}) has been implemented for generalized Reed-Solomon codes. See \texttt{GeneralizedReedSolomonListDecoder} (\ref{GeneralizedReedSolomonListDecoder}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R:=PolynomialRing(GF(11),["t"]);
+  GF(11)[t]
+  gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+  [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+  gap> C:=GeneralizedReedSolomonCode(P,3,R);
+  a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+  gap> MinimumDistance(C);
+  3
+  gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+  [ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
+  gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
+  a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
+  gap> MinimumDistance(C);
+  3
+\end{Verbatim}
+  See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. 
+
+\subsection{\textcolor{Chapter }{GeneralizedReedMullerCode}}
+\logpage{[ 5, 6, 3 ]}\nobreak
+\hyperdef{L}{X85B8699680B9D786}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedMullerCode({\slshape Pts, r, F})\index{GeneralizedReedMullerCode@\texttt{GeneralizedReedMullerCode}}
+\label{GeneralizedReedMullerCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralizedReedMullerCode} returns a 'Reed-Muller code' $C$ with length $|Pts|$ and order $r$. One considers (a) a basis of monomials for the vector space over $F=GF(q)$ of all polynomials in $F[x_1,...,x_d]$ of degree at most $r$, and (b) a set $Pts$ of points in $F^d$. The generator matrix of the associated \emph{Reed-Muller code} $C$ is $G=(f(p))_{f\in B,p \in Pts}$. This code $C$ is constructed using the command \texttt{GeneralizedReedMullerCode(Pts,r,F)}. When $Pts$ is the  [...]
+
+ This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape Pts}}) and \texttt{C!.degree} (namely \mbox{\texttt{\slshape r}}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Pts:=ToricPoints(2,GF(5));
+  [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
+    [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
+    [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
+    [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+  gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
+  a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)
+\end{Verbatim}
+ See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. 
+
+\subsection{\textcolor{Chapter }{ToricPoints}}
+\logpage{[ 5, 6, 4 ]}\nobreak
+\hyperdef{L}{X7EE68B58872D7E82}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ToricPoints({\slshape n, F})\index{ToricPoints@\texttt{ToricPoints}}
+\label{ToricPoints}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ToricPoints(n,F)} returns the points in $(F^{\times})^n$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> ToricPoints(2,GF(5));
+  [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
+    [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
+    [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
+    [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
+    [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+\end{Verbatim}
+  \index{code, toric} 
+
+\subsection{\textcolor{Chapter }{ToricCode}}
+\logpage{[ 5, 6, 5 ]}\nobreak
+\hyperdef{L}{X7B24BE418010F596}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ToricCode({\slshape L, F})\index{ToricCode@\texttt{ToricCode}}
+\label{ToricCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function returns the toric codes as in D. Joyner \cite{Jo04} (see also J. P. Hansen \cite{Han99}). This is a truncated (generalized) Reed-Muller code. Here \mbox{\texttt{\slshape L}} is a list of integral vectors and \mbox{\texttt{\slshape F}} is the finite field. The size of \mbox{\texttt{\slshape F}} must be different from $2$. 
+
+ This command returns a record object \texttt{C} with an extra component (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.exponents} (namely \mbox{\texttt{\slshape L}}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=ToricCode([[1,0],[3,4]],GF(3));
+  a linear [4,1,4]2 toric code over GF(3)
+  gap> Display(GeneratorMat(C));
+   1 1 2 2
+  gap> Elements(C);
+  [ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]
+\end{Verbatim}
+  See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. }
+
+ 
+\section{\textcolor{Chapter }{ Algebraic geometric codes }}\logpage{[ 5, 7, 0 ]}
+\hyperdef{L}{X7AE2B2CD7C647990}{}
+{
+  \label{Algebraic geometric codes} \index{code, AG} Certain \textsf{GUAVA} functions related to algebraic geometric codes are described in this section. 
+
+\subsection{\textcolor{Chapter }{AffineCurve}}
+\logpage{[ 5, 7, 1 ]}\nobreak
+\hyperdef{L}{X802DD9FB79A9ACA7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AffineCurve({\slshape poly, ring})\index{AffineCurve@\texttt{AffineCurve}}
+\label{AffineCurve}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function simply defines the data structure of an affine plane curve. In \textsf{GUAVA}, an affine curve is a record \mbox{\texttt{\slshape crv}} having two components: a polynomial \mbox{\texttt{\slshape poly}}, accessed in \textsf{GUAVA} by \mbox{\texttt{\slshape crv.polynomial}}, and a polynomial ring over a field $F$ in two variables \mbox{\texttt{\slshape ring}}, accessed in \textsf{GUAVA} by \mbox{\texttt{\slshape crv.ring}}, containing \mbox{\texttt{\slshape poly}}. You use t [...]
+
+ For example, for the ring, one could take ${\mathbb{Q}}[x,y]$, and for the polynomial one could take $f(x,y)=x^2+y^2-1$. For the affine line, simply taking ${\mathbb{Q}}[x,y]$ for the ring and $f(x,y)=y$ for the polynomial. 
+
+ (Not sure if $F$ neeeds to be a field in fact ...) 
+
+ To compute its degree, simply use the \texttt{DegreeMultivariatePolynomial} (\ref{DegreeMultivariatePolynomial}) command. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap>
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);
+  PolynomialRing(..., [ x_1, x_2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> x:=vars[1];; y:=vars[2];;
+  gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
+  gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+  1
+  gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
+  gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+  3
+  gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
+  gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+  2
+  gap> q:=3;;
+  gap> F:=GF(q^2);;
+  gap> R:=PolynomialRing(F,2);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R);
+  [ x_1, x_2 ]
+  gap> x:=vars[1];
+  x_1
+  gap> y:=vars[2];
+  x_2
+  gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
+  gap>
+\end{Verbatim}
+  In GAP, a \emph{point} \index{point} on a curve defined by $f(x,y)=0$ is simply a list \mbox{\texttt{\slshape [a,b]}} of elements of $F$ satisfying this polynomial equation. 
+
+\subsection{\textcolor{Chapter }{AffinePointsOnCurve}}
+\logpage{[ 5, 7, 2 ]}\nobreak
+\hyperdef{L}{X857EFE567C05C981}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AffinePointsOnCurve({\slshape f, R, E})\index{AffinePointsOnCurve@\texttt{AffinePointsOnCurve}}
+\label{AffinePointsOnCurve}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AffinePointsOnCurve(f,R,E)} returns the points $(x,y) \in E^2$ satisying $f(x,y)=0$, where \mbox{\texttt{\slshape f}} is an element of $R=F[x,y]$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R := PolynomialRing(F,["x","y"]);
+  PolynomialRing(..., [ x, y ])
+  gap> indets := IndeterminatesOfPolynomialRing(R);;
+  gap> x:=indets[1];; y:=indets[2];;
+  gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+  [ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
+    [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
+    [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+    [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GenusCurve}}
+\logpage{[ 5, 7, 3 ]}\nobreak
+\hyperdef{L}{X857E36ED814A40B8}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GenusCurve({\slshape crv})\index{GenusCurve@\texttt{GenusCurve}}
+\label{GenusCurve}
+}\hfill{\scriptsize (function)}}\\
+
+
+ If \mbox{\texttt{\slshape crv}} represents $f(x,y)=0$, where $f$ is a polynomial of degree $d$, then this function simply returns $(d-1)(d-2)/2$. At the present, the function does not check if the curve is singular (in
+which case the result may be false). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> q:=4;;
+  gap> F:=GF(q^2);;
+  gap> a:=X(F);;
+  gap> R1:=PolynomialRing(F,[a]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);;
+  gap> b:=X(F);;
+  gap> R2:=PolynomialRing(F,[a,b]);;
+  gap> var2:=IndeterminatesOfPolynomialRing(R2);;
+  gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
+  gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
+  rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
+  gap> GenusCurve(crv);
+  36
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{GOrbitPoint }}
+\logpage{[ 5, 7, 4 ]}\nobreak
+\hyperdef{L}{X8572A3037DA66F88}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GOrbitPoint ({\slshape GP})\index{GOrbitPoint @\texttt{GOrbitPoint }}
+\label{GOrbitPoint }
+}\hfill{\scriptsize (function)}}\\
+
+
+ \mbox{\texttt{\slshape P}} must be a point in projective space $\mathbb{P}^n(F)$, \mbox{\texttt{\slshape G}} must be a finite subgroup of $GL(n+1,F)$, This function returns all (representatives of projective) points in the
+orbit $G\cdot P$. 
+
+ The example below computes the orbit of the automorphism group on the Klein
+quartic over the field $GF(43)$ on the ``point at infinity''. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R:= PolynomialRing( GF(43), 3 );;
+  gap> vars:= IndeterminatesOfPolynomialRing(R);;
+  gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
+  gap> zz:=Z(43)^6;
+  Z(43)^6
+  gap> zzz:=Z(43);
+  Z(43)
+  gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
+  [ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
+  [ 0*Z(43), Z(43)^12, 0*Z(43) ], 
+  [ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
+  gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
+  [ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+  [ 0*Z(43), 0*Z(43), Z(43)^0 ], 
+  [ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
+  gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
+  >             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
+  >             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
+  [ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
+  [ Z(43)^28, Z(43)^12, Z(43)^9 ], 
+  [ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
+  gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
+  gap> Size(G);
+  168
+  gap> P:=[1,0,0]*zzz^0;
+  [ Z(43)^0, 0*Z(43), 0*Z(43) ]
+  gap> O:=GOrbitPoint(G,P);
+  [ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+  [ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
+  [ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
+  [ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
+  [ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
+  [ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
+  [ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
+  [ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
+  [ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
+  [ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
+  [ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
+  [ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
+  gap> Length(O);
+  24
+  
+\end{Verbatim}
+ Informally, a \emph{divisor} \index{divisor} on a curve is a formal integer linear combination of points on the curve, $D=m_1P_1+...+m_kP_k$, where the $m_i$ are integers (the ``multiplicity'' of $P_i$ in $D$) and $P_i$ are ($F$-rational) points on the affine plane curve. In other words, a divisor is an
+element of the free abelian group generated by the $F$-rational affine points on the curve. The \emph{support} \index{support} of a divisor $D$ is simply the set of points which occurs in the sum defining $D$ with non-zero ``multiplicity''. The data structure for a divisor on an affine
+plane curve is a record having the following components: 
+\begin{itemize}
+\item  the coefficients (the integer weights of the points in the support), 
+\item  the support, 
+\item  the curve, itself a record which has components: polynomial and polynomial
+ring. 
+\end{itemize}
+ 
+
+ 
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorOnAffineCurve}}
+\logpage{[ 5, 7, 5 ]}\nobreak
+\hyperdef{L}{X79742B7183051D99}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorOnAffineCurve({\slshape cdivsdivcrv})\index{DivisorOnAffineCurve@\texttt{DivisorOnAffineCurve}}
+\label{DivisorOnAffineCurve}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This is the command you use to define a divisor in \textsf{GUAVA}. Of course, \mbox{\texttt{\slshape crv}} is the curve on which the divisor lives, \mbox{\texttt{\slshape cdiv}} is the list of coefficients (or ``multiplicities''), \mbox{\texttt{\slshape sdiv}} is the list of points on \mbox{\texttt{\slshape crv}} in the support. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> q:=5;
+  5
+  gap> F:=GF(q);
+  GF(5)
+  gap> R:=PolynomialRing(F,2);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R);
+  [ x_1, x_2 ]
+  gap> x:=vars[1];
+  x_1
+  gap> y:=vars[2];
+  x_2
+  gap> crv:=AffineCurve(y^3-x^3-x-1,R);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+       polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
+  gap> Pts:=AffinePointsOnCurve(crv,R,F);;
+  gap> supp:=[Pts[1],Pts[2]];
+  [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
+  gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
+  rec( coeffs := [ 1, -1 ], 
+       support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
+       curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+                     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )
+  
+\end{Verbatim}
+  }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorAddition }}
+\logpage{[ 5, 7, 6 ]}\nobreak
+\hyperdef{L}{X8626E2B57D01F2DC}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorAddition ({\slshape D1D2})\index{DivisorAddition @\texttt{DivisorAddition }}
+\label{DivisorAddition }
+}\hfill{\scriptsize (function)}}\\
+
+
+ If $D_1=m_1P_1+...+m_kP_k$ and $D_2=n_1P_1+...+n_kP_k$ are divisors then $D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k$. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorDegree }}
+\logpage{[ 5, 7, 7 ]}\nobreak
+\hyperdef{L}{X865FE28D828C1EAD}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorDegree ({\slshape D})\index{DivisorDegree @\texttt{DivisorDegree }}
+\label{DivisorDegree }
+}\hfill{\scriptsize (function)}}\\
+
+
+ If $D=m_1P_1+...+m_kP_k$ is a divisor then the \emph{degree} \index{degree} is $m_1+...+m_k$. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorNegate }}
+\logpage{[ 5, 7, 8 ]}\nobreak
+\hyperdef{L}{X789DC358819A8F54}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorNegate ({\slshape D})\index{DivisorNegate @\texttt{DivisorNegate }}
+\label{DivisorNegate }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Self-explanatory. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorIsZero }}
+\logpage{[ 5, 7, 9 ]}\nobreak
+\hyperdef{L}{X8688C0E187B5C7DB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorIsZero ({\slshape D})\index{DivisorIsZero @\texttt{DivisorIsZero }}
+\label{DivisorIsZero }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Self-explanatory. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorsEqual }}
+\logpage{[ 5, 7, 10 ]}\nobreak
+\hyperdef{L}{X816A07997D9A7075}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorsEqual ({\slshape D1D2})\index{DivisorsEqual @\texttt{DivisorsEqual }}
+\label{DivisorsEqual }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Self-explanatory. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorGCD }}
+\logpage{[ 5, 7, 11 ]}\nobreak
+\hyperdef{L}{X857B89847A649A26}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorGCD ({\slshape D1D2})\index{DivisorGCD @\texttt{DivisorGCD }}
+\label{DivisorGCD }
+}\hfill{\scriptsize (function)}}\\
+
+
+ If $m=p_1^{e_1}...p_k^{e_k}$ and $n=p_1^{f_1}...p_k^{f_k}$ are two integers then their greatest common divisor is $GCD(m,n)=p_1^{min(e_1,f_1)}...p_k^{min(e_k,f_k)}$. A similar definition works for two divisors on a curve. If $D_1=e_1P_1+...+e_kP_k$ and $D_2n=f_1P_1+...+f_kP_k$ are two divisors on a curve then their \emph{greatest common divisor} \index{greatest common divisor} is $GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k$. This function computes this quantity. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorLCM }}
+\logpage{[ 5, 7, 12 ]}\nobreak
+\hyperdef{L}{X82231CF08073695F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorLCM ({\slshape D1D2})\index{DivisorLCM @\texttt{DivisorLCM }}
+\label{DivisorLCM }
+}\hfill{\scriptsize (function)}}\\
+
+
+ If $m=p_1^{e_1}...p_k^{e_k}$ and $n=p_1^{f_1}...p_k^{f_k}$ are two integers then their least common multiple is $LCM(m,n)=p_1^{max(e_1,f_1)}...p_k^{max(e_k,f_k)}$. A similar definition works for two divisors on a curve. If $D_1=e_1P_1+...+e_kP_k$ and $D_2=f_1P_1+...+f_kP_k$ are two divisors on a curve then their \emph{least common multiple} \index{least common multiple} is $LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k$. This function computes this quantity. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> crvP1:=AffineCurve(b,R2);
+  rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+  gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> DivisorDegree(div1);
+  10
+  gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> DivisorDegree(div2);
+  10
+  gap> div3:=DivisorAddition(div1,div2);
+  rec( coeffs := [ 5, 3, 5, 4, 3 ], 
+       support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> DivisorDegree(div3);
+  20
+  gap> DivisorIsEffective(div1);
+  true
+  gap> DivisorIsEffective(div2);
+  true
+  gap>
+  gap> ndiv1:=DivisorNegate(div1);
+  rec( coeffs := [ -1, -2, -3, -4 ], 
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> zdiv:=DivisorAddition(div1,ndiv1);
+  rec( coeffs := [ 0, 0, 0, 0 ], 
+       support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> DivisorIsZero(zdiv);
+  true
+  gap> div_gcd:=DivisorGCD(div1,div2);
+  rec( coeffs := [ 1, 1, 2, 0, 0 ], 
+       support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> div_lcm:=DivisorLCM(div1,div2);
+  rec( coeffs := [ 4, 2, 3, 4, 3 ], 
+       support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> DivisorDegree(div_gcd);
+  4
+  gap> DivisorDegree(div_lcm);
+  16
+  gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+  true
+  
+\end{Verbatim}
+  }
+
+ Let $G$ denote a finite subgroup of $PGL(2,F)$ and let $D$ denote a divisor on the projective line $\mathbb{P}^1(F)$. If $G$ leaves $D$ unchanged (it may permute the points in the support of $D$ but must preserve their sum in $D$) then the Riemann-Roch space $L(D)$ is a $G$-module. The commands in this section help explore the $G$-module structure of $L(D)$ in the case then the ground field $F$ is finite. 
+
+ 
+
+\subsection{\textcolor{Chapter }{RiemannRochSpaceBasisFunctionP1 }}
+\logpage{[ 5, 7, 13 ]}\nobreak
+\hyperdef{L}{X79C878697F99A10F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RiemannRochSpaceBasisFunctionP1 ({\slshape PkR2})\index{RiemannRochSpaceBasisFunctionP1 @\texttt{RiemannRochSpaceBasisFunctionP1 }}
+\label{RiemannRochSpaceBasisFunctionP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \mbox{\texttt{\slshape R2}} is a polynomial ring in two variables, say $F[x,y]$; \mbox{\texttt{\slshape P}} is an element of the base field, say $F$; \mbox{\texttt{\slshape k}} is an integer. Output: $1/(x-P)^k$ }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorOfRationalFunctionP1 }}
+\logpage{[ 5, 7, 14 ]}\nobreak
+\hyperdef{L}{X856DDA207EDDF256}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorOfRationalFunctionP1 ({\slshape f, R})\index{DivisorOfRationalFunctionP1 @\texttt{DivisorOfRationalFunctionP1 }}
+\label{DivisorOfRationalFunctionP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Here $R = F[x,y]$ is a polynomial ring in the variables $x,y$ and $f$ is a rational function of $x$. Simply returns the principal divisor on ${\mathbb{P}}^1$ associated to $f$. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> pt:=Z(11);
+  Z(11)
+  gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+  (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
+  gap> Df:=DivisorOfRationalFunctionP1(f,R2);
+  rec( coeffs := [ -2 ], support := [ Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
+     )
+  gap> Df.support;
+  [ Z(11) ]
+  gap> F:=GF(11);;
+  gap> R:=PolynomialRing(F,2);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R);;
+  gap> a:=vars[1];;
+  gap> b:=vars[2];;
+  gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+  gap> divf:=DivisorOfRationalFunctionP1(f,R);
+  rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
+    curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
+  gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+  a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
+  [  ]
+  gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+  a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
+  [ Z(11)^7, Z(11), Z(11), Z(11) ]
+  
+\end{Verbatim}
+  }
+
+ 
+
+\subsection{\textcolor{Chapter }{RiemannRochSpaceBasisP1 }}
+\logpage{[ 5, 7, 15 ]}\nobreak
+\hyperdef{L}{X878970A17E580224}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RiemannRochSpaceBasisP1 ({\slshape D})\index{RiemannRochSpaceBasisP1 @\texttt{RiemannRochSpaceBasisP1 }}
+\label{RiemannRochSpaceBasisP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ This returns the basis of the Riemann-Roch space $L(D)$ associated to the divisor \mbox{\texttt{\slshape D}} on the projective line ${\mathbb{P}}^1$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> crvP1:=AffineCurve(b,R2);
+  rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+  gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> B:=RiemannRochSpaceBasisP1(D);
+  [ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
+  (Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
+  (Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
+    (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
+  (Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
+  (Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
+  gap> DivisorOfRationalFunctionP1(B[1],R2).support;
+  [  ]
+  gap> DivisorOfRationalFunctionP1(B[2],R2).support;
+  [ Z(11)^2 ]
+  gap> DivisorOfRationalFunctionP1(B[3],R2).support;
+  [ Z(11)^3 ]
+  gap> DivisorOfRationalFunctionP1(B[4],R2).support;
+  [ Z(11)^3 ]
+  gap> DivisorOfRationalFunctionP1(B[5],R2).support;
+  [ Z(11)^7 ]
+  gap> DivisorOfRationalFunctionP1(B[6],R2).support;
+  [ Z(11)^7 ]
+  gap> DivisorOfRationalFunctionP1(B[7],R2).support;
+  [ Z(11)^7 ]
+  gap> DivisorOfRationalFunctionP1(B[8],R2).support;
+  [ Z(11) ]
+  gap> DivisorOfRationalFunctionP1(B[9],R2).support;
+  [ Z(11) ]
+  gap> DivisorOfRationalFunctionP1(B[10],R2).support;
+  [ Z(11) ]
+  gap> DivisorOfRationalFunctionP1(B[11],R2).support;
+  [ Z(11) ]
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MoebiusTransformation }}
+\logpage{[ 5, 7, 16 ]}\nobreak
+\hyperdef{L}{X807C52E67A440DEB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MoebiusTransformation ({\slshape AR})\index{MoebiusTransformation @\texttt{MoebiusTransformation }}
+\label{MoebiusTransformation }
+}\hfill{\scriptsize (function)}}\\
+
+
+ The arguments are a $2\times 2$ matrix $A$ with entries in a field $F$ and a polynomial ring \mbox{\texttt{\slshape R}}of one variable, say $F[x]$. This function returns the linear fractional transformatio associated to \mbox{\texttt{\slshape A}}. These transformations can be composed with each other using GAP's \texttt{Value} command. }
+
+ 
+
+\subsection{\textcolor{Chapter }{ActionMoebiusTransformationOnFunction }}
+\logpage{[ 5, 7, 17 ]}\nobreak
+\hyperdef{L}{X85A0419580ED0391}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ActionMoebiusTransformationOnFunction ({\slshape AfR2})\index{ActionMoebiusTransformationOnFunction @\texttt{ActionMoebiusTransformationOnFunction }}
+\label{ActionMoebiusTransformationOnFunction }
+}\hfill{\scriptsize (function)}}\\
+
+
+ The arguments are a $2\times 2$ matrix $A$ with entries in a field $F$, a rational function \mbox{\texttt{\slshape f}} of one variable, say in $F(x)$, and a polynomial ring \mbox{\texttt{\slshape R2}}, say $F[x,y]$. This function simply returns the composition of the function \mbox{\texttt{\slshape f}} with the M{\"o}bius transformation of \mbox{\texttt{\slshape A}}. }
+
+ 
+
+\subsection{\textcolor{Chapter }{ActionMoebiusTransformationOnDivisorP1 }}
+\logpage{[ 5, 7, 18 ]}\nobreak
+\hyperdef{L}{X7E48F9C67E7FB7B5}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ActionMoebiusTransformationOnDivisorP1 ({\slshape AD})\index{ActionMoebiusTransformationOnDivisorP1 @\texttt{ActionMoebiusTransformationOnDivisorP1 }}
+\label{ActionMoebiusTransformationOnDivisorP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ A M{\"o}bius transformation may be regarded as an automorphism of the
+projective line $\mathbb{P}^1$. This function simply returns the image of the divisor \mbox{\texttt{\slshape D}} under the M{\"o}bius transformation defined by \mbox{\texttt{\slshape A}}, provided that \texttt{IsActionMoebiusTransformationOnDivisorDefinedP1(A,D)} returns true. }
+
+ 
+
+\subsection{\textcolor{Chapter }{IsActionMoebiusTransformationOnDivisorDefinedP1 }}
+\logpage{[ 5, 7, 19 ]}\nobreak
+\hyperdef{L}{X79FD980E7B24DB9C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsActionMoebiusTransformationOnDivisorDefinedP1 ({\slshape AD})\index{IsActionMoebiusTransformationOnDivisorDefinedP1 @\texttt{IsAction}\-\texttt{Moebius}\-\texttt{Transformation}\-\texttt{On}\-\texttt{Divisor}\-\texttt{DefinedP1 }}
+\label{IsActionMoebiusTransformationOnDivisorDefinedP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Returns true of none of the points in the support of the divisor \mbox{\texttt{\slshape D}} is the pole of the M{\"o}bius transformation. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> crvP1:=AffineCurve(b,R2);
+  rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+  gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> A:=Z(11)^0*[[1,2],[1,4]];
+  [ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
+  gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+  false
+  gap> A:=Z(11)^0*[[1,2],[3,4]];
+  [ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
+  gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+  true
+  gap> ActionMoebiusTransformationOnDivisorP1(A,D);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> f:=MoebiusTransformation(A,R1);
+  (a+Z(11))/(Z(11)^8*a+Z(11)^2)
+  gap> ActionMoebiusTransformationOnFunction(A,f,R1);
+  -Z(11)^0+Z(11)^3*a^-1
+  
+\end{Verbatim}
+  }
+
+ 
+
+\subsection{\textcolor{Chapter }{DivisorAutomorphismGroupP1 }}
+\logpage{[ 5, 7, 20 ]}\nobreak
+\hyperdef{L}{X823386037F450B0E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorAutomorphismGroupP1 ({\slshape D})\index{DivisorAutomorphismGroupP1 @\texttt{DivisorAutomorphismGroupP1 }}
+\label{DivisorAutomorphismGroupP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: A divisor \mbox{\texttt{\slshape D}} on $\mathbb{P}^1(F)$, where $F$ is a finite field. Output: A subgroup $Aut(D)\subset Aut(\mathbb{P}^1)$ preserving \mbox{\texttt{\slshape D}}. 
+
+ Very slow. 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> crvP1:=AffineCurve(b,R2);
+  rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+  gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+  rec( coeffs := [ 1, 2, 3, 4 ], 
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+  7305
+  gap> IdGroup(agp);
+  [ 10, 2 ]
+  
+\end{Verbatim}
+  }
+
+ 
+
+\subsection{\textcolor{Chapter }{MatrixRepresentationOnRiemannRochSpaceP1 }}
+\logpage{[ 5, 7, 21 ]}\nobreak
+\hyperdef{L}{X80EDF3D682E7EF3F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixRepresentationOnRiemannRochSpaceP1 ({\slshape gD})\index{MatrixRepresentationOnRiemannRochSpaceP1 @\texttt{Matrix}\-\texttt{Representation}\-\texttt{On}\-\texttt{Riemann}\-\texttt{Roch}\-\texttt{SpaceP1 }}
+\label{MatrixRepresentationOnRiemannRochSpaceP1 }
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: An element \mbox{\texttt{\slshape g}} in $G$, a subgroup of $Aut(D)\subset Aut(\mathbb{P}^1)$, and a divisor \mbox{\texttt{\slshape D}} on $\mathbb{P}^1(F)$, where $F$ is a finite field. Output: a $d\times d$ matrix, where $d = dim\, L(D)$, representing the action of \mbox{\texttt{\slshape g}} on $L(D)$. 
+
+ Note: \mbox{\texttt{\slshape g}} sends $L(D)$ to $r\cdot L(D)$, where $r$ is a polynomial of degree $1$ depending on \mbox{\texttt{\slshape g}} and \mbox{\texttt{\slshape D}}. 
+
+ Also very slow. 
+
+ The GAP command \texttt{BrauerCharacterValue} can be used to ``lift'' the eigenvalues of this matrix to the complex numbers. 
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> crvP1:=AffineCurve(b,R2);
+  rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+  gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+  rec( coeffs := [ 1, 1, 1, 4 ],  
+       support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+       curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+  gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+  7198
+  gap> IdGroup(agp);
+  [ 20, 5 ]
+  gap> g:=Random(agp);
+  [ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
+  gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+  [ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+  [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+    [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+  [ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+    [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
+  [ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
+    [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
+  [ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
+  gap> Display(rho);
+    1  .  .  .  .  .  .  .
+    1  .  .  2  .  .  .  .
+    7  . 10  .  .  .  .  .
+    5  6  .  .  .  .  .  .
+    4  .  .  . 10  .  .  .
+    5  .  .  .  3  1  .  .
+    9  .  .  .  7  1 10  .
+    3  .  .  .  8  8  6  1
+  
+\end{Verbatim}
+ }
+
+   
+
+\subsection{\textcolor{Chapter }{GoppaCodeClassical}}
+\logpage{[ 5, 7, 22 ]}\nobreak
+\hyperdef{L}{X8777388C7885E335}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GoppaCodeClassical({\slshape div, pts})\index{GoppaCodeClassical@\texttt{GoppaCodeClassical}}
+\label{GoppaCodeClassical}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: A divisor \mbox{\texttt{\slshape div}} on the projective line ${\mathbb{P}}^1(F)$ over a finite field $F$ and a list \mbox{\texttt{\slshape pts}} of points $\{P_1,...,P_n\}\subset F$ disjoint from the support of \mbox{\texttt{\slshape div}}. \\
+ Output: The classical (evaluation) Goppa code associated to this data. This is
+the code 
+\[ C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}. \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> a:=vars[1];;b:=vars[2];;
+  gap> cdiv:=[ 1, 2, -1, -2 ];
+  [ 1, 2, -1, -2 ]
+  gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+  [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
+  gap> crv:=rec(polynomial:=b,ring:=R2);
+  rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
+  gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+  rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
+    curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
+  gap> pts:=Difference(Elements(GF(11)),div.support);
+  [ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
+  gap> C:=GoppaCodeClassical(div,pts);
+  a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
+  gap> MinimumDistance(C);
+  6
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{EvaluationBivariateCode}}
+\logpage{[ 5, 7, 23 ]}\nobreak
+\hyperdef{L}{X8422A310854C09B0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationBivariateCode({\slshape pts, L, crv})\index{EvaluationBivariateCode@\texttt{EvaluationBivariateCode}}
+\label{EvaluationBivariateCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \texttt{pts} is a set of affine points on \texttt{crv}, \texttt{L} is a list of rational functions on \texttt{crv}. \\
+ Output: The evaluation code associated to the points in \texttt{pts} and functions in \texttt{L}, but specifically for affine plane curves and this function checks if points
+are ``bad" (if so removes them from the list \texttt{pts} automatically). A point is ``bad'' if either it does not lie on the set of
+non-singular $F$-rational points (places of degree 1) on the curve. 
+
+ Very similar to \texttt{EvaluationCode} (see \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction). }
+
+ 
+
+\subsection{\textcolor{Chapter }{EvaluationBivariateCodeNC}}
+\logpage{[ 5, 7, 24 ]}\nobreak
+\hyperdef{L}{X7B6C2BED8319C811}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationBivariateCodeNC({\slshape pts, L, crv})\index{EvaluationBivariateCodeNC@\texttt{EvaluationBivariateCodeNC}}
+\label{EvaluationBivariateCodeNC}
+}\hfill{\scriptsize (function)}}\\
+
+
+ As in \texttt{EvaluationBivariateCode} but does not check if the points are ``bad''. 
+
+ Input: \texttt{pts} is a set of affine points on \texttt{crv}, \texttt{L} is a list of rational functions on \texttt{crv}. \\
+ Output: The evaluation code associated to the points in \texttt{pts} and functions in \texttt{L}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> q:=4;;
+  gap> F:=GF(q^2);;
+  gap> R:=PolynomialRing(F,2);;
+  gap> vars:=IndeterminatesOfPolynomialRing(R);;
+  gap> x:=vars[1];;
+  gap> y:=vars[2];;
+  gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+  rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
+  gap> L:=[ x^0, x, x^2*y^-1 ];
+  [ Z(2)^0, x_1, x_1^2/x_2 ]
+  gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+  gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;
+  
+  
+   Automatically removed the following 'bad' points (either a pole or not 
+   on the curve):
+  [ [ 0*Z(2), 0*Z(2) ] ]
+  
+  a linear [63,3,1..60]51..59  evaluation code over GF(16)
+  52
+  gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+  gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+  a linear [63,3,1..60]51..59  evaluation code over GF(16)
+  48
+  gap> C3:=EvaluationCode(P,L,R); time;
+  a linear [63,3,1..56]51..59  evaluation code over GF(16)
+  58
+  gap> MinimumDistance(C1);
+  56
+  gap> MinimumDistance(C2);
+  56
+  gap> MinimumDistance(C3);
+  56
+  gap>
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{OnePointAGCode}}
+\logpage{[ 5, 7, 25 ]}\nobreak
+\hyperdef{L}{X842E227E8785168E}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OnePointAGCode({\slshape f, P, m, R})\index{OnePointAGCode@\texttt{OnePointAGCode}}
+\label{OnePointAGCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \mbox{\texttt{\slshape f}} is a polynomial in R=F[x,y], where \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape m}} is a positive integer (the multiplicity of the `point at infinity' $\infty$ on the curve $f(x,y)=0$), \mbox{\texttt{\slshape P}} is a list of $n$ points on the curve over $F$. \\
+ Output: The $C$ which is the image of the evaluation map 
+\[ Eval_P:L(m \cdot \infty)\rightarrow F^n, \]
+ given by $f\longmapsto (f(p_1),...,f(p_n))$, where $p_i \in P$. Here $L(m \cdot \infty)$ denotes the Riemann-Roch space of the divisor $m \cdot \infty$ on the curve. This has a basis consisting of monomials $x^iy^j$, where $(i,j)$ range over a polygon depending on $m$ and $f(x,y)$. For more details on the Riemann-Roch space of the divisor $m \cdot \infty$ see Proposition III.10.5 in Stichtenoth \cite{St93}. 
+
+ This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.multiplicity} (namely \mbox{\texttt{\slshape m}}), \texttt{C!.curve} (namely \mbox{\texttt{\slshape f}}) and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R := PolynomialRing(F,["x","y"]);
+  PolynomialRing(..., [ x, y ])
+  gap> indets := IndeterminatesOfPolynomialRing(R);
+  [ x, y ]
+  gap> x:=indets[1]; y:=indets[2];
+  x
+  y
+  gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+  gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+  a linear [11,8,1..0]2..3  one-point AG code over GF(11)
+  gap> MinimumDistance(C);
+  4
+  gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+  gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
+  a linear [9,6,1..4]2..3 one-point AG code over GF(11)
+  gap> MinimumDistance(C);
+  4
+\end{Verbatim}
+  See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{Manipulating Codes}}\logpage{[ 6, 0, 0 ]}
+\hyperdef{L}{X866FC1117814B64D}{}
+{
+  \label{Manipulating Codes} In this chapter we describe several functions \textsf{GUAVA} uses to manipulate codes. Some of the best codes are obtained by starting with
+for example a BCH code, and manipulating it. 
+
+ In some cases, it is faster to perform calculations with a manipulated code
+than to use the original code. For example, if the dimension of the code is
+larger than half the word length, it is generally faster to compute the weight
+distribution by first calculating the weight distribution of the dual code
+than by directly calculating the weight distribution of the original code. The
+size of the dual code is smaller in these cases. 
+
+ Because \textsf{GUAVA} keeps all information in a code record, in some cases the information can be
+preserved after manipulations. Therefore, computations do not always have to
+start from scratch. 
+
+ In Section \ref{Functions that Generate a New Code from a Given Code}, we describe functions that take a code with certain parameters, modify it in
+some way and return a different code (see \texttt{ExtendedCode} (\ref{ExtendedCode}), \texttt{PuncturedCode} (\ref{PuncturedCode}), \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode}), \texttt{PermutedCode} (\ref{PermutedCode}), \texttt{ExpurgatedCode} (\ref{ExpurgatedCode}), \texttt{AugmentedCode} (\ref{AugmentedCode}), \texttt{RemovedElementsCode} (\ref{RemovedElementsCode}), \texttt{AddedElementsCode} (\ref{AddedElementsCode}), \texttt{ShortenedCode} (\ref{ShortenedCode}), \texttt{Le [...]
+\section{\textcolor{Chapter }{ Functions that Generate a New Code from a Given Code }}\logpage{[ 6, 1, 0 ]}
+\hyperdef{L}{X8271A4697FDA97B2}{}
+{
+  \label{Functions that Generate a New Code from a Given Code} \index{Parity check} 
+
+\subsection{\textcolor{Chapter }{ExtendedCode}}
+\logpage{[ 6, 1, 1 ]}\nobreak
+\hyperdef{L}{X794679BE7F9EB5C1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedCode({\slshape C[, i]})\index{ExtendedCode@\texttt{ExtendedCode}}
+\label{ExtendedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExtendedCode} extends the code \mbox{\texttt{\slshape C}} \mbox{\texttt{\slshape i}} times and returns the result. \mbox{\texttt{\slshape i}} is equal to $1$ by default. Extending is done by adding a parity check bit after the last
+coordinate. The coordinates of all codewords now add up to zero. In the binary
+case, each codeword has even weight. 
+
+ The word length increases by \mbox{\texttt{\slshape i}}. The size of the code remains the same. In the binary case, the minimum
+distance increases by one if it was odd. In other cases, that is not always
+true. 
+
+ A cyclic code in general is no longer cyclic after extending. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 3, GF(2) );
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> C2 := ExtendedCode( C1 );
+  a linear [8,4,4]2 extended code
+  gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+  true
+  gap> List( AsSSortedList( C2 ), WeightCodeword );
+  [ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
+  gap> C3 := EvenWeightSubcode( C1 );
+  a linear [7,3,4]2..3 even weight subcode 
+\end{Verbatim}
+  To undo extending, call \texttt{PuncturedCode} (see \texttt{PuncturedCode} (\ref{PuncturedCode})). The function \texttt{EvenWeightSubcode} (see \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode})) also returns a related code with only even weights, but without changing its
+word length. 
+
+\subsection{\textcolor{Chapter }{PuncturedCode}}
+\logpage{[ 6, 1, 2 ]}\nobreak
+\hyperdef{L}{X7E6E4DDA79574FDB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PuncturedCode({\slshape C})\index{PuncturedCode@\texttt{PuncturedCode}}
+\label{PuncturedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PuncturedCode} punctures \mbox{\texttt{\slshape C}} in the last column, and returns the result. Puncturing is done simply by
+cutting off the last column from each codeword. This means the word length
+decreases by one. The minimum distance in general also decrease by one. 
+
+ This command can also be called with the syntax \texttt{PuncturedCode( C, L )}. In this case, \texttt{PuncturedCode} punctures \mbox{\texttt{\slshape C}} in the columns specified by \mbox{\texttt{\slshape L}}, a list of integers. All columns specified by \mbox{\texttt{\slshape L}} are omitted from each codeword. If $l$ is the length of \mbox{\texttt{\slshape L}} (so the number of removed columns), the word length decreases by $l$. The minimum distance can also decrease by $l$ or less. 
+
+ Puncturing a cyclic code in general results in a non-cyclic code. If the code
+is punctured in all the columns where a word of minimal weight is unequal to
+zero, the dimension of the resulting code decreases. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := BCHCode( 15, 5, GF(2) );
+  a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
+  gap> C2 := PuncturedCode( C1 );
+  a linear [14,7,4]3..5 punctured code
+  gap> ExtendedCode( C2 ) = C1;
+  false
+  gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
+  a linear [8,7,1]1 punctured code
+  gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+  a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 
+\end{Verbatim}
+  \texttt{ExtendedCode} extends the code again (see \texttt{ExtendedCode} (\ref{ExtendedCode})), although in general this does not result in the old code. 
+
+\subsection{\textcolor{Chapter }{EvenWeightSubcode}}
+\logpage{[ 6, 1, 3 ]}\nobreak
+\hyperdef{L}{X87691AB67FF5621B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvenWeightSubcode({\slshape C})\index{EvenWeightSubcode@\texttt{EvenWeightSubcode}}
+\label{EvenWeightSubcode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{EvenWeightSubcode} returns the even weight subcode of \mbox{\texttt{\slshape C}}, consisting of all codewords of \mbox{\texttt{\slshape C}} with even weight. If \mbox{\texttt{\slshape C}} is a linear code and contains words of odd weight, the resulting code has a
+dimension of one less. The minimum distance always increases with one if it
+was odd. If \mbox{\texttt{\slshape C}} is a binary cyclic code, and $g(x)$ is its generator polynomial, the even weight subcode either has generator
+polynomial $g(x)$ (if $g(x)$ is divisible by $x-1$) or $g(x)\cdot (x-1)$ (if no factor $x-1$ was present in $g(x)$). So the even weight subcode is again cyclic. 
+
+ Of course, if all codewords of \mbox{\texttt{\slshape C}} are already of even weight, the returned code is equal to \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+  an (8,33,4..8)3..8 even weight subcode
+  gap> List( AsSSortedList( C1 ), WeightCodeword );
+  [ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
+    4, 6, 4, 6, 8, 4, 6, 8 ]
+  gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+\end{Verbatim}
+  \texttt{ExtendedCode} also returns a related code of only even weights, but without reducing its
+dimension (see \texttt{ExtendedCode} (\ref{ExtendedCode})). 
+
+\subsection{\textcolor{Chapter }{PermutedCode}}
+\logpage{[ 6, 1, 4 ]}\nobreak
+\hyperdef{L}{X79577EB27BE8524B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutedCode({\slshape C, L})\index{PermutedCode@\texttt{PermutedCode}}
+\label{PermutedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PermutedCode} returns \mbox{\texttt{\slshape C}} after column permutations. \mbox{\texttt{\slshape L}} (in GAP disjoint cycle notation) is the permutation to be executed on the
+columns of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is cyclic, the result in general is no longer cyclic. If a permutation results
+in the same code as \mbox{\texttt{\slshape C}}, this permutation belongs to the automorphism group of \mbox{\texttt{\slshape C}} (see \texttt{AutomorphismGroup} (\ref{AutomorphismGroup})). In any case, the returned code is equivalent to \mbox{\texttt{\slshape C}} (see \texttt{IsEquivalent} (\ref{IsEquivalent})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+  a linear [15,5,7]5 punctured code
+  gap> C2 := BCHCode( 15, 7, GF(2) );
+  a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+  gap> C2 = C1;
+  false
+  gap> p := CodeIsomorphism( C1, C2 );
+  ( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
+  gap> C3 := PermutedCode( C1, p );
+  a linear [15,5,7]5 permuted code
+  gap> C2 = C3;
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ExpurgatedCode}}
+\logpage{[ 6, 1, 5 ]}\nobreak
+\hyperdef{L}{X87E5849784BC60D2}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExpurgatedCode({\slshape C, L})\index{ExpurgatedCode@\texttt{ExpurgatedCode}}
+\label{ExpurgatedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExpurgatedCode} expurgates the code \mbox{\texttt{\slshape C}}{\textgreater} by throwing away codewords in list \mbox{\texttt{\slshape L}}. \mbox{\texttt{\slshape C}} must be a linear code. \mbox{\texttt{\slshape L}} must be a list of codeword input. The generator matrix of the new code no
+longer is a basis for the codewords specified by \mbox{\texttt{\slshape L}}. Since the returned code is still linear, it is very likely that, besides the
+words of \mbox{\texttt{\slshape L}}, more codewords of \mbox{\texttt{\slshape C}} are no longer in the new code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+  [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+  gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+  gap> C2 := ExpurgatedCode( C1, L );
+  a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
+  gap> WeightDistribution( C2 );
+  [ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 
+\end{Verbatim}
+  This function does not work on non-linear codes. For removing words from a
+non-linear code, use \texttt{RemovedElementsCode} (see \texttt{RemovedElementsCode} (\ref{RemovedElementsCode})). For expurgating a code of all words of odd weight, use `EvenWeightSubcode'
+(see \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode})). 
+
+\subsection{\textcolor{Chapter }{AugmentedCode}}
+\logpage{[ 6, 1, 6 ]}\nobreak
+\hyperdef{L}{X8134BE2B8478BE8A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AugmentedCode({\slshape C, L})\index{AugmentedCode@\texttt{AugmentedCode}}
+\label{AugmentedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AugmentedCode} returns \mbox{\texttt{\slshape C}} after augmenting. \mbox{\texttt{\slshape C}} must be a linear code, \mbox{\texttt{\slshape L}} must be a list of codeword inputs. The generator matrix of the new code is a
+basis for the codewords specified by \mbox{\texttt{\slshape L}} as well as the words that were already in code \mbox{\texttt{\slshape C}}. Note that the new code in general will consist of more words than only the
+codewords of \mbox{\texttt{\slshape C}} and the words \mbox{\texttt{\slshape L}}. The returned code is also a linear code. 
+
+ This command can also be called with the syntax \texttt{AugmentedCode(C)}. When called without a list of codewords, \texttt{AugmentedCode} returns \mbox{\texttt{\slshape C}} after adding the all-ones vector to the generator matrix. \mbox{\texttt{\slshape C}} must be a linear code. If the all-ones vector was already in the code, nothing
+happens and a copy of the argument is returned. If \mbox{\texttt{\slshape C}} is a binary code which does not contain the all-ones vector, the complement of
+all codewords is added. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C31 := ReedMullerCode( 1, 3 );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+  gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+  a linear [8,7,1..2]1 code, augmented with 3 word(s)
+  gap> C32 = ReedMullerCode( 2, 3 );
+  true 
+  gap> C1 := CordaroWagnerCode(6);
+  a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
+  gap> Codeword( [0,0,1,1,1,1] ) in C1;
+  true
+  gap> C2 := AugmentedCode( C1 );
+  a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
+  gap> Codeword( [1,1,0,0,0,0] ) in C2;
+  true
+\end{Verbatim}
+  The function \texttt{AddedElementsCode} adds elements to the codewords instead of adding them to the basis (see \texttt{AddedElementsCode} (\ref{AddedElementsCode})). 
+
+\subsection{\textcolor{Chapter }{RemovedElementsCode}}
+\logpage{[ 6, 1, 7 ]}\nobreak
+\hyperdef{L}{X7B0A6E1F82686B43}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RemovedElementsCode({\slshape C, L})\index{RemovedElementsCode@\texttt{RemovedElementsCode}}
+\label{RemovedElementsCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{RemovedElementsCode} returns code \mbox{\texttt{\slshape C}} after removing a list of codewords \mbox{\texttt{\slshape L}} from its elements. \mbox{\texttt{\slshape L}} must be a list of codeword input. The result is an unrestricted code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+  [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+  gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+  gap> C2 := RemovedElementsCode( C1, L );
+  a (15,2013,3..15)2..15 code with 35 word(s) removed
+  gap> WeightDistribution( C2 );
+  [ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+  gap> MinimumDistance( C2 );
+  3        # C2 is not linear, so the minimum weight does not have to
+           # be equal to the minimum distance 
+\end{Verbatim}
+  Adding elements to a code is done by the function \texttt{AddedElementsCode} (see \texttt{AddedElementsCode} (\ref{AddedElementsCode})). To remove codewords from the base of a linear code, use \texttt{ExpurgatedCode} (see \texttt{ExpurgatedCode} (\ref{ExpurgatedCode})). 
+
+\subsection{\textcolor{Chapter }{AddedElementsCode}}
+\logpage{[ 6, 1, 8 ]}\nobreak
+\hyperdef{L}{X784E1255874FCA8A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AddedElementsCode({\slshape C, L})\index{AddedElementsCode@\texttt{AddedElementsCode}}
+\label{AddedElementsCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AddedElementsCode} returns code \mbox{\texttt{\slshape C}} after adding a list of codewords \mbox{\texttt{\slshape L}} to its elements. \mbox{\texttt{\slshape L}} must be a list of codeword input. The result is an unrestricted code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := NullCode( 6, GF(2) );
+  a cyclic [6,0,6]6 nullcode over GF(2)
+  gap> C2 := AddedElementsCode( C1, [ "111111" ] );
+  a (6,2,1..6)3 code with 1 word(s) added
+  gap> IsCyclicCode( C2 );
+  true
+  gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+  a (6,4,1..6)2 code with 2 word(s) added
+  gap> IsCyclicCode( C3 );
+  true 
+\end{Verbatim}
+  To remove elements from a code, use \texttt{RemovedElementsCode} (see \texttt{RemovedElementsCode} (\ref{RemovedElementsCode})). To add elements to the base of a linear code, use \texttt{AugmentedCode} (see \texttt{AugmentedCode} (\ref{AugmentedCode})). 
+
+\subsection{\textcolor{Chapter }{ShortenedCode}}
+\logpage{[ 6, 1, 9 ]}\nobreak
+\hyperdef{L}{X81CBEAFF7B9DE6EF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ShortenedCode({\slshape C[, L]})\index{ShortenedCode@\texttt{ShortenedCode}}
+\label{ShortenedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ShortenedCode( C )} returns the code \mbox{\texttt{\slshape C}} shortened by taking a cross section. If \mbox{\texttt{\slshape C}} is a linear code, this is done by removing all codewords that start with a
+non-zero entry, after which the first column is cut off. If \mbox{\texttt{\slshape C}} was a $[n,k,d]$ code, the shortened code generally is a $[n-1,k-1,d]$ code. It is possible that the dimension remains the same; it is also possible
+that the minimum distance increases. 
+
+ If \mbox{\texttt{\slshape C}} is a non-linear code, \texttt{ShortenedCode} first checks which finite field element occurs most often in the first column
+of the codewords. The codewords not starting with this element are removed
+from the code, after which the first column is cut off. The resulting
+shortened code has at least the same minimum distance as \mbox{\texttt{\slshape C}}. 
+
+ This command can also be called using the syntax \texttt{ShortenedCode(C,L)}. When called in this format, \texttt{ShortenedCode} repeats the shortening process on each of the columns specified by \mbox{\texttt{\slshape L}}. \mbox{\texttt{\slshape L}} therefore is a list of integers. The column numbers in \mbox{\texttt{\slshape L}} are the numbers as they are before the shortening process. If \mbox{\texttt{\slshape L}} has $l$ entries, the returned code has a word length of $l$ positions [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 4 );
+  a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+  gap> C2 := ShortenedCode( C1 );
+  a linear [14,10,3]2 shortened code
+  gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+  a (4,3,1..4)2 user defined unrestricted code over GF(2)
+  gap> MinimumDistance( C3 );
+  2
+  gap> C4 := ShortenedCode( C3 );
+  a (3,2,2..3)1..2 shortened code
+  gap> AsSSortedList( C4 );
+  [ [ 0 0 0 ], [ 1 0 1 ] ]
+  gap> C5 := HammingCode( 5, GF(2) );
+  a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+  gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+  a linear [28,23,3]2 shortened code
+  gap> OptimalityLinearCode( C6 );
+  0
+\end{Verbatim}
+  The function \texttt{LengthenedCode} lengthens the code again (only for linear codes), see \texttt{LengthenedCode} (\ref{LengthenedCode}). In general, this is not exactly the inverse function. 
+
+\subsection{\textcolor{Chapter }{LengthenedCode}}
+\logpage{[ 6, 1, 10 ]}\nobreak
+\hyperdef{L}{X7A5D5419846FC867}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LengthenedCode({\slshape C[, i]})\index{LengthenedCode@\texttt{LengthenedCode}}
+\label{LengthenedCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{LengthenedCode( C )} returns the code \mbox{\texttt{\slshape C}} lengthened. \mbox{\texttt{\slshape C}} must be a linear code. First, the all-ones vector is added to the generator
+matrix (see \texttt{AugmentedCode} (\ref{AugmentedCode})). If the all-ones vector was already a codeword, nothing happens to the code.
+Then, the code is extended \mbox{\texttt{\slshape i}} times (see \texttt{ExtendedCode} (\ref{ExtendedCode})). \mbox{\texttt{\slshape i}} is equal to $1$ by default. If \mbox{\texttt{\slshape C}} was an $[n,k]$ code, the new code generally is a $[n+i,k+1]$ code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := CordaroWagnerCode( 5 );
+  a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
+  gap> C2 := LengthenedCode( C1 );
+  a linear [6,3,2]2..3 code, lengthened with 1 column(s) 
+\end{Verbatim}
+  \texttt{ShortenedCode}' shortens the code, see \texttt{ShortenedCode} (\ref{ShortenedCode}). In general, this is not exactly the inverse function. 
+
+\subsection{\textcolor{Chapter }{SubCode}}
+\logpage{[ 6, 1, 11 ]}\nobreak
+\hyperdef{L}{X7982D699803ECD0F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SubCode({\slshape C[, s]})\index{SubCode@\texttt{SubCode}}
+\label{SubCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function \texttt{SubCode} returns a subcode of \mbox{\texttt{\slshape C}} by taking the first $k - s$ rows of the generator matrix of \mbox{\texttt{\slshape C}}, where $k$ is the dimension of \mbox{\texttt{\slshape C}}. The interger \mbox{\texttt{\slshape s}} may be omitted and in this case it is assumed as 1. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := BCHCode(31,11);
+  a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
+  gap> S1:= SubCode(C);
+  a linear [31,10,11]7..13 subcode
+  gap> WeightDistribution(S1);
+  [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+  gap> S2:= SubCode(C, 8);
+  a linear [31,3,11]14..20 subcode
+  gap> History(S2);
+  [ "a linear [31,3,11]14..20 subcode of",
+    "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
+  gap> WeightDistribution(S2);
+  [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ResidueCode}}
+\logpage{[ 6, 1, 12 ]}\nobreak
+\hyperdef{L}{X809376187C1525AA}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ResidueCode({\slshape C[, c]})\index{ResidueCode@\texttt{ResidueCode}}
+\label{ResidueCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{ResidueCode} takes a codeword \mbox{\texttt{\slshape c}} of \mbox{\texttt{\slshape C}} (if \mbox{\texttt{\slshape c}} is omitted, a codeword of minimal weight is used). It removes this word and
+all its linear combinations from the code and then punctures the code in the
+coordinates where \mbox{\texttt{\slshape c}} is unequal to zero. The resulting code is an $[n-w, k-1, d-\lfloor w*(q-1)/q \rfloor ]$ code. \mbox{\texttt{\slshape C}} must be a linear code and \mbox{\texttt{\slshape c}} must be non-zero. If \mbox{\texttt{\slshape c}} is not in \mbox{\texttt{\slshape }} then no change is made to \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := BCHCode( 15, 7 );
+  a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+  gap> C2 := ResidueCode( C1 );
+  a linear [8,4,4]2 residue code
+  gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+  gap> C3 := ResidueCode( C1, c );
+  a linear [7,4,3]1 residue code 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ConstructionBCode}}
+\logpage{[ 6, 1, 13 ]}\nobreak
+\hyperdef{L}{X7E92DC9581F96594}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionBCode({\slshape C})\index{ConstructionBCode@\texttt{ConstructionBCode}}
+\label{ConstructionBCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{ConstructionBCode} takes a binary linear code \mbox{\texttt{\slshape C}} and calculates the minimum distance of the dual of \mbox{\texttt{\slshape C}} (see \texttt{DualCode} (\ref{DualCode})). It then removes the columns of the parity check matrix of \mbox{\texttt{\slshape C}} where a codeword of the dual code of minimal weight has coordinates unequal to
+zero. The resulting matrix is a parity check matrix for an $[n-dd, k-dd+1, \geq d]$ code, where $dd$ is the minimum distance of the dual of \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ReedMullerCode( 2, 5 );
+  a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
+  gap> C2 := ConstructionBCode( C1 );
+  a linear [24,9,8]5..10 Construction B (8 coordinates)
+  gap> BoundsMinimumDistance( 24, 9, GF(2) );
+  rec( n := 24, k := 9, q := 2, references := rec(  ), 
+    construction := [ [ Operation "UUVCode" ], 
+        [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
+                        [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
+                    [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
+            [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
+    lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
+        "Lb(12,7)=4, u u+v construction of C1 and C2:", 
+        "Lb(6,5)=2, dual of the repetition code", 
+        "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
+    upperBound := 8, 
+    upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
+                               contradict:", "Ub(18,4)=8, Griesmer bound" ] )
+  # so C2 is optimal
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DualCode}}
+\logpage{[ 6, 1, 14 ]}\nobreak
+\hyperdef{L}{X799B12F085ACB609}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DualCode({\slshape C})\index{DualCode@\texttt{DualCode}}
+\label{DualCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DualCode} returns the dual code of \mbox{\texttt{\slshape C}}. The dual code consists of all codewords that are orthogonal to the codewords
+of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is a linear code with generator matrix $G$, the dual code has parity check matrix $G$ (or if \mbox{\texttt{\slshape C}} has parity check matrix $H$, the dual code has generator matrix $H$). So if \mbox{\texttt{\slshape C}} is a linear $[n, k]$ code, the dual code of \mbox{\texttt{\slshape C}} is a linear $[n, n-k]$ code. If \mbox{\texttt{\slshape C}} is a cyclic code with generator polynomial $g(x)$, the dual code has the recip [...]
+
+ The dual code is always a linear code, even if \mbox{\texttt{\slshape C}} is non-linear. 
+
+ If a code \mbox{\texttt{\slshape C}} is equal to its dual code, it is called \emph{self-dual}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := ReedMullerCode( 1, 3 );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+  gap> RD := DualCode( R );
+  a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+  gap> R = RD;
+  true
+  gap> N := WholeSpaceCode( 7, GF(4) );
+  a cyclic [7,7,1]0 whole space code over GF(4)
+  gap> DualCode( N ) = NullCode( 7, GF(4) );
+  true 
+\end{Verbatim}
+  \index{self-dual} 
+
+\subsection{\textcolor{Chapter }{ConversionFieldCode}}
+\logpage{[ 6, 1, 15 ]}\nobreak
+\hyperdef{L}{X81FE1F387DFCCB22}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConversionFieldCode({\slshape C})\index{ConversionFieldCode@\texttt{ConversionFieldCode}}
+\label{ConversionFieldCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ConversionFieldCode} returns the code obtained from \mbox{\texttt{\slshape C}} after converting its field. If the field of \mbox{\texttt{\slshape C}} is $GF(q^m)$, the returned code has field $GF(q)$. Each symbol of every codeword is replaced by a concatenation of $m$ symbols from $GF(q)$. If \mbox{\texttt{\slshape C}} is an $(n, M, d_1)$ code, the returned code is a $(n\cdot m, M, d_2)$ code, where $d_2 > d_1$. 
+
+ See also \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R := RepetitionCode( 4, GF(4) );
+  a cyclic [4,1,4]3 repetition code over GF(4)
+  gap> R2 := ConversionFieldCode( R );
+  a linear [8,2,4]3..4 code, converted to basefield GF(2)
+  gap> Size( R ) = Size( R2 );
+  true
+  gap> GeneratorMat( R );
+  [ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
+  gap> GeneratorMat( R2 );
+  [ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
+    [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{TraceCode}}
+\logpage{[ 6, 1, 16 ]}\nobreak
+\hyperdef{L}{X82D18907800FE3D9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TraceCode({\slshape C})\index{TraceCode@\texttt{TraceCode}}
+\label{TraceCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \mbox{\texttt{\slshape C}} is a linear code defined over an extension $E$ of \mbox{\texttt{\slshape F}} (\mbox{\texttt{\slshape F}} is the ``base field'') 
+
+ Output: The linear code generated by $Tr_{E/F}(c)$, for all $c \in C$. 
+
+ \texttt{TraceCode} returns the image of the code \mbox{\texttt{\slshape C}} under the trace map. If the field of \mbox{\texttt{\slshape C}} is $GF(q^m)$, the returned code has field $GF(q)$. 
+
+ Very slow. It does not seem to be easy to related the parameters of the trace
+code to the original except in the ``Galois closed'' case. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+  a  [10,4,?] randomly generated code over GF(4)
+  5
+  gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+  a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
+  1
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CosetCode}}
+\logpage{[ 6, 1, 17 ]}\nobreak
+\hyperdef{L}{X8799F4BF81B0842B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CosetCode({\slshape C, w})\index{CosetCode@\texttt{CosetCode}}
+\label{CosetCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CosetCode} returns the coset of a code \mbox{\texttt{\slshape C}} with respect to word \mbox{\texttt{\slshape w}}. \mbox{\texttt{\slshape w}} must be of the codeword type. Then, \mbox{\texttt{\slshape w}} is added to each codeword of \mbox{\texttt{\slshape C}}, yielding the elements of the new code. If \mbox{\texttt{\slshape C}} is linear and \mbox{\texttt{\slshape w}} is an element of \mbox{\texttt{\slshape C}}, the new code is equal to \mbox{\texttt{\slshape C}}, otherwise the [...]
+
+ Generating a coset is also possible by simply adding the word \mbox{\texttt{\slshape w}} to \mbox{\texttt{\slshape C}}. See \ref{Operations for Codes}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := HammingCode(3, GF(2));
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> c := Codeword("1011011");; c in H;
+  false
+  gap> C := CosetCode(H, c);
+  a (7,16,3)1 coset code
+  gap> List(AsSSortedList(C), el-> Syndrome(H, el));
+  [ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+    [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+    [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
+  # All elements of the coset have the same syndrome in H 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ConstantWeightSubcode}}
+\logpage{[ 6, 1, 18 ]}\nobreak
+\hyperdef{L}{X873EA5EE85699832}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstantWeightSubcode({\slshape C, w})\index{ConstantWeightSubcode@\texttt{ConstantWeightSubcode}}
+\label{ConstantWeightSubcode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ConstantWeightSubcode} returns the subcode of \mbox{\texttt{\slshape C}} that only has codewords of weight \mbox{\texttt{\slshape w}}. The resulting code is a non-linear code, because it does not contain the
+all-zero vector. 
+
+ This command also can be called with the syntax \texttt{ConstantWeightSubcode(C)} In this format, \texttt{ConstantWeightSubcode} returns the subcode of \mbox{\texttt{\slshape C}} consisting of all minimum weight codewords of \mbox{\texttt{\slshape C}}. 
+
+ \texttt{ConstantWeightSubcode} first checks if Leon's binary \texttt{wtdist} exists on your computer (in the default directory). If it does, then this
+program is called. Otherwise, the constant weight subcode is computed using a
+GAP program which checks each codeword in \mbox{\texttt{\slshape C}} to see if it is of the desired weight. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> N := NordstromRobinsonCode();; WeightDistribution(N);
+  [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
+  gap> C := ConstantWeightSubcode(N, 8);
+  a (16,30,6..16)5..8 code with codewords of weight 8
+  gap> WeightDistribution(C);
+  [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
+  gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+  [ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
+  gap> C := ConstantWeightSubcode(eg);
+  a (12,264,6..12)3..6 code with codewords of weight 6
+  gap> WeightDistribution(C);
+  [ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{StandardFormCode}}
+\logpage{[ 6, 1, 19 ]}\nobreak
+\hyperdef{L}{X7AA203A380BC4C79}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StandardFormCode({\slshape C})\index{StandardFormCode@\texttt{StandardFormCode}}
+\label{StandardFormCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{StandardFormCode} returns \mbox{\texttt{\slshape C}} after putting it in standard form. If \mbox{\texttt{\slshape C}} is a non-linear code, this means the elements are organized using
+lexicographical order. This means they form a legal GAP `Set'. 
+
+ If \mbox{\texttt{\slshape C}} is a linear code, the generator matrix and parity check matrix are put in
+standard form. The generator matrix then has an identity matrix in its left
+part, the parity check matrix has an identity matrix in its right part.
+Although \textsf{GUAVA} always puts both matrices in a standard form using \texttt{BaseMat}, this never alters the code. \texttt{StandardFormCode} even applies column permutations if unavoidable, and thereby changes the code.
+The column permutations are recorded in the construction history of the new
+code (see \texttt{Display} (\ref{Display})). \mbox{\texttt{\slshape C}} and the new code are of course equivalent. 
+
+ If \mbox{\texttt{\slshape C}} is a cyclic code, its generator matrix cannot be put in the usual upper
+triangular form, because then it would be inconsistent with the generator
+polynomial. The reason is that generating the elements from the generator
+matrix would result in a different order than generating the elements from the
+generator polynomial. This is an unwanted effect, and therefore \texttt{StandardFormCode} just returns a copy of \mbox{\texttt{\slshape C}} for cyclic codes. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
+            "random form code", GF(2) );
+  a linear [4,2,1..2]1..2 random form code over GF(2)
+  gap> Codeword( GeneratorMat( G ) );
+  [ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
+  gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
+  [ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{PiecewiseConstantCode}}
+\logpage{[ 6, 1, 20 ]}\nobreak
+\hyperdef{L}{X7EF49A257D6DB53B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PiecewiseConstantCode({\slshape part, wts[, F]})\index{PiecewiseConstantCode@\texttt{PiecewiseConstantCode}}
+\label{PiecewiseConstantCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PiecewiseConstantCode} returns a code with length $n = \sum n_i$, where \mbox{\texttt{\slshape part}}=$[ n_1, \dots, n_k ]$. \mbox{\texttt{\slshape wts}} is a list of \mbox{\texttt{\slshape constraints}} $w=(w_1,...,w_k)$, each of length $k$, where $0 \leq w_i \leq n_i$. The default field is $GF(2)$. 
+
+ A constraint is a list of integers, and a word $c = ( c_1, \dots, c_k )$ (according to \mbox{\texttt{\slshape part}}, i.e., each $c_i$ is a subword of length $n_i$) is in the resulting code if and only if, for some constraint $w \in$ \mbox{\texttt{\slshape wts}}, $\|c_i\| = w_i$ for all $1 \leq i \leq k$, where $\| ...\|$ denotes the Hamming weight. 
+
+ An example might make things clearer: }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> PiecewiseConstantCode( [ 2, 3 ],
+       [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+  the C code programs are compiled, so using Leon's binary....
+  the C code programs are compiled, so using Leon's binary....
+  the C code programs are compiled, so using Leon's binary....
+  the C code programs are compiled, so using Leon's binary....
+  a (5,7,1..5)1..5 piecewise constant code over GF(2)
+  gap> AsSSortedList(last);
+  [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
+    [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
+  gap>
+  
+\end{Verbatim}
+  The first constraint is satisfied by codeword 1, the second by codeword 2, the
+third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7. }
+
+ 
+\section{\textcolor{Chapter }{ Functions that Generate a New Code from Two or More Given Codes }}\logpage{[ 6, 2, 0 ]}
+\hyperdef{L}{X7964BF0081CC8352}{}
+{
+  \label{Functions that Generate a New Code from Two or More Given Codes} 
+
+\subsection{\textcolor{Chapter }{DirectSumCode}}
+\logpage{[ 6, 2, 1 ]}\nobreak
+\hyperdef{L}{X79E00D3A8367D65A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DirectSumCode({\slshape C1, C2})\index{DirectSumCode@\texttt{DirectSumCode}}
+\label{DirectSumCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DirectSumCode} returns the direct sum of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The direct sum code consists of every codeword of \mbox{\texttt{\slshape C1}} concatenated by every codeword of \mbox{\texttt{\slshape C2}}. Therefore, if \mbox{\texttt{\slshape Ci}} was a $(n_i,M_i,d_i)$ code, the result is a $(n_1+n_2,M_1*M_2,min(d_1,d_2))$ code. 
+
+ If both \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are linear codes, the result is also a linear code. If one of them is
+non-linear, the direct sum is non-linear too. In general, a direct sum code is
+not cyclic. 
+
+ Performing a direct sum can also be done by adding two codes (see Section \ref{Operations for Codes}). Another often used method is the `u, u+v'-construction, described in \texttt{UUVCode} (\ref{UUVCode}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+  gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+  gap> D := DirectSumCode(C1, C2);;
+  gap> AsSSortedList(D);
+  [ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
+  gap> D = C1 + C2;   # addition = direct sum
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UUVCode}}
+\logpage{[ 6, 2, 2 ]}\nobreak
+\hyperdef{L}{X86E9D6DE7F1A07E6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UUVCode({\slshape C1, C2})\index{UUVCode@\texttt{UUVCode}}
+\label{UUVCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UUVCode} returns the so-called $(u\|u+v)$ construction applied to \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The resulting code consists of every codeword $u$ of \mbox{\texttt{\slshape C1}} concatenated by the sum of $u$ and every codeword $v$ of \mbox{\texttt{\slshape C2}}. If \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} have different word lengths, sufficient zeros are added to the shorter code to
+make this sum possible. If \mbox{\texttt{\slshape Ci}} is a $(n_i,M_i,d_i)$ code, the result is an $(n_1+max(n_1,n_2),M_1\cdot M_2,min(2\cdot d_1,d_2))$ code. 
+
+ If both \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are linear codes, the result is also a linear code. If one of them is
+non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not
+cyclic. 
+
+ The function \texttt{DirectSumCode} returns another sum of codes (see \texttt{DirectSumCode} (\ref{DirectSumCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+  a cyclic [4,3,2]1 even weight subcode
+  gap> C2 := RepetitionCode(4, GF(2));
+  a cyclic [4,1,4]2 repetition code over GF(2)
+  gap> R := UUVCode(C1, C2);
+  a linear [8,4,4]2 U U+V construction code
+  gap> R = ReedMullerCode(1,3);
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DirectProductCode}}
+\logpage{[ 6, 2, 3 ]}\nobreak
+\hyperdef{L}{X7BFBBA5784C293C1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DirectProductCode({\slshape C1, C2})\index{DirectProductCode@\texttt{DirectProductCode}}
+\label{DirectProductCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{DirectProductCode} returns the direct product of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. Both must be linear codes. Suppose \mbox{\texttt{\slshape Ci}} has generator matrix $G_i$. The direct product of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} then has the Kronecker product of $G_1$ and $G_2$ as the generator matrix (see the GAP command \texttt{KroneckerProduct}). 
+
+ If \mbox{\texttt{\slshape Ci}} is a $[n_i, k_i, d_i]$ code, the direct product then is an $[n_1\cdot n_2,k_1\cdot k_2,d_1\cdot d_2]$ code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L1 := LexiCode(10, 4, GF(2));
+  a linear [10,5,4]2..4 lexicode over GF(2)
+  gap> L2 := LexiCode(8, 3, GF(2));
+  a linear [8,4,3]2..3 lexicode over GF(2)
+  gap> D := DirectProductCode(L1, L2);
+  a linear [80,20,12]20..45 direct product code 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{IntersectionCode}}
+\logpage{[ 6, 2, 4 ]}\nobreak
+\hyperdef{L}{X78F0B1BC81FB109C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IntersectionCode({\slshape C1, C2})\index{IntersectionCode@\texttt{IntersectionCode}}
+\label{IntersectionCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IntersectionCode} returns the intersection of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. This code consists of all codewords that are both in \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. If both codes are linear, the result is also linear. If both are cyclic, the
+result is also cyclic. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := CyclicCodes(7, GF(2));
+  [ a cyclic [7,7,1]0 enumerated code over GF(2),
+    a cyclic [7,6,1..2]1 enumerated code over GF(2),
+    a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+    a cyclic [7,0,7]7 enumerated code over GF(2),
+    a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+    a cyclic [7,4,1..3]1 enumerated code over GF(2),
+    a cyclic [7,1,7]3 enumerated code over GF(2),
+    a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
+  gap> IntersectionCode(C[6], C[8]) = C[7];
+  true 
+\end{Verbatim}
+ \index{hull} The \emph{hull} of a linear code is the intersection of the code with its dual code. In other
+words, the hull of $C$ is \texttt{IntersectionCode(C, DualCode(C))}. 
+
+\subsection{\textcolor{Chapter }{UnionCode}}
+\logpage{[ 6, 2, 5 ]}\nobreak
+\hyperdef{L}{X8228A1F57A29B8F4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UnionCode({\slshape C1, C2})\index{UnionCode@\texttt{UnionCode}}
+\label{UnionCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UnionCode} returns the union of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. This code consists of the union of all codewords of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} and all linear combinations. Therefore this function works only for linear
+codes. The function \texttt{AddedElementsCode} can be used for non-linear codes, or if the resulting code should not include
+linear combinations. See \texttt{AddedElementsCode} (\ref{AddedElementsCode}). If both arguments are cyclic, the result is also cyclic. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+  a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
+  gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+  a linear [3,1,3]1 code defined by generator matrix over GF(2)
+  gap> U := UnionCode(G, H);
+  a linear [3,3,1]0 union code
+  gap> c := Codeword("010");; c in G;
+  false
+  gap> c in H;
+  false
+  gap> c in U;
+  true 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ExtendedDirectSumCode}}
+\logpage{[ 6, 2, 6 ]}\nobreak
+\hyperdef{L}{X7A85F8AF8154D387}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedDirectSumCode({\slshape L, B, m})\index{ExtendedDirectSumCode@\texttt{ExtendedDirectSumCode}}
+\label{ExtendedDirectSumCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The extended direct sum construction is described in section V of Graham and
+Sloane \cite{GS85}. The resulting code consists of \mbox{\texttt{\slshape m}} copies of \mbox{\texttt{\slshape L}}, extended by repeating the codewords of \mbox{\texttt{\slshape B}} \mbox{\texttt{\slshape m}} times. 
+
+ Suppose \mbox{\texttt{\slshape L}} is an $[n_L, k_L]r_L$ code, and \mbox{\texttt{\slshape B}} is an $[n_L, k_B]r_B$ code (non-linear codes are also permitted). The length of \mbox{\texttt{\slshape B}} must be equal to the length of \mbox{\texttt{\slshape L}}. The length of the new code is $n = m n_L$, the dimension (in the case of linear codes) is $k \leq m k_L + k_B$, and the covering radius is $r \leq \lfloor m \Psi( L, B ) \rfloor$, with 
+\[ \Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v \in B} {\rm
+d}( L, v + u ). \]
+ However, this computation will not be executed, because it may be too time
+consuming for large codes. 
+
+ If $L \subseteq B$, and $L$ and $B$ are linear codes, the last copy of \mbox{\texttt{\slshape L}} is omitted. In this case the dimension is $k = m k_L + (k_B - k_L)$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> c := HammingCode( 3, GF(2) );
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> d := WholeSpaceCode( 7, GF(2) );
+  a cyclic [7,7,1]0 whole space code over GF(2)
+  gap> e := ExtendedDirectSumCode( c, d, 3 );
+  a linear [21,15,1..3]2 3-fold extended direct sum code
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{AmalgamatedDirectSumCode}}
+\logpage{[ 6, 2, 7 ]}\nobreak
+\hyperdef{L}{X7E17107686A845DB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AmalgamatedDirectSumCode({\slshape c1, c2[, check]})\index{AmalgamatedDirectSumCode@\texttt{AmalgamatedDirectSumCode}}
+\label{AmalgamatedDirectSumCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AmalgamatedDirectSumCode} returns the amalgamated direct sum of the codes \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. The amalgamated direct sum code consists of all codewords of the form $(u \, \| \,0 \, \| \, v)$ if $(u \, \| \, 0) \in c_1$ and $(0 \, \| \, v) \in c_2$ and all codewords of the form $(u \, \| \, 1 \, \| \, v)$ if $(u \, \| \, 1) \in c_1$ and $(1 \, \| \, v) \in c_2$. The result is a code with length $ n = n_1 + n_2 - 1 $ and size $ M \leq M_1 \ [...]
+
+ If both codes are linear, they will first be standardized, with information
+symbols in the last and first coordinates of the first and second code,
+respectively. 
+
+ If \mbox{\texttt{\slshape c1}} is a normal code (see \texttt{IsNormalCode} (\ref{IsNormalCode})) with the last coordinate acceptable (see \texttt{IsCoordinateAcceptable} (\ref{IsCoordinateAcceptable})), and \mbox{\texttt{\slshape c2}} is a normal code with the first coordinate acceptable, then the covering
+radius of the new code is $r \leq r_1 + r_2 $. However, checking whether a code is normal or not is a lot of work, and
+almost all codes seem to be normal. Therefore, an option \mbox{\texttt{\slshape check}} can be supplied. If \mbox{\texttt{\slshape check}} is true, then the codes will be checked for normality. If \mbox{\texttt{\slshape check}} is false or omitted, then the codes will not be checked. In this case it is
+assumed that they are normal. Acceptability of the last and first coordinate
+of the first and second code, respectively, is in the last case also assumed
+to be done by the user. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> c := HammingCode( 3, GF(2) );
+  a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+  gap> d := ReedMullerCode( 1, 4 );
+  a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+  gap> e := DirectSumCode( c, d );
+  a linear [23,9,3]7 direct sum code
+  gap> f := AmalgamatedDirectSumCode( c, d );;
+  gap> MinimumDistance( f );;
+  gap> CoveringRadius( f );; 
+  gap> f;
+  a linear [22,8,3]7 amalgamated direct sum code
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{BlockwiseDirectSumCode}}
+\logpage{[ 6, 2, 8 ]}\nobreak
+\hyperdef{L}{X7D8981AF7DFE9814}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BlockwiseDirectSumCode({\slshape C1, L1, C2, L2})\index{BlockwiseDirectSumCode@\texttt{BlockwiseDirectSumCode}}
+\label{BlockwiseDirectSumCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{BlockwiseDirectSumCode} returns a subcode of the direct sum of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The fields of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} must be same. The lists \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}} are two equally long with elements from the ambient vector spaces of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}, respectively, \emph{or} \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\ [...]
+
+ In the first case, the blockwise direct sum code is defined as 
+\[ bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ), \]
+ where $\ell$ is the length of \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}}, and $\oplus$ is the direct sum. 
+
+ In the second case, it is defined as 
+\[ bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ). \]
+ The length of the new code is $n = n_1 + n_2$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := HammingCode( 3, GF(2) );;
+  gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+  gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
+  > C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+  a (13,1024,1..13)1..2 blockwise direct sum code
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ConstructionXCode}}
+\logpage{[ 6, 2, 9 ]}\nobreak
+\hyperdef{L}{X7C37D467791CE99B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionXCode({\slshape C, A})\index{ConstructionXCode@\texttt{ConstructionXCode}}
+\label{ConstructionXCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Consider a list of $j$ linear codes of the same length $N$ over the same field $F$, $C = \{ C_1, C_2, \ldots, C_j \}$, where the parameter of the $i$th code is $C_i = [N, K_i, D_i]$ and $C_j \subset C_{j-1} \subset \ldots \subset C_2 \subset C_1$. Consider a list of $j-1$ auxiliary linear codes of the same field $F$, $A = \{ A_1, A_2, \ldots, A_{j-1} \}$ where the parameter of the $i$th code $A_i$ is $[n_i, k_i=(K_i-K_{i+1}), d_i]$, an $[n, K_1, d]$ linear code over field $F$ can be con [...]
+\sum_{i=1}^{j-1} d_i\}$. 
+
+ For more information on Construction X, refer to \cite{Sloane72}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C1 := BCHCode(127, 43);
+  a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
+  gap> C2 := BCHCode(127, 47);
+  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
+  gap> C3 := BCHCode(127, 55);
+  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
+  gap> G1 := ShallowCopy( GeneratorMat(C2) );;
+  gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
+  gap> C1 := GeneratorMatCode(G1, GF(2));
+  a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
+  gap> MinimumDistance(C1);
+  43
+  gap> C := [ C1, C2, C3 ];
+  [ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
+    a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
+    a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
+  gap> IsSubset(C[1], C[2]);
+  true
+  gap> IsSubset(C[2], C[3]);
+  true
+  gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+  [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
+  gap> CX := ConstructionXCode(C, A);
+  a linear [148,23,53]43..74 Construction X code
+  gap> History(CX);
+  [ "a linear [148,23,53]43..74 Construction X code of", 
+    "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
+  , a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
+  [127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
+    "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
+  17,8,6]3..6 even weight subcode ]" ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ConstructionXXCode}}
+\logpage{[ 6, 2, 10 ]}\nobreak
+\hyperdef{L}{X7B50943B8014134F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionXXCode({\slshape C1, C2, C3, A1, A2})\index{ConstructionXXCode@\texttt{ConstructionXXCode}}
+\label{ConstructionXXCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Consider a set of linear codes over field $F$ of the same length, $n$, $C_1=[n, k_1, d_1]$, $C_2=[n, k_2, d_2]$ and $C_3=[n, k_3, d_3]$ such that $C_2 \subset C_1$, $C_3 \subset C_1$ and $C_4 = C_2 \cap C_3$. Given two auxiliary codes $A_1=[n_1, k_1-k_2, e_1]$ and $A_2=[n_2, k_1-k_3, e_2]$ over the same field $F$, there exists an $[n+n_1+n_2, k_1, d]$ linear code $C_{XX}$ over field $F$, where $d = \min\{d_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2\}$. 
+
+ The codewords of $C_{XX}$ can be partitioned into three sections $( v\;\|\;a\;\|\;b )$ where $v$ has length $n$, $a$ has length $n_1$ and $b$ has length $n_2$. A codeword from Construction XX takes the following form: 
+\begin{itemize}
+\item  $( v \; \| \; 0 \; \| \; 0 )$ if $v \in C_4$ 
+\item  $( v \; \| \; a_1 \; \| \; 0 )$ if $v \in C_3 \backslash C_4$ 
+\item  $( v \; \| \; 0 \; \| \; a_2 )$ if $v \in C_2 \backslash C_4$ 
+\item  $( v \; \| \; a_1 \; \| \; a_2 )$ otherwise 
+\end{itemize}
+ For more information on Construction XX, refer to \cite{Alltop84}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a := PrimitiveRoot(GF(32));
+  Z(2^5)
+  gap> f0 := MinimalPolynomial( GF(2), a^0 );
+  x_1+Z(2)^0
+  gap> f1 := MinimalPolynomial( GF(2), a^1 );
+  x_1^5+x_1^2+Z(2)^0
+  gap> f5 := MinimalPolynomial( GF(2), a^5 );
+  x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
+  gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+  a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+  gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+  a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+  gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+  a linear [31,11,11]7..11 union code of
+  U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+  V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+  gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
+  a linear [10,5,4]2..4 shortened code
+  gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
+  a cyclic [6,5,2]1 dual code
+  gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+  a linear [47,11,15..17]13..23 Construction XX code
+  gap> MinimumDistance(CXX);
+  17
+  gap> History(CXX);        
+  [ "a linear [47,11,17]13..23 Construction XX code of", 
+    "C1: a cyclic [31,11,11]7..11 union code", 
+    "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+    "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+    "A1: a linear [10,5,4]2..4 shortened code", 
+    "A2: a cyclic [6,5,2]1 dual code" ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{BZCode}}
+\logpage{[ 6, 2, 11 ]}\nobreak
+\hyperdef{L}{X790C614985BFAE16}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BZCode({\slshape O, I})\index{BZCode@\texttt{BZCode}}
+\label{BZCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Given a set of outer codes of the same length $O_i = [N, K_i, D_i]$ over GF($q^{e_i}$), where $i=1,2,\ldots,t$ and a set of inner codes of the same length $I_i = [n, k_i, d_i]$ over GF($q$), \texttt{BZCode} returns a Blokh-Zyablov multilevel concatenated code with parameter $[ n \times N, \sum_{i=1}^t e_i \times K_i, \min_{i=1,\ldots,t}\{d_i \times
+D_i\} ]$ over GF($q$). 
+
+ Note that the set of inner codes must satisfy chain condition, i.e. $I_1 = [n, k_1, d_1] \subset I_2=[n, k_2, d_2] \subset \ldots \subset I_t=[n,
+k_t, d_t]$ where $0=k_0 < k_1 < k_2 < \ldots < k_t$. The dimension of the inner codes must satisfy the condition $e_i = k_i - k_{i-1}$, where GF($q^{e_i}$) is the field of the $i$th outer code. 
+
+ For more information on Blokh-Zyablov multilevel concatenated code, refer to \cite{Brouwer98}. }
+
+ 
+
+\subsection{\textcolor{Chapter }{BZCodeNC}}
+\logpage{[ 6, 2, 12 ]}\nobreak
+\hyperdef{L}{X820327D6854A50B5}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BZCodeNC({\slshape O, I})\index{BZCodeNC@\texttt{BZCodeNC}}
+\label{BZCodeNC}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function is the same as \texttt{BZCode}, except this version is faster as it does not estimate the covering radius of
+the code. Users are encouraged to use this version unless you are working on
+very small codes. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> #
+  gap> # Binary code
+  gap> #
+  gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+  [ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
+    a cyclic [9,4,6]4..5 MDS code over GF(8) ]
+  gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
+  gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+  [ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
+  gap> C := BZCodeNC(O, I);
+  a linear [72,38,12]0..72 Blokh Zyablov concatenated code
+  gap> #
+  gap> # Non binary code
+  gap> #
+  gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
+  gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
+  gap> O1 := DualCode( O3 );;
+  gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+  gap> Cy := CyclicCodes(5, GF(5));;
+  gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+  gap> O  := [ O1, O2, O3 ];
+  [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
+    a linear [6,2,5]3..4 extended code ]
+  gap> I  := [ Cy[5], Cy[4], Cy[3] ];
+  [ a cyclic [5,1,5]3..4 enumerated code over GF(5),
+    a cyclic [5,2,4]2..3 enumerated code over GF(5),
+    a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
+  gap> C  := BZCodeNC( O, I );
+  a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
+  gap> MinimumDistance(C);
+  15
+  gap> History(C);
+  [ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
+    "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
+  ,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
+  r GF(5) ]",
+    "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
+  ode, a linear [6,2,5]3..4 extended code ]" ]
+\end{Verbatim}
+  }
+
+ }
+
+ 
+\chapter{\textcolor{Chapter }{ Bounds on codes, special matrices and miscellaneous functions }}\logpage{[ 7, 0, 0 ]}
+\hyperdef{L}{X7A814D518460862E}{}
+{
+  In this chapter we describe functions that determine bounds on the size and
+minimum distance of codes (Section \ref{Distance bounds on codes}), functions that determine bounds on the size and covering radius of codes
+(Section \ref{Covering radius bounds on codes}), functions that work with special matrices \textsf{GUAVA} needs for several codes (see Section \ref{Special matrices in GUAVA}), and constructing codes or performing calculations with codes (see Section \ref{Miscellaneous functions}). 
+\section{\textcolor{Chapter }{ Distance bounds on codes }}\logpage{[ 7, 1, 0 ]}
+\hyperdef{L}{X87C753EB840C34D3}{}
+{
+  \label{Distance bounds on codes} This section describes the functions that calculate estimates for upper bounds
+on the size and minimum distance of codes. Several algorithms are known to
+compute a largest number of words a code can have with given length and
+minimum distance. It is important however to understand that in some cases the
+true upper bound is unknown. A code which has a size equalto the calculated
+upper bound may not have been found. However, codes that have a larger size do
+not exist. 
+
+ A second way to obtain bounds is a table. In \textsf{GUAVA}, an extensive table is implemented for linear codes over $GF(2)$, $GF(3)$ and $GF(4)$. It contains bounds on the minimum distance for given  word length and dimension. It contains entries for word lengths less than or
+equal to $257$, $243$ and $256$ for codes over $GF(2)$, $GF(3)$ and $GF(4)$ respectively. These entries were obtained from Brouwer's tables as of 11 May
+2006. For the latest information, please see A. E. Brouwer's tables \cite{Br} on the internet. 
+
+ Firstly, we describe functions that compute specific upper bounds on the code
+size (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton}), \texttt{UpperBoundHamming} (\ref{UpperBoundHamming}), \texttt{UpperBoundJohnson} (\ref{UpperBoundJohnson}), \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin}), \texttt{UpperBoundElias} (\ref{UpperBoundElias}) and \texttt{UpperBoundGriesmer} (\ref{UpperBoundGriesmer})). 
+
+ Next we describe a function that computes \textsf{GUAVA}'s best upper bound on the code size (see \texttt{UpperBound} (\ref{UpperBound})). 
+
+ Then we describe two functions that compute a lower and upper bound on the
+minimum distance of a code (see \texttt{LowerBoundMinimumDistance} (\ref{LowerBoundMinimumDistance}) and \texttt{UpperBoundMinimumDistance} (\ref{UpperBoundMinimumDistance})). 
+
+ Finally, we describe a function that returns a lower and upper bound on the
+minimum distance with given parameters and a description of how the bounds
+were obtained (see \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance})). \index{bounds, Singleton} 
+
+\subsection{\textcolor{Chapter }{UpperBoundSingleton}}
+\logpage{[ 7, 1, 1 ]}\nobreak
+\hyperdef{L}{X8673277C7F6C04C3}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundSingleton({\slshape n, d, q})\index{UpperBoundSingleton@\texttt{UpperBoundSingleton}}
+\label{UpperBoundSingleton}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UpperBoundSingleton} returns the Singleton bound for a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}} over a field of size \mbox{\texttt{\slshape q}}. This bound is based on the shortening of codes. By shortening an $(n, M, d)$ code $d-1$ times, an $(n-d+1,M,1)$ code results, with $M \leq q^{n-d+1}$ (see \texttt{ShortenedCode} (\ref{ShortenedCode})). Thus 
+\[ M \leq q^{n-d+1}. \]
+ \index{maximum distance separable} Codes that meet this bound are called \emph{maximum distance separable} (see \texttt{IsMDSCode} (\ref{IsMDSCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundSingleton(4, 3, 5);
+  25
+  gap> C := ReedSolomonCode(4,3);; Size(C);
+  25
+  gap> IsMDSCode(C);
+  true 
+\end{Verbatim}
+ \index{bounds, Hamming} \index{bounds, sphere packing bound} \index{perfect} 
+
+\subsection{\textcolor{Chapter }{UpperBoundHamming}}
+\logpage{[ 7, 1, 2 ]}\nobreak
+\hyperdef{L}{X828095537C91FDFA}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundHamming({\slshape n, d, q})\index{UpperBoundHamming@\texttt{UpperBoundHamming}}
+\label{UpperBoundHamming}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The Hamming bound (also known as the \emph{sphere packing bound}) returns an upper bound on the size of a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}}, over a field of size \mbox{\texttt{\slshape q}}. The Hamming bound is obtained by dividing the contents of the entire space $GF(q)^n$ by the contents of a ball with radius $\lfloor(d-1) / 2\rfloor$. As all these balls are disjoint, they can never contain more than the whole
+vector space. 
+\[ M \leq {q^n \over V(n,e)}, \]
+ where $M$ is the maxmimum number of codewords and $V(n,e)$ is equal to the contents of a ball of radius $e$ (see \texttt{SphereContent} (\ref{SphereContent})). This bound is useful for small values of \mbox{\texttt{\slshape d}}. Codes for which equality holds are called \emph{perfect} (see \texttt{IsPerfectCode} (\ref{IsPerfectCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundHamming( 15, 3, 2 );
+  2048
+  gap> C := HammingCode( 4, GF(2) );
+  a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+  gap> Size( C );
+  2048 
+\end{Verbatim}
+ \index{bounds, Johnson} 
+
+\subsection{\textcolor{Chapter }{UpperBoundJohnson}}
+\logpage{[ 7, 1, 3 ]}\nobreak
+\hyperdef{L}{X82EBFAAB7F5BFD4A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundJohnson({\slshape n, d})\index{UpperBoundJohnson@\texttt{UpperBoundJohnson}}
+\label{UpperBoundJohnson}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The Johnson bound is an improved version of the Hamming bound (see \texttt{UpperBoundHamming} (\ref{UpperBoundHamming})). In addition to the Hamming bound, it takes into account the elements of the
+space outside the balls of radius $e$ around the elements of the code. The Johnson bound only works for binary
+codes. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundJohnson( 13, 5 );
+  77
+  gap> UpperBoundHamming( 13, 5, 2);
+  89   # in this case the Johnson bound is better 
+\end{Verbatim}
+ \index{bounds, Plotkin} 
+
+\subsection{\textcolor{Chapter }{UpperBoundPlotkin}}
+\logpage{[ 7, 1, 4 ]}\nobreak
+\hyperdef{L}{X7A26E2537DFF4409}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundPlotkin({\slshape n, d, q})\index{UpperBoundPlotkin@\texttt{UpperBoundPlotkin}}
+\label{UpperBoundPlotkin}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{UpperBoundPlotkin} calculates the sum of the distances of all ordered pairs of different
+codewords. It is based on the fact that the minimum distance is at most equal
+to the average distance. It is a good bound if the weights of the codewords do
+not differ much. It results in: 
+\[ M \leq {d \over {d-(1-1/q)n}}, \]
+ where $M$ is the maximum number of codewords. In this case, \mbox{\texttt{\slshape d}} must be larger than $(1-1/q)n$, but by shortening the code, the case $d \ \ \langle\ \ (1-1/q)n$ is covered. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundPlotkin( 15, 7, 2 );
+  32
+  gap> C := BCHCode( 15, 7, GF(2) );
+  a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+  gap> Size(C);
+  32
+  gap> WeightDistribution(C);
+  [ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 
+\end{Verbatim}
+  \index{bounds, Elias} 
+
+\subsection{\textcolor{Chapter }{UpperBoundElias}}
+\logpage{[ 7, 1, 5 ]}\nobreak
+\hyperdef{L}{X86A5A7C67F625A40}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundElias({\slshape n, d, q})\index{UpperBoundElias@\texttt{UpperBoundElias}}
+\label{UpperBoundElias}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The Elias bound is an improvement of the Plotkin bound (see \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin})) for large codes. Subcodes are used to decrease the size of the code, in this
+case the subcode of all codewords within a certain ball. This bound is useful
+for large codes with relatively small minimum distances. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundPlotkin( 16, 3, 2 );
+  12288
+  gap> UpperBoundElias( 16, 3, 2 );
+  10280 
+  gap> UpperBoundElias( 20, 10, 3 );
+  16255
+\end{Verbatim}
+ \index{bounds, Griesmer} 
+
+\subsection{\textcolor{Chapter }{UpperBoundGriesmer}}
+\logpage{[ 7, 1, 6 ]}\nobreak
+\hyperdef{L}{X82366C277E218130}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundGriesmer({\slshape n, d, q})\index{UpperBoundGriesmer@\texttt{UpperBoundGriesmer}}
+\label{UpperBoundGriesmer}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The Griesmer bound is valid only for linear codes. It is obtained by counting
+the number of equal symbols in each row of the generator matrix of the code.
+By omitting the coordinates in which all rows have a zero, a smaller code
+results. The Griesmer bound is obtained by repeating this proces until a
+trivial code is left in the end. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBoundGriesmer( 13, 5, 2 );
+  64
+  gap> UpperBoundGriesmer( 18, 9, 2 );
+  8        # the maximum number of words for a linear code is 8
+  gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+  20       # this non-linear code has 20 elements 
+\end{Verbatim}
+  \index{Griesmer code} 
+
+\subsection{\textcolor{Chapter }{IsGriesmerCode}}
+\logpage{[ 7, 1, 7 ]}\nobreak
+\hyperdef{L}{X8301FA9F7C6C7445}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsGriesmerCode({\slshape C})\index{IsGriesmerCode@\texttt{IsGriesmerCode}}
+\label{IsGriesmerCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsGriesmerCode} returns `true' if a linear code \mbox{\texttt{\slshape C}} is a Griesmer code, and `false' otherwise. A code is called \emph{Griesmer} if its length satisfies 
+\[ n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil. \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
+  true
+  gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
+  false 
+\end{Verbatim}
+ \index{$A(n,d)$} 
+
+\subsection{\textcolor{Chapter }{UpperBound}}
+\logpage{[ 7, 1, 8 ]}\nobreak
+\hyperdef{L}{X7A5CB74485184FEE}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBound({\slshape n, d, q})\index{UpperBound@\texttt{UpperBound}}
+\label{UpperBound}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UpperBound} returns the best known upper bound $A(n,d)$ for the size of a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}} over a field of size \mbox{\texttt{\slshape q}}. The function \texttt{UpperBound} first checks for trivial cases (like $d=1$ or $n=d$), and if the value is in the built-in table. Then it calculates the minimum
+value of the upper bound using the methods of Singleton (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})), Hamming (see \texttt{UpperBoundHamming} (\ref{UpperBoundHamming})), Johnson (see \texttt{UpperBoundJohnson} (\ref{UpperBoundJohnson})), Plotkin (see \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin})) and Elias (see \texttt{UpperBoundElias} (\ref{UpperBoundElias})). If the code is binary, $A(n, 2\cdot \ell-1) = A(n+1,2\cdot \ell)$, so the \texttt{UpperBound} takes the [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> UpperBound( 10, 3, 2 );
+  85
+  gap> UpperBound( 25, 9, 8 );
+  1211778792827540 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{LowerBoundMinimumDistance}}
+\logpage{[ 7, 1, 9 ]}\nobreak
+\hyperdef{L}{X7FDF54BA81115D88}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundMinimumDistance({\slshape C})\index{LowerBoundMinimumDistance@\texttt{LowerBoundMinimumDistance}}
+\label{LowerBoundMinimumDistance}
+}\hfill{\scriptsize (function)}}\\
+
+
+ In this form, \texttt{LowerBoundMinimumDistance} returns a lower bound for the minimum distance of code \mbox{\texttt{\slshape C}}. 
+
+ This command can also be called using the syntax \texttt{LowerBoundMinimumDistance( n, k, F )}. In this form, \texttt{LowerBoundMinimumDistance} returns a lower bound for the minimum distance of the best known linear code
+of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. It uses the mechanism explained in section \ref{BoundsMinimumDistance}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := BCHCode( 45, 7 );
+  a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
+  gap> LowerBoundMinimumDistance( C );
+  7     # designed distance is lower bound for minimum distance 
+  gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
+  10 
+\end{Verbatim}
+  \index{bound, Gilbert-Varshamov lower} 
+
+\subsection{\textcolor{Chapter }{LowerBoundGilbertVarshamov}}
+\logpage{[ 7, 1, 10 ]}\nobreak
+\hyperdef{L}{X7CF15D2084499869}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundGilbertVarshamov({\slshape n, d, q})\index{LowerBoundGilbertVarshamov@\texttt{LowerBoundGilbertVarshamov}}
+\label{LowerBoundGilbertVarshamov}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This is the lower bound due (independently) to Gilbert and Varshamov. It says
+that for each \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape d}}, there exists a linear code having length $n$ and minimum distance $d$ at least of size $q^{n-1}/ SphereContent(n-1,d-2,GF(q))$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> LowerBoundGilbertVarshamov(3,2,2);
+  4
+  gap> LowerBoundGilbertVarshamov(3,3,2);
+  1
+  gap> LowerBoundMinimumDistance(3,3,2);
+  1
+  gap> LowerBoundMinimumDistance(3,2,2);
+  2
+\end{Verbatim}
+  \index{bound, sphere packing lower} 
+
+\subsection{\textcolor{Chapter }{LowerBoundSpherePacking}}
+\logpage{[ 7, 1, 11 ]}\nobreak
+\hyperdef{L}{X8217D830871286D8}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundSpherePacking({\slshape n, d, q})\index{LowerBoundSpherePacking@\texttt{LowerBoundSpherePacking}}
+\label{LowerBoundSpherePacking}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This is the lower bound due (independently) to Gilbert and Varshamov. It says
+that for each \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape r}}, there exists an unrestricted code at least of size $q^n/ SphereContent(n,d,GF(q))$ minimum distance $d$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> LowerBoundSpherePacking(3,2,2);
+  2
+  gap> LowerBoundSpherePacking(3,3,2);
+  1
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundMinimumDistance}}
+\logpage{[ 7, 1, 12 ]}\nobreak
+\hyperdef{L}{X7C6A58327BD6B685}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundMinimumDistance({\slshape C})\index{UpperBoundMinimumDistance@\texttt{UpperBoundMinimumDistance}}
+\label{UpperBoundMinimumDistance}
+}\hfill{\scriptsize (function)}}\\
+
+
+ In this form, \texttt{UpperBoundMinimumDistance} returns an upper bound for the minimum distance of code \mbox{\texttt{\slshape C}}. For unrestricted codes, it just returns the word length. For linear codes,
+it takes the minimum of the possibly known value from the method of
+construction, the weight of the generators, and the value from the table (see \ref{BoundsMinimumDistance}). 
+
+ This command can also be called using the syntax \texttt{UpperBoundMinimumDistance( n, k, F )}. In this form, \texttt{UpperBoundMinimumDistance} returns an upper bound for the minimum distance of the best known linear code
+of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. It uses the mechanism explained in section \ref{BoundsMinimumDistance}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := BCHCode( 45, 7 );;
+  gap> UpperBoundMinimumDistance( C );
+  9 
+  gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
+  11 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{BoundsMinimumDistance}}
+\logpage{[ 7, 1, 13 ]}\nobreak
+\hyperdef{L}{X7B3858B27A9E509A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundsMinimumDistance({\slshape n, k, F})\index{BoundsMinimumDistance@\texttt{BoundsMinimumDistance}}
+\label{BoundsMinimumDistance}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{BoundsMinimumDistance} calculates a lower and upper bound for the minimum distance of an optimal
+linear code with word length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The function returns a record with the two bounds and an explanation for
+each bound. The function \texttt{Display} can be used to show the explanations. 
+
+ The values for the lower and upper bound are obtained from a table. \textsf{GUAVA} has tables containing lower and upper bounds for $q=2 (n \leq 257),  3 (n \leq 243), 4 (n \leq 256)$. (Current as of 11 May 2006.) These tables were derived from the table of
+Brouwer. (See \cite{Br}, \href{http://www.win.tue.nl/~aeb/voorlincod.html} {\texttt{http://www.win.tue.nl/\texttt{\symbol{126}}aeb/voorlincod.html}} for the most recent data.) For codes over other fields and for larger word
+lengths, trivial bounds are used. 
+
+ The resulting record can be used in the function \texttt{BestKnownLinearCode} (see \texttt{BestKnownLinearCode} (\ref{BestKnownLinearCode})) to construct a code with minimum distance equal to the lower bound. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
+  an optimal linear [7,3,d] code over GF(2) has d=4
+  ------------------------------------------------------------------------------
+  Lb(7,3)=4, by shortening of:
+  Lb(8,4)=4, u u+v construction of C1 and C2:
+  Lb(4,3)=2, dual of the repetition code
+  Lb(4,1)=4, repetition code
+  ------------------------------------------------------------------------------
+  Ub(7,3)=4, Griesmer bound
+  # The lower bound is equal to the upper bound, so a code with
+  # these parameters is optimal.
+  gap> C := BestKnownLinearCode( bounds );; Display( C );
+  a linear [7,3,4]2..3 shortened code of
+  a linear [8,4,4]2 U U+V construction code of
+  U: a cyclic [4,3,2]1 dual code of
+     a cyclic [4,1,4]2 repetition code over GF(2)
+  V: a cyclic [4,1,4]2 repetition code over GF(2)
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Covering radius bounds on codes }}\logpage{[ 7, 2, 0 ]}
+\hyperdef{L}{X817D0A647D3331EB}{}
+{
+  \label{Covering radius bounds on codes} 
+
+\subsection{\textcolor{Chapter }{BoundsCoveringRadius}}
+\logpage{[ 7, 2, 1 ]}\nobreak
+\hyperdef{L}{X8320D1C180A1AAAD}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundsCoveringRadius({\slshape C})\index{BoundsCoveringRadius@\texttt{BoundsCoveringRadius}}
+\label{BoundsCoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{BoundsCoveringRadius} returns a list of integers. The first entry of this list is the maximum of
+some lower bounds for the covering radius of \mbox{\texttt{\slshape C}}, the last entry the minimum of some upper bounds of \mbox{\texttt{\slshape C}}. 
+
+ If the covering radius of \mbox{\texttt{\slshape C}} is known, a list of length 1 is returned. \texttt{BoundsCoveringRadius} makes use of the functions \texttt{GeneralLowerBoundCoveringRadius} and \texttt{GeneralUpperBoundCoveringRadius}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
+  [ 3 .. 4 ]
+  gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
+  [ 1 ] 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{IncreaseCoveringRadiusLowerBound}}
+\logpage{[ 7, 2, 2 ]}\nobreak
+\hyperdef{L}{X7881E03E812140F4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IncreaseCoveringRadiusLowerBound({\slshape C[, stopdist][, startword]})\index{IncreaseCoveringRadiusLowerBound@\texttt{IncreaseCoveringRadiusLowerBound}}
+\label{IncreaseCoveringRadiusLowerBound}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IncreaseCoveringRadiusLowerBound} tries to increase the lower bound of the covering radius of \mbox{\texttt{\slshape C}}. It does this by means of a probabilistic algorithm. This algorithm takes a
+random word in $GF(q)^n$ (or \mbox{\texttt{\slshape startword}} if it is specified), and, by changing random coordinates, tries to get as far
+from \mbox{\texttt{\slshape C}} as possible. If changing a coordinate finds a word that has a larger distance
+to the code than the previous one, the change is made permanent, and the
+algorithm starts all over again. If changing a coordinate does not find a
+coset leader that is further away from the code, then the change is made
+permanent with a chance of 1 in 100, if it gets the word closer to the code,
+or with a chance of 1 in 10, if the word stays at the same distance.
+Otherwise, the algorithm starts again with the same word as before. 
+
+ If the algorithm did not allow changes that decrease the distance to the code,
+it might get stuck in a sub-optimal situation (the coset leader corresponding
+to such a situation - i.e. no coordinate of this coset leader can be changed
+in such a way that we get at a larger distance from the code - is called an \emph{orphan}). 
+
+ If the algorithm finds a word that has distance \mbox{\texttt{\slshape stopdist}} to the code, it ends and returns that word, which can be used for further
+investigations. 
+
+ The variable \mbox{\texttt{\slshape InfoCoveringRadius}} can be set to \mbox{\texttt{\slshape Print}} to print the maximum distance reached so far every 1000 runs. The algorithm
+can be interrupted with \textsc{ctrl-C}, allowing the user to look at the word that is currently being examined
+(called `current'), or to change the chances that the new word is made
+permanent (these are called `staychance' and `downchance'). If one of these
+variables is $i$, then it corresponds with a $i$ in 100 chance. 
+
+ At the moment, the algorithm is only useful for codes with small dimension,
+where small means that the elements of the code fit in the memory. It works
+with larger codes, however, but when you use it for codes with large
+dimension, you should be \emph{very} patient. If running the algorithm quits GAP (due to memory problems), you can
+change the global variable \mbox{\texttt{\slshape CRMemSize}} to a lower value. This might cause the algorithm to run slower, but without
+quitting GAP. The only way to find out the best value of \mbox{\texttt{\slshape CRMemSize}} is by experimenting. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> IncreaseCoveringRadiusLowerBound(C,10);
+  Number of runs: 1000  best distance so far: 3
+  Number of runs: 2000  best distance so far: 3
+  Number of changes: 100
+  Number of runs: 3000  best distance so far: 3
+  Number of runs: 4000  best distance so far: 3
+  Number of runs: 5000  best distance so far: 3
+  Number of runs: 6000  best distance so far: 3
+  Number of runs: 7000  best distance so far: 3
+  Number of changes: 200
+  Number of runs: 8000  best distance so far: 3
+  Number of runs: 9000  best distance so far: 3
+  Number of runs: 10000  best distance so far: 3
+  Number of changes: 300
+  Number of runs: 11000  best distance so far: 3
+  Number of runs: 12000  best distance so far: 3
+  Number of runs: 13000  best distance so far: 3
+  Number of changes: 400
+  Number of runs: 14000  best distance so far: 3
+  user interrupt at... 
+  #
+  # used ctrl-c to break out of execution
+  #
+  ... called from 
+  IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
+   function( arguments ) called from read-eval-loop
+  Entering break read-eval-print loop ...
+  you can 'quit;' to quit to outer loop, or
+  you can 'return;' to continue
+  brk> current;
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+  brk>
+  gap> CoveringRadius(C);
+  3
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ExhaustiveSearchCoveringRadius}}
+\logpage{[ 7, 2, 3 ]}\nobreak
+\hyperdef{L}{X7AD9F1D27C52BC0F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExhaustiveSearchCoveringRadius({\slshape C})\index{ExhaustiveSearchCoveringRadius@\texttt{ExhaustiveSearchCoveringRadius}}
+\label{ExhaustiveSearchCoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ExhaustiveSearchCoveringRadius} does an exhaustive search to find the covering radius of \mbox{\texttt{\slshape C}}. Every time a coset leader of a coset with weight $w$ is found, the function tries to find a coset leader of a coset with weight $w+1$. It does this by enumerating all words of weight $w+1$, and checking whether a word is a coset leader. The start weight is the
+current known lower bound on the covering radius. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> ExhaustiveSearchCoveringRadius(C);
+  Trying 3 ...
+  [ 3 .. 5 ]
+  gap> CoveringRadius(C);
+  3
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneralLowerBoundCoveringRadius}}
+\logpage{[ 7, 2, 4 ]}\nobreak
+\hyperdef{L}{X85D671F4824B4B0C}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralLowerBoundCoveringRadius({\slshape C})\index{GeneralLowerBoundCoveringRadius@\texttt{GeneralLowerBoundCoveringRadius}}
+\label{GeneralLowerBoundCoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralLowerBoundCoveringRadius} returns a lower bound on the covering radius of \mbox{\texttt{\slshape C}}. It uses as many functions which names start with \texttt{LowerBoundCoveringRadius} as possible to find the best known lower bound (at least that \textsf{GUAVA} knows of) together with tables for the covering radius of binary linear codes
+with length not greater than $64$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> GeneralLowerBoundCoveringRadius(C);
+  2
+  gap> CoveringRadius(C);
+  3
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GeneralUpperBoundCoveringRadius}}
+\logpage{[ 7, 2, 5 ]}\nobreak
+\hyperdef{L}{X8638F5A67D6E50C1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralUpperBoundCoveringRadius({\slshape C})\index{GeneralUpperBoundCoveringRadius@\texttt{GeneralUpperBoundCoveringRadius}}
+\label{GeneralUpperBoundCoveringRadius}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralUpperBoundCoveringRadius} returns an upper bound on the covering radius of \mbox{\texttt{\slshape C}}. It uses as many functions which names start with \texttt{UpperBoundCoveringRadius} as possible to find the best known upper bound (at least that \textsf{GUAVA} knows of). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> GeneralUpperBoundCoveringRadius(C);
+  4
+  gap> CoveringRadius(C);
+  3
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusSphereCovering}}
+\logpage{[ 7, 2, 6 ]}\nobreak
+\hyperdef{L}{X7E7FBCC87D5562AB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusSphereCovering({\slshape n, M[, F], false})\index{LowerBoundCoveringRadiusSphereCovering@\texttt{LowerBoundCoveringRadiusSphereCovering}}
+\label{LowerBoundCoveringRadiusSphereCovering}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true )}. If the last argument of \texttt{LowerBoundCoveringRadiusSphereCovering} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt [...]
+
+ \mbox{\texttt{\slshape F}} is the field over which the code is defined. If \mbox{\texttt{\slshape F}} is omitted, it is assumed that the code is over $GF(2)$. The bound is computed according to the sphere covering bound: 
+\[ M \cdot V_q(n,r) \geq q^n \]
+ where $V_q(n,r)$ is the size of a sphere of radius $r$ in $GF(q)^n$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  3
+  gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+  2
+  gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+  6
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusVanWee1}}
+\logpage{[ 7, 2, 7 ]}\nobreak
+\hyperdef{L}{X85E20C518360AB70}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusVanWee1({\slshape n, M[, F], false})\index{LowerBoundCoveringRadiusVanWee1@\texttt{LowerBoundCoveringRadiusVanWee1}}
+\label{LowerBoundCoveringRadiusVanWee1}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusVanWee1( n, r, [F,] true )}. If the last argument of \texttt{LowerBoundCoveringRadiusVanWee1} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ \mbox{\texttt{\slshape F}} is the field over which the code is defined. If \mbox{\texttt{\slshape F}} is omitted, it is assumed that the code is over $GF(2)$. 
+
+ The Van Wee bound is an improvement of the sphere covering bound: 
+\[ M \cdot \left\{ V_q(n,r) - \frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil}
+\left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right) \right\}
+\geq q^n \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  3
+  gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+  2
+  gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+  6
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusVanWee2}}
+\logpage{[ 7, 2, 8 ]}\nobreak
+\hyperdef{L}{X7C72994A825228E7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusVanWee2({\slshape n, M, false})\index{LowerBoundCoveringRadiusVanWee2@\texttt{LowerBoundCoveringRadiusVanWee2}}
+\label{LowerBoundCoveringRadiusVanWee2}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusVanWee2( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusVanWee2} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ This bound only works for binary codes. It is based on the following
+inequality: 
+\[ M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right) V_2(n,r)
++ \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) - \frac{1}{2}(r+2)(r-1) +
+\varepsilon)} \geq 2^n, \]
+ where 
+\[ \varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2 \choose 2}
+\right\rceil - {n-r+1 \choose 2}. \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  3
+  gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
+  2
+  gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
+  7
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusCountingExcess}}
+\logpage{[ 7, 2, 9 ]}\nobreak
+\hyperdef{L}{X7F95362485759ACB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusCountingExcess({\slshape n, M, false})\index{LowerBoundCoveringRadiusCountingExcess@\texttt{LowerBoundCoveringRadiusCountingExcess}}
+\label{LowerBoundCoveringRadiusCountingExcess}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called with \texttt{LowerBoundCoveringRadiusCountingExcess( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusCountingExcess} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ This bound only works for binary codes. It is based on the following
+inequality: 
+\[ M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq (\rho +
+\varepsilon) 2^n, \]
+ where 
+\[ \varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1) \]
+ and 
+\[ \rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm if}\ r = 2\\
+n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array} \right. \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  3
+  gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
+  0
+  gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
+  7
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusEmbedded1}}
+\logpage{[ 7, 2, 10 ]}\nobreak
+\hyperdef{L}{X829C14A383B5BF59}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusEmbedded1({\slshape n, M, false})\index{LowerBoundCoveringRadiusEmbedded1@\texttt{LowerBoundCoveringRadiusEmbedded1}}
+\label{LowerBoundCoveringRadiusEmbedded1}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called with \texttt{LowerBoundCoveringRadiusEmbedded1( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusEmbedded1} is 'false', then it returns a lower bound for the covering radius of a code of
+size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ This bound only works for binary codes. It is based on the following
+inequality: 
+\[ M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n, 2r+1 ) {2r
+\choose r}, \]
+ where $A(n,d)$ denotes the maximal cardinality of a (binary) code of length $n$ and minimum distance $d$. The function \texttt{UpperBound} is used to compute this value. 
+
+ Sometimes \texttt{LowerBoundCoveringRadiusEmbedded1} is better than \texttt{LowerBoundCoveringRadiusEmbedded2}, sometimes it is the other way around. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(10,5,GF(2));
+  a  [10,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  3
+  gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
+  2
+  gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
+  7
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusEmbedded2}}
+\logpage{[ 7, 2, 11 ]}\nobreak
+\hyperdef{L}{X7B0C81B88604C448}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusEmbedded2({\slshape n, M, false})\index{LowerBoundCoveringRadiusEmbedded2@\texttt{LowerBoundCoveringRadiusEmbedded2}}
+\label{LowerBoundCoveringRadiusEmbedded2}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command can also be called with \texttt{LowerBoundCoveringRadiusEmbedded2( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusEmbedded2} is 'false', then it returns a lower bound for the covering radius of a code of
+size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ This bound only works for binary codes. It is based on the following
+inequality: 
+\[ M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq 2^n - 2A( n,
+2r+1 ) {2r \choose r}, \]
+ where $A(n,d)$ denotes the maximal cardinality of a (binary) code of length $n$ and minimum distance $d$. The function \texttt{UpperBound} is used to compute this value. 
+
+ Sometimes \texttt{LowerBoundCoveringRadiusEmbedded1} is better than \texttt{LowerBoundCoveringRadiusEmbedded2}, sometimes it is the other way around. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> Size(C);
+  32
+  gap> CoveringRadius(C);
+  6
+  gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
+  2
+  gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
+  7
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusInduction}}
+\logpage{[ 7, 2, 12 ]}\nobreak
+\hyperdef{L}{X7D27F6E27B9A0D35}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusInduction({\slshape n, r})\index{LowerBoundCoveringRadiusInduction@\texttt{LowerBoundCoveringRadiusInduction}}
+\label{LowerBoundCoveringRadiusInduction}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{LowerBoundCoveringRadiusInduction} returns a lower bound for the size of a code with length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. 
+
+ If $n = 2r+2$ and $r \geq 1$, the returned value is $4$. 
+
+ If $n = 2r+3$ and $r \geq 1$, the returned value is $7$. 
+
+ If $n = 2r+4$ and $r \geq 4$, the returned value is $8$. 
+
+ Otherwise, $0$ is returned. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(C);
+  5
+  gap> LowerBoundCoveringRadiusInduction(15,6);
+  7
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusRedundancy}}
+\logpage{[ 7, 2, 13 ]}\nobreak
+\hyperdef{L}{X80F8DFAD7D67CBEC}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusRedundancy({\slshape C})\index{UpperBoundCoveringRadiusRedundancy@\texttt{UpperBoundCoveringRadiusRedundancy}}
+\label{UpperBoundCoveringRadiusRedundancy}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UpperBoundCoveringRadiusRedundancy} returns the redundancy of \mbox{\texttt{\slshape C}} as an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape C}} must be a linear code. }
+
+ \index{external distance} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(C);
+  5
+  gap> UpperBoundCoveringRadiusRedundancy(C);
+  10
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusDelsarte}}
+\logpage{[ 7, 2, 14 ]}\nobreak
+\hyperdef{L}{X832847A17FD0D142}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusDelsarte({\slshape C})\index{UpperBoundCoveringRadiusDelsarte@\texttt{UpperBoundCoveringRadiusDelsarte}}
+\label{UpperBoundCoveringRadiusDelsarte}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UpperBoundCoveringRadiusDelsarte} returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. This upper bound is equal to the external distance of \mbox{\texttt{\slshape C}}, this is the minimum distance of the dual code, if \mbox{\texttt{\slshape C}} is a linear code. 
+
+ This is described in Theorem 11.3.3 of \cite{HP03}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(C);
+  5
+  gap> UpperBoundCoveringRadiusDelsarte(C);
+  13
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusStrength}}
+\logpage{[ 7, 2, 15 ]}\nobreak
+\hyperdef{L}{X86F10D9E79AB8796}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusStrength({\slshape C})\index{UpperBoundCoveringRadiusStrength@\texttt{UpperBoundCoveringRadiusStrength}}
+\label{UpperBoundCoveringRadiusStrength}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{UpperBoundCoveringRadiusStrength} returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. 
+
+ First the code is punctured at the zero coordinates (i.e. the coordinates
+where all codewords have a zero). If the remaining code has \emph{strength} 1 (i.e. each coordinate contains each element of the field an equal number of
+times), then it returns $\frac{q-1}{q}m + (n-m)$ (where $q$ is the size of the field and $m$ is the length of punctured code), otherwise it returns $n$. This bound works for all codes. }
+
+ \index{strength} 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(C);
+  5
+  gap> UpperBoundCoveringRadiusStrength(C);
+  7
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusGriesmerLike}}
+\logpage{[ 7, 2, 16 ]}\nobreak
+\hyperdef{L}{X8585C6A982489FC3}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusGriesmerLike({\slshape C})\index{UpperBoundCoveringRadiusGriesmerLike@\texttt{UpperBoundCoveringRadiusGriesmerLike}}
+\label{UpperBoundCoveringRadiusGriesmerLike}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}, which must be linear, in a Griesmer-like fashion. It returns 
+\[ n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil \]
+ }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=RandomLinearCode(15,5,GF(2));
+  a  [15,5,?] randomly generated code over GF(2)
+  gap> CoveringRadius(C);
+  5
+  gap> UpperBoundCoveringRadiusGriesmerLike(C);
+  9
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusCyclicCode}}
+\logpage{[ 7, 2, 17 ]}\nobreak
+\hyperdef{L}{X82A38F5F858CF3FC}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusCyclicCode({\slshape C})\index{UpperBoundCoveringRadiusCyclicCode@\texttt{UpperBoundCoveringRadiusCyclicCode}}
+\label{UpperBoundCoveringRadiusCyclicCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}, which must be a cyclic code. It returns 
+\[ n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil, \]
+ where $g(x)$ is the generator polynomial of \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C:=CyclicCodes(15,GF(2))[3];
+  a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
+  gap> CoveringRadius(C);
+  3
+  gap> UpperBoundCoveringRadiusCyclicCode(C);
+  3
+  
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Special matrices in \textsf{GUAVA} }}\logpage{[ 7, 3, 0 ]}
+\hyperdef{L}{X806EBEC77C16E657}{}
+{
+  \label{Special matrices in GUAVA} This section explains functions that work with special matrices \textsf{GUAVA} needs for several codes. 
+
+ Firstly, we describe some matrix generating functions (see \texttt{KrawtchoukMat} (\ref{KrawtchoukMat}), \texttt{GrayMat} (\ref{GrayMat}), \texttt{SylvesterMat} (\ref{SylvesterMat}), \texttt{HadamardMat} (\ref{HadamardMat}) and \texttt{MOLS} (\ref{MOLS})). 
+
+ Next we describe two functions regarding a standard form of matrices (see \texttt{PutStandardForm} (\ref{PutStandardForm}) and \texttt{IsInStandardForm} (\ref{IsInStandardForm})). 
+
+ Then we describe functions that return a matrix after a manipulation (see \texttt{PermutedCols} (\ref{PermutedCols}), \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat}) and \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat})). 
+
+ Finally, we describe functions that do some tests on matrices (see \texttt{IsLatinSquare} (\ref{IsLatinSquare}) and \texttt{AreMOLS} (\ref{AreMOLS})). 
+
+\subsection{\textcolor{Chapter }{KrawtchoukMat}}
+\logpage{[ 7, 3, 1 ]}\nobreak
+\hyperdef{L}{X82899B64802A4BCE}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{KrawtchoukMat({\slshape n, q})\index{KrawtchoukMat@\texttt{KrawtchoukMat}}
+\label{KrawtchoukMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{KrawtchoukMat} returns the $n+1$ by $n+1$ matrix $K=(k_{ij})$ defined by $k_{ij}=K_i(j)$ for $i,j=0,...,n$. $K_i(j)$ is the Krawtchouk number (see \texttt{Krawtchouk} (\ref{Krawtchouk})). \mbox{\texttt{\slshape n}} must be a positive integer and \mbox{\texttt{\slshape q}} a prime power. The Krawtchouk matrix is used in the \emph{MacWilliams identities}, defining the relation between the weight distribution of a code of length \mbox{\texttt{\slshape n}} over a field of size \mbox [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> PrintArray( KrawtchoukMat( 3, 2 ) );
+  [ [   1,   1,   1,   1 ],
+    [   3,   1,  -1,  -3 ],
+    [   3,  -1,  -1,   3 ],
+    [   1,  -1,   1,  -1 ] ]
+  gap> C := HammingCode( 3 );; a := WeightDistribution( C );
+  [ 1, 0, 0, 7, 7, 0, 0, 1 ]
+  gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+  gap> k := Dimension( C );;
+  gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
+  [ 1, 0, 0, 0, 7, 0, 0, 0 ]
+  gap> WeightDistribution( DualCode( C ) );
+  [ 1, 0, 0, 0, 7, 0, 0, 0 ] 
+\end{Verbatim}
+  \index{Gary code} 
+
+\subsection{\textcolor{Chapter }{GrayMat}}
+\logpage{[ 7, 3, 2 ]}\nobreak
+\hyperdef{L}{X87AFE2C078031CE4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GrayMat({\slshape n, F})\index{GrayMat@\texttt{GrayMat}}
+\label{GrayMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GrayMat} returns a list of all different vectors (see GAP's \texttt{Vectors} command) of length \mbox{\texttt{\slshape n}} over the field \mbox{\texttt{\slshape F}}, using Gray ordering. \mbox{\texttt{\slshape n}} must be a positive integer. This order has the property that subsequent
+vectors differ in exactly one coordinate. The first vector is always the null
+vector. Each call to \texttt{GrayMat} returns a new matrix, so it is safe to modify the result. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> GrayMat(3);
+  [ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
+    [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
+    [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
+    [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
+  gap> G := GrayMat( 4, GF(4) );; Length(G);
+  256          # the length of a GrayMat is always q^n
+  gap> G[101] - G[100];
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{SylvesterMat}}
+\logpage{[ 7, 3, 3 ]}\nobreak
+\hyperdef{L}{X7E1E7C5287919CDB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SylvesterMat({\slshape n})\index{SylvesterMat@\texttt{SylvesterMat}}
+\label{SylvesterMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{SylvesterMat} returns the $n\times n$ Sylvester matrix of order \mbox{\texttt{\slshape n}}. This is a special case of the Hadamard matrices (see \texttt{HadamardMat} (\ref{HadamardMat})). For this construction, \mbox{\texttt{\slshape n}} must be a power of $2$. Each call to \texttt{SylvesterMat} returns a new matrix, so it is safe to modify the result. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> PrintArray(SylvesterMat(2));
+  [ [   1,   1 ],
+    [   1,  -1 ] ]
+  gap> PrintArray( SylvesterMat(4) );
+  [ [   1,   1,   1,   1 ],
+    [   1,  -1,   1,  -1 ],
+    [   1,   1,  -1,  -1 ],
+    [   1,  -1,  -1,   1 ] ] 
+\end{Verbatim}
+ \index{Hadamard matrix} 
+
+\subsection{\textcolor{Chapter }{HadamardMat}}
+\logpage{[ 7, 3, 4 ]}\nobreak
+\hyperdef{L}{X8014A1F181ECD8AA}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HadamardMat({\slshape n})\index{HadamardMat@\texttt{HadamardMat}}
+\label{HadamardMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{HadamardMat} returns a Hadamard matrix of order \mbox{\texttt{\slshape n}}. This is an $n\times n$ matrix with the property that the matrix multiplied by its transpose returns \mbox{\texttt{\slshape n}} times the identity matrix. This is only possible for $n=1, n=2$ or in cases where \mbox{\texttt{\slshape n}} is a multiple of $4$. If the matrix does not exist or is not known (as of 1998), \texttt{HadamardMat} returns an error. A large number of construction methods is known to create
+these matrices for different orders. \texttt{HadamardMat} makes use of two construction methods (among which the Sylvester construction
+-- see \texttt{SylvesterMat} (\ref{SylvesterMat})). These methods cover most of the possible Hadamard matrices, although some
+special algorithms have not been implemented yet. The following orders less
+than $100$ do not yet have an implementation for a Hadamard matrix in \textsf{GUAVA}: $28, 36, 52, 76, 92$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> C := HadamardMat(8);; PrintArray(C);
+  [ [   1,   1,   1,   1,   1,   1,   1,   1 ],
+    [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
+    [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
+    [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
+    [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
+    [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
+    [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
+    [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
+  gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
+  true 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{VandermondeMat}}
+\logpage{[ 7, 3, 5 ]}\nobreak
+\hyperdef{L}{X797F43607AD8660D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VandermondeMat({\slshape X, a})\index{VandermondeMat@\texttt{VandermondeMat}}
+\label{VandermondeMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{VandermondeMat} returns the $(a+1)\times n$ matrix of powers $x_i^j$ where \mbox{\texttt{\slshape X}} is a list of elements of a field, $X=\{ x_1,...,x_n\}$, and \mbox{\texttt{\slshape a}} is a non-negative integer. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+  [ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
+    [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
+  gap> Display(M);
+   1 2 4
+   1 4 1
+   1 1 1
+   1 3 4
+\end{Verbatim}
+  \index{standard form} 
+
+\subsection{\textcolor{Chapter }{PutStandardForm}}
+\logpage{[ 7, 3, 6 ]}\nobreak
+\hyperdef{L}{X7B47D82485B66F1D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PutStandardForm({\slshape M[, idleft]})\index{PutStandardForm@\texttt{PutStandardForm}}
+\label{PutStandardForm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ We say that a $k\times n$ matrix is in \emph{standard form} if it is equal to the block matrix $(I\ |\ A)$, for some $k\times (n-k)$ matrix $A$ and where $I$ is the $k\times k$ identity matrix. It follows from a basis result in linear algebra that, after
+a possible permutation of the columns, using elementary row operations, every
+matrix can be reduced to standard form. \texttt{PutStandardForm} puts a matrix \mbox{\texttt{\slshape M}} in standard form, and returns the permutation needed to do so. \mbox{\texttt{\slshape idleft}} is a boolean that sets the position of the identity matrix in \mbox{\texttt{\slshape M}}. (The default for \mbox{\texttt{\slshape idleft}} is `true'.) If \mbox{\texttt{\slshape idleft}} is set to `true', the identity matrix is put on the left side of \mbox{\texttt{\slshape M}}. Otherwise, i [...]
+a check matrix of a code into standard form.) The function \texttt{BaseMat} also returns a similar standard form, but does not apply column permutations.
+The rows of the matrix still span the same vector space after \texttt{BaseMat}, but after calling \texttt{PutStandardForm}, this is not necessarily true. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
+  [ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+    [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
+  gap> PutStandardForm(M);                   # identity at the left side
+  (2,3)
+  gap> PrintArray(M);
+  [ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+    [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+  gap> PutStandardForm(M, false);            # identity at the right side
+  (1,4,3)
+  gap> PrintArray(M);
+  [ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
+    [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+  gap> C := BestKnownLinearCode( 23, 12, GF(2) );
+  a linear [23,12,7]3 punctured code
+  gap> G:=MutableCopyMat(GeneratorMat(C));;
+  gap> PutStandardForm(G);
+  ()
+  gap> Display(G);
+   1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+   . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+   . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+   . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+   . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+   . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+   . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+   . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+   . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+   . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+   . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+   . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{IsInStandardForm}}
+\logpage{[ 7, 3, 7 ]}\nobreak
+\hyperdef{L}{X7D4EDA0A854EBFEF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsInStandardForm({\slshape M[, idleft]})\index{IsInStandardForm@\texttt{IsInStandardForm}}
+\label{IsInStandardForm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsInStandardForm} determines if \mbox{\texttt{\slshape M}} is in standard form. \mbox{\texttt{\slshape idleft}} is a boolean that indicates the position of the identity matrix in \mbox{\texttt{\slshape M}}, as in \texttt{PutStandardForm} (see \texttt{PutStandardForm} (\ref{PutStandardForm})). \texttt{IsInStandardForm} checks if the identity matrix is at the left side of \mbox{\texttt{\slshape M}}, otherwise if it is at the right side. The elements of \mbox{\texttt{\slshape M}} m [...]
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsInStandardForm(IdentityMat(7, GF(2)));
+  true
+  gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
+  true
+  gap> IsInStandardForm([[1, 3, 2, 7]]);
+  true
+  gap> IsInStandardForm(HadamardMat(4));
+  false 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{PermutedCols}}
+\logpage{[ 7, 3, 8 ]}\nobreak
+\hyperdef{L}{X7A97AD477E7638DE}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutedCols({\slshape M, P})\index{PermutedCols@\texttt{PermutedCols}}
+\label{PermutedCols}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PermutedCols} returns a matrix \mbox{\texttt{\slshape M}} with a permutation \mbox{\texttt{\slshape P}} applied to its columns. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
+  [ [  1,  2,  3,  4 ],
+    [  1,  2,  3,  4 ] ]
+  gap> PrintArray(PermutedCols(M, (1,2,3)));
+  [ [  3,  1,  2,  4 ],
+    [  3,  1,  2,  4 ] ] 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{VerticalConversionFieldMat}}
+\logpage{[ 7, 3, 9 ]}\nobreak
+\hyperdef{L}{X7B68119F85E9EC6D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VerticalConversionFieldMat({\slshape M, F})\index{VerticalConversionFieldMat@\texttt{VerticalConversionFieldMat}}
+\label{VerticalConversionFieldMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{VerticalConversionFieldMat} returns the matrix \mbox{\texttt{\slshape M}} with its elements converted from a field $F=GF(q^m)$, $q$ prime, to a field $GF(q)$. Each element is replaced by its representation over the latter field, placed
+vertically in the matrix, using the $GF(p)$-vector space isomorphism 
+\[ [...] : GF(q)\rightarrow GF(p)^m, \]
+ with $q=p^m$. 
+
+ If \mbox{\texttt{\slshape M}} is a $k$ by $n$ matrix, the result is a $k\cdot m \times n$ matrix, since each element of $GF(q^m)$ can be represented in $GF(q)$ using $m$ elements. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+  [ [    Z(3^2),  Z(3^2)^5 ],
+    [  Z(3^2)^5,    Z(3^2) ] ]
+  gap> DefaultField( Flat(M) );
+  GF(3^2)
+  gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
+  [ [  0*Z(3),  0*Z(3) ],
+    [  Z(3)^0,    Z(3) ],
+    [  0*Z(3),  0*Z(3) ],
+    [    Z(3),  Z(3)^0 ] ]
+  gap> DefaultField( Flat(VCFM) );
+  GF(3) 
+\end{Verbatim}
+ A similar function is \texttt{HorizontalConversionFieldMat} (see \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat})). 
+
+\subsection{\textcolor{Chapter }{HorizontalConversionFieldMat}}
+\logpage{[ 7, 3, 10 ]}\nobreak
+\hyperdef{L}{X8033E9A67BA155C8}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HorizontalConversionFieldMat({\slshape M, F})\index{HorizontalConversionFieldMat@\texttt{HorizontalConversionFieldMat}}
+\label{HorizontalConversionFieldMat}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{HorizontalConversionFieldMat} returns the matrix \mbox{\texttt{\slshape M}} with its elements converted from a field $F=GF(q^m)$, $q$ prime, to a field $GF(q)$. Each element is replaced by its representation over the latter field, placed
+horizontally in the matrix. 
+
+ If \mbox{\texttt{\slshape M}} is a $k \times n$ matrix, the result is a $k\times m\times n\cdot m$ matrix. The new word length of the resulting code is equal to $n\cdot m$, because each element of $GF(q^m)$ can be represented in $GF(q)$ using $m$ elements. The new dimension is equal to $k\times m$ because the new matrix should be a basis for the same number of vectors as the
+old one. 
+
+ \texttt{ConversionFieldCode} uses horizontal conversion to convert a code (see \texttt{ConversionFieldCode} (\ref{ConversionFieldCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+  [ [    Z(3^2),  Z(3^2)^5 ],
+    [  Z(3^2)^5,    Z(3^2) ] ]
+  gap> DefaultField( Flat(M) );
+  GF(3^2)
+  gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
+  [ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
+    [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
+    [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
+    [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
+  gap> DefaultField( Flat(HCFM) );
+  GF(3) 
+\end{Verbatim}
+ A similar function is \texttt{VerticalConversionFieldMat} (see \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat})). \index{mutually orthogonal Latin squares} \index{Latin square} 
+
+\subsection{\textcolor{Chapter }{MOLS}}
+\logpage{[ 7, 3, 11 ]}\nobreak
+\hyperdef{L}{X804AAFF2867080F7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MOLS({\slshape q[, n]})\index{MOLS@\texttt{MOLS}}
+\label{MOLS}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{MOLS} returns a list of \mbox{\texttt{\slshape n}} \emph{Mutually Orthogonal Latin Squares} (MOLS). A \emph{Latin square} of order \mbox{\texttt{\slshape q}} is a $q\times q$ matrix whose entries are from a set $F_{q}$ of \mbox{\texttt{\slshape q}} distinct symbols (\textsf{GUAVA} uses the integers from $0$ to \mbox{\texttt{\slshape q}}) such that each row and each column of the matrix contains each symbol
+exactly once. 
+
+ A set of Latin squares is a set of MOLS if and only if for each pair of Latin
+squares in this set, every ordered pair of elements that are in the same
+position in these matrices occurs exactly once. 
+
+ \mbox{\texttt{\slshape n}} must be less than \mbox{\texttt{\slshape q}}. If \mbox{\texttt{\slshape n}} is omitted, two MOLS are returned. If \mbox{\texttt{\slshape q}} is not a prime power, at most $2$ MOLS can be created. For all values of \mbox{\texttt{\slshape q}} with $q > 2$ and $q \neq 6$, a list of MOLS can be constructed. However, \textsf{GUAVA} does not yet construct MOLS for $q\equiv 2 \pmod 4$. If it is not possible to construct \mbox{\texttt{\slshape n}} MOLS, the function r [...]
+
+ MOLS are used to create \mbox{\texttt{\slshape q}}-ary codes (see \texttt{MOLSCode} (\ref{MOLSCode})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
+  [ [  0,  1,  2,  3 ],
+    [  1,  0,  3,  2 ],
+    [  2,  3,  0,  1 ],
+    [  3,  2,  1,  0 ] ]
+  gap> PrintArray( M[2] );
+  [ [  0,  2,  3,  1 ],
+    [  1,  3,  2,  0 ],
+    [  2,  0,  1,  3 ],
+    [  3,  1,  0,  2 ] ]
+  gap> PrintArray( M[3] );
+  [ [  0,  3,  1,  2 ],
+    [  1,  2,  0,  3 ],
+    [  2,  1,  3,  0 ],
+    [  3,  0,  2,  1 ] ]
+  gap> MOLS( 12, 3 );
+  false 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{IsLatinSquare}}
+\logpage{[ 7, 3, 12 ]}\nobreak
+\hyperdef{L}{X7F34306B81DC2776}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsLatinSquare({\slshape M})\index{IsLatinSquare@\texttt{IsLatinSquare}}
+\label{IsLatinSquare}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsLatinSquare} determines if a matrix \mbox{\texttt{\slshape M}} is a Latin square. For a Latin square of size $n\times n$, each row and each column contains all the integers $1,\dots,n$ exactly once. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsLatinSquare([[1,2],[2,1]]);
+  true
+  gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
+  false 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{AreMOLS}}
+\logpage{[ 7, 3, 13 ]}\nobreak
+\hyperdef{L}{X81B9B40B7B2D97D5}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AreMOLS({\slshape L})\index{AreMOLS@\texttt{AreMOLS}}
+\label{AreMOLS}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{AreMOLS} determines if \mbox{\texttt{\slshape L}} is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin
+squares in this list, the function checks if each ordered pair of elements
+that are in the same position in these matrices occurs exactly once. The
+function \texttt{MOLS} creates MOLS (see \texttt{MOLS} (\ref{MOLS})). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> M := MOLS(4,2);
+  [ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
+    [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
+  gap> AreMOLS(M);
+  true 
+\end{Verbatim}
+ }
+
+ 
+\section{\textcolor{Chapter }{ Some functions related to the norm of a code }}\logpage{[ 7, 4, 0 ]}
+\hyperdef{L}{X7AB5E5CE7FDF7132}{}
+{
+  \label{Some functions related to the norm of a code} In this section, some functions that can be used to compute the norm of a code
+and to decide upon its normality are discussed. Typically, these are applied
+to binary linear codes. The definitions of this section were introduced in
+Graham and Sloane \cite{GS85}. 
+
+\subsection{\textcolor{Chapter }{CoordinateNorm}}
+\logpage{[ 7, 4, 1 ]}\nobreak
+\hyperdef{L}{X8032E53078264ABB}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoordinateNorm({\slshape C, coord})\index{CoordinateNorm@\texttt{CoordinateNorm}}
+\label{CoordinateNorm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CoordinateNorm} returns the norm of \mbox{\texttt{\slshape C}} with respect to coordinate \mbox{\texttt{\slshape coord}}. If $C_a = \{ c \in C \ |\ c_{coord} = a \}$, then the norm of \mbox{\texttt{\slshape C}} with respect to \mbox{\texttt{\slshape coord}} is defined as 
+\[ \max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a), \]
+ with the convention that $d(x,C_a) = n$ if $C_a$ is empty. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
+  3 
+\end{Verbatim}
+ \index{norm of a code} 
+
+\subsection{\textcolor{Chapter }{CodeNorm}}
+\logpage{[ 7, 4, 2 ]}\nobreak
+\hyperdef{L}{X7ED2EF368203AF47}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeNorm({\slshape C})\index{CodeNorm@\texttt{CodeNorm}}
+\label{CodeNorm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodeNorm} returns the norm of \mbox{\texttt{\slshape C}}. The \emph{norm} of a code is defined as the minimum of the norms for the respective
+coordinates of the code. In effect, for each coordinate \texttt{CoordinateNorm} is called, and the minimum of the calculated numbers is returned. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CodeNorm( HammingCode( 3, GF(2) ) );
+  3 
+\end{Verbatim}
+ \index{acceptable coordinate} 
+
+\subsection{\textcolor{Chapter }{IsCoordinateAcceptable}}
+\logpage{[ 7, 4, 3 ]}\nobreak
+\hyperdef{L}{X7D24F8BF7F9A7BF1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCoordinateAcceptable({\slshape C, coord})\index{IsCoordinateAcceptable@\texttt{IsCoordinateAcceptable}}
+\label{IsCoordinateAcceptable}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsCoordinateAcceptable} returns `true' if coordinate \mbox{\texttt{\slshape coord}} of \mbox{\texttt{\slshape C}} is acceptable. A coordinate is called \emph{acceptable} if the norm of the code with respect to that coordinate is not more than two
+times the covering radius of the code plus one. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
+  true 
+\end{Verbatim}
+ \index{acceptable coordinate} 
+
+\subsection{\textcolor{Chapter }{GeneralizedCodeNorm}}
+\logpage{[ 7, 4, 4 ]}\nobreak
+\hyperdef{L}{X87039FD179AD3009}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedCodeNorm({\slshape C, subcode1, subscode2, ..., subcodek})\index{GeneralizedCodeNorm@\texttt{GeneralizedCodeNorm}}
+\label{GeneralizedCodeNorm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{GeneralizedCodeNorm} returns the \mbox{\texttt{\slshape k}}-norm of \mbox{\texttt{\slshape C}} with respect to \mbox{\texttt{\slshape k}} subcodes. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> c := RepetitionCode( 7, GF(2) );;
+  gap> ham := HammingCode( 3, GF(2) );;
+  gap> d := EvenWeightSubcode( ham );;
+  gap> e := ConstantWeightSubcode( ham, 3 );;
+  gap> GeneralizedCodeNorm( ham, c, d, e );
+  4 
+\end{Verbatim}
+ \index{normal code} 
+
+\subsection{\textcolor{Chapter }{IsNormalCode}}
+\logpage{[ 7, 4, 5 ]}\nobreak
+\hyperdef{L}{X80283A2F7C8101BD}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsNormalCode({\slshape C})\index{IsNormalCode@\texttt{IsNormalCode}}
+\label{IsNormalCode}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{IsNormalCode} returns `true' if \mbox{\texttt{\slshape C}} is normal. A code is called \emph{normal} if the norm of the code is not more than two times the covering radius of the
+code plus one. Almost all codes are normal, however some (non-linear) abnormal
+codes have been found. 
+
+ Often, it is difficult to find out whether a code is normal, because it
+involves computing the covering radius. However, \texttt{IsNormalCode} uses much information from the literature (in particular, \cite{GS85}) about normality for certain code parameters. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IsNormalCode( HammingCode( 3, GF(2) ) );
+  true 
+\end{Verbatim}
+ }
+
+ 
+\section{\textcolor{Chapter }{ Miscellaneous functions }}\logpage{[ 7, 5, 0 ]}
+\hyperdef{L}{X8308D685809A4E2F}{}
+{
+  \label{Miscellaneous functions} In this section we describe several vector space functions \textsf{GUAVA} uses for constructing codes or performing calculations with codes. 
+
+ In this section, some new miscellaneous functions are described, including
+weight enumerators, the MacWilliams-transform and affinity and almost affinity
+of codes. \index{weight enumerator polynomial} 
+
+\subsection{\textcolor{Chapter }{CodeWeightEnumerator}}
+\logpage{[ 7, 5, 1 ]}\nobreak
+\hyperdef{L}{X871286437DE7A6A4}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeWeightEnumerator({\slshape C})\index{CodeWeightEnumerator@\texttt{CodeWeightEnumerator}}
+\label{CodeWeightEnumerator}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodeWeightEnumerator} returns a polynomial of the following form: 
+\[ f(x) = \sum_{i=0}^{n} A_i x^i, \]
+ where $A_i$ is the number of codewords in \mbox{\texttt{\slshape C}} with weight $i$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
+  > [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
+  x^3 + x^2 + x + 1
+  gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
+  x^7 + 7*x^4 + 7*x^3 + 1 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{CodeDistanceEnumerator}}
+\logpage{[ 7, 5, 2 ]}\nobreak
+\hyperdef{L}{X84DA928083B103A0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeDistanceEnumerator({\slshape C, w})\index{CodeDistanceEnumerator@\texttt{CodeDistanceEnumerator}}
+\label{CodeDistanceEnumerator}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodeDistanceEnumerator} returns a polynomial of the following form: 
+\[ f(x) = \sum_{i=0}^{n} B_i x^i, \]
+ where $B_i$ is the number of codewords with distance $i$ to \mbox{\texttt{\slshape w}}. 
+
+ If \mbox{\texttt{\slshape w}} is a codeword, then \texttt{CodeDistanceEnumerator} returns the same polynomial as \texttt{CodeWeightEnumerator}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
+  x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
+  gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
+  x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'
+\end{Verbatim}
+ \index{MacWilliams transform} 
+
+\subsection{\textcolor{Chapter }{CodeMacWilliamsTransform}}
+\logpage{[ 7, 5, 3 ]}\nobreak
+\hyperdef{L}{X84B2BE66780EFBF9}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeMacWilliamsTransform({\slshape C})\index{CodeMacWilliamsTransform@\texttt{CodeMacWilliamsTransform}}
+\label{CodeMacWilliamsTransform}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodeMacWilliamsTransform} returns a polynomial of the following form: 
+\[ f(x) = \sum_{i=0}^{n} C_i x^i, \]
+ where $C_i$ is the number of codewords with weight $i$ in the \emph{dual} code of \mbox{\texttt{\slshape C}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
+  7*x^4 + 1 
+\end{Verbatim}
+ \index{density of a code} 
+
+\subsection{\textcolor{Chapter }{CodeDensity}}
+\logpage{[ 7, 5, 4 ]}\nobreak
+\hyperdef{L}{X7903286078F8051B}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeDensity({\slshape C})\index{CodeDensity@\texttt{CodeDensity}}
+\label{CodeDensity}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CodeDensity} returns the \emph{density} of \mbox{\texttt{\slshape C}}. The density of a code is defined as 
+\[ \frac{M \cdot V_q(n,t)}{q^n}, \]
+ where $M$ is the size of the code, $V_q(n,t)$ is the size of a sphere of radius $t$ in $GF(q^n)$ (which may be computed using \texttt{SphereContent}), $t$ is the covering radius of the code and $n$ is the length of the code. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CodeDensity( HammingCode( 3, GF(2) ) );
+  1
+  gap> CodeDensity( ReedMullerCode( 1, 4 ) );
+  14893/2048 
+\end{Verbatim}
+ \index{perfect code} 
+
+\subsection{\textcolor{Chapter }{SphereContent}}
+\logpage{[ 7, 5, 5 ]}\nobreak
+\hyperdef{L}{X85303BAE7BD46D81}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SphereContent({\slshape n, t, F})\index{SphereContent@\texttt{SphereContent}}
+\label{SphereContent}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{SphereContent} returns the content of a ball of radius \mbox{\texttt{\slshape t}} around an arbitrary element of the vectorspace $F^n$. This is the cardinality of the set of all elements of $F^n$ that are at distance (see \texttt{DistanceCodeword} (\ref{DistanceCodeword}) less than or equal to \mbox{\texttt{\slshape t}} from an element of $F^n$. 
+
+ In the context of codes, the function is used to determine if a code is
+perfect. A code is \emph{perfect} if spheres of radius $t$ around all codewords partition the whole ambient vector space, where \emph{t} is the number of errors the code can correct. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> SphereContent( 15, 0, GF(2) );
+  1    # Only one word with distance 0, which is the word itself
+  gap> SphereContent( 11, 3, GF(4) );
+  4984
+  gap> C := HammingCode(5);
+  a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+  #the minimum distance is 3, so the code can correct one error
+  gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
+  true 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{Krawtchouk}}
+\logpage{[ 7, 5, 6 ]}\nobreak
+\hyperdef{L}{X7ACDC5377CD17451}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Krawtchouk({\slshape k, i, n, q})\index{Krawtchouk@\texttt{Krawtchouk}}
+\label{Krawtchouk}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{Krawtchouk} returns the Krawtchouk number $K_{k}(i)$. \mbox{\texttt{\slshape q}} must be a prime power, \mbox{\texttt{\slshape n}} must be a positive integer, \mbox{\texttt{\slshape k}} must be a non-negative integer less then or equal to \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape i}} can be any integer. (See \texttt{KrawtchoukMat} (\ref{KrawtchoukMat})). This number is the value at $x=i$ of the polynomial 
+\[ K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j), \]
+ where \$b(v,u)=u!/(v!(v-u)!)\$ is the binomial coefficient if \$u,v\$ are
+integers. For more properties of these polynomials, see \cite{MS83}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> Krawtchouk( 2, 0, 3, 2);
+  3 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{PrimitiveUnityRoot}}
+\logpage{[ 7, 5, 7 ]}\nobreak
+\hyperdef{L}{X827E39957A87EB51}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PrimitiveUnityRoot({\slshape F, n})\index{PrimitiveUnityRoot@\texttt{PrimitiveUnityRoot}}
+\label{PrimitiveUnityRoot}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PrimitiveUnityRoot} returns a primitive \mbox{\texttt{\slshape n}}-th root of unity in an extension field of \mbox{\texttt{\slshape F}}. This is a finite field element $a$ with the property $a^n=1$ in \mbox{\texttt{\slshape F}}, and \mbox{\texttt{\slshape n}} is the smallest integer such that this equality holds. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> PrimitiveUnityRoot( GF(2), 15 );
+  Z(2^4)
+  gap> last^15;
+  Z(2)^0
+  gap> PrimitiveUnityRoot( GF(8), 21 );
+  Z(2^6)^3 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{PrimitivePolynomialsNr}}
+\logpage{[ 7, 5, 8 ]}\nobreak
+\hyperdef{L}{X78AEA40F7AD9D541}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PrimitivePolynomialsNr({\slshape n, F})\index{PrimitivePolynomialsNr@\texttt{PrimitivePolynomialsNr}}
+\label{PrimitivePolynomialsNr}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PrimitivePolynomialsNr} returns the number of irreducible polynomials over $F=GF(q)$ of degree \mbox{\texttt{\slshape n}} with (maximum) period $q^n-1$. (According to a theorem of S. Golomb, this is $\phi(p^n-1)/n$.) 
+
+ See also the GAP function \texttt{RandomPrimitivePolynomial}, \texttt{RandomPrimitivePolynomial} (\ref{RandomPrimitivePolynomial}). }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> PrimitivePolynomialsNr(3,4);
+  12
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{IrreduciblePolynomialsNr}}
+\logpage{[ 7, 5, 9 ]}\nobreak
+\hyperdef{L}{X7A2B54EF868AA752}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IrreduciblePolynomialsNr({\slshape n, F})\index{IrreduciblePolynomialsNr@\texttt{IrreduciblePolynomialsNr}}
+\label{IrreduciblePolynomialsNr}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{PrimitivePolynomialsNr} returns the number of irreducible polynomials over $F=GF(q)$ of degree \mbox{\texttt{\slshape n}}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> IrreduciblePolynomialsNr(3,4);
+  20
+  
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{MatrixRepresentationOfElement}}
+\logpage{[ 7, 5, 10 ]}\nobreak
+\hyperdef{L}{X7B50D3417F6FD7C6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixRepresentationOfElement({\slshape a, F})\index{MatrixRepresentationOfElement@\texttt{MatrixRepresentationOfElement}}
+\label{MatrixRepresentationOfElement}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Here \mbox{\texttt{\slshape F}} is either a finite extension of the ``base field'' $GF(p)$ or of the rationals ${\mathbb{Q}}$, and $a\in F$. The command \texttt{MatrixRepresentationOfElement} returns a matrix representation of \mbox{\texttt{\slshape a}} over the base field. 
+
+ If the element \mbox{\texttt{\slshape a}} is defined over the base field then it returns the corresponding $1\times 1$ matrix. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> a:=Random(GF(4));
+  0*Z(2)
+  gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+   .
+  gap> a:=Random(GF(4));
+  Z(2^2)
+  gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+   . 1
+   1 1
+  gap>
+  
+\end{Verbatim}
+  \index{reciprocal polynomial} 
+
+\subsection{\textcolor{Chapter }{ReciprocalPolynomial}}
+\logpage{[ 7, 5, 11 ]}\nobreak
+\hyperdef{L}{X7805D2BB7CE4D455}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReciprocalPolynomial({\slshape P})\index{ReciprocalPolynomial@\texttt{ReciprocalPolynomial}}
+\label{ReciprocalPolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{ReciprocalPolynomial} returns the \emph{reciprocal} of polynomial \mbox{\texttt{\slshape P}}. This is a polynomial with coefficients of \mbox{\texttt{\slshape P}} in the reverse order. So if $P=a_0 + a_1 X + ... + a_{n} X^{n}$, the reciprocal polynomial is $P'=a_{n} + a_{n-1} X + ... + a_0 X^{n}$. 
+
+ This command can also be called using the syntax \texttt{ReciprocalPolynomial( P , n )}. In this form, the number of coefficients of \mbox{\texttt{\slshape P}} is assumed to be less than or equal to $n+1$ (with zero coefficients added in the highest degrees, if necessary).
+Therefore, the reciprocal polynomial also has degree $n+1$. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+  Z(3)^0+x_1^2-x_1^3
+  gap> RecP := ReciprocalPolynomial( P );
+  -Z(3)^0+x_1+x_1^3
+  gap> ReciprocalPolynomial( RecP ) = P;
+  true 
+  gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+  Z(3)^0+x_1^2-x_1^3
+  gap> ReciprocalPolynomial( P, 6 );
+  -x_1^3+x_1^4+x_1^6
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CyclotomicCosets}}
+\logpage{[ 7, 5, 12 ]}\nobreak
+\hyperdef{L}{X7AEA9F807E6FFEFF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclotomicCosets({\slshape q, n})\index{CyclotomicCosets@\texttt{CyclotomicCosets}}
+\label{CyclotomicCosets}
+}\hfill{\scriptsize (function)}}\\
+
+
+ \texttt{CyclotomicCosets} returns the cyclotomic cosets of $q \pmod n$. \mbox{\texttt{\slshape q}} and \mbox{\texttt{\slshape n}} must be relatively prime. Each of the elements of the returned list is a list
+of integers that belong to one cyclotomic coset. A $q$-cyclotomic coset of $s \pmod n$ is a set of the form $\{s,sq,sq^2,...,sq^{r-1}\}$, where $r$ is the smallest positive integer such that $sq^r-s$ is $0 \pmod n$. In other words, each coset contains all multiplications of the coset
+representative by $q \pmod n$. The coset representative is the smallest integer that isn't in the previous
+cosets. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> CyclotomicCosets( 2, 15 );
+  [ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
+    [ 7, 14, 13, 11 ] ]
+  gap> CyclotomicCosets( 7, 6 );
+  [ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 
+\end{Verbatim}
+ 
+
+\subsection{\textcolor{Chapter }{WeightHistogram}}
+\logpage{[ 7, 5, 13 ]}\nobreak
+\hyperdef{L}{X7A4EA98D794CF410}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightHistogram({\slshape C[, h]})\index{WeightHistogram@\texttt{WeightHistogram}}
+\label{WeightHistogram}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{WeightHistogram} plots a histogram of weights in code \mbox{\texttt{\slshape C}}. The maximum length of a column is \mbox{\texttt{\slshape h}}. Default value for \mbox{\texttt{\slshape h}} is $1/3$ of the size of the screen. The number that appears at the top of the histogram
+is the maximum value of the list of weights. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> H := HammingCode(2, GF(5));
+  a linear [6,4,3]1 Hamming (2,5) code over GF(5)
+  gap> WeightDistribution(H);
+  [ 1, 0, 0, 80, 120, 264, 160 ]
+  gap> WeightHistogram(H);
+  264----------------
+                 *
+                 *
+                 *
+                 *
+                 *  *
+              *  *  *
+           *  *  *  *
+           *  *  *  *
+  +--------+--+--+--+--
+  0  1  2  3  4  5  6 
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MultiplicityInList}}
+\logpage{[ 7, 5, 14 ]}\nobreak
+\hyperdef{L}{X805DF25C84585FD6}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplicityInList({\slshape L, a})\index{MultiplicityInList@\texttt{MultiplicityInList}}
+\label{MultiplicityInList}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This is a very simple list command which returns how many times a occurs in L.
+It returns 0 if a is not in L. (The GAP command \texttt{Collected} does not quite handle this ``extreme" case.) }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+  gap> MultiplicityInList(L,1);
+  3
+  gap> MultiplicityInList(L,6);
+  0
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{MostCommonInList}}
+\logpage{[ 7, 5, 15 ]}\nobreak
+\hyperdef{L}{X8072B0DA78FBE562}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MostCommonInList({\slshape L})\index{MostCommonInList@\texttt{MostCommonInList}}
+\label{MostCommonInList}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: a list L 
+
+ Output: an a in L which occurs at least as much as any other in L }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+  gap> MostCommonInList(L);
+  1
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{RotateList}}
+\logpage{[ 7, 5, 16 ]}\nobreak
+\hyperdef{L}{X7C5407EF87849857}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RotateList({\slshape L})\index{RotateList@\texttt{RotateList}}
+\label{RotateList}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: a list L 
+
+ Output: a list L' which is the cyclic rotation of L (to the right) }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> L:=[1,2,3,4];;
+  gap> RotateList(L);
+  [2,3,4,1]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CirculantMatrix}}
+\logpage{[ 7, 5, 17 ]}\nobreak
+\hyperdef{L}{X85E526367878F72A}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CirculantMatrix({\slshape k, L})\index{CirculantMatrix@\texttt{CirculantMatrix}}
+\label{CirculantMatrix}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: integer k, a list L of length n 
+
+ Output: kxn matrix whose rows are cyclic rotations of the list L }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> k:=3; L:=[1,2,3,4];;
+  gap> M:=CirculantMatrix(k,L);;
+  gap> Display(M);
+\end{Verbatim}
+  }
+
+ 
+\section{\textcolor{Chapter }{ Miscellaneous polynomial functions }}\logpage{[ 7, 6, 0 ]}
+\hyperdef{L}{X7969103F7A8598F9}{}
+{
+  \label{Miscellaneous polynomial functions} In this section we describe several multivariate polynomial GAP functions \textsf{GUAVA} uses for constructing codes or performing calculations with codes. 
+
+\subsection{\textcolor{Chapter }{MatrixTransformationOnMultivariatePolynomial }}
+\logpage{[ 7, 6, 1 ]}\nobreak
+\hyperdef{L}{X84D51EBB784E7C5D}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixTransformationOnMultivariatePolynomial ({\slshape AfR})\index{MatrixTransformationOnMultivariatePolynomial @\texttt{Matrix}\-\texttt{Transformation}\-\texttt{On}\-\texttt{Multivariate}\-\texttt{Polynomial }}
+\label{MatrixTransformationOnMultivariatePolynomial }
+}\hfill{\scriptsize (function)}}\\
+
+
+ \mbox{\texttt{\slshape A}} is an $n\times n$ matrix with entries in a field $F$, \mbox{\texttt{\slshape R}} is a polynomial ring of $n$ variables, say $F[x_1,...,x_n]$, and \mbox{\texttt{\slshape f}} is a polynomial in \mbox{\texttt{\slshape R}}. Returns the composition $f\circ A$. }
+
+ 
+
+\subsection{\textcolor{Chapter }{DegreeMultivariatePolynomial}}
+\logpage{[ 7, 6, 2 ]}\nobreak
+\hyperdef{L}{X80433A4B792880EF}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreeMultivariatePolynomial({\slshape f, R})\index{DegreeMultivariatePolynomial@\texttt{DegreeMultivariatePolynomial}}
+\label{DegreeMultivariatePolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This command takes two arguments, \mbox{\texttt{\slshape f}}, a multivariate polynomial, and \mbox{\texttt{\slshape R}} a polynomial ring over a field $F$ containing \mbox{\texttt{\slshape f}}, say $R=F[x_1,x_2,...,x_n]$. The output is simply the maximum degrees of all the monomials occurring in \mbox{\texttt{\slshape f}}. 
+
+ This command can be used to compute the degree of an affine plane curve. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);
+  PolynomialRing(..., [ x_1, x_2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> x:=vars[1];; y:=vars[2];;
+  gap> poly:=y^2-x*(x^2-1);;
+  gap> DegreeMultivariatePolynomial(poly,R2);
+  3
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DegreesMultivariatePolynomial}}
+\logpage{[ 7, 6, 3 ]}\nobreak
+\hyperdef{L}{X83F44E397C56F2E0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreesMultivariatePolynomial({\slshape f, R})\index{DegreesMultivariatePolynomial@\texttt{DegreesMultivariatePolynomial}}
+\label{DegreesMultivariatePolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Returns a list of information about the multivariate polynomial \mbox{\texttt{\slshape f}}. Nice for other programs but mostly unreadable by GAP users. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);
+  PolynomialRing(..., [ x_1, x_2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> x:=vars[1];; y:=vars[2];;
+  gap> poly:=y^2-x*(x^2-1);;
+  gap> DegreesMultivariatePolynomial(poly,R2);
+  [ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
+    [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
+  gap>
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CoefficientMultivariatePolynomial}}
+\logpage{[ 7, 6, 4 ]}\nobreak
+\hyperdef{L}{X7E9021697A61A60F}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoefficientMultivariatePolynomial({\slshape f, var, power, R})\index{CoefficientMultivariatePolynomial@\texttt{CoefficientMultivariatePolynomial}}
+\label{CoefficientMultivariatePolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The command \texttt{CoefficientMultivariatePolynomial} takes four arguments: a multivariant polynomial \mbox{\texttt{\slshape f}}, a variable name \mbox{\texttt{\slshape var}}, an integer \mbox{\texttt{\slshape power}}, and a polynomial ring \mbox{\texttt{\slshape R}} containing \mbox{\texttt{\slshape f}}. For example, if \mbox{\texttt{\slshape f}} is a multivariate polynomial in $R$ = $F$[$x_1,x_2,...,x_n$] then \mbox{\texttt{\slshape var}} must be one of the $x_i$. The output is the c [...]
+
+ (Not sure if $F$ needs to be a field in fact ...) 
+
+ Related to the GAP command \texttt{PolynomialCoefficientsPolynomial}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);
+  PolynomialRing(..., [ x_1, x_2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> x:=vars[1];; y:=vars[2];;
+  gap> poly:=y^2-x*(x^2-1);;
+  gap> PolynomialCoefficientsOfPolynomial(poly,x);
+  [ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
+  gap> PolynomialCoefficientsOfPolynomial(poly,y);
+  [ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
+  gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
+  -x_1^3+x_1
+  gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
+  0*Z(11)
+  gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
+  Z(11)^0
+  gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
+  x_2^2
+  gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
+  Z(11)^0
+  gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
+  0*Z(11)
+  gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
+  -Z(11)^0
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{SolveLinearSystem}}
+\logpage{[ 7, 6, 5 ]}\nobreak
+\hyperdef{L}{X79E76B6F7D177E27}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SolveLinearSystem({\slshape L, vars})\index{SolveLinearSystem@\texttt{SolveLinearSystem}}
+\label{SolveLinearSystem}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Input: \mbox{\texttt{\slshape L}} is a list of linear forms in the variables \mbox{\texttt{\slshape vars}}. 
+
+ Output: the solution of the system, if its unique. 
+
+ The procedure is straightforward: Find the associated matrix $A$, find the "constant vector" $b$, and solve $A*v=b$. No error checking is performed. 
+
+ Related to the GAP command \texttt{SolutionMat( A, b )}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);;
+  gap> R2:=PolynomialRing(F,2);
+  PolynomialRing(..., [ x_1, x_2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+  gap> x:=vars[1];; y:=vars[2];;
+  gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+  gap> soln:=SolveLinearSystem([f,g],[x,y]);
+  [ Z(11)^3, Z(11)^2 ]
+  gap> Value(f,[x,y],soln); # checking okay
+  0*Z(11)
+  gap> Value(g,[x,y],col); # checking okay
+  0*Z(11)
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{GuavaVersion}}
+\logpage{[ 7, 6, 6 ]}\nobreak
+\hyperdef{L}{X80171AA687FFDC70}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GuavaVersion({\slshape })\index{GuavaVersion@\texttt{GuavaVersion}}
+\label{GuavaVersion}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Returns the current version of Guava. Same as \texttt{guava\texttt{\symbol{92}}{\textunderscore}version()}. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> GuavaVersion();
+  "2.7"
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{ZechLog}}
+\logpage{[ 7, 6, 7 ]}\nobreak
+\hyperdef{L}{X7EBBE86D85CC90C0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ZechLog({\slshape x, b, F})\index{ZechLog@\texttt{ZechLog}}
+\label{ZechLog}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Returns the Zech log of x to base b, ie the i such that
+\$x+1=b\texttt{\symbol{94}}i\$, so \$y+z=y(1+z/y)=b\texttt{\symbol{94}}k\$,
+where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);; l := One(F);;
+  gap> ZechLog(2*l,8*l,F);
+  -24
+  gap> 8*l+l;(2*l)^(-24);
+  Z(11)^6
+  Z(11)^6
+  
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{CoefficientToPolynomial}}
+\logpage{[ 7, 6, 8 ]}\nobreak
+\hyperdef{L}{X7C8C1E6A7E3497F0}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoefficientToPolynomial({\slshape coeffs, R})\index{CoefficientToPolynomial@\texttt{CoefficientToPolynomial}}
+\label{CoefficientToPolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{CoefficientToPolynomial} returns the degree $d-1$ polynomial $c_0+c_1x+...+c_{d-1}x^{d-1}$, where \mbox{\texttt{\slshape coeffs}} is a list of elements of a field, $coeffs=\{ c_0,...,c_{d-1}\}$, and \mbox{\texttt{\slshape R}} is a univariate polynomial ring. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> coeffs:=Z(11)^0*[1,2,3,4];
+  [ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
+  gap> CoefficientToPolynomial(coeffs,R1);
+  Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DegreesMonomialTerm}}
+\logpage{[ 7, 6, 9 ]}\nobreak
+\hyperdef{L}{X8431985183B63BB7}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreesMonomialTerm({\slshape m, R})\index{DegreesMonomialTerm@\texttt{DegreesMonomialTerm}}
+\label{DegreesMonomialTerm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{DegreesMonomialTerm} returns the list of degrees to which each variable in the multivariate
+polynomial ring \mbox{\texttt{\slshape R}} occurs in the monomial \mbox{\texttt{\slshape m}}, where \mbox{\texttt{\slshape coeffs}} is a list of elements of a field. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> F:=GF(11);
+  GF(11)
+  gap> R1:=PolynomialRing(F,["a"]);;
+  gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+  gap> b:=X(F,"b",var1);
+  b
+  gap> var2:=Concatenation(var1,[b]);
+  [ a, b ]
+  gap> R2:=PolynomialRing(F,var2);
+  PolynomialRing(..., [ a, b ])
+  gap> c:=X(F,"c",var2);
+  c
+  gap> var3:=Concatenation(var2,[c]);
+  [ a, b, c ]
+  gap> R3:=PolynomialRing(F,var3);
+  PolynomialRing(..., [ a, b, c ])
+  gap> m:=b^3*c^7;
+  b^3*c^7
+  gap> DegreesMonomialTerm(m,R3);
+  [ 0, 3, 7 ]
+\end{Verbatim}
+  
+
+\subsection{\textcolor{Chapter }{DivisorsMultivariatePolynomial}}
+\logpage{[ 7, 6, 10 ]}\nobreak
+\hyperdef{L}{X860EF39B841380A1}{}
+{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorsMultivariatePolynomial({\slshape f, R})\index{DivisorsMultivariatePolynomial@\texttt{DivisorsMultivariatePolynomial}}
+\label{DivisorsMultivariatePolynomial}
+}\hfill{\scriptsize (function)}}\\
+
+
+ The function \texttt{DivisorsMultivariatePolynomial} returns the list of polynomial divisors of \mbox{\texttt{\slshape f}} in the multivariate polynomial ring \mbox{\texttt{\slshape R}} with coefficients in a field. This program uses a simple but slow algorithm
+(see Joachim von zur Gathen, J{\"u}rgen Gerhard, \cite{GG03}, exercise 16.10) which first converts the multivariate polynomial \mbox{\texttt{\slshape f}} to an associated univariate polynomial $f^*$, then \texttt{Factors} $f^*$, and finally converts these univariate factors back into the multivariate
+polynomial factors of \mbox{\texttt{\slshape f}}. Since \texttt{Factors} is non-deterministic, \texttt{DivisorsMultivariatePolynomial} is non-deterministic as well. }
+
+ 
+\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
+  gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
+  PolynomialRing(..., [ x1, x2 ])
+  gap> vars:=IndeterminatesOfPolynomialRing(R2);
+  [ x1, x2 ]
+  gap> x2:=vars[2];
+  x2
+  gap> x1:=vars[1];
+  x1
+  gap> f:=x1^3+x2^3;;
+  gap> DivisorsMultivariatePolynomial(f,R2);
+  [ x1+x2, x1+x2, x1+x2 ]
+\end{Verbatim}
+  }
+
+ }
+
+ \def\bibname{References\logpage{[ "Bib", 0, 0 ]}
+\hyperdef{L}{X7A6F98FD85F02BFE}{}
+}
+
+\bibliographystyle{alpha}
+\bibliography{guava}
+
+\def\indexname{Index\logpage{[ "Ind", 0, 0 ]}
+\hyperdef{L}{X83A0356F839C696F}{}
+}
+
+
+\printindex
+
+\newpage
+\immediate\write\pagenrlog{["End"], \arabic{page}];}
+\immediate\closeout\pagenrlog
+\end{document}
diff --git a/doc/guava.toc b/doc/guava.toc
new file mode 100644
index 0000000..e8bee33
--- /dev/null
+++ b/doc/guava.toc
@@ -0,0 +1,317 @@
+\contentsline {chapter}{\numberline {1}\leavevmode {\color {Chapter }Introduction}}{12}{chapter.1}
+\contentsline {section}{\numberline {1.1}\leavevmode {\color {Chapter }Introduction to the \textsf {GUAVA} package}}{12}{section.1.1}
+\contentsline {section}{\numberline {1.2}\leavevmode {\color {Chapter }Installing \textsf {GUAVA}}}{12}{section.1.2}
+\contentsline {section}{\numberline {1.3}\leavevmode {\color {Chapter }Loading \textsf {GUAVA}}}{13}{section.1.3}
+\contentsline {chapter}{\numberline {2}\leavevmode {\color {Chapter }Coding theory functions in GAP}}{14}{chapter.2}
+\contentsline {section}{\numberline {2.1}\leavevmode {\color {Chapter } Distance functions }}{14}{section.2.1}
+\contentsline {subsection}{\numberline {2.1.1}\leavevmode {\color {Chapter }AClosestVectorCombinationsMatFFEVecFFE}}{14}{subsection.2.1.1}
+\contentsline {subsection}{\numberline {2.1.2}\leavevmode {\color {Chapter }AClosestVectorComb..MatFFEVecFFECoords}}{15}{subsection.2.1.2}
+\contentsline {subsection}{\numberline {2.1.3}\leavevmode {\color {Chapter }DistancesDistributionMatFFEVecFFE}}{15}{subsection.2.1.3}
+\contentsline {subsection}{\numberline {2.1.4}\leavevmode {\color {Chapter }DistancesDistributionVecFFEsVecFFE}}{16}{subsection.2.1.4}
+\contentsline {subsection}{\numberline {2.1.5}\leavevmode {\color {Chapter }WeightVecFFE}}{16}{subsection.2.1.5}
+\contentsline {subsection}{\numberline {2.1.6}\leavevmode {\color {Chapter }DistanceVecFFE}}{16}{subsection.2.1.6}
+\contentsline {section}{\numberline {2.2}\leavevmode {\color {Chapter } Other functions }}{17}{section.2.2}
+\contentsline {subsection}{\numberline {2.2.1}\leavevmode {\color {Chapter }ConwayPolynomial}}{17}{subsection.2.2.1}
+\contentsline {subsection}{\numberline {2.2.2}\leavevmode {\color {Chapter }RandomPrimitivePolynomial}}{18}{subsection.2.2.2}
+\contentsline {chapter}{\numberline {3}\leavevmode {\color {Chapter }Codewords}}{19}{chapter.3}
+\contentsline {section}{\numberline {3.1}\leavevmode {\color {Chapter }Construction of Codewords}}{20}{section.3.1}
+\contentsline {subsection}{\numberline {3.1.1}\leavevmode {\color {Chapter }Codeword}}{20}{subsection.3.1.1}
+\contentsline {subsection}{\numberline {3.1.2}\leavevmode {\color {Chapter }CodewordNr}}{21}{subsection.3.1.2}
+\contentsline {subsection}{\numberline {3.1.3}\leavevmode {\color {Chapter }IsCodeword}}{22}{subsection.3.1.3}
+\contentsline {section}{\numberline {3.2}\leavevmode {\color {Chapter }Comparisons of Codewords}}{22}{section.3.2}
+\contentsline {subsection}{\numberline {3.2.1}\leavevmode {\color {Chapter }=}}{22}{subsection.3.2.1}
+\contentsline {section}{\numberline {3.3}\leavevmode {\color {Chapter }Arithmetic Operations for Codewords}}{23}{section.3.3}
+\contentsline {subsection}{\numberline {3.3.1}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.1}
+\contentsline {subsection}{\numberline {3.3.2}\leavevmode {\color {Chapter }-}}{23}{subsection.3.3.2}
+\contentsline {subsection}{\numberline {3.3.3}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.3}
+\contentsline {section}{\numberline {3.4}\leavevmode {\color {Chapter } Functions that Convert Codewords to Vectors or Polynomials }}{24}{section.3.4}
+\contentsline {subsection}{\numberline {3.4.1}\leavevmode {\color {Chapter }VectorCodeword}}{24}{subsection.3.4.1}
+\contentsline {subsection}{\numberline {3.4.2}\leavevmode {\color {Chapter }PolyCodeword}}{24}{subsection.3.4.2}
+\contentsline {section}{\numberline {3.5}\leavevmode {\color {Chapter } Functions that Change the Display Form of a Codeword }}{25}{section.3.5}
+\contentsline {subsection}{\numberline {3.5.1}\leavevmode {\color {Chapter }TreatAsVector}}{25}{subsection.3.5.1}
+\contentsline {subsection}{\numberline {3.5.2}\leavevmode {\color {Chapter }TreatAsPoly}}{25}{subsection.3.5.2}
+\contentsline {section}{\numberline {3.6}\leavevmode {\color {Chapter } Other Codeword Functions }}{26}{section.3.6}
+\contentsline {subsection}{\numberline {3.6.1}\leavevmode {\color {Chapter }NullWord}}{26}{subsection.3.6.1}
+\contentsline {subsection}{\numberline {3.6.2}\leavevmode {\color {Chapter }DistanceCodeword}}{26}{subsection.3.6.2}
+\contentsline {subsection}{\numberline {3.6.3}\leavevmode {\color {Chapter }Support}}{26}{subsection.3.6.3}
+\contentsline {subsection}{\numberline {3.6.4}\leavevmode {\color {Chapter }WeightCodeword}}{27}{subsection.3.6.4}
+\contentsline {chapter}{\numberline {4}\leavevmode {\color {Chapter }Codes}}{28}{chapter.4}
+\contentsline {section}{\numberline {4.1}\leavevmode {\color {Chapter }Comparisons of Codes}}{30}{section.4.1}
+\contentsline {subsection}{\numberline {4.1.1}\leavevmode {\color {Chapter }=}}{30}{subsection.4.1.1}
+\contentsline {section}{\numberline {4.2}\leavevmode {\color {Chapter } Operations for Codes }}{31}{section.4.2}
+\contentsline {subsection}{\numberline {4.2.1}\leavevmode {\color {Chapter }+}}{31}{subsection.4.2.1}
+\contentsline {subsection}{\numberline {4.2.2}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.2}
+\contentsline {subsection}{\numberline {4.2.3}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.3}
+\contentsline {subsection}{\numberline {4.2.4}\leavevmode {\color {Chapter }InformationWord}}{32}{subsection.4.2.4}
+\contentsline {section}{\numberline {4.3}\leavevmode {\color {Chapter } Boolean Functions for Codes }}{32}{section.4.3}
+\contentsline {subsection}{\numberline {4.3.1}\leavevmode {\color {Chapter }in}}{32}{subsection.4.3.1}
+\contentsline {subsection}{\numberline {4.3.2}\leavevmode {\color {Chapter }IsSubset}}{33}{subsection.4.3.2}
+\contentsline {subsection}{\numberline {4.3.3}\leavevmode {\color {Chapter }IsCode}}{33}{subsection.4.3.3}
+\contentsline {subsection}{\numberline {4.3.4}\leavevmode {\color {Chapter }IsLinearCode}}{33}{subsection.4.3.4}
+\contentsline {subsection}{\numberline {4.3.5}\leavevmode {\color {Chapter }IsCyclicCode}}{33}{subsection.4.3.5}
+\contentsline {subsection}{\numberline {4.3.6}\leavevmode {\color {Chapter }IsPerfectCode}}{34}{subsection.4.3.6}
+\contentsline {subsection}{\numberline {4.3.7}\leavevmode {\color {Chapter }IsMDSCode}}{34}{subsection.4.3.7}
+\contentsline {subsection}{\numberline {4.3.8}\leavevmode {\color {Chapter }IsSelfDualCode}}{35}{subsection.4.3.8}
+\contentsline {subsection}{\numberline {4.3.9}\leavevmode {\color {Chapter }IsSelfOrthogonalCode}}{35}{subsection.4.3.9}
+\contentsline {subsection}{\numberline {4.3.10}\leavevmode {\color {Chapter }IsDoublyEvenCode}}{35}{subsection.4.3.10}
+\contentsline {subsection}{\numberline {4.3.11}\leavevmode {\color {Chapter }IsSinglyEvenCode}}{36}{subsection.4.3.11}
+\contentsline {subsection}{\numberline {4.3.12}\leavevmode {\color {Chapter }IsEvenCode}}{36}{subsection.4.3.12}
+\contentsline {subsection}{\numberline {4.3.13}\leavevmode {\color {Chapter }IsSelfComplementaryCode}}{37}{subsection.4.3.13}
+\contentsline {subsection}{\numberline {4.3.14}\leavevmode {\color {Chapter }IsAffineCode}}{37}{subsection.4.3.14}
+\contentsline {subsection}{\numberline {4.3.15}\leavevmode {\color {Chapter }IsAlmostAffineCode}}{38}{subsection.4.3.15}
+\contentsline {section}{\numberline {4.4}\leavevmode {\color {Chapter } Equivalence and Isomorphism of Codes }}{38}{section.4.4}
+\contentsline {subsection}{\numberline {4.4.1}\leavevmode {\color {Chapter }IsEquivalent}}{38}{subsection.4.4.1}
+\contentsline {subsection}{\numberline {4.4.2}\leavevmode {\color {Chapter }CodeIsomorphism}}{38}{subsection.4.4.2}
+\contentsline {subsection}{\numberline {4.4.3}\leavevmode {\color {Chapter }AutomorphismGroup}}{39}{subsection.4.4.3}
+\contentsline {subsection}{\numberline {4.4.4}\leavevmode {\color {Chapter }PermutationAutomorphismGroup}}{40}{subsection.4.4.4}
+\contentsline {section}{\numberline {4.5}\leavevmode {\color {Chapter } Domain Functions for Codes }}{40}{section.4.5}
+\contentsline {subsection}{\numberline {4.5.1}\leavevmode {\color {Chapter }IsFinite}}{40}{subsection.4.5.1}
+\contentsline {subsection}{\numberline {4.5.2}\leavevmode {\color {Chapter }Size}}{40}{subsection.4.5.2}
+\contentsline {subsection}{\numberline {4.5.3}\leavevmode {\color {Chapter }LeftActingDomain}}{41}{subsection.4.5.3}
+\contentsline {subsection}{\numberline {4.5.4}\leavevmode {\color {Chapter }Dimension}}{41}{subsection.4.5.4}
+\contentsline {subsection}{\numberline {4.5.5}\leavevmode {\color {Chapter }AsSSortedList}}{41}{subsection.4.5.5}
+\contentsline {section}{\numberline {4.6}\leavevmode {\color {Chapter } Printing and Displaying Codes }}{42}{section.4.6}
+\contentsline {subsection}{\numberline {4.6.1}\leavevmode {\color {Chapter }Print}}{42}{subsection.4.6.1}
+\contentsline {subsection}{\numberline {4.6.2}\leavevmode {\color {Chapter }String}}{42}{subsection.4.6.2}
+\contentsline {subsection}{\numberline {4.6.3}\leavevmode {\color {Chapter }Display}}{43}{subsection.4.6.3}
+\contentsline {subsection}{\numberline {4.6.4}\leavevmode {\color {Chapter }DisplayBoundsInfo}}{43}{subsection.4.6.4}
+\contentsline {section}{\numberline {4.7}\leavevmode {\color {Chapter } Generating (Check) Matrices and Polynomials }}{44}{section.4.7}
+\contentsline {subsection}{\numberline {4.7.1}\leavevmode {\color {Chapter }GeneratorMat}}{44}{subsection.4.7.1}
+\contentsline {subsection}{\numberline {4.7.2}\leavevmode {\color {Chapter }CheckMat}}{44}{subsection.4.7.2}
+\contentsline {subsection}{\numberline {4.7.3}\leavevmode {\color {Chapter }GeneratorPol}}{45}{subsection.4.7.3}
+\contentsline {subsection}{\numberline {4.7.4}\leavevmode {\color {Chapter }CheckPol}}{45}{subsection.4.7.4}
+\contentsline {subsection}{\numberline {4.7.5}\leavevmode {\color {Chapter }RootsOfCode}}{45}{subsection.4.7.5}
+\contentsline {section}{\numberline {4.8}\leavevmode {\color {Chapter } Parameters of Codes }}{46}{section.4.8}
+\contentsline {subsection}{\numberline {4.8.1}\leavevmode {\color {Chapter }WordLength}}{46}{subsection.4.8.1}
+\contentsline {subsection}{\numberline {4.8.2}\leavevmode {\color {Chapter }Redundancy}}{46}{subsection.4.8.2}
+\contentsline {subsection}{\numberline {4.8.3}\leavevmode {\color {Chapter }MinimumDistance}}{46}{subsection.4.8.3}
+\contentsline {subsection}{\numberline {4.8.4}\leavevmode {\color {Chapter }MinimumDistanceLeon}}{47}{subsection.4.8.4}
+\contentsline {subsection}{\numberline {4.8.5}\leavevmode {\color {Chapter }MinimumWeight}}{48}{subsection.4.8.5}
+\contentsline {subsection}{\numberline {4.8.6}\leavevmode {\color {Chapter }DecreaseMinimumDistanceUpperBound}}{51}{subsection.4.8.6}
+\contentsline {subsection}{\numberline {4.8.7}\leavevmode {\color {Chapter }MinimumDistanceRandom}}{51}{subsection.4.8.7}
+\contentsline {subsection}{\numberline {4.8.8}\leavevmode {\color {Chapter }CoveringRadius}}{53}{subsection.4.8.8}
+\contentsline {subsection}{\numberline {4.8.9}\leavevmode {\color {Chapter }SetCoveringRadius}}{54}{subsection.4.8.9}
+\contentsline {section}{\numberline {4.9}\leavevmode {\color {Chapter } Distributions }}{54}{section.4.9}
+\contentsline {subsection}{\numberline {4.9.1}\leavevmode {\color {Chapter }MinimumWeightWords}}{54}{subsection.4.9.1}
+\contentsline {subsection}{\numberline {4.9.2}\leavevmode {\color {Chapter }WeightDistribution}}{54}{subsection.4.9.2}
+\contentsline {subsection}{\numberline {4.9.3}\leavevmode {\color {Chapter }InnerDistribution}}{55}{subsection.4.9.3}
+\contentsline {subsection}{\numberline {4.9.4}\leavevmode {\color {Chapter }DistancesDistribution}}{55}{subsection.4.9.4}
+\contentsline {subsection}{\numberline {4.9.5}\leavevmode {\color {Chapter }OuterDistribution}}{56}{subsection.4.9.5}
+\contentsline {section}{\numberline {4.10}\leavevmode {\color {Chapter } Decoding Functions }}{56}{section.4.10}
+\contentsline {subsection}{\numberline {4.10.1}\leavevmode {\color {Chapter }Decode}}{56}{subsection.4.10.1}
+\contentsline {subsection}{\numberline {4.10.2}\leavevmode {\color {Chapter }Decodeword}}{57}{subsection.4.10.2}
+\contentsline {subsection}{\numberline {4.10.3}\leavevmode {\color {Chapter }GeneralizedReedSolomonDecoderGao}}{58}{subsection.4.10.3}
+\contentsline {subsection}{\numberline {4.10.4}\leavevmode {\color {Chapter }GeneralizedReedSolomonListDecoder}}{58}{subsection.4.10.4}
+\contentsline {subsection}{\numberline {4.10.5}\leavevmode {\color {Chapter }BitFlipDecoder}}{59}{subsection.4.10.5}
+\contentsline {subsection}{\numberline {4.10.6}\leavevmode {\color {Chapter }NearestNeighborGRSDecodewords}}{60}{subsection.4.10.6}
+\contentsline {subsection}{\numberline {4.10.7}\leavevmode {\color {Chapter }NearestNeighborDecodewords}}{61}{subsection.4.10.7}
+\contentsline {subsection}{\numberline {4.10.8}\leavevmode {\color {Chapter }Syndrome}}{61}{subsection.4.10.8}
+\contentsline {subsection}{\numberline {4.10.9}\leavevmode {\color {Chapter }SyndromeTable}}{62}{subsection.4.10.9}
+\contentsline {subsection}{\numberline {4.10.10}\leavevmode {\color {Chapter }StandardArray}}{62}{subsection.4.10.10}
+\contentsline {subsection}{\numberline {4.10.11}\leavevmode {\color {Chapter }PermutationDecode}}{63}{subsection.4.10.11}
+\contentsline {subsection}{\numberline {4.10.12}\leavevmode {\color {Chapter }PermutationDecodeNC}}{63}{subsection.4.10.12}
+\contentsline {chapter}{\numberline {5}\leavevmode {\color {Chapter }Generating Codes}}{65}{chapter.5}
+\contentsline {section}{\numberline {5.1}\leavevmode {\color {Chapter } Generating Unrestricted Codes }}{65}{section.5.1}
+\contentsline {subsection}{\numberline {5.1.1}\leavevmode {\color {Chapter }ElementsCode}}{65}{subsection.5.1.1}
+\contentsline {subsection}{\numberline {5.1.2}\leavevmode {\color {Chapter }HadamardCode}}{66}{subsection.5.1.2}
+\contentsline {subsection}{\numberline {5.1.3}\leavevmode {\color {Chapter }ConferenceCode}}{66}{subsection.5.1.3}
+\contentsline {subsection}{\numberline {5.1.4}\leavevmode {\color {Chapter }MOLSCode}}{67}{subsection.5.1.4}
+\contentsline {subsection}{\numberline {5.1.5}\leavevmode {\color {Chapter }RandomCode}}{68}{subsection.5.1.5}
+\contentsline {subsection}{\numberline {5.1.6}\leavevmode {\color {Chapter }NordstromRobinsonCode}}{68}{subsection.5.1.6}
+\contentsline {subsection}{\numberline {5.1.7}\leavevmode {\color {Chapter }GreedyCode}}{68}{subsection.5.1.7}
+\contentsline {subsection}{\numberline {5.1.8}\leavevmode {\color {Chapter }LexiCode}}{69}{subsection.5.1.8}
+\contentsline {section}{\numberline {5.2}\leavevmode {\color {Chapter } Generating Linear Codes }}{69}{section.5.2}
+\contentsline {subsection}{\numberline {5.2.1}\leavevmode {\color {Chapter }GeneratorMatCode}}{69}{subsection.5.2.1}
+\contentsline {subsection}{\numberline {5.2.2}\leavevmode {\color {Chapter }CheckMatCodeMutable}}{70}{subsection.5.2.2}
+\contentsline {subsection}{\numberline {5.2.3}\leavevmode {\color {Chapter }CheckMatCode}}{70}{subsection.5.2.3}
+\contentsline {subsection}{\numberline {5.2.4}\leavevmode {\color {Chapter }HammingCode}}{71}{subsection.5.2.4}
+\contentsline {subsection}{\numberline {5.2.5}\leavevmode {\color {Chapter }ReedMullerCode}}{71}{subsection.5.2.5}
+\contentsline {subsection}{\numberline {5.2.6}\leavevmode {\color {Chapter }AlternantCode}}{71}{subsection.5.2.6}
+\contentsline {subsection}{\numberline {5.2.7}\leavevmode {\color {Chapter }GoppaCode}}{72}{subsection.5.2.7}
+\contentsline {subsection}{\numberline {5.2.8}\leavevmode {\color {Chapter }GeneralizedSrivastavaCode}}{72}{subsection.5.2.8}
+\contentsline {subsection}{\numberline {5.2.9}\leavevmode {\color {Chapter }SrivastavaCode}}{73}{subsection.5.2.9}
+\contentsline {subsection}{\numberline {5.2.10}\leavevmode {\color {Chapter }CordaroWagnerCode}}{73}{subsection.5.2.10}
+\contentsline {subsection}{\numberline {5.2.11}\leavevmode {\color {Chapter }FerreroDesignCode}}{73}{subsection.5.2.11}
+\contentsline {subsection}{\numberline {5.2.12}\leavevmode {\color {Chapter }RandomLinearCode}}{74}{subsection.5.2.12}
+\contentsline {subsection}{\numberline {5.2.13}\leavevmode {\color {Chapter }OptimalityCode}}{75}{subsection.5.2.13}
+\contentsline {subsection}{\numberline {5.2.14}\leavevmode {\color {Chapter }BestKnownLinearCode}}{75}{subsection.5.2.14}
+\contentsline {section}{\numberline {5.3}\leavevmode {\color {Chapter } Gabidulin Codes }}{77}{section.5.3}
+\contentsline {subsection}{\numberline {5.3.1}\leavevmode {\color {Chapter }GabidulinCode}}{77}{subsection.5.3.1}
+\contentsline {subsection}{\numberline {5.3.2}\leavevmode {\color {Chapter }EnlargedGabidulinCode}}{77}{subsection.5.3.2}
+\contentsline {subsection}{\numberline {5.3.3}\leavevmode {\color {Chapter }DavydovCode}}{77}{subsection.5.3.3}
+\contentsline {subsection}{\numberline {5.3.4}\leavevmode {\color {Chapter }TombakCode}}{77}{subsection.5.3.4}
+\contentsline {subsection}{\numberline {5.3.5}\leavevmode {\color {Chapter }EnlargedTombakCode}}{77}{subsection.5.3.5}
+\contentsline {section}{\numberline {5.4}\leavevmode {\color {Chapter } Golay Codes }}{78}{section.5.4}
+\contentsline {subsection}{\numberline {5.4.1}\leavevmode {\color {Chapter }BinaryGolayCode}}{78}{subsection.5.4.1}
+\contentsline {subsection}{\numberline {5.4.2}\leavevmode {\color {Chapter }ExtendedBinaryGolayCode}}{78}{subsection.5.4.2}
+\contentsline {subsection}{\numberline {5.4.3}\leavevmode {\color {Chapter }TernaryGolayCode}}{79}{subsection.5.4.3}
+\contentsline {subsection}{\numberline {5.4.4}\leavevmode {\color {Chapter }ExtendedTernaryGolayCode}}{79}{subsection.5.4.4}
+\contentsline {section}{\numberline {5.5}\leavevmode {\color {Chapter } Generating Cyclic Codes }}{79}{section.5.5}
+\contentsline {subsection}{\numberline {5.5.1}\leavevmode {\color {Chapter }GeneratorPolCode}}{80}{subsection.5.5.1}
+\contentsline {subsection}{\numberline {5.5.2}\leavevmode {\color {Chapter }CheckPolCode}}{81}{subsection.5.5.2}
+\contentsline {subsection}{\numberline {5.5.3}\leavevmode {\color {Chapter }RootsCode}}{81}{subsection.5.5.3}
+\contentsline {subsection}{\numberline {5.5.4}\leavevmode {\color {Chapter }BCHCode}}{82}{subsection.5.5.4}
+\contentsline {subsection}{\numberline {5.5.5}\leavevmode {\color {Chapter }ReedSolomonCode}}{83}{subsection.5.5.5}
+\contentsline {subsection}{\numberline {5.5.6}\leavevmode {\color {Chapter }ExtendedReedSolomonCode}}{83}{subsection.5.5.6}
+\contentsline {subsection}{\numberline {5.5.7}\leavevmode {\color {Chapter }QRCode}}{83}{subsection.5.5.7}
+\contentsline {subsection}{\numberline {5.5.8}\leavevmode {\color {Chapter }QQRCodeNC}}{84}{subsection.5.5.8}
+\contentsline {subsection}{\numberline {5.5.9}\leavevmode {\color {Chapter }QQRCode}}{84}{subsection.5.5.9}
+\contentsline {subsection}{\numberline {5.5.10}\leavevmode {\color {Chapter }FireCode}}{85}{subsection.5.5.10}
+\contentsline {subsection}{\numberline {5.5.11}\leavevmode {\color {Chapter }WholeSpaceCode}}{85}{subsection.5.5.11}
+\contentsline {subsection}{\numberline {5.5.12}\leavevmode {\color {Chapter }NullCode}}{86}{subsection.5.5.12}
+\contentsline {subsection}{\numberline {5.5.13}\leavevmode {\color {Chapter }RepetitionCode}}{86}{subsection.5.5.13}
+\contentsline {subsection}{\numberline {5.5.14}\leavevmode {\color {Chapter }CyclicCodes}}{86}{subsection.5.5.14}
+\contentsline {subsection}{\numberline {5.5.15}\leavevmode {\color {Chapter }NrCyclicCodes}}{86}{subsection.5.5.15}
+\contentsline {subsection}{\numberline {5.5.16}\leavevmode {\color {Chapter }QuasiCyclicCode}}{87}{subsection.5.5.16}
+\contentsline {subsection}{\numberline {5.5.17}\leavevmode {\color {Chapter }CyclicMDSCode}}{88}{subsection.5.5.17}
+\contentsline {subsection}{\numberline {5.5.18}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCode}}{89}{subsection.5.5.18}
+\contentsline {subsection}{\numberline {5.5.19}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCodeNC}}{90}{subsection.5.5.19}
+\contentsline {section}{\numberline {5.6}\leavevmode {\color {Chapter } Evaluation Codes }}{90}{section.5.6}
+\contentsline {subsection}{\numberline {5.6.1}\leavevmode {\color {Chapter }EvaluationCode}}{90}{subsection.5.6.1}
+\contentsline {subsection}{\numberline {5.6.2}\leavevmode {\color {Chapter }GeneralizedReedSolomonCode}}{90}{subsection.5.6.2}
+\contentsline {subsection}{\numberline {5.6.3}\leavevmode {\color {Chapter }GeneralizedReedMullerCode}}{91}{subsection.5.6.3}
+\contentsline {subsection}{\numberline {5.6.4}\leavevmode {\color {Chapter }ToricPoints}}{92}{subsection.5.6.4}
+\contentsline {subsection}{\numberline {5.6.5}\leavevmode {\color {Chapter }ToricCode}}{92}{subsection.5.6.5}
+\contentsline {section}{\numberline {5.7}\leavevmode {\color {Chapter } Algebraic geometric codes }}{93}{section.5.7}
+\contentsline {subsection}{\numberline {5.7.1}\leavevmode {\color {Chapter }AffineCurve}}{93}{subsection.5.7.1}
+\contentsline {subsection}{\numberline {5.7.2}\leavevmode {\color {Chapter }AffinePointsOnCurve}}{94}{subsection.5.7.2}
+\contentsline {subsection}{\numberline {5.7.3}\leavevmode {\color {Chapter }GenusCurve}}{94}{subsection.5.7.3}
+\contentsline {subsection}{\numberline {5.7.4}\leavevmode {\color {Chapter }GOrbitPoint }}{94}{subsection.5.7.4}
+\contentsline {subsection}{\numberline {5.7.5}\leavevmode {\color {Chapter }DivisorOnAffineCurve}}{96}{subsection.5.7.5}
+\contentsline {subsection}{\numberline {5.7.6}\leavevmode {\color {Chapter }DivisorAddition }}{96}{subsection.5.7.6}
+\contentsline {subsection}{\numberline {5.7.7}\leavevmode {\color {Chapter }DivisorDegree }}{96}{subsection.5.7.7}
+\contentsline {subsection}{\numberline {5.7.8}\leavevmode {\color {Chapter }DivisorNegate }}{97}{subsection.5.7.8}
+\contentsline {subsection}{\numberline {5.7.9}\leavevmode {\color {Chapter }DivisorIsZero }}{97}{subsection.5.7.9}
+\contentsline {subsection}{\numberline {5.7.10}\leavevmode {\color {Chapter }DivisorsEqual }}{97}{subsection.5.7.10}
+\contentsline {subsection}{\numberline {5.7.11}\leavevmode {\color {Chapter }DivisorGCD }}{97}{subsection.5.7.11}
+\contentsline {subsection}{\numberline {5.7.12}\leavevmode {\color {Chapter }DivisorLCM }}{97}{subsection.5.7.12}
+\contentsline {subsection}{\numberline {5.7.13}\leavevmode {\color {Chapter }RiemannRochSpaceBasisFunctionP1 }}{99}{subsection.5.7.13}
+\contentsline {subsection}{\numberline {5.7.14}\leavevmode {\color {Chapter }DivisorOfRationalFunctionP1 }}{99}{subsection.5.7.14}
+\contentsline {subsection}{\numberline {5.7.15}\leavevmode {\color {Chapter }RiemannRochSpaceBasisP1 }}{100}{subsection.5.7.15}
+\contentsline {subsection}{\numberline {5.7.16}\leavevmode {\color {Chapter }MoebiusTransformation }}{101}{subsection.5.7.16}
+\contentsline {subsection}{\numberline {5.7.17}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnFunction }}{101}{subsection.5.7.17}
+\contentsline {subsection}{\numberline {5.7.18}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnDivisorP1 }}{101}{subsection.5.7.18}
+\contentsline {subsection}{\numberline {5.7.19}\leavevmode {\color {Chapter }IsActionMoebiusTransformationOnDivisorDefinedP1 }}{101}{subsection.5.7.19}
+\contentsline {subsection}{\numberline {5.7.20}\leavevmode {\color {Chapter }DivisorAutomorphismGroupP1 }}{102}{subsection.5.7.20}
+\contentsline {subsection}{\numberline {5.7.21}\leavevmode {\color {Chapter }MatrixRepresentationOnRiemannRochSpaceP1 }}{103}{subsection.5.7.21}
+\contentsline {subsection}{\numberline {5.7.22}\leavevmode {\color {Chapter }GoppaCodeClassical}}{104}{subsection.5.7.22}
+\contentsline {subsection}{\numberline {5.7.23}\leavevmode {\color {Chapter }EvaluationBivariateCode}}{104}{subsection.5.7.23}
+\contentsline {subsection}{\numberline {5.7.24}\leavevmode {\color {Chapter }EvaluationBivariateCodeNC}}{104}{subsection.5.7.24}
+\contentsline {subsection}{\numberline {5.7.25}\leavevmode {\color {Chapter }OnePointAGCode}}{105}{subsection.5.7.25}
+\contentsline {chapter}{\numberline {6}\leavevmode {\color {Chapter }Manipulating Codes}}{107}{chapter.6}
+\contentsline {section}{\numberline {6.1}\leavevmode {\color {Chapter } Functions that Generate a New Code from a Given Code }}{107}{section.6.1}
+\contentsline {subsection}{\numberline {6.1.1}\leavevmode {\color {Chapter }ExtendedCode}}{107}{subsection.6.1.1}
+\contentsline {subsection}{\numberline {6.1.2}\leavevmode {\color {Chapter }PuncturedCode}}{108}{subsection.6.1.2}
+\contentsline {subsection}{\numberline {6.1.3}\leavevmode {\color {Chapter }EvenWeightSubcode}}{108}{subsection.6.1.3}
+\contentsline {subsection}{\numberline {6.1.4}\leavevmode {\color {Chapter }PermutedCode}}{109}{subsection.6.1.4}
+\contentsline {subsection}{\numberline {6.1.5}\leavevmode {\color {Chapter }ExpurgatedCode}}{109}{subsection.6.1.5}
+\contentsline {subsection}{\numberline {6.1.6}\leavevmode {\color {Chapter }AugmentedCode}}{110}{subsection.6.1.6}
+\contentsline {subsection}{\numberline {6.1.7}\leavevmode {\color {Chapter }RemovedElementsCode}}{110}{subsection.6.1.7}
+\contentsline {subsection}{\numberline {6.1.8}\leavevmode {\color {Chapter }AddedElementsCode}}{111}{subsection.6.1.8}
+\contentsline {subsection}{\numberline {6.1.9}\leavevmode {\color {Chapter }ShortenedCode}}{111}{subsection.6.1.9}
+\contentsline {subsection}{\numberline {6.1.10}\leavevmode {\color {Chapter }LengthenedCode}}{112}{subsection.6.1.10}
+\contentsline {subsection}{\numberline {6.1.11}\leavevmode {\color {Chapter }SubCode}}{113}{subsection.6.1.11}
+\contentsline {subsection}{\numberline {6.1.12}\leavevmode {\color {Chapter }ResidueCode}}{113}{subsection.6.1.12}
+\contentsline {subsection}{\numberline {6.1.13}\leavevmode {\color {Chapter }ConstructionBCode}}{113}{subsection.6.1.13}
+\contentsline {subsection}{\numberline {6.1.14}\leavevmode {\color {Chapter }DualCode}}{114}{subsection.6.1.14}
+\contentsline {subsection}{\numberline {6.1.15}\leavevmode {\color {Chapter }ConversionFieldCode}}{115}{subsection.6.1.15}
+\contentsline {subsection}{\numberline {6.1.16}\leavevmode {\color {Chapter }TraceCode}}{115}{subsection.6.1.16}
+\contentsline {subsection}{\numberline {6.1.17}\leavevmode {\color {Chapter }CosetCode}}{115}{subsection.6.1.17}
+\contentsline {subsection}{\numberline {6.1.18}\leavevmode {\color {Chapter }ConstantWeightSubcode}}{116}{subsection.6.1.18}
+\contentsline {subsection}{\numberline {6.1.19}\leavevmode {\color {Chapter }StandardFormCode}}{116}{subsection.6.1.19}
+\contentsline {subsection}{\numberline {6.1.20}\leavevmode {\color {Chapter }PiecewiseConstantCode}}{117}{subsection.6.1.20}
+\contentsline {section}{\numberline {6.2}\leavevmode {\color {Chapter } Functions that Generate a New Code from Two or More Given Codes }}{118}{section.6.2}
+\contentsline {subsection}{\numberline {6.2.1}\leavevmode {\color {Chapter }DirectSumCode}}{118}{subsection.6.2.1}
+\contentsline {subsection}{\numberline {6.2.2}\leavevmode {\color {Chapter }UUVCode}}{118}{subsection.6.2.2}
+\contentsline {subsection}{\numberline {6.2.3}\leavevmode {\color {Chapter }DirectProductCode}}{118}{subsection.6.2.3}
+\contentsline {subsection}{\numberline {6.2.4}\leavevmode {\color {Chapter }IntersectionCode}}{119}{subsection.6.2.4}
+\contentsline {subsection}{\numberline {6.2.5}\leavevmode {\color {Chapter }UnionCode}}{119}{subsection.6.2.5}
+\contentsline {subsection}{\numberline {6.2.6}\leavevmode {\color {Chapter }ExtendedDirectSumCode}}{120}{subsection.6.2.6}
+\contentsline {subsection}{\numberline {6.2.7}\leavevmode {\color {Chapter }AmalgamatedDirectSumCode}}{120}{subsection.6.2.7}
+\contentsline {subsection}{\numberline {6.2.8}\leavevmode {\color {Chapter }BlockwiseDirectSumCode}}{121}{subsection.6.2.8}
+\contentsline {subsection}{\numberline {6.2.9}\leavevmode {\color {Chapter }ConstructionXCode}}{121}{subsection.6.2.9}
+\contentsline {subsection}{\numberline {6.2.10}\leavevmode {\color {Chapter }ConstructionXXCode}}{122}{subsection.6.2.10}
+\contentsline {subsection}{\numberline {6.2.11}\leavevmode {\color {Chapter }BZCode}}{123}{subsection.6.2.11}
+\contentsline {subsection}{\numberline {6.2.12}\leavevmode {\color {Chapter }BZCodeNC}}{124}{subsection.6.2.12}
+\contentsline {chapter}{\numberline {7}\leavevmode {\color {Chapter } Bounds on codes, special matrices and miscellaneous functions }}{125}{chapter.7}
+\contentsline {section}{\numberline {7.1}\leavevmode {\color {Chapter } Distance bounds on codes }}{125}{section.7.1}
+\contentsline {subsection}{\numberline {7.1.1}\leavevmode {\color {Chapter }UpperBoundSingleton}}{126}{subsection.7.1.1}
+\contentsline {subsection}{\numberline {7.1.2}\leavevmode {\color {Chapter }UpperBoundHamming}}{126}{subsection.7.1.2}
+\contentsline {subsection}{\numberline {7.1.3}\leavevmode {\color {Chapter }UpperBoundJohnson}}{126}{subsection.7.1.3}
+\contentsline {subsection}{\numberline {7.1.4}\leavevmode {\color {Chapter }UpperBoundPlotkin}}{127}{subsection.7.1.4}
+\contentsline {subsection}{\numberline {7.1.5}\leavevmode {\color {Chapter }UpperBoundElias}}{127}{subsection.7.1.5}
+\contentsline {subsection}{\numberline {7.1.6}\leavevmode {\color {Chapter }UpperBoundGriesmer}}{128}{subsection.7.1.6}
+\contentsline {subsection}{\numberline {7.1.7}\leavevmode {\color {Chapter }IsGriesmerCode}}{128}{subsection.7.1.7}
+\contentsline {subsection}{\numberline {7.1.8}\leavevmode {\color {Chapter }UpperBound}}{128}{subsection.7.1.8}
+\contentsline {subsection}{\numberline {7.1.9}\leavevmode {\color {Chapter }LowerBoundMinimumDistance}}{129}{subsection.7.1.9}
+\contentsline {subsection}{\numberline {7.1.10}\leavevmode {\color {Chapter }LowerBoundGilbertVarshamov}}{129}{subsection.7.1.10}
+\contentsline {subsection}{\numberline {7.1.11}\leavevmode {\color {Chapter }LowerBoundSpherePacking}}{129}{subsection.7.1.11}
+\contentsline {subsection}{\numberline {7.1.12}\leavevmode {\color {Chapter }UpperBoundMinimumDistance}}{130}{subsection.7.1.12}
+\contentsline {subsection}{\numberline {7.1.13}\leavevmode {\color {Chapter }BoundsMinimumDistance}}{130}{subsection.7.1.13}
+\contentsline {section}{\numberline {7.2}\leavevmode {\color {Chapter } Covering radius bounds on codes }}{131}{section.7.2}
+\contentsline {subsection}{\numberline {7.2.1}\leavevmode {\color {Chapter }BoundsCoveringRadius}}{131}{subsection.7.2.1}
+\contentsline {subsection}{\numberline {7.2.2}\leavevmode {\color {Chapter }IncreaseCoveringRadiusLowerBound}}{131}{subsection.7.2.2}
+\contentsline {subsection}{\numberline {7.2.3}\leavevmode {\color {Chapter }ExhaustiveSearchCoveringRadius}}{132}{subsection.7.2.3}
+\contentsline {subsection}{\numberline {7.2.4}\leavevmode {\color {Chapter }GeneralLowerBoundCoveringRadius}}{133}{subsection.7.2.4}
+\contentsline {subsection}{\numberline {7.2.5}\leavevmode {\color {Chapter }GeneralUpperBoundCoveringRadius}}{133}{subsection.7.2.5}
+\contentsline {subsection}{\numberline {7.2.6}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusSphereCovering}}{134}{subsection.7.2.6}
+\contentsline {subsection}{\numberline {7.2.7}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee1}}{134}{subsection.7.2.7}
+\contentsline {subsection}{\numberline {7.2.8}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee2}}{135}{subsection.7.2.8}
+\contentsline {subsection}{\numberline {7.2.9}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusCountingExcess}}{135}{subsection.7.2.9}
+\contentsline {subsection}{\numberline {7.2.10}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded1}}{136}{subsection.7.2.10}
+\contentsline {subsection}{\numberline {7.2.11}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded2}}{136}{subsection.7.2.11}
+\contentsline {subsection}{\numberline {7.2.12}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusInduction}}{137}{subsection.7.2.12}
+\contentsline {subsection}{\numberline {7.2.13}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusRedundancy}}{137}{subsection.7.2.13}
+\contentsline {subsection}{\numberline {7.2.14}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusDelsarte}}{138}{subsection.7.2.14}
+\contentsline {subsection}{\numberline {7.2.15}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusStrength}}{138}{subsection.7.2.15}
+\contentsline {subsection}{\numberline {7.2.16}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusGriesmerLike}}{138}{subsection.7.2.16}
+\contentsline {subsection}{\numberline {7.2.17}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusCyclicCode}}{139}{subsection.7.2.17}
+\contentsline {section}{\numberline {7.3}\leavevmode {\color {Chapter } Special matrices in \textsf {GUAVA} }}{139}{section.7.3}
+\contentsline {subsection}{\numberline {7.3.1}\leavevmode {\color {Chapter }KrawtchoukMat}}{140}{subsection.7.3.1}
+\contentsline {subsection}{\numberline {7.3.2}\leavevmode {\color {Chapter }GrayMat}}{140}{subsection.7.3.2}
+\contentsline {subsection}{\numberline {7.3.3}\leavevmode {\color {Chapter }SylvesterMat}}{140}{subsection.7.3.3}
+\contentsline {subsection}{\numberline {7.3.4}\leavevmode {\color {Chapter }HadamardMat}}{141}{subsection.7.3.4}
+\contentsline {subsection}{\numberline {7.3.5}\leavevmode {\color {Chapter }VandermondeMat}}{141}{subsection.7.3.5}
+\contentsline {subsection}{\numberline {7.3.6}\leavevmode {\color {Chapter }PutStandardForm}}{142}{subsection.7.3.6}
+\contentsline {subsection}{\numberline {7.3.7}\leavevmode {\color {Chapter }IsInStandardForm}}{143}{subsection.7.3.7}
+\contentsline {subsection}{\numberline {7.3.8}\leavevmode {\color {Chapter }PermutedCols}}{143}{subsection.7.3.8}
+\contentsline {subsection}{\numberline {7.3.9}\leavevmode {\color {Chapter }VerticalConversionFieldMat}}{143}{subsection.7.3.9}
+\contentsline {subsection}{\numberline {7.3.10}\leavevmode {\color {Chapter }HorizontalConversionFieldMat}}{144}{subsection.7.3.10}
+\contentsline {subsection}{\numberline {7.3.11}\leavevmode {\color {Chapter }MOLS}}{144}{subsection.7.3.11}
+\contentsline {subsection}{\numberline {7.3.12}\leavevmode {\color {Chapter }IsLatinSquare}}{145}{subsection.7.3.12}
+\contentsline {subsection}{\numberline {7.3.13}\leavevmode {\color {Chapter }AreMOLS}}{145}{subsection.7.3.13}
+\contentsline {section}{\numberline {7.4}\leavevmode {\color {Chapter } Some functions related to the norm of a code }}{146}{section.7.4}
+\contentsline {subsection}{\numberline {7.4.1}\leavevmode {\color {Chapter }CoordinateNorm}}{146}{subsection.7.4.1}
+\contentsline {subsection}{\numberline {7.4.2}\leavevmode {\color {Chapter }CodeNorm}}{146}{subsection.7.4.2}
+\contentsline {subsection}{\numberline {7.4.3}\leavevmode {\color {Chapter }IsCoordinateAcceptable}}{146}{subsection.7.4.3}
+\contentsline {subsection}{\numberline {7.4.4}\leavevmode {\color {Chapter }GeneralizedCodeNorm}}{147}{subsection.7.4.4}
+\contentsline {subsection}{\numberline {7.4.5}\leavevmode {\color {Chapter }IsNormalCode}}{147}{subsection.7.4.5}
+\contentsline {section}{\numberline {7.5}\leavevmode {\color {Chapter } Miscellaneous functions }}{147}{section.7.5}
+\contentsline {subsection}{\numberline {7.5.1}\leavevmode {\color {Chapter }CodeWeightEnumerator}}{147}{subsection.7.5.1}
+\contentsline {subsection}{\numberline {7.5.2}\leavevmode {\color {Chapter }CodeDistanceEnumerator}}{148}{subsection.7.5.2}
+\contentsline {subsection}{\numberline {7.5.3}\leavevmode {\color {Chapter }CodeMacWilliamsTransform}}{148}{subsection.7.5.3}
+\contentsline {subsection}{\numberline {7.5.4}\leavevmode {\color {Chapter }CodeDensity}}{148}{subsection.7.5.4}
+\contentsline {subsection}{\numberline {7.5.5}\leavevmode {\color {Chapter }SphereContent}}{149}{subsection.7.5.5}
+\contentsline {subsection}{\numberline {7.5.6}\leavevmode {\color {Chapter }Krawtchouk}}{149}{subsection.7.5.6}
+\contentsline {subsection}{\numberline {7.5.7}\leavevmode {\color {Chapter }PrimitiveUnityRoot}}{149}{subsection.7.5.7}
+\contentsline {subsection}{\numberline {7.5.8}\leavevmode {\color {Chapter }PrimitivePolynomialsNr}}{150}{subsection.7.5.8}
+\contentsline {subsection}{\numberline {7.5.9}\leavevmode {\color {Chapter }IrreduciblePolynomialsNr}}{150}{subsection.7.5.9}
+\contentsline {subsection}{\numberline {7.5.10}\leavevmode {\color {Chapter }MatrixRepresentationOfElement}}{150}{subsection.7.5.10}
+\contentsline {subsection}{\numberline {7.5.11}\leavevmode {\color {Chapter }ReciprocalPolynomial}}{151}{subsection.7.5.11}
+\contentsline {subsection}{\numberline {7.5.12}\leavevmode {\color {Chapter }CyclotomicCosets}}{151}{subsection.7.5.12}
+\contentsline {subsection}{\numberline {7.5.13}\leavevmode {\color {Chapter }WeightHistogram}}{152}{subsection.7.5.13}
+\contentsline {subsection}{\numberline {7.5.14}\leavevmode {\color {Chapter }MultiplicityInList}}{152}{subsection.7.5.14}
+\contentsline {subsection}{\numberline {7.5.15}\leavevmode {\color {Chapter }MostCommonInList}}{152}{subsection.7.5.15}
+\contentsline {subsection}{\numberline {7.5.16}\leavevmode {\color {Chapter }RotateList}}{153}{subsection.7.5.16}
+\contentsline {subsection}{\numberline {7.5.17}\leavevmode {\color {Chapter }CirculantMatrix}}{153}{subsection.7.5.17}
+\contentsline {section}{\numberline {7.6}\leavevmode {\color {Chapter } Miscellaneous polynomial functions }}{153}{section.7.6}
+\contentsline {subsection}{\numberline {7.6.1}\leavevmode {\color {Chapter }MatrixTransformationOnMultivariatePolynomial }}{153}{subsection.7.6.1}
+\contentsline {subsection}{\numberline {7.6.2}\leavevmode {\color {Chapter }DegreeMultivariatePolynomial}}{153}{subsection.7.6.2}
+\contentsline {subsection}{\numberline {7.6.3}\leavevmode {\color {Chapter }DegreesMultivariatePolynomial}}{154}{subsection.7.6.3}
+\contentsline {subsection}{\numberline {7.6.4}\leavevmode {\color {Chapter }CoefficientMultivariatePolynomial}}{154}{subsection.7.6.4}
+\contentsline {subsection}{\numberline {7.6.5}\leavevmode {\color {Chapter }SolveLinearSystem}}{155}{subsection.7.6.5}
+\contentsline {subsection}{\numberline {7.6.6}\leavevmode {\color {Chapter }GuavaVersion}}{155}{subsection.7.6.6}
+\contentsline {subsection}{\numberline {7.6.7}\leavevmode {\color {Chapter }ZechLog}}{155}{subsection.7.6.7}
+\contentsline {subsection}{\numberline {7.6.8}\leavevmode {\color {Chapter }CoefficientToPolynomial}}{156}{subsection.7.6.8}
+\contentsline {subsection}{\numberline {7.6.9}\leavevmode {\color {Chapter }DegreesMonomialTerm}}{156}{subsection.7.6.9}
+\contentsline {subsection}{\numberline {7.6.10}\leavevmode {\color {Chapter }DivisorsMultivariatePolynomial}}{157}{subsection.7.6.10}
diff --git a/doc/guava.xml b/doc/guava.xml
new file mode 100644
index 0000000..3cab9db
--- /dev/null
+++ b/doc/guava.xml
@@ -0,0 +1,12684 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+ <!DOCTYPE Book SYSTEM "gapdoc.dtd">
+
+ <Book Name="guava">                           <!-- REQUIRED -->
+
+  <!--             The title page                                 -->
+<TitlePage>    
+                                         <!-- REQUIRED -->
+    <Title>                                             
+        <Package>GUAVA</Package>
+    </Title>
+	
+    <Subtitle>     	                                     <!-- OPTIONAL -->
+       A &GAP;4 Package for computing with error-correcting codes
+        
+    </Subtitle>
+
+    <Version>Version 3.5</Version> 
+    <!-- OPTIONAL -->
+<Author>
+Jasper Cramwinckel
+</Author>
+<Author>
+Erik Roijackers
+</Author>
+<Author>
+Reinald Baart
+</Author>
+<Author>Eric Minkes, Lea Ruscio
+</Author>
+<Author>
+Robert L Miller, <Email>rlm at robertlmiller.com</Email> 
+</Author>
+<Author>
+Tom Boothby
+<!--
+<Email>boothby at u.washington.edu</Email> 
+-->
+</Author>
+<Author>
+Cen (``CJ'') Tjhai                <!-- REQUIRED -->
+<!--           
+         <Address>
+        School of Computing, Communications and Electronics,<Br/>
+        University of Plymouth,<Br/>
+        Plymouth, Devon, PL4 8AA, UK.
+	 </Address>
+-->
+<Email>cen.tjhai at plymouth.ac.uk</Email> 
+<Homepage>http://www.plymouth.ac.uk/staff/ctjhai</Homepage>
+</Author>
+<Author>
+	    David Joyner (Maintainer),                  <!-- REQUIRED -->
+<!--                
+         <Address>
+	 Mathematics Department,<Br/>
+	 U. S. Naval Academy,<Br/>
+	 Annapolis, MD,<Br/>
+         21402 USA.
+	 </Address>
+ -->
+<Email>wdjoyner at gmail.com</Email> 
+<Homepage>http://sage.math.washington.edu/home/wdj/guava/</Homepage>
+</Author> 
+   <Date>April 25, 2008</Date> 
+   <!-- OPTIONAL -->
+
+<Copyright> 
+    <!-- OPTIONAL -->
+©right; The GUAVA Group: 1992-2003
+Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes,
+Lea Ruscio (for the tex version), Jeffrey Leon
+©right; 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers,
+Reinald Baart, Eric Minkes, Lea Ruscio.
+©right; 2007 Robert L Miller, Tom Boothby
+
+<P/>
+<Package>GUAVA</Package> is released under the 
+GNU General Public License (GPL).
+This file is part of <Package>GUAVA</Package>, though as documentation
+it is released under the
+GNU Free Documentation License
+(see <URL>http://www.gnu.org/licenses/licenses.html#FDL</URL>).
+<P/>
+    <Package>GUAVA</Package> is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+<P/>
+    <Package>GUAVA</Package> is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+<P/>
+    You should have received a copy of the GNU General Public License
+    along with <Package>GUAVA</Package>; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+<P/>
+For more details, see 
+<URL>http://www.fsf.org/licenses/gpl.html</URL>. 
+<P/>
+For many years
+<Package>GUAVA</Package> has been released along with the 
+``backtracking''
+C programs of J. Leon. In one of his *.c files the following 
+statements occur:
+``Copyright (C) 1992 by Jeffrey S. Leon.  
+This software may be used freely
+for educational and research purposes.  
+Any other use requires permission from the author.'' 
+The following should now be appended:
+``I, Jeffrey S. Leon, agree to license all the partition
+backtrack code which I have written under the GPL
+(www.fsf.org) as of this date, April 17, 2007.''
+
+</Copyright> 
+
+            <!-- end of title page -->
+
+<Acknowledgements> 
+   <!-- OPTIONAL -->
+   <P/>
+<Package>GUAVA</Package> was originally written by Jasper Cramwinckel, 
+Erik Roijackers, and Reinald Baart in the early-to-mid 
+1990's as a final project during their study of Mathematics at the 
+Delft University of Technology, Department of Pure Mathematics,
+under the direction of Professor Juriaan Simonis. 
+This work was continued in Aachen, at Lehrstuhl D fur Mathematik.
+In version 1.3, new functions were added by Eric Minkes, also from Delft
+University of Technology.
+<P/>
+JC, ER and RB would like to thank the GAP people at the RWTH Aachen for
+their support, A.E. Brouwer for his advice and J. Simonis for his
+supervision.
+   <P/>
+The GAP 4 version of <Package>GUAVA</Package> (versions 1.4 and 1.5)
+was created by Lea Ruscio and (since 2001, starting with version 1.6) 
+is currently maintained by David Joyner, who (with the help of several students)
+has added several new functions. Starting with version 2.7, the ``best linear code''
+tables have been updated. For further details, see the CHANGES file in the
+<Package>GUAVA</Package> directory, also available at 
+<URL>http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava</URL>.
+   <P/>
+<P/>This documentation was prepared with the 
+<Package>GAPDoc</Package> package of Frank L&#xfc;beck and Max Neunh&#xf6;ffer. 
+The conversion from TeX to 
+<Package>GAPDoc</Package>'s XML was done by David Joyner in 2004.
+<P/>
+Please send bug reports, suggestions and other comments about
+<Package>GUAVA</Package> to 
+<Email>support at gap-system.org</Email>. Currently known bugs and 
+suggested <Package>GUAVA</Package> projects are listed on the
+bugs and projects web page
+<URL>http://sage.math.washington.edu/home/wdj/guava/guava2do.html</URL>.
+Older releases and further history can be found on the 
+<Package>GUAVA</Package> web page
+<URL>http://sage.math.washington.edu/home/wdj/guava/</URL>.
+<P/>
+<E>Contributors</E>: Other than the authors listed on the title page,
+the following people have contributed code to the <Package>GUAVA</Package> 
+project: Alexander Hulpke, Steve Linton, Frank L&#xfc;beck, Aron Foster,
+Wayne Irons, Clifton (``Clipper") Lennon, Jason McGowan, Shuhong Gao, 
+Greg Gamble.
+<P/>
+For documentation on Leon's programs, 
+see the src/leon/doc subdirectory of <Package>GUAVA</Package>.
+
+</Acknowledgements>
+</TitlePage>    
+
+
+
+  <TableOfContents/>                        <!-- OPTIONAL -->
+
+
+
+  <!--                The document                        -->
+  <Body>                                    <!-- REQUIRED -->
+
+
+<Chapter><Heading>Introduction</Heading>
+
+
+<Section>
+  <Heading>Introduction to the <Package>GUAVA</Package> package</Heading>
+
+<P/>
+This is the manual of the GAP package <Package>GUAVA</Package> 
+that provides implementations of some routines 
+designed for the construction and analysis of in the theory of
+error-correcting codes. This version of <Package>GUAVA</Package> 
+requires GAP 4.4.5 or later.
+<P/>
+The functions can be divided into three subcategories:
+
+<List>
+<Item>
+Construction of codes:
+<Package>GUAVA</Package> can construct unrestricted, linear and cyclic
+codes. Information about the code, such as operations applicable 
+to the code, is stored in a record-like
+data structure called a GAP object.
+</Item>
+
+<Item>
+Manipulations of codes:
+Manipulation transforms  one code into  another, or constructs a new code
+from two  codes. The new code can  profit from the  data in the record of
+the old code(s), so in these cases calculation time decreases.
+</Item>
+
+<Item>
+Computations of information about codes:
+<Package>GUAVA</Package> can calculate important parameters
+of codes quickly. The results are stored in the codes'
+object components.
+</Item>
+</List>
+<P/>
+Except for the automorphism group and isomorphism
+testing functions, which make use of J.S. Leon's 
+programs (see <Cite Key="Leon91"/> and the documentation 
+in the 'src/leon' subdirectory of the 'guava'
+directory for some details), and
+<Ref Func="MinimumWeight" Style="Number"/> function,
+<Package>GUAVA</Package> is written in the GAP 
+language, and runs on any system supporting GAP4.3 and above. 
+Several algorithms that need the speed were integrated 
+in the GAP kernel. 
+<P/>
+Good general references for error-correcting codes and the 
+technical terms in this manual are MacWilliams and Sloane 
+<Cite Key="MS83"/>
+Huffman and Pless <Cite Key="HP03"/>. 
+
+</Section>
+  
+<Section>
+  <Heading>Installing <Package>GUAVA</Package></Heading>
+<Label Name="Installing GUAVA"/>
+
+To install <Package>GUAVA</Package>
+(as a GAP 4  Package) unpack the archive  file
+in a directory in the `pkg' hierarchy of your version of GAP 4.  
+<P/>
+After unpacking <Package>GUAVA</Package> 
+the GAP-only part of <Package>GUAVA</Package> is installed.
+The parts of <Package>GUAVA</Package>
+depending on J. Leon's backtrack  programs  package
+(for  computing  automorphism  groups)  are  only  available  in  a  UNIX
+environment, where you should proceed as follows:
+Go to the newly created `guava' directory and call  
+<C>`./configure  /gappath'</C>
+where <C>/gappath</C> is the path to the GAP 
+home directory. So for example, if
+you install the package in the main `pkg' directory call
+
+<Verb>
+./configure ../..
+</Verb>
+This will fetch the architecture type for which GAP has been  compiled
+last and create a `Makefile'. Now call
+
+<Verb>
+make
+</Verb>
+
+to compile the binary and to install it in the appropriate place.
+(For a windows machine with CYGWIN installed -
+see <URL>http://www.cygwin.com/</URL> - instructions for 
+compiling Leon's binaries are likely to be similar to those above.
+On a 64-bit SUSE linux computer, instead of the configure command above
+- which will only compile the 32-bit binary - type
+<Verb>
+./configure ../.. --enable-libsuffix=64 
+make
+</Verb>
+to compile Leon's program as a 64 bit native binary. This may also
+work for other 64-bit linux distributions as well.)
+<P/>
+Starting with version 2.5, you should also install the GAP
+package <Package>SONATA</Package> to load GAP. You can download 
+this from the GAP website and unpack it in the `pkg'
+subdirectory.
+
+<P/>
+This completes the installation of <Package>GUAVA</Package>  
+for a single architecture. If
+you use this installation of <Package>GUAVA</Package> 
+on different hardware platforms you
+will have to compile the binary for each  platform  separately.  
+
+</Section>
+  
+<Section>
+  <Heading>Loading <Package>GUAVA</Package></Heading>
+
+
+After starting up GAP, the <Package>GUAVA</Package> 
+package needs to be loaded. Load
+<Package>GUAVA</Package> by typing at the GAP prompt:
+
+<Example>
+gap> LoadPackage( "guava" );
+</Example>
+
+If <Package>GUAVA</Package> isn't already in memory, it is 
+loaded and the author information is displayed.
+If you  are a frequent user of <Package>GUAVA</Package>, 
+you might consider putting this line in your `.gaprc' file.
+
+</Section>
+
+</Chapter>
+
+
+<Chapter>
+<Heading>Coding theory functions in GAP</Heading>
+<Label Name="Coding theory functions in the GAP"/>
+
+This chapter will recall from the GAP4.4.5 manual some of the
+GAP coding theory and finite field functions useful for
+coding theory. Some of these functions are 
+partially written in C for speed. The main functions are
+
+<List>
+<Item>  
+<C>AClosestVectorCombinationsMatFFEVecFFE</C>,
+</Item>
+
+<Item>  
+<C>AClosestVectorCombinationsMatFFEVecFFECoords</C>,
+</Item>
+
+<Item>  
+<C>CosetLeadersMatFFE</C>, 
+</Item>
+
+<Item>  
+<C>DistancesDistributionMatFFEVecFFE</C>,
+</Item>
+
+<Item>  
+<C>DistancesDistributionVecFFEsVecFFE</C>,
+</Item>
+
+<Item>  
+<C>DistanceVecFFE</C> and <C>WeightVecFFE</C>,
+</Item>
+
+<Item>  
+<C>ConwayPolynomial</C> and <C>IsCheapConwayPolynomial</C>,
+</Item>
+
+<Item>  
+<C>IsPrimitivePolynomial</C>,
+and <C>RandomPrimitivePolynomial</C>.
+</Item>
+</List>
+However, the GAP command
+<C>PrimitivePolynomial</C> returns an integer primitive polynomial
+not the finite field kind.
+<P/>
+
+<Section>
+<Heading>
+Distance functions
+</Heading>
+<Label Name="Distance functions"/>
+
+<ManSection Label="AClosestVectorCombinationsMatFFEVecFFE">
+<Func Name="AClosestVectorCombinationsMatFFEVecFFE" 
+Arg=" mat, F, vec, r, st "/>
+
+
+<Description>
+This command runs through the <A>F</A>-linear 
+combinations of the vectors in the rows of 
+the matrix <A>mat</A> that can be written as linear combinations of exactly 
+<A>r</A> rows (that is without using zero as a coefficient) and returns a 
+vector from these that is closest to the vector <A>vec</A>. The length of 
+the rows of <A>mat</A> and the length of <A>vec</A> must be equal, 
+and all elements must lie in <A>F</A>. 
+The rows of <A>mat</A> must be linearly independent. 
+If it finds a vector of distance at most <A>st</A>, which must be a 
+nonnegative integer, then it stops immediately and returns this vector.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111");
+[ 1 2 1 0 1 1 1 1 ]
+gap> v:=VectorCodeword(v);
+[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
+gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]
+</Example>
+<!--
+F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1;
+C := GeneratorPolCode(pol,8,F);
+v:=Codeword("12101111");
+v:=VectorCodeword(v);
+G:=GeneratorMat(C);
+AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+-->
+
+
+<ManSection Label="AClosestVectorCombinationsMatFFEVecFFECoords">
+<Func Name="AClosestVectorComb..MatFFEVecFFECoords" 
+Arg=" mat, F, vec, r, st "/>
+
+<Description>
+<C>AClosestVectorCombinationsMatFFEVecFFECoords</C> 
+returns a two element list containing (a) the same closest 
+vector as in <C>AClosestVectorCombinationsMatFFEVecFFE</C>,
+and (b) a vector <A>v</A> with exactly <A>r</A> non-zero 
+entries, such that <M>v*mat</M> is the closest vector.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
+[ 1 2 1 0 1 1 1 1 ]
+gap> G:=GeneratorMat(C);;
+gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+[ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]
+</Example>
+<!--
+F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1;
+C := GeneratorPolCode(pol,8,F);
+v:=Codeword("12101111"); v:=VectorCodeword(v);;
+G:=GeneratorMat(C);;
+AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+-->
+
+<ManSection Label="DistancesDistributionMatFFEVecFFE">
+<Func Name="DistancesDistributionMatFFEVecFFE" 
+Arg=" mat, f, vec "/>
+
+<Description>
+<C>DistancesDistributionMatFFEVecFFE</C> 
+returns the distances distribution of the vector <A>vec</A> to the vectors 
+in the vector space generated by the rows of the matrix <A>mat</A> over the finite field <A>f</A>. 
+All vectors must have the same length, and all elements must lie in a common 
+field. The distances distribution is a list <M>d</M> of length 
+<M>Length(vec)+1</M>, such that the value <M>d[i]</M> is the number of 
+vectors in vecs that have distance <M>i+1</M> to <A>vec</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+[ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]
+</Example>
+<!--
+v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+-->
+
+<ManSection Label="DistancesDistributionVecFFEsVecFFE">
+<Func Name="DistancesDistributionVecFFEsVecFFE" 
+Arg=" vecs, vec "/>
+
+<Description>
+<C>DistancesDistributionVecFFEsVecFFE</C> returns 
+the distances distribution of the vector 
+<A>vec</A> to the vectors in the list <A>vecs</A>. All vectors must 
+have the same length, and all elements must lie in a 
+common field. The distances distribution is a list <M>d</M> of 
+length <M>Length(vec)+1</M>, such that the value <M>d[i]</M> 
+is the number of vectors in <A>vecs</A> that have distance 
+<M>i+1</M> to <A>vec</A>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
+[ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]
+</Example>
+<!--
+v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+DistancesDistributionVecFFEsVecFFE(vecs,v);
+-->
+
+<ManSection Label="WeightVecFFE">
+<Func Name="WeightVecFFE" Arg=" vec "/>
+
+
+<Description>
+<C>WeightVecFFE</C> returns the weight of the finite field 
+vector <A>vec</A>, i.e. the number of nonzero entries.
+</Description>
+</ManSection>
+
+<Example>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> WeightVecFFE(v);
+7
+</Example>
+<!--
+v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+WeightVecFFE(v);
+-->
+
+<Index>
+Hamming metric
+</Index>
+
+<ManSection Label="DistanceVecFFE">
+<Func Name="DistanceVecFFE" Arg=" vec1 vec2 "/>
+
+
+<Description>
+The <E>Hamming metric</E> on <M>GF(q)^n</M> is the function
+<Display>
+dist((v_1,...,v_n),(w_1,...,w_n))
+=|\{i\in [1..n]\ |\ v_i\not= w_i\}|.
+</Display>
+This is also called the (Hamming) distance
+between <M>v=(v_1,...,v_n)</M> and <M>w=(w_1,...,w_n)</M>.
+<C>DistanceVecFFE</C> 
+returns the distance between the two vectors <A>vec1</A> and 
+<A>vec2</A>, which must have the same length and whose 
+elements must lie in a common field. The distance is the number 
+of places where <A>vec1</A> and <A>vec2</A> differ.
+</Description>
+</ManSection>
+
+<Example>
+gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> DistanceVecFFE(v1,v2);
+2
+</Example>
+<!--
+v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+DistanceVecFFE(v1,v2);
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Other functions
+</Heading>
+<Label Name="Other functions"/>
+
+We basically repeat, with minor variation, the material
+in the GAP manual or from Frank Luebeck's website
+<URL>http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol</URL> 
+on Conway polynomials.
+
+<Index><M>GF(p)</M></Index>
+
+The <B>prime fields</B>: If <M>p\geq 2</M> is a prime then
+<M>GF(p)</M> denotes the field <M>{\mathbb{Z}}/p{\mathbb{Z}}</M>,
+with addition and multiplication performed mod <M>p</M>.
+<P/>
+<Index><M>GF(q)</M></Index>
+The <B>prime power fields</B>: Suppose <M>q=p^r</M> is a prime
+power, <M>r>1</M>, and put <M>F=GF(p)</M>. Let <M>F[x]</M> 
+denote the ring of all polynomials over <M>F</M>
+and let <M>f(x)</M> denote a monic irreducible
+polynomial in <M>F[x]</M> of degree <M>r</M>. The quotient
+<M>E = F[x]/(f(x))= F[x]/f(x)F[x]</M> is a field
+with <M>q</M> elements. 
+If <M>f(x)</M> and <M>E</M> are related in this way, we say that
+<M>f(x)</M> is the <B>defining polynomial</B> of <M>E</M>.
+<Index>defining polynomial</Index> 
+Any defining polynomial factors completely into 
+distinct linear factors over the field it defines.
+<P/>
+For any finite field <M>F</M>, the multiplicative group of
+non-zero elements <M>F^\times</M> is a cyclic group. An 
+<M>\alpha \in F</M> is called a <B>primitive element</B> if it is a 
+generator of <M>F^\times</M>. A defining polynomial
+<M>f(x)</M> of <M>F</M> is said to be <B>primitive</B> if
+it has a root in <M>F</M> which is a primitive element.
+<Index>primitive element</Index> 
+
+
+<ManSection Label="ConwayPolynomial">
+<Func Name="ConwayPolynomial" Arg=" p n "/>
+
+
+<Description>
+A standard notation for the elements of <M>GF(p)</M> is 
+given via the representatives <M>0, ..., p-1</M> of the cosets modulo <M>p</M>. 
+We order these elements by <M>0 \ \ \langle\ \  1 \ \ \langle\ \  2 \ \ \langle\ \  ... \ \ \langle\ \  p-1</M>.
+We introduce an ordering of the polynomials of degree <M>r</M> over <M>GF(p)</M>. 
+Let <M>g(x) = g_rx^r + ... + g_0</M> and 
+<M>h(x) = h_rx^r + ... + h_0</M> (by convention, <M>g_i=h_i=0</M> for <M>i\ \ \rangle\ \  r</M>). 
+Then we define <M>g \ \ \langle\ \  h</M> if and only if 
+there is an index <M>k</M> with <M>g_i = h_i</M> for <M>i \ \ \rangle\ \  k</M> and 
+<M>(-1)^{r-k} g_k \ \ \langle\ \  (-1)^{r-k} h_k</M>.
+<P/>
+The <B>Conway polynomial</B> <M>f_{p,r}(x)</M> for <M>GF(p^r)</M> is the smallest 
+polynomial of degree <M>r</M> with respect to this ordering such that:
+
+<List>
+<Item>
+ <M>f_{p,r}(x)</M> is monic,
+</Item>
+<Item>
+ <M>f_{p,r}(x)</M> is primitive, that is, any zero is a generator of 
+the (cyclic) multiplicative group of <M>GF(p^r)</M>,
+</Item>
+<Item>
+for each proper divisor <M>m</M> of <M>r</M> we have that 
+<M>f_{p,m}(x^{(p^r-1) / (p^m-1)}) \equiv 0 \pmod{f_{p,r}(x)}</M>; 
+that is, the <M>(p^r-1) / (p^m-1)</M>-th power of a zero of 
+<M>f_{p,r}(x)</M> is a zero of <M>f_{p,m}(x)</M>.
+</Item>
+</List>
+<P/>
+<C>ConwayPolynomial(p,n)</C> returns the polynomial <M>f_{p,r}(x)</M> defined above.
+<P/>
+<C>IsCheapConwayPolynomial(p,n)</C> 
+returns true if <C>ConwayPolynomial( p, n )</C> will give a result in 
+reasonable time. This is either the case when this polynomial is 
+pre-computed, or if <M>n,p</M> are not too big. 
+</Description>
+</ManSection>
+<Index>IsCheapConwayPolynomial</Index>
+
+<ManSection Label="RandomPrimitivePolynomial">
+<Func Name="RandomPrimitivePolynomial" Arg=" F n "/>
+
+
+<Description>
+For a finite field <A>F</A> and a positive integer <A>n</A> this function 
+returns a primitive polynomial of degree <A>n</A> over <A>F</A>, 
+that is a zero of this polynomial has maximal multiplicative order 
+<M>|F|^n-1</M>.
+<P/>
+<C>IsPrimitivePolynomial(f)</C> can be used to check if a
+univariate polynomial <A>f</A> is primitive or not.  
+</Description>
+</ManSection>
+<Index>IsPrimitivePolynomial</Index>
+
+
+</Section>
+</Chapter>
+
+
+<Chapter>
+<Heading>Codewords</Heading>
+<Label Name="Codewords"/>
+
+Let <M>GF(q)</M> denote a finite field with <M>q</M> (a prime power)
+elements. A <E>code</E> is a subset <M>C</M> of some
+finite-dimensional vector space <M>V</M> over <M>GF(q)</M>. The
+<E>length</E> of <M>C</M> is the dimension of <M>V</M>.
+Usually, <M>V=GF(q)^n</M> and the length is the number of 
+coordinate entries. When <M>C</M> is itself a vector space 
+over <M>GF(q)</M> then it is called a <E>linear code</E>
+<Index>linear code</Index> and 
+the <E>dimension</E> of <M>C</M> 
+is its dimension as a vector space over <M>GF(q)</M>.
+<P/>
+In <Package>GUAVA</Package>, a `codeword' is a GAP record, 
+with one of its components being an element in <M>V</M>.
+Likewise, a `code' is a GAP record, 
+with one of its components being a subset (or subspace with given
+basis, if <M>C</M> is linear) of <M>V</M>.
+
+<Example>
+  gap> C:=RandomLinearCode(20,10,GF(4));
+  a  [20,10,?] randomly generated code over GF(4)
+  gap> c:=Random(C);
+  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
+  gap> NamesOfComponents(C);
+  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+    "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
+     "Representative", "ZeroImmutable" ]
+  gap> NamesOfComponents(c);
+  [ "VectorCodeword", "WordLength", "treatAsPoly" ]
+  gap> c!.VectorCodeword;
+  [ immutable compressed vector length 20 over GF(4) ] 
+  gap> Display(last);
+  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
+    Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
+    Z(2)^0, 0*Z(2) ]
+  gap> C!.Dimension;
+  10
+</Example>
+<!--
+C:=RandomLinearCode(20,10,GF(4));
+c:=Random(C);
+NamesOfComponents(C);
+NamesOfComponents(c);
+c!.VectorCodeword;
+Display(last);
+C!.Dimension;
+-->
+
+Mathematically, a `codeword' is an element of a code <M>C</M>,
+but in <Package>GUAVA</Package> the <C>Codeword</C> 
+and <C>VectorCodeword</C> commands have implementations which do not check if
+the codeword belongs to <M>C</M> (i.e., are independent
+of the code itself). They exist primarily to make it
+easier for the user to construct a the associated GAP record.
+Using these commands, one can enter into a GAP
+both a codeword <M>c</M> (belonging to <M>C</M>)
+and a received word <M>r</M> (not belonging to <M>C</M>)
+using the same command. The user can input codewords in different
+formats (as strings, vectors, and polynomials), 
+and output information is formatted in a readable way.
+<P/>
+A codeword <M>c</M> in a linear code <M>C</M> arises in practice by 
+an initial encoding of a 'block' message
+<M>m</M>, adding enough redundancy to recover <M>m</M> after 
+<M>c</M> is transmitted via a 'noisy' communication medium. 
+In <Package>GUAVA</Package>, for linear codes, 
+the map <M>m\longmapsto c</M>
+is computed using the command <C>c:=m*C</C> and
+recovering <M>m</M> from <M>c</M> is obtained by the
+command <C>InformationWord(C,c)</C>. These commands are explained 
+more below.
+<P/>
+Many operations are available on codewords themselves,
+although codewords also work together with codes 
+(see chapter <Ref Label="Codes" Style="Number"/> on Codes).
+<P/>
+The first section describes how codewords are constructed (see 
+<Ref Func="Codeword" Style="Number"/> and 
+<Ref Func="IsCodeword" Style="Number"/>).
+Sections <Ref Label="Comparisons of Codewords" Style="Number"/>  and
+<Ref Label="Arithmetic Operations for Codewords" Style="Number"/>
+describe the arithmetic operations applicable to codewords.
+Section 
+<Ref Label="convert Codewords to Vectors or Polynomials" Style="Number"/>
+describe functions that convert codewords back to vectors or polynomials
+(see 
+<Ref Func="VectorCodeword" Style="Number"/> and 
+<Ref Func="PolyCodeword" Style="Number"/>).
+Section <Ref Label="Functions that Change the Display Form of a 
+Codeword" Style="Number"/>  describe
+functions  that  change  the   way   a   codeword   is   displayed   (see
+<Ref Func="TreatAsVector" Style="Number"/> and 
+<Ref Func="TreatAsPoly" Style="Number"/>).
+Finally, Section <Ref Label="Other Codeword Functions" Style="Number"/> 
+describes  a  function  to
+generate a null word (see <Ref Func="NullWord" Style="Number"/>) 
+and some functions for extracting
+properties of codewords   
+(see <Ref Func="DistanceCodeword" Style="Number"/>,   
+<Ref Func="Support" Style="Number"/>
+and <Ref Func="WeightCodeword" Style="Number"/>).
+
+
+<Section>
+<Heading>Construction of Codewords</Heading>
+<Label Name="Construction of Codewords"/>
+
+<ManSection Label="Codeword">
+<Func Name="Codeword" Arg=" obj [n] [F] "/>
+		   
+<Description>
+<C>Codeword</C> returns a codeword or a list of codewords constructed from
+<Arg>obj</Arg>. 
+ The object <Arg>obj</Arg>  can be a vector, a string, a polynomial or  a
+codeword. It may also be a list of those (even a mixed list).
+<P/>
+If a number <Arg>n</Arg> is specified, all constructed codewords 
+have  length <Arg>n</Arg>. 
+This is the only way to make sure that all elements of 
+<Arg>obj</Arg> are converted to codewords of the same length. 
+Elements of <Arg>obj</Arg> that are
+longer than <Arg>n</Arg> are reduced in length by cutting of the last
+positions. Elements of <Arg>obj</Arg> that are 
+shorter than <Arg>n</Arg> are lengthened by
+adding zeros at the end. If no <Arg>n</Arg> is specified, each constructed
+codeword is handled individually.
+<P/>
+If a  Galois field <Arg>F</Arg> is specified, all  
+codewords are constructed over
+this field. This is the only way to make sure that all elements of
+<Arg>obj</Arg>
+are converted to the same field <Arg>F</Arg> 
+(otherwise they are converted one by
+one). Note that all elements of <Arg>obj</Arg> must have elements over 
+<Arg>F</Arg> or over `Integers'.  
+Converting  from  one  Galois field to another is not
+allowed. If no <Arg>F</Arg> is specified, vectors or 
+strings with integer elements
+will be converted to the smallest Galois field possible.
+<P/>
+Note that a significant speed increase is achieved  
+if <Arg>F</Arg> is specified,
+even when all elements of <Arg>obj</Arg> already have 
+elements over <Arg>F</Arg>.
+<P/>
+Every vector in <Arg>obj</Arg> can be a finite field vector over 
+<Arg>F</Arg> or a vector over `Integers'. In the last case, it is converted to 
+<Arg>F</Arg> or, if omitted, to the smallest Galois field possible.
+<P/>
+Every string in <Arg>obj</Arg> must be a string of numbers, 
+without spaces, commas
+or any other characters. These numbers must be from 0 to 9. The string is
+converted to a codeword over <Arg>F</Arg> or, 
+if <Arg>F</Arg> is omitted, over the smallest
+Galois  field  possible. Note that since all numbers in the string are
+interpreted as one-digit numbers, Galois fields of size larger than  10
+are not properly represented when using strings. In fact, no 
+finite field of size larger than 11 arises in this fashion at all.
+<P/>
+Every polynomial in <Arg>obj</Arg> is converted to a codeword of 
+length <Arg>n</Arg> or, if
+omitted, of a length dictated by the degree of the polynomial. 
+If <Arg>F</Arg> is specified, a polynomial in 
+<Arg>obj</Arg> must be over <Arg>F</Arg>.
+<P/>
+Every element of <Arg>obj</Arg> that is already a codeword  is 
+changed to  a codeword of length <Arg>n</Arg>. 
+If no <Arg>n</Arg> was specified, the 
+codeword doesn't change. If <Arg>F</Arg> is specified, 
+the codeword must have base field <Arg>F</Arg>.
+
+ <Example>
+gap> c := Codeword([0,1,1,1,0]);
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c ); 
+[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
+gap> c2 := Codeword([0,1,1,1,0], GF(3));
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c2 );
+[ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
+gap> Codeword([c, c2, "0110"]);
+[ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
+gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+Z(2)^0+x_1^2
+gap> Codeword(p);
+x^2 + 1 
+</Example>
+<!--
+c := Codeword([0,1,1,1,0]);
+VectorCodeword( c ); 
+c2 := Codeword([0,1,1,1,0], GF(3));
+VectorCodeword( c2 );
+Codeword([c, c2, "0110"]);
+p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+Codeword(p);
+-->
+
+<P/>
+This command can also be called using the syntax
+<C>Codeword(obj,C)</C>.
+In this format, the elements of <Arg>obj</Arg>
+are converted to elements of the
+same ambient vector space as the elements of a code <Arg>C</Arg>. 
+The command <C>Codeword(c,C)</C> 
+is the same  as calling  <C>Codeword(c,n,F)</C>, where
+<Arg>n</Arg> is the word length of <Arg>C</Arg>
+and the <Arg>F</Arg> is the ground field of <Arg>C</Arg>.
+        </Description>
+</ManSection>			  
+
+ <Example>
+gap> C := WholeSpaceCode(7,GF(5));
+a cyclic [7,7,1]0 whole space code over GF(5)
+gap> Codeword(["0220110", [1,1,1]], C);
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
+gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> Codeword("1000000000",C);
+[ 1 0 0 0 0 0 0 0 0 0 ]
+gap> Codeword("1000000000",10,GF(3));
+[ 1 0 0 0 0 0 0 0 0 0 ]
+</Example>
+<!--
+C := WholeSpaceCode(7,GF(5));
+Codeword(["0220110", [1,1,1]], C);
+Codeword(["0220110", [1,1,1]], 7, GF(5));
+C:=RandomLinearCode(10,5,GF(3));
+Codeword("1000000000",C);
+Codeword("1000000000",10,GF(3));
+-->
+
+<ManSection Label="CodewordNr">
+
+<Func Name="CodewordNr" Arg=" C list "/>
+		   
+        <Description>
+<C>CodewordNr</C> returns a list of codewords of <Arg>C</Arg>. 
+<Arg>list</Arg> may  be a list of
+integers  or a single   integer.   For   each  integer  of 
+<Arg>list</Arg>, the
+corresponding codeword of <Arg>C</Arg> is returned. 
+The correspondence of a number
+<M>i</M> with a codeword is determined as follows: if a list of elements of
+<Arg>C</Arg>  is  available, the <M>i^{th}</M> 
+element is taken.  Otherwise, it is
+calculated by multiplication of the <M>i^{th}</M> information vector  by the
+generator matrix or generator  polynomial, where the  information vectors
+are ordered lexicographically. In particular, the returned
+codeword(s) could be a vector or a polynomial.
+
+So <C>CodewordNr(C, i)</C> is equal to 
+<C>AsSSortedList(C)[i]</C>, described in the next chapter.  
+The latter function first calculates the set of all 
+the elements of <M>C</M> and then
+returns the  <M>i^{th}</M> element of that set, whereas the 
+former only calculates the <M>i^{th}</M> codeword.
+        </Description>
+</ManSection>			  
+
+<Example>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> R := ReedSolomonCode(2,2);
+a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
+gap> AsSSortedList(R);
+[ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
+gap> CodewordNr(R, [1,3]);
+[ [ 0 0 ], [ 2 2 ] ]
+</Example>
+<!--
+B := BinaryGolayCode();
+c := CodewordNr(B, 4);
+R := ReedSolomonCode(2,2);
+AsSSortedList(R);
+CodewordNr(R, [1,3]);
+-->
+
+<ManSection>
+   <Func Name="IsCodeword" Arg=" obj "/>
+		   
+<Description>
+<C>IsCodeword</C> returns `true' if <Arg>obj</Arg>, 
+which can be an object of arbitrary
+type, is of  the codeword type and `false'  otherwise.  The function will
+signal an error if <Arg>obj</Arg> is an unbound variable.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> IsCodeword(1);
+false
+gap> IsCodeword(ReedMullerCode(2,3));
+false
+gap> IsCodeword("11111");
+false
+gap> IsCodeword(Codeword("11111"));
+true 
+</Example>
+<!--
+IsCodeword(1);
+IsCodeword(ReedMullerCode(2,3));
+IsCodeword("11111");
+IsCodeword(Codeword("11111"));
+-->
+
+
+</Section>
+
+
+<Section>
+<Heading>Comparisons of Codewords</Heading>
+<Label Name="Comparisons of Codewords"/>
+
+<ManSection Label="=">
+<Func Name="=" Arg=" c1 c2"/>
+		   
+<Description>
+The equality operator <C>c1 = c2</C>
+evaluates to `true' if the codewords 
+<A>c1</A>
+and <A>c2</A> are equal, and to  `false' otherwise. 
+Note  that codewords are  equal if  and only  if  their base  vectors are
+equal.   Whether they  are  represented  as a vector  or  polynomial  has
+nothing to do with the comparison.
+<P/>
+Comparing codewords with objects of other types is not recommended,
+although it is  possible. If <A>c2</A> is  the  codeword, the  other object
+<A>c1</A>  is first  converted to a   codeword, after  which  comparison is
+possible. This way, a codeword can be compared with a vector, polynomial,
+or string. If <A>c1</A> is the codeword, then problems may arise if 
+<A>c2</A> is a polynomial.  In that case, the comparison always 
+yields  a `false', because the polynomial comparison is called.
+<P/>
+The equality operator is also denoted <C>EQ</C>, and
+<C>EQ(c1,c2)</C> is the same as <C>c1 = c2</C>.
+There is also an inequality operator, &tlt; &tgt;,
+or <C>not EQ</C>.
+
+<Index>not =</Index>
+<Index>&tlt; &tgt;</Index>
+       </Description>
+</ManSection>			  
+
+<Example>
+gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+Z(2)^0+x_1^3
+gap> c := Codeword(P, GF(2));
+x^3 + 1
+gap> P = c;        # codeword operation
+true
+gap> c2 := Codeword("1001", GF(2));
+[ 1 0 0 1 ]
+gap> c = c2;
+true 
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c1:=Random(C);
+[ 1 0 0 1 1 0 0 ]
+gap> c2:=Random(C);
+[ 0 1 0 0 1 0 1 ]
+gap> EQ(c1,c2);
+false
+gap> not EQ(c1,c2);
+true
+</Example>
+<!--
+P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+c := Codeword(P, GF(2));
+P = c;        # codeword operation
+c2 := Codeword("1001", GF(2));
+c = c2;
+C:=HammingCode(3);
+c1:=Random(C);
+c2:=Random(C);
+EQ(c1,c2);
+not EQ(c1,c2);
+-->
+
+</Section>
+
+
+<Section>
+<Heading>Arithmetic Operations for Codewords</Heading>
+<Label Name="Arithmetic Operations for Codewords"/>
+
+<ManSection Label="+ codewords">
+<Func Name="+" Arg="c1 c2"/>
+		   
+<Description>
+The following operations are always available for codewords. The operands
+must have a common base field, and must have the same length. No implicit
+conversions are performed.
+<Index>codewords, addition</Index>
+<P/>
+The operator  <C>+</C>  evaluates to the sum of the codewords <A>c1</A> 
+and <A>c2</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> c:=Random(C);
+[ 1 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"2000000000");
+[ 0 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"1000000000");
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(3));
+c:=Random(C);
+Codeword(c+"2000000000");
+Codeword(c+"1000000000");
+-->
+The last command returns a GAP ERROR since 
+the `codeword' which <Package>GUAVA</Package>
+associates to "1000000000" belongs to <M>GF(2)</M>
+and not <M>GF(3)</M>.
+
+
+<ManSection Label="-">
+<Func Name="-" Arg="c1 c2"/>
+		   
+<Description>
+Similar to addition:
+the operator <C>-</C> evaluates to the difference of the codewords 
+<A>c1</A> and <A>c2</A>.
+<Index>codewords, subtraction</Index>
+</Description>
+</ManSection>
+
+<ManSection Label="+">
+<Func Name="+" Arg="v C"/>
+
+<Description>
+The operator <C>v+C</C> evaluates to the coset code of code <A>C</A> 
+after adding a `codeword' <A>v</A> to all codewords in <A>C</A>. 
+Note that if <M>c \in C</M> then mathematically
+<M>c+C=C</M> but <Package>GUAVA</Package> only
+sees them equal as <E>sets</E>. 
+See <Ref Func="CosetCode" Style="Number"/>.
+<P/>
+Note that the command <C>C+v</C> returns the same output
+as the command <C>v+C</C>.
+<P/>
+<Index>codewords, cosets</Index>
+</Description>
+</ManSection>
+<Index>coset</Index>
+
+<Example>
+gap> C:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 0 0 0 0 0 0 0 ]
+gap> c+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> c+C=C;
+true
+gap> IsLinearCode(c+C);
+false
+gap> v:=Codeword("100000000");
+[ 1 0 0 0 0 0 0 0 0 ]
+gap> v+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> C=v+C;
+false
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
+gap> v:=Codeword("0011");
+[ 0 0 1 1 ]
+gap> C+v;
+[ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
+gap> Elements(C+v);
+[ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]
+</Example>
+<!--
+C:=RandomLinearCode(10,5);
+c:=Random(C);
+c+C;
+c+C=C;
+IsLinearCode(c+C);
+v:=Codeword("100000000");
+v+C;
+C=v+C;
+C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+Elements(C);
+v:=Codeword("0011");
+C+v;
+Elements(C+v);
+-->
+
+
+In general, the operations just described can also be performed on
+codewords expressed as vectors, strings or polynomials, 
+although this is not recommended. The
+vector, string  or polynomial is first converted to a codeword, after
+which the normal operation is performed. For this to go right, make sure
+that at least one of the operands is a codeword. Further more, it will
+not work when the right operand is a polynomial. In that case, the
+polynomial operations (<C>FiniteFieldPolynomialOps</C>) are called, instead of
+the codeword operations (<C>CodewordOps</C>).
+<P/>
+Some other code-oriented operations with codewords are described in
+<Ref Subsect="Operations for Codes" Style="Number"/>.		  
+
+</Section>
+
+<Section>
+<Heading>
+Functions that Convert Codewords to Vectors or Polynomials
+</Heading>
+<Label Name="convert Codewords to Vectors or Polynomials"/>
+
+
+<ManSection Label="VectorCodeword">
+<Func Name="VectorCodeword" Arg="obj"/>
+		   
+<Description>
+Here <A>obj</A> can be a code word or a list of code words. This function
+returns the corresponding vectors over a finite field.
+       </Description>
+</ManSection>			  
+
+<Example>
+gap> a := Codeword("011011");; 
+gap> VectorCodeword(a);
+[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]
+</Example>
+<!--
+a := Codeword("011011");; 
+VectorCodeword(a);
+-->
+
+<ManSection Label="PolyCodeword">
+<Func Name="PolyCodeword" Arg="obj"/>
+		   
+<Description>
+<C>PolyCodeword</C> returns a polynomial or a list 
+of polynomials over a Galois field, converted from <A>obj</A>. 
+The object <A>obj</A> can be a codeword, or a list of codewords.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> a := Codeword("011011");; 
+gap> PolyCodeword(a);
+x_1+x_1^2+x_1^4+x_1^5
+</Example>
+<!--
+a := Codeword("011011");; 
+PolyCodeword(a);
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Functions that Change the Display Form of a Codeword
+</Heading>
+<Label Name="Functions that Change the Display Form of a Codeword"/>
+
+<ManSection Label="TreatAsVector">
+<Func Name="TreatAsVector" Arg="obj"/>
+		   
+<Description>
+<C>TreatAsVector</C> adapts the codewords in 
+<A>obj</A> to make sure they are printed as vectors. 
+<A>obj</A> may be a codeword or a list of codewords.  
+Elements of <A>obj</A> that are not codewords are ignored. After
+this function is called, the codewords will be treated as vectors. The
+vector representation is obtained by using the coefficient list of the
+polynomial.
+<P/>
+Note that this <E>only</E> changes the way a codeword is <E>printed</E>.
+<C>TreatAsVector</C> returns nothing, it is called only for its side effect.
+The  function <C>VectorCodeword</C> converts codewords to vectors (see
+<Ref Func="VectorCodeword" Style="Number"/>).
+</Description>
+</ManSection>			  
+
+<Example>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> TreatAsVector(c);
+gap> c;
+[ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 
+</Example>
+<!--
+B := BinaryGolayCode();
+c := CodewordNr(B, 4);
+TreatAsVector(c);
+c;
+-->
+
+<ManSection Label="TreatAsPoly">
+<Func Name="TreatAsPoly" Arg="obj"/>
+		   
+<Description>
+<C>TreatAsPoly</C> adapts the codewords in <A>obj</A> 
+to make sure they are printed
+as polynomials. <A>obj</A> may be a codeword or a list of codewords. Elements
+of <A>obj</A> that are not codewords are ignored.  After this function is
+called, the codewords will be treated as polynomials. The finite field
+vector that defines the codeword is used as a coefficient list of the
+polynomial representation,  where the first element of the vector is the
+coefficient of degree zero, the second element is the coefficient of
+degree one, etc, until the last element, which is the coefficient of
+highest degree.
+<P/>
+Note that this <E>only</E> changes the way a codeword is 
+<E>printed</E>.  <C>TreatAsPoly</C>
+returns nothing,  it is called only for its side effect. The function
+<C>PolyCodeword</C> converts codewords to polynomials 
+(see <Ref Func="PolyCodeword" Style="Number"/>).
+</Description>
+</ManSection>			  
+
+<Example>
+gap> a := Codeword("00001",GF(2));
+[ 0 0 0 0 1 ]
+gap> TreatAsPoly(a); a;
+x^4
+gap> b := NullWord(6,GF(4));
+[ 0 0 0 0 0 0 ]
+gap> TreatAsPoly(b); b;
+0 
+</Example>
+<!--
+a := Codeword("00001",GF(2));
+TreatAsPoly(a); a;
+b := NullWord(6,GF(4));
+TreatAsPoly(b); b;
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Other Codeword Functions
+</Heading>
+<Label Name="Other Codeword Functions"/>
+
+
+<ManSection Label="NullWord">
+<Func Name="NullWord" Arg="n F"/>
+		   
+<Description>
+Other uses: <C>NullWord( n )</C> (default <M>F=GF(2)</M>)
+and <C>NullWord( C )</C>.
+
+<C>NullWord</C> returns a codeword of length <A>n</A> over the 
+field <A>F</A> of only zeros.  The integer
+<A>n</A> must be greater then zero. If
+only a code <Arg>C</Arg> is specified, <C>NullWord</C> 
+will return a null word with both the
+word length and the Galois field of <Arg>C</Arg>.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> NullWord(8);
+[ 0 0 0 0 0 0 0 0 ]
+gap> Codeword("0000") = NullWord(4);
+true
+gap> NullWord(5,GF(16));
+[ 0 0 0 0 0 ]
+gap> NullWord(ExtendedTernaryGolayCode());
+[ 0 0 0 0 0 0 0 0 0 0 0 0 ] 
+</Example>
+<!--
+NullWord(8);
+Codeword("0000") = NullWord(4);
+NullWord(5,GF(16));
+NullWord(ExtendedTernaryGolayCode());
+-->
+
+<ManSection Label="DistanceCodeword">
+<Func Name="DistanceCodeword" Arg="c1 c2"/>
+		   
+<Description>
+<C>DistanceCodeword</C> returns the Hamming distance from 
+<A>c1</A> to <A>c2</A>. Both
+variables  must be codewords with equal word length over the same Galois
+field. The Hamming distance between two words is the number of places in
+which they differ. As a result, <C>DistanceCodeword</C>  
+always returns an integer between zero and the word length of the codewords.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+gap> DistanceCodeword(a, b);
+4
+gap> DistanceCodeword(b, a);
+4
+gap> DistanceCodeword(a, a);
+0 
+</Example>
+<!--
+a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+DistanceCodeword(a, b);
+DistanceCodeword(b, a);
+DistanceCodeword(a, a);
+-->
+
+<ManSection Label="Support">
+<Func Name="Support" Arg="c"/>
+		   
+<Description>
+<C>Support</C> returns a set of integers indicating the positions of 
+the non-zero entries in a codeword <A>c</A>.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> a := Codeword("012320023002");; Support(a);
+[ 2, 3, 4, 5, 8, 9, 12 ]
+gap> Support(NullWord(7));
+[  ] 
+</Example>
+<!--
+a := Codeword("012320023002");; Support(a);
+Support(NullWord(7));
+-->
+
+The support of a list with codewords can be calculated by taking the
+union of the individual supports. The weight of the support is the length
+of the set.
+
+<Example>
+gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
+gap> S := Union(List(L, i -> Support(i)));
+[ 1, 2, 3, 5 ]
+gap> Length(S);
+4 
+</Example>
+<!--
+L := Codeword(["000000", "101010", "222000"], GF(3));;
+S := Union(List(L, i -> Support(i)));
+Length(S);
+-->
+
+<ManSection Label="WeightCodeword">
+<Func Name="WeightCodeword" Arg="c"/>
+		   
+<Description>
+<C>WeightCodeword</C> returns the weight of a codeword 
+<M>c</M>, the number of non-zero entries in <A>c</A>. 
+As a result, <C>WeightCodeword</C> always returns an
+integer between zero and the word length of the codeword.
+</Description>
+</ManSection>			  
+
+<Example>
+gap> WeightCodeword(Codeword("22222"));
+5
+gap> WeightCodeword(NullWord(3));
+0
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+3 
+</Example>
+<!--
+WeightCodeword(Codeword("22222"));
+WeightCodeword(NullWord(3));
+C := HammingCode(3);
+Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+-->
+
+</Section>
+
+</Chapter>
+
+<Chapter>
+<Heading>Codes</Heading>
+<Label Name="Codes"/>
+
+A <E>code</E> is a set of codewords (recall a
+<Index>code</Index>
+<Index>code, elements of</Index>
+codeword in <Package>GUAVA</Package> is simply 
+a sequence of elements of a finite field  
+<M>GF(q)</M>, where <M>q</M> is  a  prime power). 
+We  call these the <E>elements</E> of the code. 
+Depending on the type of code, a codeword can be interpreted as
+a  vector or as a polynomial. 
+This is explained in more detail in Chapter 
+<Ref Label="Codewords" Style="Number"/>.
+<P/>
+In <Package>GUAVA</Package>, 
+codes can be a set specified by its elements (this will be called
+an <E>unrestricted code</E>), 
+<Index>code, unrestricted</Index>
+by a generator matrix listing a set of basis elements 
+(for a linear code) or by a
+generator polynomial (for a cyclic code).
+<P/>
+Any code can be defined by its elements. If you like, you can give the
+code a name.
+
+<Example>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+</Example>
+
+An <M>(n,M,d)</M> code is a code with word <E>length</E> 
+<M>n</M>,  <E>size</E> <M>M</M> and
+<E>minimum distance</E> <M>d</M>. 
+<Index>
+code, <M>(n,M,d)</M> 
+</Index>
+<Index>
+minimum  distance
+</Index>
+<Index>
+length
+</Index>
+<Index>
+size
+</Index>
+If the minimum distance has not yet been
+calculated, the lower bound and upper bound are printed
+(except in the case where the code is a random linear codes,
+where these are not printed for efficiency reasons). So
+
+<Verb>
+a (4,3,1..4)2..4 code over GF(2)
+</Verb>
+means a binary unrestricted code of length <M>4</M>, with <M>3</M> 
+elements and the minimum distance is greater than or equal to 
+<M>1</M> and less than or equal to <M>4</M> 
+and the covering radius is greater than or equal to <M>2</M> and less
+than or equal to <M>4</M>.
+
+<Example>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+gap> MinimumDistance(C);
+2
+gap> C;
+a (4,3,2)2..4 example code over GF(2) 
+</Example>
+<!--
+C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+MinimumDistance(C);
+C;
+-->
+
+If the set of elements is a linear subspace of <M>GF(q)^n</M>, 
+the code is called <E>linear</E>. If a code is linear, it can be 
+defined by its <E>generator matrix</E> or <E>parity check matrix</E>.  
+<Index>code, linear</Index>
+<Index>parity check matrix</Index>
+By definition, 
+the rows of the generator matrix is a basis for
+the code (as a vector space over <M>GF(q)</M>).
+By definition, 
+the rows of the parity check matrix is a basis for the
+dual space of the code,
+
+<Display>
+C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.
+</Display>
+
+<Example>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
+a linear [3,2,1..2]1 demo code over GF(3) 
+</Example>
+
+So a linear <M>[n,  k, d]r</M> code 
+<Index>
+code, <M>[n,  k, d]r</M>
+</Index>
+is a code with word <E>length</E> <M>n</M>,
+<E>dimension</E> <M>k</M>, <E>minimum distance</E> 
+<M>d</M> and <E>covering radius</E> <M>r</M>.
+<P/>
+If the code is linear and all cyclic shifts of its codewords 
+(regarded as <M>n</M>-tuples) are again
+codewords, the code is called <E>cyclic</E>.  
+<Index>code, cyclic</Index>
+All elements of a cyclic code are multiples
+of the monic polynomial modulo a polynomial <M>x^n -1</M>,
+where <M>n</M> is the word length of the code. 
+Such a polynomial is called a <E>generator polynomial</E>
+<Index>generator polynomial</Index>
+The generator polynomial must divide <M>x^n-1</M> and its
+quotient is called a <E>check polynomial</E>.
+<Index>check polynomial</Index>
+Multiplying a codeword in a cyclic code by the check
+polynomial yields zero (modulo the polynomial <M>x^n -1</M>).
+In <Package>GUAVA</Package>, a 
+cyclic code can be defined by either its generator polynomial or 
+check polynomial. 
+
+<Example>
+gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+</Example>
+
+It is possible that <Package>GUAVA</Package>
+does not know that an unrestricted code is in fact
+linear. This situation occurs for example when a code is generated from a
+list of elements with the function <C>ElementsCode</C> 
+(see <Ref Func="ElementsCode" Style="Number"/>).
+By calling the  function <C>IsLinearCode</C> (see
+<Ref Func="IsLinearCode" Style="Number"/>), <Package>GUAVA</Package>
+tests if the code can be represented by a generator matrix. 
+If so, the code record and the operations are converted accordingly.
+
+<Example>
+gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+gap> C := ElementsCode( L, GF(2) );
+a (3,4,1..3)1 user defined unrestricted code over GF(2)
+# so far, GUAVA does not know what kind of code this is
+gap> IsLinearCode( C );
+true                      # it is linear
+gap> C;
+a linear [3,2,1]1 user defined unrestricted code over GF(2) 
+</Example>
+<!--
+L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+C := ElementsCode( L, GF(2) );
+IsLinearCode( C );
+C;
+-->
+
+Of course the same holds for unrestricted codes that in fact are cyclic,
+or codes, defined by a generator matrix, that actually are cyclic.
+<P/>
+Codes are printed simply by giving a small description of their
+parameters, the word  length, size or dimension and perhaps
+the minimum  distance,
+followed by a short description and the base field  of the code.   The
+function <C>Display</C> gives a more detailed description, showing the
+construction history of the code.
+<P/>
+<Package>GUAVA</Package> doesn't place much emphasis on the 
+actual encoding and decoding
+processes; some algorithms have been included  though.  Encoding works
+simply by multiplying an information vector with a code, decoding is done
+by the functions <C>Decode</C> or  <C>Decodeword</C>.  
+For more information about encoding and
+decoding, see sections 
+<Ref Label="Operations for Codes" Style="Number"/> and 
+<Ref Label="Decode" Style="Number"/>.
+
+<Example>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> w := [ 1, 0, 1, 1 ] * R;
+[ 1 0 0 1 1 0 0 1 ]
+gap> Decode( R, w );
+[ 1 0 1 1 ]
+gap> Decode( R, w + "10000000" ); # One error at the first position
+[ 1 0 1 1 ]                       # Corrected by Guava 
+</Example>
+<!--
+R := ReedMullerCode( 1, 3 );
+w := [ 1, 0, 1, 1 ] * R;
+Decode( R, w );
+Decode( R, w + "10000000" ); 
+-->
+
+Sections <Ref Label="Comparisons of Codes" Style="Number"/> and
+<Ref Label="Operations for Codes" Style="Number"/>  describe  the
+operations that are available for codes.
+
+Section <Ref Label="Boolean Functions for Codes" Style="Number"/> describe 
+the functions  that  tests
+whether an object is a code and what kind of code it  is  (see <C>IsCode</C>,
+<Ref Func="IsLinearCode" Style="Number"/> and <C>IsCyclicCode</C>) 
+and various  other  boolean  functions for codes.
+
+Section <Ref Label="Equivalence and Isomorphism of Codes" Style="Number"/> 
+describe functions about equivalence and isomorphism of 
+codes (see <Ref Func="IsEquivalent" Style="Number"/>,
+<Ref Func="CodeIsomorphism" Style="Number"/> and 
+<Ref Func="AutomorphismGroup" Style="Number"/>).
+
+Section <Ref Label="Domain Functions for Codes" Style="Number"/> 
+describes  functions  that  work  on
+<E>domains</E> (see Chapter "Domains and their Elements" in the GAP
+Reference Manual).
+
+Section <Ref Label="Printing and Displaying Codes" Style="Number"/>
+describes functions for  printing and displaying codes.
+
+Section 
+<Ref Label="Generating (Check) Matrices and Polynomials" Style="Number"/>
+describes functions that return the matrices and polynomials  
+that define a code (see
+<Ref Func="GeneratorMat" Style="Number"/>, 
+<Ref Func="CheckMat" Style="Number"/>, 
+<Ref Func="GeneratorPol" Style="Number"/>, 
+<Ref Func="CheckPol" Style="Number"/>, 
+<Ref Func="RootsOfCode" Style="Number"/>).
+
+Section <Ref Label="Parameters of Codes" Style="Number"/> 
+describes functions that return the basic
+parameters of codes (see <Ref Func="WordLength" Style="Number"/>, 
+<Ref Func="Redundancy" Style="Number"/>   and
+<Ref Func="MinimumDistance" Style="Number"/>).
+
+Section <Ref Label="Distributions" Style="Number"/> 
+describes functions that return distance and
+weight distributions  (see  
+<Ref Func="WeightDistribution" Style="Number"/>,   
+<Ref Func="InnerDistribution" Style="Number"/>,
+<Ref Func="OuterDistribution" Style="Number"/> and 
+<Ref Func="DistancesDistribution" Style="Number"/>).
+
+Section <Ref Label="Decoding Functions" Style="Number"/> 
+describes  functions  that  are  related  to
+decoding (see <Ref Func="Decode" Style="Number"/>, 
+<Ref Func="Decodeword" Style="Number"/>, 
+<Ref Func="Syndrome" Style="Number"/>, 
+<Ref Func="SyndromeTable" Style="Number"/> and 
+<Ref Func="StandardArray" Style="Number"/>).
+
+In Chapters <Ref Label="Generating Codes" Style="Number"/> and
+<Ref Label="Manipulating Codes" Style="Number"/> which follow,
+we describe functions that generate and manipulate codes.
+
+<Section>
+<Heading>Comparisons of Codes</Heading>
+<Label Name="Comparisons of Codes"/>
+
+<ManSection Label="= codes">
+<Func Name="=" Arg=" C1 C2"/>
+		   
+<Description>
+The equality operator <C>C1 = C2</C>
+evaluates to `true' if the codes <A>C1</A>
+and <A>C2</A> are equal, and to  `false' otherwise. 
+<P/>
+The equality operator is also denoted <C>EQ</C>, and
+<C>Eq(C1,C2)</C> is the same as <C>C1 = C2</C>.
+There is also an inequality operator, &tlt; &tgt;,
+or <C>not EQ</C>.
+<P/>
+Note that codes are equal if and only if their set of elements are equal. Codes
+can also  be compared with objects of other types.  Of course they are
+never equal.
+</Description>
+</ManSection>	
+
+<Index>not =</Index>
+<Index>&tlt; &tgt;</Index>
+
+<Example>
+gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+gap> C1 := ElementsCode( M, GF(2) );
+a (2,4,1..2)0 user defined unrestricted code over GF(2)
+gap> M = C1;
+false
+gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+a linear [2,2,1]0 code defined by generator matrix over GF(2)
+gap> C1 = C2;
+true
+gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+true
+gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+false
+</Example>
+<!--
+M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+C1 := ElementsCode( M, GF(2) );
+M = C1;
+C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+C1 = C2;
+ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+-->
+
+Another way  of comparing codes is <C>IsEquivalent</C>, which checks if two
+codes are equivalent (see <Ref Func="IsEquivalent" Style="Number"/>).
+By the way, this called <C>CodeIsomorphism</C>.
+For the current version of <Package>GUAVA</Package>, 
+unless one of the codes is unrestricted,
+this calls Leon's C program (which only works for binary linear codes
+and only on a unix/linux computer). 
+
+</Section>
+
+<Section>
+<Heading>
+Operations for Codes
+</Heading>
+<Label Name="Operations for Codes"/>
+
+<ManSection Label="+ codes">
+<Func Name="+" Arg=" C1 C2"/>
+		   
+<Description>
+<Index>
+codes, addition
+</Index>
+<Index>
+codes, direct sum
+</Index>
+
+The  operator `+' evaluates to the direct sum  of the codes <A>C1</A> and
+<A>C2</A>.  See <Ref Func="DirectSumCode" Style="Number"/>.
+<P/>
+
+</Description>
+</ManSection>
+<Example>
+gap> C1:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> C2:=RandomLinearCode(9,4);
+a  [9,4,?] randomly generated code over GF(2)
+gap> C1+C2;
+a linear [10,9,1]0..10 unknown linear code over GF(2)
+</Example>
+
+
+<ManSection Label="* codes">
+<Func Name="*" Arg=" C1 C2"/>
+		   
+<Description>
+<Index>
+codes, product
+</Index>
+
+The operator `*'  evaluates to the direct product of the codes 
+<A>C1</A> and <A>C2</A>. 
+See <Ref Func="DirectProductCode" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C1*C2;
+a linear [16,4,1]4..12 direct product code
+</Example>
+<!--
+C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+C1*C2;
+-->
+
+<ManSection Label="*">
+<Func Name="*" Arg=" m C"/>
+		   
+<Description>
+<Index>codes, encoding </Index>
+<Index>encoder map </Index>
+The operator <C>m*C</C> evaluates to the element of 
+<A>C</A> belonging to information word ('message') <A>m</A>. 
+Here <A>m</A> may be a vector, polynomial, string or 
+codeword or a list of those. 
+This is the way to do encoding in 
+<Package>GUAVA</Package>. <A>C</A> must be linear,
+because in <Package>GUAVA</Package>,  
+encoding by multiplication is only defined for
+linear codes. If <A>C</A> is a cyclic code, this multiplication is the same as
+multiplying an information polynomial <A>m</A> by the generator 
+polynomial of <A>C</A>. 
+If <A>C</A> is a linear code, it is equal to the multiplication 
+of an information vector <A>m</A>  by
+a generator matrix of <A>C</A>.
+<P/>
+To invert this, use the function <C>InformationWord</C> (see 
+<Ref Func="InformationWord" Style="Number"/>,
+which simply calls the function <C>Decode</C>).
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> m:=Codeword("11");
+[ 1 1 ]
+gap> m*C;
+[ 1 1 0 0 ]
+</Example>
+<!--
+C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+m:=Codeword("11");
+m*C;
+-->
+
+<ManSection Label="InformationWord">
+<Func Name="InformationWord" Arg=" C c"/>
+		   
+<Description>
+<Index>codes, decoding </Index>
+<Index>information bits </Index>
+Here <A>C</A> is a linear code and <A>c</A> is 
+a codeword in it. The command <C>InformationWord</C> 
+returns the message word (or 'information digits') <M>m</M>
+satisfying <C>c=m*C</C>. This command simply calls <C>Decode</C>, 
+provided <C>c in C</C> is true. Otherwise, it returns an error. 
+<P/>
+To invert this, use the encoding function <C>*</C> (see 
+<Ref Func="*" Style="Number"/>).
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 1 1 1 ]
+gap> InformationWord(C,c);
+[ 0 1 1 1 ]
+gap> c:=Codeword("1111100");
+[ 1 1 1 1 1 0 0 ]
+gap> InformationWord(C,c);
+"ERROR: codeword must belong to code"
+gap> C:=NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
+gap> InformationWord(C,c);
+"ERROR: code must be linear"
+</Example>
+<!--
+C:=HammingCode(3);
+c:=Random(C);
+InformationWord(C,c);
+c:=Codeword("1111100");
+InformationWord(C,c);
+C:=NordstromRobinsonCode();
+c:=Random(C);
+InformationWord(C,c);
+-->
+
+
+</Section>
+
+<Section>
+<Heading>
+Boolean Functions for Codes
+</Heading>
+<Label Name="Boolean Functions for Codes"/>
+
+<ManSection Label="in">
+<Func Name="in" Arg=" c C"/>
+		   
+<Description>
+<Index>code, element test</Index>
+The command
+<C>c in C</C> evaluates  to `true'  if  <A>C</A> contains the codeword or
+list of codewords specified by <A>c</A>. 
+Of course,  <A>c</A> and <A>C</A> must have the
+same word lengths and base fields.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ] ]
+gap> eC[2] in C;
+true
+gap> [ 0 ] in C;
+false 
+</Example>
+<!--
+C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+eC[2] in C;
+[ 0 ] in C;
+-->
+
+<ManSection Label="IsSubset">
+<Func Name="IsSubset" Arg=" C1 C2"/>
+
+<Description>
+<Index>code, subcode</Index>
+The command <C>IsSubset(C1,C2)</C> returns `true' if <A>C2</A> 
+is a subcode of <A>C1</A>,
+i.e.  if <A>C1</A> contains all the elements of <A>C2</A>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+true
+gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+false
+gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+true
+</Example>
+<!--
+IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+-->
+
+<ManSection Label="IsCode">
+<Func Name="IsCode" Arg=" obj "/>
+
+<Description>
+<C>IsCode</C> returns `true'  if <A>obj</A>, which
+can be an object of arbitrary type, is a code and 
+`false' otherwise. Will cause an error if <A>obj</A> is an
+unbound variable.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsCode( 1 );
+false
+gap> IsCode( ReedMullerCode( 2,3 ) );
+true
+</Example>
+<!--
+IsCode( 1 );
+IsCode( ReedMullerCode( 2,3 ) );
+-->
+
+<ManSection Label="IsLinearCode">
+<Func Name="IsLinearCode" Arg=" obj "/>
+
+<Description>
+<C>IsLinearCode</C> checks if object <A>obj</A>  
+(not necessarily a code) is a linear code. 
+If a code has already been marked as linear or cyclic, the
+function automatically returns `true'.  Otherwise, the function checks if
+a basis <M>G</M>  of the elements of <A>obj</A>  exists that 
+generates the elements
+of <A>obj</A>. If so, <M>G</M> is recorded as
+a generator matrix of <A>obj</A> and the function
+returns `true'. If not, the function returns `false'.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> IsLinearCode( C );
+true
+gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+false
+gap> IsLinearCode( 1 );
+false 
+</Example>
+<!--
+C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+IsLinearCode( C );
+IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+IsLinearCode( 1 );
+-->
+
+<ManSection Label="IsCyclicCode">
+<Func Name="IsCyclicCode" Arg=" obj "/>
+
+<Description>
+<C>IsCyclicCode</C> checks if the object <A>obj</A> is a cyclic code. 
+If a code has
+already been marked as cyclic, the function automatically returns `true'.
+Otherwise, the function checks if a polynomial <M>g</M> exists that generates
+the elements of <A>obj</A>. If so, <M>g</M> is recorded as
+a generator polynomial of 
+<A>obj</A> and the function returns `true'. If not, the function 
+returns `false'.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> # GUAVA does not know the code is cyclic
+gap> IsCyclicCode( C );      # this command tells GUAVA to find out
+true
+gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
+false
+gap> IsCyclicCode( 1 );
+false 
+</Example>
+<!--
+C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+IsCyclicCode( C ); 
+IsCyclicCode( HammingCode( 4, GF(2) ) );
+IsCyclicCode( 1 );
+-->
+
+<ManSection Label="IsPerfectCode">
+<Func Name="IsPerfectCode" Arg=" C "/>
+
+<Description>
+<C>IsPerfectCode(C)</C> returns `true' if 
+<A>C</A> is a perfect code. If <M>C\subset GF(q)^n</M>
+then, by definition, this means that for some 
+positive integer <M>t</M>, the space <M>GF(q)^n</M>
+is covered by non-overlapping spheres of
+(Hamming) radius <M>t</M> centered at the codewords in <A>C</A>.
+For a code with odd minimum distance <M>d = 2t+1</M>, 
+this is the case when every word of the
+vector space of <A>C</A> is at distance at most <M>t</M> from exactly 
+one element
+of <A>C</A>. Codes with even minimum distance are never perfect.
+<P/>
+In  fact, a code that is not "trivially perfect" (the binary repetition
+codes of odd length, the codes consisting of one word, and the codes
+consisting of the  whole vector space), and does not have the parameters
+of a Hamming or Golay code, cannot be perfect 
+(see section 1.12 in <Cite Key="HP03"/>).
+</Description>
+</ManSection>
+<Index>code, perfect</Index>
+
+<Example>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> IsPerfectCode( H );
+true
+gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+true
+gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+false
+gap> IsPerfectCode( BinaryGolayCode() );
+true 
+</Example>
+<!--
+H := HammingCode(2);
+IsPerfectCode( H );
+IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+IsPerfectCode( BinaryGolayCode() );
+-->
+
+<ManSection Label="IsMDSCode">
+<Func Name="IsMDSCode" Arg=" C "/>
+
+<Description>
+<C>IsMDSCode(C)</C> returns true if <A>C</A>  is a 
+maximum distance separable (MDS) code. 
+A linear <M>[n, k, d]</M>-code of length 
+<M>n</M>, dimension <M>k</M> and minimum distance <M>d</M> 
+is an MDS code  if <M>k=n-d+1</M>, in other words
+if <A>C</A> meets the Singleton bound 
+(see <Ref Func="UpperBoundSingleton" Style="Number"/>). An unrestricted 
+<M>(n, M, d)</M> code is called <E>MDS</E> 
+if <M>k=n-d+1</M>, with <M>k</M> equal
+to the largest integer less than or equal 
+to the logarithm of <M>M</M> with base
+<M>q</M>, the size of the base field of <A>C</A>.
+<P/>
+Well-known MDS codes include the repetition codes, the whole space codes,
+the even weight codes (these are the only <E>binary</E> MDS codes) and the
+Reed-Solomon codes.
+</Description>
+</ManSection>
+<Index>code, maximum distance separable</Index>
+<Index>MDS</Index>
+
+<Example>
+gap> C1 := ReedSolomonCode( 6, 3 );
+a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
+gap> IsMDSCode( C1 );
+true    # 6-3+1 = 4
+gap> IsMDSCode( QRCode( 23, GF(2) ) );
+false 
+</Example>
+<!--
+C1 := ReedSolomonCode( 6, 3 );
+IsMDSCode( C1 );
+IsMDSCode( QRCode( 23, GF(2) ) );
+-->
+
+<ManSection Label="IsSelfDualCode">
+<Func Name="IsSelfDualCode" Arg=" C "/>
+
+<Description>
+<C>IsSelfDualCode(C)</C> returns `true' if <A>C</A> is self-dual, 
+i.e. when <A>C</A> is equal to its dual code 
+(see also <Ref Func="DualCode" Style="Number"/>). 
+A code is self-dual if it contains 
+all vectors that its elements are orthogonal to.
+If a code is self-dual, it automatically 
+is self-orthogonal (see 
+<Ref Func="IsSelfOrthogonalCode" Style="Number"/>).
+<P/>
+If  <A>C</A> is a non-linear code, it cannot be self-dual
+(the dual code is always linear), so `false' is
+returned.  A linear code can only be self-dual when its 
+dimension <M>k</M> is equal to the redundancy <M>r</M>.
+</Description>
+</ManSection>
+<Index>code, self-dual</Index>
+
+<Example>
+gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
+true
+gap> C := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> DualCode( C ) = C;
+true 
+</Example>
+
+<Index>
+self-orthogonal
+</Index>
+
+<ManSection Label="IsSelfOrthogonalCode">
+<Func Name="IsSelfOrthogonalCode" Arg=" C "/>
+
+<Description>
+<C>IsSelfOrthogonalCode(C)</C> returns `true' if <A>C</A> 
+is self-orthogonal. A code is <E>self-orthogonal</E> 
+if every element of <A>C</A>  is orthogonal to all
+elements of <A>C</A>, including itself. (In the linear case, this simply means
+that the generator matrix of <A>C</A> multiplied with its transpose yields a
+null matrix.)
+</Description>
+</ManSection>
+<Index>code, self-orthogonal</Index>
+
+<Example>
+gap> R := ReedMullerCode(1,4);
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> IsSelfOrthogonalCode(R);
+true
+gap> IsSelfDualCode(R);
+false 
+</Example>
+<!--
+R := ReedMullerCode(1,4);
+IsSelfOrthogonalCode(R);
+IsSelfDualCode(R);
+-->
+
+<Index>
+doubly-even
+</Index>
+
+<ManSection Label="IsDoublyEvenCode">
+	<Func Name="IsDoublyEvenCode" Arg=" C "/>
+	
+	<Description>
+		<C>IsDoublyEvenCode(C)</C> returns `true' if <A>C</A> is
+		a binary linear code which has codewords of weight divisible
+		by 4 only. According to <Cite Key="HP03"/>, a doubly-even code
+		is self-orthogonal and every row in its generator matrix has
+		weight that is divisible by 4.
+	</Description>
+</ManSection>
+<Index>code, doubly-even</Index>
+
+<Example>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+false
+gap> C:=ExtendedCode(C);  
+a linear [24,12,8]4 extended code
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+true
+</Example>
+<!--
+C:=BinaryGolayCode();
+WeightDistribution(C);
+IsDoublyEvenCode(C);  
+C:=ExtendedCode(C);  
+WeightDistribution(C);
+IsDoublyEvenCode(C);  
+-->
+	
+<Index>
+singly-even
+</Index>
+
+<ManSection Label="IsSinglyEvenCode">
+	<Func Name="IsSinglyEvenCode" Arg=" C "/>
+	
+	<Description>
+		<C>IsSinglyEvenCode(C)</C> returns `true' if <A>C</A> is
+		a binary self-orthogonal linear code which is not doubly-even.
+		In other words, <A>C</A> is a binary self-orthogonal code which
+		has codewords of even weight.
+	</Description>
+</ManSection>
+<Index>code, singly-even</Index>
+
+<Example>
+gap> x:=Indeterminate(GF(2));                     
+x_1
+gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
+gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
+true
+gap> IsDoublyEvenCode(C);
+false
+gap> IsSinglyEvenCode(C);
+true
+</Example>
+<!--
+x:=Indeterminate(GF(2));
+C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+IsSelfDualCode(C);	# self-dual is a restriction of self-orthogonal
+IsDoublyEvenCode(C);
+IsSinglyEvenCode(C);
+-->
+
+<Index>
+even
+</Index>
+
+<ManSection Label="IsEvenCode">
+	<Func Name="IsEvenCode" Arg=" C "/>
+	
+	<Description>
+		<C>IsEvenCode(C)</C> returns `true' if <A>C</A> is a binary
+		linear code which has codewords of even weight--regardless
+		whether or not it is self-orthogonal.
+	</Description>
+</ManSection>
+<Index>code, even</Index>
+
+<Example>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+false
+gap> C:=ExtendedCode(C);
+a linear [24,12,8]4 extended code
+gap> IsSelfOrthogonalCode(C);
+true
+gap> IsEvenCode(C);
+true
+gap> C:=ExtendedCode(QRCode(17,GF(2)));
+a linear [18,9,6]3..5 extended code
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+true
+</Example>
+<!--
+C:=BinaryGolayCode();
+IsSelfOrthogonalCode(C);
+IsEvenCode(C);
+C:=ExtendedCode(C);
+IsSelfOrthogonalCode(C);
+IsEvenCode(C);
+C:=ExtendedCode(QRCode(17,GF(2)));
+IsSelfOrthogonalCode(C);
+IsEvenCode(C);
+-->
+
+<Index>
+self complementary code
+</Index>
+
+<ManSection Label="IsSelfComplementaryCode">
+<Func Name="IsSelfComplementaryCode" Arg=" C "/>
+
+<Description>
+<C>IsSelfComplementaryCode</C> returns `true' if
+
+<Display>
+v \in C \Rightarrow 1 - v \in C,
+</Display>
+where <M>1</M> is the all-one word of length <M>n</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsSelfComplementaryCode( EvenWeightSubcode(
+> HammingCode( 3, GF(2) ) ) );
+false 
+</Example>
+
+<Index>
+affine code
+</Index>
+
+<ManSection Label="IsAffineCode">
+<Func Name="IsAffineCode" Arg=" C "/>
+
+<Description>
+<C>IsAffineCode</C> returns `true' if <A>C</A> is an affine code.
+A code is called <E>affine</E> if it is an affine space.
+In other words, a code is affine if it is a coset of a linear code.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsAffineCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
+> [ 1, 0, 0, 0, 0, 0, 0 ] ) );
+true
+gap> IsAffineCode( NordstromRobinsonCode() );
+false 
+</Example>
+
+<ManSection Label="IsAlmostAffineCode">
+<Func Name="IsAlmostAffineCode" Arg=" C "/>
+
+<Description>
+<C>IsAlmostAffineCode</C> returns `true' if <A>C</A> 
+is an almost affine code. A code is called <E>almost affine</E> 
+if the size of any punctured code of <A>C</A> is <M>q^r</M> 
+for some <M>r</M>, where <M>q</M> is the size of the alphabet
+of the code.
+Every affine code is also almost affine, and every code over 
+<M>GF(2)</M> and <M>GF(3)</M> that is almost affine is also affine.
+</Description>
+</ManSection>
+
+<Example>
+gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
+>                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
+>                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
+>                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
+>                             GF(4) );;
+gap> IsAlmostAffineCode( code );
+true
+gap> IsAlmostAffineCode( NordstromRobinsonCode() );
+false 
+</Example>
+<!--
+code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3], [1,0,1], [1,1,0], [1,2,3], [1,3,2], [2,0,2], [2,1,3], [2,2,0], [2,3,1], [3,0,3], [3,1,2], [3,2,1], [3,3,0] ], GF(4) );;
+IsAlmostAffineCode( code );
+IsAlmostAffineCode( NordstromRobinsonCode() );
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Equivalence and Isomorphism of Codes
+</Heading>
+<Label Name="Equivalence and Isomorphism of Codes"/>
+
+<Index>
+permutation equivalent codes
+</Index>
+<Index>
+equivalent codes
+</Index>
+
+<ManSection Label="IsEquivalent">
+<Func Name="IsEquivalent" Arg=" C1 C2 "/>
+
+<Description>
+We say that 
+<A>C1</A> is <E>permutation equivalent</E> to
+<A>C2</A> if <A>C1</A> can be obtained from <A>C2</A> by
+carrying out column permutations. 
+<C>IsEquivalent</C> returns true if <A>C1</A> and 
+<A>C2</A> are equivalent codes. 
+At this time,
+<C>IsEquivalent</C> only handles <E>binary</E> codes. 
+(The external unix/linux program <B>desauto</B> from J. S. Leon 
+is called by <C>IsEquivalent</C>.) 
+Of course, if <A>C1</A> and <A>C2</A> are equal, they
+are also equivalent.
+<P/>
+Note that the algorithm is <E>very slow</E> for non-linear codes.
+<P/>
+More generally, we say that 
+<A>C1</A> is <E>equivalent</E> to
+<A>C2</A> if <A>C1</A> can be obtained from <A>C2</A> by
+carrying out column permutations and a permutation of the
+alphabet. 
+</Description>
+</ManSection>
+
+<Example>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> H = HammingCode(3, GF(2));
+false
+gap> IsEquivalent(H, HammingCode(3, GF(2)));
+true                        # H is equivalent to a Hamming code
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+</Example>
+<!--
+x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+H := GeneratorPolCode( pol, 7, GF(2));          
+H = HammingCode(3, GF(2));
+IsEquivalent(H, HammingCode(3, GF(2)));
+CodeIsomorphism(H, HammingCode(3, GF(2)));
+-->
+
+<ManSection Label="CodeIsomorphism">
+<Func Name="CodeIsomorphism" Arg=" C1 C2 "/>
+
+<Description>
+If the two codes <A>C1</A> and <A>C2</A> are permutation equivalent codes (see
+<Ref Func="IsEquivalent" Style="Number"/>), 
+<C>CodeIsomorphism</C> returns the permutation that
+transforms <A>C1</A> into <A>C2</A>. If the codes are not equivalent,
+it returns `false'. 
+<P/>
+At this time,
+<C>IsEquivalent</C> only computes isomorphisms
+between <E>binary</E> codes on a linux/unix computer 
+(since it calls Leon's C program <B>desauto</B>).
+</Description>
+</ManSection>
+
+<Example>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+true 
+</Example>
+<!--
+x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+H := GeneratorPolCode( pol, 7, GF(2));          
+CodeIsomorphism(H, HammingCode(3, GF(2)));
+PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+-->
+
+<ManSection Label="AutomorphismGroup">
+<Func Name="AutomorphismGroup" Arg=" C "/>
+
+<Description>
+<C>AutomorphismGroup</C> returns the automorphism group of a 
+linear code <A>C</A>. For a binary code,
+the automorphism group is the largest permutation group 
+of degree <M>n</M> such that each permutation applied to 
+the columns of <A>C</A> again yields <A>C</A>. 
+<Package>GUAVA</Package> calls the external program 
+<B>desauto</B> written by J. S. Leon, if it exists, to compute the 
+automorphism group. If Leon's program is not compiled on the
+system (and in the default directory) then it calls instead the
+much slower program <C>PermutationAutomorphismGroup</C>.
+<P/>
+See Leon <Cite Key="Leon82"/> for a more precise description of the 
+method, and the <File>guava/src/leon/doc</File> subdirectory for 
+for details about Leon's C programs.
+<P/>
+The function <C>PermutedCode</C> 
+permutes the columns of a code (see 
+<Ref Func="PermutedCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> R := RepetitionCode(7,GF(2));
+a cyclic [7,1,7]3 repetition code over GF(2)
+gap> AutomorphismGroup(R);
+Sym( [ 1 .. 7 ] )
+                        # every permutation keeps R identical
+gap> C := CordaroWagnerCode(7);
+a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> AutomorphismGroup(C);
+Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
+gap> C2 :=  PermutedCode(C, (1,6)(2,7));
+a linear [7,2,4]3 permuted code
+gap> AsSSortedList(C2);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> C2 = C;
+true 
+</Example>
+<!--
+R := RepetitionCode(7,GF(2));
+AutomorphismGroup(R);
+C := CordaroWagnerCode(7);
+AsSSortedList(C);
+AutomorphismGroup(C);
+C2 :=  PermutedCode(C, (1,6)(2,7));
+AsSSortedList(C2);
+C2 = C;
+-->
+
+<Index>PermutationAutomorphismGroup</Index>
+
+<ManSection Label="PermutationAutomorphismGroup">
+<Func Name="PermutationAutomorphismGroup" Arg=" C "/>
+
+<Description>
+<C>PermutationAutomorphismGroup</C> returns the permutation automorphism group  
+of a linear code <A>C</A>. This is the largest permutation group of 
+degree <M>n</M> such that each permutation applied to the 
+columns of <A>C</A> again yields <A>C</A>.
+It is written in GAP, so is much slower than
+<C>AutomorphismGroup</C>. 
+<P/>
+When <A>C</A> is binary <C>PermutationAutomorphismGroup</C> does <E>not</E> call
+<C>AutomorphismGroup</C>, even though they agree mathematically
+in that case. This way <C>PermutationAutomorphismGroup</C> can be
+called on any platform which runs GAP.
+<P/>
+The older name for this command,
+<C>PermutationGroup</C>, will become obsolete in the next version of GAP.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> R := RepetitionCode(3,GF(3));
+a cyclic [3,1,3]2 repetition code over GF(3)
+gap> G:=PermutationAutomorphismGroup(R);
+Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
+gap> G=SymmetricGroup(3);
+true
+</Example>
+<!--
+R := RepetitionCode(3,GF(3));
+G:=PermutationAutomorphismGroup(R);
+G=SymmetricGroup(3);
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Domain Functions for Codes
+</Heading>
+<Label Name="Domain Functions for Codes"/>
+
+
+These are some GAP functions that work on `Domains' in general. 
+Their specific effect on `Codes' is explained here.
+
+<ManSection Label="IsFinite">
+<Func Name="IsFinite" Arg=" C "/>
+
+<Description>
+<C>IsFinite</C> is an implementation of the GAP 
+domain function <C>IsFinite</C>. It returns true for a 
+code <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
+true 
+</Example>
+
+<ManSection Label="Size">
+<Func Name="Size" Arg=" C "/>
+
+<Description>
+<C>Size</C> returns the size of <A>C</A>, the number of elements 
+of the code. If the code is linear, the size of the code 
+is equal to <M>q^k</M>, where <M>q</M> is
+the size of the base field of <A>C</A> and <M>k</M> 
+is the dimension.
+</Description>
+</ManSection>
+
+<Example>
+gap> Size( RepetitionCode( 1000, GF(11) ) );
+11
+gap> Size( NordstromRobinsonCode() );
+256 
+</Example>
+
+<ManSection Label="LeftActingDomain">
+<Func Name="LeftActingDomain" Arg=" C "/>
+
+<Description>
+<C>LeftActingDomain</C> returns the base field of
+a code <A>C</A>. Each element of <A>C</A>
+consists  of elements of this base  field. 
+If the base field is <M>F</M>, and the word length 
+of the code is <M>n</M>, then the codewords are elements of
+<M>F^n</M>. 
+If <A>C</A> is a cyclic code, its elements are interpreted
+as polynomials with coefficients over <M>F</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
+a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
+gap> LeftActingDomain( C1 );
+GF(2^2)
+gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
+GF(3^2) 
+</Example>
+
+<ManSection Label="Dimension">
+<Func Name="Dimension" Arg=" C "/>
+
+<Description>
+<C>Dimension</C> returns the parameter <M>k</M> of <A>C</A>, 
+the dimension of the code, or the number of information 
+symbols in each codeword. The dimension is
+not defined for non-linear codes; 
+<C>Dimension</C> then returns an error.
+</Description>
+</ManSection>
+
+<Example>
+gap> Dimension( NullCode( 5, GF(5) ) );
+0
+gap> C := BCHCode( 15, 4, GF(4) );
+a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
+gap> Dimension( C );
+9
+gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+true 
+</Example>
+<!--
+Dimension( NullCode( 5, GF(5) ) );
+C := BCHCode( 15, 4, GF(4) );
+Dimension( C );
+Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+-->
+
+<ManSection Label="AsSSortedList">
+<Func Name="AsSSortedList" Arg=" C "/>
+
+<Description>
+<C>AsSSortedList</C> (as strictly sorted list) returns an
+immutable, duplicate free list of the elements of 
+<A>C</A>. For a finite field <M>GF(q)</M> generated by powers
+of <M>Z(q)</M>, the ordering on 
+<Display>
+GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} 
+</Display>
+is that determined by the exponents <M>i</M>.  
+These elements are of the type codeword 
+(see <Ref Func="Codeword" Style="Number"/>). Note that for large codes,
+generating the elements may be very time- and memory-consuming. 
+For generating a specific element or a subset of the elements,  
+use <C>CodewordNr</C> (see 
+<Ref Func="CodewordNr" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+gap> CodewordNr( C, [ 1, 2 ] );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]
+</Example>
+<!--
+C := ConferenceCode( 5 );
+AsSSortedList( C );
+CodewordNr( C, [ 1, 2 ] );
+-->
+
+</Section>
+
+
+<Section>
+<Heading>
+Printing and Displaying Codes
+</Heading>
+<Label Name="Printing and Displaying Codes"/>
+
+
+<ManSection Label="Print">
+<Func Name="Print" Arg=" C "/>
+
+<Description>
+<C>Print</C> prints information about <A>C</A>. This is the same as typing
+the identifier <A>C</A> at the GAP-prompt.
+<P/>
+If the argument is an unrestricted code, information in the form
+
+<Verb>
+a (n,M,d)r ... code over GF(q)
+</Verb>
+is printed, where <A>n</A> is the word length, <A>M</A> 
+the number of elements of the code, <A>d</A> the minimum distance 
+and <A>r</A> the covering radius.
+<P/>
+If the argument is a linear code, information in the form
+
+<Verb>
+a linear [n,k,d]r ... code over GF(q)
+</Verb>
+is printed, where <A>n</A> is the word length, <A>k</A> 
+the dimension of the code, <A>d</A> the minimum distance 
+and <A>r</A> the covering radius.
+<P/>
+Except for codes produced by <C>RandomLinearCode</C>, 
+if <A>d</A> is not yet known, it is displayed in the form
+
+<Verb>
+lowerbound..upperbound
+</Verb>
+and if <A>r</A> is not yet known, it is displayed in the same way.
+For certain ranges of <M>n</M>, the values of
+<A>lowerbound</A> and <A>upperbound</A> are obtained from tables.
+<P/>
+The function <C>Display</C> gives more information. 
+See 
+<Ref Func="Display" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
+a linear [8,4,4]2 extended code
+gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
+This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 
+</Example>
+
+<ManSection Label="String">
+<Func Name="String" Arg=" C "/>
+
+<Description>
+<C>String</C> returns information about <A>C</A> in a string. 
+This function is used by <C>Print</C>.
+</Description>
+</ManSection>
+
+<Example>
+gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> Factors(pol);
+[ x_1^2+Z(3)^0 ]
+gap> H := GeneratorPolCode( pol, 8, GF(3));
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> String(H);
+"a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"
+</Example>
+<!--
+x:= Indeterminate( GF(3) );; pol:= x^2+1;
+Factors(pol);
+H := GeneratorPolCode( pol, 8, GF(3));
+String(H);
+-->
+
+<ManSection Label="Display">
+<Func Name="Display" Arg=" C "/>
+
+<Description>
+<C>Display</C> prints the method of construction of code <A>C</A>. 
+With this history, in most cases an equal or equivalent code can be
+reconstructed. If <A>C</A> is an unmanipulated code, the result 
+is equal to output of the function <C>Print</C> (see 
+<Ref Func="Print" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> Display( RepetitionCode( 6, GF(3) ) );
+a cyclic [6,1,6]4 repetition code over GF(3)
+gap> C1 := ExtendedCode( HammingCode(2) );;
+gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
+a linear [11,8,1]1..2 U U+V construction code of
+U: a linear [4,1,4]2 extended code of
+   a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+V: a linear [7,7,1]0 punctured code of
+   a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)
+</Example>
+<!--
+Display( RepetitionCode( 6, GF(3) ) );
+C1 := ExtendedCode( HammingCode(2) );;
+C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+-->
+
+<ManSection Label="DisplayBoundsInfo">
+<Func Name="DisplayBoundsInfo" Arg=" bds "/>
+
+<Description>
+<C>DisplayBoundsInfo</C> prints the method of construction of 
+the code <M>C</M> indicated in <C>bds:= BoundsMinimumDistance( n, k, GF(q) )</C>. 
+</Description>
+</ManSection>
+
+<Example>
+gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+gap> DisplayBoundsInfo(bounds);
+an optimal linear [20,17,d] code over GF(4) has d=3
+--------------------------------------------------------------------------------------------------
+Lb(20,17)=3, by shortening of:
+Lb(21,18)=3, by applying contruction B to a [81,77,3] code
+Lb(81,77)=3, by shortening of:
+Lb(85,81)=3, reference: Ham
+--------------------------------------------------------------------------------------------------
+Ub(20,17)=3, by considering shortening to:
+Ub(7,4)=3, by considering puncturing to:
+Ub(6,4)=2, by construction B applied to:
+Ub(2,1)=2, repetition code
+--------------------------------------------------------------------------------------------------
+Reference Ham:
+%T this reference is unknown, for more info
+%T contact A.E. Brouwer (aeb at cwi.nl)
+</Example>
+<!--
+bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+DisplayBoundsInfo(bounds);
+-->
+
+
+</Section>
+
+<Section>
+<Heading>
+Generating (Check) Matrices and Polynomials
+</Heading>
+<Label Name="Generating (Check) Matrices and Polynomials"/>
+
+<ManSection Label="GeneratorMat">
+<Func Name="GeneratorMat" Arg=" C "/>
+
+<Description>
+<C>GeneratorMat</C> returns a generator matrix of <A>C</A>. 
+The code consists of all linear combinations of the rows of this matrix.
+<P/>
+If until now  no generator matrix of <A>C</A> was determined, 
+it is computed from either the parity check matrix, the 
+generator polynomial, the check polynomial or the elements 
+(if possible), whichever is available.
+<P/>
+If <A>C</A> is a non-linear code, the function returns an error.
+</Description>
+</ManSection>
+
+<Example>
+gap> GeneratorMat( HammingCode( 3, GF(2) ) );
+[ [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7] ]
+gap> Display(last);
+ 1 1 1 . . . .
+ 1 . . 1 1 . .
+ . 1 . 1 . 1 .
+ 1 1 . 1 . . 1
+gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
+gap> GeneratorMat( NullCode( 14, GF(4) ) );
+[  ]
+</Example>
+<!--
+GeneratorMat( HammingCode( 3, GF(2) ) );
+Display(last);
+GeneratorMat( RepetitionCode( 5, GF(25) ) );
+GeneratorMat( NullCode( 14, GF(4) ) );
+-->
+
+<ManSection Label="CheckMat">
+<Func Name="CheckMat" Arg=" C "/>
+
+<Description>
+<C>CheckMat</C> returns a parity check matrix of <A>C</A>. 
+The code consists of all
+words orthogonal to each of the rows of this matrix. The transpose of the
+matrix is a right inverse of the generator  matrix. The parity check
+matrix is computed from either the generator matrix, the generator
+polynomial, the check polynomial or the elements  of <A>C</A> (if possible),
+whichever is available.
+<P/>
+If <A>C</A> is a non-linear code, the function returns an error.
+</Description>
+</ManSection>
+
+<Example>
+gap> CheckMat( HammingCode(3, GF(2) ) );
+[ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
+gap> Display(last);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> CheckMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
+gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
+[  ] 
+</Example>
+<!--
+CheckMat( HammingCode(3, GF(2) ) );
+Display(last);
+CheckMat( RepetitionCode( 5, GF(25) ) );
+CheckMat( WholeSpaceCode( 12, GF(4) ) );
+-->
+
+<ManSection Label="GeneratorPol">
+<Func Name="GeneratorPol" Arg=" C "/>
+
+<Description>
+<C>GeneratorPol</C> returns the generator polynomial of <A>C</A>. 
+The code consists of all multiples of the generator polynomial 
+modulo <M>x^{n}-1</M>, where <M>n</M>
+is the word  length of <A>C</A>.  
+The generator polynomial is determined from either the check 
+polynomial, the generator or check matrix or the
+elements of <A>C</A> (if possible), whichever is available.
+<P/>
+If <A>C</A> is not a cyclic code, the function returns `false'.
+</Description>
+</ManSection>
+
+<Example>
+gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1
+gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+Z(2)^0
+gap> GeneratorPol( NullCode( 7, GF(3) ) );
+-Z(3)^0+x_1^7
+</Example>
+<!--
+GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+GeneratorPol( NullCode( 7, GF(3) ) );
+-->
+
+<ManSection Label="CheckPol">
+<Func Name="CheckPol" Arg=" C "/>
+
+<Description>
+<C>CheckPol</C> returns the check polynomial of 
+<A>C</A>. The code consists of all polynomials <M>f</M> 
+with 
+<Display>
+f\cdot h \equiv 0 \ ({\rm mod}\  x^n-1),
+</Display>
+where <M>h</M> is the check polynomial, and <M>n</M> is the 
+word length of <A>C</A>. The check polynomial is
+computed  from the generator polynomial, the generator or parity check
+matrix or the elements of <A>C</A> (if possible), whichever is available.
+<P/>
+If <A>C</A> if not a cyclic code, the function returns an error.
+</Description>
+</ManSection>
+
+<Example>
+gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1+x_1^2
+gap> CheckPol(WholeSpaceCode(4, GF(2)));
+Z(2)^0+x_1^4
+gap> CheckPol(NullCode(7,GF(3)));
+Z(3)^0
+</Example>
+<!--
+CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+CheckPol(WholeSpaceCode(4, GF(2)));
+CheckPol(NullCode(7,GF(3)));
+-->
+
+<ManSection Label="RootsOfCode">
+<Func Name="RootsOfCode" Arg=" C "/>
+
+<Description>
+<C>RootsOfCode</C> returns a list of all zeros of the generator polynomial of
+a cyclic code <A>C</A>. These are finite field elements in the splitting field
+of the generator  polynomial, <M>GF(q^m)</M>, <M>m</M> 
+is the multiplicative order
+of the size of the base field of the code, modulo the word length.
+<P/>
+The reverse  process, constructing  a code from  a set  of roots,  can  be
+carried out by the function <C>RootsCode</C> (see 
+<Ref Func="RootsCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ReedSolomonCode( 16, 5 );
+a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
+gap> RootsOfCode( C1 );
+[ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
+gap> C2 := RootsCode( 16, last );
+a cyclic [16,12,5]3..4 code defined by roots over GF(17)
+gap> C1 = C2;
+true 
+</Example>
+<!--
+C1 := ReedSolomonCode( 16, 5 );
+RootsOfCode( C1 );
+C2 := RootsCode( 16, last );
+C1 = C2;
+-->
+
+</Section>
+
+
+<Section>
+<Heading>
+Parameters of Codes
+</Heading>
+<Label Name="Parameters of Codes"/>
+
+<ManSection Label="WordLength">
+<Func Name="WordLength" Arg=" C "/>
+
+<Description>
+<C>WordLength</C> returns the parameter <M>n</M> of  
+<A>C</A>, the word length of the elements. Elements of 
+cyclic codes are polynomials of maximum degree
+<M>n-1</M>, as calculations are carried out modulo 
+<M>x^{n}-1</M>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> WordLength( NordstromRobinsonCode() );
+16
+gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+6
+gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+14 
+</Example>
+<!--
+WordLength( NordstromRobinsonCode() );
+WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+-->
+
+<ManSection Label="Redundancy">
+<Func Name="Redundancy" Arg=" C "/>
+
+<Description>
+<C>Redundancy</C> returns the redundancy 
+<M>r</M> of <A>C</A>, which is equal to the
+number of check symbols in each element. 
+If <A>C</A> is not a linear code the redundancy is 
+not defined and <C>Redundancy</C> returns an error.
+<P/>
+If a linear code <A>C</A> has dimension <M>k</M> and
+word length  <M>n</M>, it has redundancy <M>r=n-k</M>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C := TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> Redundancy(C);
+5
+gap> Redundancy( DualCode(C) );
+6 
+</Example>
+<!--
+C := TernaryGolayCode();
+Redundancy(C);
+Redundancy( DualCode(C) );
+-->
+
+<ManSection Label="MinimumDistance">
+<Func Name="MinimumDistance" Arg=" C "/>
+
+<Description>
+<C>MinimumDistance</C> returns the minimum distance 
+of <A>C</A>, the largest integer <M>d</M> with the 
+property that every element of <A>C</A> has at least a
+Hamming  distance <M>d</M> (see 
+<Ref Func="DistanceCodeword" Style="Number"/>) 
+to any other element of <A>C</A>.  
+For linear codes, the minimum distance is equal to the minimum
+weight. This means that <M>d</M> is also the 
+smallest positive value with <M>w[d+1] \neq 0</M>, where 
+<M>w=(w[1],w[2],...,w[n])</M> is the weight distribution 
+of  <A>C</A> (see 
+<Ref Func="WeightDistribution" Style="Number"/>). For unrestricted codes, 
+<M>d</M> is the smallest positive value with <M>w[d+1] \neq 0</M>, 
+where <M>w</M>  is the inner distribution
+of <A>C</A> (see 
+<Ref Func="InnerDistribution" Style="Number"/>).
+<P/>
+For  codes with only  one element, the  minimum distance is defined to be
+equal to the word length.
+<P/>
+For linear codes <A>C</A>, the algorithm used is the following:
+After replacing <A>C</A> by a permutation equivalent <A>C'</A>, 
+one may assume the generator matrix has the following form
+<M>G=(I_{k} \, | \, A)</M>, for some <M>k\times (n-k)</M> 
+matrix <M>A</M>. If <M>A=0</M> then return <M>d(C)=1</M>.
+Next, find the minimum distance of the code spanned by the 
+rows of <M>A</M>. Call this distance <M>d(A)</M>. 
+Note that <M>d(A)</M> is equal to the 
+the Hamming distance <M>d(v,0)</M> where <M>v</M> 
+is some proper linear combination of <M>i</M> 
+distinct rows of <M>A</M>.
+Return <M>d(C)=d(A)+i</M>, where <M>i</M> is as in the previous step.
+<P/>
+This command may also be called using the syntax
+<C>MinimumDistance(C, w)</C>.
+In  this  form, <C>MinimumDistance</C> returns the 
+minimum distance of a codeword <A>w</A> to the code <A>C</A>,
+also called the <E>distance from <A>w</A> to</E> <A>C</A>. This is
+the smallest value <M>d</M> for which there is an element 
+<M>c</M>  of the code <A>C</A> which is at distance <M>d</M> from 
+<A>w</A>. So <M>d</M> is also the minimum value for
+which <M>D[d+1] \neq  0</M>, where <M>D</M> is 
+the distance distribution of <A>w</A> to <A>C</A> 
+(see <Ref Func="DistancesDistribution" Style="Number"/>).
+<P/>
+Note that <A>w</A> must be an element of the same vector space 
+as the elements of <A>C</A>.  
+<A>w</A> does not necessarily belong to the code (if it does, the
+minimum distance is zero).
+</Description>
+</ManSection>
+
+<Example>
+gap> C := MOLSCode(7);; MinimumDistance(C);
+3
+gap> WeightDistribution(C);
+[ 1, 0, 0, 24, 24 ]
+gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+1
+gap> MinimumDistance( NullCode( 4, GF(2) ) );
+4
+gap> C := ConferenceCode(9);; MinimumDistance(C);
+4
+gap> InnerDistribution(C);
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
+gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
+[ 3 3 6 2 ]
+gap> MinimumDistance( C, w );
+0
+gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+3                           # so w no longer belongs to C 
+</Example>
+<!--
+C := MOLSCode(7);; MinimumDistance(C);
+WeightDistribution(C);
+MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+MinimumDistance( NullCode( 4, GF(2) ) );
+C := ConferenceCode(9);; MinimumDistance(C);
+InnerDistribution(C);
+C := MOLSCode(7);; w := CodewordNr( C, 17 );
+MinimumDistance( C, w );
+C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+-->
+
+See also the <Package>GUAVA</Package>  
+commands relating to bounds on the
+minimum distance in section
+<Ref Label="Distance bounds on codes" Style="Number"/>.
+
+<ManSection Label="MinimumDistanceLeon">
+<Func Name="MinimumDistanceLeon" Arg=" C "/>
+
+<Description>
+<C>MinimumDistanceLeon</C> returns the ``probable'' minimum distance 
+<M>d_{Leon}</M> of a linear binary code <A>C</A>, using an implementation of 
+Leon's probabilistic polynomial time algorithm. Briefly:
+Let <A>C</A> be a linear code of dimension <M>k</M> over 
+<M>GF(q)</M> as above. The algorithm has input parameters <M>s</M> and <M>\rho</M>,
+where <M>s</M> is an integer between <M>2</M> and <M>n-k</M>, and 
+<M>\rho</M> is an integer between <M>2</M> and <M>k</M>.
+
+<List>
+<Item>  
+Find a generator matrix <M>G</M> of <M>C</M>.
+</Item>
+
+<Item>
+Randomly permute the columns of <M>G</M>.
+</Item>
+
+<Item>
+Perform Gaussian elimination on the permuted matrix to obtain a
+new matrix of the following form: 
+<Display>
+G=(I_{k} \, | \, Z \, | \, B)
+</Display>
+with <M>Z</M> a <M>k\times s</M> matrix. If <M>(Z,B)</M> is the
+zero matrix then return <M>1</M> for the minimum distance.
+If <M>Z=0</M> but not <M>B</M> then either choose another 
+permutation of the rows of <A>C</A> or return `method fails'. 
+</Item>
+
+<Item>
+Search <M>Z</M> for at most <M>\rho</M> rows that lead to codewords of
+weight less than <M>\rho</M>.
+</Item>
+
+<Item>
+For these codewords, compute the weight of the whole word in <A>C</A>.
+Return this weight.
+</Item>
+</List>
+(See for example J. S. Leon, <Cite Key="Leon88"/> for more details.)
+Sometimes (as is the case in <Package>GUAVA</Package>) 
+this probabilistic algorithm 
+is repeated several times and the most commonly occurring value
+is taken.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(50,22,GF(2));
+a  [50,22,?] randomly generated code over GF(2)
+gap> MinimumDistanceLeon(C); time;
+6
+211
+gap> MinimumDistance(C); time;
+6
+1204
+</Example>
+<!--
+C:=RandomLinearCode(50,22,GF(2));
+MinimumDistanceLeon(C); time;
+MinimumDistance(C); time;
+-->
+
+<ManSection Label="MinimumWeight">
+	<Func Name="MinimumWeight" Arg=" C "/>
+
+	<Description>
+		<C>MinimumWeight</C> returns the minimum Hamming weight of a linear
+		code <A>C</A>. At the moment, this function works for binary and
+		ternary codes only. The <C>MinimumWeight</C> function relies on
+		an external executable program which is written in C language. As
+		a consequence, the execution time of <C>MinimumWeight</C> function
+		is faster than that of <Ref Func="MinimumDistance" Style="Number"/>
+		function.
+		<P/>
+		The <C>MinimumWeight</C> function implements Chen's <Cite Key="Chen69"/> algorithm
+		if <A>C</A> is cyclic, and Zimmermann's <Cite Key="Zimmermann96"/> algorithm
+		if <A>C</A> is a general linear code. This function has a built-in check on
+		the constraints of the minimum weight codewords. For example, for a self-orthogonal
+		code over GF(3), the minimum weight codewords have weight that is divisible by
+		3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes over GF(2) have
+		codeword weights that are divisible by 4 and even codes over GF(2) have codewords
+		weights that are divisible by 2. By taking these constraints into account, in many
+		cases, the execution time may be significantly reduced. Consider the minimum
+		Hamming weight enumeration of the <M>[151,45]</M> binary cyclic code (second
+		example below). This cyclic code is self-orthogonal, so the weight of all
+		codewords is divisible by 4. Without considering this constraint, the computation
+		will finish at information weight <M>10</M>, rather than <M>9</M>. We can see
+		that, this 0 mod 4 constraint on the codeword weights, has allowed us to avoid
+		enumeration of <M>b(45,10) = 3,190,187,286</M> additional codewords, where
+		<M>b(n,k)=n!/((n-k)!k!)</M> is the binomial coefficient of integers <M>n</M>
+		and <M>k</M>.
+		<P/>
+		Note that the C source code for this minimum weight computation has not yet
+	    been optimised, especially the code for GF(3), and there are chances to improve
+		the speed of this function. Your contributions are most welcomed.
+		<P/>
+		If you find any bugs on this function, please report it to ctjhai at plymouth.ac.uk.
+	</Description>
+</ManSection>
+
+<Example>
+gap> # Extended ternary quadratic residue code of length 48
+gap> n := 47;;
+gap> x := Indeterminate(GF(3));;
+gap> F := Factors(x^n-1);;
+gap> v := List([1..n], i->Zero(GF(3)));;
+gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+gap> G := CirculantMatrix(24, v);;
+gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
+> for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+> od;;
+gap> C := GeneratorMatCodeNC(G, GF(3));
+a  [48,24,?] randomly generated code over GF(3)
+gap> MinimumWeight(C);
+[48,24] linear code over GF(3) - minimum weight evaluation
+Known lower-bound: 1
+There are 2 generator matrices, ranks : 24 24 
+The weight of the minimum weight codeword satisfies 0 mod 3 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 15
+Number of matrices required for codeword enumeration 2
+Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 2 matrices
+Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 2 matrices
+Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 2 matrices
+Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 2 matrices
+Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrices
+Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
+-----------------------------------------------------------------------------
+Minimum weight: 15
+15
+gap> 
+
+gap> # Binary cyclic code [151,45,36]
+gap> n := 151;;
+gap> x := Indeterminate(GF(2));;
+gap> F := Factors(x^n-1);;
+gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
+gap> MinimumWeight(C);
+[151,45] cyclic code over GF(2) - minimum weight evaluation
+Known lower-bound: 1
+The weight of the minimum weight codeword satisfies 0 mod 4 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 56
+    Found new minimum weight 44
+Number of matrices required for codeword enumeration 1
+Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 1 matrix
+Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 1 matrix
+   Found new minimum weight 40
+   Found new minimum weight 36
+Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 1 matrix
+Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 1 matrix
+Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrix
+Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 7 (w=7) using 1 matrix
+Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 8 (w=8) using 1 matrix
+Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 9 (w=9) using 1 matrix
+Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
+-----------------------------------------------------------------------------
+Minimum weight: 36
+36
+</Example>
+
+<!--
+# Extended ternary quadratic residue code of length 48
+n := 47;;
+x := Indeterminate(GF(3));;
+F := Factors(x^n-1);;
+v := List([1..n], i->Zero(GF(3)));;
+v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+G := CirculantMatrix(24, v);;
+for i in [1..Size(G)] do; s:=Zero(GF(3));
+for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+od;;
+C := GeneratorMatCodeNC(G, GF(3));
+MinimumWeight(C);
+
+# Binary cyclic code [151,45,36]
+n := 151;;
+x := Indeterminate(GF(2));;
+F := Factors(x^n-1);;
+C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+MinimumWeight(C);
+-->
+
+
+<ManSection Label="DecreaseMinimumDistanceUpperBound">
+<Func Name="DecreaseMinimumDistanceUpperBound" Arg=" C t m"/>
+
+<Description>
+<C>DecreaseMinimumDistanceUpperBound</C> is an implementation of the algorithm
+for the minimum distance of a linear binary code <A>C</A> by Leon 
+<Cite Key="Leon88"/>. 
+This algorithm tries to find codewords with small minimum weights. 
+The parameter <A>t</A> is at least <M>1</M> and less than 
+the dimension of <A>C</A>.
+The best results are obtained if it is close to the
+dimension of the code. The parameter <A>m</A> gives the number of
+runs that the algorithm will perform.
+<P/>
+The result returned is a record with two fields;  the first, <C>mindist</C>,
+gives the lowest weight found, and <C>word</C> gives the corresponding
+codeword.
+(This was implemented before <C>MinimumDistanceLeon</C> but independently.
+The older manual had given the command incorrectly, so the command
+was only found after reading all the <E>*.gi</E> files in the
+<Package>GUAVA</Package> library. Though both  <C>MinimumDistance</C> and
+<C>MinimumDistanceLeon</C> often run much faster than 
+<C>DecreaseMinimumDistanceUpperBound</C>, <C>DecreaseMinimumDistanceUpperBound</C>
+appears to be more accurate than <C>MinimumDistanceLeon</C>.)
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(5,2,GF(2));
+a  [5,2,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,1,4);
+rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+3
+gap> C:=RandomLinearCode(8,4,GF(2));
+a  [8,4,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,3,4);
+rec( mindist := 2,
+  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+2
+</Example>
+
+<ManSection Label="MinimumDistanceRandom">
+<Func Name="MinimumDistanceRandom" Arg=" C num s "/>
+
+<Description>
+<C>MinimumDistanceRandom</C> returns an upper bound for the minimum distance 
+<M>d_{random}</M> of a linear binary code <A>C</A>, using a
+probabilistic polynomial time algorithm. Briefly:
+Let <A>C</A> be a linear code of dimension <M>k</M> over 
+<M>GF(q)</M> as above. The algorithm has input parameters <M>num</M> and <M>s</M>,
+where <M>s</M> is an integer between <M>2</M> and <M>n-1</M>, and 
+<M>num</M> is an integer greater than or equal to <M>1</M>.
+
+<List>
+<Item>  
+Find a generator matrix <M>G</M> of <M>C</M>.
+</Item>
+
+<Item>
+Randomly permute the columns of <M>G</M>, written <M>G_p</M>..
+</Item>
+
+<Item>
+<Display>
+G=(A, B)
+</Display>
+with <M>A</M> a <M>k\times s</M> matrix. If <M>A</M> is the
+zero matrix then return `method fails'. 
+</Item>
+
+<Item>
+Search <M>A</M> for at most <M>5</M> rows that lead to codewords, 
+in the code <M>C_A</M> with generator matrix <M>A</M>, of
+minimum weight.
+</Item>
+
+<Item>
+For these codewords, use the associated linear combination to
+compute the weight of the whole word in <A>C</A>.
+Return this weight and codeword.
+</Item>
+</List>
+This probabilistic algorithm 
+is repeated <A>num</A> times (with different random permutations of the 
+rows of <M>G</M> each time) and the weight and codeword of the lowest
+occurring weight is taken.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(60,20,GF(2));
+a  [60,20,?] randomly generated code over GF(2)
+gap> #mindist(C);time;
+gap> #mindistleon(C,10,30);time; #doesn't work well
+gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
+        1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
+130
+gap> a[2] in C;
+true
+gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
+rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
+649
+gap> Codeword(b!.word) in C;
+true
+gap> MinimumDistance(C);time;
+12
+196
+gap> c:=MinimumDistanceLeon(C);time;
+12
+66
+gap> C:=RandomLinearCode(30,10,GF(3));
+a  [30,10,?] randomly generated code over GF(3)
+gap> a:=MinimumDistanceRandom(C,10,10);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
+229
+gap> a[2] in C;
+true
+gap> MinimumDistance(C);time;
+9
+45
+gap> c:=MinimumDistanceLeon(C);
+Code must be binary. Quitting.
+0
+gap> a:=MinimumDistanceRandom(C,1,29);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
+53
+</Example>
+<!--
+
+-->
+
+
+<Index>
+<M>t(n,k)</M>
+</Index>
+<Index>
+covering code
+</Index>
+
+<ManSection Label="CoveringRadius">
+<Func Name="CoveringRadius" Arg=" C "/>
+
+<Description>
+<C>CoveringRadius</C> returns the <E>covering radius</E> of 
+a linear code <A>C</A>. This is the smallest number <M>r</M> with the 
+property that each element <M>v</M> of the ambient vector space of
+<A>C</A> has at most a distance <M>r</M> to the code <A>C</A>. 
+So for each vector <M>v</M>
+there must be an element <M>c</M> of <A>C</A> with 
+<M>d(v,c) \leq r</M>.
+The smallest covering radius of any <M>[n,k]</M> binary
+linear code is denoted <M>t(n,k)</M>. A binary linear code
+with reasonable small covering radius is called a
+<E>covering code</E>.
+<P/>
+If <A>C</A> is  a perfect code (see  
+<Ref Func="IsPerfectCode" Style="Number"/>), the covering  radius is
+equal to <M>t</M>,  the number of errors the code can correct, where 
+<M>d = 2t+1</M>, with <M>d</M> the minimum distance of 
+<A>C</A> (see 
+<Ref Func="MinimumDistance" Style="Number"/>).
+<P/>
+If there exists a function called <C>SpecialCoveringRadius</C> in the
+`operations' field of the code, then this function will be called to
+compute the covering radius of the code.
+At the moment, no code-specific functions are implemented.
+<P/>
+If the length of <C>BoundsCoveringRadius</C> 
+(see <Ref Func="BoundsCoveringRadius" Style="Number"/>),
+is 1, then the value in
+
+<Verb>
+C.boundsCoveringRadius
+</Verb>
+
+is returned.
+Otherwise, the function
+
+<Verb>
+C.operations.CoveringRadius
+</Verb>
+
+is executed, unless the redundancy of <A>C</A> is too large.  
+In the last case, a warning is issued.
+<P/>
+The algorithm used to compute the covering radius is the following.
+First, <C>CosetLeadersMatFFE</C> is used to compute
+the list of coset leaders (which returns a codeword in
+each coset of <M>GF(q)^n/C</M> of minimum weight).
+Then <C>WeightVecFFE</C> is used to compute the weight
+of each of these coset leaders. The program returns the
+maximum of these weights.
+
+<!--
+If you want to overrule this restriction, you might want to execute
+
+<Verb>
+C.operations.CoveringRadius
+</Verb>
+
+yourself. However, this algorithm might also issue a warning that it
+cannot be executed, but this warning is sometimes issued too late,
+resulting in GAP exiting with an memory error. If it does run, it  can
+only be stopped by pressing <B>ctrl-C</B> twice, thereby quitting GAP.  It
+will not enter the usual break-loop. Therefore it is recommended to  save
+your work before trying <C>code.operations.CoveringRadius</C>.
+
+************
+This seems to be wrong, since GAP doesn't like this command:
+
+gap> H := RandomLinearCode(10, 5, GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> CoveringRadius( H );
+3
+gap> H.operations.CoveringRadius;
+Error, illegal access to record component `obj.operations'
+of the object <obj>. (Objects by default do not have record components.
+The error might be a relic from translated GAP3 code.)       called from
+<function>( <arguments> ) called from read-eval-loop
+Entering break read-eval-print loop ...
+you can 'quit;' to quit to outer loop, or
+you can 'return;' to continue
+brk>
+************
+-->
+</Description>
+</ManSection>
+
+<Example>
+gap> H := RandomLinearCode(10, 5, GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(H);
+3
+gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
+true
+gap> CoveringRadius(H);
+1                       # Hamming codes have minimum distance 3
+gap> CoveringRadius(ReedSolomonCode(7,4));
+3 
+gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+3
+gap> CoveringRadius( HammingCode( 5, GF(2) ) );
+1
+gap> C := ReedMullerCode( 1, 9 );;
+gap> CoveringRadius( C );
+CoveringRadius: warning, the covering radius of
+this code cannot be computed straightforward.
+Try to use IncreaseCoveringRadiusLowerBound( code ).
+(see the manual for more details).
+The covering radius of code lies in the interval:
+[ 240 .. 248 ]
+</Example>
+<!--
+H := RandomLinearCode(10, 5, GF(2));
+CoveringRadius(H);
+H := HammingCode(4, GF(2));; IsPerfectCode(H);
+CoveringRadius(H);
+CoveringRadius(ReedSolomonCode(7,4));
+CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+CoveringRadius( HammingCode( 5, GF(2) ) );
+C := ReedMullerCode( 1, 9 );;
+CoveringRadius( C );
+-->
+
+
+See also the <Package>GUAVA</Package>  
+commands relating to bounds on the
+minimum distance in section
+<Ref Label="Covering radius bounds on codes" Style="Number"/>.
+
+<ManSection Label="SetCoveringRadius">
+<Func Name="SetCoveringRadius" Arg=" C intlist "/>
+
+<Description>
+<C>SetCoveringRadius</C> enables the user to set the covering radius
+herself, instead of letting  <Package>GUAVA</Package> 
+compute it.
+If <A>intlist</A> is an integer, <Package>GUAVA</Package>  
+will simply put it in the `boundsCoveringRadius' field.
+If it is a list of integers, however, it will intersect this list
+with the `boundsCoveringRadius' field, thus taking the best of both
+lists.
+If this would leave an empty list, the field is set to <A>intlist</A>.
+Because some other computations use the covering radius of the code,
+it is important that the entered value is not wrong, otherwise
+new results may be invalid.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := BCHCode( 17, 3, GF(2) );;
+gap> BoundsCoveringRadius( C );
+[ 3 .. 4 ]
+gap> SetCoveringRadius( C, [ 2 .. 3 ] );
+gap> BoundsCoveringRadius( C );
+[ [ 2 .. 3 ] ]
+</Example>
+<!--
+C := BCHCode( 17, 3, GF(2) );;
+BoundsCoveringRadius( C );
+SetCoveringRadius( C, [ 2 .. 3 ] );
+BoundsCoveringRadius( C );
+-->
+
+
+</Section>
+
+<Section>
+<Heading>
+Distributions
+</Heading>
+<Label Name="Distributions"/>
+
+
+<ManSection Label="MinimumWeightWords">
+<Func Name="MinimumWeightWords" Arg=" C "/>
+
+<Description>
+<C>MinimumWeightWords</C> returns the list of minimum weight codewords of 
+<A>C</A>. 
+<P/>
+This algorithm is written in GAP is slow, so is only suitable for small codes.
+<P/>
+This does not call the very fast function <C>MinimumWeight</C>
+(see <Ref Func="MinimumWeight" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> MinimumWeightWords(C);
+[ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
+  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]
+
+</Example>
+<!--
+C:=HammingCode(3,GF(2));
+MinimumWeightWords(C);
+-->
+
+
+<ManSection Label="WeightDistribution">
+<Func Name="WeightDistribution" Arg=" C "/>
+
+<Description>
+<C>WeightDistribution</C> returns the weight distribution of 
+<A>C</A>, as a vector. The <M>i^{th}</M> element of this
+vector contains the number of elements of <A>C</A> with 
+weight <M>i-1</M>.  For linear codes, the weight
+distribution is equal to the inner distribution (see
+<Ref Func="InnerDistribution" Style="Number"/>).
+If <M>w</M> is the weight distribution of 
+a linear code <A>C</A>, it must
+have the zero codeword, so <M>w[1] = 1</M> (one word of weight 0).
+<P/>
+Some codes, such as the Hamming codes, have precomputed
+weight distributions. For others, the program
+WeightDistribution calls the GAP program
+<C>DistancesDistributionMatFFEVecFFE</C>,
+which is written in C. See also
+<C>CodeWeightEnumerator</C>.
+</Description>
+</ManSection>
+
+<Example>
+gap> WeightDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
+gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ]
+gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+[ 1, 5, 10, 10, 5, 1 ] 
+</Example>
+<!--
+WeightDistribution( ConferenceCode(9) );
+WeightDistribution( RepetitionCode( 7, GF(4) ) );
+WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+-->
+
+<ManSection Label="InnerDistribution">
+<Func Name="InnerDistribution" Arg=" C "/>
+
+<Description>
+<C>InnerDistribution</C> returns the inner distribution 
+of <A>C</A>. The <M>i^{th}</M> element of the vector contains the
+average number of  elements of <A>C</A> at
+distance <M>i-1</M> to an element of <A>C</A>.  
+For  linear  codes, the inner distribution is equal 
+to the weight distribution (see
+<Ref Func="WeightDistribution" Style="Number"/>).
+<P/>
+Suppose <M>w</M> is the inner distribution of <A>C</A>. Then  
+<M>w[1] = 1</M>, because each element of <A>C</A> has 
+exactly one element at distance zero (the element
+itself). The minimum distance of  <A>C</A> is the smallest  
+value <M>d > 0</M> with
+<M>w[d+1] \neq 0</M>, because a distance between zero  
+and <M>d</M> never occurs. See 
+<Ref Func="MinimumDistance" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> InnerDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
+gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ] 
+</Example>
+<!--
+InnerDistribution( ConferenceCode(9) );
+InnerDistribution( RepetitionCode( 7, GF(4) ) );
+-->
+
+<Index>
+distance
+</Index>
+
+<ManSection Label="DistancesDistribution">
+<Func Name="DistancesDistribution" Arg=" C w "/>
+
+<Description>
+<C>DistancesDistribution</C> returns the distribution 
+of the distances of all
+elements of <A>C</A> to a codeword <A>w</A> in the same  vector space. 
+The <M>i^{th}</M>
+element of the distance distribution is the  
+number of codewords of <A>C</A>
+that have distance <M>i-1</M> to <A>w</A>. 
+The smallest value <M>d</M> with <M>w[d+1] \neq 0</M>, is 
+defined as the <E>distance to</E> <A>C</A> 
+(see 
+<Ref Func="MinimumDistance" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> H := HadamardCode(20);
+a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
+gap> c := Codeword("10110101101010010101", H);
+[ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
+gap> DistancesDistribution(H, c);
+[ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
+gap> MinimumDistance(H, c);
+5                           # distance to H 
+</Example>
+<!--
+H := HadamardCode(20);
+c := Codeword("10110101101010010101", H);
+DistancesDistribution(H, c);
+MinimumDistance(H, c);
+-->
+
+<ManSection Label="OuterDistribution">
+<Func Name="OuterDistribution" Arg=" C "/>
+
+<Description>
+The function <C>OuterDistribution</C> returns a 
+list of length <M>q^n</M>, where
+<M>q</M> is the size of the base field of <A>C</A> and <M>n</M>
+is the word length. The elements of the list consist of pairs,
+the first coordinate being an element of 
+<M>GF(q)^n</M> (this is a codeword type) and the 
+second coordinate being a distribution 
+of distances to the code (a list of integers). 
+This table is <E>very</E> large, and for 
+<M>n > 20</M> it will not fit
+in the memory of most computers. 
+The function <C>DistancesDistribution</C>
+(see 
+<Ref Func="DistancesDistribution" Style="Number"/>) 
+can be used  to calculate one entry of the list.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := RepetitionCode( 3, GF(2) );
+a cyclic [3,1,3]1 repetition code over GF(2)
+gap> OD := OuterDistribution(C);
+[ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
+  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
+  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
+  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
+gap> WeightDistribution(C) = OD[1][2];
+true
+gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+true 
+</Example>
+<!--
+C := RepetitionCode( 3, GF(2) );
+OD := OuterDistribution(C);
+WeightDistribution(C) = OD[1][2];
+DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Decoding Functions
+</Heading>
+<Label Name="Decoding Functions"/>
+
+<ManSection Label="Decode">
+<Func Name="Decode" Arg=" C r "/>
+
+<Description>
+<C>Decode</C> decodes <A>r</A> (a 'received word') 
+with respect to code <A>C</A> and returns the 
+`message word' (i.e., the information digits associated to
+the codeword <M>c \in C</M> closest to <A>r</A>). Here
+<A>r</A> can be a <Package>GUAVA</Package>
+codeword or a list of codewords. 
+First, possible errors in <A>r</A> are corrected, then the
+codeword is decoded to an <E>information codeword</E> <M>m</M>
+(and not an element of <A>C</A>).  
+If the code record has a field `specialDecoder', 
+this special algorithm is used to decode
+the vector.  Hamming codes, BCH codes, cyclic codes,
+and generalized Reed-Solomon have such a special algorithm.
+(The algorithm used for BCH codes is the
+Sugiyama algorithm described, for example, in 
+section 5.4.3 of <Cite Key="HP03"/>. A special decoder has 
+also being written for the generalized Reed-Solomon code
+using the interpolation algorithm. For cyclic codes, the
+error-trapping algorithm is used.)
+If <A>C</A> is linear and no special decoder 
+field has been set then syndrome decoding is used. 
+Otherwise (when <A>C</A> is non-linear), the nearest neighbor decoding 
+algorithm is used (which is very slow).
+<P/>
+A special decoder can be created by defining a function
+
+<Verb>
+C!.SpecialDecoder := function(C, r) ... end;
+</Verb>
+
+The function uses the arguments <A>C</A> (the code 
+record itself) and <A>r</A> (a
+vector of the codeword type) to decode <A>r</A> to an information 
+vector. A normal decoder would take a codeword <A>r</A> of the
+same word length and field as <A>C</A>, and would return 
+an information vector of length <M>k</M>, the
+dimension of <A>C</A>. The user is not restricted to these normal demands
+though, and can for instance define a decoder for non-linear codes.
+<P/>
+Encoding is done by multiplying the
+information vector with the code (see 
+<Ref Label="Operations for Codes" Style="Number"/>).
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decode(C, c);                     # decoding
+[ 1 0 1 0 ]
+gap> Decode(C, Codeword("0010101"));
+[ 1 1 0 1 ]                            # one error corrected
+gap> C!.SpecialDecoder := function(C, c)
+> return NullWord(Dimension(C));
+> end;
+function ( C, c ) ... end
+gap> Decode(C, c);
+[ 0 0 0 0 ]           # new decoder always returns null word 
+</Example>
+<!--
+C := HammingCode(3);
+c := "1010"*C;                    # encoding
+Decode(C, c);                     # decoding
+Decode(C, Codeword("0010101"));
+C!.SpecialDecoder := function(C, c)
+ return NullWord(Dimension(C));
+end;
+Decode(C, c);
+-->
+
+<ManSection Label="Decodeword">
+<Func Name="Decodeword" Arg=" C r "/>
+
+<Description>
+<C>Decodeword</C> decodes <A>r</A> (a 'received word') 
+with respect to code <A>C</A> and returns the 
+codeword <M>c \in C</M> closest to <A>r</A>. Here
+<A>r</A> can be a <Package>GUAVA</Package>
+codeword or a list of codewords. 
+If the code record has a field `specialDecoder', 
+this special algorithm is used to decode
+the vector.  Hamming codes, generalized Reed-Solomon codes, 
+and BCH codes have such a special algorithm.
+(The algorithm used for BCH codes is the
+Sugiyama algorithm described, for example, in 
+section 5.4.3 of <Cite Key="HP03"/>. The algorithm used for
+generalized Reed-Solomon codes is the ``interpolation 
+algorithm'' described for example in chapter 5 of 
+<Cite Key="JH04"/>.)
+If <A>C</A> is linear and no special decoder 
+field has been set then syndrome decoding is used. 
+Otherwise, when <A>C</A> is non-linear, the nearest neighbor algorithm has
+been implemented (which should only be used for small-sized
+codes).
+</Description>
+</ManSection>
+
+<Example>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decodeword(C, c);                     # decoding
+[ 1 0 1 1 0 1 0 ]
+gap>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v);
+[ 0 9 6 2 1 ]
+gap> Decodeword(C,v); # calls the special interpolation decoder
+[ 0 9 6 2 1 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
+  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
+  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
+gap> C1:=GeneratorMatCode(G,GF(11));
+a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+gap> Decodeword(C,v); # calls syndrome decoding
+[ 0 9 6 2 1 ]
+</Example>
+<!--
+C := HammingCode(3);
+c := "1010"*C;                    # encoding
+Decodeword(C, c);                     # decoding
+R:=PolynomialRing(GF(11),["t"]);
+P:=List([1,3,4,5,7],i->Z(11)^i);
+C:=GeneralizedReedSolomonCode(P,3,R);
+#########a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+MinimumDistance(C);
+c:=Random(C);      ####### [ 0 9 6 2 1 ]
+v:=Codeword("09620");
+GeneralizedReedSolomonDecoderGao(C,v);
+                   ########   [ 0 9 6 2 1 ]
+Decodeword(C,v);
+                   ########   [ 0 9 6 2 1 ]
+Decodeword(C,v); time;
+                   ########   [ 0 9 6 2 1 ]
+                   ###         5
+G:=GeneratorMat(C);
+C1:=GeneratorMatCode(G,GF(11));
+#########a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+Decodeword(C,v); time;
+                   #########  [ 0 9 6 2 1 ]
+                   #########   9
+
+
+-->
+
+
+<ManSection Label="GeneralizedReedSolomonDecoderGao">
+<Func Name="GeneralizedReedSolomonDecoderGao" Arg=" C r "/>
+
+<Description>
+<C>GeneralizedReedSolomonDecoderGao</C> decodes <A>r</A> (a 'received word') 
+to a codeword  <M>c \in C</M>
+in a generalized Reed-Solomon code <A>C</A>
+(see <Ref Func="GeneralizedReedSolomonCode" Style="Number"/>), 
+closest to <A>r</A>. Here
+<A>r</A> must be a <Package>GUAVA</Package>
+codeword. 
+If the code record does not have name 
+`generalized Reed-Solomon code' then an error is returned.
+Otherwise, the Gao decoder <Cite Key="Gao03"/> is used 
+to compute <M>c</M>.
+<P/>
+For long codes, this method is faster in practice than the
+interpolation method used in <C>Decodeword</C>.
+</Description>
+</ManSection>
+
+<Example>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v); 
+[ 0 9 6 2 1 ]
+</Example>
+<!--
+R:=PolynomialRing(GF(11),["t"]);
+P:=List([1,3,4,5,7],i->Z(11)^i);
+C:=GeneralizedReedSolomonCode(P,3,R);
+MinimumDistance(C);
+c:=Random(C);
+
+GeneralizedReedSolomonDecoderGao(C,v); time;
+Decodeword(C,v); time;
+
+R:=PolynomialRing(GF(71),["x"]);
+P:=List([1..70],i->Z(71)^i);
+C:=GeneralizedReedSolomonCode(P,3,R);
+MinimumDistance(C);
+c:=Random(C);
+v:=ShallowCopy(c);; 
+v:=ShallowCopy(c);; for i in [1..30] do v[i]:=Zero(GF(71)); od;
+v:=Codeword(v,C);
+GeneralizedReedSolomonDecoderGao(C,v); time;
+Decodeword(C,v); time;
+
+R:=PolynomialRing(GF(2^8),["y"]);
+P:=List([1..(2^8-1)],i->Z(2^8)^i);;
+C:=GeneralizedReedSolomonCode(P,3,R);
+#MinimumDistance(C); ## too time-consuming...it is MDS though
+c:=Random(C);
+v:=ShallowCopy(c);; 
+v:=ShallowCopy(c);; for i in [1..100] do v[i]:=Zero(GF(2^8)); od;
+v:=Codeword(v,C);
+GeneralizedReedSolomonDecoderGao(C,v); time;
+Decodeword(C,v); time; #uses interpolation decoding...
+
+-->
+
+
+<ManSection Label="GeneralizedReedSolomonListDecoder">
+<Func Name="GeneralizedReedSolomonListDecoder" Arg=" C r tau"/>
+
+<Description>
+<C>GeneralizedReedSolomonListDecoder</C> implements
+Sudans list-decoding algorithm 
+(see section 12.1 of <Cite Key="JH04"/>) for ``low rate''
+Reed-Solomon codes.
+It returns the list of all codewords in C which are a distance
+of at most <A>tau</A> from <A>r</A> (a 'received word').
+<A>C</A> must be a generalized Reed-Solomon code <A>C</A>
+(see <Ref Func="GeneralizedReedSolomonCode" Style="Number"/>) and
+<A>r</A> must be a <Package>GUAVA</Package>
+codeword. 
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(16);
+GF(2^4)
+gap>
+gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
+  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); ## 6 error correcting
+13
+gap> z:=Zero(F);;
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+[ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
+  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
+250
+gap> c1:=cs[1]; c1 in C;
+[ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+true
+gap> c2:=cs[2]; c2 in C;
+[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
+true
+gap> WeightCodeword(c1-r);
+7
+gap> WeightCodeword(c2-r);
+7
+</Example>
+<!--
+F:=GF(16);
+a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; ## alpha in JH Ex 12.1.1
+Pts:=List([0..14],i->b^i);
+x:=X(F);;
+R1:=PolynomialRing(F,[x]);;
+vars:=IndeterminatesOfPolynomialRing(R1);;
+y:=X(F,vars);;
+R2:=PolynomialRing(F,[x,y]);;
+C:=GeneralizedReedSolomonCode(Pts,3,R1); MinimumDistance(C);
+z:=Zero(F);
+r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+r:=Codeword(r);
+cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+c1:=cs[1]; c1 in C;
+c2:=cs[2]; c2 in C;
+WeightCodeword(c1-r);
+WeightCodeword(c2-r);
+-->
+
+<ManSection Label="BitFlipDecoder">
+<Func Name="BitFlipDecoder" Arg=" C r "/>
+
+<Description>
+The iterative decoding method
+<C>BitFlipDecoder</C> must only be applied to LDPC codes. 
+These have not been implemented in GUAVA (but see
+<C>FerreroDesignCode</C> for a code with similar properties).
+A binary low density parity check (LDPC) code of length $n$
+and redundancy $r$ is defined in terms of its check matrix $H$:
+<List>
+<Item>
+Each row of $H$ has exactly $x$ 1's.
+</Item>
+<Item>
+Each column has exactly $y$ 1's.
+</Item>
+<Item>
+
+The number of 1's in common between any two columns is
+less than or equal to one.
+</Item>
+<Item>
+
+$x/n$ and $y/r$ are 'small'.
+</Item>
+</List>
+For these codes, <C>BitFlipDecoder</C> decodes very quickly.
+(Warning: it can give wildly wrong results for arbitrary
+binary linear codes.)
+The bit flipping algorithm is described for example in chapter 13 of 
+<Cite Key="JH04"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=HammingCode(4,GF(2));
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> v:=List(c);
+[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
+  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+Z(2)^0
+gap> v:=Codeword(v);
+[ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> BitFlipDecoder(C,v);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+
+
+</Example>
+<!--
+C:=HammingCode(4,GF(2));
+c:=Random(C);
+v:=List(c);
+v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+v:=Codeword(v);
+BitFlipDecoder(C,v);
+-->
+
+
+<ManSection Label="NearestNeighborGRSDecodewords">
+<Func Name="NearestNeighborGRSDecodewords" Arg=" C v dist"/>
+
+<Description>
+<C>NearestNeighborGRSDecodewords</C> finds all 
+generalized Reed-Solomon codewords within distance 
+<A>dist</A> from <A>v</A> <E>and</E> the associated polynomial,
+using ``brute force''.
+Input: <A>v</A> is a received vector (a <Package>GUAVA</Package> codeword),
+<A>C</A> is a GRS code,
+<A>dist</A> > 0 is the distance from <A>v</A> to search in <A>C</A>.
+Output: a list of pairs <M>[c,f(x)]</M>, where <M>wt(c-v)\leq dist-1</M>
+and <M>c = (f(x_1),...,f(x_n))</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); # 6 error correcting
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
+[ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
+  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]
+</Example>
+<!--
+F:=GF(16);
+a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; 
+Pts:=List([0..14],i->b^i);
+x:=X(F);;
+R1:=PolynomialRing(F,[x]);;
+vars:=IndeterminatesOfPolynomialRing(R1);;
+y:=X(F,vars);;
+R2:=PolynomialRing(F,[x,y]);;
+C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+MinimumDistance(C); # 6 error correcting
+z:=Zero(F);
+r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+r:=Codeword(r);
+cs:=NearestNeighborGRSDecodewords(C,r,7);
+-->
+
+<ManSection Label="NearestNeighborDecodewords">
+<Func Name="NearestNeighborDecodewords" Arg=" C v dist"/>
+
+<Description>
+<C>NearestNeighborDecodewords</C> finds all 
+codewords in a linear code <A>C</A> within distance 
+<A>dist</A> from <A>v</A>, using ``brute force''.
+Input: <A>v</A> is a received vector (a <Package>GUAVA</Package> codeword),
+<A>C</A> is a linear code,
+<A>dist</A> > 0 is the distance from <A>v</A> to search in <A>C</A>.
+Output: a list of <M>c \in C</M>, where <M>wt(c-v)\leq dist-1</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C);
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborDecodewords(C,r,7);
+[ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
+  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]
+
+</Example>
+<!--
+F:=GF(16);
+a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; 
+Pts:=List([0..14],i->b^i);
+x:=X(F);;
+R1:=PolynomialRing(F,[x]);;
+vars:=IndeterminatesOfPolynomialRing(R1);;
+y:=X(F,vars);;
+R2:=PolynomialRing(F,[x,y]);;
+C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+MinimumDistance(C); 
+z:=Zero(F);
+r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+r:=Codeword(r);
+cs:=NearestNeighborDecodewords(C,r,7);
+-->
+
+<ManSection Label="Syndrome">
+<Func Name="Syndrome" Arg=" C v "/>
+
+<Description>
+<C>Syndrome</C> returns the syndrome of word <A>v</A>
+with respect to a linear code <A>C</A>. <A>v</A> is a codeword in the 
+ambient vector space of <A>C</A>.  If <A>v</A> is an element of
+<A>C</A>, the syndrome is a zero vector. The syndrome can be used for looking
+up an error vector in the syndrome table (see  
+<Ref Func="SyndromeTable" Style="Number"/>) that is
+needed to correct an error in <M>v</M>.
+<P/>
+A syndrome is not defined for non-linear codes. 
+<C>Syndrome</C> then returns an error.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := HammingCode(4);
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> v := CodewordNr( C, 7 );
+[ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
+gap> Syndrome( C, v );
+[ 0 0 0 0 ]
+gap> Syndrome( C, Codeword( "000000001100111" ) );
+[ 1 1 1 1 ]
+gap> Syndrome( C, Codeword( "000000000000001" ) );
+[ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
+               # coset of C 
+</Example>
+<!--
+C := HammingCode(4);
+v := CodewordNr( C, 7 );
+Syndrome( C, v );
+Syndrome( C, Codeword( "000000001100111" ) );
+Syndrome( C, Codeword( "000000000000001" ) );
+-->
+
+<ManSection Label="SyndromeTable">
+<Func Name="SyndromeTable" Arg=" C "/>
+
+<Description>
+<C>SyndromeTable</C> returns a <E>syndrome table</E> of
+a linear code <A>C</A>,
+consisting of two columns. The first column consists of the error vectors
+that correspond  to the  syndrome  vectors  in the  second column.  These
+vectors both are of the codeword type. After calculating the syndrome of
+a word <A>v</A>  with <C>Syndrome</C> (see 
+<Ref Func="Syndrome" Style="Number"/>), 
+the error vector needed to
+correct <A>v</A> can be found in the syndrome table. Subtracting this vector
+from <A>v</A> yields an element of <A>C</A>. 
+To make the search for the syndrome as
+fast as possible, the syndrome table  is sorted according to the syndrome
+vectors.
+</Description>
+</ManSection>
+<Index>syndrome table</Index>
+
+<Example>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> SyndromeTable(H);
+[ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
+  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
+gap> c := Codeword("101");
+[ 1 0 1 ]
+gap> c in H;
+false          # c is not an element of H
+gap> Syndrome(H,c);
+[ 1 0 ]        # according to the syndrome table,
+               # the error vector [ 0 1 0 ] belongs to this syndrome
+gap> c - Codeword("010") in H;
+true           # so the corrected codeword is
+               # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
+               # this is an element of H 
+</Example>
+<!--
+H := HammingCode(2);
+SyndromeTable(H);
+c := Codeword("101");
+c in H;
+Syndrome(H,c);
+c - Codeword("010") in H;
+-->
+
+<ManSection Label="StandardArray">
+<Func Name="StandardArray" Arg=" C "/>
+
+<Description>
+<C>StandardArray</C> returns the standard array of a 
+code <A>C</A>. This is a matrix with elements of the codeword type. 
+It has  <M>q^r</M> rows and <M>q^k</M> columns,  
+where <M>q</M> is the size of the base field of <A>C</A>, 
+<M>r=n-k</M> is the redundancy of <A>C</A>, and <M>k</M> 
+is the dimension of <A>C</A>.  The first row contains all the 
+elements of <A>C</A>.  Each other row contains words that do
+not belong to  the code, with in the first column their syndrome vector
+(see 
+<Ref Func="Syndrome" Style="Number"/>).
+<P/>
+A non-linear code does not have a standard array. 
+<C>StandardArray</C> then returns an error.
+<P/>
+Note that calculating a standard array can be very time- and memory-
+consuming.
+</Description>
+</ManSection>
+
+<Example>
+gap> StandardArray(RepetitionCode(3)); 
+[ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
+  [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]
+</Example>
+
+<ManSection Label="PermutationDecode">
+<Func Name="PermutationDecode" Arg=" C v "/>
+
+<Description>
+<C>PermutationDecode</C> performs permutation decoding when possible
+and returns original vector and prints 'fail' when not possible.
+<P/>
+This uses <C>AutomorphismGroup</C> in the binary case, and
+(the slower) <C>PermutationAutomorphismGroup</C> otherwise, to compute
+the permutation automorphism group <M>P</M> of <A>C</A>.
+The algorithm runs through the elements <M>p</M> of <M>P</M>
+checking if the weight of <M>H(p\cdot v)</M>
+is less than <M>(d-1)/2</M>. If it is then
+the vector <M>p\cdot v</M> is used to decode <M>v</M>:
+assuming <A>C</A> is in standard form then 
+<M>c=p^{-1}Em</M> is the decoded word, where <M>m</M>
+is the information digits part of <M>p\cdot v</M>.
+If no such <M>p</M> exists then ``fail'' is returned.
+See, for example, section 10.2 of 
+Huffman and Pless <Cite Key="HP03"/> for more details.
+</Description>
+</ManSection>
+
+<Example>
+gap> C0:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> G0:=GeneratorMat(C0);;
+gap> G := List(G0, ShallowCopy);;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . 1 1
+ . 1 . . 1 . 1
+ . . 1 . 1 1 .
+ . . . 1 1 1 1
+gap> H0:=CheckMat(C0);;
+gap> Display(H0);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> c0:=Random(C0);
+[ 0 0 0 1 1 1 1 ]
+gap> v01:=c0[1]+Z(2)^2;;
+gap> v1:=List(c0, ShallowCopy);;
+gap> v1[1]:=v01;;
+gap> v1:=Codeword(v1);
+[ 1 0 0 1 1 1 1 ]
+gap> c1:=PermutationDecode(C0,v1);
+[ 0 0 0 1 1 1 1 ]
+gap> c1=c0;
+true
+</Example>
+<!--
+C0:=HammingCode(3,GF(2));
+G0:=GeneratorMat(C0);;
+G := List(G0, ShallowCopy);;
+PutStandardForm(G);
+Display(G);
+H0:=CheckMat(C0);;
+Display(H0);
+c0:=Random(C0);
+v01:=c0[1]+Z(2)^2;;
+v1:=List(c0, ShallowCopy);;
+v1[1]:=v01;;
+v1:=Codeword(v1);
+c1:=PermutationDecode(C0,v1);
+c1=c0;
+-->
+
+
+
+<ManSection Label="PermutationDecodeNC">
+<Func Name="PermutationDecodeNC" Arg=" C v P  "/>
+
+<Description>
+Same as <C>PermutationDecode</C> except that one may enter
+the permutation automorphism group <A>P</A> in as an
+argument, saving time.
+Here <A>P</A> is a subgroup of the
+symmetric group on <M>n</M> letters,
+where <M>n</M> is the word length of <A>C</A>.
+
+</Description>
+</ManSection>
+
+
+</Section>
+</Chapter>
+
+
+<Chapter>
+<Heading>Generating Codes</Heading>
+<Label Name="Generating Codes"/>
+
+In this chapter we describe functions for generating codes.
+<P/>
+Section 
+<Ref Label="Generating Unrestricted Codes" Style="Number"/> 
+describes functions for generating unrestricted codes.
+<P/>
+Section
+<Ref Label="Generating Linear Codes" Style="Number"/> 
+describes functions for generating linear
+codes.
+<P/>
+Section
+<Ref Label="Gabidulin Codes" Style="Number"/> 
+describes functions for constructing certain
+covering codes, such as the Gabidulin codes.
+<P/>
+Section
+<Ref Label="Golay Codes" Style="Number"/> 
+describes functions for constructing the Golay codes.
+<P/>
+Section
+<Ref Label="Generating Cyclic Codes" Style="Number"/> 
+describes functions for generating cyclic codes.
+<P/>
+Section
+<Ref Label="Evaluation Codes" Style="Number"/> 
+describes functions for generating codes as the image
+of an evaluation map applied to a space of functions.
+For example, generalized Reed-Solomon codes and toric codes
+are described there.
+<P/>
+
+<Section>
+<Heading>
+Generating Unrestricted Codes
+</Heading>
+<Label Name="Generating Unrestricted Codes"/>
+
+In this section we start with functions that creating code from user
+defined matrices or special matrices (see 
+<Ref Func="ElementsCode" Style="Number"/>, 
+<Ref Func="HadamardCode" Style="Number"/>,
+<Ref Func="ConferenceCode" Style="Number"/>  and  
+<Ref Func="MOLSCode" Style="Number"/>).   These codes are
+unrestricted codes; they may later be discovered to be linear or cyclic.
+<P/>
+The next functions generate  random  codes  (see  
+<Ref Func="RandomCode" Style="Number"/>)  and  the
+Nordstrom-Robinson code (see 
+<Ref Func="NordstromRobinsonCode" Style="Number"/>), respectively.
+<P/>
+Finally, we describe two functions for generating Greedy codes. These are
+codes  that  contructed by gathering codewords from a space (see
+<Ref Func="GreedyCode" Style="Number"/> and 
+<Ref Func="LexiCode" Style="Number"/>).
+
+<ManSection Label="ElementsCode">
+<Func Name="ElementsCode" Arg=" L [name] F "/>
+
+
+<Description>
+<C>ElementsCode</C> creates an unrestricted code of the 
+list of elements <A>L</A>, in the field <A>F</A>. 
+<A>L</A> must be a list of vectors, strings, polynomials or
+codewords. <A>name</A> can contain a short description of the code.
+<P/>
+If <A>L</A>  contains a codeword more than once, it is removed from the list
+and a GAP set is returned.
+</Description>
+</ManSection>
+
+<Example>
+gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+gap> C := ElementsCode( M, "example code", GF(3) );
+a (4,3,1..4)2 example code over GF(3)
+gap> MinimumDistance( C );
+4
+gap> AsSSortedList( C );
+[ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]
+</Example>
+<!--
+M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+C := ElementsCode( M, "example code", GF(3) );
+MinimumDistance( C );
+AsSSortedList( C );
+-->
+
+<Index>
+code, Hadamard
+</Index>
+
+<ManSection Label="HadamardCode">
+<Func Name="HadamardCode" Arg=" H [t] "/>
+
+
+<Description>
+The four forms this command can take are
+<C>HadamardCode(H,t)</C>, <C>HadamardCode(H)</C>,
+<C>HadamardCode(n,t)</C>, and <C>HadamardCode(n)</C>.
+<P/>
+In the case when the arguments <A>H</A> and <A>t</A> are both given,
+<C>HadamardCode</C> returns a Hadamard code 
+of the <M>t^{th}</M> kind from the Hadamard matrix <A>H</A>
+In case only <A>H</A> is given, <M>t = 3</M> is used.
+<P/>
+By definition, a Hadamard matrix is a square matrix <A>H</A> with 
+<M>H\cdot H^T = -n\cdot I_n</M>, where <M>n</M> is the size of 
+<A>H</A>. The entries of <A>H</A> are either 1 or -1.
+<Index>Hadamard matrix</Index>
+<P/>
+The matrix <A>H</A> is first transformed into a binary matrix 
+<M>A_n</M> by replacing the <M>1</M>'s by <M>0</M>'s and 
+the <M>-1</M>'s by <M>1</M>s).
+<P/>
+The Hadamard matrix of the <E>first kind</E> (<M>t=1</M>) is 
+created by using the rows of <M>A_n</M> as elements,
+after deleting the first column. This is a 
+<M>(n-1, n,  n/2)</M> code.  We use this code for creating the 
+Hadamard code of the <E>second kind</E> (<M>t=2</M>), by
+adding all the complements of the already existing codewords. This
+results in a <M>(n-1, 2n, n/2 -1)</M> code.  
+The <E>third kind</E> (<M>t=3</M>) is created
+by using the rows of <M>A_n</M> (without cutting a column) and their
+complements as elements.  This way, we have an 
+<M>(n, 2n, n/2)</M>-code.  The
+returned code is generally an unrestricted code, but for <M>n = 2^r</M>, 
+the code is linear.
+<P/>
+The command <C>HadamardCode(n,t)</C> returns a Hadamard code with parameter
+<A>n</A> of the <M>t^{th}</M> kind. For the
+command <C>HadamardCode(n)</C>, <M>t=3</M> is used.
+<P/>
+When called in these forms, <C>HadamardCode</C> first creates a Hadamard
+matrix (see  <Ref Func="HadamardMat" Style="Number"/>), of size 
+<A>n</A> and then follows the same
+procedure as described above.  Therefore the same restrictions with
+respect to <A>n</A> as for Hadamard matrices hold.
+</Description>
+</ManSection>
+
+<Example>
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> HadamardCode( H4, 1 );
+a (3,4,2)1 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4, 2 );
+a (3,8,1)0 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2) 
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> C := HadamardCode( 4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2)
+gap> C = HadamardCode( H4 );
+true 
+</Example>
+<!--
+H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+HadamardCode( H4, 1 );
+HadamardCode( H4, 2 );
+HadamardCode( H4 );
+H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+C := HadamardCode( 4 );
+C = HadamardCode( H4 );
+-->
+
+<Index>
+code, conference
+</Index>
+
+<ManSection Label="ConferenceCode">
+<Func Name="ConferenceCode" Arg=" H "/>
+
+<Description>
+<C>ConferenceCode</C> returns a code of length <M>n-1</M> constructed from a
+symmetric 'conference matrix' <A>H</A>. A <E>conference matrix</E> 
+<A>H</A> is a symmetric matrix of
+order <M>n</M>, which satisfies <M>H\cdot H^T = ((n-1)\cdot I</M>, with 
+<M>n \equiv  2 \pmod 4</M>. The rows of <M>\frac{1}{2}(H+I+J)</M>, 
+<M>\frac{1}{2}(-H+I+J)</M>,  plus the zero and all-ones vectors
+form the elements of a binary non-linear <M>(n-1,  2n, (n-2)/2)</M>
+code.
+<Index>conference matrix</Index>
+<P/>
+<Package>GUAVA</Package> constructs a symmetric conference 
+matrix of order <M>n+1</M> (<M>n\equiv 1 \pmod 4</M>) and uses
+the rows of that matrix, plus the zero and
+all-ones vectors, to construct a binary non-linear 
+<M>(n, 2(n+1), (n-1)/2)</M>-code.
+</Description>
+</ManSection>
+
+<Example>
+gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+> [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+gap> C1 := ConferenceCode( H6 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> IsLinearCode( C1 );
+false 
+gap> C2 := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C2 );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+</Example>
+<!--
+H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+ [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+C1 := ConferenceCode( H6 );
+IsLinearCode( C1 );
+C2 := ConferenceCode( 5 );
+AsSSortedList( C2 );
+-->
+
+
+<ManSection Label="MOLSCode">
+<Func Name="MOLSCode" Arg=" [n] q "/>
+
+<Description>
+<C>MOLSCode</C> returns an <M>(n, q^2, n-1)</M> code over <M>GF(q)</M>. 
+The code is created from <M>n-2</M> 'Mutually Orthogonal Latin Squares' 
+(MOLS) of size <M>q \times q</M>. The default for <A>n</A> is <M>4</M>. 
+<Package>GUAVA</Package> can construct a MOLS code for
+<M>n-2 \leq q</M>. Here <A>q</A> must be a prime power, <M>q  > 2</M>. 
+If there are no <M>n-2</M> MOLS, an error is signalled.
+<P/>
+Since each of the <M>n-2</M> MOLS is a <M>q\times q</M> matrix, we can create a code
+of size <M>q^2</M> by listing in each code element the entries that are in the
+same position in each of the MOLS.  We precede each of these lists with
+the two  coordinates that specify this position, making the word length
+become <M>n</M>.
+<P/>
+The MOLS codes are MDS codes (see <Ref Func="IsMDSCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := MOLSCode( 6, 5 );
+a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
+gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+>       local ls, el;
+>       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+>       for el in VectorCodeword( AsSSortedList( C1 ) ) do
+>          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+>       od;
+>       return ls;
+>    end );;
+gap> AreMOLS( mols );
+true
+gap> C2 := MOLSCode( 11 );
+a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 
+</Example>
+<!--
+C1 := MOLSCode( 6, 5 );
+mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+    local ls, el;
+    ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+    for el in VectorCodeword( AsSSortedList( C1 ) ) do
+          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+    od;
+  return ls;
+end );;
+AreMOLS( mols );
+C2 := MOLSCode( 11 );
+-->
+
+<ManSection Label="RandomCode">
+<Func Name="RandomCode" Arg=" n M F "/>
+
+<Description>
+<C>RandomCode</C> returns a random unrestricted code of size 
+<A>M</A> with word length <A>n</A> over <A>F</A>. <A>M</A> must be 
+less than or equal to the number of elements in the space <M>GF(q)^n</M>.
+<P/>
+The function <C>RandomLinearCode</C> returns a random linear code (see
+<Ref Func="RandomLinearCode" Style="Number"/>). 
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> MinimumDistance(C1);
+3
+gap> C2 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> C1 = C2;
+false 
+</Example>
+
+<Index>
+code, Nordstrom-Robinson
+</Index>
+
+<ManSection Label="NordstromRobinsonCode">
+<Func Name="NordstromRobinsonCode" Arg=" "/>
+
+<Description>
+<C>NordstromRobinsonCode</C> returns a Nordstrom-Robinson code, 
+the best code with word length <M>n=16</M> and minimum distance 
+<M>d=6</M> over <M>GF(2)</M>. This is a non-linear <M>(16, 256, 6)</M>
+code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> OptimalityCode( C );
+0 
+</Example>
+
+
+<Index>
+code, greedy
+</Index>
+
+<ManSection Label="GreedyCode">
+<Func Name="GreedyCode" Arg=" L d F "/>
+
+<Description>
+<C>GreedyCode</C> returns a Greedy code with design distance 
+<A>d</A> over the finite field <A>F</A>. The
+code is  constructed using the greedy algorithm on the list of vectors
+<A>L</A>. (The greedy algorithm checks each vector in <A>L</A> and 
+adds it to the code if its distance to the current 
+code is greater than  or equal to <A>d</A>. It is
+obvious that the resulting code has a minimum distance of 
+at least <A>d</A>.
+<P/>
+Greedy codes are often linear codes.
+<P/>
+The function <C>LexiCode</C> creates a greedy code from a basis instead of an
+enumerated list (see <Ref Func="LexiCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
+>                         (1,4) ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C1 = C2;
+false 
+</Example>
+<!--
+C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+C2 := GreedyCode( Permuted(Tuples(AsSSortedList(GF(2)),5), (1,4)), 3, GF(2) );
+C1 = C2;
+-->
+
+
+<ManSection Label="LexiCode">
+<Func Name="LexiCode" Arg=" n d F "/>
+
+<Description>
+In this format, <C>Lexicode</C> returns a lexicode with word length 
+<A>n</A>, design distance <A>d</A> over <A>F</A>. 
+The code is  constructed using  the greedy algorithm on the 
+lexicographically ordered  list of all vectors of length
+<A>n</A> over <A>F</A>. Every time a vector is found that has a distance 
+to the current code of at least <A>d</A>,  it is added to the 
+code. This results, obviously, in a code with minimum distance 
+greater than or equal to <A>d</A>.
+<P/>
+Another syntax which one can use is <C>LexiCode( B, d, F )</C>.
+When called in this format, <C>LexiCode</C> uses the basis <A>B</A> 
+instead of the standard basis. <A>B</A> is a matrix of vectors
+over <A>F</A>.  The code is constructed using the greedy 
+algorithm on the list of vectors spanned by
+<A>B</A>, ordered lexicographically with respect to <A>B</A>.
+<P/>
+Note that binary lexicodes are always linear.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := LexiCode( 4, 3, GF(5) );
+a (4,17,3..4)2..4 lexicode over GF(5) 
+gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+gap> C := LexiCode( B, 2, GF(2) );
+a linear [3,1,2]1..2 lexicode over GF(2) 
+</Example>
+
+The function <C>GreedyCode</C> creates a greedy code that is not restricted to
+a lexicographical order (see <Ref Func="GreedyCode" Style="Number"/>).
+
+</Section>
+
+<Section>
+<Heading>
+Generating Linear Codes
+</Heading>
+<Label Name="Generating Linear Codes"/>
+
+In this section we describe functions for constructing linear codes.  A
+linear code always has a generator or check matrix.
+<P/>
+The first two functions generate linear codes from the  generator  matrix
+(<Ref Func="GeneratorMatCode" Style="Number"/>) or check matrix 
+(<Ref Func="CheckMatCode" Style="Number"/>). All  linear  codes
+can be constructed with these functions.
+<P/>
+The next functions we describe  generate  some  well-known  codes,  like
+Hamming codes (<Ref Func="HammingCode" Style="Number"/>), 
+Reed-Muller codes  (<Ref Func="ReedMullerCode" Style="Number"/>) 
+and the extended Golay codes 
+(<Ref Func="ExtendedBinaryGolayCode" Style="Number"/> and
+<Ref Func="ExtendedTernaryGolayCode" Style="Number"/>).
+<P/>
+A large and powerful family of codes are alternant codes.  They are
+obtained by a small modification of the parity check matrix of a BCH code
+(see <Ref Func="AlternantCode" Style="Number"/>, 
+<Ref Func="GoppaCode" Style="Number"/>,
+<Ref Func="GeneralizedSrivastavaCode" Style="Number"/> and 
+<Ref Func="SrivastavaCode" Style="Number"/>).
+<P/>
+Finally, we describe a function for generating random linear codes (see
+<Ref Func="RandomLinearCode" Style="Number"/>).
+<P/>
+
+<ManSection Label="GeneratorMatCode">
+<Func Name="GeneratorMatCode" Arg=" G [name] F "/>
+
+<Description>
+<C>GeneratorMatCode</C> returns a linear code with generator matrix 
+<A>G</A>. <A>G</A> must be a matrix over finite field <A>F</A>. 
+<A>name</A> can contain a short description of the code.  
+The generator matrix is the basis of the
+elements of the code. The resulting code has word length 
+<M>n</M>, dimension <M>k</M> if <A>G</A> is a <M>k \times n</M>-matrix. 
+If <M>GF(q)</M> is the field of the code, the
+size of the code will be <M>q^k</M>.
+<P/>
+If the generator matrix does not have full row rank, the linearly
+dependent rows are removed. This is  done by the GAP
+function <C>BaseMat</C>  and results in an equal code. 
+The generator matrix can be retrieved with the function 
+<C>GeneratorMat</C> (see <Ref Func="GeneratorMat" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := GeneratorMatCode( G, GF(3) );
+a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
+gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a linear [5,5,1]0 code defined by generator matrix over GF(2)
+gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
+> x -> VectorCodeword( x ) ), GF( 2 ) );
+a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
+# This is the smallest linear code that contains the N-R code 
+</Example>
+<!--
+G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+C1 := GeneratorMatCode( G, GF(3) );
+C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+GeneratorMatCode(List(AsSSortedList(NordstromRobinsonCode()),x ->VectorCodeword(x)),GF(2));
+-->
+
+<ManSection Label="CheckMatCodeMutable">
+<Func Name="CheckMatCodeMutable" Arg=" H [name] F "/>
+
+<Description>
+<C>CheckMatCodeMutable</C> is the same as 
+<C>CheckMatCode</C> except that the check matrix and generator
+matrix are mutable.
+</Description>
+</ManSection>
+
+<ManSection Label="CheckMatCode">
+<Func Name="CheckMatCode" Arg=" H [name] F "/>
+
+<Description>
+<C>CheckMatCode</C> returns a linear code with check matrix 
+<A>H</A>. <A>H</A> must be a matrix over Galois field <A>F</A>. 
+<A>[name.</A> can contain a short description of
+the code. The parity check matrix is the transposed of the nullmatrix of
+the generator matrix of the code. Therefore, 
+<M>c\cdot H^T =  0</M> where <M>c</M> is an element of the code.  
+If <A>H</A> is a <M>r\times n</M>-matrix, the code has word
+length <M>n</M>, redundancy <M>r</M> and dimension <M>n-r</M>.
+<P/>
+If the check matrix does not have full row rank, the linearly dependent
+rows are removed. This is done by the GAP function <C>BaseMat</C>.
+and results in an equal code. The check matrix can be retrieved with the
+function 
+<C>CheckMat</C> (see <Ref Func="CheckMat" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := CheckMatCode( G, GF(3) );
+a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
+gap> CheckMat(C1);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
+gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a cyclic [5,0,5]5 code defined by check matrix over GF(2)
+</Example>
+<!--
+G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+C1 := CheckMatCode( G, GF(3) );
+CheckMat(C1);
+C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+-->
+
+<Index>
+code, Hamming
+</Index>
+
+<ManSection Label="HammingCode">
+<Func Name="HammingCode" Arg=" r F "/>
+
+<Description>
+<C>HammingCode</C> returns a Hamming code with redundancy 
+<A>r</A>  over <A>F</A>.  A Hamming code is a single-error-correcting 
+code. The parity check matrix of a Hamming code has all nonzero vectors
+of length <A>r</A> in its columns,
+except for a multiplication factor. The decoding algorithm of the Hamming
+code (see <Ref Func="Decode" Style="Number"/>) makes use of this property.
+<P/>
+If <M>q</M> is the size of its field <A>F</A>, the returned 
+Hamming code is a linear <M>[(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3]</M> code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := HammingCode( 3, GF(9) );
+a linear [91,88,3]1 Hamming (3,9) code over GF(9) 
+</Example>
+<!--
+C1 := HammingCode( 4, GF(2) );
+C2 := HammingCode( 3, GF(9) );
+-->
+
+<Index>
+code, Reed-Muller
+</Index>
+
+<ManSection Label="ReedMullerCode">
+<Func Name="ReedMullerCode" Arg=" r k "/>
+
+<Description>
+<C>ReedMullerCode</C> returns a binary 'Reed-Muller code' 
+<A>R(r, k)</A>  with dimension <A>k</A> and order <A>r</A>. 
+This is a code with length <M>2^k</M> and
+minimum  distance <M>2^{k-r}</M> (see for example,
+section 1.10 in <Cite Key="HP03"/>). By definition, the <M>r^{th}</M>
+order binary Reed-Muller code of length <M>n=2^m</M>, for 
+<M>0 \leq r \leq m</M>, is the set of all vectors <M>f</M>, where 
+<M>f</M> is a Boolean function which is a polynomial of degree 
+at most <M>r</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</Example>
+<!--
+ReedMullerCode( 1, 3 );
+
+############# insert more examples #############
+-->
+
+See <Ref Func="GeneralizedReedMullerCode" Style="Number"/>
+for a more general construction.
+
+<Index>
+code, alternant
+</Index>
+
+<ManSection Label="AlternantCode">
+<Func Name="AlternantCode" Arg=" r Y [alpha] F "/>
+
+<Description>
+<C>AlternantCode</C> returns an 'alternant code', 
+with parameters <A>r</A>, <A>Y</A> and
+<A>alpha</A> (optional).  <A>F</A> denotes the (finite) base field.
+Here, <A>r</A> is the design redundancy of the code. <A>Y</A> and
+<A>alpha</A> are both vectors of length <A>n</A> from which 
+the parity check matrix is constructed. 
+The check matrix has the form <M>H=([a_i^j y_i])</M>,
+where <M>0 \leq j\leq r-1</M>, <M>1 \leq i\leq n</M>,
+and where <M>[...]</M>
+is as in <Ref Func="VerticalConversionFieldMat" Style="Number"/>).
+If no <A>alpha</A> is specified, the vector 
+<M>[1, a,  a^2, .., a^{n-1}]</M> is used,
+where <M>a</M> is a primitive element of a Galois field <A>F</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+gap> alpha := List( [0..6], i -> a^i );;
+gap> C := AlternantCode( 2, Y, alpha, GF(8) );
+a linear [7,3,3..4]3..4 alternant code over GF(8) 
+</Example>
+<!--
+Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+alpha := List( [0..6], i -> a^i );;
+C := AlternantCode( 2, Y, alpha, GF(8) );
+-->
+
+<Index>
+code, Goppa (classical)
+</Index>
+
+<ManSection Label="GoppaCode">
+<Func Name="GoppaCode" Arg=" G L "/>
+
+<Description>
+<C>GoppaCode</C> returns a Goppa code <A>C</A> from Goppa polynomial 
+<A>g</A>, having coefficients in a Galois Field <M>GF(q)</M>. 
+<A>L</A> must  be a list of elements in <M>GF(q)</M>, 
+that are not roots of <A>g</A>.  The word length of the code is
+equal to the length of <A>L</A>. The parity check matrix has the
+form <M>H=([a_i^j /  G(a_i)])_{0 \leq j \leq deg(g)-1,\ a_i \in L}</M>, 
+where <M>a_i\in L</M>
+and <M>[...]</M> is as in 
+<Ref Func="VerticalConversionFieldMat" Style="Number"/>,
+so <M>H</M> has entries in <M>GF(q)</M>, <M>q=p^m</M>.
+It is known that <M>d(C)\geq deg(g)+1</M>, with a better
+bound in the binary case provided <M>g</M> has no 
+multiple roots. See Huffman and Pless
+<Cite Key="HP03"/> section 13.2.2, and
+MacWilliams and Sloane <Cite Key="MS83"/> section 12.3,
+for more details.
+<P/>
+One can also call <C>GoppaCode</C> using the syntax
+<C>GoppaCode(g,n)</C>. 
+When called with parameter <A>n</A>, 
+<Package>GUAVA</Package> constructs a list <M>L</M> of length
+<A>n</A>, such that no element of <A>L</A> is a root of <A>g</A>.
+<P/>
+This is a special case of an alternant code.
+</Description>
+</ManSection>
+
+<Example>
+gap> x:=Indeterminate(GF(8),"x");
+x
+gap> L:=Elements(GF(8));
+[ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
+gap> g:=x^2+x+1;
+x^2+x+Z(2)^0
+gap> C:=GoppaCode(g,L);
+a linear [8,2,5]3 Goppa code over GF(2)
+gap> xx := Indeterminate( GF(2), "xx" );; 
+gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
+gap> C1 := GoppaCode( gg, L );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> y := Indeterminate( GF(2), "y" );; 
+gap> h := y^2 + y + 1;;
+gap> C2 := GoppaCode( h, 8 );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> C1=C2;
+true
+gap> C=C1;
+true
+</Example>
+<!-- 
+x:=Indeterminate(GF(8),"x");
+L:=Elements(GF(8));
+g:=x^2+x+1;
+C:=GoppaCode(g,L);
+xx := Indeterminate( GF(2), "xx" );; 
+gg := xx^2 + xx + 1;; L := AsSSortedList( GF( 8) );;
+C1 := GoppaCode( gg, L );
+y := Indeterminate( GF(2), "y" );; 
+h := y^2 + y + 1;;
+C2 := GoppaCode( h, 8 );
+C1=C2; 
+C=C1;
+-->
+
+<Index>
+code, Srivastava
+</Index>
+
+<ManSection Label="GeneralizedSrivastavaCode">
+<Func Name="GeneralizedSrivastavaCode" Arg=" a w z [t] F "/>
+
+<Description>
+<C>GeneralizedSrivastavaCode</C> returns a generalized Srivastava
+code with parameters <A>a</A>, <A>w</A>, <A>z</A>, 
+<A>t</A>. <M>a =\{ a_1, ..., a_n\}</M> and 
+<M>w =\{ w_1, ..., w_s\}</M> are lists of <M>n+s</M> 
+distinct elements of <M>F=GF(q^m)</M>, 
+<M>z</M> is a list of length <M>n</M> of nonzero elements 
+of <M>GF(q^m)</M>. The parameter <A>t</A>
+determines the designed distance: <M>d  \geq  st + 1</M>.  
+The check matrix of this code is the form 
+<Display>
+H=([\frac{z_i}{(a_i - w_j)^k}]),
+</Display>
+<M>1\leq k\leq t</M>, where
+<M>[...]</M> is as in 
+<Ref Func="VerticalConversionFieldMat" Style="Number"/>.  
+We use this definition of <M>H</M> to define the code.
+The default for <A>t</A> is 1. 
+The original Srivastava codes (see  
+<Ref Func="SrivastavaCode" Style="Number"/>) are a
+special case <M>t=1</M>, <M>z_i=a_i^\mu</M>, for some 
+<M>\mu</M>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 
+</Example>
+<!--
+a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+-->
+
+
+<ManSection Label="SrivastavaCode">
+<Func Name="SrivastavaCode" Arg=" a w [mu] F "/>
+
+<Description>
+<M>SrivastavaCode</M> returns a Srivastava code with parameters 
+<A>a</A>, <A>w</A> (and optionally <A>mu</A>).
+<M>a =\{ a_1, ..., a_n\}</M> and 
+<M>w =\{ w_1, ..., w_s\}</M> are lists of <M>n+s</M> 
+distinct elements of <M>F=GF(q^m)</M>. 
+The default for <A>mu</A> is 1. The
+Srivastava code is a generalized Srivastava code, 
+in which <M>z_i = a_i^{mu}</M> for some <A>mu</A>
+and <M>t=1</M>.
+<P/>
+J. N. Srivastava introduced this code in 1967,
+though his work was not published. 
+See Helgert <Cite Key="He72"/> for more details on the 
+properties of this code. 
+Related reference:
+G. Roelofsen,
+<B>On Goppa and Generalized Srivastava Codes</B>
+PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of
+Technology, the Netherlands, 1982.
+<!--
+H. J. Helgert. <E>Noncyclic generalizations of BCH and Srivastava codes</E>. 
+<B>Information and Control</B>, 21(3):280-290, October 1972. 
+-->
+
+</Description>
+</ManSection>
+
+<Example>
+gap> a := AsSSortedList( GF(11) ){[2..8]};;
+gap> w := AsSSortedList( GF(11) ){[9..10]};;
+gap> C := SrivastavaCode( a, w, 2, GF(11) );
+a linear [7,5,3]2 Srivastava code over GF(11)
+gap> IsMDSCode( C );
+true    # Always true if F is a prime field 
+</Example>
+<!--
+a := AsSSortedList( GF(11) ){[2..8]};;
+w := AsSSortedList( GF(11) ){[9..10]};;
+C := SrivastavaCode( a, w, 2, GF(11) );
+IsMDSCode( C );
+# Why is this always true if F is a prime field ? 
+# not in Helgert 1972 ...
+-->
+
+<Index>
+code, Cordaro-Wagner
+</Index>
+
+<ManSection Label="CordaroWagnerCode">
+<Func Name="CordaroWagnerCode" Arg=" n "/>
+
+<Description>
+<C>CordaroWagnerCode</C> returns a binary Cordaro-Wagner code. 
+This is a code of length <A>n</A> and dimension <M>2</M>
+having the best possible minimum distance
+<M>d</M>.  This code is just a little bit less trivial than 
+<C>RepetitionCode</C>
+(see <Ref Func="RepetitionCode" Style="Number"/>).
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C := CordaroWagnerCode( 11 );
+a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);                 
+[ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
+  [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]
+</Example>
+
+
+<ManSection Label="FerreroDesignCode">
+<Func Name="FerreroDesignCode" Arg=" P m "/>
+
+<Description>
+<E>Requires the GAP package SONATA</E>
+<P/>
+A group <M>K</M> together with a group of
+automorphism <M>H</M> of <M>K</M> such that the
+semidirect product <M>KH</M> is a Frobenius group with
+complement <M>H</M> is called a Ferrero pair <M>(K, H)</M>
+in SONATA. 
+Take a Frobenius <M>(G,+)</M> group with kernel <M>K</M>
+and complement <M>H</M>.
+Consider the design <M>D</M> with point set <M>K</M> and block set
+<M>\{ a^H + b\ |\ a, b \in K, a \not= 0 \}</M>.
+Here <M>a^H</M> denotes the orbit of a under conjugation by elements
+of <M>H</M>. Every planar near-ring design of type "*" can be obtained
+in this way from groups. 
+These designs (from a Frobenius kernel
+of order <M>v</M> and a Frobenius complement of order <M>k</M>) have
+<M>v(v-1)/k</M> distinct blocks and they are all of size <M>k</M>.
+Moreover each of the <M>v</M> points occurs in exactly <M>v-1</M> distinct
+blocks. Hence the rows and the columns of the incidence
+matrix <M>M</M> of the design are always of constant weight.
+<P/>
+<C>FerreroDesignCode</C>
+constructs binary linear code arising from the incdence
+matrix of a design associated to a "Ferrero pair" arising
+from a fixed-point-free (fpf) automorphism groups and Frobenius group.
+<P/>
+INPUT: <M>P</M> is a list of prime powers describing an abelian group <M>G</M>.
+       <M>m > 0</M> is an integer such that <M>G</M> admits a cyclic fpf 
+	   automorphism group of size <M>m</M>.
+	   This means that for all <M>q = p^k \in P</M>,
+	   OrderMod(<M>p</M>, <M>m</M>) must divide <M>q</M> 
+	   (see the SONATA documentation for <C>FpfAutomorphismGroupsCyclic</C>).
+<P/>
+ OUTPUT: The binary linear code whose generator matrix is the
+         incidence matrix of a design associated to a "Ferrero pair" arising
+		 from the fixed-point-free (fpf) automorphism group of <M>G</M>.
+		 The pair <M>(H,K)</M> is called a Ferraro pair and the semidirect product
+		 <M>KH</M> is a Frobenius group with complement <M>H</M>.
+<P/>
+ AUTHORS: Peter Mayr and David Joyner
+
+</Description>
+</ManSection>
+
+<Example>
+gap> G:=AbelianGroup([5,5] );
+ [ pc group of size 25 with 2 generators ]
+gap> FpfAutomorphismGroupsMaxSize( G );
+[ 24, 2 ]
+gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+[ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
+  [ pc group of size 25 with 2 generators ] ]
+gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+ [ a 2 - ( 25, 3, 2 ) nearring generated design ]
+gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+25
+200
+gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+24
+gap> C2:=FerreroDesignCode( [5,5],3);
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> C1=C2;
+true
+
+</Example>
+<!--
+
+
+G:=AbelianGroup([5,5] );
+FpfAutomorphismGroupsMaxSize( G );
+L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+C1:=GeneratorMatCode(M*Z(2),GF(2));
+MinimumDistance(C1);
+C2:=FerreroDesignCode( [5,5],3);
+C1=C2;
+
+-->
+
+
+
+<ManSection Label="RandomLinearCode">
+<Func Name="RandomLinearCode" Arg=" n k F "/>
+
+<Description>
+<C>RandomLinearCode</C> returns a random linear code with word length 
+<A>n</A>, dimension <A>k</A> over field <A>F</A>.
+The method used is to first construct a
+<M>k\times n</M> matrix of the block form <M>(I,A)</M>,
+where <M>I</M> is a <M>k\times k</M> identity matrix
+and  <M>A</M> is a <M>k\times (n-k)</M> matrix 
+constructed using <C>Random(F)</C> repeatedly.
+Then the columns are permuted using a randomly
+selected element of <C>SymmetricGroup(n)</C>.
+<P/>
+To create a random unrestricted code, use <C>RandomCode</C> (see
+<Ref Func="RandomCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C := RandomLinearCode( 15, 4, GF(3) );
+a  [15,4,?] randomly generated code over GF(3)
+gap> Display(C);
+a linear [15,4,1..6]6..10 random linear code over GF(3)
+</Example>
+<!--
+C := RandomLinearCode( 15, 4, GF(3) );
+Display(C);
+-->
+
+The method <Package>GUAVA</Package> chooses to output the result of a
+<C>RandomLinearCode</C> command is different than other codes. 
+For example, the bounds on the minimum distance is not displayed.
+Howeer, you can use the <C>Display</C> command to print this information.
+This new display method was added in version 1.9 to speed up
+the command (if <M>n</M> is about 80 and
+<M>k</M> about 40, for example, the time it took to
+look up and/or calculate the bounds on the minimum distance
+was too long).
+
+
+<ManSection Label="OptimalityCode">
+<Func Name="OptimalityCode" Arg=" C "/>
+
+<Description>
+<!--In general this command is no longer accurate, since the
+tables have not been updated since 1998. See the web site
+<URL>http://www.win.tue.nl/~aeb/voorlincod.html</URL>
+for more recent data.
+<P/>-->
+<C>OptimalityCode</C> returns the difference between the smallest 
+known upper bound and the actual size of the code. Note that the value of the
+function <C>UpperBound</C> is not always equal to the actual upper bound 
+<M>A(n,d)</M> thus the result may not be equal to <M>0</M> 
+even if the code is optimal!
+<P/>
+<C>OptimalityLinearCode</C> is similar but applies only
+to linear codes.
+</Description>
+</ManSection>
+
+
+<ManSection Label="BestKnownLinearCode">
+<Func Name="BestKnownLinearCode" Arg=" n k F "/>
+
+<Description>
+<!--In general this command is no longer accurate, since the
+tables have not been updated since 1998. See the web site
+<URL>http://www.win.tue.nl/~aeb/voorlincod.html</URL>
+for more recent data.
+<P/>-->
+<C>BestKnownLinearCode</C> returns the best known (as of 11 May 2006<!--1998-->)
+linear code of length <A>n</A>,
+dimension <A>k</A> over field <A>F</A>. 
+The function uses the tables described in
+section <Ref Func="BoundsMinimumDistance" Style="Number"/> 
+to construct this code.
+<P/>
+This command can also be called using the syntax
+<C>BestKnownLinearCode( rec )</C>, where
+<A>rec</A> must be a record containing the fields `lowerBound',
+`upperBound' and `construction'. It uses the information in this field to
+construct a code.  This form is meant to  be used together with the
+function <C>BoundsMinimumDistance</C> 
+(see <Ref Func="BoundsMinimumDistance" Style="Number"/>), if the
+bounds are already calculated.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> C1 = BinaryGolayCode();
+false     # it's constructed differently
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G1 := MutableCopyMat(GeneratorMat(C1));;
+gap> PutStandardForm(G1);
+()
+gap> Display(G1);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+gap> C2 := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> G2 := MutableCopyMat(GeneratorMat(C2));;
+gap> PutStandardForm(G2);
+()
+gap> Display(G2);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+## Despite their generator matrices are different, they are equivalent codes, see below.
+gap> IsEquivalent(C1,C2);
+true
+gap> CodeIsomorphism(C1,C2);
+(4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
+gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+a linear [81,77,3]2..3 shortened code of
+a linear [85,81,3]1 Hamming (4,4) code over GF(4)
+gap> C:=BestKnownLinearCode(174,72);
+a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
+gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+rec( n := 81, k := 77, q := 4, 
+  references := rec( Ham := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ], 
+      cap := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ] ), 
+  construction := [ (Operation "ShortenedCode"), 
+      [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
+  lowerBound := 3, 
+  lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
+      "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
+  upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
+      "Ub(18,14)=3, reference: cap" ] )
+gap> C := BestKnownLinearCode( bounds );
+a linear [81,77,3]2..3 shortened code
+gap> C = BestKnownLinearCode(81, 77, GF(4) );
+true
+</Example>
+
+<!--
+C1 := BestKnownLinearCode( 23, 12, GF(2) );
+C1 = BinaryGolayCode();
+C1 := BestKnownLinearCode( 23, 12, GF(2) );
+G1 := MutableCopyMat(GeneratorMat(C1));;
+PutStandardForm(G1);
+Display(G1);
+C2 := BinaryGolayCode();
+G2 := MutableCopyMat(GeneratorMat(C2));;
+PutStandardForm(G2);
+Display(G2);
+IsEquivalent(C1,C2);
+CodeIsomorphism(C1,C2);
+Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+C:=BestKnownLinearCode(174,72);
+bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+C := BestKnownLinearCode( bounds );
+C = BestKnownLinearCode(81, 77, GF(4) );
+-->
+
+</Section>
+
+
+<Section>
+<Heading>
+Gabidulin Codes
+</Heading>
+<Label Name="Gabidulin Codes"/>
+
+<!--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Section   GabidulinCode, EnlargedGabidulinCode, DavydovCode,
+%          TombakCode, EnlargedTombakCode
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-->
+
+
+These five binary, linear 
+codes are derived from an article by Gabidulin, Davydov and
+Tombak <Cite Key="GDT91"/>. All these codes are defined by 
+check matrices.
+Exact definitions can be found in the article.
+The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the
+Tombak code, and the enlarged Tombak code, correspond with theorem 1,  2,
+3, 4, and 5, respectively in the article.
+<P/>
+Like the Hamming codes, these codes have fixed minimum 
+distance and covering radius, but can be arbitrarily long. 
+
+
+<Index>
+code, Gabidulin
+</Index>
+
+<ManSection Label="GabidulinCode">
+<Func Name="GabidulinCode" Arg=" m w1 w2 "/>
+
+<Description>
+<C>GabidulinCode</C> yields a code of length <M>5</M> . 
+<M>2^{m-2}-1</M>, redundancy <M>2m-1</M>, 
+minimum distance <M>3</M> and covering radius <M>2</M>.
+<A>w1</A> and <A>w2</A> should be elements of 
+<M>GF(2^{m-2})</M>.
+</Description>
+</ManSection>
+
+<ManSection Label="EnlargedGabidulinCode">
+<Func Name="EnlargedGabidulinCode" Arg=" m w1 w2 e "/>
+
+<Description>
+<C>EnlargedGabidulinCode</C> yields a code of length 
+<M>7</M>. <M>2^{m-2}-2</M>, redundancy <M>2m</M>, 
+minimum distance <M>3</M> and covering radius <M>2</M>.
+<A>w1</A> and <A>w2</A> are elements of 
+<M>GF(2^{m-2})</M>. <A>e</A> is an element of 
+<M>GF(2^m)</M>.
+<!--
+The core of an enlarged Gabidulin code consists of a Gabidulin code.
+-->
+</Description>
+</ManSection>
+
+<Index>
+code, Davydov
+</Index>
+
+<ManSection Label="DavydovCode">
+<Func Name="DavydovCode" Arg=" r v ei ej "/>
+
+<Description>
+<C>DavydovCode</C> yields a code of length <M>2^v + 2^{r-v} - 3</M>,
+redundancy <A>r</A>, minimum distance <M>4</M> 
+and covering radius <M>2</M>. <A>v</A> is an integer between 
+<M>2</M> and <M>r-2</M>. <A>ei</A> and <A>ej</A> are 
+elements of <M>GF(2^v)</M> and <M>GF(2^{r-v})</M>,
+respectively.
+</Description>
+</ManSection>
+
+<Index>
+code, Tombak
+</Index>
+
+<ManSection Label="TombakCode">
+<Func Name="TombakCode" Arg=" m e beta gamma w1 w2 "/>
+
+<Description>
+<C>TombakCode</C> yields a code of length 
+<M>15 \cdot 2^{m-3} - 3</M>,
+redundancy <M>2m</M>, minimum distance <M>4</M> and 
+covering radius <M>2</M>.
+<A>e</A> is an element of <M>GF(2^m)</M>.
+<A>beta</A> and <A>gamma</A> are elements of 
+<M>GF(2^{m-1})</M>.
+<A>w1</A> and <A>w2</A> are elements of 
+<M>GF(2^{m-3})</M>.
+</Description>
+</ManSection>
+
+<ManSection Label="EnlargedTombakCode">
+<Func Name="EnlargedTombakCode" Arg=" m e beta gamma w1 w2 u "/>
+
+<Description>
+<C>EnlargedTombakCode</C> yields a code of length 
+<M>23 \cdot 2^{m-4} - 3</M>, redundancy <M>2m-1</M>, 
+minimum distance <M>4</M> and covering radius <M>2</M>.
+The parameters <A>m</A>, <A>e</A>, <A>beta</A>, <A>gamma</A>, 
+<A>w1</A> and <A>w2</A> are defined as in <C>TombakCode</C>.
+<A>u</A> is an element of <M>GF(2^{m-1})</M>.
+<!--
+The core of an enlarged Tombak code consists of a Tombak code.
+-->
+</Description>
+</ManSection>
+
+<Example>
+gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
+gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
+gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
+gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+a linear [57,47,4]2 Tombak code (m=5) over GF(2)
+gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
+> Z(4)^0, Z(4)^0, Z(32)^23 );
+a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)
+</Example>
+<!--
+GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^0, Z(32)^23 );
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Golay Codes
+</Heading>
+<Label Name="Golay Codes"/>
+
+<Q>
+The Golay code is probably the most important of all codes 
+for both practical and theoretical reasons. 
+</Q>
+(<Cite Key="MS83"/>, pg. 64).
+Though born in Switzerland, M. J. E. Golay (1902-1989) worked for 
+the US Army Labs for most of his career.
+For more information on his life, see his obit in the June 
+1990 IEEE Information Society Newsletter.
+
+<Index>
+code, Golay (binary)
+</Index>
+
+<ManSection Label="BinaryGolayCode">
+<Func Name="BinaryGolayCode" Arg="  "/>
+
+<Description>
+<C>BinaryGolayCode</C> returns a binary Golay code. This is a perfect
+<M>[23,12,7]</M>  code. It is also cyclic, and has generator polynomial
+<M>g(x)=1+x^2+x^4+x^5+x^6+x^{10}+x^{11}</M>.  
+Extending it results in an extended Golay code (see  
+<Ref Func="ExtendedBinaryGolayCode" Style="Number"/>).  There's  also  the
+ternary Golay code (see 
+<Ref Func="TernaryGolayCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+true
+gap> IsPerfectCode(C);
+true 
+gap> IsCyclicCode(C);
+true
+</Example>
+<!--
+C:=BinaryGolayCode();
+ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+IsPerfectCode(C);
+IsCyclicCode(C);
+-->
+
+<ManSection Label="ExtendedBinaryGolayCode">
+<Func Name="ExtendedBinaryGolayCode" Arg="  "/>
+
+<Description>
+<C>ExtendedBinaryGolayCode</C> returns an extended binary Golay code. 
+This is a <M>[24,12,8]</M> code. Puncturing in the last position 
+results in a perfect binary Golay code 
+(see <Ref Func="BinaryGolayCode" Style="Number"/>). 
+The code is self-dual.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := ExtendedBinaryGolayCode();
+a linear [24,12,8]4 extended binary Golay code over GF(2)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [23,12,7]3 punctured code
+gap> P = BinaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+
+</Example>
+<!--
+C := ExtendedBinaryGolayCode();
+IsSelfDualCode(C);
+P := PuncturedCode(C);
+P = BinaryGolayCode();
+IsCyclicCode(C);
+-->
+
+<Index>
+code, Golay (ternary)
+</Index>
+
+<ManSection Label="TernaryGolayCode">
+<Func Name="TernaryGolayCode" Arg="  "/>
+
+<Description>
+<C>TernaryGolayCode</C> returns a ternary Golay code.
+This is a perfect <M>[11,6,5]</M> code. 
+It is also cyclic, and  has generator polynomial
+<M>g(x)=2+x^2+2x^3+x^4+x^5</M>. 
+Extending it results in an extended Golay code
+(see <Ref Func="ExtendedTernaryGolayCode" Style="Number"/>). 
+There's also the binary Golay code (see
+<Ref Func="BinaryGolayCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+true 
+gap> IsCyclicCode(C);
+true
+</Example>
+<!--
+C:=TernaryGolayCode();
+ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+IsCyclicCode(C);
+-->
+
+<ManSection Label="ExtendedTernaryGolayCode">
+<Func Name="ExtendedTernaryGolayCode" Arg="  "/>
+
+<Description>
+<C>ExtendedTernaryGolayCode</C> returns an 
+extended ternary Golay code. 
+This is a <M>[12,6,6]</M> code. Puncturing this code 
+results in a perfect ternary Golay code 
+(see <Ref Func="TernaryGolayCode" Style="Number"/>). 
+The code is self-dual.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := ExtendedTernaryGolayCode();
+a linear [12,6,6]3 extended ternary Golay code over GF(3)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [11,6,5]2 punctured code
+gap> P = TernaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+</Example>
+<!--
+C := ExtendedTernaryGolayCode();
+IsSelfDualCode(C);
+P := PuncturedCode(C);
+P = TernaryGolayCode();
+IsCyclicCode(C);
+-->
+
+</Section>
+
+<Section>
+<Heading>
+Generating Cyclic Codes
+</Heading>
+<Label Name="Generating Cyclic Codes"/>
+
+
+The  elements of a cyclic code <M>C</M> are all 
+multiples of a ('generator') polynomial <M>g(x)</M>, 
+where calculations are carried out modulo <M>x^n-1</M>. 
+Therefore, as polynomials in <M>x</M>, the elements always 
+have degree less than <M>n</M>. A cyclic code is an ideal in
+the ring <M>F[x]/(x^n-1)</M> of polynomials modulo 
+<M>x^n - 1</M>. The unique monic polynomial 
+of least degree that generates <M>C</M>
+is called the <E>generator polynomial</E> of <M>C</M>.
+It is a divisor of the polynomial <M>x^n-1</M>.
+<Index>generator polynomial</Index>
+<Index>check polynomial</Index>
+<P/>
+
+The <E>check polynomial</E> is the polynomial <M>h(x)</M> with 
+<M>g(x)h(x)=x^n-1</M>. Therefore it is also a divisor of 
+<M>x^n-1</M>. The check polynomial has the property that
+<Display>
+c(x)h(x) \equiv  0 \pmod{x^n-1},
+</Display>
+for every codeword <M>c(x)\in C</M>.
+<P/>
+The first two functions described below 
+generate cyclic codes from a given generator or check 
+polynomial. All cyclic codes can be constructed using
+these functions.
+<P/>
+Two of the Golay codes already described are cyclic 
+(see <Ref Func="BinaryGolayCode" Style="Number"/>  and
+<Ref Func="TernaryGolayCode" Style="Number"/>). For example,
+the <Package>GUAVA</Package> record for a binary
+Golay code contains the generator polynomial:
+
+<Example>
+gap> C := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> NamesOfComponents(C);
+[ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
+  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
+  "boundsCoveringRadius", "MinimumWeightOfGenerators", 
+  "UpperBoundOptimalMinimumDistance" ]
+gap> C!.GeneratorPol;
+x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0
+</Example>
+<!--
+C := BinaryGolayCode();
+NamesOfComponents(C);
+C!.GeneratorPol;
+-->
+
+Then functions that generate cyclic codes from a prescribed set of roots
+of the generator polynomial are described, including the BCH codes (see
+<Ref Func="RootsCode" Style="Number"/>, 
+<Ref Func="BCHCode" Style="Number"/>, 
+<Ref Func="ReedSolomonCode" Style="Number"/> and 
+<Ref Func="QRCode" Style="Number"/>).
+<P/>
+Finally we describe the trivial codes 
+(see <Ref Func="WholeSpaceCode" Style="Number"/>,  
+<Ref Func="NullCode" Style="Number"/>,
+<Ref Func="RepetitionCode" Style="Number"/>), and
+the command <C>CyclicCodes</C> which lists all   
+cyclic codes (<Ref Func="CyclicCodes" Style="Number"/>).
+
+<ManSection Label="GeneratorPolCode">
+<Func Name="GeneratorPolCode" Arg=" g n [name] F "/>
+
+<Description>
+<C>GeneratorPolCode</C> creates a cyclic code with a 
+generator polynomial <A>g</A>, word length <A>n</A>, 
+over <A>F</A>.  <A>name</A> can contain  a short
+description of the code.
+<P/>
+If <A>g</A> is not a divisor of <M>x^n-1</M>, it cannot be 
+a generator polynomial. In that case,  a code is created 
+with generator polynomial <M>gcd( g,  x^n-1 )</M>, 
+i.e. the greatest common divisor of <A>g</A> and
+<M>x^n-1</M>. This is a valid generator polynomial 
+that generates the ideal <M>(g)</M>. 
+See <Ref Func="Generating Cyclic Codes" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
+Z(2)^0+x^2
+gap> C1 := GeneratorPolCode(P, 7, GF(2));
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C1 );
+Z(2)^0+x
+gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C2 );
+Z(2)^0+x
+</Example>
+<!--
+x:= Indeterminate( GF(2) );; P:= x^2+1;
+C1 := GeneratorPolCode(P, 7, GF(2));
+GeneratorPol( C1 );
+C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+GeneratorPol( C2 );
+-->
+
+<ManSection Label="CheckPolCode">
+<Func Name="CheckPolCode" Arg=" h n [name] F "/>
+
+<Description>
+<C>CheckPolCode</C> creates a cyclic code with a check polynomial 
+<A>h</A>, word length <A>n</A>, over <A>F</A>. <A>name</A> 
+can contain a short description of the code (as a string).
+<P/>
+If <A>h</A> is not a divisor of <M>x^n-1</M>, it cannot be a 
+check polynomial. In that case, a code is created with check 
+polynomial <M>gcd( h, x^n-1 )</M>,
+i.e. the greatest common divisor of <A>h</A> and 
+<M>x^n-1</M>. This is a valid check polynomial that yields 
+the same elements as the ideal <M>(h)</M>. See
+<Ref Label="Generating Cyclic Codes" Style="Number"/>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
+-Z(3)^0+x_1^2
+gap> H := CheckPolCode(P, 7, GF(3));
+a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
+gap> CheckPol(H);
+-Z(3)^0+x_1
+gap> Gcd(P, X(GF(3))^7-1);
+-Z(3)^0+x_1
+</Example>
+<!--
+x:= Indeterminate( GF(3) );; P:= x^2+2;
+H := CheckPolCode(P, 7, GF(3));
+CheckPol(H);
+Gcd(P, X(GF(3))^7-1);
+-->
+
+
+<ManSection Label="RootsCode">
+<Func Name="RootsCode" Arg=" n list "/>
+
+<Description>
+This is the generalization of the BCH, Reed-Solomon and quadratic residue
+codes (see 
+<Ref Func="BCHCode" Style="Number"/>, 
+<Ref Func="ReedSolomonCode" Style="Number"/> and  
+<Ref Func="QRCode" Style="Number"/>). The user can give
+a length of  the code <A>n</A> and a prescribed set of zeros. The argument
+<A>list</A> must be a valid  list of primitive <M>n^{th}</M> 
+roots of unity in a splitting field <M>GF(q^m)</M>.  
+The resulting  code  will be over  the  field
+<M>GF(q)</M>. The function will return the largest possible cyclic code for
+which  the list <A>list</A> is  a subset of the roots of the code. From this
+list, <Package>GUAVA</Package> calculates the entire set of roots.
+<P/>
+This command can also be called with the syntax
+<C>RootsCode( n, list, q )</C>.
+In this second form,  the second argument is a  list of integers, ranging
+from <M>0</M> to <M>n-1</M>. 
+The resulting code will be over a field <M>GF(q)</M>. 
+<Package>GUAVA</Package>
+calculates a primitive <M>n^{th}</M> root of unity, <M>\alpha</M>, in the
+extension field of <M>GF(q)</M>. It uses the set of the powers of 
+<M>\alpha</M> in the list as a prescribed set of zeros.
+</Description>
+</ManSection>
+
+<Example>
+gap> a := PrimitiveUnityRoot( 3, 14 );
+Z(3^6)^52
+gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
+gap> MinimumDistance( C1 );
+4
+gap> b := PrimitiveUnityRoot( 2, 15 );
+Z(2^4)
+gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+a cyclic [15,7,5]3..5 code defined by roots over GF(2)
+gap> C2 = BCHCode( 15, 5, GF(2) );
+true 
+C3 := RootsCode( 4, [ 1, 2 ], 5 );
+RootsOfCode( C3 );
+C3 = ReedSolomonCode( 4, 3 );
+
+</Example>
+<!--
+a := PrimitiveUnityRoot( 3, 14 );
+C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+MinimumDistance( C1 );
+b := PrimitiveUnityRoot( 2, 15 );
+C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+C2 = BCHCode( 15, 5, GF(2) );
+C3 := RootsCode( 4, [ 1, 2 ], 5 );
+RootsOfCode( C3 );
+C3 = ReedSolomonCode( 4, 3 );
+-->
+
+<Index>
+code, Bose-Chaudhuri-Hockenghem
+</Index>
+
+
+<ManSection Label="BCHCode">
+<Func Name="BCHCode" Arg=" n [b] delta F "/>
+
+<Description>
+The function <C>BCHCode</C> returns a 
+'Bose-Chaudhuri-Hockenghem code' (or <E>BCH code</E> for short). 
+This is the largest possible cyclic code of length <A>n</A>
+over field <A>F</A>, whose generator polynomial has zeros 
+<Display>
+a^{b},a^{b+1}, ..., a^{b+delta-2}, 
+</Display>
+where <M>a</M> is a primitive <M>n^{th}</M> root of unity in
+the splitting field <M>GF(q^m)</M>, <A>b</A> is an integer 
+<M>0\leq b\leq n-delta+1</M> and <M>m</M> is the
+multiplicative order of <M>q</M> modulo <A>n</A>.  
+(The integers <M>\{b,...,b+delta-2\}</M>
+typically lie in the range <M>\{1,...,n-1\}</M>.)
+Default  value  for <A>b</A> is <M>1</M>, though the algorithm
+allows <M>b=0</M>. The length <A>n</A> of the code and the size <M>q</M> of 
+the field must be relatively prime. 
+The generator polynomial is equal to the least common multiple of the
+minimal polynomials of 
+<Display>
+a^{b}, a^{b+1}, ..., a^{b+delta-2}.
+</Display>
+The set of zeroes of the generator polynomial is equal to the
+union of the sets 
+<Display>
+\{a^x\ |\ x \in C_k\},
+</Display>
+where <M>C_k</M> is the <M>k^{th}</M> cyclotomic coset of 
+<M>q</M> modulo <M>n</M>
+and <M>b\leq k\leq b+delta-2</M> (see 
+<Ref Func="CyclotomicCosets" Style="Number"/>).
+<P/>
+Special cases are <M>b=1</M> (resulting codes are called 'narrow-sense' 
+BCH codes), and <M>n=q^m-1</M> (known as 'primitive' BCH codes). 
+<Package>GUAVA</Package>
+calculates the largest value of <M>d</M> for which the BCH code with
+designed distance <M>d</M> coincides with the BCH code with designed
+distance <A>delta</A>. This distance <M>d</M> is called the 
+<E>Bose distance</E> of the code.
+The true minimum distance of the code is greater than or equal to the
+Bose distance.
+<Index>Bose distance</Index>
+<P/>
+Printed are the designed distance (to be precise, the Bose distance)
+<M>d</M>, and the starting power <M>b</M>.
+<P/>
+The Sugiyama decoding algorithm has been implemented for this code
+(see <Ref Func="Decode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := BCHCode( 15, 3, 5, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> DesignedDistance( C1 );
+7
+gap> C2 := BCHCode( 23, 2, GF(2) );
+a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
+gap> DesignedDistance( C2 );       
+5
+gap> MinimumDistance(C2);
+7 
+</Example>
+<!--
+C1 := BCHCode( 15, 3, 5, GF(2) );
+DesignedDistance( C1 );
+C2 := BCHCode( 23, 2, GF(2) );
+DesignedDistance( C2 );       
+MinimumDistance(C2);
+-->
+
+See <Ref Func="RootsCode" Style="Number"/>
+for a more general construction.
+
+<Index>
+code, Reed-Solomon
+</Index>
+
+<ManSection Label="ReedSolomonCode">
+<Func Name="ReedSolomonCode" Arg=" n d "/>
+
+<Description>
+<C>ReedSolomonCode</C> returns a  'Reed-Solomon code' of length  
+<A>n</A>, designed distance <A>d</A>. 
+This code is a primitive narrow-sense BCH  code over the
+field <M>GF(q)</M>,  where <M>q=n+1</M>.  
+The dimension of an RS code is <M>n-d+1</M>. 
+According to the Singleton bound 
+(see <Ref Func="UpperBoundSingleton" Style="Number"/>)
+the dimension cannot be greater than this, so the true minimum distance
+of an RS code is equal to <A>d</A> and the code is maximum distance separable
+(see <Ref Func="IsMDSCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ReedSolomonCode( 3, 2 );
+a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
+gap> IsCyclicCode(C1);
+true
+gap> C2 := ReedSolomonCode( 4, 3 );
+a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
+gap> RootsOfCode( C2 );
+[ Z(5), Z(5)^2 ]
+gap> IsMDSCode(C2);
+true 
+</Example>
+<!--
+C1 := ReedSolomonCode( 3, 2 );
+IsCyclicCode(C1);
+C2 := ReedSolomonCode( 4, 3 );
+RootsOfCode( C2 );
+IsMDSCode(C2);
+-->
+
+See <Ref Func="GeneralizedReedSolomonCode" Style="Number"/>
+for a more general construction.
+
+<ManSection Label="ExtendedReedSolomonCode">
+	<Func Name="ExtendedReedSolomonCode" Arg=" n d "/>
+	<Description>
+		<C>ExtendedReedSolomonCode</C> creates a Reed-Solomon
+		code of length <M>n-1</M> with designed distance <M>d-1</M>
+		and then returns the code which is extended by adding an
+		overall parity-check symbol. The motivation for creating this
+		function is calling <Ref Func="ExtendedCode" Style="Number"/>
+		function over a Reed-Solomon code will take considerably long
+		time.
+	</Description>
+</ManSection>
+
+<Example>
+gap> C := ExtendedReedSolomonCode(17, 13);
+a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
+gap> IsMDSCode(C);
+true
+</Example>
+<!--
+C := ExtendedReedSolomonCode(17, 13);
+IsMDSCode(C);
+-->
+
+<ManSection Label="QRCode">
+<Func Name="QRCode" Arg=" n F "/>
+
+<Description>
+<C>QRCode</C> returns a quadratic residue code. If <A>F</A> 
+is a field <M>GF(q)</M>, then <M>q</M> must be a quadratic residue 
+modulo <A>n</A>. That is, an <M>x</M> exists with 
+<M>x^2 \equiv q  \pmod n</M>. Both <A>n</A> and <M>q</M> must  
+be primes.  Its generator polynomial is the product of the 
+polynomials <M>x-a^i</M>. <M>a</M> is a primitive <M>n^{th}</M> 
+root of unity, and <M>i</M> is an integer in the set of
+quadratic residues modulo <A>n</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := QRCode( 7, GF(2) );
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+true
+gap> IsCyclicCode(C1);
+true
+gap> IsCyclicCode(HammingCode( 3, GF(2) ));
+false
+gap> C2 := QRCode( 11, GF(3) );
+a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
+gap> C2 = TernaryGolayCode();
+true 
+gap> Q1 := QRCode( 7, GF(2));
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
+Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
+[ 168, 42 ]
+</Example>
+<!--
+C1 := QRCode( 7, GF(2) );
+IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+C2 := QRCode( 11, GF(3) );
+C2 = TernaryGolayCode();
+Q1 := QRCode( 7, GF(2));
+P1:=AutomorphismGroup(Q1); 
+IdGroup(P1);
+
+-->
+
+<ManSection Label="QQRCodeNC">
+<Func Name="QQRCodeNC" Arg=" p "/>
+
+<Description>
+<C>QQRCodeNC</C> is the same as <C>QQRCode</C>, except that
+it uses <C>GeneratorMatCodeNC</C> instead of
+<C>GeneratorMatCode</C>.
+
+</Description>
+</ManSection>
+
+<ManSection Label="QQRCode">
+<Func Name="QQRCode" Arg=" p "/>
+
+<Description>
+<C>QQRCode</C> returns a quasi-quadratic residue code, as defined by
+Proposition 2.2 in Bazzi-Mittel <Cite Key="BM03"/>. The
+parameter <A>p</A> must be a prime.
+Its generator matrix has the block form <M>G=(Q,N)</M>.
+Here <M>Q</M> is a <M>p\times </M> circulant matrix
+whose top row is <M>(0,x_1,...,x_{p-1})</M>, where
+<M>x_i=1</M> if and only if <M>i</M> is a quadratic residue mod <M>p</M>,
+and <M>N</M> is a <M>p\times </M> circulant matrix
+whose top row is <M>(0,y_1,...,y_{p-1})</M>, where
+<M>x_i+y_i=1</M> for all <M>i</M>. (In fact, this matrix
+can be recovered as the component <C>DoublyCirculant</C>
+of the code.)
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := QQRCode( 7);
+a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
+gap> G1:=GeneratorMat(C1);;
+gap> Display(G1);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 . 1 1 1 . . . . 1 1 1 . 1
+ . . . 1 1 . 1 . 1 1 . . . 1
+ . . 1 . 1 1 1 1 . 1 . . 1 1
+ . . . . . . . 1 . . 1 1 1 .
+ . . . . . . . . . 1 1 1 . 1
+ . . . . . . . . 1 . . 1 1 1
+gap> Display(C1!.DoublyCirculant);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 1 . 1 . . . . . 1 . 1 1 .
+ 1 . 1 . . . 1 . 1 . 1 1 . .
+ . 1 . . . 1 1 1 . 1 1 . . .
+ 1 . . . 1 1 . . 1 1 . . . 1
+ . . . 1 1 . 1 1 1 . . . 1 .
+ . . 1 1 . 1 . 1 . . . 1 . 1
+gap> MinimumDistance(C1);
+4
+gap> C2 := QQRCode( 29); MinimumDistance(C2);
+a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
+12
+gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+[ permutation group of size 812 with 4 generators ]
+[ 812, 7 ]
+</Example>
+
+<!--
+C1 := QQRCode( 7);
+G1:=GeneratorMat(C1);;
+Display(G1);
+Display(C1!.DoublyCirculant);
+MinimumDistance(C1);
+C2 := QQRCode( 29); MinimumDistance(C2);
+Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+-->
+
+<Index>
+code, Fire
+</Index>
+
+
+<ManSection Label="FireCode">
+<Func Name="FireCode" Arg=" g b "/>
+
+<Description>
+<C>FireCode</C> constructs a (binary) Fire code. 
+<A>g</A> is a primitive polynomial of degree <M>m</M>, 
+and a factor of <M>x^r-1</M>. <A>b</A> an integer 
+<M>0 \leq  b \leq m</M> 
+not divisible by <M>r</M>,  that determines the burst length  
+of a single error burst that can be corrected. 
+The argument <A>g</A> can be a polynomial with base ring 
+<M>GF(2)</M>, or a list of coefficients in <M>GF(2)</M>.  
+The generator polynomial of the code is defined as the product of 
+<A>g</A> and <M>x^{2b-1}+1</M>.
+<P/>
+Here is the general definition of 'Fire code', named after
+P. Fire, who introduced these codes in 1959 in order to
+correct burst errors. 
+First, a definition. If <M>F=GF(q)</M> and
+<M>f\in F[x]</M> then we say <M>f</M> has
+<E>order</E> <M>e</M> if <M>f(x)|(x^e-1)</M>.
+<Index>order of polynomial</Index>
+A <E>Fire code</E> is a cyclic code over <M>F</M>
+with generator polynomial <M>g(x)=
+(x^{2t-1}-1)p(x)</M>, where <M>p(x)</M>
+does not divide <M>x^{2t-1}-1</M> and satisfies 
+<M>deg(p(x))\geq t</M>. The length of such a code
+is the order of <M>g(x)</M>.
+<!-- 
+If <M>p(x)</M> is an irreducible polynomial
+in <M>F[x]</M> of degree <M>m</M>
+and order <M>e</M> then the order of <M>g(x)</M>
+is equal to <M>lcm(e,2t-1)</M>.
+-->
+Non-binary Fire codes have not been implemented.
+</Description>
+</ManSection>
+.
+
+<Example>
+gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+Z(2)^0+x^2+x^3
+gap> Factors( G );
+[ Z(2)^0+x^2+x^3 ]
+gap> C := FireCode( G, 3 );
+a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
+gap> MinimumDistance( C );
+4     # Still it can correct bursts of length 3 
+</Example>
+<!--
+x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+Factors( G );
+C := FireCode( G, 3 );
+MinimumDistance( C );
+-->
+
+
+<ManSection Label="WholeSpaceCode">
+<Func Name="WholeSpaceCode" Arg=" n F "/>
+
+<Description>
+<C>WholeSpaceCode</C> returns the cyclic whole space code of 
+length <A>n</A> over <A>F</A>. This code consists of all polynomials 
+of degree less than <A>n</A> and coefficients in <A>F</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := WholeSpaceCode( 5, GF(3) );
+a cyclic [5,5,1]0 whole space code over GF(3)
+</Example>
+<!--
+C := WholeSpaceCode( 5, GF(3) );
+-->
+
+
+
+<ManSection Label="NullCode">
+<Func Name="NullCode" Arg=" n F "/>
+
+<Description>
+<C>NullCode</C> returns the zero-dimensional nullcode with length  
+<A>n</A> over <A>F</A>. This code has only one word: the all zero word. 
+It is cyclic though!
+</Description>
+</ManSection>
+
+<Example>
+gap> C := NullCode( 5, GF(3) );
+a cyclic [5,0,5]5 nullcode over GF(3)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ] ]
+</Example>
+<!--
+
+-->
+
+
+<ManSection Label="RepetitionCode">
+<Func Name="RepetitionCode" Arg=" n F "/>
+
+<Description>
+<C>RepetitionCode</C> returns the cyclic repetition code of 
+length <A>n</A> over <A>F</A>. The code has as many elements as 
+<A>F</A>, because each codeword consists of a repetition of one of 
+these elements.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := RepetitionCode( 3, GF(5) );
+a cyclic [3,1,3]2 repetition code over GF(5)
+gap> AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
+gap> IsPerfectCode( C );
+false
+gap> IsMDSCode( C );
+true 
+</Example>
+<!--
+C := RepetitionCode( 3, GF(5) );
+AsSSortedList( C );
+IsPerfectCode( C );
+IsMDSCode( C );
+-->
+
+<ManSection Label="CyclicCodes">
+<Func Name="CyclicCodes" Arg=" n F "/>
+
+<Description>
+<C>CyclicCodes</C> returns a list of all cyclic codes of length <A>n</A> 
+over <A>F</A>. It constructs all possible generator polynomials 
+from the factors of <M>x^n-1</M>. Each combination of these 
+factors yields a generator polynomial after multiplication.
+</Description>
+</ManSection>
+
+<Example>
+gap> CyclicCodes(3,GF(3));
+[ a cyclic [3,3,1]0 enumerated code over GF(3), 
+a cyclic [3,2,1..2]1 enumerated code over GF(3), 
+a cyclic [3,1,3]2 enumerated code over GF(3), 
+a cyclic [3,0,3]3 enumerated code over GF(3) ]
+</Example>
+<!--
+CyclicCodes(3,GF(3));
+-->
+
+
+<ManSection Label="NrCyclicCodes">
+<Func Name="NrCyclicCodes" Arg=" n F "/>
+
+<Description>
+The function <C>NrCyclicCodes</C> calculates the number of 
+cyclic codes of length <A>n</A> over field <A>F</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> NrCyclicCodes( 23, GF(2) );
+8
+gap> codelist := CyclicCodes( 23, GF(2) );
+[ a cyclic [23,23,1]0 enumerated code over GF(2), 
+  a cyclic [23,22,1..2]1 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,0,23]23 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2), 
+  a cyclic [23,1,23]11 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
+gap> BinaryGolayCode() in codelist;
+true
+gap> RepetitionCode( 23, GF(2) ) in codelist;
+true
+gap> CordaroWagnerCode( 23 ) in codelist;
+false    # This code is not cyclic 
+</Example>
+<!--
+NrCyclicCodes( 23, GF(2) );
+codelist := CyclicCodes( 23, GF(2) );
+BinaryGolayCode() in codelist;
+RepetitionCode( 23, GF(2) ) in codelist;
+CordaroWagnerCode( 23 ) in codelist;
+-->
+
+<ManSection Label="QuasiCyclicCode">
+	<Func Name="QuasiCyclicCode" Arg=" G s F "/>
+
+	<Description>
+		<C>QuasiCyclicCode( G, k, F )</C> generates a rate <M>1/m</M>
+		quasi-cyclic code over field <A>F</A>. The input <A>G</A> is a list
+		of univariate polynomials and <M>m</M> is the cardinality of this
+		list. Note that <M>m</M> must be at least <M>2</M>.
+		The input <A>s</A> is the size of each circulant and it may not
+		necessarily be the same as the code dimension <M>k</M>, i.e.
+		<M>k \le s</M>.
+		<P/>
+		There also exists another version, <C>QuasiCyclicCode( G, s )</C>
+		which produces quasi-cyclic codes over <M>F_2</M> only. Here
+		the parameter <A>s</A> holds the same definition and the input
+		<A>G</A> is a list of integers, where each integer is
+		an octal representation of a binary univariate polynomial.
+	</Description>
+</ManSection>
+
+<Example>
+gap> #
+gap> # This example show the case for k = s
+gap> #
+gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+Z(2)^0
+gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
+gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
+gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
+Z(2)^0
+gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
+gap> MinimumDistance(C);
+29
+gap> Display(C);
+a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
+gap> #
+gap> # This example show the case for k < s
+gap> #
+gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+-x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
+gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
+gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
+gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
+gap> MinimumDistance(C);
+34
+gap> Display(C);
+a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
+gap> #
+gap> # This example show the binary case using octal representation
+gap> #
+gap> L1 := 001;;   # 0 000 001
+gap> L2 := 013;;   # 0 001 011
+gap> L3 := 015;;   # 0 001 101
+gap> L4 := 077;;   # 0 111 111
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
+gap> MinimumDistance(C);
+12
+gap> Display(C);
+a linear [28,7,12]8..14 quasi-cyclic code over GF(2)
+</Example>
+<!--
+#
+# This example show the case for k = s
+#
+L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+MinimumDistance(C);
+Display(C);
+#
+# This example show the case for k < s
+#
+L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+MinimumDistance(C);
+Display(C);
+#
+# This example show the binary case using octal representation
+#
+L1 := 001;;   # 0 000 001
+L2 := 013;;   # 0 001 011
+L3 := 015;;   # 0 001 101
+L4 := 077;;   # 0 111 111
+C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+MinimumDistance(C);
+Display(C);
+-->
+
+
+<ManSection Label="CyclicMDSCode">
+	<Func Name="CyclicMDSCode" Arg=" q m k "/>
+
+	<Description>
+		Given the input parameters <A>q</A>, <A>m</A> and <A>k</A>,
+		this function returns a <M>[q^m + 1, k, q^m - k + 2]</M>
+		cyclic MDS code over GF(<M>q^m</M>). If <M>q^m</M> is even,
+		any value of <M>k</M> can be used, otherwise only odd value
+		of <M>k</M> is accepted.
+	</Description>
+</ManSection>	
+
+<Example>
+gap> C:=CyclicMDSCode(2,6,24);
+a cyclic [65,24,42]31..41 MDS code over GF(64)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(5,3,77);
+a cyclic [126,77,50]35..49 MDS code over GF(125)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(3,3,25);
+a cyclic [28,25,4]2..3 MDS code over GF(27)
+gap> GeneratorPol(C);
+x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
+gap>
+</Example>
+<!--
+C:=CyclicMDSCode(2,6,24);
+IsMDSCode(C);
+C:=CyclicMDSCode(5,3,77);
+IsMDSCode(C);
+C:=CyclicMDSCode(3,3,25);
+GeneratorPol(C);
+-->
+<Index>MDS</Index>
+<Index>cyclic</Index>
+
+
+<ManSection Label="FourNegacirculantSelfDualCode">
+	<Func Name="FourNegacirculantSelfDualCode" Arg=" ax bx k "/>
+
+	<Description>
+		A four-negacirculant self-dual code has a generator matrix
+		<M>G</M> of the the following form
+
+		<Verb>
+    -                    -
+    |        |  A  |  B  |
+G = |  I_2k  |-----+-----|
+    |        | -B^T| A^T |
+    -                    -
+		</Verb>
+		where <M>AA^T + BB^T = -I_k</M> and <M>A</M>, <M>B</M> and
+		their transposed are all <M>k \times k</M> negacirculant matrices.
+		The generator matrix <M>G</M> returns a <M>[2k, k, d]_q</M>
+		self-dual code over GF(<M>q</M>). For discussion on four-negacirculant
+		self-dual codes, refer to <Cite Key="HHKK07"/>.
+		<P/>
+		The input parameters <A>ax</A> and <A>bx</A> are the defining
+		polynomials over GF(<M>q</M>) of negacirculant matrices <M>A</M>
+		and <M>B</M> respectively. The last parameter <A>k</A> is the
+		dimension of the code.
+	</Description>
+</ManSection>
+
+<Example>
+gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
+-x_1^4-x_1+Z(3)^0
+gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
+x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
+gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+gap> MinimumDistance(C);;
+gap> CoveringRadius(C);;
+gap> IsSelfDualCode(C);
+true
+gap> Display(C);
+a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
+gap> Display( GeneratorMat(C) );
+ 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
+ . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
+ . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
+ . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
+ . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
+ . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
+ . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
+ . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
+ . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
+ . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
+ . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
+ . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
+ . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
+ . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
+gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
+x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
+gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
+Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
+gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
+gap> IsSelfDualCode(C);
+true
+</Example>
+
+<!--
+ax:=PolyCodeword(Codeword("1200200", GF(3)));
+bx:=PolyCodeword(Codeword("2020221", GF(3)));
+C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+MinimumDistance(C);;
+CoveringRadius(C);;
+IsSelfDualCode(C);
+Display(C);
+Display( GeneratorMat(C) );
+ax:=PolyCodeword(Codeword("013131000", GF(7)));
+bx:=PolyCodeword(Codeword("425435030", GF(7)));
+C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+IsSelfDualCode(C);
+-->
+<Index>self-dual</Index>
+
+<ManSection Label="FourNegacirculantSelfDualCodeNC">
+	<Func Name="FourNegacirculantSelfDualCodeNC" Arg=" ax bx k "/>
+	<Description>
+		This function is the same as <C>FourNegacirculantSelfDualCode</C>,
+		except this version is faster as it does not estimate the minimum
+		distance and covering radius of the code.
+	</Description>
+</ManSection>
+
+</Section>
+
+<Section>
+<Heading>
+Evaluation Codes
+</Heading>
+<Label Name="Evaluation Codes"/>
+
+
+<Index>
+code, evaluation
+</Index>
+
+
+<ManSection Label="EvaluationCode">
+<Func Name="EvaluationCode" Arg=" P L R "/>
+
+<Description>
+Input: <A>F</A> is a finite field, 
+<A>L</A> is a list of rational functions in
+<M>R=F[x_1,...,x_r]</M>, <A>P</A> is a list of <M>n</M> points in 
+<M>F^r</M> at which all of the functions in <A>L</A>
+are defined. 
+<Br/>
+Output: The 'evaluation code' <M>C</M>, which is the image of the
+evalation map
+<Display>
+Eval_P:span(L)\rightarrow F^n,
+</Display> given by <M>f\longmapsto (f(p_1),...,f(p_n))</M>,
+where <M>P=\{p_1,...,p_n\}</M> and <M>f \in L</M>.
+The generator matrix of <M>C</M> is
+<M>G=(f_i(p_j))_{f_i\in L,p_j\in P}</M>.
+<P/>
+This command returns a "record" object <C>C</C>
+with several extra components (type <C>NamesOfComponents(C)</C>
+to see them all): <C>C!.EvaluationMat</C> (not the same
+as the generator matrix in general),
+<C>C!.points</C> (namely <A>P</A>),
+<C>C!.basis</C> (namely <A>L</A>), and
+<C>C!.ring</C> (namely <A>R</A>). 
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,2);;
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+gap> C:=EvaluationCode(Pts,L,R);
+a linear [11,8,1..3]2..3  evaluation code over GF(11)
+gap> MinimumDistance(C);
+3
+
+</Example>
+<!--
+F:=GF(11);
+R := PolynomialRing(F,["x","y"]);
+indets := IndeterminatesOfPolynomialRing(R);;
+x:=indets[1];; y:=indets[2];;
+L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+C:=EvaluationCode(P,L,R);
+MinimumDistance(C);
+-->
+
+
+<ManSection Label="GeneralizedReedSolomonCode">
+<Func Name="GeneralizedReedSolomonCode" Arg=" P k R "/>
+
+<Description>
+Input: R=F[x], where <A>F</A> is a finite field, 
+<A>k</A> is a positive integer, 
+<A>P</A> is a list of <M>n</M> points in <M>F</M>. 
+<Br/>
+Output: The <M>C</M> which is the image of the
+evaluation map
+<Display>
+Eval_P:F[x]_k\rightarrow F^n,
+</Display> 
+given by <M>f\longmapsto (f(p_1),...,f(p_n))</M>,
+where <M>P=\{p_1,...,p_n\}\subset F</M> and <M>f</M> ranges over the
+space <M>F[x]_k</M> of all
+polynomials of degree less than <M>k</M>.
+<P/>
+This command returns a "record" object <C>C</C>
+with several extra components (type <C>NamesOfComponents(C)</C>
+to see them all): <C>C!.points</C> (namely <A>P</A>),
+<C>C!.degree</C> (namely <A>k</A>), and
+<C>C!.ring</C> (namely <A>R</A>).
+<P/>
+This code can be decoded using <C>Decodeword</C>,
+which applies the special decoder method (the
+interpolation method), or using
+<C>GeneralizedReedSolomonDecoderGao</C>
+which applies an algorithm of S. Gao
+(see <Ref Func="GeneralizedReedSolomonDecoderGao" Style="Number"/>).
+This code has a special decoder record which implements
+the interpolation algorithm described in section 5.2 of Justesen and Hoholdt 
+<Cite Key="JH04"/>. See
+<Ref Func="Decode" Style="Number"/> and
+<Ref Func="Decodeword" Style="Number"/> for more details.
+<P/>
+The weighted version has implemented with the option
+<C>GeneralizedReedSolomonCode(P,k,R,wts)</C>,
+where <M>wts = [v_1, ..., v_n]</M> is a sequence of <M>n</M> 
+non-zero elements from the base field <M>F</M> of <A>R</A>. 
+See also the generalized Reed--Solomon code <M>GRS_k(P, V)</M> described 
+in <Cite Key="MS83"/>, p.303.
+
+<P/>
+The list-decoding algorithm of Sudan-Guraswami
+(described in section 12.1 of <Cite Key="JH04"/>) has
+been implemented for generalized Reed-Solomon codes. 
+See <Ref Func="GeneralizedReedSolomonListDecoder" Style="Number"/>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+[ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
+a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+</Example>
+<!--
+R:=PolynomialRing(GF(11),["t"]);
+P:=List([1,3,4,5,7],i->Z(11)^i);
+C:=GeneralizedReedSolomonCode(P,3,R);
+MinimumDistance(C);
+V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+C:=GeneralizedReedSolomonCode(P,3,R,V);
+MinimumDistance(C);
+-->
+
+See <Ref Func="EvaluationCode" Style="Number"/>
+for a more general construction.
+
+<ManSection Label="GeneralizedReedMullerCode">
+<Func Name="GeneralizedReedMullerCode" Arg=" Pts r F "/>
+
+<Description>
+<C>GeneralizedReedMullerCode</C> returns a 'Reed-Muller code' 
+<M>C</M>  with length <M>|Pts|</M> and order <M>r</M>.
+ One considers (a) a basis of monomials 
+for the vector space over <M>F=GF(q)</M>
+of all polynomials in <M>F[x_1,...,x_d]</M> of degree
+at most <M>r</M>, and (b) a set <M>Pts</M> of points in
+<M>F^d</M>. The generator matrix of the associated 
+<E>Reed-Muller code</E> <M>C</M> is <M>G=(f(p))_{f\in B,p \in Pts}</M>.
+This code <M>C</M> is constructed using the command
+<C>GeneralizedReedMullerCode(Pts,r,F)</C>.
+When <M>Pts</M> is the set of all <M>q^d</M> points in <M>F^d</M>
+then the command <C>GeneralizedReedMuller(d,r,F)</C> yields the code.
+When <M>Pts</M> is the set of all <M>(q-1)^d</M> points with no
+coordinate equal to <M>0</M> then this is can be constructed
+using the <C>ToricCode</C> command (as a special case).
+<P/>
+This command returns a "record" object <C>C</C>
+with several extra components (type <C>NamesOfComponents(C)</C>
+to see them all): <C>C!.points</C> (namely <A>Pts</A>) and
+<C>C!.degree</C> (namely <A>r</A>). 
+</Description>
+</ManSection>
+
+<Example>
+gap> Pts:=ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
+  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
+  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
+  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
+a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)
+</Example>
+
+See <Ref Func="EvaluationCode" Style="Number"/>
+for a more general construction.
+
+
+<ManSection Label="ToricPoints">
+<Func Name="ToricPoints" Arg=" n F "/>
+
+<Description>
+<C>ToricPoints(n,F)</C> returns the points in <M>(F^{\times})^n</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
+  [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
+  [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
+  [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
+  [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+</Example>
+<!--
+ToricPoints(2,GF(5));
+-->
+
+
+<Index>
+code, toric
+</Index>
+
+
+<ManSection Label="ToricCode">
+<Func Name="ToricCode" Arg=" L F "/>
+
+<Description>
+This function returns the toric codes as in 
+D. Joyner <Cite Key="Jo04"/> (see also J. P. Hansen
+<Cite Key="Han99"/>). This is a truncated (generalized) Reed-Muller code. 
+Here <A>L</A> is a list of integral vectors and <A>F</A> 
+is the finite field. The size of <A>F</A> must
+be different from <M>2</M>.
+<P/>
+This command returns a record object <C>C</C>
+with an extra component (type <C>NamesOfComponents(C)</C>
+to see them all): <C>C!.exponents</C> (namely <A>L</A>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=ToricCode([[1,0],[3,4]],GF(3));
+a linear [4,1,4]2 toric code over GF(3)
+gap> Display(GeneratorMat(C));
+ 1 1 2 2
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]
+</Example>
+<!--
+C:=ToricCode([[1,0],[3,4]],GF(3));
+Display(GeneratorMat(C));
+Elements(C);
+-->
+
+See <Ref Func="EvaluationCode" Style="Number"/>
+for a more general construction.
+
+</Section>
+
+<Section>
+<Heading>
+Algebraic geometric codes
+</Heading>
+<Label Name="Algebraic geometric codes"/>
+
+
+<Index>
+code, AG
+</Index>
+
+Certain <Package>GUAVA</Package> functions related
+to algebraic geometric codes are described in this 
+section.
+
+<ManSection>
+<Func Name="AffineCurve" Arg ="poly, ring"/>
+
+<Description>
+This function simply defines the data structure of an affine plane
+curve. In <Package>GUAVA</Package>, an affine curve is
+a record <A>crv</A> having two components: a polynomial
+<A>poly</A>, accessed in <Package>GUAVA</Package> 
+by <A>crv.polynomial</A>,
+and a polynomial ring over a field <M>F</M> in two variables <A>ring</A>,
+accessed in <Package>GUAVA</Package> by <A>crv.ring</A>, 
+containing <A>poly</A>.
+You use this function to define a curve in 
+<Package>GUAVA</Package>.
+<P/>
+For example, for the ring, one could take
+<M>{\mathbb{Q}}[x,y]</M>, and for the polynomial
+one could take <M>f(x,y)=x^2+y^2-1</M>. For the affine
+line, simply taking <M>{\mathbb{Q}}[x,y]</M> for the
+ring and <M>f(x,y)=y</M> for the polynomial.
+<P/>
+(Not sure if <M>F</M> neeeds to be a field in fact ...)
+<P/>
+To compute its degree, simply use the
+<Ref Func="DegreeMultivariatePolynomial" Style="Number"/>
+command.
+</Description>
+
+</ManSection>
+
+<Example>
+gap>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+1
+gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+3
+gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+2
+gap> q:=3;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
+gap>
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);
+vars:=IndeterminatesOfPolynomialRing(R2);;
+x:=vars[1];; y:=vars[2];;
+poly:=y;; crvP1:=AffineCurve(poly,R2);
+degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+q:=3;
+F:=GF(q^2);
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);
+x:=vars[1];
+y:=vars[2];
+crv:=AffineCurve(y^q+y-x^(q+1),R);
+-->
+
+In GAP, a <E>point</E> 
+<Index>point</Index>
+on a curve defined by <M>f(x,y)=0</M>
+is simply a list <A>[a,b]</A> of elements of <M>F</M> 
+satisfying this polynomial equation.
+
+
+<ManSection Label="AffinePointsOnCurve">
+<Func Name="AffinePointsOnCurve" Arg=" f R E "/>
+
+<Description>
+<C>AffinePointsOnCurve(f,R,E)</C> returns the points 
+<M>(x,y) \in E^2</M> satisying <M>f(x,y)=0</M>,
+where <A>f</A> is an element of <M>R=F[x,y]</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+[ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
+  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
+  [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+  [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]
+</Example>
+<!--
+F:=GF(11);;
+R := PolynomialRing(F,["x","y"]);
+indets := IndeterminatesOfPolynomialRing(R);;
+x:=indets[1];; y:=indets[2];;
+P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+-->
+
+<ManSection>
+<Func Name="GenusCurve" Arg ="crv"/>
+
+<Description>
+If <A>crv</A> represents <M>f(x,y)=0</M>, where
+<M>f</M> is a polynomial of degree <M>d</M>,
+then this function simply returns <M>(d-1)(d-2)/2</M>.
+At the present, the function does not check if 
+the curve is singular (in which case the result
+may be false).
+</Description>
+</ManSection>
+
+<Example>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> a:=X(F);;
+gap> R1:=PolynomialRing(F,[a]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);;
+gap> b:=X(F);;
+gap> R2:=PolynomialRing(F,[a,b]);;
+gap> var2:=IndeterminatesOfPolynomialRing(R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
+rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
+gap> GenusCurve(crv);
+36
+
+</Example>
+
+<ManSection>
+<Func Name="GOrbitPoint " Arg ="G,P "/>
+
+<Description>
+<A>P</A> must be a point in projective space <M>\mathbb{P}^n(F)</M>,
+<A>G</A> must be a finite subgroup of <M>GL(n+1,F)</M>,
+This function  returns all (representatives of projective)
+points in the orbit <M>G\cdot P</M>.
+<P/>
+The example below computes the orbit of the automorphism group 
+on the Klein quartic over the field
+<M>GF(43)</M> on the ``point at infinity''. 
+</Description>
+</ManSection>
+
+<Example>
+gap> R:= PolynomialRing( GF(43), 3 );;
+gap> vars:= IndeterminatesOfPolynomialRing(R);;
+gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
+gap> zz:=Z(43)^6;
+Z(43)^6
+gap> zzz:=Z(43);
+Z(43)
+gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
+[ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
+[ 0*Z(43), Z(43)^12, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
+gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
+[ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], 
+[ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
+gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
+>             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
+>             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
+[ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
+[ Z(43)^28, Z(43)^12, Z(43)^9 ], 
+[ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
+gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
+gap> Size(G);
+168
+gap> P:=[1,0,0]*zzz^0;
+[ Z(43)^0, 0*Z(43), 0*Z(43) ]
+gap> O:=GOrbitPoint(G,P);
+[ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
+[ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
+[ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
+[ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
+[ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
+[ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
+[ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
+[ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
+[ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
+[ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
+[ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
+gap> Length(O);
+24
+
+</Example>
+
+Informally, a <E>divisor</E> 
+<Index>divisor</Index>
+on a curve is a formal integer linear combination of points
+on the curve, <M>D=m_1P_1+...+m_kP_k</M>,
+where the <M>m_i</M> are integers (the ``multiplicity'' of 
+<M>P_i</M> in <M>D</M>) and <M>P_i</M> are (<M>F</M>-rational) 
+points on the affine plane curve. 
+In other words, a divisor is an element of the free 
+abelian group generated by the <M>F</M>-rational affine 
+points on the curve. The <E>support</E>
+<Index>support</Index>
+of a divisor <M>D</M> is simply the set of points
+which occurs in the sum defining <M>D</M> with 
+non-zero ``multiplicity''.
+The data structure for a divisor on an affine plane curve
+is a record having the following components:
+<List>
+<Item>
+the coefficients (the integer weights of the points in the support), 
+</Item>
+<Item>
+the support,
+</Item>
+<Item>
+the curve, itself a record which has components:
+polynomial and polynomial ring.
+</Item>
+</List>
+<P/>
+
+<P/>
+
+
+<ManSection>
+<Func Name="DivisorOnAffineCurve" Arg ="cdiv,sdiv,crv"/>
+
+<Description>
+This is the command you use to define a divisor in 
+<Package>GUAVA</Package>. Of course,
+<A>crv</A> is the curve on which the divisor lives,
+<A>cdiv</A> is the list of coefficients (or ``multiplicities''),
+<A>sdiv</A> is the list of points on <A>crv</A> in the support.
+
+<Example>
+gap> q:=5;
+5
+gap> F:=GF(q);
+GF(5)
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^3-x^3-x-1,R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
+gap> Pts:=AffinePointsOnCurve(crv,R,F);;
+gap> supp:=[Pts[1],Pts[2]];
+[ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
+gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
+rec( coeffs := [ 1, -1 ], 
+     support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
+     curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+                   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )
+
+</Example>
+<!--
+q:=5;
+F:=GF(q);
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);
+x:=vars[1];
+y:=vars[2];
+crv:=AffineCurve(y^3-x^3-x-1,R);
+Pts:=PointsOnAffineCurve(crv,F);;
+supp:=[Pts[1],Pts[2]];
+D:=DivisorOnAffineCurve([1,-1],supp,crv);
+-->
+
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DivisorAddition " Arg ="D1,D2 "/>
+
+<Description>
+If <M>D_1=m_1P_1+...+m_kP_k</M>
+and <M>D_2=n_1P_1+...+n_kP_k</M> are divisors then
+<M>D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k</M>.
+
+</Description>
+</ManSection>
+
+
+<ManSection>
+<Func Name="DivisorDegree " Arg ="D "/>
+
+<Description>
+If <M>D=m_1P_1+...+m_kP_k</M> is a divisor then the <E>degree</E>
+<Index>degree</Index> 
+is <M>m_1+...+m_k</M>.
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DivisorNegate " Arg ="D "/>
+
+<Description>
+Self-explanatory.
+</Description>
+</ManSection>
+
+
+
+<ManSection>
+<Func Name="DivisorIsZero " Arg ="D "/>
+
+<Description>
+Self-explanatory.
+
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DivisorsEqual " Arg ="D1,D2 "/>
+
+<Description>
+Self-explanatory.
+
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DivisorGCD " Arg ="D1,D2 "/>
+
+<Description>
+If <M>m=p_1^{e_1}...p_k^{e_k}</M>
+and <M>n=p_1^{f_1}...p_k^{f_k}</M> are two integers then their
+greatest common divisor is 
+<M>GCD(m,n)=p_1^{min(e_1,f_1)}...p_k^{min(e_k,f_k)}</M>.
+A similar definition works for two divisors on a curve.
+If <M>D_1=e_1P_1+...+e_kP_k</M>
+and <M>D_2n=f_1P_1+...+f_kP_k</M> are two divisors on a curve then their
+<E>greatest common divisor</E>
+<Index>greatest common divisor</Index> 
+is  <M>GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k</M>.
+This function computes this quantity.
+
+
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DivisorLCM " Arg ="D1,D2 "/>
+
+<Description>
+If <M>m=p_1^{e_1}...p_k^{e_k}</M>
+and <M>n=p_1^{f_1}...p_k^{f_k}</M> are two integers then their
+least common multiple is 
+<M>LCM(m,n)=p_1^{max(e_1,f_1)}...p_k^{max(e_k,f_k)}</M>.
+A similar definition works for two divisors on a curve.
+If <M>D_1=e_1P_1+...+e_kP_k</M>
+and <M>D_2=f_1P_1+...+f_kP_k</M> are two divisors on a curve then their
+<E>least common multiple</E>
+<Index>least common multiple</Index> 
+is  <M>LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k</M>.
+This function computes this quantity.
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div1);
+10
+gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div2);
+10
+gap> div3:=DivisorAddition(div1,div2);
+rec( coeffs := [ 5, 3, 5, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div3);
+20
+gap> DivisorIsEffective(div1);
+true
+gap> DivisorIsEffective(div2);
+true
+gap>
+gap> ndiv1:=DivisorNegate(div1);
+rec( coeffs := [ -1, -2, -3, -4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> zdiv:=DivisorAddition(div1,ndiv1);
+rec( coeffs := [ 0, 0, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorIsZero(zdiv);
+true
+gap> div_gcd:=DivisorGCD(div1,div2);
+rec( coeffs := [ 1, 1, 2, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> div_lcm:=DivisorLCM(div1,div2);
+rec( coeffs := [ 4, 2, 3, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div_gcd);
+4
+gap> DivisorDegree(div_lcm);
+16
+gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+true
+
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+DivisorDegree(div1);
+div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+DivisorDegree(div2);
+div3:=DivisorAddition(div1,div2);
+DivisorDegree(div3);
+DivisorIsEffective(div1);
+DivisorIsEffective(div2);
+ndiv1:=DivisorNegate(div1);
+zdiv:=DivisorAddition(div1,ndiv1);
+DivisorIsZero(zdiv);
+div_gcd:=DivisorGCD(div1,div2);
+div_lcm:=DivisorLCM(div1,div2);
+DivisorDegree(div_gcd);
+DivisorDegree(div_lcm);
+DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+-->
+
+</Description>
+</ManSection>
+
+Let <M>G</M> denote a finite subgroup of <M>PGL(2,F)</M> and let 
+<M>D</M> denote a divisor on the projective line <M>\mathbb{P}^1(F)</M>.
+If <M>G</M> leaves <M>D</M> unchanged (it may permute the
+points in the support of <M>D</M> but must preserve 
+their sum in <M>D</M>) then the Riemann-Roch space
+<M>L(D)</M> is a <M>G</M>-module. The commands in this section help explore
+the <M>G</M>-module structure of <M>L(D)</M> in the case then the ground field
+<M>F</M>  is finite.
+
+
+<P/>
+
+<ManSection>
+
+<Func Name="RiemannRochSpaceBasisFunctionP1 " Arg ="P,k,R2 "/>
+
+<Description>
+ Input:
+ <A>R2</A> is a polynomial ring in two variables, say <M>F[x,y]</M>;
+<A>P</A> is an element of the base field, say <M>F</M>;
+<A>k</A> is an integer.
+Output: <M>1/(x-P)^k</M>
+
+</Description>
+</ManSection>
+
+
+<ManSection>
+
+<Func Name="DivisorOfRationalFunctionP1 " Arg ="f, R "/>
+
+<Description>
+ Here <M>R = F[x,y]</M> is a polynomial ring in
+the variables <M>x,y</M> and <M>f</M> is a rational function of <M>x</M>.
+Simply returns the principal divisor on <M>{\mathbb{P}}^1</M> 
+associated to <M>f</M>.
+
+<Example>
+
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> pt:=Z(11);
+Z(11)
+gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+(Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
+gap> Df:=DivisorOfRationalFunctionP1(f,R2);
+rec( coeffs := [ -2 ], support := [ Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
+   )
+gap> Df.support;
+[ Z(11) ]
+gap> F:=GF(11);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> a:=vars[1];;
+gap> b:=vars[2];;
+gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+gap> divf:=DivisorOfRationalFunctionP1(f,R);
+rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
+  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
+gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
+[  ]
+gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
+[ Z(11)^7, Z(11), Z(11), Z(11) ]
+
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+pt:=Z(11);
+f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+Df:=DivisorOfRationalFunctionP1(f,R2);
+Df.support;
+F:=GF(11);;
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+b:=vars[2];;
+f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+divf:=DivisorOfRationalFunctionP1(f,R);
+denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+-->
+
+</Description>
+</ManSection>
+
+
+<ManSection>
+
+<Func Name="RiemannRochSpaceBasisP1 " Arg ="D "/>
+
+<Description>
+
+This returns the basis of the Riemann-Roch space <M>L(D)</M>
+associated to the divisor <A>D</A> on the projective line
+<M>{\mathbb{P}}^1</M>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> B:=RiemannRochSpaceBasisP1(D);
+[ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
+(Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
+(Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
+  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
+(Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
+(Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
+gap> DivisorOfRationalFunctionP1(B[1],R2).support;
+[  ]
+gap> DivisorOfRationalFunctionP1(B[2],R2).support;
+[ Z(11)^2 ]
+gap> DivisorOfRationalFunctionP1(B[3],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[4],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[5],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[6],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[7],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[8],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[9],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[10],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[11],R2).support;
+[ Z(11) ]
+
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+B:=RiemannRochSpaceBasisP1(D);
+DivisorOfRationalFunctionP1(B[1],R2).support;
+DivisorOfRationalFunctionP1(B[2],R2).support;
+DivisorOfRationalFunctionP1(B[3],R2).support;
+DivisorOfRationalFunctionP1(B[4],R2).support;
+DivisorOfRationalFunctionP1(B[5],R2).support;
+DivisorOfRationalFunctionP1(B[6],R2).support;
+DivisorOfRationalFunctionP1(B[7],R2).support;
+DivisorOfRationalFunctionP1(B[8],R2).support;
+DivisorOfRationalFunctionP1(B[9],R2).support;
+DivisorOfRationalFunctionP1(B[10],R2).support;
+DivisorOfRationalFunctionP1(B[11],R2).support;
+-->
+
+<ManSection>
+
+<Func Name="MoebiusTransformation " Arg ="A,R "/>
+
+<Description>
+The arguments are a <M>2\times 2</M> matrix <M>A</M> 
+with entries in a field <M>F</M>
+and a polynomial ring <A>R</A>of
+one variable, say <M>F[x]</M>.
+This function returns the linear fractional
+transformatio associated to <A>A</A>.
+These transformations can be composed with each other
+using GAP's <C>Value</C> command.
+
+</Description>
+</ManSection>
+
+<ManSection>
+
+<Func Name="ActionMoebiusTransformationOnFunction " Arg ="A,f,R2 "/>
+
+<Description>
+The arguments are a <M>2\times 2</M> matrix <M>A</M> 
+with entries in a field <M>F</M>, a rational function 
+<A>f</A> of one variable, say in <M>F(x)</M>, 
+and a polynomial ring <A>R2</A>, say <M>F[x,y]</M>.
+This function simply returns the composition of the
+function <A>f</A> with the M&#xf6;bius transformation
+of <A>A</A>.
+</Description>
+</ManSection>
+
+<ManSection>
+
+<Func Name="ActionMoebiusTransformationOnDivisorP1 " Arg ="A,D "/>
+
+<Description>
+A M&#xf6;bius transformation may be regarded as an automorphism
+of the projective line <M>\mathbb{P}^1</M>. This function simply 
+returns the image of the divisor <A>D</A> under 
+the M&#xf6;bius transformation defined by <A>A</A>,
+provided that 
+<C>IsActionMoebiusTransformationOnDivisorDefinedP1(A,D)</C>
+returns true.
+
+
+</Description>
+</ManSection>
+
+<ManSection>
+
+<Func Name="IsActionMoebiusTransformationOnDivisorDefinedP1 " Arg ="A,D "/>
+
+<Description>
+Returns true of none of the points in the support of the
+divisor <A>D</A> is the pole of the M&#xf6;bius transformation.
+ 
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> A:=Z(11)^0*[[1,2],[1,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+false
+gap> A:=Z(11)^0*[[1,2],[3,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+true
+gap> ActionMoebiusTransformationOnDivisorP1(A,D);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> f:=MoebiusTransformation(A,R1);
+(a+Z(11))/(Z(11)^8*a+Z(11)^2)
+gap> ActionMoebiusTransformationOnFunction(A,f,R1);
+-Z(11)^0+Z(11)^3*a^-1
+
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+A:=Z(11)^0*[[1,2],[1,4]];
+ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+A:=Z(11)^0*[[1,2],[3,4]];
+ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+ActionMoebiusTransformationOnDivisorP1(A,D);
+f:=MoebiusTransformation(A,R1);
+ActionMoebiusTransformationOnFunction(A,f,R1);
+
+-->
+</Description>
+</ManSection>
+
+<ManSection>
+
+<Func Name="DivisorAutomorphismGroupP1 " Arg ="D "/>
+
+<Description>
+Input: A divisor <A>D</A> on <M>\mathbb{P}^1(F)</M>,
+where <M>F</M> is a finite field.
+Output: A subgroup <M>Aut(D)\subset Aut(\mathbb{P}^1)</M>
+preserving <A>D</A>.
+<P/>
+Very slow.
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7305
+gap> IdGroup(agp);
+[ 10, 2 ]
+
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+agp:=DivisorAutomorphismGroupP1(D);; time;
+IdGroup(agp);
+-->
+
+</Description>
+</ManSection>
+
+<ManSection>
+
+<Func Name="MatrixRepresentationOnRiemannRochSpaceP1 " Arg ="g,D "/>
+
+<Description>
+Input: An element <A>g</A> in <M>G</M>, a subgroup
+of <M>Aut(D)\subset Aut(\mathbb{P}^1)</M>, and a divisor
+<A>D</A> on <M>\mathbb{P}^1(F)</M>, where
+<M>F</M> is a finite field.
+Output: a <M>d\times d</M> matrix, where <M>d = dim\, L(D)</M>,
+representing the action of <A>g</A> on <M>L(D)</M>.
+<P/>
+Note: <A>g</A> sends <M>L(D)</M> to <M>r\cdot L(D)</M>, where
+<M>r</M> is a polynomial of degree <M>1</M> depending on 
+<A>g</A> and <A>D</A>.
+<P/>
+Also very slow.
+<P/>
+The GAP command <C>BrauerCharacterValue</C> 
+can be used to ``lift'' the eigenvalues of this
+matrix to the complex numbers.
+
+<P/>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 1, 1, 4 ],  
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7198
+gap> IdGroup(agp);
+[ 20, 5 ]
+gap> g:=Random(agp);
+[ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
+gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
+  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
+[ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
+gap> Display(rho);
+  1  .  .  .  .  .  .  .
+  1  .  .  2  .  .  .  .
+  7  . 10  .  .  .  .  .
+  5  6  .  .  .  .  .  .
+  4  .  .  . 10  .  .  .
+  5  .  .  .  3  1  .  .
+  9  .  .  .  7  1 10  .
+  3  .  .  .  8  8  6  1
+
+</Example>
+
+</Description>
+</ManSection>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+agp:=DivisorAutomorphismGroupP1(D);; time;
+IdGroup(agp);
+g:=Random(agp);
+rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+Display(rho);
+Eigenvalues(F,rho);
+charpoly:=CharacteristicPolynomail(rho);
+Factors(charpoly);
+JordanDecomposition(rho);
+
+-->
+
+<!--
+<ManSection Label="XingLingCode">
+<Func Name="XingLingCode" Arg=" k R "/>
+
+<Description>
+Input: An integer <M>k<M> and a polynomial ring in one
+variable <M>R=F[x]<M>.
+<Br/>
+Output: The associated Xing-Ling code.
+<P/>
+For a reference, see .....
+</Description>
+</ManSection>
+
+<Example>
+
+F:=GF(11);;
+R:=PolynomialRing(F,1);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+C:=XingLingCode(25,R);
+
+F:=GF(3);;
+R:=PolynomialRing(F,1);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+C:=XingLingCode(7,R);
+MinimumDistance(C);
+
+
+F:=GF(4);;
+R:=PolynomialRing(F,1);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+C:=XingLingCode(9,R);
+MinimumDistance(C);
+
+F:=GF(7);;
+R:=PolynomialRing(F,1);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+C:=XingLingCode(15,R);
+MinimumDistance(C);
+</Example>
+-->
+
+
+<ManSection Label="GoppaCodeClassical">
+<Func Name="GoppaCodeClassical" Arg=" div pts "/>
+
+<Description>
+Input: A divisor <A>div</A> on the projective line
+<M>{\mathbb{P}}^1(F)</M> over a finite field <M>F</M>
+and a list <A>pts</A> of points <M>\{P_1,...,P_n\}\subset F</M> 
+disjoint from the support of <A>div</A>.
+<Br/>
+Output: The classical (evaluation) Goppa code associated
+to this data. This is the code 
+
+<Display>
+C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.
+</Display>
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> a:=vars[1];;b:=vars[2];;
+gap> cdiv:=[ 1, 2, -1, -2 ];
+[ 1, 2, -1, -2 ]
+gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
+gap> crv:=rec(polynomial:=b,ring:=R2);
+rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
+gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
+  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
+gap> pts:=Difference(Elements(GF(11)),div.support);
+[ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
+gap> C:=GoppaCodeClassical(div,pts);
+a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
+gap> MinimumDistance(C);
+6
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R2);; 
+a:=vars[1];;b:=vars[2];;
+cdiv:=[ 1, 2, -1, -2 ];
+sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+crv:=rec(polynomial:=b,ring:=R2);
+div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+pts:=Difference(Elements(GF(11)),div.support);
+C:=GoppaCodeClassical(div,pts);
+MinimumDistance(C);
+
+-->
+
+
+
+<ManSection Label="EvaluationBivariateCode">
+<Func Name="EvaluationBivariateCode" Arg=" pts L crv"/>
+
+<Description>
+Input: <C>pts</C> is a set of affine points on <C>crv</C>,
+<C>L</C> is a list of rational functions on <C>crv</C>.
+<Br/>
+Output: The evaluation code associated to the points
+in <C>pts</C> and functions in <C>L</C>,
+but specifically for affine plane curves
+and this function 
+checks if points are ``bad" (if so removes them
+from the list <C>pts</C> automatically).
+A point is ``bad'' if either it does not lie on the
+set of non-singular <M>F</M>-rational points 
+(places of degree 1) on the curve.
+<P/>
+Very similar to <C>EvaluationCode</C>
+(see <Ref Func="EvaluationCode" Style="Number"/>
+for a more general construction).
+
+</Description>
+</ManSection>
+
+<ManSection Label="EvaluationBivariateCodeNC">
+<Func Name="EvaluationBivariateCodeNC" Arg=" pts L crv "/>
+
+<Description>
+As in <C>EvaluationBivariateCode</C> but does not
+check if the points are ``bad''.
+<P/>
+Input: <C>pts</C> is a set of affine points on <C>crv</C>,
+<C>L</C> is a list of rational functions on <C>crv</C>. 
+<Br/>
+Output: The evaluation code associated to the points
+in <C>pts</C> and functions in <C>L</C>.
+
+
+</Description>
+</ManSection>
+
+<Example>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> x:=vars[1];;
+gap> y:=vars[2];;
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
+gap> L:=[ x^0, x, x^2*y^-1 ];
+[ Z(2)^0, x_1, x_1^2/x_2 ]
+gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;
+
+
+ Automatically removed the following 'bad' points (either a pole or not 
+ on the curve):
+[ [ 0*Z(2), 0*Z(2) ] ]
+
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+52
+gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+48
+gap> C3:=EvaluationCode(P,L,R); time;
+a linear [63,3,1..56]51..59  evaluation code over GF(16)
+58
+gap> MinimumDistance(C1);
+56
+gap> MinimumDistance(C2);
+56
+gap> MinimumDistance(C3);
+56
+gap>
+</Example>
+<!--
+q:=4;;
+F:=GF(q^2);;
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+x:=vars[1];;
+y:=vars[2];;
+crv:=AffineCurve(y^q+y-x^(q+1),R);
+L:=[ x^0, x, x^2*y^-1 ];
+Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+C1:=EvaluationBivariateCode(Pts,L,crv); time;
+P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+C3:=EvaluationCode(P,L,R); time;
+MinimumDistance(C1);
+MinimumDistance(C2);
+MinimumDistance(C3);
+-->
+
+
+<ManSection Label="OnePointAGCode">
+<Func Name="OnePointAGCode" Arg=" f P m R "/>
+
+<Description>
+Input: <A>f</A> is a polynomial in R=F[x,y], where
+<A>F</A> is a finite field, 
+<A>m</A> is a positive integer (the multiplicity of the 
+`point at infinity' <M>\infty</M> on the curve <M>f(x,y)=0</M>), 
+<A>P</A> is a list of <M>n</M> points on the curve over <M>F</M>. 
+<Br/>
+Output: The <M>C</M> which is the image of the
+evaluation map
+<Display>
+Eval_P:L(m \cdot \infty)\rightarrow F^n,
+</Display> 
+given by <M>f\longmapsto (f(p_1),...,f(p_n))</M>,
+where <M>p_i \in P</M>.
+Here <M>L(m \cdot \infty)</M> denotes the Riemann-Roch 
+space of the divisor <M>m \cdot \infty</M> on the curve.
+This has a basis consisting of monomials
+<M>x^iy^j</M>, where <M>(i,j)</M> range over a 
+polygon depending on <M>m</M> and <M>f(x,y)</M>.
+For more details on the Riemann-Roch 
+space of the divisor <M>m \cdot \infty</M> see 
+Proposition III.10.5 in Stichtenoth <Cite Key="St93"/>.
+<P/>
+This command returns a "record" object <C>C</C>
+with several extra components (type <C>NamesOfComponents(C)</C>
+to see them all): <C>C!.points</C> (namely <A>P</A>),
+<C>C!.multiplicity</C> (namely <A>m</A>), 
+<C>C!.curve</C> (namely <A>f</A>) and
+<C>C!.ring</C> (namely <A>R</A>).
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);
+[ x, y ]
+gap> x:=indets[1]; y:=indets[2];
+x
+y
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+a linear [11,8,1..0]2..3  one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
+a linear [9,6,1..4]2..3 one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+</Example>
+<!--
+F:=GF(11);
+R := PolynomialRing(F,["x","y"]);
+indets := IndeterminatesOfPolynomialRing(R);
+x:=indets[1]; y:=indets[2];
+P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+MinimumDistance(C);
+Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+C:=OnePointAGCode(y^2-x^11+x,Pts,10,R);
+MinimumDistance(C);
+-->
+
+See <Ref Func="EvaluationCode" Style="Number"/>
+for a more general construction.
+
+
+
+</Section>
+
+</Chapter>
+
+
+<Chapter>
+<Heading>Manipulating Codes</Heading>
+<Label Name="Manipulating Codes"/>
+
+In this chapter we describe several functions 
+<Package>GUAVA</Package> uses to manipulate
+codes. Some of the best codes are obtained by starting with for example a
+BCH code, and manipulating it.
+<P/>
+In some cases, it is faster to perform calculations with a manipulated
+code than to use the original code. For example, if the dimension of the
+code is larger than half the word length,  it is generally faster to
+compute the weight distribution by first calculating the weight
+distribution of the dual code than by directly calculating the weight
+distribution of the original code.  The size of the dual code is smaller
+in these cases.
+<P/>
+Because <Package>GUAVA</Package> keeps all information in a 
+code record, in some cases the information can be preserved 
+after manipulations.   Therefore, computations do not always have 
+to start from scratch.
+<P/>
+In Section
+<Ref Label="Functions that Generate a New Code from a Given Code" Style="Number"/>,
+we describe functions that take a code with certain parameters, modify it in
+some way and return a different code (see 
+<Ref Func="ExtendedCode" Style="Number"/>,
+<Ref Func="PuncturedCode" Style="Number"/>, 
+<Ref Func="EvenWeightSubcode" Style="Number"/>,  
+<Ref Func="PermutedCode" Style="Number"/>,  
+<Ref Func="ExpurgatedCode" Style="Number"/>,
+<Ref Func="AugmentedCode" Style="Number"/>,       
+<Ref Func="RemovedElementsCode" Style="Number"/>,  
+<Ref Func="AddedElementsCode" Style="Number"/>,
+<Ref Func="ShortenedCode" Style="Number"/>,  
+<Ref Func="LengthenedCode" Style="Number"/>,  
+<Ref Func="ResidueCode" Style="Number"/>,  
+<Ref Func="ConstructionBCode" Style="Number"/>,
+<Ref Func="DualCode" Style="Number"/>,  
+<Ref Func="ConversionFieldCode" Style="Number"/>,        
+<Ref Func="ConstantWeightSubcode" Style="Number"/>,
+<Ref Func="StandardFormCode" Style="Number"/> and 
+<Ref Func="CosetCode" Style="Number"/>).
+
+In Section
+<Ref Label="Functions that Generate a New Code from Two or More Given Codes" Style="Number"/>,  
+we describe functions that generate a new code out of two codes (see
+<Ref Func="DirectSumCode" Style="Number"/>, 
+<Ref Func="UUVCode" Style="Number"/>, 
+<Ref Func="DirectProductCode" Style="Number"/>,  
+<Ref Func="IntersectionCode" Style="Number"/>  and
+<Ref Func="UnionCode" Style="Number"/>).
+
+<Section>
+<Heading>
+Functions that Generate a New Code from a Given Code
+</Heading>
+<Label Name="Functions that Generate a New Code from a Given Code"/>
+
+<Index>
+Parity check
+</Index>
+
+<ManSection Label="ExtendedCode">
+<Func Name="ExtendedCode" Arg=" C [i] "/>
+
+<Description>
+<C>ExtendedCode</C>  extends the code <A>C</A> <A>i</A> times and
+returns the result. <A>i</A> is equal to <M>1</M> by default. 
+Extending is done by adding a parity check bit after the 
+last coordinate.  The coordinates of all codewords now add up to zero. 
+In the binary case,  each codeword has even weight.
+<P/>
+The word length increases by <A>i</A>. The size of the code remains the
+same. In the binary case, the minimum distance increases by one if it was
+odd. In other cases, that is not always true.
+<P/>
+A cyclic code in general is no longer cyclic after extending.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> C2 := ExtendedCode( C1 );
+a linear [8,4,4]2 extended code
+gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+true
+gap> List( AsSSortedList( C2 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
+gap> C3 := EvenWeightSubcode( C1 );
+a linear [7,3,4]2..3 even weight subcode 
+</Example>
+<!--
+C1 := HammingCode( 3, GF(2) );
+C2 := ExtendedCode( C1 );
+IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+List( AsSSortedList( C2 ), WeightCodeword );
+C3 := EvenWeightSubcode( C1 );
+-->
+
+To undo extending, call <C>PuncturedCode</C> (see 
+<Ref Func="PuncturedCode" Style="Number"/>).  The
+function <C>EvenWeightSubcode</C> (see  
+<Ref Func="EvenWeightSubcode" Style="Number"/>) also returns a
+related code with only even weights, but without changing its word
+length.
+
+<ManSection Label="PuncturedCode">
+<Func Name="PuncturedCode" Arg=" C "/>
+
+<Description>
+<C>PuncturedCode</C> punctures <A>C</A> in the last column, 
+and returns the result. Puncturing is done simply by cutting 
+off the last column from each codeword. This means the word length 
+decreases by one. The minimum distance in general also decrease by one.
+<P/>
+This command can also be called with the syntax
+<C>PuncturedCode( C, L )</C>. In this case,
+<C>PuncturedCode</C> punctures <A>C</A> in the columns 
+specified by <A>L</A>, a list of integers.  
+All columns specified by <A>L</A> are omitted from each codeword.
+If <M>l</M> is the length of <A>L</A> (so the number of removed 
+columns), the word length decreases by <M>l</M>. The minimum 
+distance can also decrease by <M>l</M> or less.
+<P/>
+Puncturing a cyclic code in general results in a non-cyclic code. If the
+code is  punctured in all the columns where a word of minimal weight is
+unequal to zero, the dimension of the resulting code decreases.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := BCHCode( 15, 5, GF(2) );
+a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
+gap> C2 := PuncturedCode( C1 );
+a linear [14,7,4]3..5 punctured code
+gap> ExtendedCode( C2 ) = C1;
+false
+gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
+a linear [8,7,1]1 punctured code
+gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 
+</Example>
+<!--
+C1 := BCHCode( 15, 5, GF(2) );
+C2 := PuncturedCode( C1 );
+ExtendedCode( C2 ) = C1;
+PuncturedCode( C1, [1,2,3,4,5,6,7] );
+PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+-->
+
+<C>ExtendedCode</C> extends the code again (see 
+<Ref Func="ExtendedCode" Style="Number"/>),
+although in general this does not result in the old code.
+
+<ManSection Label="EvenWeightSubcode">
+<Func Name="EvenWeightSubcode" Arg=" C "/>
+
+<Description>
+<C>EvenWeightSubcode</C> returns the even weight subcode 
+of <A>C</A>, consisting of all codewords of <A>C</A> with even 
+weight. If <A>C</A> is a linear code and
+contains words of odd weight, the resulting code  has a dimension of one
+less.  The minimum distance always increases with one if it was odd. If
+<A>C</A> is a binary cyclic code, and <M>g(x)</M> is its 
+generator polynomial, the even weight subcode either has 
+generator polynomial <M>g(x)</M> (if <M>g(x)</M> is
+divisible by  <M>x-1</M>) or <M>g(x)\cdot (x-1)</M> 
+(if no factor <M>x-1</M> was present in <M>g(x)</M>).
+So the even weight subcode is again cyclic.
+<P/>
+Of course, if all codewords of <A>C</A> are already of even weight,  
+the returned code is equal to <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+an (8,33,4..8)3..8 even weight subcode
+gap> List( AsSSortedList( C1 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
+  4, 6, 4, 6, 8, 4, 6, 8 ]
+gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</Example>
+<!--
+C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+List( AsSSortedList( C1 ), WeightCodeword );
+EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+-->
+
+<C>ExtendedCode</C> also returns a related code of only even weights, but
+without reducing its dimension (see 
+<Ref Func="ExtendedCode" Style="Number"/>).
+
+<ManSection Label="PermutedCode">
+<Func Name="PermutedCode" Arg=" C L "/>
+
+<Description>
+<C>PermutedCode</C> returns <A>C</A> after column permutations. 
+<A>L</A> (in GAP disjoint cycle notation)
+is the permutation to be executed on the columns of <A>C</A>. 
+If <A>C</A> is cyclic, the result in general is no 
+longer cyclic. If a permutation results in the same code as 
+<A>C</A>, this permutation belongs to the automorphism group of
+<A>C</A> (see 
+<Ref Func="AutomorphismGroup" Style="Number"/>). 
+In  any case, the returned code is
+equivalent to <A>C</A> 
+(see <Ref Func="IsEquivalent" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+a linear [15,5,7]5 punctured code
+gap> C2 := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 = C1;
+false
+gap> p := CodeIsomorphism( C1, C2 );
+( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
+gap> C3 := PermutedCode( C1, p );
+a linear [15,5,7]5 permuted code
+gap> C2 = C3;
+true 
+</Example>
+<!--
+C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+C2 := BCHCode( 15, 7, GF(2) );
+C2 = C1;
+p := CodeIsomorphism( C1, C2 );
+C3 := PermutedCode( C1, p );
+C2 = C3;
+-->
+
+<ManSection Label="ExpurgatedCode">
+<Func Name="ExpurgatedCode" Arg=" C L "/>
+
+<Description>
+<C>ExpurgatedCode</C> expurgates the code <A>C</A>> by throwing 
+away codewords in list <A>L</A>. <A>C</A> must be a linear code. 
+<A>L</A> must be a list of codeword input. 
+The generator matrix of the new code no longer is a basis for the
+codewords specified by <A>L</A>.  Since the returned code is 
+still linear, it is very likely that, besides the words of 
+<A>L</A>, more codewords of <A>C</A> are no longer in the 
+new code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := ExpurgatedCode( C1, L );
+a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 
+</Example>
+<!--
+C1 := HammingCode( 4 );; WeightDistribution( C1 );
+L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+C2 := ExpurgatedCode( C1, L );
+WeightDistribution( C2 );
+-->
+
+This function does not work on non-linear codes.  
+For removing words from a non-linear code, use
+<C>RemovedElementsCode</C> (see
+<Ref Func="RemovedElementsCode" Style="Number"/>).  
+For  expurgating a code of all words of odd
+weight, use `EvenWeightSubcode' (see 
+<Ref Func="EvenWeightSubcode" Style="Number"/>).
+
+
+<ManSection Label="AugmentedCode">
+<Func Name="AugmentedCode" Arg=" C L "/>
+
+<Description>
+<C>AugmentedCode</C> returns <A>C</A> after augmenting. 
+<A>C</A> must be a linear code, <A>L</A> must be a list of 
+codeword inputs.  The generator matrix of the
+new code is a basis for the codewords specified by <A>L</A> 
+as well as the words that were already in code <A>C</A>. 
+Note that the new code in general will consist of more 
+words than only the codewords of <A>C</A> and the words
+<A>L</A>. The returned code is also a linear code.
+<P/>
+This command can also be called with the syntax
+<C>AugmentedCode(C)</C>.
+
+When  called without a list of codewords, 
+<C>AugmentedCode</C> returns <A>C</A>
+after adding the all-ones vector to the generator matrix. 
+<A>C</A> must be a linear code.   
+If the all-ones vector was already in the code, nothing
+happens and a copy of the argument is returned. If <A>C</A> 
+is a binary code which does not contain the all-ones vector,   
+the complement of all codewords is added.
+</Description>
+</ManSection>
+
+<Example>
+gap> C31 := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+a linear [8,7,1..2]1 code, augmented with 3 word(s)
+gap> C32 = ReedMullerCode( 2, 3 );
+true 
+gap> C1 := CordaroWagnerCode(6);
+a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
+gap> Codeword( [0,0,1,1,1,1] ) in C1;
+true
+gap> C2 := AugmentedCode( C1 );
+a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
+gap> Codeword( [1,1,0,0,0,0] ) in C2;
+true
+</Example>
+<!--
+C31 := ReedMullerCode( 1, 3 );
+C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+C32 = ReedMullerCode( 2, 3 );
+C1 := CordaroWagnerCode(6);
+Codeword( [0,0,1,1,1,1] ) in C1;
+C2 := AugmentedCode( C1 );
+Codeword( [1,1,0,0,0,0] ) in C2;
+-->
+
+The function <C>AddedElementsCode</C> adds elements to the codewords instead
+of adding them to the basis (see 
+<Ref Func="AddedElementsCode" Style="Number"/>).
+
+<ManSection Label="RemovedElementsCode">
+<Func Name="RemovedElementsCode" Arg=" C L "/>
+
+<Description>
+<C>RemovedElementsCode</C> returns code <A>C</A> after removing 
+a list of codewords <A>L</A> from its elements. <A>L</A> must be a 
+list of codeword input.  The result is an unrestricted code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := RemovedElementsCode( C1, L );
+a (15,2013,3..15)2..15 code with 35 word(s) removed
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> MinimumDistance( C2 );
+3        # C2 is not linear, so the minimum weight does not have to
+         # be equal to the minimum distance 
+</Example>
+<!--
+C1 := HammingCode( 4 );; WeightDistribution( C1 );
+L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+C2 := RemovedElementsCode( C1, L );
+WeightDistribution( C2 );
+MinimumDistance( C2 );
+-->
+
+Adding elements  to a  code is  done by  the function 
+<C>AddedElementsCode</C>
+(see 
+<Ref Func="AddedElementsCode" Style="Number"/>). 
+To remove codewords from the base of a linear
+code, use <C>ExpurgatedCode</C> (see 
+<Ref Func="ExpurgatedCode" Style="Number"/>).
+
+
+<ManSection Label="AddedElementsCode">
+<Func Name="AddedElementsCode" Arg=" C L "/>
+
+<Description>
+<C>AddedElementsCode</C> returns code <A>C</A> after adding a 
+list of codewords <A>L</A> to its elements. 
+<A>L</A> must be a list of codeword  input. The result is an
+unrestricted code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := NullCode( 6, GF(2) );
+a cyclic [6,0,6]6 nullcode over GF(2)
+gap> C2 := AddedElementsCode( C1, [ "111111" ] );
+a (6,2,1..6)3 code with 1 word(s) added
+gap> IsCyclicCode( C2 );
+true
+gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+a (6,4,1..6)2 code with 2 word(s) added
+gap> IsCyclicCode( C3 );
+true 
+</Example>
+<!--
+C1 := NullCode( 6, GF(2) );
+C2 := AddedElementsCode( C1, [ "111111" ] );
+IsCyclicCode( C2 );
+C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+IsCyclicCode( C3 );
+-->
+
+To remove elements from a code, use <C>RemovedElementsCode</C>  (see
+<Ref Func="RemovedElementsCode" Style="Number"/>). 
+To add elements to the base of a linear code, use
+<C>AugmentedCode</C> (see 
+<Ref Func="AugmentedCode" Style="Number"/>).
+
+<ManSection Label="ShortenedCode">
+<Func Name="ShortenedCode" Arg=" C [L] "/>
+
+<Description>
+<C>ShortenedCode( C )</C> returns the code <A>C</A> shortened by 
+taking a cross section.  If <A>C</A> is a linear code, this is done  
+by removing all codewords that start with a non-zero entry, after which
+the first column is cut off.  If <A>C</A>
+was a <M>[n,k,d]</M> code, the shortened code generally is a 
+<M>[n-1,k-1,d]</M> code. It is possible that the dimension 
+remains the same; it is also possible that the minimum distance 
+increases.
+<P/>
+If  <A>C</A> is a non-linear code, <C>ShortenedCode</C> first 
+checks which finite
+field element occurs most often in the first column of the codewords. The
+codewords not starting with this element are removed from the code, after
+which the first  column is cut off. The resulting shortened code has at
+least the same minimum distance as <A>C</A>.
+<P/>
+This command can also be called using the syntax
+<C>ShortenedCode(C,L)</C>.
+When called in this format, <C>ShortenedCode</C> repeats the
+shortening process on each of the columns specified by <A>L</A>. 
+<A>L</A> therefore is a list of integers. The column numbers in 
+<A>L</A>  are the numbers as they are before the shortening process. 
+If <A>L</A> has <M>l</M> entries, the returned code has a word 
+length of <M>l</M> positions shorter than <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 4 );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := ShortenedCode( C1 );
+a linear [14,10,3]2 shortened code
+gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+a (4,3,1..4)2 user defined unrestricted code over GF(2)
+gap> MinimumDistance( C3 );
+2
+gap> C4 := ShortenedCode( C3 );
+a (3,2,2..3)1..2 shortened code
+gap> AsSSortedList( C4 );
+[ [ 0 0 0 ], [ 1 0 1 ] ]
+gap> C5 := HammingCode( 5, GF(2) );
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+a linear [28,23,3]2 shortened code
+gap> OptimalityLinearCode( C6 );
+0
+</Example>
+<!--
+C1 := HammingCode( 4 );
+C2 := ShortenedCode( C1 );
+C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+MinimumDistance( C3 );
+C4 := ShortenedCode( C3 );
+AsSSortedList( C4 );
+C5 := HammingCode( 5, GF(2) );
+C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+OptimalityLinearCode( C6 );
+-->
+
+The function <C>LengthenedCode</C> lengthens the code again (only for linear
+codes), see 
+<Ref Func="LengthenedCode" Style="Number"/>. 
+In general, this is not exactly the inverse function.
+
+<ManSection Label="LengthenedCode">
+<Func Name="LengthenedCode" Arg=" C [i] "/>
+
+<Description>
+<C>LengthenedCode( C )</C> returns the code <A>C</A> lengthened.  
+<A>C</A>  must be a linear code. First, the all-ones vector is 
+added to the generator matrix (see
+<Ref Func="AugmentedCode" Style="Number"/>). 
+If the all-ones vector was already a codeword, nothing
+happens to the code.  Then, the code is extended <A>i</A> times  (see
+<Ref Func="ExtendedCode" Style="Number"/>). <A>i</A> is equal to 
+<M>1</M> by default. If <A>C</A> was an <M>[n,k]</M>
+code, the new code generally is a <M>[n+i,k+1]</M> code.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := CordaroWagnerCode( 5 );
+a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
+gap> C2 := LengthenedCode( C1 );
+a linear [6,3,2]2..3 code, lengthened with 1 column(s) 
+</Example>
+<!--
+C1 := CordaroWagnerCode( 5 );
+C2 := LengthenedCode( C1 );
+-->
+
+<C>ShortenedCode</C>' shortens the code, see 
+<Ref Func="ShortenedCode" Style="Number"/>. In general, this
+is not exactly the inverse function.
+
+<ManSection Label="SubCode">
+	<Func Name="SubCode" Arg=" C [s] "/>
+
+	<Description>
+		This function <C>SubCode</C> returns a subcode of
+		<A>C</A> by taking the first <M>k - s</M> rows of
+		the generator matrix of <A>C</A>, where <M>k</M>
+		is the dimension of <A>C</A>. The interger <A>s</A>
+		may be omitted and in this case it is assumed as 1.
+	</Description>
+</ManSection>
+
+<Example>
+gap> C := BCHCode(31,11);
+a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
+gap> S1:= SubCode(C);
+a linear [31,10,11]7..13 subcode
+gap> WeightDistribution(S1);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+gap> S2:= SubCode(C, 8);
+a linear [31,3,11]14..20 subcode
+gap> History(S2);
+[ "a linear [31,3,11]14..20 subcode of",
+  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
+gap> WeightDistribution(S2);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0 ]
+</Example>
+
+<!--
+C := BCHCode(31,11);
+S1:= SubCode(C);
+WeightDistribution(S1);
+S2:= SubCode(C, 8);
+History(S2);
+WeightDistribution(S2);
+-->
+
+<ManSection Label="ResidueCode">
+<Func Name="ResidueCode" Arg=" C [c] "/>
+
+<Description>
+The function <C>ResidueCode</C> takes a codeword <A>c</A>
+of <A>C</A> (if <A>c</A> is omitted, a 
+codeword of minimal weight is used). 
+It removes this word and all its linear combinations from 
+the code and then  punctures the code in the coordinates 
+where <A>c</A> is unequal to zero. The resulting code is an
+<M>[n-w, k-1, d-\lfloor w*(q-1)/q \rfloor ]</M> code.
+<A>C</A> must be a
+linear code and <A>c</A> must be non-zero.
+If <A>c</A> is not in <A></A> then no change is made to <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := BCHCode( 15, 7 );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 := ResidueCode( C1 );
+a linear [8,4,4]2 residue code
+gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+gap> C3 := ResidueCode( C1, c );
+a linear [7,4,3]1 residue code 
+</Example>
+<!--
+C1 := BCHCode( 15, 7 );
+C2 := ResidueCode( C1 );
+c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+C3 := ResidueCode( C1, c );
+-->
+
+<ManSection Label="ConstructionBCode">
+<Func Name="ConstructionBCode" Arg=" C "/>
+
+<Description>
+The function <C>ConstructionBCode</C> takes a binary linear code
+<A>C</A> and calculates the minimum distance of the dual of 
+<A>C</A> (see 
+<Ref Func="DualCode" Style="Number"/>). It
+then removes the columns of the parity check matrix of 
+<A>C</A>  where a codeword of the dual code of minimal weight
+has coordinates unequal to zero. 
+The resulting matrix is a parity check matrix for an 
+<M>[n-dd, k-dd+1, \geq d]</M> code, where <M>dd</M> is the 
+minimum distance  of the dual of <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ReedMullerCode( 2, 5 );
+a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
+gap> C2 := ConstructionBCode( C1 );
+a linear [24,9,8]5..10 Construction B (8 coordinates)
+gap> BoundsMinimumDistance( 24, 9, GF(2) );
+rec( n := 24, k := 9, q := 2, references := rec(  ), 
+  construction := [ [ Operation "UUVCode" ], 
+      [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
+                      [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
+                  [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
+          [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
+  lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
+      "Lb(12,7)=4, u u+v construction of C1 and C2:", 
+      "Lb(6,5)=2, dual of the repetition code", 
+      "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
+  upperBound := 8, 
+  upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
+                             contradict:", "Ub(18,4)=8, Griesmer bound" ] )
+# so C2 is optimal
+</Example>
+<!--
+C1 := ReedMullerCode( 2, 5 );
+C2 := ConstructionBCode( C1 );
+BoundsMinimumDistance( 24, 9, GF(2) );
+-->
+
+
+<ManSection Label="DualCode">
+<Func Name="DualCode" Arg=" C "/>
+
+<Description>
+<C>DualCode</C> returns the dual code of <A>C</A>. 
+The dual code consists of all codewords that are orthogonal to the 
+codewords of <A>C</A>. If <A>C</A> is a linear code with generator 
+matrix <M>G</M>, the dual code has parity check matrix <M>G</M>
+(or if <A>C</A> has parity check matrix <M>H</M>,  the 
+dual code has generator matrix <M>H</M>). So if <A>C</A> 
+is a linear <M>[n, k]</M> code, the dual code of <A>C</A> is a
+linear <M>[n,  n-k]</M> code. If <A>C</A> is a cyclic code 
+with generator polynomial <M>g(x)</M>, the dual code has the 
+reciprocal polynomial of <M>g(x)</M> as check polynomial.
+<P/>
+The dual code is always a linear code, even if <A>C</A> is non-linear.
+<P/>
+If a code <A>C</A> is equal to its dual code, it is called 
+<E>self-dual</E>.
+</Description>
+</ManSection>
+
+<Example>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> RD := DualCode( R );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> R = RD;
+true
+gap> N := WholeSpaceCode( 7, GF(4) );
+a cyclic [7,7,1]0 whole space code over GF(4)
+gap> DualCode( N ) = NullCode( 7, GF(4) );
+true 
+</Example>
+<!--
+R := ReedMullerCode( 1, 3 );
+RD := DualCode( R );
+R = RD;
+N := WholeSpaceCode( 7, GF(4) );
+DualCode( N ) = NullCode( 7, GF(4) );
+-->
+
+<Index>
+self-dual
+</Index>
+
+<ManSection Label="ConversionFieldCode">
+<Func Name="ConversionFieldCode" Arg=" C "/>
+
+<Description>
+<C>ConversionFieldCode</C> returns the code obtained from
+<A>C</A> after converting its field. 
+If the field of <A>C</A> is <M>GF(q^m)</M>, 
+the returned code has field <M>GF(q)</M>. Each
+symbol of every codeword is replaced by a concatenation of <M>m</M> symbols
+from <M>GF(q)</M>. If <A>C</A> is an <M>(n, M, d_1)</M> code, 
+the returned code is a <M>(n\cdot m, M, d_2)</M> code, 
+where <M>d_2 > d_1</M>.
+<P/>
+See also <Ref Func="HorizontalConversionFieldMat" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> R := RepetitionCode( 4, GF(4) );
+a cyclic [4,1,4]3 repetition code over GF(4)
+gap> R2 := ConversionFieldCode( R );
+a linear [8,2,4]3..4 code, converted to basefield GF(2)
+gap> Size( R ) = Size( R2 );
+true
+gap> GeneratorMat( R );
+[ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
+gap> GeneratorMat( R2 );
+[ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 
+</Example>
+<!--
+R := RepetitionCode( 4, GF(4) );
+R2 := ConversionFieldCode( R );
+Size( R ) = Size( R2 );
+GeneratorMat( R );
+GeneratorMat( R2 );
+-->
+
+<ManSection Label="TraceCode">
+<Func Name="TraceCode" Arg=" C "/>
+
+<Description>
+Input: <A>C</A> is a linear code defined over an extension <M>E</M> of <A>F</A>
+(<A>F</A> is the ``base field'')
+<P/>
+Output: The linear code generated by <M>Tr_{E/F}(c)</M>, for all <M>c \in C</M>.
+<P/>
+<C>TraceCode</C> returns the image of the code <A>C</A> under the
+trace map. If the field of <A>C</A> is <M>GF(q^m)</M>, 
+the returned code has field <M>GF(q)</M>. 
+<P/>
+Very slow. It does not seem to be easy to related the parameters of the
+trace code to the original except in the ``Galois closed'' case.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+a  [10,4,?] randomly generated code over GF(4)
+5
+gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
+1
+
+</Example>
+<!--
+C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+
+-->
+
+<ManSection Label="CosetCode">
+<Func Name="CosetCode" Arg=" C w "/>
+
+<Description>
+<C>CosetCode</C> returns the coset of a code 
+<A>C</A> with respect to word <A>w</A>.
+<A>w</A> must be of the codeword type. Then, <A>w</A> is 
+added to each codeword of <A>C</A>, yielding the elements of
+the new code. If <A>C</A> is linear and <A>w</A> is
+an element of <A>C</A>, the new code is equal to <A>C</A>, 
+otherwise the new code is an unrestricted code.
+<P/>
+Generating a coset is also possible by simply adding the word 
+<A>w</A> to <A>C</A>. See 
+<Ref Label="Operations for Codes" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> H := HammingCode(3, GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := Codeword("1011011");; c in H;
+false
+gap> C := CosetCode(H, c);
+a (7,16,3)1 coset code
+gap> List(AsSSortedList(C), el-> Syndrome(H, el));
+[ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
+# All elements of the coset have the same syndrome in H 
+</Example>
+<!--
+H := HammingCode(3, GF(2));
+c := Codeword("1011011");; c in H;
+C := CosetCode(H, c);
+List(AsSSortedList(C), el-> Syndrome(H, el));
+-->
+
+<ManSection Label="ConstantWeightSubcode">
+<Func Name="ConstantWeightSubcode" Arg=" C w "/>
+
+<Description>
+<C>ConstantWeightSubcode</C> returns the subcode of 
+<A>C</A> that only has codewords of weight <A>w</A>. 
+The resulting code is a non-linear code, because
+it does not contain the all-zero vector.
+<P/>
+This command also can be called with the syntax
+<C>ConstantWeightSubcode(C)</C>
+In this format, <C>ConstantWeightSubcode</C> returns 
+the subcode of <A>C</A> consisting of all minimum weight 
+codewords of <A>C</A>.
+<P/>
+<C>ConstantWeightSubcode</C> first checks if Leon's binary 
+<C>wtdist</C> exists on your computer (in the default directory).
+If it does, then this program is called. Otherwise, 
+the constant weight subcode is computed using a GAP program
+which checks each codeword in <A>C</A> to see if it is of the
+desired weight. 
+
+</Description>
+</ManSection>
+
+<Example>
+gap> N := NordstromRobinsonCode();; WeightDistribution(N);
+[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
+gap> C := ConstantWeightSubcode(N, 8);
+a (16,30,6..16)5..8 code with codewords of weight 8
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
+gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+[ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
+gap> C := ConstantWeightSubcode(eg);
+a (12,264,6..12)3..6 code with codewords of weight 6
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 
+</Example>
+<!--
+N := NordstromRobinsonCode();; WeightDistribution(N);
+C := ConstantWeightSubcode(N, 8);
+WeightDistribution(C);
+eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+C := ConstantWeightSubcode(eg);
+WeightDistribution(C);
+-->
+
+
+<ManSection Label="StandardFormCode">
+<Func Name="StandardFormCode" Arg=" C "/>
+
+<Description>
+<C>StandardFormCode</C> returns <A>C</A> after putting it
+in standard form. If <A>C</A> is a non-linear  code, this means the 
+elements are organized using lexicographical order. This means they 
+form a legal GAP `Set'.
+<P/>
+If <A>C</A> is a linear code, the generator matrix and parity check matrix are
+put in standard form. The generator matrix then has an identity matrix in
+its left part, the parity check matrix has an identity matrix in its
+right  part. Although <Package>GUAVA</Package> always puts both 
+matrices in a standard form using <C>BaseMat</C>, this never 
+alters the code. <C>StandardFormCode</C> even
+applies column permutations if unavoidable, and thereby changes the
+code. The column permutations are recorded in the construction history of
+the  new  code (see <Ref Func="Display" Style="Number"/>).  
+<A>C</A> and the new code are of course equivalent.
+<P/>
+If <A>C</A> is a cyclic code, its generator matrix cannot be 
+put in the usual upper triangular form, because then it would be 
+inconsistent with the generator polynomial. The reason is that 
+generating the elements from the generator matrix  would result in a 
+different order than  generating the elements from the generator 
+polynomial.  This is an unwanted effect, and therefore 
+<C>StandardFormCode</C> just returns a copy of <A>C</A> 
+for cyclic codes.
+</Description>
+</ManSection>
+
+<Example>
+gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
+          "random form code", GF(2) );
+a linear [4,2,1..2]1..2 random form code over GF(2)
+gap> Codeword( GeneratorMat( G ) );
+[ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
+gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
+[ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 
+</Example>
+<!--
+G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], "random form code", GF(2) );
+Codeword( GeneratorMat( G ) );
+Codeword( GeneratorMat( StandardFormCode( G ) ) );
+-->
+
+<ManSection Label="PiecewiseConstantCode">
+<Func Name="PiecewiseConstantCode" Arg=" part wts [F] "/>
+
+<Description>
+<C>PiecewiseConstantCode</C> returns a code with length 
+<M>n = \sum n_i</M>, where
+<A>part</A>=<M>[ n_1, \dots, n_k ]</M>. <A>wts</A> is a list of 
+<A>constraints</A> <M>w=(w_1,...,w_k)</M>, each of length <M>k</M>,
+where <M>0 \leq w_i \leq n_i</M>. 
+The default field is <M>GF(2)</M>.
+<P/>
+A constraint is a list of integers, and
+a word <M>c = ( c_1, \dots, c_k )</M> 
+(according to <A>part</A>, i.e., each <M>c_i</M> is a subword
+of length <M>n_i</M>)
+is in the resulting code if and only if,
+for some constraint <M>w \in</M> <A>wts</A>,
+<M>\|c_i\| = w_i</M> for all <M>1 \leq i \leq k</M>,
+where <M>\| ...\|</M> denotes the Hamming weight.
+<P/>
+An example might make things clearer:
+</Description>
+</ManSection>
+
+<Example>
+gap> PiecewiseConstantCode( [ 2, 3 ],
+     [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+a (5,7,1..5)1..5 piecewise constant code over GF(2)
+gap> AsSSortedList(last);
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
+  [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
+gap>
+
+</Example>
+<!--
+PiecewiseConstantCode( [ 2, 3 ],[ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+AsSSortedList(last);
+-->
+
+The first constraint is satisfied by codeword 1,
+the second by codeword 2,
+the third by codewords 3 and 4,
+and the fourth by codewords 5, 6 and 7.
+
+
+</Section>
+
+<Section>
+<Heading>
+Functions that Generate a New Code from Two or More Given Codes
+</Heading>
+<Label Name="Functions that Generate a New Code from Two or More Given Codes"/>
+
+
+<ManSection Label="DirectSumCode">
+<Func Name="DirectSumCode" Arg=" C1 C2 "/>
+
+<Description>
+<C>DirectSumCode</C> returns the direct sum of codes 
+<A>C1</A> and <A>C2</A>. The direct sum code consists of every 
+codeword of <A>C1</A> concatenated by every codeword of <A>C2</A>. 
+Therefore, if <A>Ci</A> was a <M>(n_i,M_i,d_i)</M>
+code, the result is a <M>(n_1+n_2,M_1*M_2,min(d_1,d_2))</M> code.
+<P/>
+If both <A>C1</A> and <A>C2</A> are linear codes, the result 
+is also a linear code. If one of them is non-linear, the direct 
+sum is non-linear too. In general, a direct sum code is not cyclic.
+<P/>
+Performing  a direct sum can also be done by adding two codes (see
+Section <Ref Label="Operations for Codes" Style="Number"/>). 
+Another often used method is the `u, u+v'-construction, 
+described in <Ref Func="UUVCode" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+gap> D := DirectSumCode(C1, C2);;
+gap> AsSSortedList(D);
+[ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
+gap> D = C1 + C2;   # addition = direct sum
+true 
+</Example>
+<!--
+C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+D := DirectSumCode(C1, C2);;
+AsSSortedList(D);
+D = C1 + C2;   # addition = direct sum
+-->
+
+<ManSection Label="UUVCode">
+<Func Name="UUVCode" Arg=" C1 C2 "/>
+
+<Description>
+<C>UUVCode</C> returns the so-called <M>(u\|u+v)</M> construction 
+applied to <A>C1</A> and <A>C2</A>. 
+The resulting code consists of every codeword <M>u</M> of
+<A>C1</A> concatenated by the sum of <M>u</M> and every codeword 
+<M>v</M> of <A>C2</A>.  If <A>C1</A> and <A>C2</A> have different 
+word lengths, sufficient zeros are added to the shorter code to 
+make this sum possible. If <A>Ci</A> is a <M>(n_i,M_i,d_i)</M> 
+code,  the  result is an 
+<M>(n_1+max(n_1,n_2),M_1\cdot M_2,min(2\cdot d_1,d_2))</M> code.
+<P/>
+If both <A>C1</A> and <A>C2</A> are linear codes, the result is also a linear
+code. If one  of them is non-linear, the UUV sum is non-linear too.
+In general, a UUV sum code is not cyclic.
+<P/>
+The function <C>DirectSumCode</C> returns another sum of codes (see
+<Ref Func="DirectSumCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+a cyclic [4,3,2]1 even weight subcode
+gap> C2 := RepetitionCode(4, GF(2));
+a cyclic [4,1,4]2 repetition code over GF(2)
+gap> R := UUVCode(C1, C2);
+a linear [8,4,4]2 U U+V construction code
+gap> R = ReedMullerCode(1,3);
+true 
+</Example>
+<!--
+C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+C2 := RepetitionCode(4, GF(2));
+R := UUVCode(C1, C2);
+R = ReedMullerCode(1,3);
+
+-->
+
+
+<ManSection Label="DirectProductCode">
+<Func Name="DirectProductCode" Arg=" C1 C2 "/>
+
+<Description>
+<C>DirectProductCode</C> returns the direct product of codes 
+<A>C1</A> and <A>C2</A>. Both must be linear codes.  
+Suppose <A>Ci</A> has generator matrix <M>G_i</M>. 
+The direct product of <A>C1</A> and <A>C2</A> 
+then has the Kronecker product of <M>G_1</M>  
+and <M>G_2</M>  as the generator matrix (see
+the GAP command <C>KroneckerProduct</C>).
+<P/>
+If <A>Ci</A> is a <M>[n_i, k_i, d_i]</M> code, 
+the direct product then is an 
+<M>[n_1\cdot n_2,k_1\cdot k_2,d_1\cdot d_2]</M> code.
+</Description>
+</ManSection>
+
+<Example>
+gap> L1 := LexiCode(10, 4, GF(2));
+a linear [10,5,4]2..4 lexicode over GF(2)
+gap> L2 := LexiCode(8, 3, GF(2));
+a linear [8,4,3]2..3 lexicode over GF(2)
+gap> D := DirectProductCode(L1, L2);
+a linear [80,20,12]20..45 direct product code 
+</Example>
+<!--
+L1 := LexiCode(10, 4, GF(2));
+L2 := LexiCode(8, 3, GF(2));
+D := DirectProductCode(L1, L2);
+-->
+
+<ManSection Label="IntersectionCode">
+<Func Name="IntersectionCode" Arg=" C1 C2 "/>
+
+<Description>
+<C>IntersectionCode</C> returns the intersection of 
+codes <A>C1</A> and <A>C2</A>.
+This code consists of all codewords that are both in 
+<A>C1</A> and <A>C2</A>.
+If both codes are linear, the result is also linear. 
+If both are cyclic, the result is also cyclic.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> C := CyclicCodes(7, GF(2));
+[ a cyclic [7,7,1]0 enumerated code over GF(2),
+  a cyclic [7,6,1..2]1 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,0,7]7 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2),
+  a cyclic [7,1,7]3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
+gap> IntersectionCode(C[6], C[8]) = C[7];
+true 
+</Example>
+
+<Index>hull</Index> 
+The <E>hull</E> of a linear code is the
+intersection of the code with its dual code. In other words,
+the hull of <M>C</M> is
+<C>IntersectionCode(C, DualCode(C))</C>.
+
+<ManSection Label="UnionCode">
+<Func Name="UnionCode" Arg=" C1 C2 "/>
+
+<Description>
+<C>UnionCode</C> returns the union of codes 
+<A>C1</A> and <A>C2</A>. This code consists of the union of 
+all codewords of <A>C1</A> and <A>C2</A> and all
+linear combinations. Therefore this function works only for linear
+codes. The function <C>AddedElementsCode</C> can be used for non-linear codes,
+or if  the  resulting code should not include linear combinations.  See
+<Ref Func="AddedElementsCode" Style="Number"/>.  
+If both arguments  are  cyclic, the result  is also
+cyclic.
+</Description>
+</ManSection>
+
+<Example>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
+gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+a linear [3,1,3]1 code defined by generator matrix over GF(2)
+gap> U := UnionCode(G, H);
+a linear [3,3,1]0 union code
+gap> c := Codeword("010");; c in G;
+false
+gap> c in H;
+false
+gap> c in U;
+true 
+</Example>
+<!--
+G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+U := UnionCode(G, H);
+c := Codeword("010");; c in G;
+c in H;
+c in U;
+-->
+
+
+<ManSection Label="ExtendedDirectSumCode">
+<Func Name="ExtendedDirectSumCode" Arg=" L B m "/>
+
+<Description>
+The extended direct sum construction is described in section V of Graham
+and Sloane <Cite Key="GS85"/>. 
+The resulting code consists of <A>m</A> copies of <A>L</A>, extended by
+repeating the codewords of <A>B</A> <A>m</A> times.
+<P/>
+Suppose <A>L</A> is an <M>[n_L, k_L]r_L</M> code, and <A>B</A>
+is an <M>[n_L,  k_B]r_B</M> code (non-linear codes are also permitted). 
+The length  of <A>B</A> must be equal to the length of 
+<A>L</A>. The length of the new code is <M>n  =  m  n_L</M>,
+the dimension (in the case of linear codes) is 
+<M>k \leq m k_L + k_B</M>, and
+the covering radius is <M>r \leq \lfloor m \Psi( L, B ) \rfloor</M>, 
+with
+
+<Display>
+\Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}}
+               \sum_{v \in B} {\rm d}( L, v + u ).
+</Display>
+However, this computation will not be executed, because it may be too
+time consuming for large codes.
+<P/>
+If <M>L \subseteq B</M>, and <M>L</M> and <M>B</M> are linear codes, 
+the last copy of <A>L</A> is omitted. In this case the 
+dimension is <M>k = m k_L + (k_B  -  k_L)</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := WholeSpaceCode( 7, GF(2) );
+a cyclic [7,7,1]0 whole space code over GF(2)
+gap> e := ExtendedDirectSumCode( c, d, 3 );
+a linear [21,15,1..3]2 3-fold extended direct sum code
+</Example>
+<!--
+c := HammingCode( 3, GF(2) );
+d := WholeSpaceCode( 7, GF(2) );
+e := ExtendedDirectSumCode( c, d, 3 );
+-->
+
+
+<ManSection Label="AmalgamatedDirectSumCode">
+<Func Name="AmalgamatedDirectSumCode" Arg=" c1 c2 [check] "/>
+
+<Description>
+<C>AmalgamatedDirectSumCode</C> returns the amalgamated direct 
+sum of the codes <A>c1</A> and <A>c2</A>. The amalgamated direct
+sum code consists of all codewords of the form
+<M>(u \, \| \,0 \, \| \, v)</M>
+if
+<M>(u \, \| \, 0) \in c_1</M>
+and
+<M>(0 \, \| \, v) \in c_2</M>
+and all codewords of the form
+<M>(u \, \| \, 1 \, \| \, v)</M>
+if
+<M>(u \, \| \, 1) \in c_1</M>
+and
+<M>(1 \, \| \, v) \in c_2</M>.
+The result is a code with length
+<M> n = n_1 + n_2 - 1 </M>
+and size
+<M> M \leq M_1 \cdot M_2 / 2 </M>.
+<P/>
+If both codes are linear, they will first be standardized, with
+information symbols in the last and first coordinates of the first and
+second code, respectively.
+<P/>
+If <A>c1</A> is a normal code (see 
+<Ref Func="IsNormalCode" Style="Number"/>)
+with the last coordinate acceptable
+(see 
+<Ref Func="IsCoordinateAcceptable" Style="Number"/>), 
+and <A>c2</A>
+is a normal code with the first coordinate acceptable, then the  covering
+radius of the new code is <M>r \leq r_1 + r_2 </M>. However, checking whether
+a code is normal or not is a lot of work, and almost all codes seem to be
+normal. Therefore, an option <A>check</A> can be supplied. 
+If <A>check</A> is true,
+then the codes will be checked for normality.  
+If <A>check</A> is false or omitted, then the codes will 
+not be checked. In this case it is assumed
+that they are normal. Acceptability of the last and first coordinate of
+the first and second code, respectively, is in the last case also assumed
+to be done by the user.
+</Description>
+</ManSection>
+
+<Example>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := ReedMullerCode( 1, 4 );
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> e := DirectSumCode( c, d );
+a linear [23,9,3]7 direct sum code
+gap> f := AmalgamatedDirectSumCode( c, d );;
+gap> MinimumDistance( f );;
+gap> CoveringRadius( f );; 
+gap> f;
+a linear [22,8,3]7 amalgamated direct sum code
+</Example>
+<!--
+c := HammingCode( 3, GF(2) );
+d := ReedMullerCode( 1, 4 );
+e := DirectSumCode( c, d );
+f := AmalgamatedDirectSumCode( c, d );;
+MinimumDistance( f );;
+CoveringRadius( f );; # takes some time
+f;
+-->
+
+<ManSection Label="BlockwiseDirectSumCode">
+<Func Name="BlockwiseDirectSumCode" Arg=" C1 L1 C2 L2 "/>
+
+<Description>
+<C>BlockwiseDirectSumCode</C> returns a subcode of the direct sum 
+of <A>C1</A> and <A>C2</A>. The fields of <A>C1</A> and 
+<A>C2</A> must be same.  The lists <A>L1</A> and <A>L2</A> 
+are two equally long with elements from the ambient vector spaces
+of <A>C1</A> and <A>C2</A>,  respectively, <E>or</E>
+<A>L1</A> and <A>L2</A> are two equally long lists containing codes.  
+The union of the codes in <A>L1</A> and <A>L2</A> must be 
+<A>C1</A> and <A>C2</A>, respectively.
+<P/>
+In the first case, the blockwise direct sum code is defined as
+
+<Display>
+bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ),
+</Display>
+where <M>\ell</M> is the length of <A>L1</A> and <A>L2</A>, 
+and <M>\oplus</M> is the direct sum.
+<P/>
+In the second case, it is defined as
+
+<Display>
+bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).
+</Display>
+The length of the new code is <M>n = n_1 + n_2</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C1 := HammingCode( 3, GF(2) );;
+gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
+> C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+a (13,1024,1..13)1..2 blockwise direct sum code
+</Example>
+<!--
+C1 := HammingCode( 3, GF(2) );;
+C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]], C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+-->
+
+
+<ManSection Label="ConstructionXCode">
+	<Func Name="ConstructionXCode" Arg=" C A "/>
+
+	<Description>
+		Consider a list of <M>j</M> linear codes of the same length <M>N</M> over the same field <M>F</M>,
+		<M>C = \{ C_1, C_2, \ldots, C_j \}</M>, where the parameter of the <M>i</M>th code is
+		<M>C_i = [N, K_i, D_i]</M> and <M>C_j \subset C_{j-1} \subset \ldots \subset C_2 \subset C_1</M>.
+		Consider a list of <M>j-1</M> auxiliary linear codes of the same field <M>F</M>,
+		<M>A = \{ A_1, A_2, \ldots, A_{j-1} \}</M> where the parameter of the <M>i</M>th code <M>A_i</M>
+		is <M>[n_i, k_i=(K_i-K_{i+1}), d_i]</M>, an <M>[n, K_1, d]</M> linear code over field <M>F</M>
+		can be constructed where <M>n = N + \sum_{i=1}^{j-1} n_i</M>,
+		and <M>d = \min\{ D_j, D_{j-1} + d_{j-1}, D_{j-2} + d_{j-2} + d_{j-1}, \ldots,
+		D_1 + \sum_{i=1}^{j-1} d_i\}</M>.
+		<P/>
+		For more information on Construction X, refer to <Cite Key="Sloane72"/>.
+	</Description>
+</ManSection>
+
+<Example>
+gap> C1 := BCHCode(127, 43);
+a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
+gap> C2 := BCHCode(127, 47);
+a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
+gap> C3 := BCHCode(127, 55);
+a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
+gap> G1 := ShallowCopy( GeneratorMat(C2) );;
+gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
+gap> C1 := GeneratorMatCode(G1, GF(2));
+a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+43
+gap> C := [ C1, C2, C3 ];
+[ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
+  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
+  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
+gap> IsSubset(C[1], C[2]);
+true
+gap> IsSubset(C[2], C[3]);
+true
+gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+[ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
+gap> CX := ConstructionXCode(C, A);
+a linear [148,23,53]43..74 Construction X code
+gap> History(CX);
+[ "a linear [148,23,53]43..74 Construction X code of", 
+  "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
+, a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
+[127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
+  "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
+17,8,6]3..6 even weight subcode ]" ]
+</Example>
+<!--
+C1 := BCHCode(127, 43);
+C2 := BCHCode(127, 47);
+C3 := BCHCode(127, 55);
+G1 := ShallowCopy( GeneratorMat(C2) );;
+Append(G1, [ GeneratorMat(C1)[23] ]);;
+C1 := GeneratorMatCode(G1, GF(2));
+MinimumDistance(C1);
+C := [ C1, C2, C3 ];
+IsSubset(C[1], C[2]);
+IsSubset(C[2], C[3]);
+A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+CX := ConstructionXCode(C, A);
+History(CX);
+-->
+
+
+<ManSection Label="ConstructionXXCode">
+	<Func Name="ConstructionXXCode" Arg=" C1 C2 C3 A1 A2 "/>
+
+	<Description>
+		Consider a set of linear codes over field <M>F</M> of the same length, 
+		<M>n</M>, <M>C_1=[n, k_1, d_1]</M>, <M>C_2=[n, k_2, d_2]</M> and <M>C_3=[n, k_3, d_3]</M>
+		such that <M>C_2 \subset C_1</M>, <M>C_3 \subset C_1</M> and <M>C_4 = C_2 \cap C_3</M>.
+		Given two auxiliary codes <M>A_1=[n_1, k_1-k_2, e_1]</M> and <M>A_2=[n_2, k_1-k_3, e_2]</M>
+		over the same field <M>F</M>, there exists an <M>[n+n_1+n_2, k_1, d]</M> linear code
+		<M>C_{XX}</M> over field <M>F</M>, where <M>d = \min\{d_4, d_3 + e_1, d_2 + e_2,
+		d_1 + e_1 + e_2\}</M>.
+		<P/>
+		The codewords of <M>C_{XX}</M> can be partitioned into three sections <M>( v\;\|\;a\;\|\;b )</M>
+		where <M>v</M> has length <M>n</M>, <M>a</M> has length <M>n_1</M> and <M>b</M> has length
+		<M>n_2</M>. A codeword from Construction XX takes the following form:
+		<List>
+			<Item>
+				<M>( v \; \| \; 0 \; \| \; 0 )</M> if <M>v \in C_4</M>
+			</Item>
+			<Item>
+				<M>( v \; \| \; a_1 \; \| \; 0 )</M> if <M>v \in C_3 \backslash C_4</M>
+			</Item>
+			<Item>
+				<M>( v \; \| \; 0 \; \| \; a_2 )</M> if <M>v \in C_2 \backslash C_4</M>
+			</Item>
+			<Item>
+				<M>( v \; \| \; a_1 \; \| \; a_2 )</M> otherwise
+			</Item>
+		</List>
+		For more information on Construction XX, refer to <Cite Key="Alltop84"/>.
+	</Description>
+</ManSection>
+
+<Example>
+gap> a := PrimitiveRoot(GF(32));
+Z(2^5)
+gap> f0 := MinimalPolynomial( GF(2), a^0 );
+x_1+Z(2)^0
+gap> f1 := MinimalPolynomial( GF(2), a^1 );
+x_1^5+x_1^2+Z(2)^0
+gap> f5 := MinimalPolynomial( GF(2), a^5 );
+x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
+gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+a linear [31,11,11]7..11 union code of
+U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
+a linear [10,5,4]2..4 shortened code
+gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
+a cyclic [6,5,2]1 dual code
+gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+a linear [47,11,15..17]13..23 Construction XX code
+gap> MinimumDistance(CXX);
+17
+gap> History(CXX);        
+[ "a linear [47,11,17]13..23 Construction XX code of", 
+  "C1: a cyclic [31,11,11]7..11 union code", 
+  "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "A1: a linear [10,5,4]2..4 shortened code", 
+  "A2: a cyclic [6,5,2]1 dual code" ]
+</Example>
+<!--
+a := PrimitiveRoot(GF(32));
+f0 := MinimalPolynomial( GF(2), a^0 );
+f1 := MinimalPolynomial( GF(2), a^1 );
+f5 := MinimalPolynomial( GF(2), a^5 );
+C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+A1 := BestKnownLinearCode( 10, 5, GF(2) );
+A2 := DualCode( RepetitionCode(6, GF(2)) );
+CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+History(CXX);
+-->
+
+<ManSection Label="BZCode">
+	<Func Name="BZCode" Arg=" O I "/>
+
+	<Description>
+		Given a set of outer codes of the same length <M>O_i = [N, K_i, D_i]</M> over GF(<M>q^{e_i}</M>),
+		where <M>i=1,2,\ldots,t</M> and a set of inner codes of the same length
+		<M>I_i = [n, k_i, d_i]</M> over GF(<M>q</M>), <C>BZCode</C> returns a
+		Blokh-Zyablov multilevel concatenated code
+		with parameter <M>[ n \times N, \sum_{i=1}^t e_i \times K_i,
+			\min_{i=1,\ldots,t}\{d_i \times D_i\} ]</M> over GF(<M>q</M>).
+		<P/>
+		Note that the set of inner codes must satisfy chain condition, i.e.
+		<M>I_1 = [n, k_1, d_1] \subset I_2=[n, k_2, d_2] \subset \ldots \subset
+			I_t=[n, k_t, d_t]</M> where <M>0=k_0 < k_1 < k_2 < \ldots < k_t</M>.
+		The dimension of the inner codes must satisfy the condition <M>e_i = k_i - k_{i-1}</M>,
+		where GF(<M>q^{e_i}</M>) is the field of the <M>i</M>th outer code.
+		<P/>
+		For more information on Blokh-Zyablov multilevel concatenated code, refer to
+		<Cite Key="Brouwer98"/>.
+	</Description>
+</ManSection>
+
+<ManSection Label="BZCodeNC">
+	<Func Name="BZCodeNC" Arg=" O I "/>
+	<Description>
+		This function is the same as <C>BZCode</C>,
+		except this version is faster as it does not estimate the covering radius of the code.
+		Users are encouraged to use this version unless you are working on very small codes.
+	</Description>
+</ManSection>
+
+<Example>
+gap> #
+gap> # Binary code
+gap> #
+gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+[ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
+  a cyclic [9,4,6]4..5 MDS code over GF(8) ]
+gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
+gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+[ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
+gap> C := BZCodeNC(O, I);
+a linear [72,38,12]0..72 Blokh Zyablov concatenated code
+gap> #
+gap> # Non binary code
+gap> #
+gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
+gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
+gap> O1 := DualCode( O3 );;
+gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+gap> Cy := CyclicCodes(5, GF(5));;
+gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+gap> O  := [ O1, O2, O3 ];
+[ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
+  a linear [6,2,5]3..4 extended code ]
+gap> I  := [ Cy[5], Cy[4], Cy[3] ];
+[ a cyclic [5,1,5]3..4 enumerated code over GF(5),
+  a cyclic [5,2,4]2..3 enumerated code over GF(5),
+  a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
+gap> C  := BZCodeNC( O, I );
+a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
+gap> MinimumDistance(C);
+15
+gap> History(C);
+[ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
+  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
+,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
+r GF(5) ]",
+  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
+ode, a linear [6,2,5]3..4 extended code ]" ]
+</Example>
+
+<!--
+#
+# Binary code
+#
+O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+A := ExtendedCode( HammingCode(3,GF(2)) );;
+I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+C := BZCodeNC(O, I);
+#
+# Non binary code
+#
+O2 := ExtendedCode( GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))) );;
+O3 := ExtendedCode( GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))) );;
+O1 := DualCode( O3 );;
+MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+Cy := CyclicCodes(5, GF(5));;
+for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+O  := [ O1, O2, O3 ];
+I  := [ Cy[5], Cy[4], Cy[3] ];
+C  := BZCodeNC( O, I );
+MinimumDistance(C);
+History(C);
+-->
+
+</Section>
+</Chapter>
+
+
+<Chapter>
+<Heading>
+Bounds on codes, special matrices and miscellaneous functions
+</Heading>
+
+
+
+In this chapter we describe functions that determine bounds on the size
+and minimum distance of codes (Section
+<Ref Label="Distance bounds on codes" Style="Number"/>), 
+functions that determine bounds on the size
+and covering radius of codes (Section
+<Ref Label="Covering radius bounds on codes" Style="Number"/>), 
+functions that
+work with special matrices <Package>GUAVA</Package> needs for 
+several codes (see
+Section <Ref Label="Special matrices in GUAVA" Style="Number"/>),  
+and constructing codes or performing calculations with codes 
+(see Section 
+<Ref Label="Miscellaneous functions" Style="Number"/>).
+
+
+<Section>
+<Heading>
+Distance bounds on codes
+</Heading>
+<Label Name="Distance bounds on codes"/>
+
+
+This  section describes the functions that calculate estimates for upper
+bounds on the size and minimum distance of codes. Several algorithms are
+known to compute a largest  number of words a code can have with  given
+length and minimum distance. It is important however to understand that
+in some cases the true upper bound is unknown.  A code which has a  size
+equalto the calculated upper bound may not have been found.  However,
+codes that have a larger size do not exist.
+<P/>
+A second way to obtain bounds is a table. In 
+<Package>GUAVA</Package>, an extensive table
+is implemented for linear codes over <M>GF(2)</M>, <M>GF(3)</M> 
+and <M>GF(4)</M>. It contains bounds on the minimum distance for given
+<!--word length and dimension.  For binary codes, it contains entries for 
+word length less than or equal to <M>257</M>. For codes over <M>GF(3)</M>
+and <M>GF(4)</M>, it contains entries for word length less than or 
+equal to <M>130</M>. These tables have not been maintained since 1998.-->
+word length and dimension.  It contains entries for word lengths less than
+or equal to <M>257</M>, <M>243</M> and <M>256</M> for codes over <M>GF(2)</M>,
+<M>GF(3)</M> and <M>GF(4)</M> respectively.
+These entries were obtained from Brouwer's tables as of 11 May 2006.
+For the latest information, please see
+A. E. Brouwer's tables <Cite Key="Br"/> on the internet.
+
+<P/>
+Firstly, we describe functions that compute specific upper bounds 
+on the code size (see 
+<Ref Func="UpperBoundSingleton" Style="Number"/>,     
+<Ref Func="UpperBoundHamming" Style="Number"/>,
+<Ref Func="UpperBoundJohnson" Style="Number"/>,    
+<Ref Func="UpperBoundPlotkin" Style="Number"/>,    
+<Ref Func="UpperBoundElias" Style="Number"/>     and
+<Ref Func="UpperBoundGriesmer" Style="Number"/>).
+<P/>
+Next we describe a function that computes 
+<Package>GUAVA</Package>'s best upper bound on
+the code size (see 
+<Ref Func="UpperBound" Style="Number"/>).
+<P/>
+Then we describe two functions that compute a lower and upper bound on
+the minimum distance of a code (see  
+<Ref Func="LowerBoundMinimumDistance" Style="Number"/>  and
+<Ref Func="UpperBoundMinimumDistance" Style="Number"/>).
+<P/>
+Finally, we describe a function that returns a lower and upper  bound  on
+the minimum distance with given parameters and a description of how the
+bounds were obtained (see 
+<Ref Func="BoundsMinimumDistance" Style="Number"/>).
+
+<Index>
+bounds, Singleton
+</Index>
+
+<ManSection Label="UpperBoundSingleton">
+<Func Name="UpperBoundSingleton" Arg=" n d q "/>
+
+<Description>
+<C>UpperBoundSingleton</C> returns the Singleton bound for a code of 
+length <A>n</A>, minimum distance <A>d</A> over a field of size
+<A>q</A>. This bound is based on the shortening of codes.  
+By shortening an <M>(n,  M, d)</M> code <M>d-1</M> times,  
+an <M>(n-d+1,M,1)</M> code results, with <M>M  \leq  q^{n-d+1}</M>
+(see
+<Ref Func="ShortenedCode" Style="Number"/>). Thus
+
+<Display>
+M \leq q^{n-d+1}.
+</Display>
+
+<Index>
+maximum distance separable
+</Index>
+Codes that meet this bound are called <E>maximum distance separable</E> 
+(see
+<Ref Func="IsMDSCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundSingleton(4, 3, 5);
+25
+gap> C := ReedSolomonCode(4,3);; Size(C);
+25
+gap> IsMDSCode(C);
+true 
+</Example>
+
+<Index>
+bounds, Hamming
+</Index>
+<Index>
+bounds, sphere packing bound
+</Index>
+<Index>
+perfect
+</Index>
+
+<ManSection Label="UpperBoundHamming">
+<Func Name="UpperBoundHamming" Arg=" n d q "/>
+
+<Description>
+The Hamming bound (also known as the <E>sphere packing bound</E>) 
+returns an upper bound on the size of a code of length <A>n</A>, 
+minimum distance <A>d</A>, over a field of size <A>q</A>. 
+The Hamming bound is obtained by dividing the contents
+of the entire space <M>GF(q)^n</M> 
+by the contents of a ball with radius
+<M>\lfloor(d-1) / 2\rfloor</M>.  As all these balls are disjoint, 
+they can never contain more than the whole vector  space.  
+<Display>
+M \leq {q^n \over V(n,e)},
+</Display>
+where <M>M</M> is the maxmimum number of codewords and 
+<M>V(n,e)</M>
+is equal to the contents of a ball of radius <M>e</M> (see
+<Ref Func="SphereContent" Style="Number"/>).  
+This bound is useful for small values of <A>d</A>.  
+Codes for which equality holds are called <E>perfect</E> 
+(see <Ref Func="IsPerfectCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundHamming( 15, 3, 2 );
+2048
+gap> C := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> Size( C );
+2048 
+</Example>
+
+
+<Index>bounds, Johnson
+</Index>
+
+
+<ManSection Label="UpperBoundJohnson">
+<Func Name="UpperBoundJohnson" Arg=" n d "/>
+
+<Description>
+The Johnson bound is an improved version of the Hamming bound (see
+<Ref Func="UpperBoundHamming" Style="Number"/>).   
+In addition to the Hamming bound, it takes into
+account the elements of the space outside the balls of radius 
+<M>e</M> around the elements of the code. 
+The Johnson bound only works for binary codes.
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundJohnson( 13, 5 );
+77
+gap> UpperBoundHamming( 13, 5, 2);
+89   # in this case the Johnson bound is better 
+</Example>
+
+<Index>bounds, Plotkin
+</Index>
+<ManSection Label="UpperBoundPlotkin">
+<Func Name="UpperBoundPlotkin" Arg=" n d q "/>
+
+<Description>
+The function <C>UpperBoundPlotkin</C> calculates the sum of the
+distances of all ordered pairs of different codewords. 
+It is based on the fact that the minimum distance is at most 
+equal to the average distance. It is a
+good bound if the weights of the codewords do not differ much. It results
+in: 
+
+<Display>
+M \leq {d \over {d-(1-1/q)n}},
+</Display>
+where <M>M</M> is the maximum number
+of codewords.  In this case, <A>d</A>  must be larger than 
+<M>(1-1/q)n</M>, but by shortening the code, the 
+case <M>d \ \ \langle\ \  (1-1/q)n</M> is covered.
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundPlotkin( 15, 7, 2 );
+32
+gap> C := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> Size(C);
+32
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 
+</Example>
+<!--
+UpperBoundPlotkin( 15, 7, 2 );
+C := BCHCode( 15, 7, GF(2) );
+Size(C);
+WeightDistribution(C);
+-->
+
+<Index>
+bounds, Elias
+</Index>
+<ManSection Label="UpperBoundElias">
+<Func Name="UpperBoundElias" Arg=" n d q "/>
+
+<Description>
+The Elias bound is an improvement of the Plotkin bound (see
+<Ref Func="UpperBoundPlotkin" Style="Number"/>) 
+for large codes. Subcodes are used to decrease the
+size of the code, in this case the subcode of all codewords within a
+certain ball. This bound is useful  for large codes with relatively small
+minimum distances.
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundPlotkin( 16, 3, 2 );
+12288
+gap> UpperBoundElias( 16, 3, 2 );
+10280 
+gap> UpperBoundElias( 20, 10, 3 );
+16255
+</Example>
+
+
+<Index>
+bounds, Griesmer
+</Index>
+<ManSection Label="UpperBoundGriesmer">
+<Func Name="UpperBoundGriesmer" Arg=" n d q "/>
+
+<Description>
+The Griesmer bound is valid only for linear codes.  It is obtained by
+counting the number of equal symbols in each row of the generator matrix
+of the code. By omitting the coordinates in which all rows have a zero, a
+smaller code results.  The Griesmer bound is obtained by repeating this
+proces until a trivial code is left in the end.
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBoundGriesmer( 13, 5, 2 );
+64
+gap> UpperBoundGriesmer( 18, 9, 2 );
+8        # the maximum number of words for a linear code is 8
+gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+20       # this non-linear code has 20 elements 
+</Example>
+<!--
+UpperBoundGriesmer( 13, 5, 2 );
+UpperBoundGriesmer( 18, 9, 2 );
+Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+-->
+
+<Index>
+Griesmer code
+</Index>
+
+<ManSection Label="IsGriesmerCode">
+<Func Name="IsGriesmerCode" Arg=" C "/>
+
+<Description>
+<C>IsGriesmerCode</C> returns `true' if a linear code <A>C</A>
+is a Griesmer code, and `false' otherwise.
+A code is called <E>Griesmer</E> if its length satisfies
+
+<Display>
+n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.
+</Display>
+</Description>
+</ManSection>
+
+<Example>
+gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
+false 
+</Example>
+
+
+<Index>
+<M>A(n,d)</M>
+</Index>
+
+<ManSection Label="UpperBound">
+<Func Name="UpperBound" Arg=" n d q "/>
+
+<Description>
+<C>UpperBound</C> returns the best known upper bound 
+<M>A(n,d)</M> for the size of a code of length <A>n</A>, 
+minimum distance <A>d</A> over a  field of size <A>q</A>.
+The function <C>UpperBound</C> first checks for 
+trivial cases (like <M>d=1</M> or <M>n=d</M>), and if the 
+value is in the  built-in table. Then it calculates
+the minimum value of the upper bound using the methods of Singleton (see
+<Ref Func="UpperBoundSingleton" Style="Number"/>),  Hamming (see 
+<Ref Func="UpperBoundHamming" Style="Number"/>), Johnson  (see
+<Ref Func="UpperBoundJohnson" Style="Number"/>), Plotkin  (see  
+<Ref Func="UpperBoundPlotkin" Style="Number"/>)  and Elias (see
+<Ref Func="UpperBoundElias" Style="Number"/>).  If the code is binary, 
+<M>A(n, 2\cdot \ell-1) =  A(n+1,2\cdot \ell)</M>, so the 
+<C>UpperBound</C> takes the minimum of the values obtained from
+all methods for the parameters 
+<M>(n, 2\cdot\ell-1)</M> and <M>(n+1, 2\cdot \ell)</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> UpperBound( 10, 3, 2 );
+85
+gap> UpperBound( 25, 9, 8 );
+1211778792827540 
+</Example>
+
+
+<ManSection Label="LowerBoundMinimumDistance">
+<Func Name="LowerBoundMinimumDistance" Arg=" C "/>
+
+<Description>
+In this form, <C>LowerBoundMinimumDistance</C>
+returns a lower bound for the minimum distance of code <A>C</A>.
+<P/>
+This command can also be called using the syntax
+<C>LowerBoundMinimumDistance( n, k, F )</C>.
+In this form, <C>LowerBoundMinimumDistance</C> returns a 
+lower bound for the minimum distance of the best known linear
+code of length <A>n</A>, dimension <A>k</A> over field <A>F</A>.
+It uses the  mechanism explained in section
+<Ref Label="BoundsMinimumDistance" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := BCHCode( 45, 7 );
+a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
+gap> LowerBoundMinimumDistance( C );
+7     # designed distance is lower bound for minimum distance 
+gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
+10 
+</Example>
+<!--
+C := BCHCode( 45, 7 );
+LowerBoundMinimumDistance( C );
+LowerBoundMinimumDistance( 45, 23, GF(2) );
+-->
+
+<Index>
+ bound, Gilbert-Varshamov lower
+</Index>
+
+<ManSection Label="LowerBoundGilbertVarshamov">
+<Func Name="LowerBoundGilbertVarshamov" Arg=" n d q "/>
+
+<Description>
+This is the lower bound due (independently) to 
+Gilbert and Varshamov. It says that for each 
+<A>n</A> and <A>d</A>, there exists a linear code 
+having length  <M>n</M> and minimum distance <M>d</M> at least of size
+<M>q^{n-1}/ SphereContent(n-1,d-2,GF(q))</M>. 
+</Description>
+</ManSection>
+
+<Example>
+gap> LowerBoundGilbertVarshamov(3,2,2);
+4
+gap> LowerBoundGilbertVarshamov(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,2,2);
+2
+</Example>
+<!--
+LowerBoundGilbertVarshamov(3,2,2);
+LowerBoundGilbertVarshamov(3,3,2);
+LowerBoundMinimumDistance(3,3,2);
+LowerBoundMinimumDistance(3,2,2);
+-->
+
+<Index>
+ bound, sphere packing lower
+</Index>
+
+<ManSection Label="LowerBoundSpherePacking">
+<Func Name="LowerBoundSpherePacking" Arg=" n d q "/>
+
+<Description>
+This is the lower bound due (independently) to 
+Gilbert and Varshamov. It says that for each <A>n</A> and 
+<A>r</A>, there exists an unrestricted code at least of size
+<M>q^n/ SphereContent(n,d,GF(q))</M>
+minimum distance <M>d</M>. 
+</Description>
+</ManSection>
+
+<Example>
+gap> LowerBoundSpherePacking(3,2,2);
+2
+gap> LowerBoundSpherePacking(3,3,2);
+1
+</Example>
+<!--
+LowerBoundSpherePacking(3,2,2);
+LowerBoundSpherePacking(3,3,2);
+-->
+
+
+<ManSection Label="UpperBoundMinimumDistance">
+<Func Name="UpperBoundMinimumDistance" Arg=" C "/>
+
+<Description>
+In this form, <C>UpperBoundMinimumDistance</C> returns an upper bound for the
+minimum distance of code <A>C</A>. For unrestricted codes, it just returns the
+word length. For linear codes, it takes the minimum of the possibly known
+value from the method of construction, the weight of the generators, and
+the value from the table (see 
+<Ref Label="BoundsMinimumDistance" Style="Number"/>).
+<P/>
+This command can also be called using the syntax
+<C>UpperBoundMinimumDistance( n, k, F )</C>.
+In this form, <C>UpperBoundMinimumDistance</C> returns an upper bound for the
+minimum distance of the best known linear code of length 
+<A>n</A>, dimension <A>k</A>  over field <A>F</A>.  
+It uses the mechanism explained in section
+<Ref Label="BoundsMinimumDistance" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := BCHCode( 45, 7 );;
+gap> UpperBoundMinimumDistance( C );
+9 
+gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
+11 
+</Example>
+<!--
+C := BCHCode( 45, 7 );;
+UpperBoundMinimumDistance( C );
+UpperBoundMinimumDistance( 45, 23, GF(2) );
+-->
+
+<ManSection Label="BoundsMinimumDistance">
+<Func Name="BoundsMinimumDistance" Arg=" n k F "/>
+
+<Description>
+The function <C>BoundsMinimumDistance</C> calculates a lower and upper bound
+for the minimum distance of an optimal linear code with word length 
+<A>n</A>, dimension <A>k</A> over field <A>F</A>. The function 
+returns a record with the two bounds and an explanation for 
+each bound. The function <C>Display</C> can be
+used to show the explanations.
+<P/>
+The values for the lower and upper bound are obtained from a
+table. <Package>GUAVA</Package> has tables containing lower 
+and upper bounds for <M>q=2 (n \leq 257), <!--3, 4 (n \leq 130)</M>.  
+(Current as of 1998 - now out of date.)-->
+3 (n \leq 243), 4 (n \leq 256)</M>. (Current as of 11 May 2006.)
+These tables were derived from the table of Brouwer. 
+(See <Cite Key="Br"/>,
+<URL>http://www.win.tue.nl/~aeb/voorlincod.html</URL> for the most
+recent data.)
+For codes over other fields and for larger
+word lengths, trivial bounds are used.
+<P/>
+The resulting record can be used in the function 
+<C>BestKnownLinearCode</C> 
+(see <Ref Func="BestKnownLinearCode" Style="Number"/>) 
+to construct a code with minimum distance
+equal to the lower bound.
+</Description>
+</ManSection>
+
+<Example>
+gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
+an optimal linear [7,3,d] code over GF(2) has d=4
+------------------------------------------------------------------------------
+Lb(7,3)=4, by shortening of:
+Lb(8,4)=4, u u+v construction of C1 and C2:
+Lb(4,3)=2, dual of the repetition code
+Lb(4,1)=4, repetition code
+------------------------------------------------------------------------------
+Ub(7,3)=4, Griesmer bound
+# The lower bound is equal to the upper bound, so a code with
+# these parameters is optimal.
+gap> C := BestKnownLinearCode( bounds );; Display( C );
+a linear [7,3,4]2..3 shortened code of
+a linear [8,4,4]2 U U+V construction code of
+U: a cyclic [4,3,2]1 dual code of
+   a cyclic [4,1,4]2 repetition code over GF(2)
+V: a cyclic [4,1,4]2 repetition code over GF(2)
+</Example>
+<!--
+bounds := BoundsMinimumDistance( 7, 3 );; 
+DisplayBoundsInfo( bounds );
+C := BestKnownLinearCode( bounds );; 
+Display( C );
+-->
+
+</Section>
+
+
+<Section>
+<Heading>
+Covering radius bounds on codes
+</Heading>
+<Label Name="Covering radius bounds on codes"/>
+
+
+<ManSection Label="BoundsCoveringRadius">
+<Func Name="BoundsCoveringRadius" Arg=" C "/>
+
+<Description>
+<C>BoundsCoveringRadius</C> returns a list of integers.
+The first entry of this list is the maximum of some lower bounds
+for the covering radius of <A>C</A>,
+the last entry the minimum of some upper bounds of <A>C</A>.
+<P/>
+If the covering radius of <A>C</A> is known, a list of length 1 is
+returned.
+<C>BoundsCoveringRadius</C> makes use of the functions
+<C>GeneralLowerBoundCoveringRadius</C> and
+<C>GeneralUpperBoundCoveringRadius</C>.
+</Description>
+</ManSection>
+
+<Example>
+gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
+[ 3 .. 4 ]
+gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
+[ 1 ] 
+</Example>
+
+
+<ManSection Label="IncreaseCoveringRadiusLowerBound">
+<Func Name="IncreaseCoveringRadiusLowerBound" Arg=" C [stopdist] [startword] "/>
+
+<Description>
+<C>IncreaseCoveringRadiusLowerBound</C> tries to increase the lower 
+bound of
+the covering radius of <A>C</A>. It does this by means of a probabilistic
+algorithm.  This algorithm takes a random word in <M>GF(q)^n</M>   (or
+<A>startword</A> if it is specified), and,  by changing random coordinates,
+tries to get as far from <A>C</A> as possible.  If changing a coordinate
+finds a word that has a larger distance to the code than the previous
+one, the change is made permanent, and the algorithm starts all over
+again. If changing a coordinate does not find a coset leader that is
+further away from the code, then the change is made permanent with a
+chance of 1 in 100, if it gets the word closer to the code, or with a
+chance of 1 in 10, if the word stays at the same distance. Otherwise, the
+algorithm starts again with the same word as before.
+<P/>
+If the algorithm did not allow changes that decrease the distance to  the
+code, it might get stuck in a sub-optimal situation  (the coset leader
+corresponding to such a situation - i.e.  no coordinate of this coset
+leader can be changed in such a way that we get at a larger distance from
+the code - is called an <E>orphan</E>).
+<P/>
+If the algorithm finds a word that has distance <A>stopdist</A> to the
+code, it ends and returns that word,  which can be used for further
+investigations.
+<P/>
+The variable <A>InfoCoveringRadius</A> can be set to 
+<A>Print</A> to print the maximum distance reached so far every 
+1000 runs.  The algorithm can be interrupted with <B>ctrl-C</B>, 
+allowing the user to look at the word that is
+currently being examined (called `current'), or to change the chances
+that the new word is made permanent (these are called  
+`staychance'  and `downchance'). If one of these variables is 
+<M>i</M>, then it corresponds with
+a <M>i</M> in 100 chance.
+<P/>
+At the moment,  the  algorithm  is  only  useful for codes with small
+dimension, where small means that the elements of the code fit in the
+memory. It works with larger codes, however, but when you  use it for
+codes with large dimension, you should be <E>very</E> patient. If running  the
+algorithm quits GAP (due to  memory  problems),  you can change the
+global variable <A>CRMemSize</A> to a lower value.  This might cause the
+algorithm to run slower, but without quitting GAP.  The only way  to
+find out the best value of <A>CRMemSize</A> is by experimenting.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> IncreaseCoveringRadiusLowerBound(C,10);
+Number of runs: 1000  best distance so far: 3
+Number of runs: 2000  best distance so far: 3
+Number of changes: 100
+Number of runs: 3000  best distance so far: 3
+Number of runs: 4000  best distance so far: 3
+Number of runs: 5000  best distance so far: 3
+Number of runs: 6000  best distance so far: 3
+Number of runs: 7000  best distance so far: 3
+Number of changes: 200
+Number of runs: 8000  best distance so far: 3
+Number of runs: 9000  best distance so far: 3
+Number of runs: 10000  best distance so far: 3
+Number of changes: 300
+Number of runs: 11000  best distance so far: 3
+Number of runs: 12000  best distance so far: 3
+Number of runs: 13000  best distance so far: 3
+Number of changes: 400
+Number of runs: 14000  best distance so far: 3
+user interrupt at... 
+#
+# used ctrl-c to break out of execution
+#
+... called from 
+IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
+ function( arguments ) called from read-eval-loop
+Entering break read-eval-print loop ...
+you can 'quit;' to quit to outer loop, or
+you can 'return;' to continue
+brk> current;
+[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+brk>
+gap> CoveringRadius(C);
+3
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+IncreaseCoveringRadiusLowerBound(C,10);
+current;
+CoveringRadius(C);
+-->
+
+
+<ManSection Label="ExhaustiveSearchCoveringRadius">
+<Func Name="ExhaustiveSearchCoveringRadius" Arg=" C "/>
+
+<Description>
+<C>ExhaustiveSearchCoveringRadius</C> does an exhaustive search to find the
+covering radius of <A>C</A>. Every time a coset leader of a coset with
+weight <M>w</M> is found, the function tries to find a coset leader of a coset
+with weight <M>w+1</M>. It does this by enumerating all words of 
+weight <M>w+1</M>,
+and checking whether a word is a coset leader. The start weight is the
+current known lower bound on the covering radius.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> ExhaustiveSearchCoveringRadius(C);
+Trying 3 ...
+[ 3 .. 5 ]
+gap> CoveringRadius(C);
+3
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+ExhaustiveSearchCoveringRadius(C);
+CoveringRadius(C);
+-->
+
+
+<ManSection Label="GeneralLowerBoundCoveringRadius">
+<Func Name="GeneralLowerBoundCoveringRadius" Arg=" C "/>
+
+<Description>
+<C>GeneralLowerBoundCoveringRadius</C> returns a lower bound on the covering
+radius of <A>C</A>. It uses as many functions which names start with
+<C>LowerBoundCoveringRadius</C> as possible to find the best known lower bound
+(at least that <Package>GUAVA</Package> knows of) 
+together with tables for the covering
+radius of binary linear codes with length not greater than <M>64</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralLowerBoundCoveringRadius(C);
+2
+gap> CoveringRadius(C);
+3
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+GeneralLowerBoundCoveringRadius(C);
+CoveringRadius(C);
+-->
+
+<ManSection Label="GeneralUpperBoundCoveringRadius">
+<Func Name="GeneralUpperBoundCoveringRadius" Arg=" C "/>
+
+<Description>
+<C>GeneralUpperBoundCoveringRadius</C> returns an upper bound on the
+covering radius of <A>C</A>. It uses as many functions which
+names start with <C>UpperBoundCoveringRadius</C> 
+as possible to find the best known upper bound
+(at least that <Package>GUAVA</Package> knows of).
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralUpperBoundCoveringRadius(C);
+4
+gap> CoveringRadius(C);
+3
+
+</Example>
+
+<ManSection Label="LowerBoundCoveringRadiusSphereCovering">
+<Func Name="LowerBoundCoveringRadiusSphereCovering" Arg=" n M [F] false "/>
+
+<Description>
+This command can also be called using the syntax
+<C>LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusSphereCovering</C> is
+<A>false</A>, then it returns a lower bound for the covering radius of a
+code of size <A>M</A> and length <A>n</A>.
+Otherwise, it returns a lower bound for the size of a code of length
+<A>n</A> and covering radius <A>r</A>.
+<P/>
+<A>F</A> is the field over which the code is defined. 
+If <A>F</A> is omitted, it is
+assumed that the code is over <M>GF(2)</M>.
+The bound is computed according to the sphere covering bound:
+<Display>
+M \cdot V_q(n,r) \geq q^n
+</Display>
+where <M>V_q(n,r)</M> is the size of a sphere of radius 
+<M>r</M> in <M>GF(q)^n</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+6
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+Size(C);
+CoveringRadius(C);
+LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+-->
+
+
+<ManSection Label="LowerBoundCoveringRadiusVanWee1">
+<Func Name="LowerBoundCoveringRadiusVanWee1" Arg=" n M [F] false "/>
+
+<Description>
+This command can also be called using the syntax
+<C>LowerBoundCoveringRadiusVanWee1( n, r, [F,] true )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusVanWee1</C> is
+<A>false</A>, then it returns a lower bound for the covering radius of a
+code of size <A>M</A> and length <A>n</A>.
+Otherwise, it returns a lower bound for the size of a code of length
+<A>n</A> and covering radius <A>r</A>.
+<P/>
+<A>F</A> is the field over which the code is defined. 
+If <A>F</A> is omitted, it is assumed that the code is over <M>GF(2)</M>.
+<P/>
+The Van Wee bound is an improvement of the sphere covering bound:
+<Display>
+M \cdot \left\{ V_q(n,r) -
+\frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil}
+\left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right)
+\right\} \geq q^n
+</Display>
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+6
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+Size(C);
+CoveringRadius(C);
+LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+-->
+
+
+<ManSection Label="LowerBoundCoveringRadiusVanWee2">
+<Func Name="LowerBoundCoveringRadiusVanWee2" Arg=" n M false "/>
+
+<Description>
+This command can also be called using the syntax
+<C>LowerBoundCoveringRadiusVanWee2( n, r [,true] )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusVanWee2</C> 
+is <A>false</A>,
+then it returns a lower bound for the covering radius of a code of size
+<A>M</A> and length <A>n</A>. Otherwise, it returns a lower 
+bound for the size of a code of length <A>n</A> and 
+covering radius <A>r</A>.
+<P/>
+This bound only works for binary codes. It is based on the following
+inequality:
+<Display>
+M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right)
+V_2(n,r) + \varepsilon
+V_2(n,r-2) \right)}
+{(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)}
+\geq 2^n,
+</Display>
+where
+
+<Display>
+\varepsilon = {r+2 \choose 2} \left\lceil
+{n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil
+- {n-r+1 \choose 2}.
+</Display>
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
+7
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+Size(C);
+CoveringRadius(C);
+LowerBoundCoveringRadiusVanWee2(10,32,false);
+LowerBoundCoveringRadiusVanWee2(10,3,true);
+-->
+
+
+<ManSection Label="LowerBoundCoveringRadiusCountingExcess">
+<Func Name="LowerBoundCoveringRadiusCountingExcess" Arg=" n M false "/>
+
+<Description>
+This command can also be called with
+<C>LowerBoundCoveringRadiusCountingExcess( n, r [,true] )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusCountingExcess</C> is
+<A>false</A>, then it returns a lower bound for the covering radius of a  code
+of size <A>M</A> and length <A>n</A>. Otherwise, it returns a 
+lower bound for the size of a code of length <A>n</A> and 
+covering radius <A>r</A>.
+<P/>
+This bound only works for binary codes. It is based on the following
+inequality:
+<Display>
+M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq
+(\rho + \varepsilon) 2^n,
+</Display>
+where
+
+<Display>
+\varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)
+</Display>
+and
+
+<Display>
+\rho = \left\{
+\begin{array}{l}
+n-3+\frac{2}{n}, \ \ \  \ \ \  {\rm if}\   r = 2\\
+n-r-1  ,        \ \ \  \ \ \   {\rm if}\   r \geq 3 .
+\end{array}
+\right.
+</Display>
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
+0
+gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
+7
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+Size(C);
+CoveringRadius(C);
+LowerBoundCoveringRadiusCountingExcess(10,32,false);
+LowerBoundCoveringRadiusCountingExcess(10,3,true);
+-->
+
+
+
+<ManSection Label="LowerBoundCoveringRadiusEmbedded1">
+<Func Name="LowerBoundCoveringRadiusEmbedded1" Arg=" n M false "/>
+
+<Description>
+This command can also be called with
+<C>LowerBoundCoveringRadiusEmbedded1( n, r [,true] )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusEmbedded1</C> 
+is 'false', then it returns a lower bound for the 
+covering radius of a code of size <A>M</A> and length 
+<A>n</A>. Otherwise, it returns a lower bound for the size of a
+code of length <A>n</A> and covering radius <A>r</A>.
+<P/>
+This bound only works for binary codes. It is based on the following
+inequality:
+
+<Display>
+M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq
+2^n - A( n, 2r+1 ) {2r \choose r},
+</Display>
+where <M>A(n,d)</M> denotes the maximal cardinality 
+of a (binary) code of length <M>n</M> and minimum distance 
+<M>d</M>. The function <C>UpperBound</C> is used to
+compute this value.
+<P/>
+Sometimes <C>LowerBoundCoveringRadiusEmbedded1</C> is better than
+<C>LowerBoundCoveringRadiusEmbedded2</C>, sometimes it is the 
+other way around.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
+7
+
+</Example>
+<!--
+C:=RandomLinearCode(10,5,GF(2));
+Size(C);
+CoveringRadius(C);
+LowerBoundCoveringRadiusEmbedded1(10,32,false);
+LowerBoundCoveringRadiusEmbedded1(10,3,true);
+-->
+
+
+<ManSection Label="LowerBoundCoveringRadiusEmbedded2">
+<Func Name="LowerBoundCoveringRadiusEmbedded2" Arg=" n M false "/>
+
+<Description>
+This command can also be called with
+<C>LowerBoundCoveringRadiusEmbedded2( n, r [,true] )</C>.
+If the last argument of <C>LowerBoundCoveringRadiusEmbedded2</C> 
+is 'false',
+then it returns a lower bound for the covering radius of a code  of  size
+<A>M</A> and length <A>n</A>. Otherwise, it returns a 
+lower bound for the size of a code of length <A>n</A> 
+and covering radius <A>r</A>.
+<P/>
+This bound only works for binary codes. It is based on the following
+inequality:
+
+<Display>
+M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq
+2^n - 2A( n, 2r+1 ) {2r \choose r},
+</Display>
+where <M>A(n,d)</M> denotes the maximal cardinality  
+of a (binary) code of length <M>n</M> and minimum distance 
+<M>d</M>. The function <C>UpperBound</C> is used to
+compute this value.
+<P/>
+Sometimes <C>LowerBoundCoveringRadiusEmbedded1</C> is better than
+<C>LowerBoundCoveringRadiusEmbedded2</C>, sometimes it is the 
+other way around.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+6
+gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
+7
+
+</Example>
+
+<ManSection Label="LowerBoundCoveringRadiusInduction">
+<Func Name="LowerBoundCoveringRadiusInduction" Arg=" n r "/>
+
+<Description>
+<C>LowerBoundCoveringRadiusInduction</C> returns a lower 
+bound for the size of a code with length <A>n</A> and 
+covering radius <A>r</A>.
+<P/>
+If <M>n = 2r+2</M> and <M>r \geq 1</M>, the returned 
+value is <M>4</M>.
+<P/>
+If <M>n = 2r+3</M> and <M>r \geq 1</M>, the returned 
+value is <M>7</M>.
+<P/>
+If <M>n = 2r+4</M> and <M>r \geq 4</M>, the returned 
+value is <M>8</M>.
+<P/>
+Otherwise, <M>0</M> is returned.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> LowerBoundCoveringRadiusInduction(15,6);
+7
+
+</Example>
+<!--
+C:=RandomLinearCode(15,5,GF(2));
+CoveringRadius(C);
+LowerBoundCoveringRadiusInduction(15,6);
+-->
+
+
+<ManSection Label="UpperBoundCoveringRadiusRedundancy">
+<Func Name="UpperBoundCoveringRadiusRedundancy" Arg=" C "/>
+
+<Description>
+<C>UpperBoundCoveringRadiusRedundancy</C> returns the 
+redundancy of <A>C</A> as an upper bound for the covering 
+radius of <A>C</A>. <A>C</A> must be a linear code.
+</Description>
+</ManSection>
+
+<Index>
+external distance
+</Index>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusRedundancy(C);
+10
+
+</Example>
+<!--
+C:=RandomLinearCode(15,5,GF(2));
+CoveringRadius(C);
+UpperBoundCoveringRadiusRedundancy(C);
+-->
+
+
+<ManSection Label="UpperBoundCoveringRadiusDelsarte">
+<Func Name="UpperBoundCoveringRadiusDelsarte" Arg=" C "/>
+
+<Description>
+<C>UpperBoundCoveringRadiusDelsarte</C> returns an upper bound 
+for the covering radius of <A>C</A>. This upper bound is equal
+to the external distance of <A>C</A>, this is the minimum 
+distance of the dual code, if <A>C</A> is a linear code.
+<P/>
+This is described in Theorem 11.3.3 of <Cite Key="HP03"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusDelsarte(C);
+13
+</Example>
+<!--
+C:=RandomLinearCode(15,5,GF(2));
+CoveringRadius(C);
+UpperBoundCoveringRadiusDelsarte(C);
+-->
+
+
+<ManSection Label="UpperBoundCoveringRadiusStrength">
+<Func Name="UpperBoundCoveringRadiusStrength" Arg=" C "/>
+
+<Description>
+<C>UpperBoundCoveringRadiusStrength</C> returns an upper bound
+for the covering radius of <A>C</A>.
+<P/>
+First the code is punctured at the zero coordinates (i.e. the coordinates
+where all codewords have a zero). If the remaining code  has 
+<E>strength</E> 1
+(i.e. each coordinate contains each element of the field an equal number
+of times), then it returns <M>\frac{q-1}{q}m + (n-m)</M>  
+(where <M>q</M> is the size of the field and <M>m</M> is 
+the length of punctured code), otherwise it returns <M>n</M>. 
+This bound works for all codes.
+</Description>
+</ManSection>
+<Index>
+strength
+</Index>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusStrength(C);
+7
+</Example>
+<!--
+C:=RandomLinearCode(15,5,GF(2));
+CoveringRadius(C);
+UpperBoundCoveringRadiusStrength(C);
+-->
+
+<ManSection Label="UpperBoundCoveringRadiusGriesmerLike">
+<Func Name="UpperBoundCoveringRadiusGriesmerLike" Arg=" C "/>
+
+<Description>
+This function returns an upper bound for the covering radius
+of <A>C</A>, which must be linear, in a Griesmer-like fashion. It returns
+
+<Display>
+n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil
+</Display>
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusGriesmerLike(C);
+9
+
+</Example>
+<!--
+C:=RandomLinearCode(15,5,GF(2));
+CoveringRadius(C);
+UpperBoundCoveringRadiusGriesmerLike(C);
+-->
+
+<ManSection Label="UpperBoundCoveringRadiusCyclicCode">
+<Func Name="UpperBoundCoveringRadiusCyclicCode" Arg=" C "/>
+
+<Description>
+This function returns an upper bound for the covering radius
+of <A>C</A>, which must be a cyclic code. It returns
+
+<Display>
+n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,
+</Display>
+where <M>g(x)</M> is the generator polynomial of <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C:=CyclicCodes(15,GF(2))[3];
+a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
+gap> CoveringRadius(C);
+3
+gap> UpperBoundCoveringRadiusCyclicCode(C);
+3
+
+</Example>
+<!--
+C:=CyclicCodes(15,GF(2))[3];
+CoveringRadius(C);
+UpperBoundCoveringRadiusCyclicCode(C);
+-->
+
+
+</Section>
+
+<Section>
+<Heading>
+Special matrices in <Package>GUAVA</Package>
+</Heading>
+<Label Name="Special matrices in GUAVA"/>
+
+This section explains functions that work with special matrices 
+<Package>GUAVA</Package> needs for several codes.
+<P/>
+Firstly, we describe some matrix generating functions (see
+<Ref Func="KrawtchoukMat" Style="Number"/>, 
+<Ref Func="GrayMat" Style="Number"/>, 
+<Ref Func="SylvesterMat" Style="Number"/>, 
+<Ref Func="HadamardMat" Style="Number"/> and 
+<Ref Func="MOLS" Style="Number"/>).
+<P/>
+Next we describe two functions regarding a standard form of matrices (see
+<Ref Func="PutStandardForm" Style="Number"/> and 
+<Ref Func="IsInStandardForm" Style="Number"/>).
+<P/>
+Then we describe functions that return a matrix after a manipulation (see
+<Ref Func="PermutedCols" Style="Number"/>,             
+<Ref Func="VerticalConversionFieldMat" Style="Number"/>   and
+<Ref Func="HorizontalConversionFieldMat" Style="Number"/>).
+<P/>
+Finally, we describe functions that do some tests on matrices (see
+<Ref Func="IsLatinSquare" Style="Number"/> and 
+<Ref Func="AreMOLS" Style="Number"/>).
+
+
+<ManSection Label="KrawtchoukMat">
+<Func Name="KrawtchoukMat" Arg=" n q "/>
+
+<Description>
+<C>KrawtchoukMat</C> returns the <M>n+1</M> by <M>n+1</M> matrix 
+<M>K=(k_{ij})</M> defined by <M>k_{ij}=K_i(j)</M> 
+for <M>i,j=0,...,n</M>.  <M>K_i(j)</M> is the Krawtchouk
+number 
+(see <Ref Func="Krawtchouk" Style="Number"/>). 
+<A>n</A> must be a positive integer and <A>q</A> a prime
+power.  The Krawtchouk matrix is used in the 
+<E>MacWilliams identities</E>,
+defining the relation between the weight distribution of a code of length
+<A>n</A>  over a field of size <A>q</A>,  and its dual code. 
+Each call to <C>KrawtchoukMat</C> returns a new matrix, so it is 
+safe to modify the result.
+</Description>
+</ManSection>
+
+<Example>
+gap> PrintArray( KrawtchoukMat( 3, 2 ) );
+[ [   1,   1,   1,   1 ],
+  [   3,   1,  -1,  -3 ],
+  [   3,  -1,  -1,   3 ],
+  [   1,  -1,   1,  -1 ] ]
+gap> C := HammingCode( 3 );; a := WeightDistribution( C );
+[ 1, 0, 0, 7, 7, 0, 0, 1 ]
+gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+gap> k := Dimension( C );;
+gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
+[ 1, 0, 0, 0, 7, 0, 0, 0 ]
+gap> WeightDistribution( DualCode( C ) );
+[ 1, 0, 0, 0, 7, 0, 0, 0 ] 
+</Example>
+<!--
+PrintArray( KrawtchoukMat( 3, 2 ) );
+C := HammingCode( 3 );; a := WeightDistribution( C );
+n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+k := Dimension( C );;
+q^( -k ) * KrawtchoukMat( n, q ) * a;
+WeightDistribution( DualCode( C ) );
+-->
+
+
+<Index>
+Gary code
+</Index>
+<ManSection Label="GrayMat">
+<Func Name="GrayMat" Arg=" n F "/>
+
+<Description>
+<C>GrayMat</C> returns a list of all different vectors (see 
+GAP's <C>Vectors</C> command) of length <A>n</A> over the field <A>F</A>, 
+using Gray ordering. <A>n</A> must be a positive integer.   
+This order has the property that subsequent vectors
+differ in exactly one coordinate. The first vector is always the null
+vector. Each call to <C>GrayMat</C> returns a new matrix, so it is safe to
+modify the result.
+</Description>
+</ManSection>
+
+<Example>
+gap> GrayMat(3);
+[ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
+  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
+gap> G := GrayMat( 4, GF(4) );; Length(G);
+256          # the length of a GrayMat is always q^n
+gap> G[101] - G[100];
+[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 
+</Example>
+<!--
+GrayMat(3);
+G := GrayMat( 4, GF(4) );; Length(G);
+G[101] - G[100];
+-->
+
+<ManSection Label="SylvesterMat">
+<Func Name="SylvesterMat" Arg=" n "/>
+
+<Description>
+<C>SylvesterMat</C> returns the <M>n\times n</M> 
+Sylvester matrix of order <A>n</A>. This
+is a special case of the Hadamard matrices (see 
+<Ref Func="HadamardMat" Style="Number"/>). For this
+construction, <A>n</A> must be a power of <M>2</M>. Each 
+call to <C>SylvesterMat</C> returns a new matrix, so it is 
+safe to modify the result.
+</Description>
+</ManSection>
+
+<Example>
+gap> PrintArray(SylvesterMat(2));
+[ [   1,   1 ],
+  [   1,  -1 ] ]
+gap> PrintArray( SylvesterMat(4) );
+[ [   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1 ] ] 
+</Example>
+
+<Index>
+Hadamard matrix
+</Index>
+
+<ManSection Label="HadamardMat">
+<Func Name="HadamardMat" Arg=" n "/>
+
+<Description>
+<C>HadamardMat</C> returns a Hadamard matrix of order <A>n</A>. 
+This is an <M>n\times n</M> matrix with the property that 
+the matrix multiplied by its transpose
+returns <A>n</A> times the identity matrix. This is only possible for 
+<M>n=1, n=2</M> or in cases where <A>n</A> is a multiple of <M>4</M>. 
+If the matrix does not exist or is not known (as of 1998), 
+<C>HadamardMat</C> returns an error. A large number of
+construction methods is known to create these matrices for different
+orders. <C>HadamardMat</C> makes use of two construction methods (among which
+the Sylvester construction -- see 
+<Ref Func="SylvesterMat" Style="Number"/>). These methods cover
+most of the possible Hadamard matrices, although some special algorithms
+have not been implemented yet. The following orders less than 
+<M>100</M> do not yet have an implementation for a Hadamard 
+matrix in <Package>GUAVA</Package>: <M>28, 36, 52,
+76, 92</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> C := HadamardMat(8);; PrintArray(C);
+[ [   1,   1,   1,   1,   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
+  [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
+  [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
+  [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
+  [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
+gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
+true 
+</Example>
+
+
+<ManSection Label="VandermondeMat">
+<Func Name="VandermondeMat" Arg=" X a "/>
+
+<Description>
+The function <C>VandermondeMat</C> returns the 
+<M>(a+1)\times n</M> matrix of powers <M>x_i^j</M> where 
+<A>X</A> is a list of elements of a field,
+<M>X=\{ x_1,...,x_n\}</M>, and <A>a</A> is a
+non-negative integer. 
+</Description>
+</ManSection>
+
+<Example>
+gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+[ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
+  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
+gap> Display(M);
+ 1 2 4
+ 1 4 1
+ 1 1 1
+ 1 3 4
+</Example>
+<!--
+M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+Display(M);
+-->
+
+<Index>
+standard form
+</Index>
+
+<ManSection Label="PutStandardForm">
+<Func Name="PutStandardForm" Arg=" M [idleft] "/>
+
+<Description>
+We say that a <M>k\times n</M> matrix is in <E>standard form</E>
+if it is equal to the block matrix <M>(I\ |\ A)</M>, for 
+some <M>k\times (n-k)</M> matrix <M>A</M> and where
+<M>I</M> is the <M>k\times k</M> identity matrix.
+It follows from a basis result in linear algebra that,
+after a possible permutation of the columns,
+using elementary row operations, every matrix can be 
+reduced to standard form.
+<C>PutStandardForm</C> puts a matrix <A>M</A> in standard form, 
+and returns the permutation needed to do so. <A>idleft</A> 
+is a boolean that sets the position of the identity matrix in 
+<A>M</A>. (The default for <A>idleft</A> is `true'.)
+If <A>idleft</A> is set to `true', the identity
+matrix is put on the left side of <A>M</A>. 
+Otherwise, it is put at the right side. 
+(This option is useful when putting a check matrix of a code
+into standard form.)
+The function <C>BaseMat</C> also returns a similar standard form, but does not
+apply column permutations. The rows of the matrix still span the same
+vector space after <C>BaseMat</C>,  but after calling 
+<C>PutStandardForm</C>, this is not necessarily true.
+</Description>
+</ManSection>
+
+<Example>
+gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
+gap> PutStandardForm(M);                   # identity at the left side
+(2,3)
+gap> PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> PutStandardForm(M, false);            # identity at the right side
+(1,4,3)
+gap> PrintArray(M);
+[ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> C := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G:=MutableCopyMat(GeneratorMat(C));;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+
+</Example>
+
+<ManSection Label="IsInStandardForm">
+<Func Name="IsInStandardForm" Arg=" M [idleft] "/>
+
+<Description>
+<C>IsInStandardForm</C> determines if <A>M</A> is in standard form. 
+<A>idleft</A> is a boolean that indicates the position of the 
+identity matrix in <A>M</A>, as in <C>PutStandardForm</C> (see
+<Ref Func="PutStandardForm" Style="Number"/>).
+<C>IsInStandardForm</C> checks if the identity matrix is
+at the left side of <A>M</A>, otherwise if it is at the 
+right side. The elements of <A>M</A> may be elements  of
+any field.  
+</Description>
+</ManSection>
+
+<Example>
+gap> IsInStandardForm(IdentityMat(7, GF(2)));
+true
+gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
+true
+gap> IsInStandardForm([[1, 3, 2, 7]]);
+true
+gap> IsInStandardForm(HadamardMat(4));
+false 
+</Example>
+
+
+<ManSection Label="PermutedCols">
+<Func Name="PermutedCols" Arg=" M P "/>
+
+<Description>
+<C>PermutedCols</C> returns a matrix <A>M</A> with a permutation 
+<A>P</A> applied to its columns.
+</Description>
+</ManSection>
+
+<Example>
+gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
+[ [  1,  2,  3,  4 ],
+  [  1,  2,  3,  4 ] ]
+gap> PrintArray(PermutedCols(M, (1,2,3)));
+[ [  3,  1,  2,  4 ],
+  [  3,  1,  2,  4 ] ] 
+</Example>
+
+<ManSection Label="VerticalConversionFieldMat">
+<Func Name="VerticalConversionFieldMat" Arg=" M F "/>
+
+<Description>
+<C>VerticalConversionFieldMat</C> returns the matrix 
+<A>M</A> with its elements converted from a field 
+<M>F=GF(q^m)</M>, <M>q</M> prime, to a field <M>GF(q)</M>. Each
+element is replaced by its representation over the latter field, placed
+vertically in the matrix, using the <M>GF(p)</M>-vector space
+isomorphism 
+
+<Display>
+
+[...] : GF(q)\rightarrow GF(p)^m,
+</Display>
+with <M>q=p^m</M>. 
+<P/>
+If <A>M</A> is a <M>k</M> by <M>n</M> matrix, the result is 
+a <M>k\cdot m \times n</M> matrix,
+since each element of <M>GF(q^m)</M> can be represented  
+in <M>GF(q)</M> using <M>m</M> elements.
+</Description>
+</ManSection>
+
+<Example>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
+[ [  0*Z(3),  0*Z(3) ],
+  [  Z(3)^0,    Z(3) ],
+  [  0*Z(3),  0*Z(3) ],
+  [    Z(3),  Z(3)^0 ] ]
+gap> DefaultField( Flat(VCFM) );
+GF(3) 
+</Example>
+
+A similar function is <C>HorizontalConversionFieldMat</C> (see
+<Ref Func="HorizontalConversionFieldMat" Style="Number"/>).
+
+<ManSection Label="HorizontalConversionFieldMat">
+<Func Name="HorizontalConversionFieldMat" Arg=" M F "/>
+
+<Description>
+<C>HorizontalConversionFieldMat</C> returns the matrix <A>M</A> 
+with its elements converted from a field <M>F=GF(q^m)</M>, 
+<M>q</M> prime, to a field <M>GF(q)</M>. 
+Each element is replaced by its representation over the 
+latter field, placed horizontally in the matrix.
+<P/>
+If <A>M</A> is a <M>k \times n</M> matrix, the result is a 
+<M>k\times m\times n\cdot m</M> matrix. 
+The new word length of the resulting code is equal to 
+<M>n\cdot m</M>, because each element of <M>GF(q^m)</M> 
+can be represented in <M>GF(q)</M> using <M>m</M> elements. 
+The new dimension is equal to <M>k\times m</M> 
+because the new matrix should be a basis for the same number 
+of vectors as the old one.
+<P/>
+<C>ConversionFieldCode</C> uses horizontal conversion to 
+convert a code (see
+<Ref Func="ConversionFieldCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
+[ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
+  [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
+  [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
+  [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
+gap> DefaultField( Flat(HCFM) );
+GF(3) 
+</Example>
+
+A similar function is <C>VerticalConversionFieldMat</C> (see
+<Ref Func="VerticalConversionFieldMat" Style="Number"/>).
+
+<Index>
+mutually orthogonal Latin squares
+</Index>
+<Index>
+Latin square
+</Index>
+
+<ManSection Label="MOLS">
+<Func Name="MOLS" Arg=" q [n] "/>
+
+<Description>
+<C>MOLS</C> returns a list of <A>n</A> <E>Mutually Orthogonal 
+Latin Squares</E> (MOLS). A <E>Latin square</E> 
+of order <A>q</A> is a <M>q\times q</M> matrix whose
+entries are from a set <M>F_{q}</M> of <A>q</A> 
+distinct symbols (<Package>GUAVA</Package> uses the 
+integers from <M>0</M> to <A>q</A>) such that each row 
+and each column of the matrix contains each symbol exactly once.
+<P/>
+A set of Latin squares is a set of MOLS if and only if for each pair of
+Latin squares in this set, every ordered pair of elements that are in the
+same position in these matrices occurs exactly once.
+<P/>
+<A>n</A> must be less than <A>q</A>.  If <A>n</A> is omitted, 
+two MOLS are returned. If <A>q</A> is not a prime power,  
+at most <M>2</M> MOLS can be created. For all values
+of <A>q</A> with  <M>q > 2</M> and <M>q \neq 6</M>, 
+a list of MOLS can be constructed. However, 
+<Package>GUAVA</Package> does not yet construct MOLS for 
+<M>q\equiv 2 \pmod 4</M>.  If it is not possible to construct 
+<A>n</A> MOLS,  the function returns `false'.
+<P/>
+MOLS are used to create <A>q</A>-ary codes (see 
+<Ref Func="MOLSCode" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
+[ [  0,  1,  2,  3 ],
+  [  1,  0,  3,  2 ],
+  [  2,  3,  0,  1 ],
+  [  3,  2,  1,  0 ] ]
+gap> PrintArray( M[2] );
+[ [  0,  2,  3,  1 ],
+  [  1,  3,  2,  0 ],
+  [  2,  0,  1,  3 ],
+  [  3,  1,  0,  2 ] ]
+gap> PrintArray( M[3] );
+[ [  0,  3,  1,  2 ],
+  [  1,  2,  0,  3 ],
+  [  2,  1,  3,  0 ],
+  [  3,  0,  2,  1 ] ]
+gap> MOLS( 12, 3 );
+false 
+</Example>
+
+<ManSection Label="IsLatinSquare">
+<Func Name="IsLatinSquare" Arg=" M "/>
+
+<Description>
+<C>IsLatinSquare</C> determines if a matrix <A>M</A> is a 
+Latin square. For a Latin square of size <M>n\times n</M>,  
+each row and each column contains all the integers 
+<M>1,\dots,n</M> exactly once.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsLatinSquare([[1,2],[2,1]]);
+true
+gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
+false 
+</Example>
+
+<ManSection Label="AreMOLS">
+<Func Name="AreMOLS" Arg=" L "/>
+
+<Description>
+<C>AreMOLS</C> determines if <A>L</A> is a list of mutually 
+orthogonal Latin squares (MOLS). For each pair of 
+Latin squares in this list, the function checks if each ordered 
+pair of elements that are in the same position in
+these matrices occurs exactly once. The function <C>MOLS</C> 
+creates MOLS (see <Ref Func="MOLS" Style="Number"/>).
+</Description>
+</ManSection>
+
+<Example>
+gap> M := MOLS(4,2);
+[ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
+  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
+gap> AreMOLS(M);
+true 
+</Example>
+
+
+</Section>
+
+<Section>
+<Heading>
+Some functions related to the norm of a code
+</Heading>
+<Label Name="Some functions related to the norm of a code"/>
+
+In this section, some functions that can be used to compute the norm of a
+code and to decide upon its normality are discussed.
+Typically, these are applied to binary linear codes.
+The definitions of this section were introduced in
+Graham and Sloane <Cite Key="GS85"/>.
+
+<ManSection Label="CoordinateNorm">
+<Func Name="CoordinateNorm" Arg=" C coord "/>
+
+<Description>
+<C>CoordinateNorm</C> returns the norm of <A>C</A> with respect to
+coordinate <A>coord</A>. If 
+<M>C_a = \{ c \in C \ |\ c_{coord} = a \}</M>,
+then the norm of <A>C</A> with respect to <A>coord</A> is
+defined as
+
+<Display>
+\max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),
+</Display>
+with the convention that <M>d(x,C_a) = n</M> 
+if <M>C_a</M> is empty.
+</Description>
+</ManSection>
+
+<Example>
+gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
+3 
+</Example>
+
+<Index>
+norm of a code
+</Index>
+
+<ManSection Label="CodeNorm">
+<Func Name="CodeNorm" Arg=" C "/>
+
+<Description>
+<C>CodeNorm</C> returns the norm of <A>C</A>. 
+The <E>norm</E> of a code is defined as
+the minimum of the norms for the respective coordinates of the code.  In
+effect, for each coordinate <C>CoordinateNorm</C> 
+is called, and the minimum
+of the calculated numbers is returned.
+</Description>
+</ManSection>
+
+<Example>
+gap> CodeNorm( HammingCode( 3, GF(2) ) );
+3 
+</Example>
+
+<Index>
+acceptable coordinate
+</Index>
+
+<ManSection Label="IsCoordinateAcceptable">
+<Func Name="IsCoordinateAcceptable" Arg=" C coord "/>
+
+<Description>
+<C>IsCoordinateAcceptable</C> returns `true' if
+coordinate <A>coord</A> of <A>C</A> is acceptable.
+A coordinate is called <E>acceptable</E> if the norm of
+the code with respect to that coordinate is
+not more than two times the covering radius of
+the code plus one.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
+true 
+</Example>
+
+<Index>
+acceptable coordinate
+</Index>
+
+<ManSection Label="GeneralizedCodeNorm">
+<Func Name="GeneralizedCodeNorm" Arg=" C subcode1 subscode2 ... subcodek "/>
+
+<Description>
+<C>GeneralizedCodeNorm</C> returns the <A>k</A>-norm of <A>C</A> 
+with respect to <A>k</A> subcodes.
+</Description>
+</ManSection>
+
+<Example>
+gap> c := RepetitionCode( 7, GF(2) );;
+gap> ham := HammingCode( 3, GF(2) );;
+gap> d := EvenWeightSubcode( ham );;
+gap> e := ConstantWeightSubcode( ham, 3 );;
+gap> GeneralizedCodeNorm( ham, c, d, e );
+4 
+</Example>
+
+
+<Index>
+normal code
+</Index>
+
+<ManSection Label="IsNormalCode">
+<Func Name="IsNormalCode" Arg=" C "/>
+
+<Description>
+<C>IsNormalCode</C> returns `true' if <A>C</A> is normal. 
+A code is called <E>normal</E> if the norm of the code is not 
+more than two times  the covering radius of the code plus one. 
+Almost all codes are  normal,  however  some
+(non-linear) abnormal codes have been found.
+<P/>
+Often, it is difficult to find out whether a code is normal,  because  it
+involves computing the covering radius. However, 
+<C>IsNormalCode</C> uses much
+information  from the literature (in particular,
+<Cite Key="GS85"/>) about normality for certain code
+parameters.
+</Description>
+</ManSection>
+
+<Example>
+gap> IsNormalCode( HammingCode( 3, GF(2) ) );
+true 
+</Example>
+
+</Section>
+
+<Section>
+<Heading>
+Miscellaneous functions
+</Heading>
+<Label Name="Miscellaneous functions"/>
+
+In this section we describe several vector space functions 
+<Package>GUAVA</Package> uses for
+constructing codes or performing calculations with codes.
+<P/>
+In this section, some new miscellaneous functions are described,
+including weight enumerators, the MacWilliams-transform and 
+affinity and almost affinity of codes.
+
+<Index>
+weight enumerator polynomial
+</Index>
+
+<ManSection Label="CodeWeightEnumerator">
+<Func Name="CodeWeightEnumerator" Arg=" C "/>
+
+<Description>
+<C>CodeWeightEnumerator</C> returns a polynomial of the following form:
+
+<Display>
+f(x) = \sum_{i=0}^{n} A_i x^i,
+</Display>
+where <M>A_i</M> is the number of codewords in <A>C</A> with weight 
+<M>i</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
+> [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
+x^3 + x^2 + x + 1
+gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
+x^7 + 7*x^4 + 7*x^3 + 1 
+</Example>
+
+<ManSection Label="CodeDistanceEnumerator">
+<Func Name="CodeDistanceEnumerator" Arg=" C w "/>
+
+<Description>
+<C>CodeDistanceEnumerator</C> returns a polynomial of the following form:
+
+<Display>
+f(x) = \sum_{i=0}^{n} B_i x^i,
+</Display>
+where <M>B_i</M> is the number of codewords with distance 
+<M>i</M> to <A>w</A>.
+<P/>
+If <A>w</A> is a codeword, then <C>CodeDistanceEnumerator</C> returns the
+same polynomial as <C>CodeWeightEnumerator</C>.
+</Description>
+</ManSection>
+
+<Example>
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
+x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
+x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'
+</Example>
+
+<Index>
+MacWilliams transform
+</Index>
+
+
+<ManSection Label="CodeMacWilliamsTransform">
+<Func Name="CodeMacWilliamsTransform" Arg=" C "/>
+
+<Description>
+<C>CodeMacWilliamsTransform</C> returns a polynomial of the following form:
+
+<Display>
+f(x) = \sum_{i=0}^{n} C_i x^i,
+</Display>
+where <M>C_i</M> is the number of codewords with weight <M>i</M> 
+in the <E>dual</E> code of <A>C</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
+7*x^4 + 1 
+</Example>
+
+
+<Index>
+density of a code
+</Index>
+<ManSection Label="CodeDensity">
+<Func Name="CodeDensity" Arg=" C "/>
+
+<Description>
+<C>CodeDensity</C> returns the <E>density</E> of <A>C</A>.
+The density of a code is defined as
+
+<Display>
+\frac{M \cdot V_q(n,t)}{q^n},
+</Display>
+where <M>M</M> is the size of the code, 
+<M>V_q(n,t)</M> is the size of a sphere of
+radius <M>t</M> in <M>GF(q^n)</M> (which may be 
+computed using <C>SphereContent</C>), 
+<M>t</M> is the covering radius of the code and 
+<M>n</M> is the length of the code.
+</Description>
+</ManSection>
+
+<Example>
+gap> CodeDensity( HammingCode( 3, GF(2) ) );
+1
+gap> CodeDensity( ReedMullerCode( 1, 4 ) );
+14893/2048 
+</Example>
+
+<Index>
+perfect code
+</Index>
+<ManSection Label="SphereContent">
+<Func Name="SphereContent" Arg=" n t F "/>
+
+<Description>
+<C>SphereContent</C> returns the  content of a ball of radius 
+<A>t</A> around an arbitrary element of the vectorspace 
+<M>F^n</M>.  This is the cardinality of the set of all elements 
+of <M>F^n</M> that are at distance (see
+<Ref Func="DistanceCodeword" Style="Number"/>
+less than or equal to <A>t</A> from  an  element of <M>F^n</M>.
+<P/>
+In the context of codes, the function is used to  determine if a code is
+perfect. A code is <E>perfect</E> if spheres of radius 
+<M>t</M> around all codewords
+partition the whole ambient vector space, where 
+<E>t</E> is the number of errors the code can correct.
+</Description>
+</ManSection>
+
+<Example>
+gap> SphereContent( 15, 0, GF(2) );
+1    # Only one word with distance 0, which is the word itself
+gap> SphereContent( 11, 3, GF(4) );
+4984
+gap> C := HammingCode(5);
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+#the minimum distance is 3, so the code can correct one error
+gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
+true 
+</Example>
+
+<ManSection Label="Krawtchouk">
+<Func Name="Krawtchouk" Arg=" k i n q "/>
+
+<Description>
+<C>Krawtchouk</C> returns the Krawtchouk number 
+<M>K_{k}(i)</M>.  <A>q</A> must be a prime power, <A>n</A> 
+must be a positive integer,  <A>k</A> must be a non-negative
+integer less then or equal to <A>n</A> and <A>i</A> can be any  
+integer. (See
+<Ref Func="KrawtchoukMat" Style="Number"/>). 
+This number is the value at <M>x=i</M> of the polynomial 
+
+<Display>
+K_k^{n,q}(x)
+=\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),
+</Display>
+where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are
+integers. For more properties of these polynomials,
+see <Cite Key="MS83"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> Krawtchouk( 2, 0, 3, 2);
+3 
+</Example>
+
+<ManSection Label="PrimitiveUnityRoot">
+<Func Name="PrimitiveUnityRoot" Arg=" F n "/>
+
+<Description>
+<C>PrimitiveUnityRoot</C> returns a primitive <A>n</A>-th  
+root of unity in an extension field of <A>F</A>. 
+This is a finite field element <M>a</M> with the
+property <M>a^n=1</M> in <A>F</A>, and <A>n</A> 
+is the smallest integer such that this equality holds.
+</Description>
+</ManSection>
+
+<Example>
+gap> PrimitiveUnityRoot( GF(2), 15 );
+Z(2^4)
+gap> last^15;
+Z(2)^0
+gap> PrimitiveUnityRoot( GF(8), 21 );
+Z(2^6)^3 
+</Example>
+
+<ManSection Label="PrimitivePolynomialsNr">
+<Func Name="PrimitivePolynomialsNr" Arg=" n F "/>
+
+<Description>
+<C>PrimitivePolynomialsNr</C> returns the number of irreducible 
+polynomials over <M>F=GF(q)</M> of degree <A>n</A> 
+with (maximum) period <M>q^n-1</M>.
+(According to a theorem of S. Golomb, this is
+<M>\phi(p^n-1)/n</M>.)
+<P/>
+See also the GAP function <C>RandomPrimitivePolynomial</C>, 
+<Ref Func="RandomPrimitivePolynomial" Style="Number"/>.
+</Description>
+</ManSection>
+
+<Example>
+gap> PrimitivePolynomialsNr(3,4);
+12
+
+</Example>
+
+
+<ManSection Label="IrreduciblePolynomialsNr">
+<Func Name="IrreduciblePolynomialsNr" Arg=" n F "/>
+
+<Description>
+<C>PrimitivePolynomialsNr</C> returns the number of irreducible 
+polynomials over <M>F=GF(q)</M> of degree <A>n</A>.
+</Description>
+</ManSection>
+
+<Example>
+gap> IrreduciblePolynomialsNr(3,4);
+20
+
+</Example>
+
+
+<ManSection Label="MatrixRepresentationOfElement">
+<Func Name="MatrixRepresentationOfElement" Arg=" a F "/>
+
+<Description>
+Here <A>F</A> is either a finite extension of
+the ``base field'' <M>GF(p)</M> or of the rationals <M>{\mathbb{Q}}</M>,
+and <M>a\in F</M>. 
+The command <C>MatrixRepresentationOfElement</C> returns a matrix 
+representation of <A>a</A> over the base field.  
+<P/>
+If the element <A>a</A> is defined over the base field then it
+returns the corresponding <M>1\times 1</M> matrix.
+</Description>
+</ManSection>
+
+<Example>
+gap> a:=Random(GF(4));
+0*Z(2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ .
+gap> a:=Random(GF(4));
+Z(2^2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ . 1
+ 1 1
+gap>
+
+</Example>
+<!--
+a:=Random(GF(4));
+M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+a:=Random(GF(4));
+M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+-->
+
+<Index>
+reciprocal polynomial
+</Index>
+
+<ManSection Label="ReciprocalPolynomial">
+<Func Name="ReciprocalPolynomial" Arg=" P "/>
+
+<Description>
+<C>ReciprocalPolynomial</C> returns the <E>reciprocal</E> of 
+polynomial <A>P</A>. This is a polynomial with coefficients of 
+<A>P</A> in the reverse order. So if
+<M>P=a_0 + a_1 X +  ... + a_{n}  X^{n}</M>, 
+the reciprocal polynomial is
+<M>P'=a_{n} + a_{n-1} X + ... + a_0 X^{n}</M>.
+<P/>
+This command can also be called using the
+syntax <C>ReciprocalPolynomial( P , n )</C>.
+In this form, the number of coefficients of <A>P</A> is 
+assumed to be less than or equal to <M>n+1</M>  
+(with zero coefficients added in the highest
+degrees, if necessary). 
+Therefore, the reciprocal polynomial also has degree
+<M>n+1</M>.
+</Description>
+</ManSection>
+
+<Example>
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> RecP := ReciprocalPolynomial( P );
+-Z(3)^0+x_1+x_1^3
+gap> ReciprocalPolynomial( RecP ) = P;
+true 
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> ReciprocalPolynomial( P, 6 );
+-x_1^3+x_1^4+x_1^6
+</Example>
+<!--
+P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+RecP := ReciprocalPolynomial( P );
+ReciprocalPolynomial( RecP ) = P;
+P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+ReciprocalPolynomial( P, 6 );
+-->
+
+<ManSection Label="CyclotomicCosets">
+<Func Name="CyclotomicCosets" Arg=" q n "/>
+
+<Description>
+<C>CyclotomicCosets</C> returns the cyclotomic cosets of 
+<M>q \pmod n</M>. <A>q</A> and <A>n</A> must be relatively prime. 
+Each of the elements of the returned list is a list of integers 
+that belong to one cyclotomic coset.  
+A <M>q</M>-cyclotomic coset of <M>s \pmod n</M> is a set of the
+form <M>\{s,sq,sq^2,...,sq^{r-1}\}</M>, where <M>r</M> is the 
+smallest positive integer such that 
+<M>sq^r-s</M> is <M>0 \pmod n</M>. In other words, each
+coset contains all multiplications of the coset representative 
+by <M>q \pmod n</M>. 
+The coset representative is the smallest integer that isn't
+in the previous cosets.
+</Description>
+</ManSection>
+
+<Example>
+gap> CyclotomicCosets( 2, 15 );
+[ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
+  [ 7, 14, 13, 11 ] ]
+gap> CyclotomicCosets( 7, 6 );
+[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 
+</Example>
+
+<ManSection Label="WeightHistogram">
+<Func Name="WeightHistogram" Arg=" C [h] "/>
+
+<Description>
+The function <C>WeightHistogram</C> plots a histogram  of weights in code
+<A>C</A>. The maximum length of a column is <A>h</A>. 
+Default value for <A>h</A> is <M>1/3</M> of the size of the  
+screen. The number that appears at the top of
+the histogram is the maximum value of the list of weights.
+</Description>
+</ManSection>
+
+<Example>
+gap> H := HammingCode(2, GF(5));
+a linear [6,4,3]1 Hamming (2,5) code over GF(5)
+gap> WeightDistribution(H);
+[ 1, 0, 0, 80, 120, 264, 160 ]
+gap> WeightHistogram(H);
+264----------------
+               *
+               *
+               *
+               *
+               *  *
+            *  *  *
+         *  *  *  *
+         *  *  *  *
++--------+--+--+--+--
+0  1  2  3  4  5  6 
+</Example>
+<!--
+H := HammingCode(2, GF(5));
+WeightDistribution(H);
+WeightHistogram(H);
+-->
+
+
+<ManSection>
+<Func Name="MultiplicityInList" Arg ="L, a"/>
+
+<Description>
+This is a very simple list command which 
+returns how many times a occurs in L.
+It returns 0 if a is not in L.
+(The GAP command <C>Collected</C> does not quite
+handle this ``extreme" case.) 
+
+</Description>
+</ManSection>
+<Example>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MultiplicityInList(L,1);
+3
+gap> MultiplicityInList(L,6);
+0
+</Example>
+<!--
+L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+MultiplicityInList(L,1);
+MultiplicityInList(L,6);
+-->
+
+<ManSection>
+<Func Name="MostCommonInList" Arg =" L "/>
+
+<Description>
+
+Input: a list L
+<P/>
+Output: an a in L which occurs at least as much as any other in L
+
+</Description>
+</ManSection>
+<Example>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MostCommonInList(L);
+1
+</Example>
+<!--
+L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+MostCommonInList(L);
+-->
+
+<ManSection>
+<Func Name="RotateList" Arg =" L "/>
+
+<Description>
+
+Input: a list L
+<P/>
+Output: a list L' which is the
+cyclic rotation of L (to the right)
+
+
+</Description>
+</ManSection>
+<Example>
+gap> L:=[1,2,3,4];;
+gap> RotateList(L);
+[2,3,4,1]
+</Example>
+<!--
+L:=[1,2,3,4];;
+RotateList(L);
+-->
+
+<ManSection>
+<Func Name="CirculantMatrix" Arg =" k L "/>
+
+<Description>
+Input: integer k, a list L of length n
+<P/>
+Output: kxn matrix whose rows are cyclic rotations of the list L
+
+</Description>
+</ManSection>
+<Example>
+gap> k:=3; L:=[1,2,3,4];;
+gap> M:=CirculantMatrix(k,L);;
+gap> Display(M);
+</Example>
+<!--
+k:=3; L:=[1,2,3,4];;
+M:=CirculantMatrix(k,L);;
+Display(M);
+-->
+
+
+</Section>
+
+<Section>
+<Heading>
+Miscellaneous polynomial functions
+</Heading>
+<Label Name="Miscellaneous polynomial functions"/>
+
+In this section we describe several multivariate polynomial
+GAP functions <Package>GUAVA</Package> uses for
+constructing codes or performing calculations with codes.
+
+<ManSection>
+
+<Func Name="MatrixTransformationOnMultivariatePolynomial " Arg ="A,f,R "/>
+
+<Description>
+<A>A</A> is an <M>n\times n</M> matrix with entries in a field <M>F</M>,
+<A>R</A> is a polynomial ring of <M>n</M> variables,
+say <M>F[x_1,...,x_n]</M>, and <A>f</A> is a polynomial in <A>R</A>.
+Returns the composition <M>f\circ A</M>.
+
+</Description>
+</ManSection>
+
+<ManSection>
+<Func Name="DegreeMultivariatePolynomial" Arg ="f, R"/>
+
+<Description>
+This command takes two arguments,
+<A>f</A>, a multivariate polynomial,
+and <A>R</A> a polynomial ring over
+a field <M>F</M> containing <A>f</A>, say
+<M>R=F[x_1,x_2,...,x_n]</M>.
+The output is simply the maximum degrees of all the
+monomials occurring in <A>f</A>.
+<P/>
+This command can be used to compute the degree of an
+affine plane curve.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreeMultivariatePolynomial(poly,R2);
+3
+
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);
+vars:=IndeterminatesOfPolynomialRing(R2);;
+x:=vars[1];; y:=vars[2];;
+poly:=y^2-x*(x^2-1);;
+DegreeMultivariatePolynomial(poly,R2);
+
+-->
+
+<ManSection>
+
+<Func Name="DegreesMultivariatePolynomial" Arg ="f, R"/>
+
+<Description>
+Returns a list of information about the 
+multivariate polynomial <A>f</A>. Nice for other
+programs but mostly unreadable by GAP users.
+
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreesMultivariatePolynomial(poly,R2);
+[ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
+  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
+gap>
+
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);
+vars:=IndeterminatesOfPolynomialRing(R2);;
+x:=vars[1];; y:=vars[2];;
+poly:=y^2-x*(x^2-1);;
+DegreesMultivariatePolynomial(poly,R2);
+
+-->
+
+<ManSection>
+<Func Name="CoefficientMultivariatePolynomial" Arg ="f, var, power, R"/>
+
+<Description>
+The command <C>CoefficientMultivariatePolynomial</C>
+takes four arguments: a multivariant polynomial 
+<A>f</A>, a variable name <A>var</A>, an integer
+<A>power</A>, and a polynomial ring <A>R</A> containing <A>f</A>.
+For example, if <A>f</A> is a multivariate polynomial in 
+<M>R</M> = <M>F</M>[<M>x_1,x_2,...,x_n</M>] then <A>var</A> must be
+one of the <M>x_i</M>.
+The output is the coefficient of <M>x_i^{power}</M>
+in <A>f</A>.
+<P/>
+(Not sure if <M>F</M> needs to be a field in fact ...)
+<P/>
+Related to the GAP command <C>PolynomialCoefficientsPolynomial</C>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> PolynomialCoefficientsOfPolynomial(poly,x);
+[ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
+gap> PolynomialCoefficientsOfPolynomial(poly,y);
+[ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
+gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
+-x_1^3+x_1
+gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
+x_2^2
+gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
+-Z(11)^0
+
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);
+vars:=IndeterminatesOfPolynomialRing(R2);;
+x:=vars[1];; y:=vars[2];;
+poly:=y^2-x*(x^2-1);;
+PolynomialCoefficientsOfPolynomial(poly,x);
+PolynomialCoefficientsOfPolynomial(poly,y);
+CoefficientMultivariatePolynomial(poly,y,0,R2);
+CoefficientMultivariatePolynomial(poly,y,1,R2);
+CoefficientMultivariatePolynomial(poly,y,2,R2);
+CoefficientMultivariatePolynomial(poly,x,0,R2);
+CoefficientMultivariatePolynomial(poly,x,1,R2);
+CoefficientMultivariatePolynomial(poly,x,2,R2);
+CoefficientMultivariatePolynomial(poly,x,3,R2);
+
+-->
+
+
+<ManSection>
+<Func Name="SolveLinearSystem" Arg ="L, vars"/>
+
+<Description>
+Input:
+<A>L</A> is a list of linear forms in the variables <A>vars</A>.
+<P/>
+Output:
+the solution of the system, if its unique.
+<P/>
+The procedure is straightforward:
+Find the associated matrix <M>A</M>,
+find the "constant vector" <M>b</M>, and 
+solve <M>A*v=b</M>. No error checking is performed.
+<P/>
+Related to the GAP command <C>SolutionMat( A, b )</C>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+gap> soln:=SolveLinearSystem([f,g],[x,y]);
+[ Z(11)^3, Z(11)^2 ]
+gap> Value(f,[x,y],soln); # checking okay
+0*Z(11)
+gap> Value(g,[x,y],col); # checking okay
+0*Z(11)
+
+</Example>
+<!--
+F:=GF(11);;
+R2:=PolynomialRing(F,2);
+vars:=IndeterminatesOfPolynomialRing(R2);;
+x:=vars[1];; y:=vars[2];;
+f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+soln:=SolveLinearSystem([f,g],[x,y]);
+Value(f,[x,y],soln); # checking okay
+Value(g,[x,y],col); # checking okay
+-->
+
+
+
+
+<ManSection Label="GuavaVersion">
+<Func Name="GuavaVersion" Arg="  "/>
+
+<Description>
+Returns the current version of Guava. Same as 
+<C>guava\_version()</C>.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> GuavaVersion();
+"2.7"
+
+</Example>
+<!--
+
+-->
+
+<ManSection Label="ZechLog">
+<Func Name="ZechLog" Arg=" x b F "/>
+
+<Description>
+Returns the Zech log of x to base b, ie the i such that 
+$x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where 
+k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F.
+
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);; l := One(F);;
+gap> ZechLog(2*l,8*l,F);
+-24
+gap> 8*l+l;(2*l)^(-24);
+Z(11)^6
+Z(11)^6
+
+</Example>
+<!--
+F:=GF(11);; l := One(F);;
+ZechLog(2*l,8*l,F);
+8*l+l;(2*l)^(-24);
+
+-->
+
+
+<ManSection Label="CoefficientToPolynomial">
+<Func Name="CoefficientToPolynomial" Arg=" coeffs R "/>
+
+<Description>
+The function <C>CoefficientToPolynomial</C> returns the 
+degree <M>d-1</M> polynomial <M>c_0+c_1x+...+c_{d-1}x^{d-1}</M>, where 
+<A>coeffs</A> is a list of elements of a field,
+<M>coeffs=\{ c_0,...,c_{d-1}\}</M>, and <A>R</A> is a
+univariate polynomial ring.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> coeffs:=Z(11)^0*[1,2,3,4];
+[ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
+gap> CoefficientToPolynomial(coeffs,R1);
+Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+coeffs:=Z(11)^0*[1,2,3,4];
+CoefficientToPolynomial(coeffs,R1);
+-->
+
+<ManSection Label="DegreesMonomialTerm">
+<Func Name="DegreesMonomialTerm" Arg=" m R "/>
+
+<Description>
+The function <C>DegreesMonomialTerm</C> returns the 
+list of degrees to which each variable in the 
+multivariate polynomial ring 
+<A>R</A> occurs in the monomial <A>m</A>, where 
+<A>coeffs</A> is a list of elements of a field.
+</Description>
+</ManSection>
+
+<Example>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> c:=X(F,"c",var2);
+c
+gap> var3:=Concatenation(var2,[c]);
+[ a, b, c ]
+gap> R3:=PolynomialRing(F,var3);
+PolynomialRing(..., [ a, b, c ])
+gap> m:=b^3*c^7;
+b^3*c^7
+gap> DegreesMonomialTerm(m,R3);
+[ 0, 3, 7 ]
+</Example>
+<!--
+F:=GF(11);
+R1:=PolynomialRing(F,["a"]);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,"b",var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+c:=X(F,"c",var2);
+var3:=Concatenation(var2,[c]);
+R3:=PolynomialRing(F,var3);
+m:=b^3*c^7;
+DegreesMonomialTerm(m,R3);
+-->
+
+<ManSection Label="DivisorsMultivariatePolynomial">
+<Func Name="DivisorsMultivariatePolynomial" Arg=" f R "/>
+
+<Description>
+The function <C>DivisorsMultivariatePolynomial</C> returns the 
+list of polynomial divisors of <A>f</A> in the 
+multivariate polynomial ring <A>R</A> with coefficients in a field.
+This program uses a simple but slow algorithm 
+(see Joachim von zur Gathen, J&#xfc;rgen Gerhard,
+<Cite Key="GG03"/>, exercise 16.10) which first converts the 
+multivariate polynomial <A>f</A> to an associated 
+univariate polynomial <M>f^*</M>, then 
+<C>Factors</C>  <M>f^*</M>, and finally converts these
+univariate factors back into the multivariate polynomial
+factors of <A>f</A>. Since <C>Factors</C> is non-deterministic,
+<C>DivisorsMultivariatePolynomial</C> is non-deterministic
+as well.
+</Description>
+</ManSection>
+
+<Example>
+gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
+PolynomialRing(..., [ x1, x2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);
+[ x1, x2 ]
+gap> x2:=vars[2];
+x2
+gap> x1:=vars[1];
+x1
+gap> f:=x1^3+x2^3;;
+gap> DivisorsMultivariatePolynomial(f,R2);
+[ x1+x2, x1+x2, x1+x2 ]
+</Example>
+<!--
+R2:=PolynomialRing(GF(3),["x1","x2"]);
+vars:=IndeterminatesOfPolynomialRing(R2);
+x2:=vars[2];
+x1:=vars[1];
+f:=x1^3+x2^3;;
+DivisorsMultivariatePolynomial(f,R2);
+-->
+
+
+</Section>
+
+
+</Chapter>
+
+</Body>
+<Bibliography Databases="guava"/>
+<TheIndex/>                                               
+</Book>
+
+
+
diff --git a/doc/head.tmp b/doc/head.tmp
new file mode 100644
index 0000000..7cab464
--- /dev/null
+++ b/doc/head.tmp
@@ -0,0 +1,1229 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
+%%Title: /tmp/kde-wdj/kdviHbyvnc.tmp
+%%CreationDate: Wed Oct 31 21:45:03 2007
+%%Pages: 153
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 595 842
+%%DocumentFonts: Helvetica-Bold Times-Bold Times-Roman Symbol Courier
+%%+ Helvetica-Oblique CMSY10 Helvetica Times-Italic MSAM10 CMR10 CMMI10
+%%+ MSBM10 Courier-Oblique CMEX10 TeX-cmex9
+%%DocumentPaperSizes: a4
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -z /tmp/kde-wdj/kdviHbyvnc.tmp -o
+%+ /home/wdj/wdj/gapfiles/codes/guava3.1/doc/manual.ps
+%DVIPSParameters: dpi=600
+%DVIPSSource:  TeX output 2007.10.20:1942
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc 0 0
+% File 8r.enc  TeX Base 1 Encoding  Revision 2.0  2002-10-30
+%
+% @@psencodingfile@{
+%   author    = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry,
+%                W. Schmidt, P. Lehman",
+%   version   = "2.0",
+%   date      = "27nov06",
+%   filename  = "8r.enc",
+%   email     = "tex-fonts@@tug.org",
+%   docstring = "This is the encoding vector for Type1 and TrueType
+%                fonts to be used with TeX.  This file is part of the
+%                PSNFSS bundle, version 9"
+% @}
+% 
+% The idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol,
+% MacRoman, and some extra characters from Lucida.
+% 
+% Character code assignments were made as follows:
+% 
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+% 
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+% 
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+% These are /dotlessj /ff /ffi /ffl.
+% 
+% (4) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+% (5) /Euro was assigned to 128, as in Windows ANSI
+%
+% (6) Missing characters from MacRoman encoding incorporated as follows:
+%
+%     PostScript      MacRoman        TeXBase1
+%     --------------  --------------  --------------
+%     /notequal       173             0x16
+%     /infinity       176             0x17
+%     /lessequal      178             0x18
+%     /greaterequal   179             0x19
+%     /partialdiff    182             0x1A
+%     /summation      183             0x1B
+%     /product        184             0x1C
+%     /pi             185             0x1D
+%     /integral       186             0x81
+%     /Omega          189             0x8D
+%     /radical        195             0x8E
+%     /approxequal    197             0x8F
+%     /Delta          198             0x9D
+%     /lozenge        215             0x9E
+%
+/TeXBase1Encoding [
+% 0x00
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef /breve
+ /minus /.notdef /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi /dotlessj /ff
+ /ffi /ffl /notequal /infinity
+ /lessequal /greaterequal /partialdiff /summation
+ /product /pi /grave /quotesingle
+% 0x20
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus
+ /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% 0x40
+ /at /A /B /C
+ /D /E /F /G
+ /H /I /J /K
+ /L /M /N /O
+% 0x50
+ /P /Q /R /S
+ /T /U /V /W
+ /X /Y /Z /bracketleft
+ /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c
+ /d /e /f /g
+ /h /i /j /k
+ /l /m /n /o
+% 0x70
+ /p /q /r /s
+ /t /u /v /w
+ /x /y /z /braceleft
+ /bar /braceright /asciitilde /.notdef
+% 0x80
+ /Euro /integral /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /Omega /radical /approxequal
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /Delta /lozenge /Ydieresis
+% 0xA0
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /hyphen /registered /macron
+% 0xB0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+ at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+%%BeginProcSet: hps.pro 0 0
+%!
+/HPSdict 20 dict dup begin/braindeaddistill 50 def/rfch{dup length 1 sub
+1 exch getinterval}bind def/splituri{dup(#)search{exch pop}{()exch}
+ifelse dup(file:)anchorsearch{pop exch pop 3 -1 roll pop false}{pop 3 -1
+roll exch pop true}ifelse}bind def/lookuptarget{exch rfch dup
+/TargetAnchors where{pop TargetAnchors dup 3 -1 roll known{exch get true
+}{pop(target unknown:)print == false}ifelse}{pop pop
+(target dictionary unknown\012)print false}ifelse}bind def/savecount 0
+def/stackstopped{count counttomark sub/savecount exch store stopped
+count savecount sub 1 sub dup 0 gt{{exch pop}repeat}{pop}ifelse}bind def
+/tempstring 128 string def/targetvalidate{1 index dup length 127 gt exch
+tempstring cvs dup(/)search{pop pop pop exch pop true exch}{pop}ifelse
+token{pop length 0 ne}{true}ifelse or not}bind def/targetdump-hook where
+{pop}{/targetdump-hook{dup mark exch gsave initmat setmatrix{{mark/Dest
+4 2 roll targetvalidate{aload pop exch pop/Page 3 1 roll/View exch[exch
+/FitH exch]/DEST pdfmark}{cleartomark}ifelse}forall}stackstopped pop
+grestore}bind def}ifelse/baseurl{mark exch 1 dict dup 3 -1 roll/Base
+exch put/URI exch/DOCVIEW{pdfmark}stackstopped pop}bind def
+/externalhack systemdict/PDF known def/oldstyle true def/initmat matrix
+currentmatrix def/actiondict 2 dict dup/Subtype/URI put def
+/weblinkhandler{dup 3 1 roll mark 4 1 roll/Title 4 1 roll splituri 3 -1
+roll dup length 0 gt{cvn/Dest exch 4 2 roll}{pop}ifelse{externalhack{
+/HTTPFile exch}{actiondict dup 3 -1 roll/URI exch put/Action exch}
+ifelse}{externalhack{/HTTPFile exch}{/File exch/Action/GoToR}ifelse}
+ifelse counttomark 2 sub -1 roll aload pop/Rect 4 1 roll/Border 3 1 roll
+/Color exch oldstyle{/LNK}{/Subtype/Link/ANN}ifelse gsave initmat
+setmatrix{pdfmark}stackstopped grestore}bind def/externalhandler where{
+pop}{/externalhandler{2 copy{weblinkhandler}exec{/externalhack
+externalhack not store 2 copy{weblinkhandler}exec{/externalhack
+externalhack not store/oldstyle false store 2 copy{weblinkhandler}exec{
+(WARNING: external refs disabled\012)print/externalhandler{pop pop}bind
+store externalhandler}{pop pop}ifelse}{pop pop/externalhack externalhack
+not store}ifelse}{pop pop/externalhandler{weblinkhandler pop}bind store}
+ifelse}bind def}ifelse/pdfmnew{dup type/stringtype eq{externalhandler}{
+exch dup rfch exch 3 -1 roll lookuptarget{mark 4 1 roll/Title 4 1 roll
+aload pop exch pop/Page 3 1 roll/View exch[exch/FitH exch]5 -1 roll
+aload pop/Rect 4 1 roll/Border 3 1 roll/Color exch/LNK gsave initmat
+setmatrix pdfmark grestore}{pop pop}ifelse}ifelse}bind def/pdfmold{dup
+type/stringtype eq{externalhandler}{exch dup rfch exch 3 -1 roll
+lookuptarget{mark 4 1 roll/Title 4 1 roll aload pop exch pop/Page 3 1
+roll/View exch[exch/FitH exch]5 -1 roll aload pop pop 0 3 getinterval
+/Rect 3 1 roll/Border exch/LNK gsave initmat setmatrix pdfmark grestore}
+{pop pop}ifelse}ifelse}bind def/pdfm where{pop}{/pdfm
+/currentdistillerparams where{pop currentdistillerparams dup
+/CoreDistVersion known{/CoreDistVersion get}{0}ifelse dup
+braindeaddistill le{(WARNING: switching to old pdfm because version =)
+print ==/pdfmold}{pop/pdfmnew}ifelse load}{/pdfmark where{pop{dup type
+/stringtype eq{externalhandler}{2 copy mark 3 1 roll{pdfmnew}
+stackstopped{2 copy mark 3 1 roll{pdfmold}stackstopped{
+(WARNING: pdfm disabled\012)print/pdfm{pop pop}store}{
+(WARNING: new pdfm failed, switching to old pdfm\012)print/pdfm/pdfmold
+load store}ifelse}{/pdfm/pdfmnew load store}ifelse pop pop}ifelse}}{{
+pop pop}}ifelse}ifelse bind def}ifelse end def
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ /DvipsToPDF { 72.27 mul Resolution div } def /PDFToDvips { 72.27 div
+Resolution mul } def /HyperBorder { 1 PDFToDvips } def /H.V {pdf at hoff
+pdf at voff null} def /H.B {/Rect[pdf at llx pdf at lly pdf at urx pdf at ury]} def
+/H.S { currentpoint HyperBorder add /pdf at lly exch def dup DvipsToPDF
+/pdf at hoff exch def HyperBorder sub /pdf at llx exch def } def /H.L { 2
+sub dup /HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint
+HyperBaseDvips sub /pdf at ury exch def /pdf at urx exch def } def /H.A {
+H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt
+sub sub /pdf at voff exch def } def /H.R { currentpoint HyperBorder sub
+/pdf at ury exch def HyperBorder add /pdf at urx exch def currentpoint exch
+pop vsize 72 sub exch DvipsToPDF sub /pdf at voff exch def } def systemdict
+/pdfmark known { userdict /?pdfmark systemdict /exec get put }{ userdict
+/?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark
+get put } ifelse
+ 
+ at fedspecial end
+%%BeginFont: TeX-cmex9
+%!PS-AdobeFont-1.0: TeX-cmex9 001.001
+% Filtered by type1fix.pl 0.05
+%%EndComments
+13 dict dup begin
+/FontInfo 16 dict dup begin
+/Copyright (see\040copyright\040of\040original\040TeX\040font) def
+/FamilyName (TeX\040cmex9) def
+/FullName (TeX\040cmex9\040Regular) def
+/ItalicAngle 0 def
+/Notice (converted\040after\040April\0402001) def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/Weight (Regular) def
+/isFixedPitch false def
+/version (001.001) def
+end readonly def
+/FontName /TeX-cmex9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 91 /bracketleft put
+readonly def
+/FontBBox {-26 -2961 1503 773} readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633
+89DE8BAE4F093966CD2192CE95EB0F323A6BABFDACCFCF27D91F7869A0E46CA5
+9AAF6905783E8AC1F3F9875A76F97187738432F8D14E61574CB292FFB9740871
+66839799D8CAF6E0DFE00012EE6D46A2B3655F29705BE37FD5EDA1C765AA2CF5
+C5AD37207ED1EE9DB82FF31A33307FFA16911406557336AF92F50B603C7BD336
+73EC060F68318378A6F599DDADA5A21504CADBA1E1F4B1A22962BA1BB39ADC7B
+E8CC92F196549457877C9636A8A7EFAC1C3745644C0FD151C70B9FAD69B02C1F
+FE5ED071CA1CF3D4A70909B6A3986687D8FB87391E0C665A4EBD2993161FA81B
+2B8F7221294CCB11AE65A31E8903DCC3AC1A47765E880ACDDC88509418B04F0F
+2D84FD3007D411EEE2DFF237D99A10430524F07480302DFD698B571A023B08A1
+36F84F09BCECBE34ECC1CFD251EBBF338CFF7C197D9B33CBD9ACA7171370527C
+CFA0F7FD5DE8B62790D7DF23F004AEDA717F35B5E2B260A8AAFDE31164AFA47C
+686735EC47454F42AC5037D97B410DC373EB0CEFE3C41E243EDA86FF582AB53E
+7B56D103AD816F2D7DA35DE239DE30CA5645A377E77A1980B984C195E605841B
+36C82FF23D95B5FF770C3AB37C2D657FD1731E91FA0446C316C68F62626B900D
+8574C26A5150F80628D1AABF76459D28E0B2493D9F16B3EA6B965C802BFEF566
+834D9939CEAF52A614F6123279A91B0CB9E2D48E44E5C1357463E2FCC9E178BC
+CA13CF4B05D06F8BE68AE08CFE6251BA567A4CE526D34669856DF513053DCEDC
+91E8C72DBE48F5F782A90A63A5861D0166895D66FF1509CEE868AD14CFF59D9B
+A062BEC0DA8B76E38983379AAC883EE97F13CA32EA25F6CD353D7386EA3D24BF
+8F66CB141E56D9AA7CBA25BC43CDE97AE4884FC75662247C4D6213A788A1BB36
+1E6F573A812B5C8E6B637F4CD4037AE3D5B9FA96E021D51879E3874DA27B780B
+0BB0A60D84879A1F00231EA8B4DF391E75B4770220F8E778DB7C15CB53669F5F
+95AE0FE783053768CE6F848715B4D2079A69C56C1E305AE286BDB50AD95492A6
+3824F7EAC7EAA1DE16EFD4A5D99865670607A285DC0E1015F245A14236E512A1
+ED9A0B5836E537A975CA77D0DB392A40478D3ED7A596CD5DB97E2806D6D8369C
+6842D53009BAFB02B81F12141E416EC8CAD484EFD741D7E51B2D4131C1694EB8
+F94720238D471D541BAF8269745A05A008C7AD1104
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: CMEX10
+%!PS-AdobeFont-1.1: CMEX10 1.00
+%%CreationDate: 1992 Jul 23 21:22:48
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMEX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMEX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /parenleftbig put
+dup 1 /parenrightbig put
+dup 18 /parenleftbigg put
+dup 19 /parenrightbigg put
+dup 24 /ceilingleftbigg put
+dup 25 /ceilingrightbigg put
+dup 26 /braceleftbigg put
+dup 40 /braceleftBigg put
+dup 41 /bracerightBigg put
+readonly def
+/FontBBox{-24 -2960 1454 772}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910
+DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8
+8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987
+FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422
+BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52
+EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8
+DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1
+EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C
+6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281
+E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350
+E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38
+4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5
+8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023
+8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2
+FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A
+EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387
+680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35
+5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664
+3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666
+DD4DD1C1CBB3090A024F78BE318AC24F80AB0BB79A391182750B7F1518FC30F5
+58116E51ECF4A6AE68F883F9AA51C0D451A4702D4903A1FBD0B72A5A4DDD8B39
+9F07E7C9DB5972795BD977174104A5F5594EDF2F268137083A1ADE3CF849DC26
+4661C54CD833ABB2A01111C54FFA2AFCD4313E70A8F0870E209285B326FFA5C4
+5367B765867C29765837ACE969AAC41C2474E0BDEDB8EAEC5DDBE1EF9B1DD046
+9991121CEE6752403DB7DC18EBA743ABF7BE8D756950885F86A28446A5A18DE6
+627D6747FD2AACF3F37492163C536EE4165484E7FE467B4BA62AD196BFE337F7
+57961D8289ADE770B5177E2F79B766259F4F636CA89BB49F84F1BEEB23FEDF04
+641F0ECB8F88F1A9C83B222F87FFADDD3C4BBF7C6F160BC677F67DE890F4D089
+492D77A118C47A5E549B8BA1F42F7FF32EA40A9942A0E4B5ACA2C6DE472F9868
+B526117EF7A859F15C7F30A0EE721D7DE052C1DFC3E4212CAD0C09A03F89C061
+4CC7A255426E7CE75B49672F746F6273E3B781B8B0789A2FB6AF46D617D3A67B
+5424C1FF6560CB16396CC4007E5EA29C680388D295E66B5A15810BBCBB043B2E
+848D87BADD7C0EF7605E554AC83BD9E283D45D9E04CCF8941D11601D895E83DA
+566B0A9282989CCF67F814965A858FEBEFA67E3CC258FF025D241BFD644FA553
+263D13DA42EA766CD7924EC65846AE51A60D88DE2A8C99D5E21F5C2D16CC460B
+A987570E86E7BB207ECBB5FADC8431F117C9B2A4AF328B30320DFA6C147A186D
+04CA5EC02D7E89EBFD7EDF1A2B6DCA7F9267845C447517D55CBFB5BE06B5ABB7
+0972191933C3BF9AD66A38BCF152636E6B04BA1034590513EE1FED7AFFD744A8
+445267B01C9478D224CB1485DD4CBEC45EC7527C5FBBDE27E3EC392D21939B1D
+F6C347D166C1A6EFCA0FA05D8DB110DE4A66D1B22936C1AB2DBD49CC59832AA4
+5046E6331CC7C28990422A613382DE491724C97E4F06641CB0A4A27BFA14C914
+7A46BA2A781F5C1E49035DDE3D13F2A30D8BBAAF90C5AC9A24BF7847BDB75F2D
+6BD0F0D46EAF69D961797B119FF60683F456F7FEAF9C2C2DB0A08DAB4C265C84
+40ABC31AE9C7BAFA5AC778E008CB36354B7DE295F9261625C775ADD6DC919071
+2847BD50DF5A51E290AF9029005E44E0291B55924121173146683A3F982AACD8
+A9D95099B566B3FA6EFF999D7D5545BCEDB0D842FDA5B034DB0FC22002E1935B
+56EABE1230CE414D7559FDB06777D601A3E0CA52B73AE19508357B8758CB95BB
+7F390AEE9089B6EC4ACB6E57FCD92261356B5B664DFEF86901EA16DFCD5F2E6D
+95C72292FC600A53A39E3D233BCF0CE9C11FCFB506FED171ED52A979B48CFF7F
+DCF865E22E33E82C3035A4EA824FC68126E3FA69359CCF6A28B0EA8D84EE886B
+EC6098902C20863C59E73BA8EBE8A0AB486CBFC6EFFACC659CDC5609C3E7EE2C
+9FF420CADC206FBDA02326DF16F439C4084C6BCE1B49D64DD5B915763C7A0CAE
+FCE68ADAC262499570A446C0B332C1E70F06E424B5EFAA0F65783F1416D5983D
+7255F5AD9BCD102F5376B7796F8DF70C6208DB7A8DCD73F43472FAE69DAE2DE3
+76A9F112978C3BF87602A977DAFF1CE7E2F18DCF4FF56BD8DE7E8A8DF597D49A
+0F3DFD68CF65C4D7AC12028A2341E737C2975433A274968E717235C3C439640B
+2B0BE867ADC59731284528DDA948A73F9D7E9F6BD7DF25FDD6428C714803EE20
+479E47EE86571FE040147E0CBB7683709E0E6591908EB863E4064EFE219FD11F
+EC0498D51187EB1527BAD392A6F8EC0933916290C5DC4E3F51ED5A798C1F3A2E
+9EA2C512B111216909FB39D589614D4A6B5466E67B3C4E4E7F21BF079BD17206
+5A8804F2BE84D1C15CD8233F62BE290DC2C16D27067584ADB712C1AE8A4FB764
+A2E1945135178DAB161F86CDCADC64942DD988605769FB337D5DE67AC5C1907E
+417E48DC3DB09BE98B0C281B733BFD1BA9D2115EDAA83982E2F53E8482DCCFC6
+3DD533016F4A07A4111B1CFC0707B0C8D110C64E047E2E7D8B63BDAC95ECB15B
+31A5C08180B35DD89DF1D3B7B29D03BA60B6B93D61613C073E7324C7A1854CA3
+8FDDD09A63276898657E3F65F5EFD44395B6300F5AC1968CA87F622869F11A4E
+E8AAD1EC683306131B05BC7068B134649364D2CDA6F296D3EBAA72175F15D550
+0F2251F9FBD5D1EDE8DC379B38FB613F411E17B1C2BB1E91B051B7D6B5F9A68E
+D0AC68046AD7CE78BB7D3897B086DD820A2B7A34D007DEB937D107FD1BB14ACE
+EB362FD92F4A90904E49154D753D2B2DB0DFF1A4B61599F58F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 1 /periodcentered put
+dup 2 /multiply put
+dup 3 /asteriskmath put
+dup 8 /circleplus put
+dup 13 /circlecopyrt put
+dup 14 /openbullet put
+dup 15 /bullet put
+dup 17 /equivalence put
+dup 18 /reflexsubset put
+dup 20 /lessequal put
+dup 21 /greaterequal put
+dup 26 /propersubset put
+dup 33 /arrowright put
+dup 41 /arrowdblright put
+dup 48 /prime put
+dup 50 /element put
+dup 54 /negationslash put
+dup 55 /mapsto put
+dup 98 /floorleft put
+dup 99 /floorright put
+dup 100 /ceilingleft put
+dup 101 /ceilingright put
+dup 102 /braceleft put
+dup 103 /braceright put
+dup 104 /angbracketleft put
+dup 105 /angbracketright put
+dup 106 /bar put
+dup 107 /bardbl put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+515DB70A8D4F6146FE068DC1E5DE8BC57036537C42A2CE49D6C4C9FF1C3908F6
+707398A95DFBDD74738ECB713BB7D3092869DF8074F736C6E8F94B200E4C41BB
+3838C1D4DC86A2DC2036E37B191CB7EBCD1124EFAEC6E9B59ADC2C4FA5D509D8
+15D59F6019BA306075E41798B479263FE89D4893E8C207CF9E3F6E1ACFF89B39
+6D18238F251154B10116204CF7FA5CB5D5C5069DABA9E6B339839C96C5C55801
+072C78B325382E513485971FB9ECBE1A81D30AD550D7C53ADE620448929820AE
+84C0A508539B1055965ED2F17159294CA5D75681FC9EBBD82B259E00FF6E78ED
+2B931BA3007833E53A063DD4C7AC02195DE71887947606BECCE03D98CCB05C66
+38A2A0365B9227423C581A5533D6368F532F45B8ABC7E640E6D11B13732BA6D8
+54799D268FBE0FFCED284A385C31D0F51AC4920B91F7C876C4F7E8C4B629290A
+A02DDFB7ACD2553AAB889C587CD05A0A56ED125A65C742B3400F964CA21BF839
+1BCFDBE760FE105A2BFE6D349DA6114C6B5504CFF5F5B520C044137BE4E2442D
+CD220F9BF5C43805D66C37D3FDA87D2C7FC117AB23655D9F4491952EF9715465
+429198D14062167C8F3E84B0D57F830595258A5DF91A21EC8C952688C6ECA335
+B0B0838D0810BB71C9E951C1FACE28D31FCD2B76F5488A9D5196E757F5326505
+6B70BD8A162087A65BDC6E3C9260DD89F246BD9D064AC971A7EA5278830E6DF7
+3A0D510FEA1876BAA32E39246D7F8CAAAEC956C2E8F744CDB2B52149EE4A9600
+CE66E490149A4104F95AFE1CEF203008A8FA9226C398531A5B86BB4E4A3780A6
+845E19599D7F08612D6DCF388118C43FE63068858230159D3FD1A37883B56A8D
+58B2C69A92472ABBCAB444CD7CAA29EE9B290F8E420DD3A37095C9A0F367758B
+A53C6C7CF95A85D05F4C8FEB3628C6ABDB0F528321C3F7177E54A20570C6EE27
+A72D06B84AF2E57A630BA5FD89BAF626276EA15184D74F2CC22A450C40ADAE28
+63103CE37368737DFA707DABA100A84C4912173040E204D9150C620B9A641541
+368070765A8B43DF1634AE4E7BBC9EFEC4D264250FA1C395457509322722E7C4
+4D366E1CDB0D89F61E1670E45A0F32E0C28B08EE23E4CAA318A29093E57839E9
+3B26DBD439A75EF8F945EA4D9D59DBEF41AF2ED6699BD19783FB7A303BC9E8DE
+B2C533F88E9897DB505E5B2D5DE4D340863179B4666FAA11BF300333E6E94E0D
+31222ECDF2310265D8E79F92A28606060E314291920AC05DA662C5688BDDC9D8
+AE2FF2A78ABB1AEC004E713B74D02D32CBA92E69473C2819764ED462F7AE4F39
+E52486369D1027C58BE09D0048B7B3F41E19087B8A8227250B362B55DC63ED60
+6DF3838F434894BB92CF674F45BBD0881C0523C2581D4DB880B6BBE72187F94B
+9D63EAE52535D5BF5AABD9BA580E17DE46B8920948F6F461F04AE6E356C37C4F
+9D5278F563D1A4518C56CF404A62C239B01E2D0F2CAB27BA4E7638004AE005E1
+BA56487458B490AD372033194571877AF2FDCC6E71830B96952BBBD087697988
+4877539CD3CAF1A0AAF2B775A77671FA51B7C5E5298AE34D49A879A739526F5D
+A6E7A8D1EA5DA0FCE6DEBD22EA41F028C55C5B4FF9FAAD9E8FDD3096B0DDF034
+4978E21B0FA143B750BD6532F5B0AE398F58ADCF12168979D49FD555CDC7D472
+1295FF3C1AEA2C76DC03D7EC0D361C89A9E9ABD4EF3FD2DE1291DAB96E5261E3
+5981CCF3889AA2E0FE297EDFE25ED85B3AAE1924B639AF020DD271702E1E640D
+74CD611C09A47F0A698258C1C5C8E1C8B1EBC563D1058EAB75DB2D9F1FD0DC67
+CE84D946625CE7797F21766C1D54171174896D56842F807444F370257C69AB17
+9DF29BFD29F7A2E531C648E65A6244916D90F5C92C049FAAFC63C871ADC65175
+6D69A691AAFB052A47E9A9651A6C2EC3A4DB2AE1B942A1E3E8678C037D65BA7D
+F842DC9A68013153A908873F2164EEEF80F30748B45D6BDB41CA69DE5D0E8ACC
+3EBE17AD2D1C44FB35D15ADB1343D5B1E735B37E90D58AE0A029A70C443A2913
+4C1C77F3BC70D6F88BDBC53271C2F542240FE5F60CEE70B4712034287198B143
+994E2D19C4D27A069DEBF28B358323CB11157C9BC477E51BD0358A01C2DF9518
+61927A7478DFE8BB623A9997B7AF3C0EF0BFD5EAF5E714C066CA5ADBBA5428AA
+AC9ECC731085E890D1E40505E8EFB4C834C62544A650E06251EE9FB954A7F5D4
+D6D25739FFC430FBA7A3FFACCE68EB3FE08D4E0B2CCB44E0D6FA8C68317ECDEC
+699A666AF49E37B2B719B598701427162528441385979C03DF7CF7A28D29834E
+05C0EDC8035C7F7324AAD5FA08DD42A1D88558F1B7B735CD309355FEE00CF6D6
+4888029663D387CA13C31179B0D3DC7A6E441FA7A19CCF1A7E52B6B8B0D2786C
+C6ECA621FB7ABEEC1D3D4986ECDA7B6EFFDA31217B34ADAE2006D9FCEF17FBC3
+C17B96B82C8E1B2BD1F06F464ED30E280C4046071BB2AA930FACAE389EDE630E
+0EB70A82F3A1A028941287F40B0C8D21F83AD9116C46AC7A4892DF0AC1721E64
+CE4EA7C2DD2502CFF4C4E8A286CB6B09EB0BAD81667C0FFF53DF06FD6E73F1FF
+B68D873C858B4461D2179DBC5700459FFC01B74C9014B564EACA43350F7A6DDC
+CC155ABE0CAB5CDC99DE03E32D52BA0795B546EC716F5D74C15AEF47A4EF17D0
+75AEB48948F52B2A413D6791E6E356D10691D3C90045BB9C8DFA45B4C753941B
+D44A6D2FEF352AC9E64681E32E75BC03F5A52452A07450D692760A2E3AE6D4EF
+3F3E3C99BDD0D2336E700AF272D6EC0AEF6733116D6DE0F1A90DBD73CB453064
+9E1E2382187936CF7F4483C720D8C926739F1D56C4FA74832946F60D74534E14
+B8DEA9D853DBB3504DE4CCED56845C3C2050EB3B3A0BCD205A40FFDBB895391C
+4425426117DE6189131D6CEED0D67B962A3946EE0CF79EEE038B56310747B418
+747EC34A14F1F4C162A77E6385097051AAFE631791933692BAC727FF752BFE21
+AAD8914F07E002EDD5513F2253EE1C9ECE7AAAFAE3302721701D1167FFB70ED5
+26FC85BEBEF765F93FBCF13AA097731D19B41A256D9B15F803F2D367768BC66A
+76A23757364374487B0057CF319651F9BFF83F9E1087B1798D2544E84AD8F4E2
+7E5BAC56D00A387E75D9A566A3F581EA24EF2493957E9417B5AB0664CE8977D3
+CB7B64ED18283786D4791AAF8B9F5308A3F3E64D04950F5C596D8F03EB4A6C27
+9641D42B3A72822FD803C698F087E2C02683580F8F5C5C53089455D4E74709C7
+5392224FD5C9A4D0A5100463E691B0E80B6EAB6A60868CA8BA5113DF14A02105
+F3CFBD6DF1B57AB3CED1BC2743494B0F41D56B24CFF13FA32AF699BC5ED3C48D
+EDA97E654867DAE9BD245289323FB46678A21A6A8DF7D51C2C145EAF45105D29
+62F085222FF090E865D853BB92746B27BD636DD507FFEC3C6F18AFFFFE71BC34
+7CE9DD9070B4F0420C118ED518EF746B1FC9483A3E93A56B795BDDE536208C7B
+D58CFA96C8F55F2428C0F8388365BF48B086D86D80892835B0109EC5DA44331F
+11E7EF1F8A5E87C5F855C4889CB210A556E5DA20118226349BFCD13BF316FAD8
+5664F9AA73A39426BA7B2B7041AFD8D051E8A73B2D38FEEA3E533F09D82A253C
+C77CFBC28FB7C58FD5EC021F79873A956D841E8373A433BA820F503753FE1695
+77ED2C5F92AC4F3A217348C327E1A13E5CB2B55BF223724514A53948260225BE
+0AB1E5634C1E89AFB24742FF79B2A48F423C7D142DBCAD002554EAEDF5D67750
+2C26E793751DBACB36A1D5DB2BAF455D78DEDAFF13AF36504D05D0900E385BED
+546D25F26EA6C916E653F5333AFC93FD4D861C03618E89201E063F6356C2CF06
+112CFC00C580BA9195DDAC6ECDE95B5092E969726A7060CAE36E6C210ECA01BE
+2BA66EAA75D244593CDB16C0862E25AFEDAA0276FB3DFE5693618E503DA5388B
+4D0F8B78025604EBFFB94DC2EBB06A5AFF892D018CE800AA0088AFAF2E8E3819
+F2AAB2F4040BE83DB58531419B5122030C155D30F25A27B94142227D155AD6C0
+56EEDD5469AF2D0A7B06F497ED8E4FFF21F26C3968CDC1F4D72AEFCDF49B8075
+0C3932751E424B1AED832E3266311CDAF52D7A13E7FB54BD212ED4791C341808
+E41E5A3B76A9AE2D5DA4D0691651ED509AD7134A9EF3D3F4D22B3D25A35D39AA
+CC3BB987567DDD1391EA3EA3DB87C218396543766FF6C414B9258F2E6CFE299A
+E7E8A99CDC189DFB19E3330E3D6C5929616B77FE6EDBA935E15EFD6DF06787D2
+87AF7052B7C3E6D26477E8043E3D80C3F839BBEB7477A8B92CCA75F552E215AB
+D4CB7E9A345E6709CC675D97BE6657D16D25792C7CBCC74BBCE90A350AB3DD22
+957D8375AC41C03F5A910FA403AAC4E9D1F9E3177EDC01DEDA7FACCD874DAEC0
+5604A4F238759FAA0D3092FF1430CA76D1823B6ECC66D21356C7D48E40383776
+01B374D2384358DDD2AE0681A886EEE5F6F678A8E4C900932B79272D3C840C50
+6526D907769DBD434D3E410319B4E7F572A812CBDBDE2ACCD8920EE5154C6FD0
+B924FD0E5E0C3492B9AC6A0B91993E757BDD0B44AB15852ACCAD4326579ABA2C
+E41DDA011CFEB25436F7E8402AAB2FCACFBC98D229B3A1FD895559D649B144EF
+AFFB8E73F4CD1DCEE6A9E6E430AC2A3CA34F9656D9A0ED661C4CAA62E3CD1C35
+F9970AACE3097F88B759B8D86998A78EE50A31CA7AA15314CB5CBAC1CD640E7B
+A22957B9F5C7EC4F5EA3216FFCCC3A75986C882CFC57656A3C6DCC2B860E2702
+700D579CC2A8B6165D0CC2B725215E21FD059AF2BACD8FE2AFFE31C064385A64
+8198D2E1B72E6568FA5E9747CC5E890986D25FF81EC74897F36E161488903561
+A727D695848D9E91B64DC4FCFF971D9F463BD3CBB651EB380BA4DDD94C7AB0A4
+C408102BEFA4F53DBE7173DB6364B2557326C7EE3B158AEF4D1EA825EF727038
+08246FC824CB419ABBE1AD505B5DA5372B59D3BC6CF1018151102C1E5DA9D8A5
+D8593FAB2B9CB5EDAE88D500A4E264889FC5172DE9283C89B139BD7E12DED7C0
+BEDE134B08225D3F4149BD9A6EEF3C5AEFABA6729906149A710A352E7D5B8C99
+FBE69149569AE642941A57BC0F7F59EA19FDBE3D103885D0737A57871F317508
+35C05B640F71EEAA82CFCCD013421254AF0DACC1EA8D3EF416AD5B97DFB1861D
+E16AB8136755A00AC8432B83D007F4019F5B82F0DACE52E7CA839AD032B349ED
+6A76225EF056061581F57FE5BCFF68184F46EA192863A7585FED7FE85C792554
+862022F4520117EF4B0664F3BE729024B4044FBFAF0A0409D3E5A87FE54AEB91
+7833D29F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: MSBM10
+%!PS-AdobeFont-1.1: MSBM10 2.1
+%%CreationDate: 1993 Sep 17 11:10:37
+% Math Symbol fonts were designed by the American Mathematical Society.
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (2.1) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (MSBM10) readonly def
+/FamilyName (Euler) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /MSBM10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 80 /P put
+dup 81 /Q put
+dup 90 /Z put
+readonly def
+/FontBBox{-55 -420 2343 920}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6A66A4000A13D5F68BFF326D
+1D432B0D064B56C598F4338C319309181D78E1629A31ECA5DD8536379B03C383
+D10F04E2C2822D3E73F25B81C424627D3D9A158EAB554233A25D3C6849ABA86F
+1F25C1667CB57D2E79B7803083CB7CC0616467F68450D9A3FEAB534EB9721003
+DBFEEFD050F3AC3492F5C74162A9A531ECEC0F47610B4940E946D21CAA771D30
+A6C27ECBA11708CC46C62396BF9D1990D579D0C394899D24FE7A4382EA18E7E1
+160E7283AF5BE17254790628E79FCC206F28B5566075B3A5697D5209062544FF
+D85FD89D6F43D6588B242AB2666B5D2861CD38A8CE676503EDFAE84D12A71E77
+8405E468FE391F4F3F50D2C57ED55512036B0DB8E76A7EF413ED08673E56DE2C
+16A3B65CD478433C0D2F9FEC4E662D54DAA43CFA6957D2A9AF8979BE06F70B68
+ED4C8C493D6DAC4971A3F1D010A7726D084EC1074FECD7D12D72AE16C26194AF
+21AF5774D9B860EEE8608D34F150092F09C19959BAA670022B9A9F263CD391E3
+74DD1D1B4CD4D75273CAA4E37F68C631723E08FA35AD34C0AFB4621AE6689861
+854D16CE1C375FD159A337E221A6FF1CFFB5693A0623E7EBB58C2969F590D081
+AD92DD9E5322E26D6A15023664AC73A355998BCC48ADD0E7A4BC79790519606F
+A1FEF6075033BCD422EE8233B83D1E7C20043280D531223D5AD4D5B41669F884
+95CE4D6DDE819B588742B930C579EDF743F2C74C95F717FAA6154FADC3FE2975
+F59CFB1C1A29059487E75C48505BAEAD7145667D4E18E46E610C868A257173ED
+0D30EAA4C090854DD8378E92D0A376226EA7DA63798F247BAC770FE26D70E72F
+90CCFAADF118304646955DE0B9D25C4B419FBF62FB42ED17CD96B7343A615ABE
+10AB49D23B8AC3CA10553C5B5ABC15FF83B6B5A939E450BBF3FF2C25FBE2646A
+6A9E6BB4AAF1D716774D8A9B4A2E0A6E4ED6A9A6795CD10B29D7546F125A21BE
+0398B895C916C715516F37A766638676F975E16121A149ADB6004F87454C33E4
+391FC10668166B6B67FB6E2BBFF0230C9BC38A29DFFA2DB6138C5AB01BAC2AE7
+A20E96CC79CA95C3CFE10D51A2990531795472F073F7EC3FB0448B4340D6B73F
+489723A20DAF9AB0CEA00CE2449A636AF0388CBB9B2A2FFEBA1E0E57D5E31128
+760B48E679280CBCA68D28BC35FFB82CDACE3EC6DFC1FB027C403CE9526B6788
+0B3837C0CCAE8C9A472D14752C743149583EBAA36EE1888DF22132DF186F88DE
+F122D05DA3F652EA9E302228424B3A9D7CA0DAAE7464AFA860F7EAA371531FE0
+D401C99642C01EAFE5601AA5966739FBF7E039BE39B55AF87BEFC2397D3D24F8
+AE5CD3BC5879BC45A5B68340DD379EC5F06DEB6F5A5FBFFC1531E66D5FAF68A3
+0F10ED2D1CDEA6726B14EFD56F445D267198F8B703F7FE3149D2D4E6BEFB728D
+432E427954206D888AB37344E05A2AA9FE94263DEBEED0AA9066F0A123F5731A
+2757746EE2C16B6A94C793820C2B0D21B521C668D851C0DC379887B93290AFE6
+4D31D1CE63CC5F46FF8C1CAA3F315447DEBA2BBFAE7202E3ED7F6EDB2E3C37C2
+A7F54D56F94B336A908960BB1D16BAFA7CE21383158750639CB466E10B0E7AB2
+F7A7540539FEF889C66FA32BF432920C6349609AE67EEC3609253EDE2F97DC50
+30C8198826C4C3AA0F4A7D2C26AC22BA35B4E7E8EAF875F69DE02F6529948962
+F7D040F5B0D3FFD550AF3A286E5F8897F0C66670DF8A538EE0873798A302F1C9
+A5AD2DD1DA6B90E4F35193502FAF3A0C01196F7293619739177A84A709D5E7FD
+B1D6AE62EF2810F276FB45F70368A8A859F103F073B2DCA6FD70358A57D8F4BD
+6F17F027DA2EA1ECD115E55015B8E7E5A690135551035C7278BCFAD631CE352D
+FFFB51FCAA577FF4E034321BB79CB8840A6D6478EDFAE6ACC6F3919F45B3EE78
+B8DFE3113F435F880D73A036314C7E9E19B25934C68D61E74FB39B8583129310
+5D504C604EC9B9526D26B4EE3CDE43ABE11032FC82ABF714B483481A1CDB7AD9
+689CBD1458F7C92359050062932F3A2BA388DA3B0AD9FA201EA42FB2F2A85A8F
+C036F35E585042B2AB1AC07CE55E92FE2B2EDC5420491901AA6CCB5F087548FA
+BADD1CE08BCAC72790AFAE2711D4ED5B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 43 /plus put
+dup 61 /equal put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E
+4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099
+E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634
+5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721
+639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428966C96B6988B
+2C9127404E8C64B122D405610B1207E61D6CB678BF414E64299C22D6B8DA233B
+8E0E897EEAF81E43E962BD1DE1D8F24C8350761B0E688E433D01BCC9ADD5857E
+BE9564F01D501D5F99C4272CA490100395D23DEC1BE59A6DE8D20B90C61434C9
+062B6856C5C61184BD58F20E01B447F6140CB149BD370D59069F121FCA8AC937
+4A86AF9E00E141BE1F2B0DEF30A4AC17817E4B58B1A8921B990F237E64A938AD
+284A1DAB4F3BF58231B22F57219F9BF0E38585D631CF24EB1DDCBB1EA6E3DB31
+88D7C3F8D9EAF27F7239557A2D2EA7AC5AED0DC02CDB0A2C9E4D64C24C3616F3
+AA98D473C46596DC975C149FD66CE806C4529D92B0173BBCDA0D18B2956E0F51
+179D7861557A915D2AA59CE21800265DAF737E83C7B4E9C41F80195E51A95158
+F9CEAFA5ABDEBCDF332BC7107FEA70FDE84269ACCD15BB35D961846217D54B02
+88995D6A3304BF88EEA7ACB9C548195606C4E601789F3562E89A69C40BEA9167
+D3F49BF39DB2D57630674554F297DA605A079220182EA752B31072D46E091410
+D021BFC8B8A1E4D6E2AC110AE143BE32F407F6AAD2FEE259839BF6AEE1B7FAC4
+7597F8E3347EFB48F3DDE6E9198354D1D408AD5657D41F5D11FE6B805FBFA2E2
+F92F6332DDAD4AE77D30758E37B67866D6CEA29B6027812977B8D68A570904DF
+47550EA6773ED0DFE830F8B80BBECAA80EC33DC5ACDD4E683E5B688F5D1F14FA
+A5778EE610C3FCF3429021E2A014F8B0B97BEAFFA7F3868E61B35678D54173BC
+93A7BF29949C2814BB364594DA9ABAA2F2AEC654B0FB8C022B5775582D8CBA0D
+D1AD19333BD74415F40C24E839E48B674B003359EAB05AC8A0ABD358DA7E999D
+1AFE8359E410DE798A76FBF289C701E5DC730913F6FC2FD9693C34013B47C8CF
+84670F3925D2FB69CA3C2C61029C9FD1066AD2C1D640A556E226D7056118CBBB
+CB4C859D64B04B08751F3EFBDEF6F1F352DCBD682F73C89910D7A937D07ED50E
+5DCA560DBAD3A96F708B639F62730A566E7D4D3C6C89BF3868707B721ED3ECD8
+F185314C9D5B4E8456BC0B096F99F1A9AD67E40E0EBF19B06BFE1DE82BA32980
+AA
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 58 /period put
+dup 59 /comma put
+dup 60 /less put
+dup 61 /slash put
+dup 62 /greater put
+dup 96 /lscript put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
+990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
+6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
+DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
+59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
+D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
+8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
+6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
+1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
+03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
+95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
+74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
+3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
+47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
+AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
+42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
+40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
+B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
+95601766730045C2D9F29DC2BFEBDE5E7720CC7D82522859B92B2395E3305B29
+73FD4E10D7424AD26B4CB3A3B63772EAC0C1D2105D9D905BDDAEAE6D1608B712
+3FBE98033DCC0388B4F7C41BB62EDBB86AF2632E2DE8F7647A13F5687010ED09
+4F623DB722C478C95C2876F9D36DC318015CCE51CC458196221F79BC766EC955
+80E17D642DFD23D7FAC69C5536361311640EDCF70A695C64534231AA573D9DD6
+D4DE612F998BA3BC526A9C8CE3B506277D99DFA253E49EBD8E8D1CAC7D29294D
+73A5DBB684E0DB043188F7F4C4D7F651A9E8ABBA7CAC3F9DB366553416ED1F67
+5480281C2356B3C16E14CEE1FAF70A10E28B2729372BAED967E5A5548621E00E
+C11A217F16D8D662FA8743FFEDED1177926DB303E939809999ED4071A8072A92
+AC242B2BCA812DB939859148D52C7298F13D658FDFED1A219001450958CBAC84
+DF255AA7C4C4520E518A0F742B9D4F5E60B9A17450D910FDDD3E619734FDBF86
+90F1ECB58FFE06E9A9DC509ED5EB1592B621FAA0169AE91E2B8AA96783F10823
+A77A12C1A41D79E367A81F2E84FCAE5C655E4FA04BE41F6B396E56BEA0FB69EE
+26AE7AACE7ADAD7ED5EB4B9FDBFF84AAB444D09DFE2854E985C13642EA31A879
+5EFDB4EFD8DEAC4B6D04881FBB7CD09CDDE7A9A78507ED5ECE741AE82AF43633
+F8CA76079DD855F1CE7DE875DD367A06CC953CE09A9C486E4EE4F258BF38FECF
+1ACE6E06A4C153ADEF401392AE903BD28B2520016E4E4955F04E14E0BCC3265C
+256270CBB43C9E92CEA6F973197AF6597D8167E14D30F8230B65B09E260EEA26
+E31F8B8B464874190DF863E216A98CAECDFAB040445693A3FE2664DFF83A4625
+30B159B31248968E45E84E6D913E06CC701BF9BE3D3F991DDF2676B66B0F5898
+C66C48ECF5E544E13397933353CD0A060CA4F441E9E4E79923452D265C17F68D
+B3E7DC14DF2162F8254C8569EBF2F3627990DE0BE81A9FFF77297290F5C7EBC1
+DAFEDC2F8009B29FAD5304B3558E667B2EF4B2FD0C2659B00E97B30AD3E9541D
+233413F2EBCBFBDEE9B26282E263097DA714F8EAC9B8771CDA407491385F23DE
+1F1206237DC4C9801B62D202DC16A18A92B19E2EF605BE5CE03A52D109AF2825
+ECAE7A6B0F8CEBC798BFA3DF006BB3ACE7EB46CB7CF1D26A14805EC936EC0E6E
+426ED2B7B1CE624E49D89D6CF5
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+%%BeginFont: MSAM10
+%!PS-AdobeFont-1.1: MSAM10 2.1
+%%CreationDate: 1993 Sep 17 09:05:00
+% Math Symbol fonts were designed by the American Mathematical Society.
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (2.1) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (MSAM10) readonly def
+/FamilyName (Euler) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /MSAM10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 6 /diamond put
+readonly def
+/FontBBox{8 -463 1331 1003}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1C87678CE98C24B934A76220
+4DD9B2FF3A49786028E35DDE10AD2C926BD30AD47015FFE9469DE1F793D1C53A
+C8812CBCD402444EAEA7A50EC5FD93D6A04C2783B50EA48059E3E7407537CB8D
+4C206846EF0764C05289733920E2399E58AD8F137C229F3CE3E34D2D1EAB2D53
+20D44EFAC8EFA4D14A2EFE389D952527F98D0E49BD5BD2C8D58FF9CB9C78D974
+75C2AB5467D73D2B5E277A3FDC35909938A9DF0EB91BD9159D3437BE22EE4544
+3429AC8E2BFBE34AE54D3BA3AD04BDF3F4F43A2B43992DF88678681B3AB32CFD
+A23E2C98D1AF00AB206AC95B78BBE6316F7A0AB6BD3236C28C76288B3C25D1EB
+E9ABB3576C5EC15A71D26177F5883E9B48293D59015615E2EEAF2E9BA04151ED
+5497B9A1C41CBA44BAFF13EA218F5EAC11952EE336AD1DBE6CE92F002EAA3B3D
+3BE4C3792F3405763C4BD93EFC3B4FC34193439561841BA989DD8D9F9AEE7A7B
+24AEB4654B35023C9720B8F31AA9452E29753FB7915CB29977E725611E37C0B7
+784BCC26FACF8A7A0EB1E54290D27FFE52B2D87FAD080AD15EE1984C37E0EB30
+122C3012D3A16B09C28903D138352AB5462674B6CFB63F1371768D094DDF288C
+36FB9B58443F872D61F2CD8CED42FE0EFF3D7E9952A172BB1AFECB60BF79F2B6
+04265FDE4F78BC9FD619AA733CD0412F1D9A7C13B271BF827DCBDC8ABAE24FF0
+74D3C220621D7FF0EFE62D835A221D0A7C139E2E6681FC2BBA58FA3B80D416EC
+3854C63BA040A4262B458340DAA18AA6AEA3BBAC61615CB85982B18664D3D3AF
+340C65B969071CF2D0CABEB80E04623D0526F862ECA8280EEE236C535F70561A
+854181132E677674AD5E14C6636F57541D3C821F0776D2CB9B8526D4B826791A
+0B179B386A8DA0D481554CE0403EA023B18B1872778F6D7D777422A8F9CF907C
+3CF9B25D896447A44EC6582EE6C72FA2FD57DCBB7B1E822D9BCB1A791E445CB8
+25D721F80CEA8D51C78E22D3D78FF83F2284FA32DF7D50BEA022AE226D6ED003
+71C929BBEB85C9319CAD1E344E160448A9A7E26C6E5BF0725D972D109C371C75
+C6BF8728E14C0D62AC6C6DE55ED9C2BF660DEDA2F13BD8E0A59E7CF34299A797
+BF015CA2E3B3211E455C2F5C0AFA2D23C3D98D98A7F72D03A80B113C6057508B
+7E89EC05DF37083B35836FCA652456E39DA936F2A39DB0D5C563824896D39D93
+FAC9309D5EA7E10A6546385DB15419356137A6A8A823CA8E57F4396CCF3DAD30
+83AD35D6358E1B839D42602E872BB5A498E0ACF9F78B25A5866F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont 
+TeXDict begin 39139632 55387786 1000 600 600
+(/tmp/kde-wdj/kdviHbyvnc.tmp) @start /Fa 26[93 229[{}1
+130.908 /Symbol rf /Fb 164[93 91[{}1 81.818 /TeX-cmex9
+rf /Fc 214[73 73 13[68 53 53 4[67 67 16[42 42{}9 90.9091
+/CMEX10 rf /Fd 205[25 25 49[{TeXBase1Encoding ReEncodeFont}2
+49.8132 /Times-Roman rf /Fe 136[55 119[{TeXBase1Encoding ReEncodeFont}1
+90.9091 /Courier-Oblique rf /Ff 141[19 3[25 36 1[22 14
+14 28[28 9[30 66[{TeXBase1Encoding ReEncodeFont}8 49.8132
+/Times-Italic rf /Fh 205[44 1[18 27[52 16[33 52 1[52{}6
+66.4176 /CMSY10 rf /Fi 165[61 8[71 56 80[{}3 90.9091
+/MSBM10 rf /Fj 165[44 53 1[69 53 53 44 40 49 1[40 53
+53 65 44 2[24 1[53 40 44 53 49 1[53 65[{TeXBase1Encoding ReEncodeFont}
+20 72.7272 /Times-Roman rf /Fk 194[52 17[52 1[26 26 40[{}4
+66.4176 /CMR10 rf /Fl 159[28 34[33 1[18 59[{}3 66.4176
+/CMMI10 rf /Fm 74[33 60[29 44 29 33 18 26 26 33 33 33
+33 48 18 29 18 18 33 33 18 29 33 29 33 33 12[37 3[41
+3[37 3[48 48 41 41 2[41 41 65[{TeXBase1Encoding ReEncodeFont}34
+66.4176 /Times-Italic rf /Fo 162[25 1[25 29[71 17[71
+1[35 35 40[{}6 90.9091 /CMR10 rf /Fp 159[38 33[71 45
+71 25 25 58[{}6 90.9091 /CMMI10 rf /Fq 74[45 58[35 40
+40 61 40 45 25 35 35 45 45 45 45 66 25 40 25 25 45 45
+25 40 45 40 45 45 6[51 51 56 76 56 1[51 45 56 66 56 66
+61 76 51 61 40 30 66 66 56 56 66 61 56 56 18[23 30 23
+1[45 30 30 37[45 2[{TeXBase1Encoding ReEncodeFont}59
+90.9091 /Times-Italic rf /Fr 138[33 18 4[33 33 4[18 2[22
+2[29 44[33 33 33 33 33 33 33 6[22 22 40[{TeXBase1Encoding ReEncodeFont}
+16 66.4176 /Times-Roman rf /Fs 249[61 6[{}1 90.9091 /MSAM10
+rf /Ft 103[46 29[46 46 46 46 46 46 46 46 46 46 46 46
+46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 2[46 1[46
+46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
+46 46 46 46 46 46 46 46 3[46 1[46 46 1[46 1[46 1[46 46
+46 46 46 46 46 46 46 46 46 46 46 46 5[46 33[{
+.85 ExtendFont TeXBase1Encoding ReEncodeFont}76 90.9091
+/Courier rf /Fu 26[65 63[65 50[50 11[47 40 3[57 7[72
+89[{}7 90.9091 /Symbol rf /Fv 148[45 25 35 35 45 45 40
+40 40 40 42[0 0 3[61 8[91 7[91 6[71 4[71 71 1[71 71 1[45
+45 5[71 4[45 71 25 71{}27 90.9091 /CMSY10 rf /Fw 139[57
+1[76 1[96 7[96 2[76 3[86 29[124 11[86 86 86 86 86 86
+86 49[{TeXBase1Encoding ReEncodeFont}14 172.188 /Times-Bold
+rf /Fx 175[55 8[64 5[59 65[{TeXBase1Encoding ReEncodeFont}3
+81.8175 /Helvetica-Bold rf /Fy 169[55 59 50 55 2[55 64
+59 6[64 5[55 65[{TeXBase1Encoding ReEncodeFont}9 81.8175
+/Helvetica rf /Fz 134[45 1[66 1[51 30 35 40 1[51 45 51
+76 25 2[25 51 45 30 40 51 40 1[45 19[86 3[35 1[71 3[66
+61 2[45 5[45 45 45 45 45 45 45 45 45 45 3[23 44[{
+TeXBase1Encoding ReEncodeFont}36 90.9091 /Times-Bold
+rf /FA 134[103 103 149 1[115 69 80 92 1[115 103 115 172
+57 2[57 115 103 69 92 115 92 1[103 14[149 4[195 3[80
+1[161 3[149 138 21[52 44[{TeXBase1Encoding ReEncodeFont}27
+206.559 /Times-Bold rf /FB 138[42 23 32 32 2[42 42 4[23
+6[42 30[55 67[{TeXBase1Encoding ReEncodeFont}9 83.022
+/Times-Italic rf /FC 144[42 11[37 12[50 54 4[50 8[58
+2[54 2[50 65[{TeXBase1Encoding ReEncodeFont}8 74.7193
+/Helvetica rf /FD 242[83 13[{}1 83.022 /CMSY10 rf /FE
+169[40 43 13[47 5[40 65[{TeXBase1Encoding ReEncodeFont}4
+59.7754 /Helvetica-Oblique rf /FF 103[42 15[42 10[42
+1[42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
+42 42 42 42 42 42 42 42 42 42 42 42 1[42 42 42 42 42
+42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
+42 42 42 42 42 42 42 42 42 42 1[42 42 42 42 42 42 42
+42 42 42 42 42 42 42 42 42 42 42 42 42 42 1[42 42 42
+42 42 33[{.85 ExtendFont TeXBase1Encoding ReEncodeFont}91
+83.022 /Courier rf /FH 87[28 16[83 2[37 37 25[42 42 60
+42 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28 37
+42 37 42 37 7[60 60 78 60 60 51 46 55 1[46 60 60 74 51
+1[32 28 60 60 46 51 60 55 55 60 5[23 23 42 1[42 42 42
+42 42 42 42 42 23 21 28 21 1[42 28 28 28 36[46 2[{
+TeXBase1Encoding ReEncodeFont}72 83.022 /Times-Roman
+rf /FI 107[42 42 25[42 2[42 1[28 1[37 2[42 46 1[23 1[28
+23 46 2[37 46 1[46 42 12[55 1[60 4[78 55 1[42 5[60 60
+25[28 28 40[{TeXBase1Encoding ReEncodeFont}25 83.022
+/Times-Bold rf /FJ 107[50 50 24[44 50 50 72 50 55 33
+39 44 55 55 50 55 83 28 55 33 28 55 50 33 44 55 44 55
+50 6[66 2[100 72 72 66 55 72 78 61 78 72 94 66 78 50
+39 78 78 61 66 72 72 66 72 3[57 3[50 50 50 50 50 50 50
+50 50 50 1[25 33 25 57 50 33 33 37[55 2[{TeXBase1Encoding ReEncodeFont}
+71 99.6264 /Times-Bold rf /FK 64[40 22[30 15[30 1[45
+1[40 40 24[40 45 45 66 45 45 25 35 30 45 45 45 45 71
+25 45 25 25 45 45 30 40 45 40 45 40 30 2[30 1[30 56 66
+66 86 66 66 56 51 61 66 51 66 66 81 56 66 35 30 66 66
+51 56 66 61 61 66 3[51 1[25 25 45 45 45 45 45 45 45 45
+45 45 25 23 30 23 51 45 30 30 30 5[30 29[51 51 2[{
+TeXBase1Encoding ReEncodeFont}86 90.9091 /Times-Roman
+rf /FL 169[72 78 4[72 8[84 5[78 65[{TeXBase1Encoding ReEncodeFont}5
+107.596 /Helvetica-Bold rf /FM 134[60 1[86 60 66 40 47
+53 66 66 60 66 100 33 66 1[33 66 60 40 53 66 53 66 60
+10[86 86 80 66 2[73 93 86 113 80 2[47 1[93 73 80 86 86
+80 86 7[60 60 60 60 60 60 60 60 60 60 1[30 40 3[40 40
+40[{TeXBase1Encoding ReEncodeFont}54 119.552 /Times-Bold
+rf /FN 169[124 134 4[124 8[145 5[134 65[{TeXBase1Encoding ReEncodeFont}
+5 185.902 /Helvetica-Bold rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%PaperSize: A4
+ end
+HPSdict begin
+/TargetAnchors
+0 dict dup begin
+end targetdump-hook def end
+TeXDict begin
+%%EndSetup
diff --git a/doc/manual.bib b/doc/manual.bib
new file mode 100644
index 0000000..29fcd76
--- /dev/null
+++ b/doc/manual.bib
@@ -0,0 +1,74 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%A  manual.bib               GUAVA documentation                Reinald Baart
+%A                                                       & Jasper Cramwinckel
+%A                                                          & Erik Roijackers
+%
+%H  $Id: manual.bib,v 1.2 2003/02/12 03:40:23 gap Exp $
+%
+%Y  Copyright (C)  1995,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+%
+
+ at article{GDT91,
+    AUTHOR = {Gabidulin, Ernst M. and Davydov, Alexander A. and Tombak,
+              Leonid M.},
+     TITLE = {Linear codes with covering radius $2$ and other new covering
+              codes},
+   JOURNAL = {IEEE Trans. Inform. Theory},
+    VOLUME = {37},
+      YEAR = {1991},
+    NUMBER = {1},
+     PAGES = {219--224},
+}
+
+ at article{Han99,
+        author  = "J. P. Hansen",
+        title   = "Toric surfaces and error-correcting codes",
+        journal = "Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag",
+        year    = 1999,
+}
+
+ at article{He72,
+        author  = "Hermann~J. Helgert",
+        title   = "Srivastava codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 18,
+        month   = "March",
+        year    = 1972,
+        pages   = "292--297",
+}
+
+ at book{HP03,
+author="W. C. Huffman and V. Pless",
+title="Fundamentals of Error-correcting Codes",
+publisher="Cambridge Univ. Press",
+year=2003}
+
+ at article{Leon88,
+        author  = "Jeffrey~S. Leon",
+        title   = "A Probabilistic Algorithm for Computing Minimum Weights of
+                   Large Error-Correcting Codes",
+        journal = "IEEE Trans. Inform. Theory",
+        volume  = 34,
+        month   = "September",
+        year    = 1988,
+        pages   = "1354--1359",
+}
+
+ at article{Leon91,
+        author  = "Jeffrey~S. Leon",
+        title   = "Permutation group algorithms based on partitions, {I}: theory and algorithms",
+        journal = "J. Symbolic Comput.",
+        volume  = 12,
+        year    = 1991,
+        pages   = "533--583",
+}
+
+ at book{MS83,
+author="F. J. MacWilliams and N. J. A. Sloane",
+title="The Theory of Error-Correcting Codes",
+publisher="Amsterdam: North-Holland",
+year=1983}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%E
diff --git a/doc/manual.blg b/doc/manual.blg
new file mode 100644
index 0000000..7ac4787
--- /dev/null
+++ b/doc/manual.blg
@@ -0,0 +1,51 @@
+This is BibTeX, Version 0.99c (Web2C 7.4.5)
+The top-level auxiliary file: manual.aux
+The style file: alpha.bst
+I couldn't open database file ../../../doc/mrabbrev.bib
+---line 2 of file manual.aux
+ : \bibdata{./manual,../../../doc/mrabbrev
+ :                                        ,../../../doc/manual}
+I'm skipping whatever remains of this command
+Database file #1: ./manual.bib
+You've used 6 entries,
+            2543 wiz_defined-function locations,
+            597 strings with 5241 characters,
+and the built_in function-call counts, 2127 in all, are:
+= -- 209
+> -- 87
+< -- 3
++ -- 29
+- -- 27
+* -- 144
+:= -- 368
+add.period$ -- 18
+call.type$ -- 6
+change.case$ -- 32
+chr.to.int$ -- 6
+cite$ -- 6
+duplicate$ -- 88
+empty$ -- 161
+format.name$ -- 36
+if$ -- 421
+int.to.chr$ -- 1
+int.to.str$ -- 0
+missing$ -- 8
+newline$ -- 33
+num.names$ -- 18
+pop$ -- 33
+preamble$ -- 1
+purify$ -- 40
+quote$ -- 0
+skip$ -- 67
+stack$ -- 0
+substring$ -- 125
+swap$ -- 6
+text.length$ -- 3
+text.prefix$ -- 3
+top$ -- 0
+type$ -- 40
+warning$ -- 0
+while$ -- 21
+width$ -- 10
+write$ -- 77
+(There was 1 error message)
diff --git a/doc/manual.idx b/doc/manual.idx
new file mode 100644
index 0000000..80c7522
--- /dev/null
+++ b/doc/manual.idx
@@ -0,0 +1,283 @@
+\indexentry {guava}{0}
+\indexentry {Acknowledgements at Acknowledgements|indexit}{0}
+\indexentry {Installing GUAVA at Installing GUAVA|indexit}{0}
+\indexentry {Loading GUAVA at Loading GUAVA|indexit}{0}
+\indexentry {codeword}{0}
+\indexentry {Construction of Codewords at Construction of Codewords|indexit}{0}
+\indexentry {Codeword@`Codeword'}{0}
+\indexentry {Codeword@`Codeword'}{0}
+\indexentry {IsCodeword@`IsCodeword'}{0}
+\indexentry {Comparisons of Codewords at Comparisons of Codewords|indexit}{0}
+\indexentry {codewords!equality}{0}
+\indexentry {codewords!inequality}{0}
+\indexentry {Arithmetic Operations for Codewords at Arithmetic Operations for Codewords|indexit}{0}
+\indexentry {codewords!addition}{0}
+\indexentry {codewords!subtraction}{0}
+\indexentry {code!cosets}{0}
+\indexentry {code!cosets}{0}
+\indexentry {Functions that Convert Codewords to Vectors or Polynomials at Functions that Convert Codewords to Vectors or Polynomials|indexit}{0}
+\indexentry {VectorCodeword@`VectorCodeword'}{0}
+\indexentry {PolyCodeword@`PolyCodeword'}{0}
+\indexentry {Functions that Change the Display Form of a Codeword at Functions that Change the Display Form of a Codeword|indexit}{0}
+\indexentry {TreatAsVector@`TreatAsVector'}{0}
+\indexentry {TreatAsPoly@`TreatAsPoly'}{0}
+\indexentry {Other Codeword Functions at Other Codeword Functions|indexit}{0}
+\indexentry {NullWord@`NullWord'}{0}
+\indexentry {NullWord@`NullWord'}{0}
+\indexentry {NullWord@`NullWord'}{0}
+\indexentry {DistanceCodeword@`DistanceCodeword'}{0}
+\indexentry {Support@`Support'}{0}
+\indexentry {WeightCodeword@`WeightCodeword'}{0}
+\indexentry {code}{0}
+\indexentry {linear code}{0}
+\indexentry {code!linear}{0}
+\indexentry {unrestricted code}{0}
+\indexentry {code!unrestricted}{0}
+\indexentry {cyclic code}{0}
+\indexentry {code!cyclic}{0}
+\indexentry {Comparisons of Codes at Comparisons of Codes|indexit}{0}
+\indexentry {codes!equality}{0}
+\indexentry {codes!inequality}{0}
+\indexentry {Operations for Codes at Operations for Codes|indexit}{0}
+\indexentry {codes!adition}{0}
+\indexentry {codes!coset}{0}
+\indexentry {codes!coset}{0}
+\indexentry {codes!product}{0}
+\indexentry {code!evaluation}{0}
+\indexentry {code!element test}{0}
+\indexentry {code!subcode}{0}
+\indexentry {Boolean Functions for Codes at Boolean Functions for Codes|indexit}{0}
+\indexentry {IsCode@`IsCode'}{0}
+\indexentry {IsLinearCode@`IsLinearCode'}{0}
+\indexentry {IsCyclicCode@`IsCyclicCode'}{0}
+\indexentry {IsPerfectCode@`IsPerfectCode'}{0}
+\indexentry {IsMDSCode@`IsMDSCode'}{0}
+\indexentry {IsSelfDualCode@`IsSelfDualCode'}{0}
+\indexentry {IsSelfOrthogonalCode@`IsSelfOrthogonalCode'}{0}
+\indexentry {Equivalence and Isomorphism of Codes at Equivalence and Isomorphism of Codes|indexit}{0}
+\indexentry {IsEquivalent@`IsEquivalent'}{0}
+\indexentry {CodeIsomorphism@`CodeIsomorphism'}{0}
+\indexentry {AutomorphismGroup@`AutomorphismGroup'}{0}
+\indexentry {PermutationGroup@`PermutationGroup'}{0}
+\indexentry {Domain Functions for Codes at Domain Functions for Codes|indexit}{0}
+\indexentry {IsFinite@`IsFinite'}{0}
+\indexentry {Size@`Size'}{0}
+\indexentry {LeftActingDomain@`LeftActingDomain'}{0}
+\indexentry {Dimension@`Dimension'}{0}
+\indexentry {AsSSortedList@`AsSSortedList'}{0}
+\indexentry {CodewordNr@`CodewordNr'}{0}
+\indexentry {Printing and Displaying Codes at Printing and Displaying Codes|indexit}{0}
+\indexentry {Print@`Print'}{0}
+\indexentry {String@`String'}{0}
+\indexentry {Display@`Display'}{0}
+\indexentry {Generating (Check) Matrices and Polynomials at Generating (Check) Matrices and Polynomials|indexit}{0}
+\indexentry {GeneratorMat@`GeneratorMat'}{0}
+\indexentry {CheckMat@`CheckMat'}{0}
+\indexentry {GeneratorPol@`GeneratorPol'}{0}
+\indexentry {CheckPol@`CheckPol'}{0}
+\indexentry {RootsOfCode@`RootsOfCode'}{0}
+\indexentry {Parameters of Codes at Parameters of Codes|indexit}{0}
+\indexentry {WordLength@`WordLength'}{0}
+\indexentry {Redundancy@`Redundancy'}{0}
+\indexentry {MinimumDistance@`MinimumDistance'}{0}
+\indexentry {MinimumDistance@`MinimumDistance'}{0}
+\indexentry {MinimumDistanceLeon@`MinimumDistanceLeon'}{0}
+\indexentry {Distributions at Distributions|indexit}{0}
+\indexentry {WeightDistribution@`WeightDistribution'}{0}
+\indexentry {InnerDistribution@`InnerDistribution'}{0}
+\indexentry {OuterDistribution@`OuterDistribution'}{0}
+\indexentry {DistancesDistribution@`DistancesDistribution'}{0}
+\indexentry {Decoding Functions at Decoding Functions|indexit}{0}
+\indexentry {Decode@`Decode'}{0}
+\indexentry {Syndrome@`Syndrome'}{0}
+\indexentry {SyndromeTable@`SyndromeTable'}{0}
+\indexentry {StandardArray@`StandardArray'}{0}
+\indexentry {PermutationDecode@`PermutationDecode'}{0}
+\indexentry {Generating Unrestricted Codes at Generating Unrestricted Codes|indexit}{0}
+\indexentry {ElementsCode@`ElementsCode'}{0}
+\indexentry {HadamardCode@`HadamardCode'}{0}
+\indexentry {HadamardCode@`HadamardCode'}{0}
+\indexentry {HadamardCode@`HadamardCode'}{0}
+\indexentry {HadamardCode@`HadamardCode'}{0}
+\indexentry {ConferenceCode@`ConferenceCode'!from a matrix}{0}
+\indexentry {ConferenceCode@`ConferenceCode'!from an integer}{0}
+\indexentry {MOLSCode@`MOLSCode'}{0}
+\indexentry {MOLSCode@`MOLSCode'}{0}
+\indexentry {RandomCode@`RandomCode'}{0}
+\indexentry {NordstromRobinsonCode@`NordstromRobinsonCode'}{0}
+\indexentry {GreedyCode@`GreedyCode'}{0}
+\indexentry {LexiCode@`LexiCode'}{0}
+\indexentry {LexiCode@`LexiCode'!using a basis}{0}
+\indexentry {Generating Linear Codes at Generating Linear Codes|indexit}{0}
+\indexentry {GeneratorMatCode@`GeneratorMatCode'}{0}
+\indexentry {CheckMatCode@`CheckMatCode'}{0}
+\indexentry {HammingCode@`HammingCode'}{0}
+\indexentry {ReedMullerCode@`ReedMullerCode'}{0}
+\indexentry {AlternantCode@`AlternantCode'}{0}
+\indexentry {AlternantCode@`AlternantCode'}{0}
+\indexentry {GoppaCode@`GoppaCode'!with list of field elements parameter}{0}
+\indexentry {GoppaCode@`GoppaCode'!with integer parameter}{0}
+\indexentry {GeneralizedSrivastavaCode@`GeneralizedSrivastavaCode'}{0}
+\indexentry {GeneralizedSrivastavaCode@`GeneralizedSrivastavaCode'}{0}
+\indexentry {SrivastavaCode@`SrivastavaCode'}{0}
+\indexentry {SrivastavaCode@`SrivastavaCode'}{0}
+\indexentry {CordaroWagnerCode@`CordaroWagnerCode'}{0}
+\indexentry {RandomLinearCode@`RandomLinearCode'}{0}
+\indexentry {BestKnownLinearCode@`BestKnownLinearCode'}{0}
+\indexentry {BestKnownLinearCode@`BestKnownLinearCode'!of a record}{0}
+\indexentry {Golay Codes at Golay Codes|indexit}{0}
+\indexentry {BinaryGolayCode@`BinaryGolayCode'}{0}
+\indexentry {ExtendedBinaryGolayCode@`ExtendedBinaryGolayCode'}{0}
+\indexentry {TernaryGolayCode@`TernaryGolayCode'}{0}
+\indexentry {ExtendedTernaryGolayCode@`ExtendedTernaryGolayCode'}{0}
+\indexentry {Generating Cyclic Codes at Generating Cyclic Codes|indexit}{0}
+\indexentry {check polynomial}{0}
+\indexentry {GeneratorPolCode@`GeneratorPolCode'}{0}
+\indexentry {CheckPolCode@`CheckPolCode'}{0}
+\indexentry {RootsCode@`RootsCode'}{0}
+\indexentry {RootsCode@`RootsCode'!with field}{0}
+\indexentry {BCHCode@`BCHCode'}{0}
+\indexentry {BCHCode@`BCHCode'}{0}
+\indexentry {Bose distance}{0}
+\indexentry {ReedSolomonCode@`ReedSolomonCode'}{0}
+\indexentry {QRCode@`QRCode'}{0}
+\indexentry {FireCode@`FireCode'}{0}
+\indexentry {WholeSpaceCode@`WholeSpaceCode'}{0}
+\indexentry {NullCode@`NullCode'}{0}
+\indexentry {RepetitionCode@`RepetitionCode'}{0}
+\indexentry {CyclicCodes@`CyclicCodes'}{0}
+\indexentry {NrCyclicCodes@`NrCyclicCodes'}{0}
+\indexentry {Toric codes at Toric codes|indexit}{0}
+\indexentry {ToricCode@`ToricCode'}{0}
+\indexentry {ToricPoints@`ToricPoints'}{0}
+\indexentry {Functions that Generate a New Code from a Given Code at Functions that Generate a New Code from a Given Code|indexit}{0}
+\indexentry {Parity check}{0}
+\indexentry {ExtendedCode@`ExtendedCode'}{0}
+\indexentry {PuncturedCode@`PuncturedCode'}{0}
+\indexentry {PuncturedCode@`PuncturedCode'!with list of punctures}{0}
+\indexentry {EvenWeightSubcode@`EvenWeightSubcode'}{0}
+\indexentry {PermutedCode@`PermutedCode'}{0}
+\indexentry {ExpurgatedCode@`ExpurgatedCode'}{0}
+\indexentry {AugmentedCode@`AugmentedCode'}{0}
+\indexentry {AugmentedCode@`AugmentedCode'!without a list of codewords}{0}
+\indexentry {RemovedElementsCode@`RemovedElementsCode'}{0}
+\indexentry {AddedElementsCode@`AddedElementsCode'}{0}
+\indexentry {ShortenedCode@`ShortenedCode'}{0}
+\indexentry {ShortenedCode@`ShortenedCode'!with list of columns}{0}
+\indexentry {LengthenedCode@`LengthenedCode'}{0}
+\indexentry {ResidueCode@`ResidueCode'}{0}
+\indexentry {ConstructionBCode@`ConstructionBCode'}{0}
+\indexentry {DualCode@`DualCode'}{0}
+\indexentry {ConversionFieldCode@`ConversionFieldCode'}{0}
+\indexentry {CosetCode@`CosetCode'}{0}
+\indexentry {ConstantWeightSubcode@`ConstantWeightSubcode'}{0}
+\indexentry {ConstantWeightSubcode@`ConstantWeightSubcode'!for all minimum weight codewords}{0}
+\indexentry {StandardFormCode@`StandardFormCode'}{0}
+\indexentry {Functions that Generate a New Code from Two Given Codes at Functions that Generate a New Code from Two Given Codes|indexit}{0}
+\indexentry {DirectSumCode@`DirectSumCode'}{0}
+\indexentry {UUVCode@`UUVCode'}{0}
+\indexentry {DirectProductCode@`DirectProductCode'}{0}
+\indexentry {IntersectionCode@`IntersectionCode'}{0}
+\indexentry {UnionCode@`UnionCode'}{0}
+\indexentry {Bounds on codes at Bounds on codes|indexit}{0}
+\indexentry {Bounds at bounds!Singleton}{0}
+\indexentry {UpperBoundSingleton@`UpperBoundSingleton'}{0}
+\indexentry {maximum distance separable}{0}
+\indexentry {Bounds at bounds!Hamming}{0}
+\indexentry {Bounds!Sphere packing bound}{0}
+\indexentry {UpperBoundHamming@`UpperBoundHamming'}{0}
+\indexentry {Bounds at bounds!Johnson}{0}
+\indexentry {UpperBoundJohnson@`UpperBoundJohnson'}{0}
+\indexentry {Bounds at bounds!Plotkin}{0}
+\indexentry {UpperBoundPlotkin@`UpperBoundPlotkin'}{0}
+\indexentry {Bounds at bounds!Elias}{0}
+\indexentry {UpperBoundElias@`UpperBoundElias'}{0}
+\indexentry {Bounds at bounds!Griesmer}{0}
+\indexentry {UpperBoundGriesmer@`UpperBoundGriesmer'}{0}
+\indexentry {Bounds!Upper Bound}{0}
+\indexentry {UpperBound@`UpperBound'}{0}
+\indexentry {LowerBoundMinimumDistance@`LowerBoundMinimumDistance'}{0}
+\indexentry {LowerBoundMinimumDistance@`LowerBoundMinimumDistance'!of codes over a field}{0}
+\indexentry {UpperBoundMinimumDistance@`UpperBoundMinimumDistance'}{0}
+\indexentry {UpperBoundMinimumDistance@`UpperBoundMinimumDistance'!of codes over a field}{0}
+\indexentry {BoundsMinimumDistance@`BoundsMinimumDistance'}{0}
+\indexentry {Special matrices in GUAVA at Special matrices in GUAVA|indexit}{0}
+\indexentry {KrawtchoukMat@`KrawtchoukMat'}{0}
+\indexentry {GrayMat@`GrayMat'}{0}
+\indexentry {SylvesterMat@`SylvesterMat'}{0}
+\indexentry {HadamardMat@`HadamardMat'}{0}
+\indexentry {Mutually Orthogonal Latin Squares at mutually orthogonal Latin squares}{0}
+\indexentry {MOLS@`MOLS'}{0}
+\indexentry {MOLS@`MOLS'}{0}
+\indexentry {PutStandardForm@`PutStandardForm'}{0}
+\indexentry {PutStandardForm@`PutStandardForm'}{0}
+\indexentry {IsInStandardForm@`IsInStandardForm'}{0}
+\indexentry {IsInStandardForm@`IsInStandardForm'}{0}
+\indexentry {PermutedCols@`PermutedCols'}{0}
+\indexentry {VerticalConversionFieldMat@`VerticalConversionFieldMat'}{0}
+\indexentry {HorizontalConversionFieldMat@`HorizontalConversionFieldMat'}{0}
+\indexentry {IsLatinSquare@`IsLatinSquare'}{0}
+\indexentry {AreMOLS@`AreMOLS'}{0}
+\indexentry {Miscellaneous functions at Miscellaneous functions|indexit}{0}
+\indexentry {SphereContent@`SphereContent'}{0}
+\indexentry {Krawtchouk@`Krawtchouk'}{0}
+\indexentry {PrimitiveUnityRoot@`PrimitiveUnityRoot'}{0}
+\indexentry {ReciprocalPolynomial@`ReciprocalPolynomial'}{0}
+\indexentry {ReciprocalPolynomial@`ReciprocalPolynomial'}{0}
+\indexentry {CyclotomicCosets@`CyclotomicCosets'}{0}
+\indexentry {WeightHistogram@`WeightHistogram'}{0}
+\indexentry {WeightHistogram@`WeightHistogram'}{0}
+\indexentry {Some functions for the covering radius at Some functions for the covering radius|indexit}{0}
+\indexentry {CoveringRadius@`CoveringRadius'}{0}
+\indexentry {BoundsCoveringRadius@`BoundsCoveringRadius'}{0}
+\indexentry {SetCoveringRadius@`SetCoveringRadius'}{0}
+\indexentry {IncreaseCoveringRadiusLowerBound@`IncreaseCoveringRadiusLowerBound'}{0}
+\indexentry {ExhaustiveSearchCoveringRadius@`ExhaustiveSearchCoveringRadius'}{0}
+\indexentry {GeneralLowerBoundCoveringRadius@`GeneralLowerBoundCoveringRadius'}{0}
+\indexentry {GeneralUpperBoundCoveringRadius@`GeneralUpperBoundCoveringRadius'}{0}
+\indexentry {LowerBoundCoveringRadiusSphereCovering@`LowerBoundCoveringRadiusSphereCovering'}{0}
+\indexentry {LowerBoundCoveringRadiusSphereCovering@`LowerBoundCoveringRadiusSphereCovering'}{0}
+\indexentry {LowerBoundCoveringRadiusVanWee1@`LowerBoundCoveringRadiusVanWee1'}{0}
+\indexentry {LowerBoundCoveringRadiusVanWee1@`LowerBoundCoveringRadiusVanWee1'}{0}
+\indexentry {LowerBoundCoveringRadiusVanWee2@`LowerBoundCoveringRadiusVanWee2'}{0}
+\indexentry {LowerBoundCoveringRadiusVanWee2@`LowerBoundCoveringRadiusVanWee2'}{0}
+\indexentry {LowerBoundCoveringRadiusCountingExcess@`LowerBoundCoveringRadiusCountingExcess'}{0}
+\indexentry {LowerBoundCoveringRadiusCountingExcess@`LowerBoundCoveringRadiusCountingExcess'}{0}
+\indexentry {LowerBoundCoveringRadiusEmbedded1@`LowerBoundCoveringRadiusEmbedded1'}{0}
+\indexentry {LowerBoundCoveringRadiusEmbedded1@`LowerBoundCoveringRadiusEmbedded1'}{0}
+\indexentry {LowerBoundCoveringRadiusEmbedded2@`LowerBoundCoveringRadiusEmbedded2'}{0}
+\indexentry {LowerBoundCoveringRadiusEmbedded2@`LowerBoundCoveringRadiusEmbedded2'}{0}
+\indexentry {LowerBoundCoveringRadiusInduction@`LowerBoundCoveringRadiusInduction'}{0}
+\indexentry {UpperBoundCoveringRadiusRedundancy@`UpperBoundCoveringRadiusRedundancy'}{0}
+\indexentry {external distance}{0}
+\indexentry {UpperBoundCoveringRadiusDelsarte@`UpperBoundCoveringRadiusDelsarte'}{0}
+\indexentry {UpperBoundCoveringRadiusStrength@`UpperBoundCoveringRadiusStrength'}{0}
+\indexentry {UpperBoundCoveringRadiusGriesmerLike@`UpperBoundCoveringRadiusGriesmerLike'}{0}
+\indexentry {UpperBoundCoveringRadiusCyclicCode@`UpperBoundCoveringRadiusCyclicCode'}{0}
+\indexentry {New code constructions at New code constructions|indexit}{0}
+\indexentry {ExtendedDirectSumCode@`ExtendedDirectSumCode'}{0}
+\indexentry {AmalgamatedDirectSumCode@`AmalgamatedDirectSumCode'}{0}
+\indexentry {BlockwiseDirectSumCode@`BlockwiseDirectSumCode'}{0}
+\indexentry {PiecewiseConstantCode@`PiecewiseConstantCode'}{0}
+\indexentry {Gabidulin codes at Gabidulin codes|indexit}{0}
+\indexentry {GabidulinCode@`GabidulinCode'}{0}
+\indexentry {EnlargedGabidulinCode@`EnlargedGabidulinCode'}{0}
+\indexentry {DavydovCode@`DavydovCode'}{0}
+\indexentry {TombakCode@`TombakCode'}{0}
+\indexentry {EnlargedTombakCode@`EnlargedTombakCode'}{0}
+\indexentry {Some functions related to the norm of a code at Some functions related to the norm of a code|indexit}{0}
+\indexentry {CoordinateNorm@`CoordinateNorm'}{0}
+\indexentry {CodeNorm@`CodeNorm'}{0}
+\indexentry {IsCoordinateAcceptable@`IsCoordinateAcceptable'}{0}
+\indexentry {GeneralizedCodeNorm@`GeneralizedCodeNorm'}{0}
+\indexentry {IsNormalCode@`IsNormalCode'}{0}
+\indexentry {DecreaseMinimumDistanceLowerBound@`DecreaseMinimumDistanceLowerBound'}{0}
+\indexentry {New miscellaneous functions at New miscellaneous functions|indexit}{0}
+\indexentry {CodeWeightEnumerator@`CodeWeightEnumerator'}{0}
+\indexentry {CodeDistanceEnumerator@`CodeDistanceEnumerator'}{0}
+\indexentry {CodeMacWilliamsTransform@`CodeMacWilliamsTransform'}{0}
+\indexentry {IsSelfComplementaryCode@`IsSelfComplementaryCode'}{0}
+\indexentry {IsAffineCode@`IsAffineCode'}{0}
+\indexentry {IsAlmostAffineCode@`IsAlmostAffineCode'}{0}
+\indexentry {IsGriesmerCode@`IsGriesmerCode'}{0}
+\indexentry {CodeDensity@`CodeDensity'}{0}
diff --git a/doc/manual.ilg b/doc/manual.ilg
new file mode 100644
index 0000000..bc331c8
--- /dev/null
+++ b/doc/manual.ilg
@@ -0,0 +1,7 @@
+This is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support).
+Scanning style file ./manual.mst................done (16 attributes redefined, 0 ignored).
+Scanning input file manual.idx....done (283 entries accepted, 0 rejected).
+Sorting entries.....done (2383 comparisons).
+Generating output file manual.ind....done (280 lines written, 0 warnings).
+Output written in manual.ind.
+Transcript written in manual.ilg.
diff --git a/doc/manual.ind b/doc/manual.ind
new file mode 100644
index 0000000..79f3c01
--- /dev/null
+++ b/doc/manual.ind
@@ -0,0 +1,280 @@
+\letter A
+  Acknowledgements, \indexit{3}
+  `AddedElementsCode', 44
+  `AlternantCode', 31
+  `AmalgamatedDirectSumCode', 68
+  `AreMOLS', 59
+  Arithmetic Operations for Codewords, \indexit{7}
+  `AsSSortedList', 18
+  `AugmentedCode', 43
+    \sub without a list of codewords, 43
+  `AutomorphismGroup', 16
+\letter B
+  `BCHCode', 37
+  `BestKnownLinearCode', 33
+    \sub of a record, 34
+  `BinaryGolayCode', 34
+  `BlockwiseDirectSumCode', 68
+  Boolean Functions for Codes, \indexit{14}
+  Bose distance, 37
+  Bounds, Sphere packing bound, 51
+    \sub Upper Bound, 53
+  bounds, Elias, 52
+    \sub Griesmer, 53
+    \sub Hamming, 51
+    \sub Johnson, 52
+    \sub Plotkin, 52
+    \sub Singleton, 51
+  Bounds on codes, \indexit{51}
+  `BoundsCoveringRadius', 63
+  `BoundsMinimumDistance', 54
+\letter C
+  check polynomial, 35
+  `CheckMat', 20
+  `CheckMatCode', 31
+  `CheckPol', 20
+  `CheckPolCode', 36
+  code, 11
+    \sub cosets, 7
+    \sub cyclic, 11
+    \sub element test, 13
+    \sub evaluation, 13
+    \sub linear, 11
+    \sub subcode, 14
+    \sub unrestricted, 11
+  `CodeDensity', 73
+  `CodeDistanceEnumerator', 72
+  `CodeIsomorphism', 16
+  `CodeMacWilliamsTransform', 72
+  `CodeNorm', 70
+  codes, adition, 13
+    \sub coset, 13
+    \sub equality, 12
+    \sub inequality, 12
+    \sub product, 13
+  `CodeWeightEnumerator', 71
+  `Codeword', 5, 6
+  codeword, 5
+  `CodewordNr', 18
+  codewords, addition, 7
+    \sub equality, 7
+    \sub inequality, 7
+    \sub subtraction, 7
+  Comparisons of Codes, \indexit{12}
+  Comparisons of Codewords, \indexit{7}
+  `ConferenceCode', from a matrix, 28
+    \sub from an integer, 28
+  `ConstantWeightSubcode', 47
+    \sub for all minimum weight codewords, 47
+  Construction of Codewords, \indexit{5}
+  `ConstructionBCode', 46
+  `ConversionFieldCode', 46
+  `CoordinateNorm', 70
+  `CordaroWagnerCode', 33
+  `CosetCode', 47
+  `CoveringRadius', 62
+  cyclic code, 11
+  `CyclicCodes', 39
+  `CyclotomicCosets', 60
+\letter D
+  `DavydovCode', 69
+  `Decode', 24
+  Decoding Functions, \indexit{24}
+  `DecreaseMinimumDistanceLowerBound', 71
+  `Dimension', 18
+  `DirectProductCode', 49
+  `DirectSumCode', 48
+  `Display', 19
+  `DistanceCodeword', 9
+  `DistancesDistribution', 23
+  Distributions, \indexit{22}
+  Domain Functions for Codes, \indexit{17}
+  `DualCode', 46
+\letter E
+  `ElementsCode', 27
+  `EnlargedGabidulinCode', 69
+  `EnlargedTombakCode', 70
+  Equivalence and Isomorphism of Codes, \indexit{16}
+  `EvenWeightSubcode', 42
+  `ExhaustiveSearchCoveringRadius', 64
+  `ExpurgatedCode', 43
+  `ExtendedBinaryGolayCode', 34
+  `ExtendedCode', 41
+  `ExtendedDirectSumCode', 67
+  `ExtendedTernaryGolayCode', 35
+  external distance, 66
+\letter F
+  `FireCode', 38
+  Functions that Change the Display Form of a Codeword, \indexit{8}
+  Functions that Convert Codewords to Vectors or Polynomials, \indexit{8}
+  Functions that Generate a New Code from a Given Code, \indexit{41}
+  Functions that Generate a New Code from Two Given Codes, \indexit{48}
+\letter G
+  Gabidulin codes, \indexit{69}
+  `GabidulinCode', 69
+  `GeneralizedCodeNorm', 71
+  `GeneralizedSrivastavaCode', 32
+  `GeneralLowerBoundCoveringRadius', 64
+  `GeneralUpperBoundCoveringRadius', 64
+  Generating (Check) Matrices and Polynomials, \indexit{19}
+  Generating Cyclic Codes, \indexit{35}
+  Generating Linear Codes, \indexit{30}
+  Generating Unrestricted Codes, \indexit{27}
+  `GeneratorMat', 19
+  `GeneratorMatCode', 30
+  `GeneratorPol', 20
+  `GeneratorPolCode', 35
+  Golay Codes, \indexit{34}
+  `GoppaCode', with integer parameter, 32
+    \sub with list of field elements parameter, 32
+  `GrayMat', 55
+  `GreedyCode', 29
+  guava, 3
+\letter H
+  `HadamardCode', 27, 28
+  `HadamardMat', 56
+  `HammingCode', 31
+  `HorizontalConversionFieldMat', 58
+\letter I
+  `IncreaseCoveringRadiusLowerBound', 64
+  `InnerDistribution', 23
+  Installing GUAVA, \indexit{3}
+  `IntersectionCode', 49
+  `IsAffineCode', 72
+  `IsAlmostAffineCode', 73
+  `IsCode', 14
+  `IsCodeword', 6
+  `IsCoordinateAcceptable', 70
+  `IsCyclicCode', 14
+  `IsEquivalent', 16
+  `IsFinite', 17
+  `IsGriesmerCode', 73
+  `IsInStandardForm', 57
+  `IsLatinSquare', 59
+  `IsLinearCode', 14
+  `IsMDSCode', 15
+  `IsNormalCode', 71
+  `IsPerfectCode', 15
+  `IsSelfComplementaryCode', 72
+  `IsSelfDualCode', 15
+  `IsSelfOrthogonalCode', 16
+\letter K
+  `Krawtchouk', 60
+  `KrawtchoukMat', 55
+\letter L
+  `LeftActingDomain', 17
+  `LengthenedCode', 45
+  `LexiCode', 30
+    \sub using a basis, 30
+  linear code, 11
+  Loading GUAVA, \indexit{4}
+  `LowerBoundCoveringRadiusCountingExcess', 65
+  `LowerBoundCoveringRadiusEmbedded1', 66
+  `LowerBoundCoveringRadiusEmbedded2', 66
+  `LowerBoundCoveringRadiusInduction', 66
+  `LowerBoundCoveringRadiusSphereCovering', 65
+  `LowerBoundCoveringRadiusVanWee1', 65
+  `LowerBoundCoveringRadiusVanWee2', 65
+  `LowerBoundMinimumDistance', 53
+    \sub of codes over a field, 53
+\letter M
+  maximum distance separable, 51
+  `MinimumDistance', 21, 22
+  `MinimumDistanceLeon', 22
+  Miscellaneous functions, \indexit{59}
+  `MOLS', 56
+  `MOLSCode', 28
+  mutually orthogonal Latin squares, 56
+\letter N
+  New code constructions, \indexit{67}
+  New miscellaneous functions, \indexit{71}
+  `NordstromRobinsonCode', 29
+  `NrCyclicCodes', 39
+  `NullCode', 38
+  `NullWord', 9
+\letter O
+  Operations for Codes, \indexit{13}
+  Other Codeword Functions, \indexit{9}
+  `OuterDistribution', 23
+\letter P
+  Parameters of Codes, \indexit{21}
+  Parity check, 41
+  `PermutationDecode', 25
+  `PermutationGroup', 17
+  `PermutedCode', 42
+  `PermutedCols', 58
+  `PiecewiseConstantCode', 69
+  `PolyCodeword', 8
+  `PrimitiveUnityRoot', 60
+  `Print', 18
+  Printing and Displaying Codes, \indexit{18}
+  `PuncturedCode', 41
+    \sub with list of punctures, 41
+  `PutStandardForm', 57
+\letter Q
+  `QRCode', 37
+\letter R
+  `RandomCode', 29
+  `RandomLinearCode', 33
+  `ReciprocalPolynomial', 60
+  `Redundancy', 21
+  `ReedMullerCode', 31
+  `ReedSolomonCode', 37
+  `RemovedElementsCode', 44
+  `RepetitionCode', 38
+  `ResidueCode', 45
+  `RootsCode', 36
+    \sub with field, 36
+  `RootsOfCode', 21
+\letter S
+  `SetCoveringRadius', 63
+  `ShortenedCode', 44
+    \sub with list of columns, 45
+  `Size', 17
+  Some functions for the covering radius, \indexit{62}
+  Some functions related to the norm of a code, \indexit{70}
+  Special matrices in GUAVA, \indexit{55}
+  `SphereContent', 59
+  `SrivastavaCode', 32
+  `StandardArray', 25
+  `StandardFormCode', 48
+  `String', 19
+  `Support', 9
+  `SylvesterMat', 55
+  `Syndrome', 24
+  `SyndromeTable', 25
+\letter T
+  `TernaryGolayCode', 35
+  `TombakCode', 69
+  Toric codes, \indexit{39}
+  `ToricCode', 39
+  `ToricPoints', 39
+  `TreatAsPoly', 8
+  `TreatAsVector', 8
+\letter U
+  `UnionCode', 49
+  unrestricted code, 11
+  `UpperBound', 53
+  `UpperBoundCoveringRadiusCyclicCode', 67
+  `UpperBoundCoveringRadiusDelsarte', 66
+  `UpperBoundCoveringRadiusGriesmerLike', 67
+  `UpperBoundCoveringRadiusRedundancy', 66
+  `UpperBoundCoveringRadiusStrength', 67
+  `UpperBoundElias', 52
+  `UpperBoundGriesmer', 53
+  `UpperBoundHamming', 51
+  `UpperBoundJohnson', 52
+  `UpperBoundMinimumDistance', 54
+    \sub of codes over a field, 54
+  `UpperBoundPlotkin', 52
+  `UpperBoundSingleton', 51
+  `UUVCode', 48
+\letter V
+  `VectorCodeword', 8
+  `VerticalConversionFieldMat', 58
+\letter W
+  `WeightCodeword', 10
+  `WeightDistribution', 22
+  `WeightHistogram', 61
+  `WholeSpaceCode', 38
+  `WordLength', 21
diff --git a/doc/manual.lab b/doc/manual.lab
new file mode 100644
index 0000000..1a766f1
--- /dev/null
+++ b/doc/manual.lab
@@ -0,0 +1,275 @@
+\makelabel{guava:The GAP error-correcting codes package GUAVA}{1}
+\makelabel{guava:Acknowledgements}{1.1}
+\makelabel{guava:Installing GUAVA}{1.2}
+\makelabel{guava:Loading GUAVA}{1.3}
+\makelabel{guava:Codewords}{2}
+\makelabel{guava:Construction of Codewords}{2.1}
+\makelabel{guava:Codeword}{2.1.1}
+\makelabel{guava:Codeword}{2.1.2}
+\makelabel{guava:IsCodeword}{2.1.3}
+\makelabel{guava:Comparisons of Codewords}{2.2}
+\makelabel{guava:codewords!equality}{2.2.1}
+\makelabel{guava:codewords!inequality}{2.2.1}
+\makelabel{guava:Arithmetic Operations for Codewords}{2.3}
+\makelabel{guava:codewords!addition}{2.3.1}
+\makelabel{guava:codewords!subtraction}{2.3.2}
+\makelabel{guava:code!cosets}{2.3.3}
+\makelabel{guava:code!cosets}{2.3.3}
+\makelabel{guava:Functions that Convert Codewords to Vectors or Polynomials}{2.4}
+\makelabel{guava:VectorCodeword}{2.4.1}
+\makelabel{guava:PolyCodeword}{2.4.2}
+\makelabel{guava:Functions that Change the Display Form of a Codeword}{2.5}
+\makelabel{guava:TreatAsVector}{2.5.1}
+\makelabel{guava:TreatAsPoly}{2.5.2}
+\makelabel{guava:Other Codeword Functions}{2.6}
+\makelabel{guava:NullWord}{2.6.1}
+\makelabel{guava:NullWord}{2.6.1}
+\makelabel{guava:NullWord}{2.6.1}
+\makelabel{guava:DistanceCodeword}{2.6.2}
+\makelabel{guava:Support}{2.6.3}
+\makelabel{guava:WeightCodeword}{2.6.4}
+\makelabel{guava:Codes}{3}
+\makelabel{guava:Comparisons of Codes}{3.1}
+\makelabel{guava:codes!equality}{3.1.1}
+\makelabel{guava:codes!inequality}{3.1.1}
+\makelabel{guava:Operations for Codes}{3.2}
+\makelabel{guava:codes!adition}{3.2.1}
+\makelabel{guava:codes!coset}{3.2.2}
+\makelabel{guava:codes!coset}{3.2.2}
+\makelabel{guava:codes!product}{3.2.3}
+\makelabel{guava:code!evaluation}{3.2.4}
+\makelabel{guava:code!element test}{3.2.5}
+\makelabel{guava:code!subcode}{3.2.6}
+\makelabel{guava:Boolean Functions for Codes}{3.3}
+\makelabel{guava:IsCode}{3.3.1}
+\makelabel{guava:IsLinearCode}{3.3.2}
+\makelabel{guava:IsCyclicCode}{3.3.3}
+\makelabel{guava:IsPerfectCode}{3.3.4}
+\makelabel{guava:IsMDSCode}{3.3.5}
+\makelabel{guava:IsSelfDualCode}{3.3.6}
+\makelabel{guava:IsSelfOrthogonalCode}{3.3.7}
+\makelabel{guava:Equivalence and Isomorphism of Codes}{3.4}
+\makelabel{guava:IsEquivalent}{3.4.1}
+\makelabel{guava:CodeIsomorphism}{3.4.2}
+\makelabel{guava:AutomorphismGroup}{3.4.3}
+\makelabel{guava:PermutationGroup}{3.4.4}
+\makelabel{guava:Domain Functions for Codes}{3.5}
+\makelabel{guava:IsFinite}{3.5.1}
+\makelabel{guava:Size}{3.5.2}
+\makelabel{guava:LeftActingDomain}{3.5.3}
+\makelabel{guava:Dimension}{3.5.4}
+\makelabel{guava:AsSSortedList}{3.5.5}
+\makelabel{guava:CodewordNr}{3.5.6}
+\makelabel{guava:Printing and Displaying Codes}{3.6}
+\makelabel{guava:Print}{3.6.1}
+\makelabel{guava:String}{3.6.2}
+\makelabel{guava:Display}{3.6.3}
+\makelabel{guava:Generating (Check) Matrices and Polynomials}{3.7}
+\makelabel{guava:GeneratorMat}{3.7.1}
+\makelabel{guava:CheckMat}{3.7.2}
+\makelabel{guava:GeneratorPol}{3.7.3}
+\makelabel{guava:CheckPol}{3.7.4}
+\makelabel{guava:RootsOfCode}{3.7.5}
+\makelabel{guava:Parameters of Codes}{3.8}
+\makelabel{guava:WordLength}{3.8.1}
+\makelabel{guava:Redundancy}{3.8.2}
+\makelabel{guava:MinimumDistance}{3.8.3}
+\makelabel{guava:MinimumDistance}{3.8.4}
+\makelabel{guava:MinimumDistanceLeon}{3.8.5}
+\makelabel{guava:Distributions}{3.9}
+\makelabel{guava:WeightDistribution}{3.9.1}
+\makelabel{guava:InnerDistribution}{3.9.2}
+\makelabel{guava:OuterDistribution}{3.9.3}
+\makelabel{guava:DistancesDistribution}{3.9.4}
+\makelabel{guava:Decoding Functions}{3.10}
+\makelabel{guava:Decode}{3.10.1}
+\makelabel{guava:Syndrome}{3.10.2}
+\makelabel{guava:SyndromeTable}{3.10.3}
+\makelabel{guava:StandardArray}{3.10.4}
+\makelabel{guava:PermutationDecode}{3.10.5}
+\makelabel{guava:Generating Codes}{4}
+\makelabel{guava:Generating Unrestricted Codes}{4.1}
+\makelabel{guava:ElementsCode}{4.1.1}
+\makelabel{guava:HadamardCode}{4.1.2}
+\makelabel{guava:HadamardCode}{4.1.2}
+\makelabel{guava:HadamardCode}{4.1.3}
+\makelabel{guava:HadamardCode}{4.1.3}
+\makelabel{guava:ConferenceCode!from a matrix}{4.1.4}
+\makelabel{guava:ConferenceCode!from an integer}{4.1.5}
+\makelabel{guava:MOLSCode}{4.1.6}
+\makelabel{guava:MOLSCode}{4.1.6}
+\makelabel{guava:RandomCode}{4.1.7}
+\makelabel{guava:NordstromRobinsonCode}{4.1.8}
+\makelabel{guava:GreedyCode}{4.1.9}
+\makelabel{guava:LexiCode}{4.1.10}
+\makelabel{guava:LexiCode!using a basis}{4.1.11}
+\makelabel{guava:Generating Linear Codes}{4.2}
+\makelabel{guava:GeneratorMatCode}{4.2.1}
+\makelabel{guava:CheckMatCode}{4.2.2}
+\makelabel{guava:HammingCode}{4.2.3}
+\makelabel{guava:ReedMullerCode}{4.2.4}
+\makelabel{guava:AlternantCode}{4.2.5}
+\makelabel{guava:AlternantCode}{4.2.5}
+\makelabel{guava:GoppaCode!with list of field elements parameter}{4.2.6}
+\makelabel{guava:GoppaCode!with integer parameter}{4.2.7}
+\makelabel{guava:GeneralizedSrivastavaCode}{4.2.8}
+\makelabel{guava:GeneralizedSrivastavaCode}{4.2.8}
+\makelabel{guava:SrivastavaCode}{4.2.9}
+\makelabel{guava:SrivastavaCode}{4.2.9}
+\makelabel{guava:CordaroWagnerCode}{4.2.10}
+\makelabel{guava:RandomLinearCode}{4.2.11}
+\makelabel{guava:BestKnownLinearCode}{4.2.12}
+\makelabel{guava:BestKnownLinearCode!of a record}{4.2.13}
+\makelabel{guava:Golay Codes}{4.3}
+\makelabel{guava:BinaryGolayCode}{4.3.1}
+\makelabel{guava:ExtendedBinaryGolayCode}{4.3.2}
+\makelabel{guava:TernaryGolayCode}{4.3.3}
+\makelabel{guava:ExtendedTernaryGolayCode}{4.3.4}
+\makelabel{guava:Generating Cyclic Codes}{4.4}
+\makelabel{guava:GeneratorPolCode}{4.4.1}
+\makelabel{guava:CheckPolCode}{4.4.2}
+\makelabel{guava:RootsCode}{4.4.3}
+\makelabel{guava:RootsCode!with field}{4.4.4}
+\makelabel{guava:BCHCode}{4.4.5}
+\makelabel{guava:BCHCode}{4.4.5}
+\makelabel{guava:ReedSolomonCode}{4.4.6}
+\makelabel{guava:QRCode}{4.4.7}
+\makelabel{guava:FireCode}{4.4.8}
+\makelabel{guava:WholeSpaceCode}{4.4.9}
+\makelabel{guava:NullCode}{4.4.10}
+\makelabel{guava:RepetitionCode}{4.4.11}
+\makelabel{guava:CyclicCodes}{4.4.12}
+\makelabel{guava:NrCyclicCodes}{4.4.13}
+\makelabel{guava:Toric codes}{4.5}
+\makelabel{guava:ToricCode}{4.5.1}
+\makelabel{guava:ToricPoints}{4.5.2}
+\makelabel{guava:Manipulating Codes}{5}
+\makelabel{guava:Functions that Generate a New Code from a Given Code}{5.1}
+\makelabel{guava:ExtendedCode}{5.1.1}
+\makelabel{guava:PuncturedCode}{5.1.2}
+\makelabel{guava:PuncturedCode!with list of punctures}{5.1.3}
+\makelabel{guava:EvenWeightSubcode}{5.1.4}
+\makelabel{guava:PermutedCode}{5.1.5}
+\makelabel{guava:ExpurgatedCode}{5.1.6}
+\makelabel{guava:AugmentedCode}{5.1.7}
+\makelabel{guava:AugmentedCode!without a list of codewords}{5.1.8}
+\makelabel{guava:RemovedElementsCode}{5.1.9}
+\makelabel{guava:AddedElementsCode}{5.1.10}
+\makelabel{guava:ShortenedCode}{5.1.11}
+\makelabel{guava:ShortenedCode!with list of columns}{5.1.12}
+\makelabel{guava:LengthenedCode}{5.1.13}
+\makelabel{guava:ResidueCode}{5.1.14}
+\makelabel{guava:ConstructionBCode}{5.1.15}
+\makelabel{guava:DualCode}{5.1.16}
+\makelabel{guava:ConversionFieldCode}{5.1.17}
+\makelabel{guava:CosetCode}{5.1.18}
+\makelabel{guava:ConstantWeightSubcode}{5.1.19}
+\makelabel{guava:ConstantWeightSubcode!for all minimum weight codewords}{5.1.20}
+\makelabel{guava:StandardFormCode}{5.1.21}
+\makelabel{guava:Functions that Generate a New Code from Two Given Codes}{5.2}
+\makelabel{guava:DirectSumCode}{5.2.1}
+\makelabel{guava:UUVCode}{5.2.2}
+\makelabel{guava:DirectProductCode}{5.2.3}
+\makelabel{guava:IntersectionCode}{5.2.4}
+\makelabel{guava:UnionCode}{5.2.5}
+\makelabel{guava:Bounds on Codes, Special Matrices and Miscellaneous Functions}{6}
+\makelabel{guava:Bounds on codes}{6.1}
+\makelabel{guava:UpperBoundSingleton}{6.1.1}
+\makelabel{guava:UpperBoundHamming}{6.1.2}
+\makelabel{guava:UpperBoundJohnson}{6.1.3}
+\makelabel{guava:UpperBoundPlotkin}{6.1.4}
+\makelabel{guava:UpperBoundElias}{6.1.5}
+\makelabel{guava:UpperBoundGriesmer}{6.1.6}
+\makelabel{guava:UpperBound}{6.1.7}
+\makelabel{guava:LowerBoundMinimumDistance}{6.1.8}
+\makelabel{guava:LowerBoundMinimumDistance!of codes over a field}{6.1.9}
+\makelabel{guava:UpperBoundMinimumDistance}{6.1.10}
+\makelabel{guava:UpperBoundMinimumDistance!of codes over a field}{6.1.11}
+\makelabel{guava:BoundsMinimumDistance}{6.1.12}
+\makelabel{guava:Special matrices in GUAVA}{6.2}
+\makelabel{guava:KrawtchoukMat}{6.2.1}
+\makelabel{guava:GrayMat}{6.2.2}
+\makelabel{guava:SylvesterMat}{6.2.3}
+\makelabel{guava:HadamardMat}{6.2.4}
+\makelabel{guava:MOLS}{6.2.5}
+\makelabel{guava:MOLS}{6.2.5}
+\makelabel{guava:PutStandardForm}{6.2.6}
+\makelabel{guava:PutStandardForm}{6.2.6}
+\makelabel{guava:IsInStandardForm}{6.2.7}
+\makelabel{guava:IsInStandardForm}{6.2.7}
+\makelabel{guava:PermutedCols}{6.2.8}
+\makelabel{guava:VerticalConversionFieldMat}{6.2.9}
+\makelabel{guava:HorizontalConversionFieldMat}{6.2.10}
+\makelabel{guava:IsLatinSquare}{6.2.11}
+\makelabel{guava:AreMOLS}{6.2.12}
+\makelabel{guava:Miscellaneous functions}{6.3}
+\makelabel{guava:SphereContent}{6.3.1}
+\makelabel{guava:Krawtchouk}{6.3.2}
+\makelabel{guava:PrimitiveUnityRoot}{6.3.3}
+\makelabel{guava:ReciprocalPolynomial}{6.3.4}
+\makelabel{guava:ReciprocalPolynomial}{6.3.5}
+\makelabel{guava:CyclotomicCosets}{6.3.6}
+\makelabel{guava:WeightHistogram}{6.3.7}
+\makelabel{guava:WeightHistogram}{6.3.7}
+\makelabel{guava:Extensions to GUAVA}{7}
+\makelabel{guava:Some functions for the covering radius}{7.1}
+\makelabel{guava:CoveringRadius}{7.1.1}
+\makelabel{guava:BoundsCoveringRadius}{7.1.2}
+\makelabel{guava:SetCoveringRadius}{7.1.3}
+\makelabel{guava:IncreaseCoveringRadiusLowerBound}{7.1.4}
+\makelabel{guava:ExhaustiveSearchCoveringRadius}{7.1.5}
+\makelabel{guava:GeneralLowerBoundCoveringRadius}{7.1.6}
+\makelabel{guava:GeneralUpperBoundCoveringRadius}{7.1.7}
+\makelabel{guava:LowerBoundCoveringRadiusSphereCovering}{7.1.8}
+\makelabel{guava:LowerBoundCoveringRadiusSphereCovering}{7.1.8}
+\makelabel{guava:LowerBoundCoveringRadiusVanWee1}{7.1.9}
+\makelabel{guava:LowerBoundCoveringRadiusVanWee1}{7.1.9}
+\makelabel{guava:LowerBoundCoveringRadiusVanWee2}{7.1.10}
+\makelabel{guava:LowerBoundCoveringRadiusVanWee2}{7.1.10}
+\makelabel{guava:LowerBoundCoveringRadiusCountingExcess}{7.1.11}
+\makelabel{guava:LowerBoundCoveringRadiusCountingExcess}{7.1.11}
+\makelabel{guava:LowerBoundCoveringRadiusEmbedded1}{7.1.12}
+\makelabel{guava:LowerBoundCoveringRadiusEmbedded1}{7.1.12}
+\makelabel{guava:LowerBoundCoveringRadiusEmbedded2}{7.1.13}
+\makelabel{guava:LowerBoundCoveringRadiusEmbedded2}{7.1.13}
+\makelabel{guava:LowerBoundCoveringRadiusInduction}{7.1.14}
+\makelabel{guava:UpperBoundCoveringRadiusRedundancy}{7.1.15}
+\makelabel{guava:UpperBoundCoveringRadiusDelsarte}{7.1.16}
+\makelabel{guava:UpperBoundCoveringRadiusStrength}{7.1.17}
+\makelabel{guava:UpperBoundCoveringRadiusGriesmerLike}{7.1.18}
+\makelabel{guava:UpperBoundCoveringRadiusCyclicCode}{7.1.19}
+\makelabel{guava:New code constructions}{7.2}
+\makelabel{guava:ExtendedDirectSumCode}{7.2.1}
+\makelabel{guava:AmalgamatedDirectSumCode}{7.2.2}
+\makelabel{guava:BlockwiseDirectSumCode}{7.2.3}
+\makelabel{guava:PiecewiseConstantCode}{7.2.4}
+\makelabel{guava:Gabidulin codes}{7.3}
+\makelabel{guava:GabidulinCode}{7.3.1}
+\makelabel{guava:EnlargedGabidulinCode}{7.3.2}
+\makelabel{guava:DavydovCode}{7.3.3}
+\makelabel{guava:TombakCode}{7.3.4}
+\makelabel{guava:EnlargedTombakCode}{7.3.5}
+\makelabel{guava:Some functions related to the norm of a code}{7.4}
+\makelabel{guava:CoordinateNorm}{7.4.1}
+\makelabel{guava:CodeNorm}{7.4.2}
+\makelabel{guava:IsCoordinateAcceptable}{7.4.3}
+\makelabel{guava:GeneralizedCodeNorm}{7.4.4}
+\makelabel{guava:IsNormalCode}{7.4.5}
+\makelabel{guava:DecreaseMinimumDistanceLowerBound}{7.4.6}
+\makelabel{guava:New miscellaneous functions}{7.5}
+\makelabel{guava:CodeWeightEnumerator}{7.5.1}
+\makelabel{guava:CodeDistanceEnumerator}{7.5.2}
+\makelabel{guava:CodeMacWilliamsTransform}{7.5.3}
+\makelabel{guava:IsSelfComplementaryCode}{7.5.4}
+\makelabel{guava:IsAffineCode}{7.5.5}
+\makelabel{guava:IsAlmostAffineCode}{7.5.6}
+\makelabel{guava:IsGriesmerCode}{7.5.7}
+\makelabel{guava:CodeDensity}{7.5.8}
+\makelabel{guava:Bibliography}{}
+\setcitlab {GDT91}{GDT91}
+\setcitlab {Han99}{Han99}
+\setcitlab {HP03}{HP03}
+\setcitlab {Leon88}{Leo88}
+\setcitlab {Leon91}{Leo91}
+\setcitlab {MS83}{MS83}
+\makelabel{guava:Index}{}
diff --git a/doc/manual.mst b/doc/manual.mst
new file mode 100644
index 0000000..cc39d64
--- /dev/null
+++ b/doc/manual.mst
@@ -0,0 +1,16 @@
+preamble ""
+postamble "\n"
+group_skip "\n"
+headings_flag 1
+heading_prefix "\\letter "
+numhead_positive "{}"
+symhead_positive "{}"
+item_0  "\n  "
+item_1  "\n    \\sub "
+item_01 "\n    \\sub "
+item_x1 ", "
+item_2  "\n      \\subsub "
+item_12 "\n      \\subsub "
+item_x2 ", "
+page_compositor "--"
+line_max 1000
diff --git a/doc/manual.pdf b/doc/manual.pdf
new file mode 100644
index 0000000..a01283f
Binary files /dev/null and b/doc/manual.pdf differ
diff --git a/doc/manual.six b/doc/manual.six
new file mode 100644
index 0000000..4b7d711
--- /dev/null
+++ b/doc/manual.six
@@ -0,0 +1,506 @@
+#SIXFORMAT  GapDocGAP
+HELPBOOKINFOSIXTMP := rec(
+encoding := "UTF-8",
+bookname := "guava",
+entries :=
+[ [ "Title page", "", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], 
+  [ "Copyright", "-1", [ 0, 0, 1 ], 43, 2, "copyright", "X81488B807F2A1CF1" ], 
+  [ "Acknowledgements", "-2", [ 0, 0, 2 ], 79, 2, "acknowledgements", "X82A988D47DFAFCFA" ], 
+  [ "Table of contents", "-3", [ 0, 0, 3 ], 121, 4, "table of contents", "X8537FEB07AF2BEC8" ], 
+  [ "\033[1XIntroduction\033[0X", "1.", [ 1, 0, 0 ], 1, 12, "introduction", "X7DFB63A97E67C0A1" ], 
+  [ "\033[1XIntroduction to the \033[5XGUAVA\033[0X\033[1X package\033[0X", "1.1", [ 1, 1, 0 ], 4, 12, 
+      "introduction to the guava package", "X787D826579603719" ], 
+  [ "\033[1XInstalling \033[5XGUAVA\033[0X\033[1X\033[0X", "1.2", [ 1, 2, 0 ], 37, 12, "installing guava", 
+      "X7E2CB7DF83B514A8" ], [ "\033[1XLoading \033[5XGUAVA\033[0X\033[1X\033[0X", "1.3", [ 1, 3, 0 ], 78, 13, 
+      "loading guava", "X80EAA631863F805B" ], [ "\033[1XCoding theory functions in GAP\033[0X", "2.", [ 2, 0, 0 ], 1, 14, 
+      "coding theory functions in gap", "X7A93308C82637F4F" ], 
+  [ "\033[1XDistance functions\033[0X", "2.1", [ 2, 1, 0 ], 27, 14, "distance functions", "X80F192497C008691" ], 
+  [ "\033[1XOther functions\033[0X", "2.2", [ 2, 2, 0 ], 169, 17, "other functions", "X87C3D1B984960984" ], 
+  [ "\033[1XCodewords\033[0X", "3.", [ 3, 0, 0 ], 1, 19, "codewords", "X836BAA9A7EBD08B1" ], 
+  [ "\033[1XConstruction of Codewords\033[0X", "3.1", [ 3, 1, 0 ], 68, 20, "construction of codewords", 
+      "X81B73ABB87DA8E49" ], [ "\033[1XComparisons of Codewords\033[0X", "3.2", [ 3, 2, 0 ], 204, 22, 
+      "comparisons of codewords", "X8253374284B475B6" ], 
+  [ "\033[1XArithmetic Operations for Codewords\033[0X", "3.3", [ 3, 3, 0 ], 250, 23, "arithmetic operations for codewords"
+        , "X7ADE7E95867A14E1" ], [ "\033[1XFunctions that Convert Codewords to Vectors or Polynomials\033[0X", "3.4", 
+      [ 3, 4, 0 ], 333, 24, "functions that convert codewords to vectors or polynomials", "X7BBA5DCD7A8BD60D" ], 
+  [ "\033[1XFunctions that Change the Display Form of a Codeword\033[0X", "3.5", [ 3, 5, 0 ], 363, 25, 
+      "functions that change the display form of a codeword", "X81D3230A797FE6E3" ], 
+  [ "\033[1XOther Codeword Functions\033[0X", "3.6", [ 3, 6, 0 ], 418, 26, "other codeword functions", "X805BF7147C68CACD" 
+     ], [ "\033[1XCodes\033[0X", "4.", [ 4, 0, 0 ], 1, 28, "codes", "X85FDDF0B7B7D87FB" ], 
+  [ "\033[1XComparisons of Codes\033[0X", "4.1", [ 4, 1, 0 ], 142, 30, "comparisons of codes", "X7ECE60E1873B49A6" ], 
+  [ "\033[1XOperations for Codes\033[0X", "4.2", [ 4, 2, 0 ], 181, 31, "operations for codes", "X832DA51986A3882C" ], 
+  [ "\033[1XBoolean Functions for Codes\033[0X", "4.3", [ 4, 3, 0 ], 271, 32, "boolean functions for codes", 
+      "X864091AA7D4AFE86" ], [ "\033[1XEquivalence and Isomorphism of Codes\033[0X", "4.4", [ 4, 4, 0 ], 594, 38, 
+      "equivalence and isomorphism of codes", "X86442DCD7A0B2146" ], 
+  [ "\033[1XDomain Functions for Codes\033[0X", "4.5", [ 4, 5, 0 ], 712, 40, "domain functions for codes", 
+      "X866EB39483DDAE72" ], [ "\033[1XPrinting and Displaying Codes\033[0X", "4.6", [ 4, 6, 0 ], 812, 42, 
+      "printing and displaying codes", "X823827927D6A8235" ], 
+  [ "\033[1XGenerating (Check) Matrices and Polynomials\033[0X", "4.7", [ 4, 7, 0 ], 922, 44, 
+      "generating check matrices and polynomials", "X7D0F48B685A3ECDD" ], 
+  [ "\033[1XParameters of Codes\033[0X", "4.8", [ 4, 8, 0 ], 1056, 46, "parameters of codes", "X8170B52D7C154247" ], 
+  [ "\033[1XDistributions\033[0X", "4.9", [ 4, 9, 0 ], 1543, 54, "distributions", "X806384B4815EFF2E" ], 
+  [ "\033[1XDecoding Functions\033[0X", "4.10", [ 4, 10, 0 ], 1662, 56, "decoding functions", "X7D9A39BF801948C8" ], 
+  [ "\033[1XGenerating Codes\033[0X", "5.", [ 5, 0, 0 ], 1, 65, "generating codes", "X87EB64ED831CCE99" ], 
+  [ "\033[1XGenerating Unrestricted Codes\033[0X", "5.1", [ 5, 1, 0 ], 21, 65, "generating unrestricted codes", 
+      "X86A92CB184CBD3C7" ], [ "\033[1XGenerating Linear Codes\033[0X", "5.2", [ 5, 2, 0 ], 260, 69, 
+      "generating linear codes", "X7A11F29F7BBF45BB" ], [ "\033[1XGabidulin Codes\033[0X", "5.3", [ 5, 3, 0 ], 695, 77, 
+      "gabidulin codes", "X858721967BE44000" ], [ "\033[1XGolay Codes\033[0X", "5.4", [ 5, 4, 0 ], 761, 78, "golay codes", 
+      "X81F6E4A785F368B0" ], [ "\033[1XGenerating Cyclic Codes\033[0X", "5.5", [ 5, 5, 0 ], 853, 79, 
+      "generating cyclic codes", "X8366CC3685F0BC85" ], [ "\033[1XEvaluation Codes\033[0X", "5.6", [ 5, 6, 0 ], 1452, 90, 
+      "evaluation codes", "X850A28C579137220" ], [ "\033[1XAlgebraic geometric codes\033[0X", "5.7", [ 5, 7, 0 ], 1617, 
+      93, "algebraic geometric codes", "X7AE2B2CD7C647990" ], 
+  [ "\033[1XManipulating Codes\033[0X", "6.", [ 6, 0, 0 ], 1, 107, "manipulating codes", "X866FC1117814B64D" ], 
+  [ "\033[1XFunctions that Generate a New Code from a Given Code\033[0X", "6.1", [ 6, 1, 0 ], 31, 107, 
+      "functions that generate a new code from a given code", "X8271A4697FDA97B2" ], 
+  [ "\033[1XFunctions that Generate a New Code from Two or More Given Codes\033[0X", "6.2", [ 6, 2, 0 ], 625, 118, 
+      "functions that generate a new code from two or more given codes", "X7964BF0081CC8352" ], 
+  [ "\033[1XBounds on codes, special matrices and miscellaneous functions\033[0X", "7.", [ 7, 0, 0 ], 1, 125, 
+      "bounds on codes special matrices and miscellaneous functions", "X7A814D518460862E" ], 
+  [ "\033[1XDistance bounds on codes\033[0X", "7.1", [ 7, 1, 0 ], 10, 125, "distance bounds on codes", "X87C753EB840C34D3" 
+     ], [ "\033[1XCovering radius bounds on codes\033[0X", "7.2", [ 7, 2, 0 ], 341, 131, "covering radius bounds on codes",
+      "X817D0A647D3331EB" ], [ "\033[1XSpecial matrices in \033[5XGUAVA\033[0X\033[1X\033[0X", "7.3", [ 7, 3, 0 ], 869, 
+      139, "special matrices in guava", "X806EBEC77C16E657" ], 
+  [ "\033[1XSome functions related to the norm of a code\033[0X", "7.4", [ 7, 4, 0 ], 1244, 146, 
+      "some functions related to the norm of a code", "X7AB5E5CE7FDF7132" ], 
+  [ "\033[1XMiscellaneous functions\033[0X", "7.5", [ 7, 5, 0 ], 1333, 147, "miscellaneous functions", "X8308D685809A4E2F" 
+     ], [ "\033[1XMiscellaneous polynomial functions\033[0X", "7.6", [ 7, 6, 0 ], 1676, 153, 
+      "miscellaneous polynomial functions", "X7969103F7A8598F9" ], 
+  [ "Bibliography", "bib.", [ "Bib", 0, 0 ], 1, 158, "bibliography", "X7A6F98FD85F02BFE" ], 
+  [ "References", "bib.", [ "Bib", 0, 0 ], 1, 158, "references", "X7A6F98FD85F02BFE" ], 
+  [ "Index", "ind.", [ "Ind", 0, 0 ], 1, 160, "index", "X83A0356F839C696F" ], 
+  [ "\033[2XAClosestVectorCombinationsMatFFEVecFFE\033[0X", "2.1-1", [ 2, 1, 1 ], 30, 14, 
+      "aclosestvectorcombinationsmatffevecffe", "X82E5987E81487D18" ], 
+  [ "\033[2XAClosestVectorComb..MatFFEVecFFECoords\033[0X", "2.1-2", [ 2, 1, 2 ], 64, 15, 
+      "aclosestvectorcomb..matffevecffecoords", "X870DE258833C5AA0" ], 
+  [ "\033[2XDistancesDistributionMatFFEVecFFE\033[0X", "2.1-3", [ 2, 1, 3 ], 87, 15, "distancesdistributionmatffevecffe", 
+      "X85135CEB86E61D49" ], [ "\033[2XDistancesDistributionVecFFEsVecFFE\033[0X", "2.1-4", [ 2, 1, 4 ], 110, 16, 
+      "distancesdistributionvecffesvecffe", "X7F2F630984A9D3D6" ], 
+  [ "\033[2XWeightVecFFE\033[0X", "2.1-5", [ 2, 1, 5 ], 132, 16, "weightvecffe", "X7C9F4D657F9BA5A1" ], 
+  [ "Hamming metric", "2.1-5", [ 2, 1, 5 ], 132, 16, "hamming metric", "X7C9F4D657F9BA5A1" ], 
+  [ "\033[2XDistanceVecFFE\033[0X", "2.1-6", [ 2, 1, 6 ], 145, 16, "distancevecffe", "X85AA5C6587559C1C" ], 
+  [ "GF(p)", "2.2", [ 2, 2, 0 ], 169, 17, "gf p", "X87C3D1B984960984" ], 
+  [ "GF(q)", "2.2", [ 2, 2, 0 ], 169, 17, "gf q", "X87C3D1B984960984" ], 
+  [ "defining polynomial", "2.2", [ 2, 2, 0 ], 169, 17, "defining polynomial", "X87C3D1B984960984" ], 
+  [ "primitive element", "2.2", [ 2, 2, 0 ], 169, 17, "primitive element", "X87C3D1B984960984" ], 
+  [ "\033[2XConwayPolynomial\033[0X", "2.2-1", [ 2, 2, 1 ], 191, 17, "conwaypolynomial", "X7C2425A786F09054" ], 
+  [ "IsCheapConwayPolynomial", "2.2-1", [ 2, 2, 1 ], 191, 17, "ischeapconwaypolynomial", "X7C2425A786F09054" ], 
+  [ "\033[2XRandomPrimitivePolynomial\033[0X", "2.2-2", [ 2, 2, 2 ], 221, 18, "randomprimitivepolynomial", 
+      "X7ECC593583E68A6C" ], [ "IsPrimitivePolynomial", "2.2-2", [ 2, 2, 2 ], 221, 18, "isprimitivepolynomial", 
+      "X7ECC593583E68A6C" ], [ "linear code", "3.", [ 3, 0, 0 ], 1, 19, "linear code", "X836BAA9A7EBD08B1" ], 
+  [ "\033[2XCodeword\033[0X", "3.1-1", [ 3, 1, 1 ], 71, 20, "codeword", "X7B9E353D852851AA" ], 
+  [ "\033[2XCodewordNr\033[0X", "3.1-2", [ 3, 1, 2 ], 155, 21, "codewordnr", "X7E7ED91C79BF3EF3" ], 
+  [ "\033[2XIsCodeword\033[0X", "3.1-3", [ 3, 1, 3 ], 185, 22, "iscodeword", "X7F25479781E6E109" ], 
+  [ "\033[2X=\033[0X", "3.2-1", [ 3, 2, 1 ], 207, 22, "", "X8123456781234567" ], 
+  [ "not =", "3.2-1", [ 3, 2, 1 ], 207, 22, "not", "X8123456781234567" ], 
+  [ "< >", "3.2-1", [ 3, 2, 1 ], 207, 22, "< >", "X8123456781234567" ], 
+  [ "\033[2X+\033[0X", "3.3-1", [ 3, 3, 1 ], 253, 23, "+", "X7F2703417F270341" ], 
+  [ "codewords, addition", "3.3-1", [ 3, 3, 1 ], 253, 23, "codewords addition", "X7F2703417F270341" ], 
+  [ "\033[2X-\033[0X", "3.3-2", [ 3, 3, 2 ], 276, 23, "-", "X81B1391281B13912" ], 
+  [ "codewords, subtraction", "3.3-2", [ 3, 3, 2 ], 276, 23, "codewords subtraction", "X81B1391281B13912" ], 
+  [ "\033[2X+\033[0X", "3.3-3", [ 3, 3, 3 ], 283, 23, "+", "X7F2703417F270341" ], 
+  [ "codewords, cosets", "3.3-3", [ 3, 3, 3 ], 283, 23, "codewords cosets", "X7F2703417F270341" ], 
+  [ "coset", "3.3-3", [ 3, 3, 3 ], 283, 23, "coset", "X7F2703417F270341" ], 
+  [ "\033[2XVectorCodeword\033[0X", "3.4-1", [ 3, 4, 1 ], 336, 24, "vectorcodeword", "X87C8B0B178496F6A" ], 
+  [ "\033[2XPolyCodeword\033[0X", "3.4-2", [ 3, 4, 2 ], 349, 24, "polycodeword", "X822465E884D0F484" ], 
+  [ "\033[2XTreatAsVector\033[0X", "3.5-1", [ 3, 5, 1 ], 366, 25, "treatasvector", "X7E3E174B7954AA6B" ], 
+  [ "\033[2XTreatAsPoly\033[0X", "3.5-2", [ 3, 5, 2 ], 390, 25, "treataspoly", "X7A6828148490BD2E" ], 
+  [ "\033[2XNullWord\033[0X", "3.6-1", [ 3, 6, 1 ], 421, 26, "nullword", "X8000B6597EF0282F" ], 
+  [ "\033[2XDistanceCodeword\033[0X", "3.6-2", [ 3, 6, 2 ], 441, 26, "distancecodeword", "X7CDA1B547D55E6FB" ], 
+  [ "\033[2XSupport\033[0X", "3.6-3", [ 3, 6, 3 ], 461, 26, "support", "X7B689C0284AC4296" ], 
+  [ "\033[2XWeightCodeword\033[0X", "3.6-4", [ 3, 6, 4 ], 487, 27, "weightcodeword", "X7AD61C237D8D3849" ], 
+  [ "code", "4.", [ 4, 0, 0 ], 1, 28, "code", "X85FDDF0B7B7D87FB" ], 
+  [ "code, elements of", "4.", [ 4, 0, 0 ], 1, 28, "code elements of", "X85FDDF0B7B7D87FB" ], 
+  [ "code, unrestricted", "4.", [ 4, 0, 0 ], 1, 28, "code unrestricted", "X85FDDF0B7B7D87FB" ], 
+  [ "code, (n,M,d)", "4.", [ 4, 0, 0 ], 1, 28, "code n m d", "X85FDDF0B7B7D87FB" ], 
+  [ "minimum distance", "4.", [ 4, 0, 0 ], 1, 28, "minimum distance", "X85FDDF0B7B7D87FB" ], 
+  [ "length", "4.", [ 4, 0, 0 ], 1, 28, "length", "X85FDDF0B7B7D87FB" ], 
+  [ "size", "4.", [ 4, 0, 0 ], 1, 28, "size", "X85FDDF0B7B7D87FB" ], 
+  [ "code, linear", "4.", [ 4, 0, 0 ], 1, 28, "code linear", "X85FDDF0B7B7D87FB" ], 
+  [ "parity check matrix", "4.", [ 4, 0, 0 ], 1, 28, "parity check matrix", "X85FDDF0B7B7D87FB" ], 
+  [ "code, [n, k, d]r", "4.", [ 4, 0, 0 ], 1, 28, "code n k d r", "X85FDDF0B7B7D87FB" ], 
+  [ "code, cyclic", "4.", [ 4, 0, 0 ], 1, 28, "code cyclic", "X85FDDF0B7B7D87FB" ], 
+  [ "generator polynomial", "4.", [ 4, 0, 0 ], 1, 28, "generator polynomial", "X85FDDF0B7B7D87FB" ], 
+  [ "check polynomial", "4.", [ 4, 0, 0 ], 1, 28, "check polynomial", "X85FDDF0B7B7D87FB" ], 
+  [ "\033[2X=\033[0X", "4.1-1", [ 4, 1, 1 ], 145, 30, "", "X8123456781234567" ], 
+  [ "not =", "4.1-1", [ 4, 1, 1 ], 145, 30, "not", "X8123456781234567" ], 
+  [ "< >", "4.1-1", [ 4, 1, 1 ], 145, 30, "< >", "X8123456781234567" ], 
+  [ "\033[2X+\033[0X", "4.2-1", [ 4, 2, 1 ], 184, 31, "+", "X7F2703417F270341" ], 
+  [ "codes, addition", "4.2-1", [ 4, 2, 1 ], 184, 31, "codes addition", "X7F2703417F270341" ], 
+  [ "codes, direct sum", "4.2-1", [ 4, 2, 1 ], 184, 31, "codes direct sum", "X7F2703417F270341" ], 
+  [ "\033[2X*\033[0X", "4.2-2", [ 4, 2, 2 ], 200, 31, "", "X8123456781234567" ], 
+  [ "codes, product", "4.2-2", [ 4, 2, 2 ], 200, 31, "codes product", "X8123456781234567" ], 
+  [ "\033[2X*\033[0X", "4.2-3", [ 4, 2, 3 ], 216, 31, "", "X8123456781234567" ], 
+  [ "codes, encoding", "4.2-3", [ 4, 2, 3 ], 216, 31, "codes encoding", "X8123456781234567" ], 
+  [ "encoder map", "4.2-3", [ 4, 2, 3 ], 216, 31, "encoder map", "X8123456781234567" ], 
+  [ "\033[2XInformationWord\033[0X", "4.2-4", [ 4, 2, 4 ], 241, 32, "informationword", "X8744BA5E78BCF3F9" ], 
+  [ "codes, decoding", "4.2-4", [ 4, 2, 4 ], 241, 32, "codes decoding", "X8744BA5E78BCF3F9" ], 
+  [ "information bits", "4.2-4", [ 4, 2, 4 ], 241, 32, "information bits", "X8744BA5E78BCF3F9" ], 
+  [ "\033[2Xin\033[0X", "4.3-1", [ 4, 3, 1 ], 274, 32, "in", "X87BDB89B7AAFE8AD" ], 
+  [ "code, element test", "4.3-1", [ 4, 3, 1 ], 274, 32, "code element test", "X87BDB89B7AAFE8AD" ], 
+  [ "\033[2XIsSubset\033[0X", "4.3-2", [ 4, 3, 2 ], 291, 33, "issubset", "X79CA175481F8105F" ], 
+  [ "code, subcode", "4.3-2", [ 4, 3, 2 ], 291, 33, "code subcode", "X79CA175481F8105F" ], 
+  [ "\033[2XIsCode\033[0X", "4.3-3", [ 4, 3, 3 ], 307, 33, "iscode", "X7F71186281DEA83A" ], 
+  [ "\033[2XIsLinearCode\033[0X", "4.3-4", [ 4, 3, 4 ], 322, 33, "islinearcode", "X7B24748A7CE8D4B9" ], 
+  [ "\033[2XIsCyclicCode\033[0X", "4.3-5", [ 4, 3, 5 ], 344, 33, "iscycliccode", "X850C23D07C9A9B19" ], 
+  [ "\033[2XIsPerfectCode\033[0X", "4.3-6", [ 4, 3, 6 ], 366, 34, "isperfectcode", "X85E3BD26856424F7" ], 
+  [ "code, perfect", "4.3-6", [ 4, 3, 6 ], 366, 34, "code perfect", "X85E3BD26856424F7" ], 
+  [ "\033[2XIsMDSCode\033[0X", "4.3-7", [ 4, 3, 7 ], 396, 34, "ismdscode", "X789380D28018EC3F" ], 
+  [ "code, maximum distance separable", "4.3-7", [ 4, 3, 7 ], 396, 34, "code maximum distance separable", 
+      "X789380D28018EC3F" ], [ "MDS", "4.3-7", [ 4, 3, 7 ], 396, 34, "mds", "X789380D28018EC3F" ], 
+  [ "\033[2XIsSelfDualCode\033[0X", "4.3-8", [ 4, 3, 8 ], 420, 35, "isselfdualcode", "X80166D8D837FEB58" ], 
+  [ "code, self-dual", "4.3-8", [ 4, 3, 8 ], 420, 35, "code self-dual", "X80166D8D837FEB58" ], 
+  [ "self-orthogonal", "4.3-8", [ 4, 3, 8 ], 420, 35, "self-orthogonal", "X80166D8D837FEB58" ], 
+  [ "\033[2XIsSelfOrthogonalCode\033[0X", "4.3-9", [ 4, 3, 9 ], 443, 35, "isselforthogonalcode", "X7B2A0CC481D2366F" ], 
+  [ "code, self-orthogonal", "4.3-9", [ 4, 3, 9 ], 443, 35, "code self-orthogonal", "X7B2A0CC481D2366F" ], 
+  [ "doubly-even", "4.3-9", [ 4, 3, 9 ], 443, 35, "doubly-even", "X7B2A0CC481D2366F" ], 
+  [ "\033[2XIsDoublyEvenCode\033[0X", "4.3-10", [ 4, 3, 10 ], 461, 35, "isdoublyevencode", "X8358D43981EBE970" ], 
+  [ "code, doubly-even", "4.3-10", [ 4, 3, 10 ], 461, 35, "code doubly-even", "X8358D43981EBE970" ], 
+  [ "singly-even", "4.3-10", [ 4, 3, 10 ], 461, 35, "singly-even", "X8358D43981EBE970" ], 
+  [ "\033[2XIsSinglyEvenCode\033[0X", "4.3-11", [ 4, 3, 11 ], 485, 36, "issinglyevencode", "X79ACAEF5865414A0" ], 
+  [ "code, singly-even", "4.3-11", [ 4, 3, 11 ], 485, 36, "code singly-even", "X79ACAEF5865414A0" ], 
+  [ "even", "4.3-11", [ 4, 3, 11 ], 485, 36, "even", "X79ACAEF5865414A0" ], 
+  [ "\033[2XIsEvenCode\033[0X", "4.3-12", [ 4, 3, 12 ], 506, 36, "isevencode", "X7CE150ED7C3DC455" ], 
+  [ "code, even", "4.3-12", [ 4, 3, 12 ], 506, 36, "code even", "X7CE150ED7C3DC455" ], 
+  [ "self complementary code", "4.3-12", [ 4, 3, 12 ], 506, 36, "self complementary code", "X7CE150ED7C3DC455" ], 
+  [ "\033[2XIsSelfComplementaryCode\033[0X", "4.3-13", [ 4, 3, 13 ], 534, 37, "isselfcomplementarycode", 
+      "X7B6DB8CC84FCAC1C" ], [ "affine code", "4.3-13", [ 4, 3, 13 ], 534, 37, "affine code", "X7B6DB8CC84FCAC1C" ], 
+  [ "\033[2XIsAffineCode\033[0X", "4.3-14", [ 4, 3, 14 ], 554, 37, "isaffinecode", "X7AFD3844859B20BF" ], 
+  [ "\033[2XIsAlmostAffineCode\033[0X", "4.3-15", [ 4, 3, 15 ], 572, 38, "isalmostaffinecode", "X861D32FB81EF0D77" ], 
+  [ "permutation equivalent codes", "4.4", [ 4, 4, 0 ], 594, 38, "permutation equivalent codes", "X86442DCD7A0B2146" ], 
+  [ "equivalent codes", "4.4", [ 4, 4, 0 ], 594, 38, "equivalent codes", "X86442DCD7A0B2146" ], 
+  [ "\033[2XIsEquivalent\033[0X", "4.4-1", [ 4, 4, 1 ], 597, 38, "isequivalent", "X843034687D9C75B0" ], 
+  [ "\033[2XCodeIsomorphism\033[0X", "4.4-2", [ 4, 4, 2 ], 626, 38, "codeisomorphism", "X874DED8E86BC180B" ], 
+  [ "\033[2XAutomorphismGroup\033[0X", "4.4-3", [ 4, 4, 3 ], 648, 39, "automorphismgroup", "X87677B0787B4461A" ], 
+  [ "PermutationAutomorphismGroup", "4.4-3", [ 4, 4, 3 ], 648, 39, "permutationautomorphismgroup", "X87677B0787B4461A" ], 
+  [ "\033[2XPermutationAutomorphismGroup\033[0X", "4.4-4", [ 4, 4, 4 ], 686, 40, "permutationautomorphismgroup", 
+      "X79F3261F86C29F6D" ], [ "\033[2XIsFinite\033[0X", "4.5-1", [ 4, 5, 1 ], 718, 40, "isfinite", "X808A4061809A6E67" ], 
+  [ "\033[2XSize\033[0X", "4.5-2", [ 4, 5, 2 ], 730, 40, "size", "X858ADA3B7A684421" ], 
+  [ "\033[2XLeftActingDomain\033[0X", "4.5-3", [ 4, 5, 3 ], 745, 41, "leftactingdomain", "X86F070E0807DC34E" ], 
+  [ "\033[2XDimension\033[0X", "4.5-4", [ 4, 5, 4 ], 764, 41, "dimension", "X7E6926C6850E7C4E" ], 
+  [ "\033[2XAsSSortedList\033[0X", "4.5-5", [ 4, 5, 5 ], 783, 41, "asssortedlist", "X856D927378C33548" ], 
+  [ "\033[2XPrint\033[0X", "4.6-1", [ 4, 6, 1 ], 815, 42, "print", "X7AFA64D97A1F39A3" ], 
+  [ "\033[2XString\033[0X", "4.6-2", [ 4, 6, 2 ], 854, 42, "string", "X81FB5BE27903EC32" ], 
+  [ "\033[2XDisplay\033[0X", "4.6-3", [ 4, 6, 3 ], 872, 43, "display", "X83A5C59278E13248" ], 
+  [ "\033[2XDisplayBoundsInfo\033[0X", "4.6-4", [ 4, 6, 4 ], 895, 43, "displayboundsinfo", "X7CD08C8C780543C4" ], 
+  [ "\033[2XGeneratorMat\033[0X", "4.7-1", [ 4, 7, 1 ], 925, 44, "generatormat", "X817224657C9829C4" ], 
+  [ "\033[2XCheckMat\033[0X", "4.7-2", [ 4, 7, 2 ], 955, 44, "checkmat", "X85D4B26E7FB38D57" ], 
+  [ "\033[2XGeneratorPol\033[0X", "4.7-3", [ 4, 7, 3 ], 985, 45, "generatorpol", "X78E33C3A843B0261" ], 
+  [ "\033[2XCheckPol\033[0X", "4.7-4", [ 4, 7, 4 ], 1006, 45, "checkpol", "X7C45AA317BB1195F" ], 
+  [ "\033[2XRootsOfCode\033[0X", "4.7-5", [ 4, 7, 5 ], 1033, 45, "rootsofcode", "X7F4CB9DB7CD97178" ], 
+  [ "\033[2XWordLength\033[0X", "4.8-1", [ 4, 8, 1 ], 1059, 46, "wordlength", "X7A36C3C67B0062E8" ], 
+  [ "\033[2XRedundancy\033[0X", "4.8-2", [ 4, 8, 2 ], 1076, 46, "redundancy", "X7E33FD56792DBF3D" ], 
+  [ "\033[2XMinimumDistance\033[0X", "4.8-3", [ 4, 8, 3 ], 1096, 46, "minimumdistance", "X7B31613D8538BD29" ], 
+  [ "\033[2XMinimumDistanceLeon\033[0X", "4.8-4", [ 4, 8, 4 ], 1156, 47, "minimumdistanceleon", "X813F226F855590EE" ], 
+  [ "\033[2XMinimumWeight\033[0X", "4.8-5", [ 4, 8, 5 ], 1202, 48, "minimumweight", "X84EDF67B86B4154C" ], 
+  [ "\033[2XDecreaseMinimumDistanceUpperBound\033[0X", "4.8-6", [ 4, 8, 6 ], 1337, 51, "decreaseminimumdistanceupperbound",
+      "X823B9A797EE42F6D" ], [ "\033[2XMinimumDistanceRandom\033[0X", "4.8-7", [ 4, 8, 7 ], 1373, 51, 
+      "minimumdistancerandom", "X7A679B0A7816B030" ], 
+  [ "t(n,k)", "4.8-7", [ 4, 8, 7 ], 1373, 51, "t n k", "X7A679B0A7816B030" ], 
+  [ "covering code", "4.8-7", [ 4, 8, 7 ], 1373, 51, "covering code", "X7A679B0A7816B030" ], 
+  [ "\033[2XCoveringRadius\033[0X", "4.8-8", [ 4, 8, 8 ], 1455, 53, "coveringradius", "X7A195E317D2AB7CE" ], 
+  [ "\033[2XSetCoveringRadius\033[0X", "4.8-9", [ 4, 8, 9 ], 1521, 54, "setcoveringradius", "X81004B007EC5DF58" ], 
+  [ "\033[2XMinimumWeightWords\033[0X", "4.9-1", [ 4, 9, 1 ], 1546, 54, "minimumweightwords", "X7AEE64467FB1E0B9" ], 
+  [ "\033[2XWeightDistribution\033[0X", "4.9-2", [ 4, 9, 2 ], 1567, 54, "weightdistribution", "X8728BCC9842A6E5D" ], 
+  [ "\033[2XInnerDistribution\033[0X", "4.9-3", [ 4, 9, 3 ], 1592, 55, "innerdistribution", "X871FD301820717A4" ], 
+  [ "distance", "4.9-3", [ 4, 9, 3 ], 1592, 55, "distance", "X871FD301820717A4" ], 
+  [ "\033[2XDistancesDistribution\033[0X", "4.9-4", [ 4, 9, 4 ], 1614, 55, "distancesdistribution", "X87AD54F87C5EE77E" ], 
+  [ "\033[2XOuterDistribution\033[0X", "4.9-5", [ 4, 9, 5 ], 1635, 56, "outerdistribution", "X8495870687195324" ], 
+  [ "\033[2XDecode\033[0X", "4.10-1", [ 4, 10, 1 ], 1665, 56, "decode", "X7A42FF7D87FC34AC" ], 
+  [ "\033[2XDecodeword\033[0X", "4.10-2", [ 4, 10, 2 ], 1715, 57, "decodeword", "X7D870C9387C47D9F" ], 
+  [ "\033[2XGeneralizedReedSolomonDecoderGao\033[0X", "4.10-3", [ 4, 10, 3 ], 1766, 58, "generalizedreedsolomondecodergao",
+      "X7D48DE2A84474C6A" ], [ "\033[2XGeneralizedReedSolomonListDecoder\033[0X", "4.10-4", [ 4, 10, 4 ], 1796, 58, 
+      "generalizedreedsolomonlistdecoder", "X7CFF98D483502053" ], 
+  [ "\033[2XBitFlipDecoder\033[0X", "4.10-5", [ 4, 10, 5 ], 1844, 59, "bitflipdecoder", "X80E17FA27DCAB676" ], 
+  [ "\033[2XNearestNeighborGRSDecodewords\033[0X", "4.10-6", [ 4, 10, 6 ], 1885, 60, "nearestneighborgrsdecodewords", 
+      "X7B88DEB37F28404A" ], [ "\033[2XNearestNeighborDecodewords\033[0X", "4.10-7", [ 4, 10, 7 ], 1924, 61, 
+      "nearestneighbordecodewords", "X825E35757D778787" ], 
+  [ "\033[2XSyndrome\033[0X", "4.10-8", [ 4, 10, 8 ], 1963, 61, "syndrome", "X7D02E0FE8735D3E6" ], 
+  [ "\033[2XSyndromeTable\033[0X", "4.10-9", [ 4, 10, 9 ], 1990, 62, "syndrometable", "X7B9E71987E4294A7" ], 
+  [ "syndrome table", "4.10-9", [ 4, 10, 9 ], 1990, 62, "syndrome table", "X7B9E71987E4294A7" ], 
+  [ "\033[2XStandardArray\033[0X", "4.10-10", [ 4, 10, 10 ], 2022, 62, "standardarray", "X8642D0BD789DA9B5" ], 
+  [ "\033[2XPermutationDecode\033[0X", "4.10-11", [ 4, 10, 11 ], 2045, 63, "permutationdecode", "X83231E717CCB0247" ], 
+  [ "\033[2XPermutationDecodeNC\033[0X", "4.10-12", [ 4, 10, 12 ], 2091, 63, "permutationdecodenc", "X85B692177E2A745D" ], 
+  [ "\033[2XElementsCode\033[0X", "5.1-1", [ 5, 1, 1 ], 36, 65, "elementscode", "X81AACBDD86E89D7D" ], 
+  [ "code, Hadamard", "5.1-1", [ 5, 1, 1 ], 36, 65, "code hadamard", "X81AACBDD86E89D7D" ], 
+  [ "\033[2XHadamardCode\033[0X", "5.1-2", [ 5, 1, 2 ], 57, 66, "hadamardcode", "X86755AAC83A0AF4B" ], 
+  [ "Hadamard matrix", "5.1-2", [ 5, 1, 2 ], 57, 66, "hadamard matrix", "X86755AAC83A0AF4B" ], 
+  [ "code, conference", "5.1-2", [ 5, 1, 2 ], 57, 66, "code conference", "X86755AAC83A0AF4B" ], 
+  [ "\033[2XConferenceCode\033[0X", "5.1-3", [ 5, 1, 3 ], 106, 66, "conferencecode", "X8122BA417F705997" ], 
+  [ "conference matrix", "5.1-3", [ 5, 1, 3 ], 106, 66, "conference matrix", "X8122BA417F705997" ], 
+  [ "\033[2XMOLSCode\033[0X", "5.1-4", [ 5, 1, 4 ], 135, 67, "molscode", "X81B7EE4279398F67" ], 
+  [ "\033[2XRandomCode\033[0X", "5.1-5", [ 5, 1, 5 ], 168, 68, "randomcode", "X7D87DD6380B2CE69" ], 
+  [ "code, Nordstrom-Robinson", "5.1-5", [ 5, 1, 5 ], 168, 68, "code nordstrom-robinson", "X7D87DD6380B2CE69" ], 
+  [ "\033[2XNordstromRobinsonCode\033[0X", "5.1-6", [ 5, 1, 6 ], 190, 68, "nordstromrobinsoncode", "X816353397F25B62E" ], 
+  [ "code, greedy", "5.1-6", [ 5, 1, 6 ], 190, 68, "code greedy", "X816353397F25B62E" ], 
+  [ "\033[2XGreedyCode\033[0X", "5.1-7", [ 5, 1, 7 ], 205, 68, "greedycode", "X7880D34485C60BAF" ], 
+  [ "\033[2XLexiCode\033[0X", "5.1-8", [ 5, 1, 8 ], 230, 69, "lexicode", "X7C1B374583AFB923" ], 
+  [ "\033[2XGeneratorMatCode\033[0X", "5.2-1", [ 5, 2, 1 ], 283, 69, "generatormatcode", "X83F400A681CFC0D6" ], 
+  [ "\033[2XCheckMatCodeMutable\033[0X", "5.2-2", [ 5, 2, 2 ], 310, 70, "checkmatcodemutable", "X7CDDDFE47A10A008" ], 
+  [ "\033[2XCheckMatCode\033[0X", "5.2-3", [ 5, 2, 3 ], 317, 70, "checkmatcode", "X848D3F7B805DEB66" ], 
+  [ "code, Hamming", "5.2-3", [ 5, 2, 3 ], 317, 70, "code hamming", "X848D3F7B805DEB66" ], 
+  [ "\033[2XHammingCode\033[0X", "5.2-4", [ 5, 2, 4 ], 345, 71, "hammingcode", "X7DECB0A57C798583" ], 
+  [ "code, Reed-Muller", "5.2-4", [ 5, 2, 4 ], 345, 71, "code reed-muller", "X7DECB0A57C798583" ], 
+  [ "\033[2XReedMullerCode\033[0X", "5.2-5", [ 5, 2, 5 ], 365, 71, "reedmullercode", "X801C88D578DA6ACA" ], 
+  [ "code, alternant", "5.2-5", [ 5, 2, 5 ], 365, 71, "code alternant", "X801C88D578DA6ACA" ], 
+  [ "\033[2XAlternantCode\033[0X", "5.2-6", [ 5, 2, 6 ], 382, 71, "alternantcode", "X851592C7811D3D2A" ], 
+  [ "code, Goppa (classical)", "5.2-6", [ 5, 2, 6 ], 382, 71, "code goppa classical", "X851592C7811D3D2A" ], 
+  [ "\033[2XGoppaCode\033[0X", "5.2-7", [ 5, 2, 7 ], 402, 72, "goppacode", "X7EE808BB7D1E487A" ], 
+  [ "code, Srivastava", "5.2-7", [ 5, 2, 7 ], 402, 72, "code srivastava", "X7EE808BB7D1E487A" ], 
+  [ "\033[2XGeneralizedSrivastavaCode\033[0X", "5.2-8", [ 5, 2, 8 ], 445, 72, "generalizedsrivastavacode", 
+      "X7F9C0A727EE075B7" ], [ "\033[2XSrivastavaCode\033[0X", "5.2-9", [ 5, 2, 9 ], 471, 73, "srivastavacode", 
+      "X7A38EB3178961F3E" ], [ "code, Cordaro-Wagner", "5.2-9", [ 5, 2, 9 ], 471, 73, "code cordaro-wagner", 
+      "X7A38EB3178961F3E" ], [ "\033[2XCordaroWagnerCode\033[0X", "5.2-10", [ 5, 2, 10 ], 495, 73, "cordarowagnercode", 
+      "X87F7CB8B7A8BE624" ], [ "\033[2XFerreroDesignCode\033[0X", "5.2-11", [ 5, 2, 11 ], 512, 73, "ferrerodesigncode", 
+      "X865534267C8E902A" ], [ "\033[2XRandomLinearCode\033[0X", "5.2-12", [ 5, 2, 12 ], 571, 74, "randomlinearcode", 
+      "X7BCA10CE8660357F" ], [ "\033[2XOptimalityCode\033[0X", "5.2-13", [ 5, 2, 13 ], 599, 75, "optimalitycode", 
+      "X839CFE4C7A567D4D" ], [ "\033[2XBestKnownLinearCode\033[0X", "5.2-14", [ 5, 2, 14 ], 610, 75, "bestknownlinearcode",
+      "X871508567CB34D96" ], [ "code, Gabidulin", "5.3", [ 5, 3, 0 ], 695, 77, "code gabidulin", "X858721967BE44000" ], 
+  [ "\033[2XGabidulinCode\033[0X", "5.3-1", [ 5, 3, 1 ], 708, 77, "gabidulincode", "X79BE5D497CB2E59E" ], 
+  [ "\033[2XEnlargedGabidulinCode\033[0X", "5.3-2", [ 5, 3, 2 ], 715, 77, "enlargedgabidulincode", "X873950F67D4A9184" ], 
+  [ "code, Davydov", "5.3-2", [ 5, 3, 2 ], 715, 77, "code davydov", "X873950F67D4A9184" ], 
+  [ "\033[2XDavydovCode\033[0X", "5.3-3", [ 5, 3, 3 ], 723, 77, "davydovcode", "X7F5BE77B7F343182" ], 
+  [ "code, Tombak", "5.3-3", [ 5, 3, 3 ], 723, 77, "code tombak", "X7F5BE77B7F343182" ], 
+  [ "\033[2XTombakCode\033[0X", "5.3-4", [ 5, 3, 4 ], 731, 77, "tombakcode", "X845B4DBE83288D2D" ], 
+  [ "\033[2XEnlargedTombakCode\033[0X", "5.3-5", [ 5, 3, 5 ], 739, 77, "enlargedtombakcode", "X7D6583347C0D4292" ], 
+  [ "code, Golay (binary)", "5.4", [ 5, 4, 0 ], 761, 78, "code golay binary", "X81F6E4A785F368B0" ], 
+  [ "\033[2XBinaryGolayCode\033[0X", "5.4-1", [ 5, 4, 1 ], 770, 78, "binarygolaycode", "X80ED89C079CD0D09" ], 
+  [ "\033[2XExtendedBinaryGolayCode\033[0X", "5.4-2", [ 5, 4, 2 ], 791, 78, "extendedbinarygolaycode", "X84520C7983538806" 
+     ], [ "code, Golay (ternary)", "5.4-2", [ 5, 4, 2 ], 791, 78, "code golay ternary", "X84520C7983538806" ], 
+  [ "\033[2XTernaryGolayCode\033[0X", "5.4-3", [ 5, 4, 3 ], 813, 79, "ternarygolaycode", "X7E0CCCD7866ADB94" ], 
+  [ "\033[2XExtendedTernaryGolayCode\033[0X", "5.4-4", [ 5, 4, 4 ], 832, 79, "extendedternarygolaycode", 
+      "X81088A66816BCAE4" ], [ "generator polynomial", "5.5", [ 5, 5, 0 ], 853, 79, "generator polynomial", 
+      "X8366CC3685F0BC85" ], [ "check polynomial", "5.5", [ 5, 5, 0 ], 853, 79, "check polynomial", "X8366CC3685F0BC85" ], 
+  [ "\033[2XGeneratorPolCode\033[0X", "5.5-1", [ 5, 5, 1 ], 902, 80, "generatorpolcode", "X853D34A5796CEB73" ], 
+  [ "\033[2XCheckPolCode\033[0X", "5.5-2", [ 5, 5, 2 ], 927, 81, "checkpolcode", "X82440B78845F7F6E" ], 
+  [ "\033[2XRootsCode\033[0X", "5.5-3", [ 5, 5, 3 ], 950, 81, "rootscode", "X818F0E6583E01D4B" ], 
+  [ "code, Bose-Chaudhuri-Hockenghem", "5.5-3", [ 5, 5, 3 ], 950, 81, "code bose-chaudhuri-hockenghem", 
+      "X818F0E6583E01D4B" ], [ "\033[2XBCHCode\033[0X", "5.5-4", [ 5, 5, 4 ], 989, 82, "bchcode", "X7C6BB07C87853C00" ], 
+  [ "Bose distance", "5.5-4", [ 5, 5, 4 ], 989, 82, "bose distance", "X7C6BB07C87853C00" ], 
+  [ "code, Reed-Solomon", "5.5-4", [ 5, 5, 4 ], 989, 82, "code reed-solomon", "X7C6BB07C87853C00" ], 
+  [ "\033[2XReedSolomonCode\033[0X", "5.5-5", [ 5, 5, 5 ], 1051, 83, "reedsolomoncode", "X838F3CB3872CEF95" ], 
+  [ "\033[2XExtendedReedSolomonCode\033[0X", "5.5-6", [ 5, 5, 6 ], 1077, 83, "extendedreedsolomoncode", 
+      "X8730B90A862A3B3E" ], [ "\033[2XQRCode\033[0X", "5.5-7", [ 5, 5, 7 ], 1094, 83, "qrcode", "X825F42F68179D2AB" ], 
+  [ "\033[2XQQRCodeNC\033[0X", "5.5-8", [ 5, 5, 8 ], 1124, 84, "qqrcodenc", "X8764ABCF854C695E" ], 
+  [ "\033[2XQQRCode\033[0X", "5.5-9", [ 5, 5, 9 ], 1131, 84, "qqrcode", "X7F4C3AD2795A8D7A" ], 
+  [ "code, Fire", "5.5-9", [ 5, 5, 9 ], 1131, 84, "code fire", "X7F4C3AD2795A8D7A" ], 
+  [ "\033[2XFireCode\033[0X", "5.5-10", [ 5, 5, 10 ], 1173, 85, "firecode", "X7F3B8CC8831DA0E4" ], 
+  [ "order of polynomial", "5.5-10", [ 5, 5, 10 ], 1173, 85, "order of polynomial", "X7F3B8CC8831DA0E4" ], 
+  [ "\033[2XWholeSpaceCode\033[0X", "5.5-11", [ 5, 5, 11 ], 1205, 85, "wholespacecode", "X7BC245E37EB7B23F" ], 
+  [ "\033[2XNullCode\033[0X", "5.5-12", [ 5, 5, 12 ], 1218, 86, "nullcode", "X7B4EF2017B2C61AD" ], 
+  [ "\033[2XRepetitionCode\033[0X", "5.5-13", [ 5, 5, 13 ], 1232, 86, "repetitioncode", "X83C5F8FE7827EAA7" ], 
+  [ "\033[2XCyclicCodes\033[0X", "5.5-14", [ 5, 5, 14 ], 1251, 86, "cycliccodes", "X82FA9F65854D98A6" ], 
+  [ "\033[2XNrCyclicCodes\033[0X", "5.5-15", [ 5, 5, 15 ], 1268, 86, "nrcycliccodes", "X8263CE4A790D294A" ], 
+  [ "\033[2XQuasiCyclicCode\033[0X", "5.5-16", [ 5, 5, 16 ], 1295, 87, "quasicycliccode", "X79826B16785E8BD3" ], 
+  [ "\033[2XCyclicMDSCode\033[0X", "5.5-17", [ 5, 5, 17 ], 1361, 88, "cyclicmdscode", "X7BFEDA52835A601D" ], 
+  [ "MDS", "5.5-17", [ 5, 5, 17 ], 1361, 88, "mds", "X7BFEDA52835A601D" ], 
+  [ "cyclic", "5.5-17", [ 5, 5, 17 ], 1361, 88, "cyclic", "X7BFEDA52835A601D" ], 
+  [ "\033[2XFourNegacirculantSelfDualCode\033[0X", "5.5-18", [ 5, 5, 18 ], 1385, 89, "fournegacirculantselfdualcode", 
+      "X7F40AF3B81C252DC" ], [ "self-dual", "5.5-18", [ 5, 5, 18 ], 1385, 89, "self-dual", "X7F40AF3B81C252DC" ], 
+  [ "\033[2XFourNegacirculantSelfDualCodeNC\033[0X", "5.5-19", [ 5, 5, 19 ], 1444, 90, "fournegacirculantselfdualcodenc", 
+      "X87137A257E761291" ], [ "code, evaluation", "5.6", [ 5, 6, 0 ], 1452, 90, "code evaluation", "X850A28C579137220" ], 
+  [ "\033[2XEvaluationCode\033[0X", "5.6-1", [ 5, 6, 1 ], 1455, 90, "evaluationcode", "X78E078567D19D433" ], 
+  [ "\033[2XGeneralizedReedSolomonCode\033[0X", "5.6-2", [ 5, 6, 2 ], 1494, 90, "generalizedreedsolomoncode", 
+      "X810AB3DB844FFCE9" ], [ "\033[2XGeneralizedReedMullerCode\033[0X", "5.6-3", [ 5, 6, 3 ], 1548, 91, 
+      "generalizedreedmullercode", "X85B8699680B9D786" ], 
+  [ "\033[2XToricPoints\033[0X", "5.6-4", [ 5, 6, 4 ], 1579, 92, "toricpoints", "X7EE68B58872D7E82" ], 
+  [ "code, toric", "5.6-4", [ 5, 6, 4 ], 1579, 92, "code toric", "X7EE68B58872D7E82" ], 
+  [ "\033[2XToricCode\033[0X", "5.6-5", [ 5, 6, 5 ], 1594, 92, "toriccode", "X7B24BE418010F596" ], 
+  [ "code, AG", "5.7", [ 5, 7, 0 ], 1617, 93, "code ag", "X7AE2B2CD7C647990" ], 
+  [ "\033[2XAffineCurve\033[0X", "5.7-1", [ 5, 7, 1 ], 1623, 93, "affinecurve", "X802DD9FB79A9ACA7" ], 
+  [ "point", "5.7-1", [ 5, 7, 1 ], 1623, 93, "point", "X802DD9FB79A9ACA7" ], 
+  [ "\033[2XAffinePointsOnCurve\033[0X", "5.7-2", [ 5, 7, 2 ], 1678, 94, "affinepointsoncurve", "X857EFE567C05C981" ], 
+  [ "\033[2XGenusCurve\033[0X", "5.7-3", [ 5, 7, 3 ], 1698, 94, "genuscurve", "X857E36ED814A40B8" ], 
+  [ "\033[2XGOrbitPoint \033[0X", "5.7-4", [ 5, 7, 4 ], 1723, 94, "gorbitpoint", "X8572A3037DA66F88" ], 
+  [ "divisor", "5.7-4", [ 5, 7, 4 ], 1723, 94, "divisor", "X8572A3037DA66F88" ], 
+  [ "support", "5.7-4", [ 5, 7, 4 ], 1723, 94, "support", "X8572A3037DA66F88" ], 
+  [ "\033[2XDivisorOnAffineCurve\033[0X", "5.7-5", [ 5, 7, 5 ], 1795, 96, "divisoronaffinecurve", "X79742B7183051D99" ], 
+  [ "\033[2XDivisorAddition \033[0X", "5.7-6", [ 5, 7, 6 ], 1829, 96, "divisoraddition", "X8626E2B57D01F2DC" ], 
+  [ "\033[2XDivisorDegree \033[0X", "5.7-7", [ 5, 7, 7 ], 1836, 96, "divisordegree", "X865FE28D828C1EAD" ], 
+  [ "degree", "5.7-7", [ 5, 7, 7 ], 1836, 96, "degree", "X865FE28D828C1EAD" ], 
+  [ "\033[2XDivisorNegate \033[0X", "5.7-8", [ 5, 7, 8 ], 1842, 97, "divisornegate", "X789DC358819A8F54" ], 
+  [ "\033[2XDivisorIsZero \033[0X", "5.7-9", [ 5, 7, 9 ], 1848, 97, "divisoriszero", "X8688C0E187B5C7DB" ], 
+  [ "\033[2XDivisorsEqual \033[0X", "5.7-10", [ 5, 7, 10 ], 1854, 97, "divisorsequal", "X816A07997D9A7075" ], 
+  [ "\033[2XDivisorGCD \033[0X", "5.7-11", [ 5, 7, 11 ], 1860, 97, "divisorgcd", "X857B89847A649A26" ], 
+  [ "greatest common divisor", "5.7-11", [ 5, 7, 11 ], 1860, 97, "greatest common divisor", "X857B89847A649A26" ], 
+  [ "\033[2XDivisorLCM \033[0X", "5.7-12", [ 5, 7, 12 ], 1872, 97, "divisorlcm", "X82231CF08073695F" ], 
+  [ "least common multiple", "5.7-12", [ 5, 7, 12 ], 1872, 97, "least common multiple", "X82231CF08073695F" ], 
+  [ "\033[2XRiemannRochSpaceBasisFunctionP1 \033[0X", "5.7-13", [ 5, 7, 13 ], 1953, 99, "riemannrochspacebasisfunctionp1", 
+      "X79C878697F99A10F" ], [ "\033[2XDivisorOfRationalFunctionP1 \033[0X", "5.7-14", [ 5, 7, 14 ], 1960, 99, 
+      "divisorofrationalfunctionp1", "X856DDA207EDDF256" ], 
+  [ "\033[2XRiemannRochSpaceBasisP1 \033[0X", "5.7-15", [ 5, 7, 15 ], 2008, 100, "riemannrochspacebasisp1", 
+      "X878970A17E580224" ], [ "\033[2XMoebiusTransformation \033[0X", "5.7-16", [ 5, 7, 16 ], 2064, 101, 
+      "moebiustransformation", "X807C52E67A440DEB" ], [ "\033[2XActionMoebiusTransformationOnFunction \033[0X", "5.7-17", 
+      [ 5, 7, 17 ], 2073, 101, "actionmoebiustransformationonfunction", "X85A0419580ED0391" ], 
+  [ "\033[2XActionMoebiusTransformationOnDivisorP1 \033[0X", "5.7-18", [ 5, 7, 18 ], 2082, 101, 
+      "actionmoebiustransformationondivisorp1", "X7E48F9C67E7FB7B5" ], 
+  [ "\033[2XIsActionMoebiusTransformationOnDivisorDefinedP1 \033[0X", "5.7-19", [ 5, 7, 19 ], 2091, 101, 
+      "isactionmoebiustransformationondivisordefinedp1", "X79FD980E7B24DB9C" ], 
+  [ "\033[2XDivisorAutomorphismGroupP1 \033[0X", "5.7-20", [ 5, 7, 20 ], 2134, 102, "divisorautomorphismgroupp1", 
+      "X823386037F450B0E" ], [ "\033[2XMatrixRepresentationOnRiemannRochSpaceP1 \033[0X", "5.7-21", [ 5, 7, 21 ], 2167, 
+      103, "matrixrepresentationonriemannrochspacep1", "X80EDF3D682E7EF3F" ], 
+  [ "\033[2XGoppaCodeClassical\033[0X", "5.7-22", [ 5, 7, 22 ], 2227, 104, "goppacodeclassical", "X8777388C7885E335" ], 
+  [ "\033[2XEvaluationBivariateCode\033[0X", "5.7-23", [ 5, 7, 23 ], 2263, 104, "evaluationbivariatecode", 
+      "X8422A310854C09B0" ], [ "\033[2XEvaluationBivariateCodeNC\033[0X", "5.7-24", [ 5, 7, 24 ], 2278, 104, 
+      "evaluationbivariatecodenc", "X7B6C2BED8319C811" ], [ "\033[2XOnePointAGCode\033[0X", "5.7-25", [ 5, 7, 25 ], 2326, 
+      105, "onepointagcode", "X842E227E8785168E" ], 
+  [ "Parity check", "6.1", [ 6, 1, 0 ], 31, 107, "parity check", "X8271A4697FDA97B2" ], 
+  [ "\033[2XExtendedCode\033[0X", "6.1-1", [ 6, 1, 1 ], 34, 107, "extendedcode", "X794679BE7F9EB5C1" ], 
+  [ "\033[2XPuncturedCode\033[0X", "6.1-2", [ 6, 1, 2 ], 66, 108, "puncturedcode", "X7E6E4DDA79574FDB" ], 
+  [ "\033[2XEvenWeightSubcode\033[0X", "6.1-3", [ 6, 1, 3 ], 101, 108, "evenweightsubcode", "X87691AB67FF5621B" ], 
+  [ "\033[2XPermutedCode\033[0X", "6.1-4", [ 6, 1, 4 ], 130, 109, "permutedcode", "X79577EB27BE8524B" ], 
+  [ "\033[2XExpurgatedCode\033[0X", "6.1-5", [ 6, 1, 5 ], 156, 109, "expurgatedcode", "X87E5849784BC60D2" ], 
+  [ "\033[2XAugmentedCode\033[0X", "6.1-6", [ 6, 1, 6 ], 181, 110, "augmentedcode", "X8134BE2B8478BE8A" ], 
+  [ "\033[2XRemovedElementsCode\033[0X", "6.1-7", [ 6, 1, 7 ], 219, 110, "removedelementscode", "X7B0A6E1F82686B43" ], 
+  [ "\033[2XAddedElementsCode\033[0X", "6.1-8", [ 6, 1, 8 ], 244, 111, "addedelementscode", "X784E1255874FCA8A" ], 
+  [ "\033[2XShortenedCode\033[0X", "6.1-9", [ 6, 1, 9 ], 269, 111, "shortenedcode", "X81CBEAFF7B9DE6EF" ], 
+  [ "\033[2XLengthenedCode\033[0X", "6.1-10", [ 6, 1, 10 ], 318, 112, "lengthenedcode", "X7A5D5419846FC867" ], 
+  [ "\033[2XSubCode\033[0X", "6.1-11", [ 6, 1, 11 ], 339, 113, "subcode", "X7982D699803ECD0F" ], 
+  [ "\033[2XResidueCode\033[0X", "6.1-12", [ 6, 1, 12 ], 365, 113, "residuecode", "X809376187C1525AA" ], 
+  [ "\033[2XConstructionBCode\033[0X", "6.1-13", [ 6, 1, 13 ], 386, 113, "constructionbcode", "X7E92DC9581F96594" ], 
+  [ "\033[2XDualCode\033[0X", "6.1-14", [ 6, 1, 14 ], 419, 114, "dualcode", "X799B12F085ACB609" ], 
+  [ "self-dual", "6.1-14", [ 6, 1, 14 ], 419, 114, "self-dual", "X799B12F085ACB609" ], 
+  [ "\033[2XConversionFieldCode\033[0X", "6.1-15", [ 6, 1, 15 ], 448, 115, "conversionfieldcode", "X81FE1F387DFCCB22" ], 
+  [ "\033[2XTraceCode\033[0X", "6.1-16", [ 6, 1, 16 ], 474, 115, "tracecode", "X82D18907800FE3D9" ], 
+  [ "\033[2XCosetCode\033[0X", "6.1-17", [ 6, 1, 17 ], 499, 115, "cosetcode", "X8799F4BF81B0842B" ], 
+  [ "\033[2XConstantWeightSubcode\033[0X", "6.1-18", [ 6, 1, 18 ], 525, 116, "constantweightsubcode", "X873EA5EE85699832" ]
+    , [ "\033[2XStandardFormCode\033[0X", "6.1-19", [ 6, 1, 19 ], 558, 116, "standardformcode", "X7AA203A380BC4C79" ], 
+  [ "\033[2XPiecewiseConstantCode\033[0X", "6.1-20", [ 6, 1, 20 ], 592, 117, "piecewiseconstantcode", "X7EF49A257D6DB53B" ]
+    , [ "\033[2XDirectSumCode\033[0X", "6.2-1", [ 6, 2, 1 ], 628, 118, "directsumcode", "X79E00D3A8367D65A" ], 
+  [ "\033[2XUUVCode\033[0X", "6.2-2", [ 6, 2, 2 ], 655, 118, "uuvcode", "X86E9D6DE7F1A07E6" ], 
+  [ "\033[2XDirectProductCode\033[0X", "6.2-3", [ 6, 2, 3 ], 684, 118, "directproductcode", "X7BFBBA5784C293C1" ], 
+  [ "\033[2XIntersectionCode\033[0X", "6.2-4", [ 6, 2, 4 ], 705, 119, "intersectioncode", "X78F0B1BC81FB109C" ], 
+  [ "hull", "6.2-4", [ 6, 2, 4 ], 705, 119, "hull", "X78F0B1BC81FB109C" ], 
+  [ "\033[2XUnionCode\033[0X", "6.2-5", [ 6, 2, 5 ], 731, 119, "unioncode", "X8228A1F57A29B8F4" ], 
+  [ "\033[2XExtendedDirectSumCode\033[0X", "6.2-6", [ 6, 2, 6 ], 757, 120, "extendeddirectsumcode", "X7A85F8AF8154D387" ], 
+  [ "\033[2XAmalgamatedDirectSumCode\033[0X", "6.2-7", [ 6, 2, 7 ], 791, 120, "amalgamateddirectsumcode", 
+      "X7E17107686A845DB" ], [ "\033[2XBlockwiseDirectSumCode\033[0X", "6.2-8", [ 6, 2, 8 ], 831, 121, 
+      "blockwisedirectsumcode", "X7D8981AF7DFE9814" ], [ "\033[2XConstructionXCode\033[0X", "6.2-9", [ 6, 2, 9 ], 866, 
+      121, "constructionxcode", "X7C37D467791CE99B" ], [ "\033[2XConstructionXXCode\033[0X", "6.2-10", [ 6, 2, 10 ], 915, 
+      122, "constructionxxcode", "X7B50943B8014134F" ], 
+  [ "\033[2XBZCode\033[0X", "6.2-11", [ 6, 2, 11 ], 974, 123, "bzcode", "X790C614985BFAE16" ], 
+  [ "\033[2XBZCodeNC\033[0X", "6.2-12", [ 6, 2, 12 ], 993, 124, "bzcodenc", "X820327D6854A50B5" ], 
+  [ "bounds, Singleton", "7.1", [ 7, 1, 0 ], 10, 125, "bounds singleton", "X87C753EB840C34D3" ], 
+  [ "\033[2XUpperBoundSingleton\033[0X", "7.1-1", [ 7, 1, 1 ], 45, 126, "upperboundsingleton", "X8673277C7F6C04C3" ], 
+  [ "maximum distance separable", "7.1-1", [ 7, 1, 1 ], 45, 126, "maximum distance separable", "X8673277C7F6C04C3" ], 
+  [ "bounds, Hamming", "7.1-1", [ 7, 1, 1 ], 45, 126, "bounds hamming", "X8673277C7F6C04C3" ], 
+  [ "bounds, sphere packing bound", "7.1-1", [ 7, 1, 1 ], 45, 126, "bounds sphere packing bound", "X8673277C7F6C04C3" ], 
+  [ "perfect", "7.1-1", [ 7, 1, 1 ], 45, 126, "perfect", "X8673277C7F6C04C3" ], 
+  [ "\033[2XUpperBoundHamming\033[0X", "7.1-2", [ 7, 1, 2 ], 71, 126, "upperboundhamming", "X828095537C91FDFA" ], 
+  [ "bounds, Johnson", "7.1-2", [ 7, 1, 2 ], 71, 126, "bounds johnson", "X828095537C91FDFA" ], 
+  [ "\033[2XUpperBoundJohnson\033[0X", "7.1-3", [ 7, 1, 3 ], 100, 126, "upperboundjohnson", "X82EBFAAB7F5BFD4A" ], 
+  [ "bounds, Plotkin", "7.1-3", [ 7, 1, 3 ], 100, 126, "bounds plotkin", "X82EBFAAB7F5BFD4A" ], 
+  [ "\033[2XUpperBoundPlotkin\033[0X", "7.1-4", [ 7, 1, 4 ], 116, 127, "upperboundplotkin", "X7A26E2537DFF4409" ], 
+  [ "bounds, Elias", "7.1-4", [ 7, 1, 4 ], 116, 127, "bounds elias", "X7A26E2537DFF4409" ], 
+  [ "\033[2XUpperBoundElias\033[0X", "7.1-5", [ 7, 1, 5 ], 143, 127, "upperboundelias", "X86A5A7C67F625A40" ], 
+  [ "bounds, Griesmer", "7.1-5", [ 7, 1, 5 ], 143, 127, "bounds griesmer", "X86A5A7C67F625A40" ], 
+  [ "\033[2XUpperBoundGriesmer\033[0X", "7.1-6", [ 7, 1, 6 ], 162, 128, "upperboundgriesmer", "X82366C277E218130" ], 
+  [ "Griesmer code", "7.1-6", [ 7, 1, 6 ], 162, 128, "griesmer code", "X82366C277E218130" ], 
+  [ "\033[2XIsGriesmerCode\033[0X", "7.1-7", [ 7, 1, 7 ], 181, 128, "isgriesmercode", "X8301FA9F7C6C7445" ], 
+  [ "A(n,d)", "7.1-7", [ 7, 1, 7 ], 181, 128, "a n d", "X8301FA9F7C6C7445" ], 
+  [ "\033[2XUpperBound\033[0X", "7.1-8", [ 7, 1, 8 ], 199, 128, "upperbound", "X7A5CB74485184FEE" ], 
+  [ "\033[2XLowerBoundMinimumDistance\033[0X", "7.1-9", [ 7, 1, 9 ], 221, 129, "lowerboundminimumdistance", 
+      "X7FDF54BA81115D88" ], [ "bound, Gilbert-Varshamov lower", "7.1-9", [ 7, 1, 9 ], 221, 129, 
+      "bound gilbert-varshamov lower", "X7FDF54BA81115D88" ], 
+  [ "\033[2XLowerBoundGilbertVarshamov\033[0X", "7.1-10", [ 7, 1, 10 ], 242, 129, "lowerboundgilbertvarshamov", 
+      "X7CF15D2084499869" ], [ "bound, sphere packing lower", "7.1-10", [ 7, 1, 10 ], 242, 129, 
+      "bound sphere packing lower", "X7CF15D2084499869" ], 
+  [ "\033[2XLowerBoundSpherePacking\033[0X", "7.1-11", [ 7, 1, 11 ], 261, 129, "lowerboundspherepacking", 
+      "X8217D830871286D8" ], [ "\033[2XUpperBoundMinimumDistance\033[0X", "7.1-12", [ 7, 1, 12 ], 276, 130, 
+      "upperboundminimumdistance", "X7C6A58327BD6B685" ], [ "\033[2XBoundsMinimumDistance\033[0X", "7.1-13", [ 7, 1, 13 ], 
+      299, 130, "boundsminimumdistance", "X7B3858B27A9E509A" ], 
+  [ "\033[2XBoundsCoveringRadius\033[0X", "7.2-1", [ 7, 2, 1 ], 344, 131, "boundscoveringradius", "X8320D1C180A1AAAD" ], 
+  [ "\033[2XIncreaseCoveringRadiusLowerBound\033[0X", "7.2-2", [ 7, 2, 2 ], 363, 131, "increasecoveringradiuslowerbound", 
+      "X7881E03E812140F4" ], [ "\033[2XExhaustiveSearchCoveringRadius\033[0X", "7.2-3", [ 7, 2, 3 ], 444, 132, 
+      "exhaustivesearchcoveringradius", "X7AD9F1D27C52BC0F" ], 
+  [ "\033[2XGeneralLowerBoundCoveringRadius\033[0X", "7.2-4", [ 7, 2, 4 ], 466, 133, "generallowerboundcoveringradius", 
+      "X85D671F4824B4B0C" ], [ "\033[2XGeneralUpperBoundCoveringRadius\033[0X", "7.2-5", [ 7, 2, 5 ], 486, 133, 
+      "generalupperboundcoveringradius", "X8638F5A67D6E50C1" ], 
+  [ "\033[2XLowerBoundCoveringRadiusSphereCovering\033[0X", "7.2-6", [ 7, 2, 6 ], 505, 134, 
+      "lowerboundcoveringradiusspherecovering", "X7E7FBCC87D5562AB" ], 
+  [ "\033[2XLowerBoundCoveringRadiusVanWee1\033[0X", "7.2-7", [ 7, 2, 7 ], 540, 134, "lowerboundcoveringradiusvanwee1", 
+      "X85E20C518360AB70" ], [ "\033[2XLowerBoundCoveringRadiusVanWee2\033[0X", "7.2-8", [ 7, 2, 8 ], 576, 135, 
+      "lowerboundcoveringradiusvanwee2", "X7C72994A825228E7" ], 
+  [ "\033[2XLowerBoundCoveringRadiusCountingExcess\033[0X", "7.2-9", [ 7, 2, 9 ], 616, 135, 
+      "lowerboundcoveringradiuscountingexcess", "X7F95362485759ACB" ], 
+  [ "\033[2XLowerBoundCoveringRadiusEmbedded1\033[0X", "7.2-10", [ 7, 2, 10 ], 663, 136, 
+      "lowerboundcoveringradiusembedded1", "X829C14A383B5BF59" ], 
+  [ "\033[2XLowerBoundCoveringRadiusEmbedded2\033[0X", "7.2-11", [ 7, 2, 11 ], 702, 136, 
+      "lowerboundcoveringradiusembedded2", "X7B0C81B88604C448" ], 
+  [ "\033[2XLowerBoundCoveringRadiusInduction\033[0X", "7.2-12", [ 7, 2, 12 ], 741, 137, 
+      "lowerboundcoveringradiusinduction", "X7D27F6E27B9A0D35" ], 
+  [ "\033[2XUpperBoundCoveringRadiusRedundancy\033[0X", "7.2-13", [ 7, 2, 13 ], 766, 137, 
+      "upperboundcoveringradiusredundancy", "X80F8DFAD7D67CBEC" ], 
+  [ "external distance", "7.2-13", [ 7, 2, 13 ], 766, 137, "external distance", "X80F8DFAD7D67CBEC" ], 
+  [ "\033[2XUpperBoundCoveringRadiusDelsarte\033[0X", "7.2-14", [ 7, 2, 14 ], 783, 138, "upperboundcoveringradiusdelsarte",
+      "X832847A17FD0D142" ], [ "\033[2XUpperBoundCoveringRadiusStrength\033[0X", "7.2-15", [ 7, 2, 15 ], 802, 138, 
+      "upperboundcoveringradiusstrength", "X86F10D9E79AB8796" ], 
+  [ "strength", "7.2-15", [ 7, 2, 15 ], 802, 138, "strength", "X86F10D9E79AB8796" ], 
+  [ "\033[2XUpperBoundCoveringRadiusGriesmerLike\033[0X", "7.2-16", [ 7, 2, 16 ], 825, 138, 
+      "upperboundcoveringradiusgriesmerlike", "X8585C6A982489FC3" ], 
+  [ "\033[2XUpperBoundCoveringRadiusCyclicCode\033[0X", "7.2-17", [ 7, 2, 17 ], 846, 139, 
+      "upperboundcoveringradiuscycliccode", "X82A38F5F858CF3FC" ], 
+  [ "\033[2XKrawtchoukMat\033[0X", "7.3-1", [ 7, 3, 1 ], 889, 140, "krawtchoukmat", "X82899B64802A4BCE" ], 
+  [ "Gary code", "7.3-1", [ 7, 3, 1 ], 889, 140, "gary code", "X82899B64802A4BCE" ], 
+  [ "\033[2XGrayMat\033[0X", "7.3-2", [ 7, 3, 2 ], 917, 140, "graymat", "X87AFE2C078031CE4" ], 
+  [ "\033[2XSylvesterMat\033[0X", "7.3-3", [ 7, 3, 3 ], 939, 140, "sylvestermat", "X7E1E7C5287919CDB" ], 
+  [ "Hadamard matrix", "7.3-3", [ 7, 3, 3 ], 939, 140, "hadamard matrix", "X7E1E7C5287919CDB" ], 
+  [ "\033[2XHadamardMat\033[0X", "7.3-4", [ 7, 3, 4 ], 959, 141, "hadamardmat", "X8014A1F181ECD8AA" ], 
+  [ "\033[2XVandermondeMat\033[0X", "7.3-5", [ 7, 3, 5 ], 989, 141, "vandermondemat", "X797F43607AD8660D" ], 
+  [ "standard form", "7.3-5", [ 7, 3, 5 ], 989, 141, "standard form", "X797F43607AD8660D" ], 
+  [ "\033[2XPutStandardForm\033[0X", "7.3-6", [ 7, 3, 6 ], 1008, 142, "putstandardform", "X7B47D82485B66F1D" ], 
+  [ "\033[2XIsInStandardForm\033[0X", "7.3-7", [ 7, 3, 7 ], 1062, 143, "isinstandardform", "X7D4EDA0A854EBFEF" ], 
+  [ "\033[2XPermutedCols\033[0X", "7.3-8", [ 7, 3, 8 ], 1083, 143, "permutedcols", "X7A97AD477E7638DE" ], 
+  [ "\033[2XVerticalConversionFieldMat\033[0X", "7.3-9", [ 7, 3, 9 ], 1098, 143, "verticalconversionfieldmat", 
+      "X7B68119F85E9EC6D" ], [ "\033[2XHorizontalConversionFieldMat\033[0X", "7.3-10", [ 7, 3, 10 ], 1134, 144, 
+      "horizontalconversionfieldmat", "X8033E9A67BA155C8" ], 
+  [ "mutually orthogonal Latin squares", "7.3-10", [ 7, 3, 10 ], 1134, 144, "mutually orthogonal latin squares", 
+      "X8033E9A67BA155C8" ], [ "Latin square", "7.3-10", [ 7, 3, 10 ], 1134, 144, "latin square", "X8033E9A67BA155C8" ], 
+  [ "\033[2XMOLS\033[0X", "7.3-11", [ 7, 3, 11 ], 1170, 144, "mols", "X804AAFF2867080F7" ], 
+  [ "\033[2XIsLatinSquare\033[0X", "7.3-12", [ 7, 3, 12 ], 1211, 145, "islatinsquare", "X7F34306B81DC2776" ], 
+  [ "\033[2XAreMOLS\033[0X", "7.3-13", [ 7, 3, 13 ], 1226, 145, "aremols", "X81B9B40B7B2D97D5" ], 
+  [ "\033[2XCoordinateNorm\033[0X", "7.4-1", [ 7, 4, 1 ], 1252, 146, "coordinatenorm", "X8032E53078264ABB" ], 
+  [ "norm of a code", "7.4-1", [ 7, 4, 1 ], 1252, 146, "norm of a code", "X8032E53078264ABB" ], 
+  [ "\033[2XCodeNorm\033[0X", "7.4-2", [ 7, 4, 2 ], 1271, 146, "codenorm", "X7ED2EF368203AF47" ], 
+  [ "acceptable coordinate", "7.4-2", [ 7, 4, 2 ], 1271, 146, "acceptable coordinate", "X7ED2EF368203AF47" ], 
+  [ "\033[2XIsCoordinateAcceptable\033[0X", "7.4-3", [ 7, 4, 3 ], 1285, 146, "iscoordinateacceptable", "X7D24F8BF7F9A7BF1" 
+     ], [ "acceptable coordinate", "7.4-3", [ 7, 4, 3 ], 1285, 146, "acceptable coordinate", "X7D24F8BF7F9A7BF1" ], 
+  [ "\033[2XGeneralizedCodeNorm\033[0X", "7.4-4", [ 7, 4, 4 ], 1299, 147, "generalizedcodenorm", "X87039FD179AD3009" ], 
+  [ "normal code", "7.4-4", [ 7, 4, 4 ], 1299, 147, "normal code", "X87039FD179AD3009" ], 
+  [ "\033[2XIsNormalCode\033[0X", "7.4-5", [ 7, 4, 5 ], 1314, 147, "isnormalcode", "X80283A2F7C8101BD" ], 
+  [ "weight enumerator polynomial", "7.5", [ 7, 5, 0 ], 1333, 147, "weight enumerator polynomial", "X8308D685809A4E2F" ], 
+  [ "\033[2XCodeWeightEnumerator\033[0X", "7.5-1", [ 7, 5, 1 ], 1343, 147, "codeweightenumerator", "X871286437DE7A6A4" ], 
+  [ "\033[2XCodeDistanceEnumerator\033[0X", "7.5-2", [ 7, 5, 2 ], 1363, 148, "codedistanceenumerator", "X84DA928083B103A0" 
+     ], [ "MacWilliams transform", "7.5-2", [ 7, 5, 2 ], 1363, 148, "macwilliams transform", "X84DA928083B103A0" ], 
+  [ "\033[2XCodeMacWilliamsTransform\033[0X", "7.5-3", [ 7, 5, 3 ], 1385, 148, "codemacwilliamstransform", 
+      "X84B2BE66780EFBF9" ], [ "density of a code", "7.5-3", [ 7, 5, 3 ], 1385, 148, "density of a code", 
+      "X84B2BE66780EFBF9" ], [ "\033[2XCodeDensity\033[0X", "7.5-4", [ 7, 5, 4 ], 1402, 148, "codedensity", 
+      "X7903286078F8051B" ], [ "perfect code", "7.5-4", [ 7, 5, 4 ], 1402, 148, "perfect code", "X7903286078F8051B" ], 
+  [ "\033[2XSphereContent\033[0X", "7.5-5", [ 7, 5, 5 ], 1423, 149, "spherecontent", "X85303BAE7BD46D81" ], 
+  [ "\033[2XKrawtchouk\033[0X", "7.5-6", [ 7, 5, 6 ], 1449, 149, "krawtchouk", "X7ACDC5377CD17451" ], 
+  [ "\033[2XPrimitiveUnityRoot\033[0X", "7.5-7", [ 7, 5, 7 ], 1470, 149, "primitiveunityroot", "X827E39957A87EB51" ], 
+  [ "\033[2XPrimitivePolynomialsNr\033[0X", "7.5-8", [ 7, 5, 8 ], 1487, 150, "primitivepolynomialsnr", "X78AEA40F7AD9D541" 
+     ], [ "\033[2XIrreduciblePolynomialsNr\033[0X", "7.5-9", [ 7, 5, 9 ], 1504, 150, "irreduciblepolynomialsnr", 
+      "X7A2B54EF868AA752" ], [ "\033[2XMatrixRepresentationOfElement\033[0X", "7.5-10", [ 7, 5, 10 ], 1517, 150, 
+      "matrixrepresentationofelement", "X7B50D3417F6FD7C6" ], 
+  [ "reciprocal polynomial", "7.5-10", [ 7, 5, 10 ], 1517, 150, "reciprocal polynomial", "X7B50D3417F6FD7C6" ], 
+  [ "\033[2XReciprocalPolynomial\033[0X", "7.5-11", [ 7, 5, 11 ], 1542, 151, "reciprocalpolynomial", "X7805D2BB7CE4D455" ],
+  [ "\033[2XCyclotomicCosets\033[0X", "7.5-12", [ 7, 5, 12 ], 1569, 151, "cyclotomiccosets", "X7AEA9F807E6FFEFF" ], 
+  [ "\033[2XWeightHistogram\033[0X", "7.5-13", [ 7, 5, 13 ], 1590, 152, "weighthistogram", "X7A4EA98D794CF410" ], 
+  [ "\033[2XMultiplicityInList\033[0X", "7.5-14", [ 7, 5, 14 ], 1618, 152, "multiplicityinlist", "X805DF25C84585FD6" ], 
+  [ "\033[2XMostCommonInList\033[0X", "7.5-15", [ 7, 5, 15 ], 1634, 152, "mostcommoninlist", "X8072B0DA78FBE562" ], 
+  [ "\033[2XRotateList\033[0X", "7.5-16", [ 7, 5, 16 ], 1648, 153, "rotatelist", "X7C5407EF87849857" ], 
+  [ "\033[2XCirculantMatrix\033[0X", "7.5-17", [ 7, 5, 17 ], 1662, 153, "circulantmatrix", "X85E526367878F72A" ], 
+  [ "\033[2XMatrixTransformationOnMultivariatePolynomial \033[0X", "7.6-1", [ 7, 6, 1 ], 1682, 153, 
+      "matrixtransformationonmultivariatepolynomial", "X84D51EBB784E7C5D" ], 
+  [ "\033[2XDegreeMultivariatePolynomial\033[0X", "7.6-2", [ 7, 6, 2 ], 1690, 153, "degreemultivariatepolynomial", 
+      "X80433A4B792880EF" ], [ "\033[2XDegreesMultivariatePolynomial\033[0X", "7.6-3", [ 7, 6, 3 ], 1712, 154, 
+      "degreesmultivariatepolynomial", "X83F44E397C56F2E0" ], 
+  [ "\033[2XCoefficientMultivariatePolynomial\033[0X", "7.6-4", [ 7, 6, 4 ], 1733, 154, "coefficientmultivariatepolynomial"
+        , "X7E9021697A61A60F" ], [ "\033[2XSolveLinearSystem\033[0X", "7.6-5", [ 7, 6, 5 ], 1775, 155, "solvelinearsystem",
+      "X79E76B6F7D177E27" ], [ "\033[2XGuavaVersion\033[0X", "7.6-6", [ 7, 6, 6 ], 1804, 155, "guavaversion", 
+      "X80171AA687FFDC70" ], [ "\033[2XZechLog\033[0X", "7.6-7", [ 7, 6, 7 ], 1816, 155, "zechlog", "X7EBBE86D85CC90C0" ], 
+  [ "\033[2XCoefficientToPolynomial\033[0X", "7.6-8", [ 7, 6, 8 ], 1834, 156, "coefficienttopolynomial", 
+      "X7C8C1E6A7E3497F0" ], [ "\033[2XDegreesMonomialTerm\033[0X", "7.6-9", [ 7, 6, 9 ], 1853, 156, "degreesmonomialterm",
+      "X8431985183B63BB7" ], [ "\033[2XDivisorsMultivariatePolynomial\033[0X", "7.6-10", [ 7, 6, 10 ], 1884, 157, 
+      "divisorsmultivariatepolynomial", "X860EF39B841380A1" ] ]
+);
diff --git a/doc/manual.toc b/doc/manual.toc
new file mode 100644
index 0000000..e69de29
diff --git a/guava.tst b/guava.tst
new file mode 100644
index 0000000..03a7b28
--- /dev/null
+++ b/guava.tst
@@ -0,0 +1,409 @@
+##gap> START_TEST("arbitrary identifier string");
+
+###################### GUAVA test file
+##
+## Created 02-2006; last modified 18-03-2008
+##
+
+Print("\n AClosestVectorCombinationsMatFFEVecFFE\n");
+F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1;
+C := GeneratorPolCode(pol,8,F);
+v:=Codeword("12101111");
+v:=VectorCodeword(v);
+G:=GeneratorMat(C);
+AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+
+Print("\n AClosestVectorCombinationsMatFFEVecFFECoords\n");
+F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1;
+C := GeneratorPolCode(pol,8,F);
+v:=Codeword("12101111"); v:=VectorCodeword(v);;
+G:=GeneratorMat(C);;
+AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+
+Print("\n DistancesDistributionMatFFEVecFFE\n");
+v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+
+Print("\n DistancesDistributionVecFFEsVecFFE\n");
+v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+DistancesDistributionVecFFEsVecFFE(vecs,v);
+
+Print("\n DistanceVecFFE\n");
+v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+DistanceVecFFE(v1,v2);
+
+Print("\n Codes\n");
+C:=RandomLinearCode(20,10,GF(4));
+c:=Random(C);
+NamesOfComponents(C);
+NamesOfComponents(c);
+c!.VectorCodeword;
+Display(last);
+C!.Dimension;
+
+Print("\n Codeword\n");
+c := Codeword([0,1,1,1,0]);
+VectorCodeword( c ); 
+c2 := Codeword([0,1,1,1,0], GF(3));
+VectorCodeword( c2 );
+Codeword([c, c2, "0110"]);
+p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+Codeword(p);
+
+Print("\n Codeword2\n");
+C := WholeSpaceCode(7,GF(5));
+Codeword(["0220110", [1,1,1]], C);
+Codeword(["0220110", [1,1,1]], 7, GF(5));
+C:=RandomLinearCode(10,5,GF(3));
+Codeword("1000000000",C);
+Codeword("1000000000",10,GF(3));
+
+Print("\n CodewordNr\n");
+B := BinaryGolayCode();
+c := CodewordNr(B, 4);
+R := ReedSolomonCode(2,2);
+AsSSortedList(R);
+CodewordNr(R, [1,3]);
+
+Print("\n IsCodeword\n");
+IsCodeword(1);
+IsCodeword(ReedMullerCode(2,3));
+IsCodeword("11111");
+IsCodeword(Codeword("11111"));
+
+Print("\n Codewords EQ\n");
+P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+c := Codeword(P, GF(2));
+P = c;        # codeword operation
+c2 := Codeword("1001", GF(2));
+c = c2;
+C:=HammingCode(3);
+c1:=Random(C);
+c2:=Random(C);
+EQ(c1,c2);
+not EQ(c1,c2);
+
+Print("\n Codewords +\n");
+C:=RandomLinearCode(10,5,GF(3));
+c:=Random(C);
+Codeword(c+"2000000000");
+
+Print("\n Codewords +, 2\n");
+C:=RandomLinearCode(10,5);
+c:=Random(C);
+c+C;
+c+C=C;
+IsLinearCode(c+C);
+v:=Codeword("100000000");
+v+C;
+C=v+C;
+C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+Elements(C);
+v:=Codeword("0011");
+C+v;
+Elements(C+v);
+
+Print("\n PolyCodeword\n");
+a := Codeword("011011");; 
+PolyCodeword(a);
+
+Print("\n TreatAsVector\n");
+B := BinaryGolayCode();
+c := CodewordNr(B, 4);
+TreatAsVector(c);
+c;
+
+Print("\n TreatAsPoly\n");
+a := Codeword("00001",GF(2));
+TreatAsPoly(a); a;
+b := NullWord(6,GF(4));
+TreatAsPoly(b); b;
+
+Print("\n NullWord\n");
+NullWord(8);
+Codeword("0000") = NullWord(4);
+NullWord(5,GF(16));
+NullWord(ExtendedTernaryGolayCode());
+
+
+Print("\n DistanceCodeword\n");
+a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+DistanceCodeword(a, b);
+DistanceCodeword(b, a);
+DistanceCodeword(a, a);
+
+Print("\n WeightCodeword\n");
+WeightCodeword(Codeword("22222"));
+WeightCodeword(NullWord(3));
+C := HammingCode(3);
+Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+
+Print("\n ElementsCodes\n");
+C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+MinimumDistance(C);
+C;
+
+Print("\n IsLinearCode\n");
+L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+C := ElementsCode( L, GF(2) );
+IsLinearCode( C );
+C;
+
+Print("\n Decode\n");
+R := ReedMullerCode( 1, 3 );
+w := [ 1, 0, 1, 1 ] * R;
+Decode( R, w );
+Decode( R, w + "10000000" ); 
+
+Print("\n Codes =\n");
+M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+C1 := ElementsCode( M, GF(2) );
+M = C1;
+C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+C1 = C2;
+ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+
+Print("\n EvaluationCode \n");
+F:=GF(11);
+R := PolynomialRing(F,2);
+indets := IndeterminatesOfPolynomialRing(R);;
+x:=indets[1];; y:=indets[2];;
+L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],\
+[ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],\
+[ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ],\
+[ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+C:=EvaluationCode(Pts,L,R);
+##MinimumDistance(C);
+
+Print("\n DivisorOnAffineCurve \n");
+F:=GF(11);;
+R := PolynomialRing(F,2);;
+indets := IndeterminatesOfPolynomialRing(R);;
+x:=indets[1];; y:=indets[2];;
+crv:=AffineCurve(y^2-x^11+x,R);
+Pts:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+#q:=5;
+#F:=GF(q);
+#R:=PolynomialRing(F,2);;
+#vars:=IndeterminatesOfPolynomialRing(R);
+#x:=vars[1];
+#y:=vars[2];
+#crv:=AffineCurve(y^3-x^3-x-1,R);
+#Pts:=AffinePointsOnCurve(crv,R,F);;
+supp:=[Pts[1],Pts[2]];
+D:=DivisorOnAffineCurve([1,-1],supp,crv);
+
+Print("\n Divisors On Affine Curves, 2 \n");
+F:=GF(11);
+R1:=PolynomialRing(F,1);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+DivisorDegree(div1);
+div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+DivisorDegree(div2);
+div3:=DivisorAddition(div1,div2);
+DivisorDegree(div3);
+DivisorIsEffective(div1);
+DivisorIsEffective(div2);
+ndiv1:=DivisorNegate(div1);
+zdiv:=DivisorAddition(div1,ndiv1);
+DivisorIsZero(zdiv);
+div_gcd:=DivisorGCD(div1,div2);
+div_lcm:=DivisorLCM(div1,div2);
+DivisorDegree(div_gcd);
+DivisorDegree(div_lcm);
+DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+
+Print("\n DivisorOfRationalFunctionP1 \n");
+F:=GF(11);
+R1:=PolynomialRing(F,1);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+pt:=Z(11);
+f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+Df:=DivisorOfRationalFunctionP1(f,R2);
+Df.support;
+F:=GF(11);;
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+a:=vars[1];;
+b:=vars[2];;
+f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)^4*a^3+Z(11)*a^2+Z(11)^7*a+Z(11));;
+divf:=DivisorOfRationalFunctionP1(f,R);
+denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+
+Print("\n ActionMoebiusTransformationOnFunction\n");
+F:=GF(11);
+R1:=PolynomialRing(F,1);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+A:=Z(11)^0*[[1,2],[1,4]];
+ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+A:=Z(11)^0*[[1,2],[3,4]];
+ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+ActionMoebiusTransformationOnDivisorP1(A,D);
+f:=MoebiusTransformation(A,R1);
+ActionMoebiusTransformationOnFunction(A,f,R1);
+
+Print("\n GoppaCodeClassical\n");
+F:=GF(11);;
+R2:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R2);; 
+a:=vars[1];;b:=vars[2];;
+cdiv:=[ 1, 2, -1, -2 ];
+sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+crv:=rec(polynomial:=b,ring:=R2);
+div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+pts:=Difference(Elements(GF(11)),div.support);
+C:=GoppaCodeClassical(div,pts);
+MinimumDistance(C);
+
+Print("\n OnePointAGCode\n");
+F:=GF(11);
+R := PolynomialRing(F,2);
+indets := IndeterminatesOfPolynomialRing(R);
+x:=indets[1]; y:=indets[2];
+P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+Cd := DualCode(C);
+MinimumDistance(Cd);
+Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+C:=OnePointAGCode(y^2-x^11+x,Pts,10,R);
+Cd := DualCode(C);
+MinimumDistance(Cd);
+
+Print("\n Punctured Expurgated Augmented code\n");
+C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+C2 := BCHCode( 15, 7, GF(2) );
+C2 = C1;
+p := CodeIsomorphism( C1, C2 );
+C3 := PermutedCode( C1, p );
+C2 = C3;
+C1 := HammingCode( 4 );; WeightDistribution( C1 );
+L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+C2 := ExpurgatedCode( C1, L );
+WeightDistribution( C2 );
+C31 := ReedMullerCode( 1, 3 );
+C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+C32 = ReedMullerCode( 2, 3 );
+C1 := CordaroWagnerCode(6);
+Codeword( [0,0,1,1,1,1] ) in C1;
+C2 := AugmentedCode( C1 );
+Codeword( [1,1,0,0,0,0] ) in C2;
+
+Print("\n direct sum code\n");
+C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+D := DirectSumCode(C1, C2);;
+AsSSortedList(D);
+D = C1 + C2;   # addition = direct sum
+
+Print("\n lower bound min dist\n");
+C := BCHCode( 45, 7 );
+LowerBoundMinimumDistance( C );
+LowerBoundMinimumDistance( 45, 23, GF(2) );
+
+
+Print("\n MatrixRepresentationOnRiemannRochSpaceP1\n");
+F:=GF(11);
+R1:=PolynomialRing(F,1);;
+var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+b:=X(F,var1);
+var2:=Concatenation(var1,[b]);
+R2:=PolynomialRing(F,var2);
+crvP1:=AffineCurve(b,R2);
+D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+div:=D;
+agp:=DivisorAutomorphismGroupP1(D);; ## slow
+##IdGroup(agp);            ## requires small groups database
+g:=Random(agp);
+rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+Display(rho);
+Eigenvalues(F,rho);
+charpoly:=CharacteristicPolynomial(rho);
+Factors(charpoly);
+JordanDecomposition(rho);
+
+
+Print("\n UUVCode\n");
+C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+C2 := RepetitionCode(4, GF(2));
+R := UUVCode(C1, C2);
+R = ReedMullerCode(1,3);
+
+Print("\n LexiCode\n");
+C := LexiCode( 4, 3, GF(5) );
+IsLinearCode(C);
+B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+C := LexiCode( B, 2, GF(2) );
+IsLinearCode(C);
+
+Print("\n GeneratorMatCode\n");
+G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+C1 := GeneratorMatCode( G, GF(3) );
+C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+C3 := GeneratorMatCode(List(AsSSortedList(NordstromRobinsonCode()),x ->VectorCodeword(x)),GF(2));
+
+Print("\n CheckMatCode\n");
+H := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+C1 := CheckMatCode( H, GF(3) );
+CheckMat(C1);
+C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+
+Print("\n AlternantCode\n");
+Y := [ 1, 1, 1, 1, 1, 1, 1];; 
+a := PrimitiveUnityRoot( 2, 7 );;
+alpha := List( [0..6], i -> a^i );;
+C := AlternantCode( 2, Y, alpha, GF(8) );
+
+Print("\n RandomLinearCode\n");
+C := RandomLinearCode( 15, 4, GF(3) ); 
+Display(C); 
+C := RandomLinearCode( 35, 20, GF(3) ); 
+Display(C); 
+
+Print("\n EvaluationBivariateCode\n");
+q:=4;;
+F:=GF(q^2);;
+R:=PolynomialRing(F,2);;
+vars:=IndeterminatesOfPolynomialRing(R);;
+x:=vars[1];;
+y:=vars[2];;
+crv:=AffineCurve(y^q+y-x^(q+1),R);
+L:=[ x^0, x, x^2*y^-1 ];
+Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+C1:=EvaluationBivariateCode(Pts,L,crv); 
+P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+C2:=EvaluationBivariateCodeNC(P,L,crv); 
+C3:=EvaluationCode(P,L,R);
+MinimumDistance(C1);
+MinimumDistance(C2);
+MinimumDistance(C3);
+
+## gap> STOP_TEST( "filename", 10000 );
\ No newline at end of file
diff --git a/guava_gapdoc.gap b/guava_gapdoc.gap
new file mode 100644
index 0000000..2e98822
--- /dev/null
+++ b/guava_gapdoc.gap
@@ -0,0 +1,18 @@
+############################################################
+#
+# commands to create GUAVA documentation using GAPDoc 0.99
+#
+###########################################################
+
+
+path := Directory("/home/wdj/wdj/sagefiles/sage-3.0/local/lib/gap-4.4.10/pkg/guava3.5/doc"); ## edit this path if needed
+main:="guava.xml"; 
+files:=[];
+bookname:="guava";
+#str := ComposedXMLString(path, main, files);;
+#r := ParseTreeXMLString(str);; 
+######### with break here if there is an xml compiling error #########
+#CheckAndCleanGapDocTree(r);
+#l := GAPDoc2LaTeX(r);;
+#FileString(Filename(path, Concatenation(bookname, ".tex")), l);
+MakeGAPDocDoc( path, main, files, bookname);
diff --git a/guavapage/guava.jpg b/guavapage/guava.jpg
new file mode 100644
index 0000000..1dde7b6
Binary files /dev/null and b/guavapage/guava.jpg differ
diff --git a/guavapage/guava.ps b/guavapage/guava.ps
new file mode 100644
index 0000000..486d10b
--- /dev/null
+++ b/guavapage/guava.ps
@@ -0,0 +1,10502 @@
+%!PS-Adobe-3.0
+%%Creator: GIMP PostScript file plugin V 1.16 by Peter Kirchgessner
+%%Title: /home/wdj/gapfiles/codes/guava2/fonts/guava4.ps
+%%CreationDate: Mon Nov 15 20:57:18 2004
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 14 14 545 776
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+10 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+14.173228346456693 14.173228346456693 translate
+% Translate to begin of first scanline
+0 761.03999999999996 translate
+530.80941176470583 -761.03999999999996 scale
+% Image geometry
+581 833 8
+% Transformation matrix
+[ 581 0 0 833 0 0 ]
+% Strings to hold RGB-samples per scanline
+/rstr 581 string def
+/gstr 581 string def
+/bstr 581 string def
+{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
+true 3
+%%BeginData:       702956 ASCII Bytes
+colorimage
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+!<.QLJcC<$JcEF`J,~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcERdq>PsFJcCE'J,~>
+JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-<is8N#cs8W)r
+rrW2urVca,q>^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo
+rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi
+rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp
+s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~>
+JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-<is8N#cs8W)r
+rrW2urVca,q>^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo
+rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi
+rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp
+s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~>
+JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-<is8N#cs8W)r
+rrW2urVca,q>^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo
+rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi
+rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp
+s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~>
+JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$<kq>1*jrr2?c
+$NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo
+rr)fprZh%7qu-Ehq==:Xr;6HmqYp<irVucoq#'d^oDJXfqY^9irr2osq>Ld"rqcTkrqQNlr;6Ek
+rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr
+rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp at SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_
+nGW at cjSs`~>
+JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$<kq>1*jrr2?c
+$NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo
+rr)fprZh%7qu-Ehq==:Xr;6HmqYp<irVucoq#'d^oDJXfqY^9irr2osq>Ld"rqcTkrqQNlr;6Ek
+rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr
+rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp at SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_
+nGW at cjSs`~>
+JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$<kq>1*jrr2?c
+$NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo
+rr)fprZh%7qu-Ehq==:Xr;6HmqYp<irVucoq#'d^oDJXfqY^9irr2osq>Ld"rqcTkrqQNlr;6Ek
+rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr
+rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp at SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_
+nGW at cjSs`~>
+JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u<crr;rsrXSW#q=4IRr;QZlr;Q`qrpKdi
+rr)]gq>1*f<rDpqrr)iis7u*^rqHEbrql?Sq="4Wqu-Egqu6?`q>U?lnc&Ofli-YXrpTd^q>1'h
+rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:<is82ijs7uZ_rr*/rrVlWhqu-Nns7lR$rVHNfs8Mij
+q>1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e
+s8Doq49,<XqYomRrpBO\mJceXme?bSrqY[TqYT^VrqH-Xp at n7Vr;?3br;HQkrr)iqs8N#qr:'^a
+rr2`eq;hR+~>
+JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u<crr;rsrXSW#q=4IRr;QZlr;Q`qrpKdi
+rr)]gq>1*f<rDpqrr)iis7u*^rqHEbrql?Sq="4Wqu-Egqu6?`q>U?lnc&Ofli-YXrpTd^q>1'h
+rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:<is82ijs7uZ_rr*/rrVlWhqu-Nns7lR$rVHNfs8Mij
+q>1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e
+s8Doq49,<XqYomRrpBO\mJceXme?bSrqY[TqYT^VrqH-Xp at n7Vr;?3br;HQkrr)iqs8N#qr:'^a
+rr2`eq;hR+~>
+JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u<crr;rsrXSW#q=4IRr;QZlr;Q`qrpKdi
+rr)]gq>1*f<rDpqrr)iis7u*^rqHEbrql?Sq="4Wqu-Egqu6?`q>U?lnc&Ofli-YXrpTd^q>1'h
+rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:<is82ijs7uZ_rr*/rrVlWhqu-Nns7lR$rVHNfs8Mij
+q>1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e
+s8Doq49,<XqYomRrpBO\mJceXme?bSrqY[TqYT^VrqH-Xp at n7Vr;?3br;HQkrr)iqs8N#qr:'^a
+rr2`eq;hR+~>
+JcEmm&H;D&q#C3^rr)Ecro<MJq=<ME)?'L4q#0^^qY9pbrr;urr;Z`pqu$0cpAFmgs8N#frrE&t
+rsel$qY^0cqu-Nos8Moqrr*JkrposbqY:$hr;HKfqY^<irr*?"qu?ZmqX!_Cs7$![rquopq>:0k
+s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa
+q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4 at Y
+p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o"
+rq5jPn+cn]jSs`~>
+JcEmm&H;D&q#C3^rr)Ecro<MJq=<ME)?'L4q#0^^qY9pbrr;urr;Z`pqu$0cpAFmgs8N#frrE&t
+rsel$qY^0cqu-Nos8Moqrr*JkrposbqY:$hr;HKfqY^<irr*?"qu?ZmqX!_Cs7$![rquopq>:0k
+s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa
+q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4 at Y
+p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o"
+rq5jPn+cn]jSs`~>
+JcEmm&H;D&q#C3^rr)Ecro<MJq=<ME)?'L4q#0^^qY9pbrr;urr;Z`pqu$0cpAFmgs8N#frrE&t
+rsel$qY^0cqu-Nos8Moqrr*JkrposbqY:$hr;HKfqY^<irr*?"qu?ZmqX!_Cs7$![rquopq>:0k
+s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa
+q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4 at Y
+p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o"
+rq5jPn+cn]jSs`~>
+JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e
+!<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[
+qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^<c
+r;-<hrr2co$NBu#qYp<]rU9d`p\cZBs8MuoqY0pTrVHNgqt^9gr93_Hrq6*cqY9ROq"XLSp%SI\
+m/?bWqtU'grVccq.fK5<qYKg]p&+X_rUp$bl21GVn+lhHqtg-^pAad`rUg*^p%84\r:9RZrVd3'
+r;6?hj8A]GrVlZSs*t~>
+JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e
+!<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[
+qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^<c
+r;-<hrr2co$NBu#qYp<]rU9d`p\cZBs8MuoqY0pTrVHNgqt^9gr93_Hrq6*cqY9ROq"XLSp%SI\
+m/?bWqtU'grVccq.fK5<qYKg]p&+X_rUp$bl21GVn+lhHqtg-^pAad`rUg*^p%84\r:9RZrVd3'
+r;6?hj8A]GrVlZSs*t~>
+JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e
+!<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[
+qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^<c
+r;-<hrr2co$NBu#qYp<]rU9d`p\cZBs8MuoqY0pTrVHNgqt^9gr93_Hrq6*cqY9ROq"XLSp%SI\
+m/?bWqtU'grVccq.fK5<qYKg]p&+X_rUp$bl21GVn+lhHqtg-^pAad`rUg*^p%84\r:9RZrVd3'
+r;6?hj8A]GrVlZSs*t~>
+JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO<Pq=VB*#RLM>"oSE+!<<*+!5/-srqH]rs8W&s
+s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST
+rVZQiq>UEk-2d`Ap at SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^
+rr2utq>Ud#r;?9`rUT at RoD/F^r[RX5p%[nNp at 7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$<equ-Ej
+s8N&urr2pJrVZZlqXaLSqYC![nFHMOrU'FToDS(UoDAIcrr;uqrqZ?_r:9gdpAb-krr3<(rVZEh
+o(i1_qr@^,~>
+JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO<Pq=VB*#RLM>"oSE+!<<*+!5/-srqH]rs8W&s
+s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST
+rVZQiq>UEk-2d`Ap at SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^
+rr2utq>Ud#r;?9`rUT at RoD/F^r[RX5p%[nNp at 7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$<equ-Ej
+s8N&urr2pJrVZZlqXaLSqYC![nFHMOrU'FToDS(UoDAIcrr;uqrqZ?_r:9gdpAb-krr3<(rVZEh
+o(i1_qr@^,~>
+JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO<Pq=VB*#RLM>"oSE+!<<*+!5/-srqH]rs8W&s
+s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST
+rVZQiq>UEk-2d`Ap at SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^
+rr2utq>Ud#r;?9`rUT at RoD/F^r[RX5p%[nNp at 7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$<equ-Ej
+s8N&urr2pJrVZZlqXaLSqYC![nFHMOrU'FToDS(UoDAIcrr;uqrqZ?_r:9gdpAb-krr3<(rVZEh
+o(i1_qr@^,~>
+!<.QLdf9 at Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros at Sr;Zcp
+rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa
+TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX
+r;6<frr<#tq>Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O
+TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o
+Tqe at Vqt^3gr8dm.~>
+!<.QLdf9 at Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros at Sr;Zcp
+rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa
+TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX
+r;6<frr<#tq>Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O
+TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o
+Tqe at Vqt^3gr8dm.~>
+!<.QLdf9 at Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros at Sr;Zcp
+rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa
+TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX
+r;6<frr<#tq>Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O
+TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o
+Tqe at Vqt^3gr8dm.~>
+JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq
+s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!<WW/"9XGV
+qu?SN"9eu2!<W<)rW"DK!!!0'!XJc+Mu<;JMua"`#5e>prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff(
+!!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<<B*!WE(*!WW<(!!N?*!!A&Tr;MKP
+!"ArA!We5Vo_eU^p\jsj"UP3grqQ>H#QbD<!X8],!!E9%"on`*":,#.MuEMOqh51X!<WK."H<0Q
+r;HWkqu-Qs!W\/Sp[eF_M#deY!<3*!!!iT/N/RT.rVHNms8N#`s*t~>
+JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq
+s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!<WW/"9XGV
+qu?SN"9eu2!<W<)rW"DK!!!0'!XJc+Mu<;JMua"`#5e>prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff(
+!!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<<B*!WE(*!WW<(!!N?*!!A&Tr;MKP
+!"ArA!We5Vo_eU^p\jsj"UP3grqQ>H#QbD<!X8],!!E9%"on`*":,#.MuEMOqh51X!<WK."H<0Q
+r;HWkqu-Qs!W\/Sp[eF_M#deY!<3*!!!iT/N/RT.rVHNms8N#`s*t~>
+JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq
+s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!<WW/"9XGV
+qu?SN"9eu2!<W<)rW"DK!!!0'!XJc+Mu<;JMua"`#5e>prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff(
+!!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<<B*!WE(*!WW<(!!N?*!!A&Tr;MKP
+!"ArA!We5Vo_eU^p\jsj"UP3grqQ>H#QbD<!X8],!!E9%"on`*":,#.MuEMOqh51X!<WK."H<0Q
+r;HWkqu-Qs!W\/Sp[eF_M#deY!<3*!!!iT/N/RT.rVHNms8N#`s*t~>
+JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g
+s!.LAs8W)srr;lks7uV;!<iN.!rrE'"Te`*!!<3%rr)TgqZ?`s!Wi5srVccorrW#t7/[#]r<3<)
+#QY)1!sAf.!!*0%"98K/!<EB&s82it!W`H's8;inr;Zcu!!EB+!!*'"s8Vuu!WWB,!!!'$"p"c+
+!Y,,0#m(2/!;ulqrVlfis8W'=r;HTorrE*#!=/r4#lk/0"9nr7!"&]1!!!-!s8DosrrN-&$3:/,
+rVQQkqtp<lr;etZrr!$(#7:J3"U>&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$
+!!)lop\spi!s/2t#m(;7!<dTBqZ$Nnrr;osrp0T7~>
+JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g
+s!.LAs8W)srr;lks7uV;!<iN.!rrE'"Te`*!!<3%rr)TgqZ?`s!Wi5srVccorrW#t7/[#]r<3<)
+#QY)1!sAf.!!*0%"98K/!<EB&s82it!W`H's8;inr;Zcu!!EB+!!*'"s8Vuu!WWB,!!!'$"p"c+
+!Y,,0#m(2/!;ulqrVlfis8W'=r;HTorrE*#!=/r4#lk/0"9nr7!"&]1!!!-!s8DosrrN-&$3:/,
+rVQQkqtp<lr;etZrr!$(#7:J3"U>&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$
+!!)lop\spi!s/2t#m(;7!<dTBqZ$Nnrr;osrp0T7~>
+JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g
+s!.LAs8W)srr;lks7uV;!<iN.!rrE'"Te`*!!<3%rr)TgqZ?`s!Wi5srVccorrW#t7/[#]r<3<)
+#QY)1!sAf.!!*0%"98K/!<EB&s82it!W`H's8;inr;Zcu!!EB+!!*'"s8Vuu!WWB,!!!'$"p"c+
+!Y,,0#m(2/!;ulqrVlfis8W'=r;HTorrE*#!=/r4#lk/0"9nr7!"&]1!!!-!s8DosrrN-&$3:/,
+rVQQkqtp<lr;etZrr!$(#7:J3"U>&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$
+!!)lop\spi!s/2t#m(;7!<dTBqZ$Nnrr;osrp0T7~>
+!<.QLdf9 at E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!<EB#rVcNgrVcWiqu-Nn
+rVllsq>UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq
+!W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E
+!"9,5$3UJ8!<N0!rVlfis8Dp9rVuiu!!<T4"T\o:!tt\>!=&c1!!*'""8r2tquH`trr<?)rqucp
+r;HTqr;[u>r;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig
+mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~>
+!<.QLdf9 at E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!<EB#rVcNgrVcWiqu-Nn
+rVllsq>UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq
+!W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E
+!"9,5$3UJ8!<N0!rVlfis8Dp9rVuiu!!<T4"T\o:!tt\>!=&c1!!*'""8r2tquH`trr<?)rqucp
+r;HTqr;[u>r;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig
+mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~>
+!<.QLdf9 at E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!<EB#rVcNgrVcWiqu-Nn
+rVllsq>UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq
+!W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E
+!"9,5$3UJ8!<N0!rVlfis8Dp9rVuiu!!<T4"T\o:!tt\>!=&c1!!*'""8r2tquH`trr<?)rqucp
+r;HTqr;[u>r;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig
+mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~>
+JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^<jrqlirrr2iq
+!<2Zk!<)op)ts:+qa1>n%Kc\9!WiW-!<N6$!s$"4qt^3h"8r3"rql]qrqQO,!rW#mqZ-j&"p+o1
+!tG;7#QP83!XAr2"Tec&rr)cq#m:2,rVulrs8E&s!$)(?!<<)s!WW6,!"/c."9f,<"pFu2"9Sc1
+!<W9#rVlNjs8E`2r;6Kl!W`K.!!39.#6G/6!X/l3rWE0#!sAK$rVHR&!<<-"s8DutrVlfur;[T3
+r;6[&"UP;:"TSQ)!s/N;!WWE)#6"`1qYC0h!<<*$qu?`qrVlrts8W#t$j-G#q=jHf#QOr,!<N0"
+&-2n>!=B#79_n\aqu$EjrVl-_J,~>
+JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^<jrqlirrr2iq
+!<2Zk!<)op)ts:+qa1>n%Kc\9!WiW-!<N6$!s$"4qt^3h"8r3"rql]qrqQO,!rW#mqZ-j&"p+o1
+!tG;7#QP83!XAr2"Tec&rr)cq#m:2,rVulrs8E&s!$)(?!<<)s!WW6,!"/c."9f,<"pFu2"9Sc1
+!<W9#rVlNjs8E`2r;6Kl!W`K.!!39.#6G/6!X/l3rWE0#!sAK$rVHR&!<<-"s8DutrVlfur;[T3
+r;6[&"UP;:"TSQ)!s/N;!WWE)#6"`1qYC0h!<<*$qu?`qrVlrts8W#t$j-G#q=jHf#QOr,!<N0"
+&-2n>!=B#79_n\aqu$EjrVl-_J,~>
+JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^<jrqlirrr2iq
+!<2Zk!<)op)ts:+qa1>n%Kc\9!WiW-!<N6$!s$"4qt^3h"8r3"rql]qrqQO,!rW#mqZ-j&"p+o1
+!tG;7#QP83!XAr2"Tec&rr)cq#m:2,rVulrs8E&s!$)(?!<<)s!WW6,!"/c."9f,<"pFu2"9Sc1
+!<W9#rVlNjs8E`2r;6Kl!W`K.!!39.#6G/6!X/l3rWE0#!sAK$rVHR&!<<-"s8DutrVlfur;[T3
+r;6[&"UP;:"TSQ)!s/N;!WWE)#6"`1qYC0h!<<*$qu?`qrVlrts8W#t$j-G#q=jHf#QOr,!<N0"
+&-2n>!=B#79_n\aqu$EjrVl-_J,~>
+JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD.
+qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%!<UHn`m<&\
+e^W$sbgZt""p4u)s8E&u!!rc+s8N&urVuitqu at c=!!*'!quQj&!W^^!bL4h\eBlLj^!m)b!rrB#
+s8W)tpAb*j'`@t.!!!*%!7\g+cI14geAKY^d0'@J!sAK$rVcd,!<<*#!!*'!rVulqrVlrt!"&](
+qum''!<CZtrmVV1eB?=Wbgcgs%07"2rVQKn!!!*"!!rZ+rVuirs8Drrr;[-*rUBaNr;"^hd/2<#
+da6ME%LiF?rq6*`rqlfqrp0T7~>
+JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD.
+qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%!<UHn`m<&\
+e^W$sbgZt""p4u)s8E&u!!rc+s8N&urVuitqu at c=!!*'!quQj&!W^^!bL4h\eBlLj^!m)b!rrB#
+s8W)tpAb*j'`@t.!!!*%!7\g+cI14geAKY^d0'@J!sAK$rVcd,!<<*#!!*'!rVulqrVlrt!"&](
+qum''!<CZtrmVV1eB?=Wbgcgs%07"2rVQKn!!!*"!!rZ+rVuirs8Drrr;[-*rUBaNr;"^hd/2<#
+da6ME%LiF?rq6*`rqlfqrp0T7~>
+JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD.
+qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%!<UHn`m<&\
+e^W$sbgZt""p4u)s8E&u!!rc+s8N&urVuitqu at c=!!*'!quQj&!W^^!bL4h\eBlLj^!m)b!rrB#
+s8W)tpAb*j'`@t.!!!*%!7\g+cI14geAKY^d0'@J!sAK$rVcd,!<<*#!!*'!rVulqrVlrt!"&](
+qum''!<CZtrmVV1eB?=Wbgcgs%07"2rVQKn!!!*"!!rZ+rVuirs8Drrr;[-*rUBaNr;"^hd/2<#
+da6ME%LiF?rq6*`rqlfqrp0T7~>
+JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!<i5pqY^<jrr2rrs8)ip
+rpp'irqucm)u'4/'*&"F!9jFBr;QWjrq-6jq#:'frV$*a!WE'!!WN)us8N#n!$)+;rqQHm#R(A3
+rVlTkq"XRXp](6[#nd at A"8i,sr;[3-rVulss8Dus!WW9#!#>S8!<<)s!WW3%%dricq>(!err2ce
+r;Hp#!<W6"rq$0irr<!;rVl`s!<if1lhgVYq=O:UrV?Hi!!`K("8r2trVup!quHcs#6"T$rVc`t
+r;]RlrVQg#$jmX=p&FpbnFHSQrU]gd!W`W0rVHKk!WW3%!<<*$!WN,srr;urrW*$"!!3#rmJ[(X
+q=sseqYC$er:][[li at Cm";h(5qYpBnrVl-_J,~>
+JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!<i5pqY^<jrr2rrs8)ip
+rpp'irqucm)u'4/'*&"F!9jFBr;QWjrq-6jq#:'frV$*a!WE'!!WN)us8N#n!$)+;rqQHm#R(A3
+rVlTkq"XRXp](6[#nd at A"8i,sr;[3-rVulss8Dus!WW9#!#>S8!<<)s!WW3%%dricq>(!err2ce
+r;Hp#!<W6"rq$0irr<!;rVl`s!<if1lhgVYq=O:UrV?Hi!!`K("8r2trVup!quHcs#6"T$rVc`t
+r;]RlrVQg#$jmX=p&FpbnFHSQrU]gd!W`W0rVHKk!WW3%!<<*$!WN,srr;urrW*$"!!3#rmJ[(X
+q=sseqYC$er:][[li at Cm";h(5qYpBnrVl-_J,~>
+JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!<i5pqY^<jrr2rrs8)ip
+rpp'irqucm)u'4/'*&"F!9jFBr;QWjrq-6jq#:'frV$*a!WE'!!WN)us8N#n!$)+;rqQHm#R(A3
+rVlTkq"XRXp](6[#nd at A"8i,sr;[3-rVulss8Dus!WW9#!#>S8!<<)s!WW3%%dricq>(!err2ce
+r;Hp#!<W6"rq$0irr<!;rVl`s!<if1lhgVYq=O:UrV?Hi!!`K("8r2trVup!quHcs#6"T$rVc`t
+r;]RlrVQg#$jmX=p&FpbnFHSQrU]gd!W`W0rVHKk!WW3%!<<*$!WN,srr;urrW*$"!!3#rmJ[(X
+q=sseqYC$er:][[li at Cm";h(5qYpBnrVl-_J,~>
+JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!<EB$rr;urrVcrur;HWo
+rr2utq>^Ko+ohQ>qtp<km/?tk#64f(o)J^aqu?ZpqtL'frp0=QqtgHo!!33#rr)lsrqHI.rqcWg
+#QXu,!<2ocpAbBt$igV%qum!!!sJQ%qu$L&"9/?!s8MusrW3'#rW!0(!!*'!quR*%!!VfilM1Dq
+rW!!&lMgbfrrN9#s8Dfo!<2lqrr2rr)ZTd>!sf)Es69dg&d/I?q<S%Z!!*'""8r2tqZ%!)!!*'!
+rVulqrVlrt!$M=?qum'&"T\)g!!i]5!s&/Qrp^<q"9Si&rr2is!!!)u!<<'&r;Q`rrr2ir#m(##
+r:]USrpfp`rXA]"mJ[^u"p+f%qYU3ir;ci_s*t~>
+JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!<EB$rr;urrVcrur;HWo
+rr2utq>^Ko+ohQ>qtp<km/?tk#64f(o)J^aqu?ZpqtL'frp0=QqtgHo!!33#rr)lsrqHI.rqcWg
+#QXu,!<2ocpAbBt$igV%qum!!!sJQ%qu$L&"9/?!s8MusrW3'#rW!0(!!*'!quR*%!!VfilM1Dq
+rW!!&lMgbfrrN9#s8Dfo!<2lqrr2rr)ZTd>!sf)Es69dg&d/I?q<S%Z!!*'""8r2tqZ%!)!!*'!
+rVulqrVlrt!$M=?qum'&"T\)g!!i]5!s&/Qrp^<q"9Si&rr2is!!!)u!<<'&r;Q`rrr2ir#m(##
+r:]USrpfp`rXA]"mJ[^u"p+f%qYU3ir;ci_s*t~>
+JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!<EB$rr;urrVcrur;HWo
+rr2utq>^Ko+ohQ>qtp<km/?tk#64f(o)J^aqu?ZpqtL'frp0=QqtgHo!!33#rr)lsrqHI.rqcWg
+#QXu,!<2ocpAbBt$igV%qum!!!sJQ%qu$L&"9/?!s8MusrW3'#rW!0(!!*'!quR*%!!VfilM1Dq
+rW!!&lMgbfrrN9#s8Dfo!<2lqrr2rr)ZTd>!sf)Es69dg&d/I?q<S%Z!!*'""8r2tqZ%!)!!*'!
+rVulqrVlrt!$M=?qum'&"T\)g!!i]5!s&/Qrp^<q"9Si&rr2is!!!)u!<<'&r;Q`rrr2ir#m(##
+r:]USrpfp`rXA]"mJ[^u"p+f%qYU3ir;ci_s*t~>
+JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr
+rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+=
+rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7#
+!<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P
+!WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o at Ts#65)2rVZ]o!<<*$qu?fts8Drs
+s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~>
+JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr
+rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+=
+rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7#
+!<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P
+!WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o at Ts#65)2rVZ]o!<<*$qu?fts8Drs
+s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~>
+JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr
+rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+=
+rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7#
+!<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P
+!WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o at Ts#65)2rVZ]o!<<*$qu?fts8Drs
+s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~>
+JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o(
+rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?"
+!!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"!<Mfj!!*')!W`B(!W<$#"U"u-rr;usp](9m8cSeg
+s8E*$"UkG0!<WE*!s/T,"o7`j#QXo,qYp?l!!<T1!<N<&rVuipr;HWp!!!$"!<<)s!XfD;!;ca$
+!<N<+!WW5pqZ$Wq":4u+s8E'#!!33"!!<0"rVlg=rqufs!<E9"rUKj`p\k!hs82for;$?grVZd$
+"9AMurr<#tl2Q8~>
+JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o(
+rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?"
+!!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"!<Mfj!!*')!W`B(!W<$#"U"u-rr;usp](9m8cSeg
+s8E*$"UkG0!<WE*!s/T,"o7`j#QXo,qYp?l!!<T1!<N<&rVuipr;HWp!!!$"!<<)s!XfD;!;ca$
+!<N<+!WW5pqZ$Wq":4u+s8E'#!!33"!!<0"rVlg=rqufs!<E9"rUKj`p\k!hs82for;$?grVZd$
+"9AMurr<#tl2Q8~>
+JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o(
+rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?"
+!!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"!<Mfj!!*')!W`B(!W<$#"U"u-rr;usp](9m8cSeg
+s8E*$"UkG0!<WE*!s/T,"o7`j#QXo,qYp?l!!<T1!<N<&rVuipr;HWp!!!$"!<<)s!XfD;!;ca$
+!<N<+!WW5pqZ$Wq":4u+s8E'#!!33"!!<0"rVlg=rqufs!<E9"rUKj`p\k!hs82for;$?grVZd$
+"9AMurr<#tl2Q8~>
+JcFC&%f?+oq>L$`o<SE#'EJOFp](?r!!3)uh>[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l
+rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp
+!#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr
+!WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5
+#64i/"o/&u!sSl2r;Zcq!W`9&!W<!"rr;rrrrN,tr;[Z8qu$-`nFu_Pqu6<grV?Bhp\Odg!s&B'
+rVuosl2Q8~>
+JcFC&%f?+oq>L$`o<SE#'EJOFp](?r!!3)uh>[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l
+rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp
+!#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr
+!WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5
+#64i/"o/&u!sSl2r;Zcq!W`9&!W<!"rr;rrrrN,tr;[Z8qu$-`nFu_Pqu6<grV?Bhp\Odg!s&B'
+rVuosl2Q8~>
+JcFC&%f?+oq>L$`o<SE#'EJOFp](?r!!3)uh>[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l
+rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp
+!#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr
+!WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5
+#64i/"o/&u!sSl2r;Zcq!W`9&!W<!"rr;rrrrN,tr;[Z8qu$-`nFu_Pqu6<grV?Bhp\Odg!s&B'
+rVuosl2Q8~>
+!<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB(
+"RtmZs7c<drgNQ\o_e0FqYKjY$NU83!WMur!<2`o9`=tjqZ?p(!sJ2h!<iQ.!<r]4"mQI$!WiB$
+r;Q`t!!!,uqtg9jq"X:`#m(G7#6tA4s8W$#!WrE)rV$<p#R(G=!!rc'!W`?'!r`,urr2Zls8H$u
+rr)lq!<<3+!r;s&!Xo&6$31;%pAtR"!!E,tr;cs*"98i:$j?4uq>U?gq#(9p!<<-"s82p$!Y,J)
+#mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W<!"rr;rrs8W)s!#Yh7qY9`Pmf)kPrKd?Vq"+:Wn+6Sa
+"98K$rr<#tl2Q8~>
+!<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB(
+"RtmZs7c<drgNQ\o_e0FqYKjY$NU83!WMur!<2`o9`=tjqZ?p(!sJ2h!<iQ.!<r]4"mQI$!WiB$
+r;Q`t!!!,uqtg9jq"X:`#m(G7#6tA4s8W$#!WrE)rV$<p#R(G=!!rc'!W`?'!r`,urr2Zls8H$u
+rr)lq!<<3+!r;s&!Xo&6$31;%pAtR"!!E,tr;cs*"98i:$j?4uq>U?gq#(9p!<<-"s82p$!Y,J)
+#mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W<!"rr;rrs8W)s!#Yh7qY9`Pmf)kPrKd?Vq"+:Wn+6Sa
+"98K$rr<#tl2Q8~>
+!<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB(
+"RtmZs7c<drgNQ\o_e0FqYKjY$NU83!WMur!<2`o9`=tjqZ?p(!sJ2h!<iQ.!<r]4"mQI$!WiB$
+r;Q`t!!!,uqtg9jq"X:`#m(G7#6tA4s8W$#!WrE)rV$<p#R(G=!!rc'!W`?'!r`,urr2Zls8H$u
+rr)lq!<<3+!r;s&!Xo&6$31;%pAtR"!!E,tr;cs*"98i:$j?4uq>U?gq#(9p!<<-"s82p$!Y,J)
+#mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W<!"rr;rrs8W)s!#Yh7qY9`Pmf)kPrKd?Vq"+:Wn+6Sa
+"98K$rr<#tl2Q8~>
+JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s at oe
+q>:$aq1'''K7&6$!eL.Cq>^Nt!<E,rrrE&n!Di[ns7ucu"9o.srWWE,#m1G;!<W$"!<N?'rqucr
+!<<*%qtg*crquQeI/sEV!XK&7!<2uq!WrN)"nqrr#6G2<"onc+rrW9&!!<-!rr;usp](9m<WE's
+s8;ru!sK)0!s\r1!tPJB"8Mir"T\T*qu6Kn!=BAA$O$QZqYU*erVH<e!rr?%!<<)s!X/Z/"8W$)
+!=K#@"9],/ncT(!!<N&qrVcj!!!33"!!<0"rVZ]o!>tt:qt>ULJ:N?'Ih.)#rUfg[p at eOj"9AN#
+rr<#tl2Q8~>
+JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s at oe
+q>:$aq1'''K7&6$!eL.Cq>^Nt!<E,rrrE&n!Di[ns7ucu"9o.srWWE,#m1G;!<W$"!<N?'rqucr
+!<<*%qtg*crquQeI/sEV!XK&7!<2uq!WrN)"nqrr#6G2<"onc+rrW9&!!<-!rr;usp](9m<WE's
+s8;ru!sK)0!s\r1!tPJB"8Mir"T\T*qu6Kn!=BAA$O$QZqYU*erVH<e!rr?%!<<)s!X/Z/"8W$)
+!=K#@"9],/ncT(!!<N&qrVcj!!!33"!!<0"rVZ]o!>tt:qt>ULJ:N?'Ih.)#rUfg[p at eOj"9AN#
+rr<#tl2Q8~>
+JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s at oe
+q>:$aq1'''K7&6$!eL.Cq>^Nt!<E,rrrE&n!Di[ns7ucu"9o.srWWE,#m1G;!<W$"!<N?'rqucr
+!<<*%qtg*crquQeI/sEV!XK&7!<2uq!WrN)"nqrr#6G2<"onc+rrW9&!!<-!rr;usp](9m<WE's
+s8;ru!sK)0!s\r1!tPJB"8Mir"T\T*qu6Kn!=BAA$O$QZqYU*erVH<e!rr?%!<<)s!X/Z/"8W$)
+!=K#@"9],/ncT(!!<N&qrVcj!!!33"!!<0"rVZ]o!>tt:qt>ULJ:N?'Ih.)#rUfg[p at eOj"9AN#
+rr<#tl2Q8~>
+JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%<!s\u2
+qY0d_r:9Ob#m(/6!X&].C]+&0#QOl-rql]qrqHNor>P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s
+rqugL!rMihr;?<fp%=U^!!!90"9JN$quQj"!"&>u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t
+rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef*
+"UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$
+!WrB#s8W)_s*t~>
+JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%<!s\u2
+qY0d_r:9Ob#m(/6!X&].C]+&0#QOl-rql]qrqHNor>P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s
+rqugL!rMihr;?<fp%=U^!!!90"9JN$quQj"!"&>u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t
+rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef*
+"UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$
+!WrB#s8W)_s*t~>
+JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%<!s\u2
+qY0d_r:9Ob#m(/6!X&].C]+&0#QOl-rql]qrqHNor>P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s
+rqugL!rMihr;?<fp%=U^!!!90"9JN$quQj"!"&>u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t
+rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef*
+"UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$
+!WrB#s8W)_s*t~>
+!<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu
+"U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!!<B'qu6Zqp]:En)ZTX8!<W]4r;*Ju!XT#C!s#M#$OHk9
+!<)for;[6-qu$<gqXaR[q"+gnrWaJJ!rr<!!s8N,!r;\p#6Fo.!!<5*q@*`8!X&E$rVulrp](9m
+<WE'ss8E'"":#,.Xp"t3!!3B,XS;Yo!<<*%r;Zd#"ptYD!XS\qp\sp^rVcTj!<<-#!<<)s!Wri4
+"TPV)"ptb?"q7I0q#pm*!s8E#s8E'#!!33"!!<0"rVlftrr)cq)$0X4!tY_@!s8Z1!t+hpqYL*]
+p&G:%"9SQ$s8W)_s*t~>
+!<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu
+"U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!!<B'qu6Zqp]:En)ZTX8!<W]4r;*Ju!XT#C!s#M#$OHk9
+!<)for;[6-qu$<gqXaR[q"+gnrWaJJ!rr<!!s8N,!r;\p#6Fo.!!<5*q@*`8!X&E$rVulrp](9m
+<WE'ss8E'"":#,.Xp"t3!!3B,XS;Yo!<<*%r;Zd#"ptYD!XS\qp\sp^rVcTj!<<-#!<<)s!Wri4
+"TPV)"ptb?"q7I0q#pm*!s8E#s8E'#!!33"!!<0"rVlftrr)cq)$0X4!tY_@!s8Z1!t+hpqYL*]
+p&G:%"9SQ$s8W)_s*t~>
+!<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu
+"U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!!<B'qu6Zqp]:En)ZTX8!<W]4r;*Ju!XT#C!s#M#$OHk9
+!<)for;[6-qu$<gqXaR[q"+gnrWaJJ!rr<!!s8N,!r;\p#6Fo.!!<5*q@*`8!X&E$rVulrp](9m
+<WE'ss8E'"":#,.Xp"t3!!3B,XS;Yo!<<*%r;Zd#"ptYD!XS\qp\sp^rVcTj!<<-#!<<)s!Wri4
+"TPV)"ptb?"q7I0q#pm*!s8E#s8E'#!!33"!!<0"rVlftrr)cq)$0X4!tY_@!s8Z1!t+hpqYL*]
+p&G:%"9SQ$s8W)_s*t~>
+JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$:
+rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!<E9.!WM`j^Ve+4]>_\fp^mT0!W`5t
+rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+ at P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN.
+rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,*
+s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W<!"rr;rrru_7=!!!$#!rW$""T\f-$3L81_"dj(rq-*c
+!X&N(!WN)us8M9_J,~>
+JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$:
+rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!<E9.!WM`j^Ve+4]>_\fp^mT0!W`5t
+rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+ at P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN.
+rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,*
+s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W<!"rr;rrru_7=!!!$#!rW$""T\f-$3L81_"dj(rq-*c
+!X&N(!WN)us8M9_J,~>
+JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$:
+rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!<E9.!WM`j^Ve+4]>_\fp^mT0!W`5t
+rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+ at P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN.
+rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,*
+s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W<!"rr;rrru_7=!!!$#!rW$""T\f-$3L81_"dj(rq-*c
+!X&N(!WN)us8M9_J,~>
+JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1ZrZ_C at s8N'#!!3-ErqH6\rr)WKg&M<W%KQY<rqQQp!<<,urqud'rW*!(!WWT.!s8B!rr)m!
+"99SDrVld:qYU'aqZI$(!sS]'r;Zfu!!)ikrqIQX,U<<gqVM2O)Zg- at rqufu"p"fIs8Drrp\=a_
+q#:0m!!*'$rVlirrqHHkrY5>1r<!*)!!<)rqYU0crp]jbr>uCG!$)1=s8E*(!!EJYpA+P/,UX`5
+rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU<krr)lu!!!&u
+p_*i3rW<]3hVS,)rqQ!]rZD4C!WWE!rr<#tl2Q8~>
+JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1ZrZ_C at s8N'#!!3-ErqH6\rr)WKg&M<W%KQY<rqQQp!<<,urqud'rW*!(!WWT.!s8B!rr)m!
+"99SDrVld:qYU'aqZI$(!sS]'r;Zfu!!)ikrqIQX,U<<gqVM2O)Zg- at rqufu"p"fIs8Drrp\=a_
+q#:0m!!*'$rVlirrqHHkrY5>1r<!*)!!<)rqYU0crp]jbr>uCG!$)1=s8E*(!!EJYpA+P/,UX`5
+rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU<krr)lu!!!&u
+p_*i3rW<]3hVS,)rqQ!]rZD4C!WWE!rr<#tl2Q8~>
+JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1ZrZ_C at s8N'#!!3-ErqH6\rr)WKg&M<W%KQY<rqQQp!<<,urqud'rW*!(!WWT.!s8B!rr)m!
+"99SDrVld:qYU'aqZI$(!sS]'r;Zfu!!)ikrqIQX,U<<gqVM2O)Zg- at rqufu"p"fIs8Drrp\=a_
+q#:0m!!*'$rVlirrqHHkrY5>1r<!*)!!<)rqYU0crp]jbr>uCG!$)1=s8E*(!!EJYpA+P/,UX`5
+rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU<krr)lu!!!&u
+p_*i3rW<]3hVS,)rqQ!]rZD4C!WWE!rr<#tl2Q8~>
+JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S=
+!XSf&n,<1]qY9sc!<N?)"o\K"rW!Q7"9/;m)#smF!!rAtqud'%!sJW&r;[H4'+"X<o)AOXqu6Wj
+!<<-#!r`,urr2Zlrr-4'rVl`t!X&Q+rr2lqrql]jr;Hs1"9\])"8r2u"9o;8%K-5(&c`1;!#k_5
+rWE3%!!*'!quQj!!!3#qqtpBkpAXjd$31),!<<3!s8Mp#!!!'-!!!*'p]'UZr;Q]q!WN-;!WDut
+!<<\ip at e%>rr23^qYL*r!"f;5')qn1s8M9_J,~>
+JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S=
+!XSf&n,<1]qY9sc!<N?)"o\K"rW!Q7"9/;m)#smF!!rAtqud'%!sJW&r;[H4'+"X<o)AOXqu6Wj
+!<<-#!r`,urr2Zlrr-4'rVl`t!X&Q+rr2lqrql]jr;Hs1"9\])"8r2u"9o;8%K-5(&c`1;!#k_5
+rWE3%!!*'!quQj!!!3#qqtpBkpAXjd$31),!<<3!s8Mp#!!!'-!!!*'p]'UZr;Q]q!WN-;!WDut
+!<<\ip at e%>rr23^qYL*r!"f;5')qn1s8M9_J,~>
+JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S=
+!XSf&n,<1]qY9sc!<N?)"o\K"rW!Q7"9/;m)#smF!!rAtqud'%!sJW&r;[H4'+"X<o)AOXqu6Wj
+!<<-#!r`,urr2Zlrr-4'rVl`t!X&Q+rr2lqrql]jr;Hs1"9\])"8r2u"9o;8%K-5(&c`1;!#k_5
+rWE3%!!*'!quQj!!!3#qqtpBkpAXjd$31),!<<3!s8Mp#!!!'-!!!*'p]'UZr;Q]q!WN-;!WDut
+!<<\ip at e%>rr23^qYL*r!"f;5')qn1s8M9_J,~>
+JcG$8)#j=1qt9sfp\=@Uqu6<X!!`Q2!t#S>!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr
+(]X[@#R18=lhp>MrpB^`qY^<m!!39%qum!!'`n=6s8Mokq"Oji%gN4?!"/o+s8N&r!"/l7!ri&q
+qt^$^rr2ir1B[OSr;Zg'!!N;pq>h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$
+rVlirrqHHmrr<!Urr;ou!!30%rr2iprVH?er<!<5!!E9%"8r2u"9ni@!<2lr$igD9('3t)p&Y3p
+!!*'!quZfss8F_LqY0X]o)/On'*/(6!!<)urr)m%"TSN*&-)b+mJcq\qu6Qq!<<*#rVccu!!*#p
+rr*AkmJcJCmfWb"!>>V;r;Q`rrosH5~>
+JcG$8)#j=1qt9sfp\=@Uqu6<X!!`Q2!t#S>!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr
+(]X[@#R18=lhp>MrpB^`qY^<m!!39%qum!!'`n=6s8Mokq"Oji%gN4?!"/o+s8N&r!"/l7!ri&q
+qt^$^rr2ir1B[OSr;Zg'!!N;pq>h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$
+rVlirrqHHmrr<!Urr;ou!!30%rr2iprVH?er<!<5!!E9%"8r2u"9ni@!<2lr$igD9('3t)p&Y3p
+!!*'!quZfss8F_LqY0X]o)/On'*/(6!!<)urr)m%"TSN*&-)b+mJcq\qu6Qq!<<*#rVccu!!*#p
+rr*AkmJcJCmfWb"!>>V;r;Q`rrosH5~>
+JcG$8)#j=1qt9sfp\=@Uqu6<X!!`Q2!t#S>!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr
+(]X[@#R18=lhp>MrpB^`qY^<m!!39%qum!!'`n=6s8Mokq"Oji%gN4?!"/o+s8N&r!"/l7!ri&q
+qt^$^rr2ir1B[OSr;Zg'!!N;pq>h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$
+rVlirrqHHmrr<!Urr;ou!!30%rr2iprVH?er<!<5!!E9%"8r2u"9ni@!<2lr$igD9('3t)p&Y3p
+!!*'!quZfss8F_LqY0X]o)/On'*/(6!!<)urr)m%"TSN*&-)b+mJcq\qu6Qq!<<*#rVccu!!*#p
+rr*AkmJcJCmfWb"!>>V;r;Q`rrosH5~>
+JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot
+rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE(
+"3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"!<iN*!n[;Cq#:0as8)fs
+!<<3"rr;usp](9mrVmN/!WW6$!WN)rrr)ZgpX]QP!X8Q'6j*AerWEE4$Np7q!<E?1!<a2<r;?Zs
+!<<-"s82p!!!!'!rqZ6`rqQH9!!!$#!!*'$r;Zck":+u1"U5#.%fH1sr;-ElrrN-")$0^2!WWB+
+nalSNp%A:[qq(rM!tPnD"VCV2s8W)_s*t~>
+JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot
+rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE(
+"3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"!<iN*!n[;Cq#:0as8)fs
+!<<3"rr;usp](9mrVmN/!WW6$!WN)rrr)ZgpX]QP!X8Q'6j*AerWEE4$Np7q!<E?1!<a2<r;?Zs
+!<<-"s82p!!!!'!rqZ6`rqQH9!!!$#!!*'$r;Zck":+u1"U5#.%fH1sr;-ElrrN-")$0^2!WWB+
+nalSNp%A:[qq(rM!tPnD"VCV2s8W)_s*t~>
+JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot
+rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE(
+"3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"!<iN*!n[;Cq#:0as8)fs
+!<<3"rr;usp](9mrVmN/!WW6$!WN)rrr)ZgpX]QP!X8Q'6j*AerWEE4$Np7q!<E?1!<a2<r;?Zs
+!<<-"s82p!!!!'!rqZ6`rqQH9!!!$#!!*'$r;Zck":+u1"U5#.%fH1sr;-ElrrN-")$0^2!WWB+
+nalSNp%A:[qq(rM!tPnD"VCV2s8W)_s*t~>
+JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1!<W`6!Wii3"RlBm!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rZ2%<r;H[!!=&l8"9AQ!qY0UZqYL3g"on])rr3*$rW*`3s8W)qqY^=U!sf)3!XAc/qu?Zqr;[6.
+!XJc0^\Rg(q"Oadr;\VTqu?Qo!!*-'r:U$j!s8T0!<`/r"9JT,"TSK#!<EE0!!!65"2=U#qu6Hl
+r;cm!!!<,us8N#ls8W)ss(qW8!!**%s8W)urqlH("qUhE"p"]("8r2u"9no1&c;G/!sJ`7!sJSu
+p]^^!!!*'!quQm!!!3)uq=ag^q6gD/!XJf,!<<3!s8Ma!!!<K,":P;urquZkqYU9k!<E0#!WDru
+!!*,pqtBjbq[3&h"Tnl5"9]#=!<)rtrosH5~>
+JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1!<W`6!Wii3"RlBm!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rZ2%<r;H[!!=&l8"9AQ!qY0UZqYL3g"on])rr3*$rW*`3s8W)qqY^=U!sf)3!XAc/qu?Zqr;[6.
+!XJc0^\Rg(q"Oadr;\VTqu?Qo!!*-'r:U$j!s8T0!<`/r"9JT,"TSK#!<EE0!!!65"2=U#qu6Hl
+r;cm!!!<,us8N#ls8W)ss(qW8!!**%s8W)urqlH("qUhE"p"]("8r2u"9no1&c;G/!sJ`7!sJSu
+p]^^!!!*'!quQm!!!3)uq=ag^q6gD/!XJf,!<<3!s8Ma!!!<K,":P;urquZkqYU9k!<E0#!WDru
+!!*,pqtBjbq[3&h"Tnl5"9]#=!<)rtrosH5~>
+JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1!<W`6!Wii3"RlBm!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z
+rZ2%<r;H[!!=&l8"9AQ!qY0UZqYL3g"on])rr3*$rW*`3s8W)qqY^=U!sf)3!XAc/qu?Zqr;[6.
+!XJc0^\Rg(q"Oadr;\VTqu?Qo!!*-'r:U$j!s8T0!<`/r"9JT,"TSK#!<EE0!!!65"2=U#qu6Hl
+r;cm!!!<,us8N#ls8W)ss(qW8!!**%s8W)urqlH("qUhE"p"]("8r2u"9no1&c;G/!sJ`7!sJSu
+p]^^!!!*'!quQm!!!3)uq=ag^q6gD/!XJf,!<<3!s8Ma!!!<K,":P;urquZkqYU9k!<E0#!WDru
+!!*,pqtBjbq[3&h"Tnl5"9]#=!<)rtrosH5~>
+JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<!Srr3$)!XB#6!WiS'n+?DNrVu]c"onf,rr*!"!W`<#s8W)op\Fa[?3L<6!!!3*qu?Zq
+rW)s!rr<?1%g2V(qYBscrqug7!rN#q!!!-(!;uHb#RCb;#6=l)qZ$^""9e`'rW*Z4!<j/<$O,ts
+p\t-jqZ-Zt!!<,us8N#ls8N#sru1k<!!*'#s8W&trVH$c%gE=?!!E9%"8r2u"TAT?!<;cn#6b2<
+$O?P+o*#*p!!*'!quZit6NR/bqtg3[rW<?/!WW6$!<<3!s8Mrs!=Sr4!!QQmrU]UXs8)`o!<E0#
+!WDir!<<9%mJQqSqsjW^!"/r<$jZnD"o\K$rosH5~>
+JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<!Srr3$)!XB#6!WiS'n+?DNrVu]c"onf,rr*!"!W`<#s8W)op\Fa[?3L<6!!!3*qu?Zq
+rW)s!rr<?1%g2V(qYBscrqug7!rN#q!!!-(!;uHb#RCb;#6=l)qZ$^""9e`'rW*Z4!<j/<$O,ts
+p\t-jqZ-Zt!!<,us8N#ls8N#sru1k<!!*'#s8W&trVH$c%gE=?!!E9%"8r2u"TAT?!<;cn#6b2<
+$O?P+o*#*p!!*'!quZit6NR/bqtg3[rW<?/!WW6$!<<3!s8Mrs!=Sr4!!QQmrU]UXs8)`o!<E0#
+!WDir!<<9%mJQqSqsjW^!"/r<$jZnD"o\K$rosH5~>
+JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<!Srr3$)!XB#6!WiS'n+?DNrVu]c"onf,rr*!"!W`<#s8W)op\Fa[?3L<6!!!3*qu?Zq
+rW)s!rr<?1%g2V(qYBscrqug7!rN#q!!!-(!;uHb#RCb;#6=l)qZ$^""9e`'rW*Z4!<j/<$O,ts
+p\t-jqZ-Zt!!<,us8N#ls8N#sru1k<!!*'#s8W&trVH$c%gE=?!!E9%"8r2u"TAT?!<;cn#6b2<
+$O?P+o*#*p!!*'!quZit6NR/bqtg3[rW<?/!WW6$!<<3!s8Mrs!=Sr4!!QQmrU]UXs8)`o!<E0#
+!WDir!<<9%mJQqSqsjW^!"/r<$jZnD"o\K$rosH5~>
+!<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!<iT-!Wh`i!W`9%rr1aR$ig>/s8;oo"98Q(
+rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t
+s8E!-!<N6'$O6b1q>1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!<W?,!X&f0
+rV?0err!!$!!*'$rVlirrqHHlrr2p1rW<-$!!*'!rVufkrrWK6"TS])!$)1>s8E-*!>,>0quHd*
+"p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p!
+!!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~>
+!<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!<iT-!Wh`i!W`9%rr1aR$ig>/s8;oo"98Q(
+rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t
+s8E!-!<N6'$O6b1q>1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!<W?,!X&f0
+rV?0err!!$!!*'$rVlirrqHHlrr2p1rW<-$!!*'!rVufkrrWK6"TS])!$)1>s8E-*!>,>0quHd*
+"p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p!
+!!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~>
+!<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!<iT-!Wh`i!W`9%rr1aR$ig>/s8;oo"98Q(
+rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t
+s8E!-!<N6'$O6b1q>1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!<W?,!X&f0
+rV?0err!!$!!*'$rVlirrqHHlrr2p1rW<-$!!*'!rVufkrrWK6"TS])!$)1>s8E-*!>,>0quHd*
+"p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p!
+!!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~>
+!<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?!
+jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus
+!%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!<rQ(
+qtg?js82is!<<6#rr;usp](6lrr4hR!rr?%!<;rqqYC$d!=&T*!!iQ)"9\SurW*B,%flP(L&qGY
+"9OJUo)A[i!<N9$q>:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!!
+')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~>
+!<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?!
+jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus
+!%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!<rQ(
+qtg?js82is!<<6#rr;usp](6lrr4hR!rr?%!<;rqqYC$d!=&T*!!iQ)"9\SurW*B,%flP(L&qGY
+"9OJUo)A[i!<N9$q>:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!!
+')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~>
+!<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?!
+jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus
+!%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!<rQ(
+qtg?js82is!<<6#rr;usp](6lrr4hR!rr?%!<;rqqYC$d!=&T*!!iQ)"9\SurW*B,%flP(L&qGY
+"9OJUo)A[i!<N9$q>:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!!
+')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~>
+dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt
+J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!<EB*"8r2trr<'"!WWB(
+!!NL7?"I8I at pTNH"p>)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF at U<AK
+!!!$"!rW)ss8N#ls8W)ss"aNT!!3?,?X-oI>@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ
+A,lT7!<r,mrr)p7#R=aD?sdPOA,uf7"98H&!<<3!s8Mrur;cfn-2I-0q=jdbrrW9)!W`6"!!N?&
+s8Dfkq>($Z!s\l5!rr?%!<W9"s8W)_s*t~>
+dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt
+J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!<EB*"8r2trr<'"!WWB(
+!!NL7?"I8I at pTNH"p>)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF at U<AK
+!!!$"!rW)ss8N#ls8W)ss"aNT!!3?,?X-oI>@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ
+A,lT7!<r,mrr)p7#R=aD?sdPOA,uf7"98H&!<<3!s8Mrur;cfn-2I-0q=jdbrrW9)!W`6"!!N?&
+s8Dfkq>($Z!s\l5!rr?%!<W9"s8W)_s*t~>
+dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt
+J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!<EB*"8r2trr<'"!WWB(
+!!NL7?"I8I at pTNH"p>)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF at U<AK
+!!!$"!rW)ss8N#ls8W)ss"aNT!!3?,?X-oI>@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ
+A,lT7!<r,mrr)p7#R=aD?sdPOA,uf7"98H&!<<3!s8Mrur;cfn-2I-0q=jdbrrW9)!W`6"!!N?&
+s8Dfkq>($Z!s\l5!rr?%!<W9"s8W)_s*t~>
+JcG9?s8*Q)rUfm`p%/.^:e1U#!<E6("9\f.!U'Lb!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr)k-
+!!E9)!X/Q."TeT"rr)ckrqulu!W`9"!WiN+"9&2ms7JnYqYU<kq>pX(!!E0!rVliu!!E9'"p"c0
+"p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+
+!r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"<!<iW/"S;Qf"p52<!_Dq\qYU9_rpKaa!XT5?%
+(Q0)qZ-d%$j.%B"9Jc3&cD_;!s&B&!!<)urquos!%ImEq"Oa^7fE&Zq>LEs"9JT&rr<3&!<<#os
+7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~>
+JcG9?s8*Q)rUfm`p%/.^:e1U#!<E6("9\f.!U'Lb!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr)k-
+!!E9)!X/Q."TeT"rr)ckrqulu!W`9"!WiN+"9&2ms7JnYqYU<kq>pX(!!E0!rVliu!!E9'"p"c0
+"p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+
+!r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"<!<iW/"S;Qf"p52<!_Dq\qYU9_rpKaa!XT5?%
+(Q0)qZ-d%$j.%B"9Jc3&cD_;!s&B&!!<)urquos!%ImEq"Oa^7fE&Zq>LEs"9JT&rr<3&!<<#os
+7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~>
+JcG9?s8*Q)rUfm`p%/.^:e1U#!<E6("9\f.!U'Lb!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr)k-
+!!E9)!X/Q."TeT"rr)ckrqulu!W`9"!WiN+"9&2ms7JnYqYU<kq>pX(!!E0!rVliu!!E9'"p"c0
+"p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+
+!r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"<!<iW/"S;Qf"p52<!_Dq\qYU9_rpKaa!XT5?%
+(Q0)qZ-d%$j.%B"9Jc3&cD_;!s&B&!!<)urquos!%ImEq"Oa^7fE&Zq>LEs"9JT&rr<3&!<<#os
+7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~>
+ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!<N?+!s8Vg!!30$!WN)SrsSl/!<;usqZHm$s8DrY
+s8N#trs8W(!!NH1#6>G9!F#!_rr)ckrqulu!W`9!!<E<'!WD3[s"Od32u`4ErVup!!!E0!rVliu
+!!*'-!<ic1"p"u4!<<6&#mLS6r:g$[!rrK5!&=KCrV6?ko(ag<$NUG4d/<n?!W<!1!rr<("9S`0
+!WWT4#6Y/2"9/<"rr2Zls8MusHi4$H!XBVJ!!E?(!!EK+"T\T,!!*6'r;669!!E?2"Y9<>q#:0`
+nGb*H!X/T,o`+ at V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[!<W<&
+s8N'&!!*&tqYp0crUg0q"9JW.#mCA3rr2rtrosH5~>
+ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!<N?+!s8Vg!!30$!WN)SrsSl/!<;usqZHm$s8DrY
+s8N#trs8W(!!NH1#6>G9!F#!_rr)ckrqulu!W`9!!<E<'!WD3[s"Od32u`4ErVup!!!E0!rVliu
+!!*'-!<ic1"p"u4!<<6&#mLS6r:g$[!rrK5!&=KCrV6?ko(ag<$NUG4d/<n?!W<!1!rr<("9S`0
+!WWT4#6Y/2"9/<"rr2Zls8MusHi4$H!XBVJ!!E?(!!EK+"T\T,!!*6'r;669!!E?2"Y9<>q#:0`
+nGb*H!X/T,o`+ at V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[!<W<&
+s8N'&!!*&tqYp0crUg0q"9JW.#mCA3rr2rtrosH5~>
+ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!<N?+!s8Vg!!30$!WN)SrsSl/!<;usqZHm$s8DrY
+s8N#trs8W(!!NH1#6>G9!F#!_rr)ckrqulu!W`9!!<E<'!WD3[s"Od32u`4ErVup!!!E0!rVliu
+!!*'-!<ic1"p"u4!<<6&#mLS6r:g$[!rrK5!&=KCrV6?ko(ag<$NUG4d/<n?!W<!1!rr<("9S`0
+!WWT4#6Y/2"9/<"rr2Zls8MusHi4$H!XBVJ!!E?(!!EK+"T\T,!!*6'r;669!!E?2"Y9<>q#:0`
+nGb*H!X/T,o`+ at V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[!<W<&
+s8N'&!!*&tqYp0crUg0q"9JW.#mCA3rr2rtrosH5~>
+ci<tCs8N)uqu6ZqZ2YL/s7#s`o_\[Z'aP*H&-2n6!<E9#"6]^d!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<"1rVcd#!sf/=!<rN3rVH'_r;-Ek!WW9%s8;s!"98K!r::[(!?V at 6rVZ0c#QOi,r;Z`q
+!!*'%!!*'&!>#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0
+&-)\;!<<6'!<</us8N&trqHHmrr)jkr<!$$!!`Q+$ig_H!!<?1!!!<*"Tnblrr2Zm"oo&4$Ms]"
+rVuWj(CCKP!X\)^s8DWs!!iu7#QOo5!!N?=!<<Z2!<<-#!rW)tquQ`rs8=;@pAc06!?;%3rW<6*
+!!*#u!!N?&s8Dfgp[A+S"UY55"9o/8!X&E$s8M9_J,~>
+ci<tCs8N)uqu6ZqZ2YL/s7#s`o_\[Z'aP*H&-2n6!<E9#"6]^d!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<"1rVcd#!sf/=!<rN3rVH'_r;-Ek!WW9%s8;s!"98K!r::[(!?V at 6rVZ0c#QOi,r;Z`q
+!!*'%!!*'&!>#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0
+&-)\;!<<6'!<</us8N&trqHHmrr)jkr<!$$!!`Q+$ig_H!!<?1!!!<*"Tnblrr2Zm"oo&4$Ms]"
+rVuWj(CCKP!X\)^s8DWs!!iu7#QOo5!!N?=!<<Z2!<<-#!rW)tquQ`rs8=;@pAc06!?;%3rW<6*
+!!*#u!!N?&s8Dfgp[A+S"UY55"9o/8!X&E$s8M9_J,~>
+ci<tCs8N)uqu6ZqZ2YL/s7#s`o_\[Z'aP*H&-2n6!<E9#"6]^d!<<0"rn[S_!!30#r;ZWs!!E9"
+roO1Zrr<"1rVcd#!sf/=!<rN3rVH'_r;-Ek!WW9%s8;s!"98K!r::[(!?V at 6rVZ0c#QOi,r;Z`q
+!!*'%!!*'&!>#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0
+&-)\;!<<6'!<</us8N&trqHHmrr)jkr<!$$!!`Q+$ig_H!!<?1!!!<*"Tnblrr2Zm"oo&4$Ms]"
+rVuWj(CCKP!X\)^s8DWs!!iu7#QOo5!!N?=!<<Z2!<<-#!rW)tquQ`rs8=;@pAc06!?;%3rW<6*
+!!*#u!!N?&s8Dfgp[A+S"UY55"9o/8!X&E$s8M9_J,~>
+dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30#
+r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb
+!!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn
+&ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq
+'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@
+"9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~>
+dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30#
+r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb
+!!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn
+&ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq
+'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@
+"9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~>
+dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30#
+r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb
+!!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn
+&ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq
+'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@
+"9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~>
+dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!<W)t!!29`!W`9%rr1aR$ig>/
+s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh
+!!!-!s8Drt!WE'g!<rZ.#57rhq>L!b"TSi9"RZ$an,NA)!!<?(!9*nOq;MSZ"98H#rU^$br<30%
+!!3E2":,/0o_\U\r;H`u!W`E&s8N&trqHHmrr)j/r<!$$$3:))p\t3cmfidu%gi172[oEYs7?3d
+!!`].!Ta4Yn(IgD&e"g[rVlNdpur4s#QOu&rV,pWqYUBt%0-G1!!*'$r;Zcp!rW-!r$MCD&ci@?
+#5Irk!!*6)!WN*!"TSQ&rVH*ajneuUq&BYB!<W?'"9&9"rosH5~>
+dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!<W)t!!29`!W`9%rr1aR$ig>/
+s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh
+!!!-!s8Drt!WE'g!<rZ.#57rhq>L!b"TSi9"RZ$an,NA)!!<?(!9*nOq;MSZ"98H#rU^$br<30%
+!!3E2":,/0o_\U\r;H`u!W`E&s8N&trqHHmrr)j/r<!$$$3:))p\t3cmfidu%gi172[oEYs7?3d
+!!`].!Ta4Yn(IgD&e"g[rVlNdpur4s#QOu&rV,pWqYUBt%0-G1!!*'$r;Zcp!rW-!r$MCD&ci@?
+#5Irk!!*6)!WN*!"TSQ&rVH*ajneuUq&BYB!<W?'"9&9"rosH5~>
+dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!<W)t!!29`!W`9%rr1aR$ig>/
+s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh
+!!!-!s8Drt!WE'g!<rZ.#57rhq>L!b"TSi9"RZ$an,NA)!!<?(!9*nOq;MSZ"98H#rU^$br<30%
+!!3E2":,/0o_\U\r;H`u!W`E&s8N&trqHHmrr)j/r<!$$$3:))p\t3cmfidu%gi172[oEYs7?3d
+!!`].!Ta4Yn(IgD&e"g[rVlNdpur4s#QOu&rV,pWqYUBt%0-G1!!*'$r;Zcp!rW-!r$MCD&ci@?
+#5Irk!!*6)!WN*!"TSQ&rVH*ajneuUq&BYB!<W?'"9&9"rosH5~>
+fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ
+!!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!<N9%s82ou
+"98N%qsXdk#71JDq>1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$
+bQ at hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb
+rposf$NLA<!!3<(!<2]krqQIJ!!WQ-!R1B8%1*%;$8heSp]'sbr;cm'"9AApoDS[ZqZ[?-!sAT)
+!!!)ts8N!!!W`<%r;-C$#6tA8#4MHf!W`H*!;l`q"TST$qtg<drqcQhqu8W4!!WN-"oeK&s8N#^
+s*t~>
+fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ
+!!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!<N9%s82ou
+"98N%qsXdk#71JDq>1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$
+bQ at hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb
+rposf$NLA<!!3<(!<2]krqQIJ!!WQ-!R1B8%1*%;$8heSp]'sbr;cm'"9AApoDS[ZqZ[?-!sAT)
+!!!)ts8N!!!W`<%r;-C$#6tA8#4MHf!W`H*!;l`q"TST$qtg<drqcQhqu8W4!!WN-"oeK&s8N#^
+s*t~>
+fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ
+!!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!<N9%s82ou
+"98N%qsXdk#71JDq>1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$
+bQ at hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb
+rposf$NLA<!!3<(!<2]krqQIJ!!WQ-!R1B8%1*%;$8heSp]'sbr;cm'"9AApoDS[ZqZ[?-!sAT)
+!!!)ts8N!!!W`<%r;-C$#6tA8#4MHf!W`H*!;l`q"TST$qtg<drqcQhqu8W4!!WN-"oeK&s8N#^
+s*t~>
+fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?<ap[\:Xs0Mt7!XAh[!!30$!WN)S
+rsSl/!<;usqZHm$s8Dr]rrE&ts"OELrVcZmquHd&#ls_trVQTlq>:*hrqlKm#QOr*q$$g&!s\Po
+q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY;
+6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K,
+!!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm
+!=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~>
+fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?<ap[\:Xs0Mt7!XAh[!!30$!WN)S
+rsSl/!<;usqZHm$s8Dr]rrE&ts"OELrVcZmquHd&#ls_trVQTlq>:*hrqlKm#QOr*q$$g&!s\Po
+q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY;
+6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K,
+!!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm
+!=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~>
+fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?<ap[\:Xs0Mt7!XAh[!!30$!WN)S
+rsSl/!<;usqZHm$s8Dr]rrE&ts"OELrVcZmquHd&#ls_trVQTlq>:*hrqlKm#QOr*q$$g&!s\Po
+q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY;
+6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K,
+!!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm
+!=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~>
+fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0"
+rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K*
+rV?8$!sK&4s7c<e!!39)!ri/tqZR''"T\]/!!<H%r;HWns8E!!!!*6!r;QZhrUp"r!=&T*!=/Z-
+#QYA(q=smerVH?n"p=u.!<NB.#Q=PurVlg#!<<-#!r`,urr2Zls8N&u&H;_/!rr<%!<3#rrr)cn
+"pOu-+9McK":+l%rVucfqtUU+!sJi0#QY#/"_%B(rVHNjs7uWprr=nRrVQKlqtp^%!WrT+"TSQ-
+qYpNg"Tn`*%.+#nq#Um(#A*r5pB^j*$39ht"U+u.qtg6iqY^m!p^%$+$Ng2'qY^9cqWe*2~>
+fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0"
+rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K*
+rV?8$!sK&4s7c<e!!39)!ri/tqZR''"T\]/!!<H%r;HWns8E!!!!*6!r;QZhrUp"r!=&T*!=/Z-
+#QYA(q=smerVH?n"p=u.!<NB.#Q=PurVlg#!<<-#!r`,urr2Zls8N&u&H;_/!rr<%!<3#rrr)cn
+"pOu-+9McK":+l%rVucfqtUU+!sJi0#QY#/"_%B(rVHNjs7uWprr=nRrVQKlqtp^%!WrT+"TSQ-
+qYpNg"Tn`*%.+#nq#Um(#A*r5pB^j*$39ht"U+u.qtg6iqY^m!p^%$+$Ng2'qY^9cqWe*2~>
+fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0"
+rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K*
+rV?8$!sK&4s7c<e!!39)!ri/tqZR''"T\]/!!<H%r;HWns8E!!!!*6!r;QZhrUp"r!=&T*!=/Z-
+#QYA(q=smerVH?n"p=u.!<NB.#Q=PurVlg#!<<-#!r`,urr2Zls8N&u&H;_/!rr<%!<3#rrr)cn
+"pOu-+9McK":+l%rVucfqtUU+!sJi0#QY#/"_%B(rVHNjs7uWprr=nRrVQKlqtp^%!WrT+"TSQ-
+qYpNg"Tn`*%.+#nq#Um(#A*r5pB^j*$39ht"U+u.qtg6iqY^m!p^%$+$Ng2'qY^9cqWe*2~>
+fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9%
+rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m
+p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6
+HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I'
+!!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p<h!!3'!2Z3ONqZ$Bf#Qk&-"9AW*"q(5*
+s8*!#!!<N$q"t#=H?ji2pA=dh#R(M at p@SFp!!i8rqYgBjrr!H+qXO=b!Xeu5o(i%Wr:p0hrp9Z8~>
+fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9%
+rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m
+p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6
+HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I'
+!!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p<h!!3'!2Z3ONqZ$Bf#Qk&-"9AW*"q(5*
+s8*!#!!<N$q"t#=H?ji2pA=dh#R(M at p@SFp!!i8rqYgBjrr!H+qXO=b!Xeu5o(i%Wr:p0hrp9Z8~>
+fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9%
+rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m
+p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6
+HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I'
+!!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p<h!!3'!2Z3ONqZ$Bf#Qk&-"9AW*"q(5*
+s8*!#!!<N$q"t#=H?ji2pA=dh#R(M at p@SFp!!i8rqYgBjrr!H+qXO=b!Xeu5o(i%Wr:p0hrp9Z8~>
+fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He
+q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ at r;HHgq=a??"9J`-"UP54OoP"E
+r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$
+!<EE3qY0jdr;-?\s,R<d#mLA1#Rcdkp\F^\qtU0e"9JK%9E"kfqZ$Bg$3gP5!s/T*#RpS-s7HNu
+"TST!q=ssgq=sm\p]('q#mLD:mdq%n$jHP(rVcZkr;HTjq!r;&$NpKrp at n:Yrqu`prTsQ7~>
+fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He
+q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ at r;HHgq=a??"9J`-"UP54OoP"E
+r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$
+!<EE3qY0jdr;-?\s,R<d#mLA1#Rcdkp\F^\qtU0e"9JK%9E"kfqZ$Bg$3gP5!s/T*#RpS-s7HNu
+"TST!q=ssgq=sm\p]('q#mLD:mdq%n$jHP(rVcZkr;HTjq!r;&$NpKrp at n:Yrqu`prTsQ7~>
+fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He
+q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ at r;HHgq=a??"9J`-"UP54OoP"E
+r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$
+!<EE3qY0jdr;-?\s,R<d#mLA1#Rcdkp\F^\qtU0e"9JK%9E"kfqZ$Bg$3gP5!s/T*#RpS-s7HNu
+"TST!q=ssgq=sm\p]('q#mLD:mdq%n$jHP(rVcZkr;HTjq!r;&$NpKrp at n:Yrqu`prTsQ7~>
+g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp
+<*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU
+rVZHdq"Y+!"T\T'!<i]4q=sshrr2ou!!*'$rVlirrqHHmrr<!#rr;s"r;Ziqrr4)>qtC:%!s&B'
+!<WK1r;-9irqH6bnGECl!WrZ-"021rq?Qolrqucj"9JK%2ZEaTr;HKj#mLP8!!<B*"q(5*s7lg"
+!WrF2<)m4&<``3q=]AQ-!XA]2q"tF'"oqe&<`N.!r`'P0;,[Jq%L34.rVZNjrqcNlrTsQ7~>
+g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp
+<*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU
+rVZHdq"Y+!"T\T'!<i]4q=sshrr2ou!!*'$rVlirrqHHmrr<!#rr;s"r;Ziqrr4)>qtC:%!s&B'
+!<WK1r;-9irqH6bnGECl!WrZ-"021rq?Qolrqucj"9JK%2ZEaTr;HKj#mLP8!!<B*"q(5*s7lg"
+!WrF2<)m4&<``3q=]AQ-!XA]2q"tF'"oqe&<`N.!r`'P0;,[Jq%L34.rVZNjrqcNlrTsQ7~>
+g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u
+h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp
+<*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU
+rVZHdq"Y+!"T\T'!<i]4q=sshrr2ou!!*'$rVlirrqHHmrr<!#rr;s"r;Ziqrr4)>qtC:%!s&B'
+!<WK1r;-9irqH6bnGECl!WrZ-"021rq?Qolrqucj"9JK%2ZEaTr;HKj#mLP8!!<B*"q(5*s7lg"
+!WrF2<)m4&<``3q=]AQ-!XA]2q"tF'"oqe&<`N.!r`'P0;,[Jq%L34.rVZNjrqcNlrTsQ7~>
+g&M*Os8W)ts8<E%$j-M.qZ[E1"9ni1!;QQ8s7lO&q>WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$
+!WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi<!rrW-!<N6,!W`H0"T\o1rqm*,$3:/3
+$3C21!s/W.#lk/1!!rW,rr)in"9JW8"9\r4!Wr)orr;rsr;Zfu!!E/sq"t!gnGN"NqAK>9"pb7A
+s7l0_r;QTiqYgTu!<N?*!W`<(qtpBkrr3-&!!*'$rVlirrqHHmrr<!nrr;s"!!!'$rr;rqqYC!k
+"Tnl.!WiN,"9&2prVuiil1ste!=&Z/!YG)(mJZkZq>L0hq#LHr!!)usrr)clqud'*"98N0!<NK%
+rr2fo!uh7G"To&5"pG28#ltM@"9B5G!rDTu'*8.<!X&2t%MK0O!lXs7r;-?iq>:3km/MS~>
+g&M*Os8W)ts8<E%$j-M.qZ[E1"9ni1!;QQ8s7lO&q>WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$
+!WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi<!rrW-!<N6,!W`H0"T\o1rqm*,$3:/3
+$3C21!s/W.#lk/1!!rW,rr)in"9JW8"9\r4!Wr)orr;rsr;Zfu!!E/sq"t!gnGN"NqAK>9"pb7A
+s7l0_r;QTiqYgTu!<N?*!W`<(qtpBkrr3-&!!*'$rVlirrqHHmrr<!nrr;s"!!!'$rr;rqqYC!k
+"Tnl.!WiN,"9&2prVuiil1ste!=&Z/!YG)(mJZkZq>L0hq#LHr!!)usrr)clqud'*"98N0!<NK%
+rr2fo!uh7G"To&5"pG28#ltM@"9B5G!rDTu'*8.<!X&2t%MK0O!lXs7r;-?iq>:3km/MS~>
+g&M*Os8W)ts8<E%$j-M.qZ[E1"9ni1!;QQ8s7lO&q>WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$
+!WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi<!rrW-!<N6,!W`H0"T\o1rqm*,$3:/3
+$3C21!s/W.#lk/1!!rW,rr)in"9JW8"9\r4!Wr)orr;rsr;Zfu!!E/sq"t!gnGN"NqAK>9"pb7A
+s7l0_r;QTiqYgTu!<N?*!W`<(qtpBkrr3-&!!*'$rVlirrqHHmrr<!nrr;s"!!!'$rr;rqqYC!k
+"Tnl.!WiN,"9&2prVuiil1ste!=&Z/!YG)(mJZkZq>L0hq#LHr!!)usrr)clqud'*"98N0!<NK%
+rr2fo!uh7G"To&5"pG28#ltM@"9B5G!rDTu'*8.<!X&2t%MK0O!lXs7r;-?iq>:3km/MS~>
+g&M*Os8W&s&,H))!!rVr!<N;Rg]migpAP!krl5!5r!r]N"9\`0!seo3#QXr/!q?9j!W<)o!VcWr
+!<<0"rn[S_!!30#r;ZWs!!E9"roX5QrVZTls7#LWo_JOn!s8N2!<rN*!!*6)!rrN6!<E-!!<NE1
+!W`]0#m^M:!>GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&<AE$ipD:
+q"=[^qY0seqY^?n!<E6&!<W6$s836&qu?]o!<<-#!r`,urr2Zls8N&u"9/?""8r6"s8DmDrW*!!
+"Te`-"TSQ$rqZEip\Odap&5$s!XK%_qXj^_q>U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn
+!!<<'":G>5)$(<L#n%"E!!*W5!s/E"rW=)P!WW9%!<N9%!!*3&!sK,<rUBgZo_\XcrVui_s*t~>
+g&M*Os8W&s&,H))!!rVr!<N;Rg]migpAP!krl5!5r!r]N"9\`0!seo3#QXr/!q?9j!W<)o!VcWr
+!<<0"rn[S_!!30#r;ZWs!!E9"roX5QrVZTls7#LWo_JOn!s8N2!<rN*!!*6)!rrN6!<E-!!<NE1
+!W`]0#m^M:!>GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&<AE$ipD:
+q"=[^qY0seqY^?n!<E6&!<W6$s836&qu?]o!<<-#!r`,urr2Zls8N&u"9/?""8r6"s8DmDrW*!!
+"Te`-"TSQ$rqZEip\Odap&5$s!XK%_qXj^_q>U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn
+!!<<'":G>5)$(<L#n%"E!!*W5!s/E"rW=)P!WW9%!<N9%!!*3&!sK,<rUBgZo_\XcrVui_s*t~>
+g&M*Os8W&s&,H))!!rVr!<N;Rg]migpAP!krl5!5r!r]N"9\`0!seo3#QXr/!q?9j!W<)o!VcWr
+!<<0"rn[S_!!30#r;ZWs!!E9"roX5QrVZTls7#LWo_JOn!s8N2!<rN*!!*6)!rrN6!<E-!!<NE1
+!W`]0#m^M:!>GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&<AE$ipD:
+q"=[^qY0seqY^?n!<E6&!<W6$s836&qu?]o!<<-#!r`,urr2Zls8N&u"9/?""8r6"s8DmDrW*!!
+"Te`-"TSQ$rqZEip\Odap&5$s!XK%_qXj^_q>U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn
+!!<<'":G>5)$(<L#n%"E!!*W5!s/E"rW=)P!WW9%!<N9%!!*3&!sK,<rUBgZo_\XcrVui_s*t~>
+g&M*Os8W&ss8<E-!<E0!!rr>urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0*
+!!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl<h!!EB+qu at Q7!!!$%"U+u/
+rpB7]"TSc."U+u.!!30&qZ%91"8`#sp at ACe$igG4!Whohrr2TirVurt!@ImHqu60arVZTlr;-6[
+!rrVuqu6?hqtU'fr:]sX!!!$&"9AK&oDS[d$iU,)!!!$&!<2fos8N#ls8N"7o)A[g!!!6(!VZQm
+o`"[bli7(h!!39'!:9^To_JL[p&G$`qXXgr!;$3^qu?ZirVlHgrVZm$!!E;nr;QKhr;6'f#6>,2
+"T\Vlqu?Kk!!!*$!<<9'!W`<%!<WN0!"&f0$g[Nd!"B88#6t#)#m(2/!<NGjrr26_rWN9#rr;ua
+s*t~>
+g&M*Os8W&ss8<E-!<E0!!rr>urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0*
+!!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl<h!!EB+qu at Q7!!!$%"U+u/
+rpB7]"TSc."U+u.!!30&qZ%91"8`#sp at ACe$igG4!Whohrr2TirVurt!@ImHqu60arVZTlr;-6[
+!rrVuqu6?hqtU'fr:]sX!!!$&"9AK&oDS[d$iU,)!!!$&!<2fos8N#ls8N"7o)A[g!!!6(!VZQm
+o`"[bli7(h!!39'!:9^To_JL[p&G$`qXXgr!;$3^qu?ZirVlHgrVZm$!!E;nr;QKhr;6'f#6>,2
+"T\Vlqu?Kk!!!*$!<<9'!W`<%!<WN0!"&f0$g[Nd!"B88#6t#)#m(2/!<NGjrr26_rWN9#rr;ua
+s*t~>
+g&M*Os8W&ss8<E-!<E0!!rr>urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0*
+!!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl<h!!EB+qu at Q7!!!$%"U+u/
+rpB7]"TSc."U+u.!!30&qZ%91"8`#sp at ACe$igG4!Whohrr2TirVurt!@ImHqu60arVZTlr;-6[
+!rrVuqu6?hqtU'fr:]sX!!!$&"9AK&oDS[d$iU,)!!!$&!<2fos8N#ls8N"7o)A[g!!!6(!VZQm
+o`"[bli7(h!!39'!:9^To_JL[p&G$`qXXgr!;$3^qu?ZirVlHgrVZm$!!E;nr;QKhr;6'f#6>,2
+"T\Vlqu?Kk!!!*$!<<9'!W`<%!<WN0!"&f0$g[Nd!"B88#6t#)#m(2/!<NGjrr26_rWN9#rr;ua
+s*t~>
+e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2-
+$2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR%
+LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU<ls8DrsrqlTl$Q8pBo`"mgs8W)rq
+u6C-rXB;J&.K*Jr:fsarV60drX92OpAb-dnc/Xg:\FY]rZDUXrqQ3SrVZ*Wrr*K<)\ibirr2`]r
+VZBhrquTkp$qth&cD%rp%84^nc&Can,D\g$k3.6rq?<iqXXUZ$k*pe$k<47s5j7Nr;I**%hS^K!
+"Jo9&Io?\((1W]oD\af)%d8h'atfS%0$bB%M'3Gr:Bgbp#Q.'~>
+e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2-
+$2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR%
+LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU<ls8DrsrqlTl$Q8pBo`"mgs8W)rq
+u6C-rXB;J&.K*Jr:fsarV60drX92OpAb-dnc/Xg:\FY]rZDUXrqQ3SrVZ*Wrr*K<)\ibirr2`]r
+VZBhrquTkp$qth&cD%rp%84^nc&Can,D\g$k3.6rq?<iqXXUZ$k*pe$k<47s5j7Nr;I**%hS^K!
+"Jo9&Io?\((1W]oD\af)%d8h'atfS%0$bB%M'3Gr:Bgbp#Q.'~>
+e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2-
+$2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR%
+LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU<ls8DrsrqlTl$Q8pBo`"mgs8W)rq
+u6C-rXB;J&.K*Jr:fsarV60drX92OpAb-dnc/Xg:\FY]rZDUXrqQ3SrVZ*Wrr*K<)\ibirr2`]r
+VZBhrquTkp$qth&cD%rp%84^nc&Can,D\g$k3.6rq?<iqXXUZ$k*pe$k<47s5j7Nr;I**%hS^K!
+"Jo9&Io?\((1W]oD\af)%d8h'atfS%0$bB%M'3Gr:Bgbp#Q.'~>
+e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b):
+!>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa
+r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp at nOWrr2llrr;up
+qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D
+rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj at Xqsa@Yq"a^arUp0Zs8MKdrW)oq
+rY5>1rr;cbq>C*bp%[qNr;?<hqYpKns8N!&o)8I[rqH?ijSs`~>
+e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b):
+!>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa
+r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp at nOWrr2llrr;up
+qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D
+rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj at Xqsa@Yq"a^arUp0Zs8MKdrW)oq
+rY5>1rr;cbq>C*bp%[qNr;?<hqYpKns8N!&o)8I[rqH?ijSs`~>
+e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b):
+!>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa
+r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp at nOWrr2llrr;up
+qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D
+rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj at Xqsa@Yq"a^arUp0Zs8MKdrW)oq
+rY5>1rr;cbq>C*bp%[qNr;?<hqYpKns8N!&o)8I[rqH?ijSs`~>
+e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!<rQ2!!Wu;kPu)'!<>SQrVl]s"pkM9#6af%
+!W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl
+r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtp<hrqurrrq?Bk
+rr;rrq\T&(pAY'bqY9g_rV?9fr:fs_nbN4ZrVc9d=T/-pqt'^]p%eX[p\4R^qY9OXq<n+Po_AF\
+qu$EkoDJX`r:^*eq>C3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a
+rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~>
+e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!<rQ2!!Wu;kPu)'!<>SQrVl]s"pkM9#6af%
+!W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl
+r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtp<hrqurrrq?Bk
+rr;rrq\T&(pAY'bqY9g_rV?9fr:fs_nbN4ZrVc9d=T/-pqt'^]p%eX[p\4R^qY9OXq<n+Po_AF\
+qu$EkoDJX`r:^*eq>C3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a
+rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~>
+e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!<rQ2!!Wu;kPu)'!<>SQrVl]s"pkM9#6af%
+!W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl
+r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtp<hrqurrrq?Bk
+rr;rrq\T&(pAY'bqY9g_rV?9fr:fs_nbN4ZrVc9d=T/-pqt'^]p%eX[p\4R^qY9OXq<n+Po_AF\
+qu$EkoDJX`r:^*eq>C3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a
+rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~>
+e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1!<W]5!Wro4#3c*u"9o$/pA4R_p'M!+%
+KQbBp](?r!!3)uh>[l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p
+\ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q
+u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr
+UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur
+qQ'UrV-3frVe&ArquZmoD/:Tr:9aap at J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~>
+e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1!<W]5!Wro4#3c*u"9o$/pA4R_p'M!+%
+KQbBp](?r!!3)uh>[l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p
+\ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q
+u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr
+UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur
+qQ'UrV-3frVe&ArquZmoD/:Tr:9aap at J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~>
+e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1!<W]5!Wro4#3c*u"9o$/pA4R_p'M!+%
+KQbBp](?r!!3)uh>[l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p
+\ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q
+u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr
+UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur
+qQ'UrV-3frVe&ArquZmoD/:Tr:9aap at J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~>
+e,TFH(B4C<!<2ru!W`,s!WiB$s8MrorVuosdJs%A#lKhg#QP&1!s\`,!sK)6$L%O$"9iQ?li$YX
+qu@'/!s8]0p](?r!!3)uh>[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\
+qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$<hq=a[bp%J=ZqXXU^3rJaKq>C-as7lQlrr<#rq>0p]
+r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U
+rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H<gr:TdZqYTgYq!n@^p&+[^rUomZmeQ_W
+rqlWjnc/@Xnb`7_rY,>2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~>
+e,TFH(B4C<!<2ru!W`,s!WiB$s8MrorVuosdJs%A#lKhg#QP&1!s\`,!sK)6$L%O$"9iQ?li$YX
+qu@'/!s8]0p](?r!!3)uh>[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\
+qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$<hq=a[bp%J=ZqXXU^3rJaKq>C-as7lQlrr<#rq>0p]
+r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U
+rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H<gr:TdZqYTgYq!n@^p&+[^rUomZmeQ_W
+rqlWjnc/@Xnb`7_rY,>2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~>
+e,TFH(B4C<!<2ru!W`,s!WiB$s8MrorVuosdJs%A#lKhg#QP&1!s\`,!sK)6$L%O$"9iQ?li$YX
+qu@'/!s8]0p](?r!!3)uh>[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\
+qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$<hq=a[bp%J=ZqXXU^3rJaKq>C-as7lQlrr<#rq>0p]
+r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U
+rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H<gr:TdZqYTgYq!n@^p&+[^rUomZmeQ_W
+rqlWjnc/@Xnb`7_rY,>2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~>
+e,TFH(B4C=!WN#u!<E&t!s8Q%rquWhr;HWndJs%A$[Vj]#64l.!!**'"9&Ak!;QX+K7s0ppA"R`
+q$$g$"U"f/p](?r!!3)uh>[l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_
+qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p]
+r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W
+o_SL\rUp*dqXO at So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z
+r;QWjp%\4Rp\t$grr<!5rqcBdo_ngdqtU*arV-!^p](0krr2oqs8E9$q"sj]r;$6Ns*t~>
+e,TFH(B4C=!WN#u!<E&t!s8Q%rquWhr;HWndJs%A$[Vj]#64l.!!**'"9&Ak!;QX+K7s0ppA"R`
+q$$g$"U"f/p](?r!!3)uh>[l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_
+qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p]
+r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W
+o_SL\rUp*dqXO at So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z
+r;QWjp%\4Rp\t$grr<!5rqcBdo_ngdqtU*arV-!^p](0krr2oqs8E9$q"sj]r;$6Ns*t~>
+e,TFH(B4C=!WN#u!<E&t!s8Q%rquWhr;HWndJs%A$[Vj]#64l.!!**'"9&Ak!;QX+K7s0ppA"R`
+q$$g$"U"f/p](?r!!3)uh>[l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_
+qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p]
+r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W
+o_SL\rUp*dqXO at So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z
+r;QWjp%\4Rp\t$grr<!5rqcBdo_ngdqtU*arV-!^p](0krr2oqs8E9$q"sj]r;$6Ns*t~>
+fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7
+!<NE.!<`B(Sc/B`pAXpbqt^Eq!<<*#pAb6q!!3)uh>[l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n
+rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus
+qu6UGrVZWmqu6<grVHNnrVlirrVZWkq>C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi
+q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl
+qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~>
+fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7
+!<NE.!<`B(Sc/B`pAXpbqt^Eq!<<*#pAb6q!!3)uh>[l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n
+rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus
+qu6UGrVZWmqu6<grVHNnrVlirrVZWkq>C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi
+q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl
+qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~>
+fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7
+!<NE.!<`B(Sc/B`pAXpbqt^Eq!<<*#pAb6q!!3)uh>[l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n
+rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus
+qu6UGrVZWmqu6<grVHNnrVlirrVZWkq>C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi
+q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl
+qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~>
+fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC
+!!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos
+rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~>
+fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC
+!!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos
+rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~>
+fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC
+!!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos
+rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~>
+fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI!<N?+"9S]+nGj"&!<WB(
+!s8f3$ipRLb52#<qtg0gqu?]upAb6q!!3)uh>[l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[
+r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~>
+fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI!<N?+"9S]+nGj"&!<WB(
+!s8f3$ipRLb52#<qtg0gqu?]upAb6q!!3)uh>[l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[
+r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~>
+fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI!<N?+"9S]+nGj"&!<WB(
+!s8f3$ipRLb52#<qtg0gqu?]upAb6q!!3)uh>[l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[
+r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~>
+f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE!<E6("9S`-n,Nq+!!NE6
+!s&H(!T<qOm/Hq]"8r&nrql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"reLOPrqcZorkJL3rqcZo
+rf$l-~>
+f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE!<E6("9S`-n,Nq+!!NE6
+!s&H(!T<qOm/Hq]"8r&nrql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"reLOPrqcZorkJL3rqcZo
+rf$l-~>
+f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE!<E6("9S`-n,Nq+!!NE6
+!s&H(!T<qOm/Hq]"8r&nrql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"reLOPrqcZorkJL3rqcZo
+rf$l-~>
+f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!<E9#"7Z@%#lk).!<W<%
+!s&&oo(qqWrqu]k!<2lr!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVhQOs8K"trr.lVJ,~>
+f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!<E9#"7Z@%#lk).!<W<%
+!s&&oo(qqWrqu]k!<2lr!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVhQOs8K"trr.lVJ,~>
+f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!<E9#"7Z@%#lk).!<W<%
+!s&&oo(qqWrqu]k!<2lr!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVhQOs8K"trr.lVJ,~>
+fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L
++T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~>
+fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L
++T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~>
+fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L
++T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~>
+fDkmM)ZTg7qYK^d"4#<irV-'bpAFsds82iprqQHjd/O at Cqu6Qr":G>.!!!&i!!WK.!<`B(2u`[Y
+r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~>
+fDkmM)ZTg7qYK^d"4#<irV-'bpAFsds82iprqQHjd/O at Cqu6Qr":G>.!!!&i!!WK.!<`B(2u`[Y
+r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~>
+fDkmM)ZTg7qYK^d"4#<irV-'bpAFsds82iprqQHjd/O at Cqu6Qr":G>.!!!&i!!WK.!<`B(2u`[Y
+r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~>
+g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k
+s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~>
+g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k
+s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~>
+g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k
+s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~>
+g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ at B(l*"nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~>
+g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ at B(l*"nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~>
+g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ at B(l*"nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~>
+ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p
+!!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~>
+ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p
+!!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~>
+ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p
+!!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~>
+ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~>
+ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~>
+ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u
+pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~>
+eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr
+!<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~>
+eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr
+!<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~>
+eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr
+!<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~>
+g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r
+!!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~>
+g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r
+!!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~>
+g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r
+!!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~>
+g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo
+qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~>
+g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo
+qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~>
+g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo
+qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~>
+ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr
+!!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~>
+ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr
+!!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~>
+ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr
+!!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~>
+eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!<NSk!<302!!E;qoD\^Zo_8@\rVH?i
+#6"T&!<<*$pAb6q!!3)uhu=ShrrrQ2p&+gW!!!3&qu-*]q>U-fqtBscrVZYGs+13gs*t~>
+eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!<NSk!<302!!E;qoD\^Zo_8@\rVH?i
+#6"T&!<<*$pAb6q!!3)uhu=ShrrrQ2p&+gW!!!3&qu-*]q>U-fqtBscrVZYGs+13gs*t~>
+eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!<NSk!<302!!E;qoD\^Zo_8@\rVH?i
+#6"T&!<<*$pAb6q!!3)uhu=ShrrrQ2p&+gW!!!3&qu-*]q>U-fqtBscrVZYGs+13gs*t~>
+eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtp<ici47LnGiFe!=&\j!"K#0#lk84fD,=;rqQ!YqtU0k
+rql`r!quZr!<<0"rnm_pq#1<r%J9Vkqu?g'rVHKjqu$-cs7H?gr;HWoJcC<$_>f#~>
+eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtp<ici47LnGiFe!=&\j!"K#0#lk84fD,=;rqQ!YqtU0k
+rql`r!quZr!<<0"rnm_pq#1<r%J9Vkqu?g'rVHKjqu$-cs7H?gr;HWoJcC<$_>f#~>
+eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtp<ici47LnGiFe!=&\j!"K#0#lk84fD,=;rqQ!YqtU0k
+rql`r!quZr!<<0"rnm_pq#1<r%J9Vkqu?g'rVHKjqu$-cs7H?gr;HWoJcC<$_>f#~>
+eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O at JqYg(J"onbi!"T87&Hr:<!l_eLqtpBkrqlNk
+!<2lr!!;lp!W`9%rr1jU)u]U/!Y5>2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~>
+eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O at JqYg(J"onbi!"T87&Hr:<!l_eLqtpBkrqlNk
+!<2lr!!;lp!W`9%rr1jU)u]U/!Y5>2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~>
+eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O at JqYg(J"onbi!"T87&Hr:<!l_eLqtpBkrqlNk
+!<2lr!!;lp!W`9%rr1jU)u]U/!Y5>2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~>
+eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_
+rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~>
+eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_
+rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~>
+eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_
+rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~>
+eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!<rT2#QbM;"cr?Lq>1$a
+rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J at Or;HVGs+13bs*t~>
+eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!<rT2#QbM;"cr?Lq>1$a
+rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J at Or;HVGs+13bs*t~>
+eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!<rT2#QbM;"cr?Lq>1$a
+rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J at Or;HVGs+13bs*t~>
+eGgBbrVcNcJU[Rnq"agaq"s^Tr;6<dqtp<ici47Lp](!eq1/_F!V$.#":tV8#QY#4!!WRHGlRU;
+q>C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6 at Ho)/Icrr)isrdk*#s2=qf~>
+eGgBbrVcNcJU[Rnq"agaq"s^Tr;6<dqtp<ici47Lp](!eq1/_F!V$.#":tV8#QY#4!!WRHGlRU;
+q>C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6 at Ho)/Icrr)isrdk*#s2=qf~>
+eGgBbrVcNcJU[Rnq"agaq"s^Tr;6<dqtp<ici47Lp](!eq1/_F!V$.#":tV8#QY#4!!WRHGlRU;
+q>C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6 at Ho)/Icrr)isrdk*#s2=qf~>
+eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3
+q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R at 9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~>
+eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3
+q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R at 9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~>
+eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3
+q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R at 9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~>
+f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!<N6(
+$31,7!*K6upAX^`r;QNg"pP&.$NU>4!!33%!WWK+!<<0"rojA"rr)fnq>L<ks8VrkrqQEip\k$h
+s8N&trr)ir!WMums8W(Ls-`m&rr;urrVl`krV6BlqZ$NorVlfpr;?Q_rsnr(p\Opaqu?NmqYp9i
+r8dm.~>
+f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!<N6(
+$31,7!*K6upAX^`r;QNg"pP&.$NU>4!!33%!WWK+!<<0"rojA"rr)fnq>L<ks8VrkrqQEip\k$h
+s8N&trr)ir!WMums8W(Ls-`m&rr;urrVl`krV6BlqZ$NorVlfpr;?Q_rsnr(p\Opaqu?NmqYp9i
+r8dm.~>
+f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!<N6(
+$31,7!*K6upAX^`r;QNg"pP&.$NU>4!!33%!WWK+!<<0"rojA"rr)fnq>L<ks8VrkrqQEip\k$h
+s8N&trr)ir!WMums8W(Ls-`m&rr;urrVl`krV6BlqZ$NorVlfpr;?Q_rsnr(p\Opaqu?NmqYp9i
+r8dm.~>
+f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o<RFkl<%4!X/c0#6R*ar:g'e
+p&+[b_Z9uN!sA`-!sS`*!=Jr0!W`?#rr2*\s8EQ-q#(0gs8W&snG*%UrVc_Hs+LCQrr;rr&cMS*
+o_\:Uq#(!err2lnr;Q`dr=AJsrq,s^r;?-as7,s`rr2!YJ,~>
+f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o<RFkl<%4!X/c0#6R*ar:g'e
+p&+[b_Z9uN!sA`-!sS`*!=Jr0!W`?#rr2*\s8EQ-q#(0gs8W&snG*%UrVc_Hs+LCQrr;rr&cMS*
+o_\:Uq#(!err2lnr;Q`dr=AJsrq,s^r;?-as7,s`rr2!YJ,~>
+f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o<RFkl<%4!X/c0#6R*ar:g'e
+p&+[b_Z9uN!sA`-!sS`*!=Jr0!W`?#rr2*\s8EQ-q#(0gs8W&snG*%UrVc_Hs+LCQrr;rr&cMS*
+o_\:Uq#(!err2lnr;Q`dr=AJsrq,s^r;?-as7,s`rr2!YJ,~>
+g&D'Orr<#ts83*$r<!$$qYgBn"pb;2%06D,rVccqd/O4Gqtp<jr<N9!f`VWa!sRlg,6IoG&-rCD
+!Zi?[rr2`krpTgB!=/Z0!!rl1!"/c."9AQ)!WN#troj at orVulnr;QKho_%kLrql<crVhBJK`;GY
+rr2lqs8Df]rVlWkrW)orrW2uqn,<gqoC;eVp%S@^qu?Woq<m;CJ,~>
+g&D'Orr<#ts83*$r<!$$qYgBn"pb;2%06D,rVccqd/O4Gqtp<jr<N9!f`VWa!sRlg,6IoG&-rCD
+!Zi?[rr2`krpTgB!=/Z0!!rl1!"/c."9AQ)!WN#troj at orVulnr;QKho_%kLrql<crVhBJK`;GY
+rr2lqs8Df]rVlWkrW)orrW2uqn,<gqoC;eVp%S@^qu?Woq<m;CJ,~>
+g&D'Orr<#ts83*$r<!$$qYgBn"pb;2%06D,rVccqd/O4Gqtp<jr<N9!f`VWa!sRlg,6IoG&-rCD
+!Zi?[rr2`krpTgB!=/Z0!!rl1!"/c."9AQ)!WN#troj at orVulnr;QKho_%kLrql<crVhBJK`;GY
+rr2lqs8Df]rVlWkrW)orrW2uqn,<gqoC;eVp%S@^qu?Woq<m;CJ,~>
+g&D'OrVmc6qtg9h!rrE"rW3<2p at A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD
+!!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE'
+&cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~>
+g&D'OrVmc6qtg9h!rrE"rW3<2p at A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD
+!!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE'
+&cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~>
+g&D'OrVmc6qtg9h!rrE"rW3<2p at A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD
+!!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE'
+&cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~>
+g&D'OrVm3&qtg9h!WW<!s8E')p at AV"!W2iorqlcpci4LRqtg3grr)`mrqu@%'ERCt,QRlR!!3B8
+!"&]+&F80LroX4SnGX(8$kiU@$NU5.!!*-%!WM3\&cVh1qYgHjq=OCZjQ?I8rVc_Hs+LCfrVuos
+rr;uprVl-^kiM$m!sAc3"p>%s!=fA?!!;KAli-DMrT=+ProF*0~>
+g&D'OrVm3&qtg9h!WW<!s8E')p at AV"!W2iorqlcpci4LRqtg3grr)`mrqu@%'ERCt,QRlR!!3B8
+!"&]+&F80LroX4SnGX(8$kiU@$NU5.!!*-%!WM3\&cVh1qYgHjq=OCZjQ?I8rVc_Hs+LCfrVuos
+rr;uprVl-^kiM$m!sAc3"p>%s!=fA?!!;KAli-DMrT=+ProF*0~>
+g&D'OrVm3&qtg9h!WW<!s8E')p at AV"!W2iorqlcpci4LRqtg3grr)`mrqu@%'ERCt,QRlR!!3B8
+!"&]+&F80LroX4SnGX(8$kiU@$NU5.!!*-%!WM3\&cVh1qYgHjq=OCZjQ?I8rVc_Hs+LCfrVuos
+rr;uprVl-^kiM$m!sAc3"p>%s!=fA?!!;KAli-DMrT=+ProF*0~>
+g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0 at q#U!c*=i/_
+#Qb#0#mgS>!<N8MpAOmVs7H?j.KKeW"UtJ2!<WB(!<)orkl27os8VrnrqQ$\e%uIipAY$hrdk*&
+rt>;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~>
+g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0 at q#U!c*=i/_
+#Qb#0#mgS>!<N8MpAOmVs7H?j.KKeW"UtJ2!<WB(!<)orkl27os8VrnrqQ$\e%uIipAY$hrdk*&
+rt>;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~>
+g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0 at q#U!c*=i/_
+#Qb#0#mgS>!<N8MpAOmVs7H?j.KKeW"UtJ2!<WB(!<)orkl27os8VrnrqQ$\e%uIipAY$hrdk*&
+rt>;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~>
+f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3,
+":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo
+rVl`irj`(3!"B&<!s/K(!Wqfj%g*"=":P;<!!!;:rUf^Xq;hR+~>
+f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3,
+":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo
+rVl`irj`(3!"B&<!s/K(!Wqfj%g*"=":P;<!!!;:rUf^Xq;hR+~>
+f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3,
+":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo
+rVl`irj`(3!"B&<!s/K(!Wqfj%g*"=":P;<!!!;:rUf^Xq;hR+~>
+f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?&
+!!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!<W?!q"XaNs8N!/rVQHeo_nVj
+!<K"kqt^3irr2otr5ep<r!<?"r;ZWnq#C6jr\49Kqu?Nmqu?Torql`ns8DlqrV?Klr;ZTgs8;iq
+q>L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s
+rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$#
+m/RRr!!*0&!<r`0T`+o[roF*0~>
+f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?&
+!!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!<W?!q"XaNs8N!/rVQHeo_nVj
+!<K"kqt^3irr2otr5ep<r!<?"r;ZWnq#C6jr\49Kqu?Nmqu?Torql`ns8DlqrV?Klr;ZTgs8;iq
+q>L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s
+rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$#
+m/RRr!!*0&!<r`0T`+o[roF*0~>
+f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?&
+!!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!<W?!q"XaNs8N!/rVQHeo_nVj
+!<K"kqt^3irr2otr5ep<r!<?"r;ZWnq#C6jr\49Kqu?Nmqu?Torql`ns8DlqrV?Klr;ZTgs8;iq
+q>L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s
+rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$#
+m/RRr!!*0&!<r`0T`+o[roF*0~>
+e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtp<hrr.'B#m(53!WrK("T\`-n,NIi!r`<?!s/I\
+M"glGq>C6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p at nIV
+r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n
+p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#:<fqYg?eqtp0d
+rR:fHrXXjDJWGJCMhh9+qYU!Yr.t=U!X&T,iW/uZ#Qb;9!sXh\q#9 at SJ,~>
+e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtp<hrr.'B#m(53!WrK("T\`-n,NIi!r`<?!s/I\
+M"glGq>C6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p at nIV
+r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n
+p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#:<fqYg?eqtp0d
+rR:fHrXXjDJWGJCMhh9+qYU!Yr.t=U!X&T,iW/uZ#Qb;9!sXh\q#9 at SJ,~>
+e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtp<hrr.'B#m(53!WrK("T\`-n,NIi!r`<?!s/I\
+M"glGq>C6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p at nIV
+r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n
+p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#:<fqYg?eqtp0d
+rR:fHrXXjDJWGJCMhh9+qYU!Yr.t=U!X&T,iW/uZ#Qb;9!sXh\q#9 at SJ,~>
+e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f.
+!=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO
+p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M
+p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4
+e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~>
+e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f.
+!=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO
+p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M
+p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4
+e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~>
+e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f.
+!=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO
+p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M
+p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4
+e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~>
+e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+
+!=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/
+qYUEq$O6k<qYpKkr;HQmqYL-k"p4i,"T85ps7uTjq>^<iqud')#6G)-qtO=u"^h**#QOl#s$'Zh
+!F#Buq#(!X!Wi?.!!*0*!;ZZpp%SGg!<QI!q>_!-!W`H%n,E;h!<QI!q>^KtqtpBlq>:*h?3((5
+rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~>
+e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+
+!=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/
+qYUEq$O6k<qYpKkr;HQmqYL-k"p4i,"T85ps7uTjq>^<iqud')#6G)-qtO=u"^h**#QOl#s$'Zh
+!F#Buq#(!X!Wi?.!!*0*!;ZZpp%SGg!<QI!q>_!-!W`H%n,E;h!<QI!q>^KtqtpBlq>:*h?3((5
+rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~>
+e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+
+!=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/
+qYUEq$O6k<qYpKkr;HQmqYL-k"p4i,"T85ps7uTjq>^<iqud')#6G)-qtO=u"^h**#QOl#s$'Zh
+!F#Buq#(!X!Wi?.!!*0*!;ZZpp%SGg!<QI!q>_!-!W`H%n,E;h!<QI!q>^KtqtpBlq>:*h?3((5
+rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~>
+e,TFH&GZA0"8;Zn"U4r)!!<E)rr0h8r;73+rr2]Sqtp<kZiU7/!!WH*"9J#mr<!u?!<E0%"9J`0
+6:1YErr)`bqRjB>#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@#
+"Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T%
+r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!<iJtqYpBm#6=i&rW3''rr!0!rVccl#mLS?q9o<C
+rXf55$NU>4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~>
+e,TFH&GZA0"8;Zn"U4r)!!<E)rr0h8r;73+rr2]Sqtp<kZiU7/!!WH*"9J#mr<!u?!<E0%"9J`0
+6:1YErr)`bqRjB>#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@#
+"Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T%
+r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!<iJtqYpBm#6=i&rW3''rr!0!rVccl#mLS?q9o<C
+rXf55$NU>4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~>
+e,TFH&GZA0"8;Zn"U4r)!!<E)rr0h8r;73+rr2]Sqtp<kZiU7/!!WH*"9J#mr<!u?!<E0%"9J`0
+6:1YErr)`bqRjB>#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@#
+"Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T%
+r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!<iJtqYpBm#6=i&rW3''rr!0!rVccl#mLS?q9o<C
+rXf55$NU>4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~>
+e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!<WE,n,NRn!WiB'rW!`9
+!s/c/%g4B[s7QBfr;ZE=!s0/1q"jmNrtYM1qtp<irr<#crW!!Nr9F4Xq#0pbao=U(rr)Wle,p!)
+rV=Y<!7V"up\4 at Vr;$<ir;HT?!!UaObl.;*rVl?Wrr)?\rQG<DeH,sRoC^T:!7^iBe,]UGs$+d1
+"4Qo<q=sX_e,f[#"jR,YbPV84r:Bp3%04iPp=0<MblJ+Kq#:9:%04iPp=00EqtTsboDe[bc2dsk
+r;+nBs8Ef:"9JQ3"9JQ!rr)Thq#Cm*!WiH+!W`>_!<3'*!X&f7!"K#,q;hR+~>
+e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!<WE,n,NRn!WiB'rW!`9
+!s/c/%g4B[s7QBfr;ZE=!s0/1q"jmNrtYM1qtp<irr<#crW!!Nr9F4Xq#0pbao=U(rr)Wle,p!)
+rV=Y<!7V"up\4 at Vr;$<ir;HT?!!UaObl.;*rVl?Wrr)?\rQG<DeH,sRoC^T:!7^iBe,]UGs$+d1
+"4Qo<q=sX_e,f[#"jR,YbPV84r:Bp3%04iPp=0<MblJ+Kq#:9:%04iPp=00EqtTsboDe[bc2dsk
+r;+nBs8Ef:"9JQ3"9JQ!rr)Thq#Cm*!WiH+!W`>_!<3'*!X&f7!"K#,q;hR+~>
+e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!<WE,n,NRn!WiB'rW!`9
+!s/c/%g4B[s7QBfr;ZE=!s0/1q"jmNrtYM1qtp<irr<#crW!!Nr9F4Xq#0pbao=U(rr)Wle,p!)
+rV=Y<!7V"up\4 at Vr;$<ir;HT?!!UaObl.;*rVl?Wrr)?\rQG<DeH,sRoC^T:!7^iBe,]UGs$+d1
+"4Qo<q=sX_e,f[#"jR,YbPV84r:Bp3%04iPp=0<MblJ+Kq#:9:%04iPp=00EqtTsboDe[bc2dsk
+r;+nBs8Ef:"9JQ3"9JQ!rr)Thq#Cm*!WiH+!W`>_!<3'*!X&f7!"K#,q;hR+~>
+e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5
+!=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo
+!:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr<K's$-J_#l+Do
+rqQKgrr<Pt!<*$+rqZE_rr)Ee!<E,oq#(0srW!#prql9c!<E,oq#(1)oD\RVrVZZhrVurtp\rYA
+s8N#u'abHP":";nq#1-YrXAl.!<N?*!WiD`!<3'"!r`0&(BOU5roF*0~>
+e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5
+!=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo
+!:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr<K's$-J_#l+Do
+rqQKgrr<Pt!<*$+rqZE_rr)Ee!<E,oq#(0srW!#prql9c!<E,oq#(1)oD\RVrVZZhrVurtp\rYA
+s8N#u'abHP":";nq#1-YrXAl.!<N?*!WiD`!<3'"!r`0&(BOU5roF*0~>
+e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5
+!=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo
+!:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr<K's$-J_#l+Do
+rqQKgrr<Pt!<*$+rqZE_rr)Ee!<E,oq#(0srW!#prql9c!<E,oq#(1)oD\RVrVZZhrVurtp\rYA
+s8N#u'abHP":";nq#1-YrXAl.!<N?*!WiD`!<3'"!r`0&(BOU5roF*0~>
+e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!<E6&rW3'#n,NRo!!3-&rW!E0
+q;qSOs82Qip&=pirqks[s8Mus&cVb/q#C9kqu?m#qtp?fs7uZ9s!@UBqu-Hm!!)rsp at e[jrWW<!
+rq?-ds7cNlq>U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn
+p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](<hrVQTn
+s8W)tg&M*O(BXgB!!*6's6K^XqZ$Np$NL2/!<WE)!TO1[!=&T6!<<*3q>01PJ,~>
+e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!<E6&rW3'#n,NRo!!3-&rW!E0
+q;qSOs82Qip&=pirqks[s8Mus&cVb/q#C9kqu?m#qtp?fs7uZ9s!@UBqu-Hm!!)rsp at e[jrWW<!
+rq?-ds7cNlq>U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn
+p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](<hrVQTn
+s8W)tg&M*O(BXgB!!*6's6K^XqZ$Np$NL2/!<WE)!TO1[!=&T6!<<*3q>01PJ,~>
+e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!<E6&rW3'#n,NRo!!3-&rW!E0
+q;qSOs82Qip&=pirqks[s8Mus&cVb/q#C9kqu?m#qtp?fs7uZ9s!@UBqu-Hm!!)rsp at e[jrWW<!
+rq?-ds7cNlq>U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn
+p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](<hrVQTn
+s8W)tg&M*O(BXgB!!*6's6K^XqZ$Np$NL2/!<WE)!TO1[!=&T6!<<*3q>01PJ,~>
+dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS
+&,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f
+s8Dfoqu6Qp"oeQ+rr#7X!<N/qp&4pmrqQBjq>^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr
+rVHKh!@-P'+8Pa3rVcg%rVlTg!s&<!rV[/ts8)j"qY1$fli$bUrr1[Ps8E*#!WW6"!WE$"rVulr
+!"B&4!=0#4!!*9(#6Fo2mf3P!!s&W-"TeT&"9JQ'rr2!YJ,~>
+dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS
+&,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f
+s8Dfoqu6Qp"oeQ+rr#7X!<N/qp&4pmrqQBjq>^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr
+rVHKh!@-P'+8Pa3rVcg%rVlTg!s&<!rV[/ts8)j"qY1$fli$bUrr1[Ps8E*#!WW6"!WE$"rVulr
+!"B&4!=0#4!!*9(#6Fo2mf3P!!s&W-"TeT&"9JQ'rr2!YJ,~>
+dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS
+&,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f
+s8Dfoqu6Qp"oeQ+rr#7X!<N/qp&4pmrqQBjq>^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr
+rVHKh!@-P'+8Pa3rVcg%rVlTg!s&<!rV[/ts8)j"qY1$fli$bUrr1[Ps8E*#!WW6"!WE$"rVulr
+!"B&4!=0#4!!*9(#6Fo2mf3P!!s&W-"TeT&"9JQ'rr2!YJ,~>
+eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ
+r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX
+s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y
+r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ<foDJ4RrkJ[qqu?Qds7Pj[r;HHGs8W'#!!3-#
+rW2ut!r`/urW!E1#mgV8"9Jof3&N]]2)t+`#<+P"!<<H/#Q=]+!WW6"roF*0~>
+eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ
+r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX
+s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y
+r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ<foDJ4RrkJ[qqu?Qds7Pj[r;HHGs8W'#!!3-#
+rW2ut!r`/urW!E1#mgV8"9Jof3&N]]2)t+`#<+P"!<<H/#Q=]+!WW6"roF*0~>
+eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ
+r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX
+s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y
+r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ<foDJ4RrkJ[qqu?Qds7Pj[r;HHGs8W'#!!3-#
+rW2ut!r`/urW!E1#mgV8"9Jof3&N]]2)t+`#<+P"!<<H/#Q=]+!WW6"roF*0~>
+g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p at J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk<
+Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^
+rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8
+Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].<Q
+!rrB&!<*#trtGA2rVup&!"o87!s)4nq>UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~>
+g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p at J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk<
+Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^
+rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8
+Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].<Q
+!rrB&!<*#trtGA2rVup&!"o87!s)4nq>UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~>
+g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p at J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk<
+Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^
+rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8
+Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].<Q
+!rrB&!<*#trtGA2rVup&!"o87!s)4nq>UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~>
+g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!<i]/!L`cW
+nFZSWo&0NXq=FXbnc*/*!LWWVp\Xp2s%rReqYg6bs7QWus7pC1!=!-6p\4R\p&FmbrUfa^#Qt>@
+!;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl at KcaE"D7N/
+oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6"
+!WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~>
+g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!<i]/!L`cW
+nFZSWo&0NXq=FXbnc*/*!LWWVp\Xp2s%rReqYg6bs7QWus7pC1!=!-6p\4R\p&FmbrUfa^#Qt>@
+!;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl at KcaE"D7N/
+oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6"
+!WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~>
+g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!<i]/!L`cW
+nFZSWo&0NXq=FXbnc*/*!LWWVp\Xp2s%rReqYg6bs7QWus7pC1!=!-6p\4R\p&FmbrUfa^#Qt>@
+!;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl at KcaE"D7N/
+oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6"
+!WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~>
+g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!<r`/!s*rI
+r:Ts_qVhGbrVuW_s7ZHg#R1;,rr2Zkao?5Mp\=X`nqD]$"Fu/W!!NFYJ+s!:q>C0iq>C-hrriE'
+"Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P
+Ieim8q#gkOL4B at +"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg].<Q!rrB&
+!<*#trtPG3rVup#!XK);!.Ob=r:][YrV?E`s8W''r:g$ard+bRrW!'&!!*#tjSs`~>
+g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!<r`/!s*rI
+r:Ts_qVhGbrVuW_s7ZHg#R1;,rr2Zkao?5Mp\=X`nqD]$"Fu/W!!NFYJ+s!:q>C0iq>C-hrriE'
+"Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P
+Ieim8q#gkOL4B at +"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg].<Q!rrB&
+!<*#trtPG3rVup#!XK);!.Ob=r:][YrV?E`s8W''r:g$ard+bRrW!'&!!*#tjSs`~>
+g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!<r`/!s*rI
+r:Ts_qVhGbrVuW_s7ZHg#R1;,rr2Zkao?5Mp\=X`nqD]$"Fu/W!!NFYJ+s!:q>C0iq>C-hrriE'
+"Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P
+Ieim8q#gkOL4B at +"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg].<Q!rrB&
+!<*#trtPG3rVup#!XK);!.Ob=r:][YrV?E`s8W''r:g$ard+bRrW!'&!!*#tjSs`~>
+eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U=
+r;6BfrSdbeqtg6_oDA@\OpD*eq>U<iao?e^n,N7YC'4V?!so57!!<?-!<;ojqXXR_qu69`D$1+H
+"oS8kr;-<frq?<eqIfp7!"8DfqYt47!<`Q+"9nm=rV-3hBEJ50pB(a)#6=`#qY(3r#6P)7#6P/1
+"_dr0A./SK"9JW.!Wi^Ap\t$cC'+SA!<r`;#&O,3q?m74"8qok!!EK+!WMirqt^0dg].<Q!rrB&
+!<*#trtPG3rVup!"p,/9"8;TgpAFOYs7?3\s8W'&nGE+\pA,*o!!E?'!<2uYs*t~>
+eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U=
+r;6BfrSdbeqtg6_oDA@\OpD*eq>U<iao?e^n,N7YC'4V?!so57!!<?-!<;ojqXXR_qu69`D$1+H
+"oS8kr;-<frq?<eqIfp7!"8DfqYt47!<`Q+"9nm=rV-3hBEJ50pB(a)#6=`#qY(3r#6P)7#6P/1
+"_dr0A./SK"9JW.!Wi^Ap\t$cC'+SA!<r`;#&O,3q?m74"8qok!!EK+!WMirqt^0dg].<Q!rrB&
+!<*#trtPG3rVup!"p,/9"8;TgpAFOYs7?3\s8W'&nGE+\pA,*o!!E?'!<2uYs*t~>
+eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U=
+r;6BfrSdbeqtg6_oDA@\OpD*eq>U<iao?e^n,N7YC'4V?!so57!!<?-!<;ojqXXR_qu69`D$1+H
+"oS8kr;-<frq?<eqIfp7!"8DfqYt47!<`Q+"9nm=rV-3hBEJ50pB(a)#6=`#qY(3r#6P)7#6P/1
+"_dr0A./SK"9JW.!Wi^Ap\t$cC'+SA!<r`;#&O,3q?m74"8qok!!EK+!WMirqt^0dg].<Q!rrB&
+!<*#trtPG3rVup!"p,/9"8;TgpAFOYs7?3\s8W'&nGE+\pA,*o!!E?'!<2uYs*t~>
+dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!<N-#rrMWi%g!%>!!<<-!!!N0
+;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/
+rV6BeqYg<kqt^3j!!iZ2#5S/jq#L[#!sAT)!XA^%rD-5iY4hbi"p+l."oeH!9FM1.!s8Z1!!<B,
+!<6!u&HW+=#lk#/"U,*(qY^6n#7gh?!s9;E"p.^$;G[M!q=jgf"on`,rVQNgr:eqFs8E*#!WW6"
+!WE$*rVuis!!E?("9AQ%q??Khnbi4[q>^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~>
+dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!<N-#rrMWi%g!%>!!<<-!!!N0
+;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/
+rV6BeqYg<kqt^3j!!iZ2#5S/jq#L[#!sAT)!XA^%rD-5iY4hbi"p+l."oeH!9FM1.!s8Z1!!<B,
+!<6!u&HW+=#lk#/"U,*(qY^6n#7gh?!s9;E"p.^$;G[M!q=jgf"on`,rVQNgr:eqFs8E*#!WW6"
+!WE$*rVuis!!E?("9AQ%q??Khnbi4[q>^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~>
+dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!<N-#rrMWi%g!%>!!<<-!!!N0
+;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/
+rV6BeqYg<kqt^3j!!iZ2#5S/jq#L[#!sAT)!XA^%rD-5iY4hbi"p+l."oeH!9FM1.!s8Z1!!<B,
+!<6!u&HW+=#lk#/"U,*(qY^6n#7gh?!s9;E"p.^$;G[M!q=jgf"on`,rVQNgr:eqFs8E*#!WW6"
+!WE$*rVuis!!E?("9AQ%q??Khnbi4[q>^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~>
+d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du
+r;5IQ(B4 at 4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH<grql`n
+r;cp!rr2k0rr;utrql`p!!3-%!<;up2?3aY$31)3#6Ou,4TGWir;6$a!rrW.!WMup!<NZ0"98E+
+!!iT+"oeW(!rr<%!WW3$!<<0$rVo+_#Qt,2!!WH*!rtUf!!3,upAY4#!!<8ss8;flpY,ZIrW<-%
+!!*!!)#sU7s8Dus!!!$"!sSf-s7uZoqu6Kls8Dcns8N#trVcrts8;osqu?j$!!*#tjSs`~>
+d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du
+r;5IQ(B4 at 4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH<grql`n
+r;cp!rr2k0rr;utrql`p!!3-%!<;up2?3aY$31)3#6Ou,4TGWir;6$a!rrW.!WMup!<NZ0"98E+
+!!iT+"oeW(!rr<%!WW3$!<<0$rVo+_#Qt,2!!WH*!rtUf!!3,upAY4#!!<8ss8;flpY,ZIrW<-%
+!!*!!)#sU7s8Dus!!!$"!sSf-s7uZoqu6Kls8Dcns8N#trVcrts8;osqu?j$!!*#tjSs`~>
+d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du
+r;5IQ(B4 at 4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH<grql`n
+r;cp!rr2k0rr;utrql`p!!3-%!<;up2?3aY$31)3#6Ou,4TGWir;6$a!rrW.!WMup!<NZ0"98E+
+!!iT+"oeW(!rr<%!WW3$!<<0$rVo+_#Qt,2!!WH*!rtUf!!3,upAY4#!!<8ss8;flpY,ZIrW<-%
+!!*!!)#sU7s8Dus!!!$"!sSf-s7uZoqu6Kls8Dcns8N#trVcrts8;osqu?j$!!*#tjSs`~>
+d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG
+!<FABq#:-gs8W)srVk+B!WE-!!#u=G!!r`-!<iK)"T&,lo_ndhrr;ou!!3-#rr;rorrW0!rr)mM
+!<E/trr<')$/XCl!<E9'!!<5Yg&CjFr<E?(#6sbrrWrQ*!WW3%"ptA;!<E/n!#5M7!<<'$$NU7[
+g"l`4!rro6%,T_.rr!3)"9Jl0r;-Egrr2]Is8W'#!!3-#rW*T1rr2rrs8N*#%Km=D!#bV2l2Lqd
+s8W)us82j"!WW6"roF*0~>
+d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG
+!<FABq#:-gs8W)srVk+B!WE-!!#u=G!!r`-!<iK)"T&,lo_ndhrr;ou!!3-#rr;rorrW0!rr)mM
+!<E/trr<')$/XCl!<E9'!!<5Yg&CjFr<E?(#6sbrrWrQ*!WW3%"ptA;!<E/n!#5M7!<<'$$NU7[
+g"l`4!rro6%,T_.rr!3)"9Jl0r;-Egrr2]Is8W'#!!3-#rW*T1rr2rrs8N*#%Km=D!#bV2l2Lqd
+s8W)us82j"!WW6"roF*0~>
+d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG
+!<FABq#:-gs8W)srVk+B!WE-!!#u=G!!r`-!<iK)"T&,lo_ndhrr;ou!!3-#rr;rorrW0!rr)mM
+!<E/trr<')$/XCl!<E9'!!<5Yg&CjFr<E?(#6sbrrWrQ*!WW3%"ptA;!<E/n!#5M7!<<'$$NU7[
+g"l`4!rro6%,T_.rr!3)"9Jl0r;-Egrr2]Is8W'#!!3-#rW*T1rr2rrs8N*#%Km=D!#bV2l2Lqd
+s8W)us82j"!WW6"roF*0~>
+dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr
+rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP
+r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_
+!!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg].<Q!rrB&!<*!'s8N#trVuos!WN-&"Vq+3rosFdrr<#t
+s8Vus"9JQ'rr2!YJ,~>
+dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr
+rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP
+r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_
+!!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg].<Q!rrB&!<*!'s8N#trVuos!WN-&"Vq+3rosFdrr<#t
+s8Vus"9JQ'rr2!YJ,~>
+dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr
+rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP
+r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_
+!!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg].<Q!rrB&!<*!'s8N#trVuos!WN-&"Vq+3rosFdrr<#t
+s8Vus"9JQ'rr2!YJ,~>
+dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B)
+o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P
+s8;ls!<WMprp]U\!!!B,!"nAmo)AG.!!rW=rVcWm"98H-!<<?)!rr<3s7QF%!<<-"rr<$)!:g!Y
+s8;ir'*eL;mf3"[r=AuE!>,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut!<E6-!!E<"rr20^"oeQ%
+rr<#r!!E?'!<2uYs*t~>
+dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B)
+o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P
+s8;ls!<WMprp]U\!!!B,!"nAmo)AG.!!rW=rVcWm"98H-!<<?)!rr<3s7QF%!<<-"rr<$)!:g!Y
+s8;ir'*eL;mf3"[r=AuE!>,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut!<E6-!!E<"rr20^"oeQ%
+rr<#r!!E?'!<2uYs*t~>
+dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B)
+o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P
+s8;ls!<WMprp]U\!!!B,!"nAmo)AG.!!rW=rVcWm"98H-!<<?)!rr<3s7QF%!<<-"rr<$)!:g!Y
+s8;ir'*eL;mf3"[r=AuE!>,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut!<E6-!!E<"rr20^"oeQ%
+rr<#r!!E?'!<2uYs*t~>
+dJj at GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4 at 6r;?Nl
+r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!!<Q.#:]KHrVHKbrr;utr;ls#!!*#urVQTrrVulr
+!$VFDs8;ls!<EE)o)8C_-OC"Z#m:M)r:Tj_-n$bErr;cg./j5Q"on`,!XSl-s7QF<!<<-"rs0&6
+"T7lhs8FGM!=&`3!<)]hrr"c(/cP\;rVH6eqV2&MrW<-%!!*!!&HDb/s8Dut!<E?/!!WW*p[m_M
+"oeQ%rr<#r!!E?'!<2uYs*t~>
+dJj at GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4 at 6r;?Nl
+r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!!<Q.#:]KHrVHKbrr;utr;ls#!!*#urVQTrrVulr
+!$VFDs8;ls!<EE)o)8C_-OC"Z#m:M)r:Tj_-n$bErr;cg./j5Q"on`,!XSl-s7QF<!<<-"rs0&6
+"T7lhs8FGM!=&`3!<)]hrr"c(/cP\;rVH6eqV2&MrW<-%!!*!!&HDb/s8Dut!<E?/!!WW*p[m_M
+"oeQ%rr<#r!!E?'!<2uYs*t~>
+dJj at GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4 at 6r;?Nl
+r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!!<Q.#:]KHrVHKbrr;utr;ls#!!*#urVQTrrVulr
+!$VFDs8;ls!<EE)o)8C_-OC"Z#m:M)r:Tj_-n$bErr;cg./j5Q"on`,!XSl-s7QF<!<<-"rs0&6
+"T7lhs8FGM!=&`3!<)]hrr"c(/cP\;rVH6eqV2&MrW<-%!!*!!&HDb/s8Dut!<E?/!!WW*p[m_M
+"oeQ%rr<#r!!E?'!<2uYs*t~>
+dJjIKpU at lM_7[DY^&e9<!r`)triZ83qu$!Ts7cHirV-<Vs$$ShkPtef!Wr?!r;GUS&cVh1r;6Bf
+q#(!gq$R8;qY:!frrN)tc2RhD!W<!;%R*<K5<hD!p at e@QrV??is8N&s!WW9%!<3#squ6`rs8Mut
+/cbtPr;Q`t#6Xo"q=s^]5lhAo!s?:1qt9OYqY0sgrq?9g70!Jl!!<Z2!(]?Pp&H?=!!*'!"VC_;
+oDJ.TqtE>U!!3<-\,5^mq=jpdrVlcfs7uQjg].<Q!rrB&!<*!0s8N#trVulu!<WB*!!W#mkl1hc
+s8W)us82j"!WW6"roF*0~>
+dJjIKpU at lM_7[DY^&e9<!r`)triZ83qu$!Ts7cHirV-<Vs$$ShkPtef!Wr?!r;GUS&cVh1r;6Bf
+q#(!gq$R8;qY:!frrN)tc2RhD!W<!;%R*<K5<hD!p at e@QrV??is8N&s!WW9%!<3#squ6`rs8Mut
+/cbtPr;Q`t#6Xo"q=s^]5lhAo!s?:1qt9OYqY0sgrq?9g70!Jl!!<Z2!(]?Pp&H?=!!*'!"VC_;
+oDJ.TqtE>U!!3<-\,5^mq=jpdrVlcfs7uQjg].<Q!rrB&!<*!0s8N#trVulu!<WB*!!W#mkl1hc
+s8W)us82j"!WW6"roF*0~>
+dJjIKpU at lM_7[DY^&e9<!r`)triZ83qu$!Ts7cHirV-<Vs$$ShkPtef!Wr?!r;GUS&cVh1r;6Bf
+q#(!gq$R8;qY:!frrN)tc2RhD!W<!;%R*<K5<hD!p at e@QrV??is8N&s!WW9%!<3#squ6`rs8Mut
+/cbtPr;Q`t#6Xo"q=s^]5lhAo!s?:1qt9OYqY0sgrq?9g70!Jl!!<Z2!(]?Pp&H?=!!*'!"VC_;
+oDJ.TqtE>U!!3<-\,5^mq=jpdrVlcfs7uQjg].<Q!rrB&!<*!0s8N#trVulu!<WB*!!W#mkl1hc
+s8W)us82j"!WW6"roF*0~>
+dJjsXlj3ap$NgM3!WiB&!X&Asqtp<iric>4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX
+s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8<!!!WW6"s8Dip
+!r`/urW"PO!<;us!!*3/q"Odbs8)`q#6G,1!N5\jrqZHfr;?EfpA"Mc!X/T0!X)[(qtTjb,QRlF
+s8NT3"UY5)q=FX\rrE-#!!*(nq>U<erqH?hq>:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54
+pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~>
+dJjsXlj3ap$NgM3!WiB&!X&Asqtp<iric>4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX
+s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8<!!!WW6"s8Dip
+!r`/urW"PO!<;us!!*3/q"Odbs8)`q#6G,1!N5\jrqZHfr;?EfpA"Mc!X/T0!X)[(qtTjb,QRlF
+s8NT3"UY5)q=FX\rrE-#!!*(nq>U<erqH?hq>:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54
+pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~>
+dJjsXlj3ap$NgM3!WiB&!X&Asqtp<iric>4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX
+s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8<!!!WW6"s8Dip
+!r`/urW"PO!<;us!!*3/q"Odbs8)`q#6G,1!N5\jrqZHfr;?EfpA"Mc!X/T0!X)[(qtTjb,QRlF
+s8NT3"UY5)q=FX\rrE-#!!*(nq>U<erqH?hq>:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54
+pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~>
+f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N,
+"98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c
+rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!<rQ(q"sm`rr$d:"9SZ/!WVlnp%eF\qtg<g
+qYg21!<N6("on5mquHct!<<6&!s/K'!!<9"rW3-/!WW/mqYL$fEWZCD!WWH#rUp-fr;?Tks8Drs
+q:krLrYGP:!!<6%!<;oprqZNm"98N*!!*6&rV>^X"oeQ%rr<#r!!E?'!<2uYs*t~>
+f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N,
+"98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c
+rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!<rQ(q"sm`rr$d:"9SZ/!WVlnp%eF\qtg<g
+qYg21!<N6("on5mquHct!<<6&!s/K'!!<9"rW3-/!WW/mqYL$fEWZCD!WWH#rUp-fr;?Tks8Drs
+q:krLrYGP:!!<6%!<;oprqZNm"98N*!!*6&rV>^X"oeQ%rr<#r!!E?'!<2uYs*t~>
+f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N,
+"98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c
+rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!<rQ(q"sm`rr$d:"9SZ/!WVlnp%eF\qtg<g
+qYg21!<N6("on5mquHct!<<6&!s/K'!!<9"rW3-/!WW/mqYL$fEWZCD!WWH#rUp-fr;?Tks8Drs
+q:krLrYGP:!!<6%!<;oprqZNm"98N*!!*6&rV>^X"oeQ%rr<#r!!E?'!<2uYs*t~>
+f`*#kr;Q`rq=F at Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s
+!!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl(
+s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn
+!<W<-#Qk,0"98`0r;-Nq"9JQ$rV-'brVlm$!!3-(G4kS-pANJ?s8Ef7"TSc-#m,DKs7Q6epB(L$
+!X&W-G5_@'rrrE%s8N&uqu?j$!!*#tjSs`~>
+f`*#kr;Q`rq=F at Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s
+!!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl(
+s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn
+!<W<-#Qk,0"98`0r;-Nq"9JQ$rV-'brVlm$!!3-(G4kS-pANJ?s8Ef7"TSc-#m,DKs7Q6epB(L$
+!X&W-G5_@'rrrE%s8N&uqu?j$!!*#tjSs`~>
+f`*#kr;Q`rq=F at Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s
+!!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl(
+s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn
+!<W<-#Qk,0"98`0r;-Nq"9JQ$rV-'brVlm$!!3-(G4kS-pANJ?s8Ef7"TSc-#m,DKs7Q6epB(L$
+!X&W-G5_@'rrrE%s8N&uqu?j$!!*#tjSs`~>
+f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ at p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s
+!<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u
+rVQTrrVulr!*'%"s8;ls!<ii1rV-0bq"sab!=8r6"U8]9qtp3hq"adcq"ad^T`>3"!!)unq?[B-
+!XSu5"Ub>4!<WArr;Zs(!<<#srVc`orr<3*!!NH+?2=Nfdf9 at H(B=U=#QY,:!quNerq?-g!X&K)
+!Y,51rTX=crr<#ts8Vus"9JQ'rr2!YJ,~>
+f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ at p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s
+!<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u
+rVQTrrVulr!*'%"s8;ls!<ii1rV-0bq"sab!=8r6"U8]9qtp3hq"adcq"ad^T`>3"!!)unq?[B-
+!XSu5"Ub>4!<WArr;Zs(!<<#srVc`orr<3*!!NH+?2=Nfdf9 at H(B=U=#QY,:!quNerq?-g!X&K)
+!Y,51rTX=crr<#ts8Vus"9JQ'rr2!YJ,~>
+f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ at p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s
+!<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u
+rVQTrrVulr!*'%"s8;ls!<ii1rV-0bq"sab!=8r6"U8]9qtp3hq"adcq"ad^T`>3"!!)unq?[B-
+!XSu5"Ub>4!<WArr;Zs(!<<#srVc`orr<3*!!NH+?2=Nfdf9 at H(B=U=#QY,:!quNerq?-g!X&K)
+!Y,51rTX=crr<#ts8Vus"9JQ'rr2!YJ,~>
+fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]#
+!W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c'
+s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WW</!Xf29s7u]hrVZTdrqufno(rRk"q:e7qYC<r
+#Q=l;!!rf2$3^D0qtg?q"9:n[rC.5b7K<Pn!"028"T82mq:#BDrYGP=!WiT,"qgb0p\ame"TSZ/%
+KZh7q>KRX"oeQ%rr<#r!!E?'!<2uYs*t~>
+fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]#
+!W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c'
+s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WW</!Xf29s7u]hrVZTdrqufno(rRk"q:e7qYC<r
+#Q=l;!!rf2$3^D0qtg?q"9:n[rC.5b7K<Pn!"028"T82mq:#BDrYGP=!WiT,"qgb0p\ame"TSZ/%
+KZh7q>KRX"oeQ%rr<#r!!E?'!<2uYs*t~>
+fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]#
+!W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c'
+s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WW</!Xf29s7u]hrVZTdrqufno(rRk"q:e7qYC<r
+#Q=l;!!rf2$3^D0qtg?q"9:n[rC.5b7K<Pn!"028"T82mq:#BDrYGP=!WiT,"qgb0p\ame"TSZ/%
+KZh7q>KRX"oeQ%rr<#r!!E?'!<2uYs*t~>
+g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$
+!<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.!<W`2!!<?*!=8o+rW*-,!!*#u
+rVQTrrVulr!'UD`s8;ls!<NB)!!EQ3#64c,"98H+"9SWUrVcHhs8)Zmp[S4ZrW*?.!sJ;mrY#D9%
+fck<":bY<#6Y&'rquft"9SN%!<NE&!!`Q-&IU2iqYenCs8Ef?!<E0%#lk+krq,m_p':X&!<WB.#
+P7rZrrrE%s8N&uqu?j$!!*#tjSs`~>
+g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$
+!<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.!<W`2!!<?*!=8o+rW*-,!!*#u
+rVQTrrVulr!'UD`s8;ls!<NB)!!EQ3#64c,"98H+"9SWUrVcHhs8)Zmp[S4ZrW*?.!sJ;mrY#D9%
+fck<":bY<#6Y&'rquft"9SN%!<NE&!!`Q-&IU2iqYenCs8Ef?!<E0%#lk+krq,m_p':X&!<WB.#
+P7rZrrrE%s8N&uqu?j$!!*#tjSs`~>
+g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$
+!<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.!<W`2!!<?*!=8o+rW*-,!!*#u
+rVQTrrVulr!'UD`s8;ls!<NB)!!EQ3#64c,"98H+"9SWUrVcHhs8)Zmp[S4ZrW*?.!sJ;mrY#D9%
+fck<":bY<#6Y&'rquft"9SN%!<NE&!!`Q-&IU2iqYenCs8Ef?!<E0%#lk+krq,m_p':X&!<WB.#
+P7rZrrrE%s8N&uqu?j$!!*#tjSs`~>
+g&D'Nrr3r:rVQKkoEG9r!"&r8!!<?+!"K/<!<rQ%rql\os8W&qr!iVrrVlcaroOOf$31PCqZ-Ws
+r;Zm"!!3)uf`2!N%JKeqrnn"](&n"'rpTg2rrN*"rW!oAr;6KS!!NE(%fm%F!<rN)"9AH#!!!-%
+!<3#squ6`rs8Mut&-2e2r;Q`t"Tel1!rri3!!N9$64<i$#lk2Frr2Wcq>^']rVH*`$3:A3$i^"t
+!Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!<N-'`\:>$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of
+!!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~>
+g&D'Nrr3r:rVQKkoEG9r!"&r8!!<?+!"K/<!<rQ%rql\os8W&qr!iVrrVlcaroOOf$31PCqZ-Ws
+r;Zm"!!3)uf`2!N%JKeqrnn"](&n"'rpTg2rrN*"rW!oAr;6KS!!NE(%fm%F!<rN)"9AH#!!!-%
+!<3#squ6`rs8Mut&-2e2r;Q`t"Tel1!rri3!!N9$64<i$#lk2Frr2Wcq>^']rVH*`$3:A3$i^"t
+!Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!<N-'`\:>$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of
+!!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~>
+g&D'Nrr3r:rVQKkoEG9r!"&r8!!<?+!"K/<!<rQ%rql\os8W&qr!iVrrVlcaroOOf$31PCqZ-Ws
+r;Zm"!!3)uf`2!N%JKeqrnn"](&n"'rpTg2rrN*"rW!oAr;6KS!!NE(%fm%F!<rN)"9AH#!!!-%
+!<3#squ6`rs8Mut&-2e2r;Q`t"Tel1!rri3!!N9$64<i$#lk2Frr2Wcq>^']rVH*`$3:A3$i^"t
+!Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!<N-'`\:>$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of
+!!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~>
+g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+
+!<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E<rrN*"r;[f9qY^3i#6Fu5"onu3!"8l.#l*lk"p"](
+rr;rorrW0!rr)m;!<E/trr<'(!##>4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ,
+"qL\:!!3-)!"BJ>s7cKm"pb2B!<<ZB!!*`5#R181!rrf2!;Y(Cs8Ec6%KQP1"9JT"p at A4WrW!-2
+!!NK1!;u'\"oeQ%rr<#r!!E?'!<2uYs*t~>
+g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+
+!<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E<rrN*"r;[f9qY^3i#6Fu5"onu3!"8l.#l*lk"p"](
+rr;rorrW0!rr)m;!<E/trr<'(!##>4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ,
+"qL\:!!3-)!"BJ>s7cKm"pb2B!<<ZB!!*`5#R181!rrf2!;Y(Cs8Ec6%KQP1"9JT"p at A4WrW!-2
+!!NK1!;u'\"oeQ%rr<#r!!E?'!<2uYs*t~>
+g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+
+!<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E<rrN*"r;[f9qY^3i#6Fu5"onu3!"8l.#l*lk"p"](
+rr;rorrW0!rr)m;!<E/trr<'(!##>4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ,
+"qL\:!!3-)!"BJ>s7cKm"pb2B!<<ZB!!*`5#R181!rrf2!;Y(Cs8Ec6%KQP1"9JT"p at A4WrW!-2
+!!NK1!;u'\"oeQ%rr<#r!!E?'!<2uYs*t~>
+fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ*
+!WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu
+rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls!<O&;!<sG\*$lLP*Z?%A)BSq^!<M6PrqZTlpAapas8E!!
+"p"l)qu6Wr"U"f+"9\]+!?(q6rrrN)!s&H'rYcCi*$-"=+;u.D!!!$"jSo/Ws8L[Ns8F)F!!3-$
+!<<3%jRiEKq#LNs"onW-#6<ias8N#trVuilrqZQtrVuiqrr;lr"9JQ'rr2!YJ,~>
+fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ*
+!WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu
+rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls!<O&;!<sG\*$lLP*Z?%A)BSq^!<M6PrqZTlpAapas8E!!
+"p"l)qu6Wr"U"f+"9\]+!?(q6rrrN)!s&H'rYcCi*$-"=+;u.D!!!$"jSo/Ws8L[Ns8F)F!!3-$
+!<<3%jRiEKq#LNs"onW-#6<ias8N#trVuilrqZQtrVuiqrr;lr"9JQ'rr2!YJ,~>
+fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ*
+!WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu
+rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls!<O&;!<sG\*$lLP*Z?%A)BSq^!<M6PrqZTlpAapas8E!!
+"p"l)qu6Wr"U"f+"9\]+!?(q6rrrN)!s&H'rYcCi*$-"=+;u.D!!!$"jSo/Ws8L[Ns8F)F!!3-$
+!<<3%jRiEKq#LNs"onW-#6<ias8N#trVuilrqZQtrVuiqrr;lr"9JQ'rr2!YJ,~>
+e,TII(]F at 6!W`6!s8N&orr<0%s8;ot!WE#trR(Z at rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM
+$NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T
+rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu
+quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\
+r;d'#!!E?'!<2uYs*t~>
+e,TII(]F at 6!W`6!s8N&orr<0%s8;ot!WE#trR(Z at rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM
+$NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T
+rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu
+quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\
+r;d'#!!E?'!<2uYs*t~>
+e,TII(]F at 6!W`6!s8N&orr<0%s8;ot!WE#trR(Z at rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM
+$NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T
+rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu
+quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\
+r;d'#!!E?'!<2uYs*t~>
+e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ<!!3-$!!3&trVkLM
+&,Z/$rV-0bo`G3trqZKkq9K!@rW2rts8Eo4!!NK,Z2=5%#QP/4!<<0#rrE*#!!*#urVlg5p9al'
+[.+S,!!**"r;Q`t!<<-#!rW)tq#:Nu!XAr2Yl+=s)=pK*#QkR at r;6NjqtU-t!!!H.9)SAYpAb6l
+!;QR)rr;lt!!*'#ZMXUkoDe^bg].<Qq#L['#QP@;Zi^+)#lt)/"9u6AWi`c"Zj*V8Wj/q7"oSE(
+!WW6"roF*0~>
+e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ<!!3-$!!3&trVkLM
+&,Z/$rV-0bo`G3trqZKkq9K!@rW2rts8Eo4!!NK,Z2=5%#QP/4!<<0#rrE*#!!*#urVlg5p9al'
+[.+S,!!**"r;Q`t!<<-#!rW)tq#:Nu!XAr2Yl+=s)=pK*#QkR at r;6NjqtU-t!!!H.9)SAYpAb6l
+!;QR)rr;lt!!*'#ZMXUkoDe^bg].<Qq#L['#QP@;Zi^+)#lt)/"9u6AWi`c"Zj*V8Wj/q7"oSE(
+!WW6"roF*0~>
+e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ<!!3-$!!3&trVkLM
+&,Z/$rV-0bo`G3trqZKkq9K!@rW2rts8Eo4!!NK,Z2=5%#QP/4!<<0#rrE*#!!*#urVlg5p9al'
+[.+S,!!**"r;Q`t!<<-#!rW)tq#:Nu!XAr2Yl+=s)=pK*#QkR at r;6NjqtU-t!!!H.9)SAYpAb6l
+!;QR)rr;lt!!*'#ZMXUkoDe^bg].<Qq#L['#QP@;Zi^+)#lt)/"9u6AWi`c"Zj*V8Wj/q7"oSE(
+!WW6"roF*0~>
+e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^
+p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[#
+!;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws
+quHNl&,uV,!WW6$!<e_brUp-brS.APrqQR!#6Or."9A]'!!!'!!X9#6"Tel4"n;Qp"9ei7rWE*!
+"9JQ'rr2!YJ,~>
+e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^
+p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[#
+!;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws
+quHNl&,uV,!WW6$!<e_brUp-brS.APrqQR!#6Or."9A]'!!!'!!X9#6"Tel4"n;Qp"9ei7rWE*!
+"9JQ'rr2!YJ,~>
+e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^
+p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[#
+!;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws
+quHNl&,uV,!WW6$!<e_brUp-brS.APrqQR!#6Or."9A]'!!!'!!X9#6"Tel4"n;Qp"9ei7rWE*!
+"9JQ'rr2!YJ,~>
+e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map at iud!tbS=!=8i+!!<,urn.5]rql]h
+o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs
+!!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl
+&,uV,!WW6$!<NB"qtg*bqV2&MrqHKu$3C;8!WWH&!"&`.!X&f8!<iN-#Oqd!"Tno.#6b,/rW!'&
+!!*#tjSs`~>
+e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map at iud!tbS=!=8i+!!<,urn.5]rql]h
+o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs
+!!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl
+&,uV,!WW6$!<NB"qtg*bqV2&MrqHKu$3C;8!WWH&!"&`.!X&f8!<iN-#Oqd!"Tno.#6b,/rW!'&
+!!*#tjSs`~>
+e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map at iud!tbS=!=8i+!!<,urn.5]rql]h
+o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs
+!!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl
+&,uV,!WW6$!<NB"qtg*bqV2&MrqHKu$3C;8!WWH&!"&`.!X&f8!<iN-#Oqd!"Tno.#6b,/rW!'&
+!!*#tjSs`~>
+e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap at eC^qihHo#R1G0!!<,urn.5]rqu]i
+r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t
+!!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl
+&,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'%
+!WW6"roF*0~>
+e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap at eC^qihHo#R1G0!!<,urn.5]rqu]i
+r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t
+!!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl
+&,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'%
+!WW6"roF*0~>
+e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap at eC^qihHo#R1G0!!<,urn.5]rqu]i
+r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t
+!!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl
+&,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'%
+!WW6"roF*0~>
+e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL
+s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<<qu?p)"UOVs$3C;4!<E0$s8N*"!<<-!s8Drs(]4=8
+$39o1!<<-#s8;ls!<E0$!!<)urqZR!r;[-+"p=o6q>V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e
+!W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8
+$2so-!WW6"roF*0~>
+e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL
+s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<<qu?p)"UOVs$3C;4!<E0$s8N*"!<<-!s8Drs(]4=8
+$39o1!<<-#s8;ls!<E0$!!<)urqZR!r;[-+"p=o6q>V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e
+!W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8
+$2so-!WW6"roF*0~>
+e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL
+s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<<qu?p)"UOVs$3C;4!<E0$s8N*"!<<-!s8Drs(]4=8
+$39o1!<<-#s8;ls!<E0$!!<)urqZR!r;[-+"p=o6q>V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e
+!W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8
+$2so-!WW6"roF*0~>
+e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL
+rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4
+#Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_
+!!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.%
+0ZY1"9JQ'rr2!YJ,~>
+e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL
+rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4
+#Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_
+!!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.%
+0ZY1"9JQ'rr2!YJ,~>
+e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL
+rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4
+#Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_
+!!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.%
+0ZY1"9JQ'rr2!YJ,~>
+e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK]
+#lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6'
+rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg#
+"9SDrqYC*i!!rZ+!ri/urYtnB"98H&#6+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k=
+"98Q)!XJf/"nVcr!<</c!!!*!!!E?'!<2uYs*t~>
+e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK]
+#lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6'
+rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg#
+"9SDrqYC*i!!rZ+!ri/urYtnB"98H&#6+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k=
+"98Q)!XJf/"nVcr!<</c!!!*!!!E?'!<2uYs*t~>
+e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK]
+#lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6'
+rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg#
+"9SDrqYC*i!!rZ+!ri/urYtnB"98H&#6+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k=
+"98Q)!XJf/"nVcr!<</c!!!*!!!E?'!<2uYs*t~>
+eGoRJ)#aI!$igb;"oo&5!!!W<!<2s%!"Ahorq+V<#P\#mrV-'[s7uZArt"r)rpTmalO"+%$3:(m
+pAWbF&,lM$s6]dg!XADup&4mirm(NErW2rt+8c'3md:)HrqlZp!sJc,!<<0#rrE*#!!*'!rqQKc
+rquh"rVus!!<E/trr<'"!sJc,rql]onGE%Rq>U'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk
+o`P<t!!<-!rr;s%!!!0&"9ST$rV?HkqYU0hqu-Qt"U"`(!ri5uf)H9W#m(b?$j$P3!"8i-!s&YX
+!!E?'!<2uYs*t~>
+eGoRJ)#aI!$igb;"oo&5!!!W<!<2s%!"Ahorq+V<#P\#mrV-'[s7uZArt"r)rpTmalO"+%$3:(m
+pAWbF&,lM$s6]dg!XADup&4mirm(NErW2rt+8c'3md:)HrqlZp!sJc,!<<0#rrE*#!!*'!rqQKc
+rquh"rVus!!<E/trr<'"!sJc,rql]onGE%Rq>U'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk
+o`P<t!!<-!rr;s%!!!0&"9ST$rV?HkqYU0hqu-Qt"U"`(!ri5uf)H9W#m(b?$j$P3!"8i-!s&YX
+!!E?'!<2uYs*t~>
+eGoRJ)#aI!$igb;"oo&5!!!W<!<2s%!"Ahorq+V<#P\#mrV-'[s7uZArt"r)rpTmalO"+%$3:(m
+pAWbF&,lM$s6]dg!XADup&4mirm(NErW2rt+8c'3md:)HrqlZp!sJc,!<<0#rrE*#!!*'!rqQKc
+rquh"rVus!!<E/trr<'"!sJc,rql]onGE%Rq>U'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk
+o`P<t!!<-!rr;s%!!!0&"9ST$rV?HkqYU0hqu-Qt"U"`(!ri5uf)H9W#m(b?$j$P3!"8i-!s&YX
+!!E?'!<2uYs*t~>
+f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o
+rq>%F&,6)&oDRhS!;uihs7uZmp<N[=rW2uu+:88Br;HWoqu-Qn!<E?($ip>/s8N*"!<`DnoD\F^
+rql]os8$%%!rr?%s8;ls!=Sr3!<N0!rU^$fo(r at Jq>LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au
+lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur!<E?($ig;,s8COK%K5u#&-)\?!!!N0$jd6i
+!!E?'!<2uYs*t~>
+f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o
+rq>%F&,6)&oDRhS!;uihs7uZmp<N[=rW2uu+:88Br;HWoqu-Qn!<E?($ip>/s8N*"!<`DnoD\F^
+rql]os8$%%!rr?%s8;ls!=Sr3!<N0!rU^$fo(r at Jq>LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au
+lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur!<E?($ig;,s8COK%K5u#&-)\?!!!N0$jd6i
+!!E?'!<2uYs*t~>
+f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o
+rq>%F&,6)&oDRhS!;uihs7uZmp<N[=rW2uu+:88Br;HWoqu-Qn!<E?($ip>/s8N*"!<`DnoD\F^
+rql]os8$%%!rr?%s8;ls!=Sr3!<N0!rU^$fo(r at Jq>LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au
+lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur!<E?($ig;,s8COK%K5u#&-)\?!!!N0$jd6i
+!!E?'!<2uYs*t~>
+f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H
+q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!<N9+gY10/
+g=k*)f at 8LS!<<-#s8;ls!<Ni6"p"VU"T&)grltGr2$!ac"Ter2rUTaWq=j[_rr)Qh!<E9(!SZ8^
+g<fp'!WW<#s8N&t!XJi2$3C7^g=G$Vp\t$fg'I``!>,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S
+"9JQ'rr2!YJ,~>
+f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H
+q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!<N9+gY10/
+g=k*)f at 8LS!<<-#s8;ls!<Ni6"p"VU"T&)grltGr2$!ac"Ter2rUTaWq=j[_rr)Qh!<E9(!SZ8^
+g<fp'!WW<#s8N&t!XJi2$3C7^g=G$Vp\t$fg'I``!>,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S
+"9JQ'rr2!YJ,~>
+f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H
+q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!<N9+gY10/
+g=k*)f at 8LS!<<-#s8;ls!<Ni6"p"VU"T&)grltGr2$!ac"Ter2rUTaWq=j[_rr)Qh!<E9(!SZ8^
+g<fp'!WW<#s8N&t!XJi2$3C7^g=G$Vp\t$fg'I``!>,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S
+"9JQ'rr2!YJ,~>
+f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ
+p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5
+!rrE-!WW3&#64c)s8;ls!=]);!!<?("9SJprk8O<!<<01!WrZ-"SDNhpAP!aq"saZp&kC/!!`].
+#6P/7!<N6&rVulsrWE3+!s/o5!!3-,q>1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC
+"Tm6T"9JQ'rr2!YJ,~>
+f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ
+p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5
+!rrE-!WW3&#64c)s8;ls!=]);!!<?("9SJprk8O<!<<01!WrZ-"SDNhpAP!aq"saZp&kC/!!`].
+#6P/7!<N6&rVulsrWE3+!s/o5!!3-,q>1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC
+"Tm6T"9JQ'rr2!YJ,~>
+f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ
+p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5
+!rrE-!WW3&#64c)s8;ls!=]);!!<?("9SJprk8O<!<<01!WrZ-"SDNhpAP!aq"saZp&kC/!!`].
+#6P/7!<N6&rVulsrWE3+!s/o5!!3-,q>1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC
+"Tm6T"9JQ'rr2!YJ,~>
+ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$<er;?Nlqu-Qj
+p](*Cs8W$,q>(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@
+!!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T.
+!<rl5!<WB'!r`/us8E$$"TSi1!!*<+#-%?k$Om7>"p+i+#Qt),!ri5uf)H9Wp\atj<s&[7#ltD>
+!!WVX!!E?'!<2uYs*t~>
+ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$<er;?Nlqu-Qj
+p](*Cs8W$,q>(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@
+!!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T.
+!<rl5!<WB'!r`/us8E$$"TSi1!!*<+#-%?k$Om7>"p+i+#Qt),!ri5uf)H9Wp\atj<s&[7#ltD>
+!!WVX!!E?'!<2uYs*t~>
+ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$<er;?Nlqu-Qj
+p](*Cs8W$,q>(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@
+!!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T.
+!<rl5!<WB'!r`/us8E$$"TSi1!!*<+#-%?k$Om7>"p+i+#Qt),!ri5uf)H9Wp\atj<s&[7#ltD>
+!!WVX!!E?'!<2uYs*t~>
+eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b
+rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1!<E<+!<rT2!<<0#rrE*##Qt;=#Qb#0
+"Tef0!<EH,!!**"r;Q`t#Qb22"9\`+$NU&,#6Fo)!@n<T!!E?+q"OU^q?d6*OS8MJD$C.H!WW6-
+!!iZ,!WW<#s8N&t"9J]+!X8Q('*npGrW!3*!<E<+!<rT2!!*#urRUuZpA"U^q=nrJD0Bds#64c,
+ec5gS!!*#tjSs`~>
+eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b
+rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1!<E<+!<rT2!<<0#rrE*##Qt;=#Qb#0
+"Tef0!<EH,!!**"r;Q`t#Qb22"9\`+$NU&,#6Fo)!@n<T!!E?+q"OU^q?d6*OS8MJD$C.H!WW6-
+!!iZ,!WW<#s8N&t"9J]+!X8Q('*npGrW!3*!<E<+!<rT2!!*#urRUuZpA"U^q=nrJD0Bds#64c,
+ec5gS!!*#tjSs`~>
+eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b
+rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1!<E<+!<rT2!<<0#rrE*##Qt;=#Qb#0
+"Tef0!<EH,!!**"r;Q`t#Qb22"9\`+$NU&,#6Fo)!@n<T!!E?+q"OU^q?d6*OS8MJD$C.H!WW6-
+!!iZ,!WW<#s8N&t"9J]+!X8Q('*npGrW!3*!<E<+!<rT2!!*#urRUuZpA"U^q=nrJD0Bds#64c,
+ec5gS!!*#tjSs`~>
+df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o
+qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe
+!!30#rr<3&N.[(DKn>#5KntG?KnbA<!!**"r;Qa!"GDSbKS'=-!!N$&"9=.-L4k85K*D;[p\Xac
+HiONU!W;ch1AqFX#Qo[6JqJc0Kn0@,p](-jr!!<)Jq\f1JH6)[!WE3&#DIqaKn5&6!rr?#r;$?h
+f)HKaqu$Hlrr;utKnb>9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~>
+df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o
+qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe
+!!30#rr<3&N.[(DKn>#5KntG?KnbA<!!**"r;Qa!"GDSbKS'=-!!N$&"9=.-L4k85K*D;[p\Xac
+HiONU!W;ch1AqFX#Qo[6JqJc0Kn0@,p](-jr!!<)Jq\f1JH6)[!WE3&#DIqaKn5&6!rr?#r;$?h
+f)HKaqu$Hlrr;utKnb>9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~>
+df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o
+qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe
+!!30#rr<3&N.[(DKn>#5KntG?KnbA<!!**"r;Qa!"GDSbKS'=-!!N$&"9=.-L4k85K*D;[p\Xac
+HiONU!W;ch1AqFX#Qo[6JqJc0Kn0@,p](-jr!!<)Jq\f1JH6)[!WE3&#DIqaKn5&6!rr?#r;$?h
+f)HKaqu$Hlrr;utKnb>9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~>
+M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF&
+rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb
+!!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt
+qt^-dqYn\<s8E8prVcQhp[S.FrVulrs8W''rVHQcr;HKjj8XW~>
+M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF&
+rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb
+!!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt
+qt^-dqYn\<s8E8prVcQhp[S.FrVulrs8W''rVHQcr;HKjj8XW~>
+M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF&
+rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb
+!!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt
+qt^-dqYn\<s8E8prVcQhp[S.FrVulrs8W''rVHQcr;HKjj8XW~>
+M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N at i#642jr;HTnc2S%AqXsU`
+$is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!<GsomJcu[!WiN&"p,3)rqmQ3
+pAYC."8_riquZp'"9JMqs8<?4!<N,rs8FBA!!rMrp\sgg#m<itqXj\]#7LV)!Xf*%qYU$crVQWs
+$2si!r;QT:s8W''q>9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~>
+M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N at i#642jr;HTnc2S%AqXsU`
+$is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!<GsomJcu[!WiN&"p,3)rqmQ3
+pAYC."8_riquZp'"9JMqs8<?4!<N,rs8FBA!!rMrp\sgg#m<itqXj\]#7LV)!Xf*%qYU$crVQWs
+$2si!r;QT:s8W''q>9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~>
+M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N at i#642jr;HTnc2S%AqXsU`
+$is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!<GsomJcu[!WiN&"p,3)rqmQ3
+pAYC."8_riquZp'"9JMqs8<?4!<N,rs8FBA!!rMrp\sgg#m<itqXj\]#7LV)!Xf*%qYU$crVQWs
+$2si!r;QT:s8W''q>9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~>
+M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3]
+"9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl
+1b^Z`"@)h\q"=dq!<rc.p at nL/!=/Z[2DI-G0erb<!rhrls8)fu!<>#31,8k3":=u+"98c`0eY:;
+0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~>
+M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3]
+"9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl
+1b^Z`"@)h\q"=dq!<rc.p at nL/!=/Z[2DI-G0erb<!rhrls8)fu!<>#31,8k3":=u+"98c`0eY:;
+0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~>
+M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3]
+"9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl
+1b^Z`"@)h\q"=dq!<rc.p at nL/!=/Z[2DI-G0erb<!rhrls8)fu!<>#31,8k3":=u+"98c`0eY:;
+0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~>
+M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL
+!X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9(
+!=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36*
+!Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~>
+M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL
+!X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9(
+!=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36*
+!Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~>
+M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL
+!X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9(
+!=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36*
+!Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~>
+M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU
+#R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<<Q3!!!&unco.#"9f>:"TST(
+!<W)rm.C5[$ipP1rqu-Jr;[-(!>#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:8<!!!6(!!r]6
+roj at Zp[cT.s8E9%pA4aan,Dq;rWiE$q>9j`nc%VLJ,~>
+M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU
+#R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<<Q3!!!&unco.#"9f>:"TST(
+!<W)rm.C5[$ipP1rqu-Jr;[-(!>#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:8<!!!6(!!r]6
+roj at Zp[cT.s8E9%pA4aan,Dq;rWiE$q>9j`nc%VLJ,~>
+M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU
+#R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<<Q3!!!&unco.#"9f>:"TST(
+!<W)rm.C5[$ipP1rqu-Jr;[-(!>#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:8<!!!6(!!r]6
+roj at Zp[cT.s8E9%pA4aan,Dq;rWiE$q>9j`nc%VLJ,~>
+M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq
+()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450
+)Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82
+(]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~>
+M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq
+()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450
+)Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82
+(]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~>
+M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq
+()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450
+)Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82
+(]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~>
+M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G
+r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E at b*o_8C^s8)Qkr;ZKjrV?KirVlge
+r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l<fq>^<eqYpNks8)Ngs7ZHlpA4Xcp\b'fqtg?h
+oDeXas8N&orr;imdf9=G%fcJ*s8DrrqYp</dEV^mi;a)`"98r4!<2iUs*t~>
+M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G
+r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E at b*o_8C^s8)Qkr;ZKjrV?KirVlge
+r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l<fq>^<eqYpNks8)Ngs7ZHlpA4Xcp\b'fqtg?h
+oDeXas8N&orr;imdf9=G%fcJ*s8DrrqYp</dEV^mi;a)`"98r4!<2iUs*t~>
+M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G
+r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E at b*o_8C^s8)Qkr;ZKjrV?KirVlge
+r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l<fq>^<eqYpNks8)Ngs7ZHlpA4Xcp\b'fqtg?h
+oDeXas8N&orr;imdf9=G%fcJ*s8DrrqYp</dEV^mi;a)`"98r4!<2iUs*t~>
+M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r
+q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~>
+M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r
+q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~>
+M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r
+q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~>
+M#RYXrr<0%!r)a+":5G<!MB/br:Ka`o_eUYZ2Y at 0qYBj^qk!lqqtg?kqu$8 at s,6pWrX\hsqtg6f
+o(nmX!XA]2!s7<Z"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+":5G<!MB/br:Ka`o_eUYZ2Y at 0qYBj^qk!lqqtg?kqu$8 at s,6pWrX\hsqtg6f
+o(nmX!XA]2!s7<Z"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+":5G<!MB/br:Ka`o_eUYZ2Y at 0qYBj^qk!lqqtg?kqu$8 at s,6pWrX\hsqtg6f
+o(nmX!XA]2!s7<Z"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y at 5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a
+nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y at 5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a
+nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y at 5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a
+nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+!<NK2!XJsGq=FORrV-3`Z2Y at 5r;?9_E<-)rs7Q?fr;QPDs,6pWrW2ogrr!3%
+o4eC4"onW+"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+!<NK2!XJsGq=FORrV-3`Z2Y at 5r;?9_E<-)rs7Q?fr;QPDs,6pWrW2ogrr!3%
+o4eC4"onW+"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!r)a+!<NK2!XJsGq=FORrV-3`Z2Y at 5r;?9_E<-)rs7Q?fr;QPDs,6pWrW2ogrr!3%
+o4eC4"onW+"U!T]"9JQ'rr2!YJ,~>
+M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F%
+q=ssi!<EE/!"/c.h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F%
+q=ssi!<EE/!"/c.h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F%
+q=ssi!<EE/!"/c.h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'"
+qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'"
+qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'"
+qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~>
+M#RYXrr<0%!r)a""T\`+#lk,-!<iiZo`"^dq>J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'.
+q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~>
+M#RYXrr<0%!r)a""T\`+#lk,-!<iiZo`"^dq>J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'.
+q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~>
+M#RYXrr<0%!r)a""T\`+#lk,-!<iiZo`"^dq>J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'.
+q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~>
+M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/
+rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~>
+M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/
+rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~>
+M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/
+rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~>
+M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)%
+/p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~>
+M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)%
+/p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~>
+M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)%
+/p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~>
+M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of
+rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~>
+M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of
+rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~>
+M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of
+rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~>
+M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT
+rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~>
+M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT
+rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~>
+M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT
+rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~>
+M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R
+s8Mut#mC\A"U+r-<Dufp;"%<X<!#os:]=8nr;PdWJ,~>
+M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R
+s8Mut#mC\A"U+r-<Dufp;"%<X<!#os:]=8nr;PdWJ,~>
+M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R
+s8Mut#mC\A"U+r-<Dufp;"%<X<!#os:]=8nr;PdWJ,~>
+M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr<WE#qt^0_rq-!brVukJs+C=arVuis
+!!iW/"p>;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~>
+M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr<WE#qt^0_rq-!brVukJs+C=arVuis
+!!iW/"p>;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~>
+M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr<WE#qt^0_rq-!brVukJs+C=arVuis
+!!iW/"p>;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~>
+M>mhYqu$Kt!<`Mp!<3-1!<N?("9J`.!!E=Ms82WjaoD;<s8<<(qtTsbrVHE]rr)ios8;rsJcCK)%
+/p5*!!!92!"]>:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~>
+M>mhYqu$Kt!<`Mp!<3-1!<N?("9J`.!!E=Ms82WjaoD;<s8<<(qtTsbrVHE]rr)ios8;rsJcCK)%
+/p5*!!!92!"]>:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~>
+M>mhYqu$Kt!<`Mp!<3-1!<N?("9J`.!!E=Ms82WjaoD;<s8<<(qtTsbrVHE]rr)ios8;rsJcCK)%
+/p5*!!!92!"]>:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~>
+M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi
+qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!!<T/"p=u(qu$BjrU'U[rs&E$rVccpro=$/~>
+M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi
+qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!!<T/"p=u(qu$BjrU'U[rs&E$rVccpro=$/~>
+M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi
+qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!!<T/"p=u(qu$BjrU'U[rs&E$rVccpro=$/~>
+M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b
+q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~>
+M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b
+q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~>
+M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b
+q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~>
+M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG
+q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~>
+M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG
+q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~>
+M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG
+q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~>
+M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h<
++S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~>
+M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h<
++S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~>
+M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h<
++S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~>
+M>n%_rqufimJm at i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n
+nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~>
+M>n%_rqufimJm at i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n
+nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~>
+M>n%_rqufimJm at i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n
+nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~>
+M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6
+rp]RZnGW at bqYL*erdk*4rs\l+rVup!!rrB0)><j<s*t~>
+M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6
+rp]RZnGW at bqYL*erdk*4rs\l+rVup!!rrB0)><j<s*t~>
+M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6
+rp]RZnGW at bqYL*erdk*4rs\l+rVup!!rrB0)><j<s*t~>
+M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X at -LrQ5'Xrq-0s!!i8sq>UEp
+!W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6!<N)trOi/\~>
+M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X at -LrQ5'Xrq-0s!!i8sq>UEp
+!W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6!<N)trOi/\~>
+M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X at -LrQ5'Xrq-0s!!i8sq>UEp
+!W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6!<N)trOi/\~>
+M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F
+ru(e8qu?g&r;$'b!<<B&rr2iqqZ$Qms8;ipr;QcrZ2Xh'q>Us&s8W)ts8Drrs8Drss8ITLs8E-#
+rVulr!!WW-#7'o"pUpNV~>
+M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F
+ru(e8qu?g&r;$'b!<<B&rr2iqqZ$Qms8;ipr;QcrZ2Xh'q>Us&s8W)ts8Drrs8Drss8ITLs8E-#
+rVulr!!WW-#7'o"pUpNV~>
+M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F
+ru(e8qu?g&r;$'b!<<B&rr2iqqZ$Qms8;ipr;QcrZ2Xh'q>Us&s8W)ts8Drrs8Drss8ITLs8E-#
+rVulr!!WW-#7'o"pUpNV~>
+Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9"
+rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos!<rW+!sJW#rOi/\~>
+Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9"
+rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos!<rW+!sJW#rOi/\~>
+Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9"
+rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos!<rW+!sJW#rOi/\~>
+Jc?5ZoDJT)F9_pO!<il4#R9bu(BFR>"9\f.!<s/:MYR)@rqZ?^q>C'gqt^6BrsSl/!<;usqZHm$
+s8DqfrrE&tr<rN$r;HZnqu?]prr;ur!<.QLs8E-#rVuos!WE-&"8i,p]`3K~>
+Jc?5ZoDJT)F9_pO!<il4#R9bu(BFR>"9\f.!<s/:MYR)@rqZ?^q>C'gqt^6BrsSl/!<;usqZHm$
+s8DqfrrE&tr<rN$r;HZnqu?]prr;ur!<.QLs8E-#rVuos!WE-&"8i,p]`3K~>
+Jc?5ZoDJT)F9_pO!<il4#R9bu(BFR>"9\f.!<s/:MYR)@rqZ?^q>C'gqt^6BrsSl/!<;usqZHm$
+s8DqfrrE&tr<rN$r;HZnqu?]prr;ur!<.QLs8E-#rVuos!WE-&"8i,p]`3K~>
+Jc?8Tp%J7Trf at 9b%Klq>!!EMr!#G\=!sA]-!<EB+!!.E at o)AC_q"asap\Xdcf)H-Y!W`8us8)p!
+"98?!RK!fprVQTor;6?jrV6Birr;tKs8W'-s8Dut!<E6%"9Sc&s7s>-J,~>
+Jc?8Tp%J7Trf at 9b%Klq>!!EMr!#G\=!sA]-!<EB+!!.E at o)AC_q"asap\Xdcf)H-Y!W`8us8)p!
+"98?!RK!fprVQTor;6?jrV6Birr;tKs8W'-s8Dut!<E6%"9Sc&s7s>-J,~>
+Jc?8Tp%J7Trf at 9b%Klq>!!EMr!#G\=!sA]-!<EB+!!.E at o)AC_q"asap\Xdcf)H-Y!W`8us8)p!
+"98?!RK!fprVQTor;6?jrV6Birr;tKs8W'-s8Dut!<E6%"9Sc&s7s>-J,~>
+Jc?8VrU]p^pA:K_$P3OF"9AYq!<!!5!W`<%!rrK,#$V!&rVl]ns7Q6acMn:Q!W`8us8)p!"98?!
+U&Y,jr;7*#rVQQjqu?Qfs7ZHis8W"Js8W'#s8DutrW3$#"9Sg2p\hc)J,~>
+Jc?8VrU]p^pA:K_$P3OF"9AYq!<!!5!W`<%!rrK,#$V!&rVl]ns7Q6acMn:Q!W`8us8)p!"98?!
+U&Y,jr;7*#rVQQjqu?Qfs7ZHis8W"Js8W'#s8DutrW3$#"9Sg2p\hc)J,~>
+Jc?8VrU]p^pA:K_$P3OF"9AYq!<!!5!W`<%!rrK,#$V!&rVl]ns7Q6acMn:Q!W`8us8)p!"98?!
+U&Y,jr;7*#rVQQjqu?Qfs7ZHis8W"Js8W'#s8DutrW3$#"9Sg2p\hc)J,~>
+Jc?2Xrq?9[qsOBp#6kV;$1 at is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?!
+WW2bm"9&/oq>U."o)AUerS>Dac2 at M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~>
+Jc?2Xrq?9[qsOBp#6kV;$1 at is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?!
+WW2bm"9&/oq>U."o)AUerS>Dac2 at M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~>
+Jc?2Xrq?9[qsOBp#6kV;$1 at is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?!
+WW2bm"9&/oq>U."o)AUerS>Dac2 at M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~>
+Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!<iW/#:fTMq#16mqt^6BrsSl/!<;usqZHm$
+s8Dqrs7lR.rVZNfq>0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~>
+Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!<iW/#:fTMq#16mqt^6BrsSl/!<;usqZHm$
+s8Dqrs7lR.rVZNfq>0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~>
+Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!<iW/#:fTMq#16mqt^6BrsSl/!<;usqZHm$
+s8Dqrs7lR.rVZNfq>0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~>
+Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q(
+rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut!<E0##6"T'rqjA.J,~>
+Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q(
+rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut!<E0##6"T'rqjA.J,~>
+Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q(
+rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut!<E0##6"T'rqjA.J,~>
+JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?!
+]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo
+s8;uts7-*drVld$qtL*`s82ZjjSs`~>
+JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?!
+]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo
+s8;uts7-*drVld$qtL*`s82ZjjSs`~>
+JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?!
+]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo
+s8;uts7-*drVld$qtL*`s82ZjjSs`~>
+JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu
+'*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~>
+JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu
+'*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~>
+JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu
+'*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~>
+JcGQG&,uJ"rVQHiqDJ<_!<W?)#jD=#$3:88"9HI>qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#-
+rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~>
+JcGQG&,uJ"rVQHiqDJ<_!<W?)#jD=#$3:88"9HI>qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#-
+rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~>
+JcGQG&,uJ"rVQHiqDJ<_!<W?)#jD=#$3:88"9HI>qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$
+s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#-
+rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~>
+JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!<WE-":#45qtU'[r;-?bs8W)trr2uthZ!ua!W`8us8)p!
+"98?!]Dqg.s8Drrs8Duqs8O8?qu$0_qYKm6UMX$:%fcq>#u+Ktl,abE&s3.mrqlZnrdk+Krso#-
+rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~>
+JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!<WE-":#45qtU'[r;-?bs8W)trr2uthZ!ua!W`8us8)p!
+"98?!]Dqg.s8Drrs8Duqs8O8?qu$0_qYKm6UMX$:%fcq>#u+Ktl,abE&s3.mrqlZnrdk+Krso#-
+rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~>
+JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!<WE-":#45qtU'[r;-?bs8W)trr2uthZ!ua!W`8us8)p!
+"98?!]Dqg.s8Drrs8Duqs8O8?qu$0_qYKm6UMX$:%fcq>#u+Ktl,abE&s3.mrqlZnrdk+Krso#-
+rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~>
+JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<<N5"pk>2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p!
+"98?!]Dqp1!W2fnr at .[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L
+!r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~>
+JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<<N5"pk>2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p!
+"98?!]Dqp1!W2fnr at .[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L
+!r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~>
+JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<<N5"pk>2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p!
+"98?!]Dqp1!W2fnr at .[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L
+!r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~>
+JcGQG(\mt(r;HHir;H0^rcS>M!<N9&!!!$#!q61""9nl3"p+l2"FpIJqt^0hr;ciqrSIP_!!30#
+r;ZWs!!E9"rk&41rW2ilrVcforqRl>s7Z?ip at Q(Z at j_B]"Tnu7CMfp#p at eOar5TcW'p8LmrVZ]p
+r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg!<iW,"T\H!jSs`~>
+JcGQG(\mt(r;HHir;H0^rcS>M!<N9&!!!$#!q61""9nl3"p+l2"FpIJqt^0hr;ciqrSIP_!!30#
+r;ZWs!!E9"rk&41rW2ilrVcforqRl>s7Z?ip at Q(Z at j_B]"Tnu7CMfp#p at eOar5TcW'p8LmrVZ]p
+r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg!<iW,"T\H!jSs`~>
+JcGQG(\mt(r;HHir;H0^rcS>M!<N9&!!!$#!q61""9nl3"p+l2"FpIJqt^0hr;ciqrSIP_!!30#
+r;ZWs!!E9"rk&41rW2ilrVcforqRl>s7Z?ip at Q(Z at j_B]"Tnu7CMfp#p at eOar5TcW'p8LmrVZ]p
+r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg!<iW,"T\H!jSs`~>
+JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/
+!<;usqZHm$s8Dr/s8W)ur%7d at q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V
+qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~>
+JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/
+!<;usqZHm$s8Dr/s8W)ur%7d at q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V
+qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~>
+JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/
+!<;usqZHm$s8Dr/s8W)ur%7d at q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V
+qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~>
+JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!<E9&!r2g3!<<-#!rr?%!<EZ3<;QRkpAX^[
+r:^$DrsSl/!<;usqZHm$s8Dr4s#0iUs8N&tr;QWfqu$BkpA=d]o#,KE/J%p_$3^u at ON,W6q>L!X
+r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo
+rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~>
+JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!<E9&!r2g3!<<-#!rr?%!<EZ3<;QRkpAX^[
+r:^$DrsSl/!<;usqZHm$s8Dr4s#0iUs8N&tr;QWfqu$BkpA=d]o#,KE/J%p_$3^u at ON,W6q>L!X
+r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo
+rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~>
+JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!<E9&!r2g3!<<-#!rr?%!<EZ3<;QRkpAX^[
+r:^$DrsSl/!<;usqZHm$s8Dr4s#0iUs8N&tr;QWfqu$BkpA=d]o#,KE/J%p_$3^u at ON,W6q>L!X
+r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo
+rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~>
+JcG9?(B+1.qYL*erPS[G!!<W3#6=o4"98H0n,Nt&#m1A;2F at -9o_\RUq#:'FrsSl/!<;usqZHm$
+s8Dr4s8VsQs8N#qqu?-ZrpoLWr;"[OIkD99!<Ec:/rmp-nFZYUrq60ckg6SO2?jNi(6&:lp[nLa
+rm1WBrW)uor[7RBr;$BdqYg6ho_n^_q#:*frr)Tkqu6KlrqlTlrqlZoqYp<jrVPp\s8EQ/q#C*e
+r<NE+!>P\="9\qc!!E?'!<2uYs*t~>
+JcG9?(B+1.qYL*erPS[G!!<W3#6=o4"98H0n,Nt&#m1A;2F at -9o_\RUq#:'FrsSl/!<;usqZHm$
+s8Dr4s8VsQs8N#qqu?-ZrpoLWr;"[OIkD99!<Ec:/rmp-nFZYUrq60ckg6SO2?jNi(6&:lp[nLa
+rm1WBrW)uor[7RBr;$BdqYg6ho_n^_q#:*frr)Tkqu6KlrqlTlrqlZoqYp<jrVPp\s8EQ/q#C*e
+r<NE+!>P\="9\qc!!E?'!<2uYs*t~>
+JcG9?(B+1.qYL*erPS[G!!<W3#6=o4"98H0n,Nt&#m1A;2F at -9o_\RUq#:'FrsSl/!<;usqZHm$
+s8Dr4s8VsQs8N#qqu?-ZrpoLWr;"[OIkD99!<Ec:/rmp-nFZYUrq60ckg6SO2?jNi(6&:lp[nLa
+rm1WBrW)uor[7RBr;$BdqYg6ho_n^_q#:*frr)Tkqu6KlrqlTlrqlZoqYp<jrVPp\s8EQ/q#C*e
+r<NE+!>P\="9\qc!!E?'!<2uYs*t~>
+JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$
+s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp
+s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&]
+pAP(*!=0#4!=.B["9JQ'rr2!YJ,~>
+JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$
+s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp
+s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&]
+pAP(*!=0#4!=.B["9JQ'rr2!YJ,~>
+JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$
+s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp
+s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&]
+pAP(*!=0#4!=.B["9JQ'rr2!YJ,~>
+JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q(
+rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr
+rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o at ogqu6?Us8W'/p]'g`qu?3f!"B#=
+$NLG:h>dZ[!!*#tjSs`~>
+JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q(
+rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr
+rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o at ogqu6?Us8W'/p]'g`qu?3f!"B#=
+$NLG:h>dZ[!!*#tjSs`~>
+JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q(
+rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr
+rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o at ogqu6?Us8W'/p]'g`qu?3f!"B#=
+$NLG:h>dZ[!!*#tjSs`~>
+JcG9?q>CiqrqcWm&-MtC"9f)3!<rSp!"T>8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5
+!V6-er\F<DrUTF1Ps#6M":>2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B<P&.uqYpNcs8W&trmCcG
+qZ-QlrV?@=rqlBal2L;QoD8LPs5NJ4lf.C$$i'c*rW*'!rW*'!q"XU`rUp!bli7"a$h4/ns7Z!X
+)%loM#Q=]'"Ps+]!WW6"roF*0~>
+JcG9?q>CiqrqcWm&-MtC"9f)3!<rSp!"T>8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5
+!V6-er\F<DrUTF1Ps#6M":>2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B<P&.uqYpNcs8W&trmCcG
+qZ-QlrV?@=rqlBal2L;QoD8LPs5NJ4lf.C$$i'c*rW*'!rW*'!q"XU`rUp!bli7"a$h4/ns7Z!X
+)%loM#Q=]'"Ps+]!WW6"roF*0~>
+JcG9?q>CiqrqcWm&-MtC"9f)3!<rSp!"T>8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5
+!V6-er\F<DrUTF1Ps#6M":>2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B<P&.uqYpNcs8W&trmCcG
+qZ-QlrV?@=rqlBal2L;QoD8LPs5NJ4lf.C$$i'c*rW*'!rW*'!q"XU`rUp!bli7"a$h4/ns7Z!X
+)%loM#Q=]'"Ps+]!WW6"roF*0~>
+JcG9?q#(Zmq"jFY/Hc+_!<NT."RlC%$3:A3!!E<*!!CXIq>UBhhZ!ua!W`8us8)p!"98?!_>cIm
+rql<bp>+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq
+qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1&
+!"&u8"5X"\!WW6"roF*0~>
+JcG9?q#(Zmq"jFY/Hc+_!<NT."RlC%$3:A3!!E<*!!CXIq>UBhhZ!ua!W`8us8)p!"98?!_>cIm
+rql<bp>+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq
+qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1&
+!"&u8"5X"\!WW6"roF*0~>
+JcG9?q#(Zmq"jFY/Hc+_!<NT."RlC%$3:A3!!E<*!!CXIq>UBhhZ!ua!W`8us8)p!"98?!_>cIm
+rql<bp>+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq
+qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1&
+!"&u8"5X"\!WW6"roF*0~>
+JcG9?q>Lp#rUp!Zq"6mE!XJi8!<WAm!<3'/!WrN+!W`E0#lF,frVbUQ$ig>/s8;oo"98Q(rVjY5
+2#-t at o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B
+!W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc
+qY'hV!<<0,gAh?X!!*#tjSs`~>
+JcG9?q>Lp#rUp!Zq"6mE!XJi8!<WAm!<3'/!WrN+!W`E0#lF,frVbUQ$ig>/s8;oo"98Q(rVjY5
+2#-t at o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B
+!W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc
+qY'hV!<<0,gAh?X!!*#tjSs`~>
+JcG9?q>Lp#rUp!Zq"6mE!XJi8!<WAm!<3'/!WrN+!W`E0#lF,frVbUQ$ig>/s8;oo"98Q(rVjY5
+2#-t at o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B
+!W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc
+qY'hV!<<0,gAh?X!!*#tjSs`~>
+JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N
+rVQH6G9[.l!<rrW5DeY%p[S1Xn,2qOd^4Ta"T\Z.!so#57eur[r:^$dq>C'frrE#srrN)tdJl0#
+r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!<N)p!<N&trr;urq>U9Ws8W)u
+q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~>
+JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N
+rVQH6G9[.l!<rrW5DeY%p[S1Xn,2qOd^4Ta"T\Z.!so#57eur[r:^$dq>C'frrE#srrN)tdJl0#
+r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!<N)p!<N&trr;urq>U9Ws8W)u
+q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~>
+JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N
+rVQH6G9[.l!<rrW5DeY%p[S1Xn,2qOd^4Ta"T\Z.!so#57eur[r:^$dq>C'frrE#srrN)tdJl0#
+r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!<N)p!<N&trr;urq>U9Ws8W)u
+q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~>
+JcFs6!ri/sr;6ctF8uOL!<VKcrrN?2!rVuir8.G^!!30#r;ZWs!!E9"rknd9r[n0FpPBjl":Yr5
+J!nUTr:KIXp%%qH\pmj0$3^D6'c'I]!!JJaqYU*bqu$Ela8\'np\4^Wqi-Vr"98Z/$jZh:!t#,2
+!X]&4#QXl)"pkD:!s8T*qJ?H:!!*'!!!*$!s8W&rs8M$Xs8E9!s7(,J"Tnea!!`f4$NpV8r;5RT
+J,~>
+JcFs6!ri/sr;6ctF8uOL!<VKcrrN?2!rVuir8.G^!!30#r;ZWs!!E9"rknd9r[n0FpPBjl":Yr5
+J!nUTr:KIXp%%qH\pmj0$3^D6'c'I]!!JJaqYU*bqu$Ela8\'np\4^Wqi-Vr"98Z/$jZh:!t#,2
+!X]&4#QXl)"pkD:!s8T*qJ?H:!!*'!!!*$!s8W&rs8M$Xs8E9!s7(,J"Tnea!!`f4$NpV8r;5RT
+J,~>
+JcFs6!ri/sr;6ctF8uOL!<VKcrrN?2!rVuir8.G^!!30#r;ZWs!!E9"rknd9r[n0FpPBjl":Yr5
+J!nUTr:KIXp%%qH\pmj0$3^D6'c'I]!!JJaqYU*bqu$Ela8\'np\4^Wqi-Vr"98Z/$jZh:!t#,2
+!X]&4#QXl)"pkD:!s8T*qJ?H:!!*'!!!*$!s8W&rs8M$Xs8E9!s7(,J"Tnea!!`f4$NpV8r;5RT
+J,~>
+JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$
+nGN(Rs7lKWm*2,[1]mj\!sBB-I at AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ*
+"Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/
+jSs`~>
+JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$
+nGN(Rs7lKWm*2,[1]mj\!sBB-I at AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ*
+"Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/
+jSs`~>
+JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$
+nGN(Rs7lKWm*2,[1]mj\!sBB-I at AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ*
+"Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/
+jSs`~>
+JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/
+q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:p<o"p5&0#RCG8!=&c3!XSi3
+T:i'NVPBj]rV-$bq>L<jrr<'!rr<'!!<<)trVulVs8W''q#1$^rr)ZiiVj)\qu$3aq>1'Ns*t~>
+JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/
+q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:p<o"p5&0#RCG8!=&c3!XSi3
+T:i'NVPBj]rV-$bq>L<jrr<'!rr<'!!<<)trVulVs8W''q#1$^rr)ZiiVj)\qu$3aq>1'Ns*t~>
+JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/
+q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:p<o"p5&0#RCG8!=&c3!XSi3
+T:i'NVPBj]rV-$bq>L<jrr<'!rr<'!!<<)trVulVs8W''q#1$^rr)ZiiVj)\qu$3aq>1'Ns*t~>
+JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ;<p&D$jN
+rVc<IgO2^M(]sj?#9-*[YL)\:qYU7:!s+bbrql]o`;_aks7cHjquI!($3^S8%h/OB"1u(P\[]0H
+qtBp`oDJ7[qsXR\qZ$9h!!*'!!!*$!s8W&rs8M$Xs8E9%pA"FVs7cKNrWi5mo_eL]rVYaVJ,~>
+JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ;<p&D$jN
+rVc<IgO2^M(]sj?#9-*[YL)\:qYU7:!s+bbrql]o`;_aks7cHjquI!($3^S8%h/OB"1u(P\[]0H
+qtBp`oDJ7[qsXR\qZ$9h!!*'!!!*$!s8W&rs8M$Xs8E9%pA"FVs7cKNrWi5mo_eL]rVYaVJ,~>
+JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ;<p&D$jN
+rVc<IgO2^M(]sj?#9-*[YL)\:qYU7:!s+bbrql]o`;_aks7cHjquI!($3^S8%h/OB"1u(P\[]0H
+qtBp`oDJ7[qsXR\qZ$9h!!*'!!!*$!s8W&rs8M$Xs8E9%pA"FVs7cKNrWi5mo_eL]rVYaVJ,~>
+JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM
+r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk
+qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~>
+JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM
+r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk
+qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~>
+JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM
+r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk
+qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~>
+JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5
+>o<_G!<<BA:PGe>rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K
+rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~>
+JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5
+>o<_G!<<BA:PGe>rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K
+rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~>
+JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5
+>o<_G!<<BA:PGe>rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K
+rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~>
+JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q
+(B=rV/cu=Y!!3WI+ at O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e
+s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b
+rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~>
+JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q
+(B=rV/cu=Y!!3WI+ at O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e
+s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b
+rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~>
+JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q
+(B=rV/cu=Y!!3WI+ at O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e
+s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b
+rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~>
+JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0`
+!XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!<N<'rqZTbr;luY
+hYR*Gr;HWop](6ns8W*!#QFf(s8Dorrp'O`rX\r(q#C?jrVQQcs5;er!Y>),*ruWI!WW?)jQ,8!
+rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~>
+JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0`
+!XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!<N<'rqZTbr;luY
+hYR*Gr;HWop](6ns8W*!#QFf(s8Dorrp'O`rX\r(q#C?jrVQQcs5;er!Y>),*ruWI!WW?)jQ,8!
+rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~>
+JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0`
+!XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!<N<'rqZTbr;luY
+hYR*Gr;HWop](6ns8W*!#QFf(s8Dorrp'O`rX\r(q#C?jrVQQcs5;er!Y>),*ruWI!WW?)jQ,8!
+rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~>
+JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhl<m!!`W,
+"q<ceiV`THrUg-]q#13hqu?]prWOeP!gNW^_#FT;s8W)us8E!4!WW3%!W`5qs8)?r"98W'r;HTn
+rq?Bl!<<*!!!iN(s8W&rs8M<`s8EMrr;6Nkr:BdUaNOVi#8-_2*ruKE"oo&7!<E>K`W,].rr)Wk
+q==F%bf%N?`luL$q;hR+~>
+JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhl<m!!`W,
+"q<ceiV`THrUg-]q#13hqu?]prWOeP!gNW^_#FT;s8W)us8E!4!WW3%!W`5qs8)?r"98W'r;HTn
+rq?Bl!<<*!!!iN(s8W&rs8M<`s8EMrr;6Nkr:BdUaNOVi#8-_2*ruKE"oo&7!<E>K`W,].rr)Wk
+q==F%bf%N?`luL$q;hR+~>
+JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhl<m!!`W,
+"q<ceiV`THrUg-]q#13hqu?]prWOeP!gNW^_#FT;s8W)us8E!4!WW3%!W`5qs8)?r"98W'r;HTn
+rq?Bl!<<*!!!iN(s8W&rs8M<`s8EMrr;6Nkr:BdUaNOVi#8-_2*ruKE"oo&7!<E>K`W,].rr)Wk
+q==F%bf%N?`luL$q;hR+~>
+JcG0<s8N#t%efbsqYfs_ZNC42"9Ac1kPthi$NNioqu6?HrsSl/!<;usqZHm$s8Dr5ru(h4r/`-/
+!!EN1!%4bUo^hkVp[e=RrVHQorr2oq#6$+Q!gNW^_#FT;s8W)us8E!.!WW3$!<E)orVH?k#R(S7
+rq$0i!<<*!!!iN(s8W&rs8M<`s8EQ/oDJU]pAaTi!!33(!<<2s!<30)!<iZ-&H2kJ#lq=.o)&F^
+rq$$a!<N9*"UkG9rT!p.~>
+JcG0<s8N#t%efbsqYfs_ZNC42"9Ac1kPthi$NNioqu6?HrsSl/!<;usqZHm$s8Dr5ru(h4r/`-/
+!!EN1!%4bUo^hkVp[e=RrVHQorr2oq#6$+Q!gNW^_#FT;s8W)us8E!.!WW3$!<E)orVH?k#R(S7
+rq$0i!<<*!!!iN(s8W&rs8M<`s8EQ/oDJU]pAaTi!!33(!<<2s!<30)!<iZ-&H2kJ#lq=.o)&F^
+rq$$a!<N9*"UkG9rT!p.~>
+JcG0<s8N#t%efbsqYfs_ZNC42"9Ac1kPthi$NNioqu6?HrsSl/!<;usqZHm$s8Dr5ru(h4r/`-/
+!!EN1!%4bUo^hkVp[e=RrVHQorr2oq#6$+Q!gNW^_#FT;s8W)us8E!.!WW3$!<E)orVH?k#R(S7
+rq$0i!<<*!!!iN(s8W&rs8M<`s8EQ/oDJU]pAaTi!!33(!<<2s!<30)!<iZ-&H2kJ#lq=.o)&F^
+rq$$a!<N9*"UkG9rT!p.~>
+JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$
++:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0!<E3!rV-6c!!*K0
+r;Zcqq#C?os8W*!#QFf(s8Dorrp'O`rX\hqpAFges83**"U"o0#6FW##6P#0!!if4#Q=i?"TY4j
+p\apcs7Z0k!WrN/!!NT$roF*0~>
+JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$
++:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0!<E3!rV-6c!!*K0
+r;Zcqq#C?os8W*!#QFf(s8Dorrp'O`rX\hqpAFges83**"U"o0#6FW##6P#0!!if4#Q=i?"TY4j
+p\apcs7Z0k!WrN/!!NT$roF*0~>
+JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$
++:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0!<E3!rV-6c!!*K0
+r;Zcqq#C?os8W*!#QFf(s8Dorrp'O`rX\hqpAFges83**"U"o0#6FW##6P#0!!if4#Q=i?"TY4j
+p\apcs7Z0k!WrN/!!NT$roF*0~>
+JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j<o_mYH$ig>/s8;oo"98Q(rVjY5-MRH:n]dDK
+:E0TF#QP2?)-<!Jj7W0Cq#(*hqtp?krr">I!gW]^_#FT;s8W)us8E!0!<<*#!<E)rpAadd!s/T)
+s82fjs8N*!s8N'(rrE*!rVccqlMpn`&,6+mqtg0hJcu;_"U,#8"Si$>"TSQ.!"&o6#Qb,5#mUG-
+q"OX]rVm-.#R:S:!<DihjSs`~>
+JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j<o_mYH$ig>/s8;oo"98Q(rVjY5-MRH:n]dDK
+:E0TF#QP2?)-<!Jj7W0Cq#(*hqtp?krr">I!gW]^_#FT;s8W)us8E!0!<<*#!<E)rpAadd!s/T)
+s82fjs8N*!s8N'(rrE*!rVccqlMpn`&,6+mqtg0hJcu;_"U,#8"Si$>"TSQ.!"&o6#Qb,5#mUG-
+q"OX]rVm-.#R:S:!<DihjSs`~>
+JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j<o_mYH$ig>/s8;oo"98Q(rVjY5-MRH:n]dDK
+:E0TF#QP2?)-<!Jj7W0Cq#(*hqtp?krr">I!gW]^_#FT;s8W)us8E!0!<<*#!<E)rpAadd!s/T)
+s82fjs8N*!s8N'(rrE*!rVccqlMpn`&,6+mqtg0hJcu;_"U,#8"Si$>"TSQ.!"&o6#Qb,5#mUG-
+q"OX]rVm-.#R:S:!<DihjSs`~>
+JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr at c"pL at ho)JLXh>[l`!W`8us8)p!"98?!_>bkW
+s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb
+qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5
+$uc(?q"FR[p^@6-!so&3#OqWOs*t~>
+JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr at c"pL at ho)JLXh>[l`!W`8us8)p!"98?!_>bkW
+s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb
+qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5
+$uc(?q"FR[p^@6-!so&3#OqWOs*t~>
+JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr at c"pL at ho)JLXh>[l`!W`8us8)p!"98?!_>bkW
+s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb
+qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5
+$uc(?q"FR[p^@6-!so&3#OqWOs*t~>
+JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4
+-2d`?rqHHio[1dK+rpdn#lkA at -VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj
+q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6
+!XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~>
+JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4
+-2d`?rqHHio[1dK+rpdn#lkA at -VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj
+q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6
+!XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~>
+JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4
+-2d`?rqHHio[1dK+rpdn#lkA at -VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj
+q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6
+!XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~>
+JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g
+s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\
+s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<`
+rr*6&s7uZo!<<?)"o\QP!!iQ)!WrN*!!!*'!!`l3!!EN-$31>3!<2urrqlTj!<W<%!<W<%rqtjW
+J,~>
+JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g
+s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\
+s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<`
+rr*6&s7uZo!<<?)"o\QP!!iQ)!WrN*!!!*'!!`l3!!EN-$31>3!<2urrqlTj!<W<%!<W<%rqtjW
+J,~>
+JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g
+s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\
+s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<`
+rr*6&s7uZo!<<?)"o\QP!!iQ)!WrN*!!!*'!!`l3!!EN-$31>3!<2urrqlTj!<W<%!<W<%rqtjW
+J,~>
+JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/
+!<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r
+rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!$-
+!!!*,"9AQ)rW!?.!sA`3"p4l0%KHM6rW*<1$R>]LrquWi!W<!$!WW6"roF*0~>
+JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/
+!<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r
+rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!$-
+!!!*,"9AQ)rW!?.!sA`3"p4l0%KHM6rW*<1$R>]LrquWi!W<!$!WW6"roF*0~>
+JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/
+!<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r
+rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!$-
+!!!*,"9AQ)rW!?.!sA`3"p4l0%KHM6rW*<1$R>]LrquWi!W<!$!WW6"roF*0~>
+JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/
+s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl
+rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!'#
+!"Ao.#7L\9rW!!#"9nc)&dAL>#ljr0!<NH*#6k,(rVZNgqu?j$!!*#tjSs`~>
+JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/
+s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl
+rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!'#
+!"Ao.#7L\9rW!!#"9nc)&dAL>#ljr0!<NH*#6k,(rVZNgqu?j$!!*#tjSs`~>
+JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/
+s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl
+rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rt581s8N&u!!!'#
+!"Ao.#7L\9rW!!#"9nc)&dAL>#ljr0!<NH*#6k,(rVZNgqu?j$!!*#tjSs`~>
+JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+r<!!"nGj%#!!!$"!t,89"qCD+rqucp!<)inhZ!ua!W`8u
+s8)p!"98?!_>jQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco
+rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at srr<#ts8N'!
+!rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~>
+JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+r<!!"nGj%#!!!$"!t,89"qCD+rqucp!<)inhZ!ua!W`8u
+s8)p!"98?!_>jQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco
+rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at srr<#ts8N'!
+!rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~>
+JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+r<!!"nGj%#!!!$"!t,89"qCD+rqucp!<)inhZ!ua!W`8u
+s8)p!"98?!_>jQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco
+rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at srr<#ts8N'!
+!rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~>
+JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/
+s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr
+!WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!Wi?&
+$j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~>
+JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/
+s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr
+!WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!Wi?&
+$j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~>
+JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/
+s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr
+!WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!Wi?&
+$j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~>
+Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS
+$ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek
+rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!<W?2
+"9So24?WU)#s:@79KGL'3<f]d!"9&4!=:pfqu?]pr<!*"!!E?'!<2uYs*t~>
+Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS
+$ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek
+rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!<W?2
+"9So24?WU)#s:@79KGL'3<f]d!"9&4!=:pfqu?]pr<!*"!!E?'!<2uYs*t~>
+Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS
+$ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek
+rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj at orr<#ts8N'!!<W?2
+"9So24?WU)#s:@79KGL'3<f]d!"9&4!=:pfqu?]pr<!*"!!E?'!<2uYs*t~>
+JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*<E9%sqYgB`p\amf!<1jT
+$ig>/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi
+r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rrrE%s8N&urW"8M
+!sel5!aGX$qYBp`rVlTdpAOS_!!3-%!!*6+!:p*cs8W)t!s/B$"9JQ'rr2!YJ,~>
+JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*<E9%sqYgB`p\amf!<1jT
+$ig>/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi
+r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rrrE%s8N&urW"8M
+!sel5!aGX$qYBp`rVlTdpAOS_!!3-%!!*6+!:p*cs8W)t!s/B$"9JQ'rr2!YJ,~>
+JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*<E9%sqYgB`p\amf!<1jT
+$ig>/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi
+r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!<DWhrrE*!rr<<(!<<)trVul\rrrE%s8N&urW"8M
+!sel5!aGX$qYBp`rVlTdpAOS_!!3-%!!*6+!:p*cs8W)t!s/B$"9JQ'rr2!YJ,~>
+l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8
+"Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq
+q=sseqY^<krquE^esh at O&eb6M!!WT^=-DJ"o_AC_q#('eq9]-Frr<#ts8W&u!!<&u!WN,urW<0$
+!<Dop"T8;ts8;lrrrE*!rr<<(!<<)trVul\rt>>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b
+D#s\?!!<6.!<<#qs8Mut!W<!$!WW6"roF*0~>
+l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8
+"Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq
+q=sseqY^<krquE^esh at O&eb6M!!WT^=-DJ"o_AC_q#('eq9]-Frr<#ts8W&u!!<&u!WN,urW<0$
+!<Dop"T8;ts8;lrrrE*!rr<<(!<<)trVul\rt>>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b
+D#s\?!!<6.!<<#qs8Mut!W<!$!WW6"roF*0~>
+l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8
+"Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq
+q=sseqY^<krquE^esh at O&eb6M!!WT^=-DJ"o_AC_q#('eq9]-Frr<#ts8W&u!!<&u!WN,urW<0$
+!<Dop"T8;ts8;lrrrE*!rr<<(!<<)trVul\rt>>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b
+D#s\?!!<6.!<<#qs8Mut!W<!$!WW6"roF*0~>
+l2Ue_rr<#sq>U^!q#C$cqtp<drW`8tqt^*br:p9=s7uX+qu-9dqt^']rV6<hrHeMJ!X&E)!<N;k
+!"T)5#R(J7!s/N+"TsJVr;Fq@$ig>/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE,
+$kuucW8?t at qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$!<Dop"T/5ss82fqrrE*!rr<<(!<<)t
+rVul\rt#,/s8N&u!!!$%!XK&5r;??i'`%e)s7ZDD!!WK/!!<6$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_rr<#sq>U^!q#C$cqtp<drW`8tqt^*br:p9=s7uX+qu-9dqt^']rV6<hrHeMJ!X&E)!<N;k
+!"T)5#R(J7!s/N+"TsJVr;Fq@$ig>/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE,
+$kuucW8?t at qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$!<Dop"T/5ss82fqrrE*!rr<<(!<<)t
+rVul\rt#,/s8N&u!!!$%!XK&5r;??i'`%e)s7ZDD!!WK/!!<6$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_rr<#sq>U^!q#C$cqtp<drW`8tqt^*br:p9=s7uX+qu-9dqt^']rV6<hrHeMJ!X&E)!<N;k
+!"T)5#R(J7!s/N+"TsJVr;Fq@$ig>/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE,
+$kuucW8?t at qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$!<Dop"T/5ss82fqrrE*!rr<<(!<<)t
+rVul\rt#,/s8N&u!!!$%!XK&5r;??i'`%e)s7ZDD!!WK/!!<6$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm
+!"K5<!=T/5"9o.&PQ(OMrQbEO!!30#r;ZWs!!E9"rkJL5rr2otrVlfrs6fk%oCh=t`1J:f*<6?F
+"UZ_][.sOnqu-K?rrrE%s8N&urVup"qu?css8N!"!<<-#q>V60r;6KkrVZZp!!*'!!!*$!s8W&r
+s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb!<iT/!s&E$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm
+!"K5<!=T/5"9o.&PQ(OMrQbEO!!30#r;ZWs!!E9"rkJL5rr2otrVlfrs6fk%oCh=t`1J:f*<6?F
+"UZ_][.sOnqu-K?rrrE%s8N&urVup"qu?css8N!"!<<-#q>V60r;6KkrVZZp!!*'!!!*$!s8W&r
+s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb!<iT/!s&E$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm
+!"K5<!=T/5"9o.&PQ(OMrQbEO!!30#r;ZWs!!E9"rkJL5rr2otrVlfrs6fk%oCh=t`1J:f*<6?F
+"UZ_][.sOnqu-K?rrrE%s8N&urVup"qu?css8N!"!<<-#q>V60r;6KkrVZZp!!*'!!!*$!s8W&r
+s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb!<iT/!s&E$rr<#ts8Vus"9JQ'rr2!YJ,~>
+l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!<N?+
+!s8Vp!"T>:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS
+o_$1AH5 at D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'!
+rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ<h(&n.0qXjd`m/d=n!!WE)rr2rtrr<#r!!E?'
+!<2uYs*t~>
+l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!<N?+
+!s8Vp!"T>:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS
+o_$1AH5 at D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'!
+rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ<h(&n.0qXjd`m/d=n!!WE)rr2rtrr<#r!!E?'
+!<2uYs*t~>
+l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!<N?+
+!s8Vp!"T>:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS
+o_$1AH5 at D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'!
+rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ<h(&n.0qXjd`m/d=n!!WE)rr2rtrr<#r!!E?'
+!<2uYs*t~>
+l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H'
+!rW5k!"T,3"T\lC#6;g at o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c
+oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'!
+rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ'
+rr2!YJ,~>
+l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H'
+!rW5k!"T,3"T\lC#6;g at o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c
+oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'!
+rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ'
+rr2!YJ,~>
+l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H'
+!rW5k!"T,3"T\lC#6;g at o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c
+oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'!
+rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ'
+rr2!YJ,~>
+l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p at Y
+!!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn
+rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d
+qYg<jrr<'!rr<'!!<<)trVul\s8N!+r;Zct!XAl8!!!)mrqZR/q>UBarr)Zc!!*-$"p+r-rr<#t
+s8Vus"9JQ'rr2!YJ,~>
+l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p at Y
+!!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn
+rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d
+qYg<jrr<'!rr<'!!<<)trVul\s8N!+r;Zct!XAl8!!!)mrqZR/q>UBarr)Zc!!*-$"p+r-rr<#t
+s8Vus"9JQ'rr2!YJ,~>
+l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p at Y
+!!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn
+rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d
+qYg<jrr<'!rr<'!!<<)trVul\s8N!+r;Zct!XAl8!!!)mrqZR/q>UBarr)Zc!!*-$"p+r-rr<#t
+s8Vus"9JQ'rr2!YJ,~>
+l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^<keGo at C&,uM)qsF at _%
+KHe>!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l at rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr
+VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!
+;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*"
+Tn`'s8W)us82j"!WW6"roF*0~>
+l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^<keGo at C&,uM)qsF at _%
+KHe>!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l at rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr
+VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!
+;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*"
+Tn`'s8W)us82j"!WW6"roF*0~>
+l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^<keGo at C&,uM)qsF at _%
+KHe>!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l at rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr
+VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!
+;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*"
+Tn`'s8W)us82j"!WW6"roF*0~>
+l2MS!s8;]hr;6*crVl`mqtf at 9k2lmK%g`O@!Y#/3!<E6'!!)3Aki1b%rqm!"rVQKir;HTn!<<&t
+rr<#tiVs_mr;HTlr;HTes8VfS!!`K,"98T.!!!&i!!!'!!YPM8!<NE)"s*U8pAY*ds7u]op<EUG
+!!30#r;ZWr!!E6!rq$0irmUoIrYG2,r8,]Tp&4[^qYU3grVlirrr<#trr2rtrr<#urYG>0qZ$Tf
+s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[
+rr)ltrW)rtr;HZnkl:Y]%/g/)!<N9,!!30!s7?'d!;?El&cD\.pAb?s"p"r/s8N&urr<#r!!E?'
+!<2uYs*t~>
+l2MS!s8;]hr;6*crVl`mqtf at 9k2lmK%g`O@!Y#/3!<E6'!!)3Aki1b%rqm!"rVQKir;HTn!<<&t
+rr<#tiVs_mr;HTlr;HTes8VfS!!`K,"98T.!!!&i!!!'!!YPM8!<NE)"s*U8pAY*ds7u]op<EUG
+!!30#r;ZWr!!E6!rq$0irmUoIrYG2,r8,]Tp&4[^qYU3grVlirrr<#trr2rtrr<#urYG>0qZ$Tf
+s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[
+rr)ltrW)rtr;HZnkl:Y]%/g/)!<N9,!!30!s7?'d!;?El&cD\.pAb?s"p"r/s8N&urr<#r!!E?'
+!<2uYs*t~>
+l2MS!s8;]hr;6*crVl`mqtf at 9k2lmK%g`O@!Y#/3!<E6'!!)3Aki1b%rqm!"rVQKir;HTn!<<&t
+rr<#tiVs_mr;HTlr;HTes8VfS!!`K,"98T.!!!&i!!!'!!YPM8!<NE)"s*U8pAY*ds7u]op<EUG
+!!30#r;ZWr!!E6!rq$0irmUoIrYG2,r8,]Tp&4[^qYU3grVlirrr<#trr2rtrr<#urYG>0qZ$Tf
+s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[
+rr)ltrW)rtr;HZnkl:Y]%/g/)!<N9,!!30!s7?'d!;?El&cD\.pAb?s"p"r/s8N&urr<#r!!E?'
+!<2uYs*t~>
+l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr
+rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j
+!rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU
+rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr
+rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j
+!rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU
+rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr
+rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j
+!rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU
+rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+kl2\%r;$3eqYg>t\#TfB!rr?%!<WE)!!*0(!<`Q+"o\KB!W`B*"9A`2\\#9Ip&4g]s7Q'as7lTm
+s8W)ts8M!W&,Z;$o_e^cqYdc*"pGP@&*X)o":Y>>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p
+!<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t
+s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq<L!s/W4!<36/rW30#rW30#"onN!q#:3fk5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+kl2\%r;$3eqYg>t\#TfB!rr?%!<WE)!!*0(!<`Q+"o\KB!W`B*"9A`2\\#9Ip&4g]s7Q'as7lTm
+s8W)ts8M!W&,Z;$o_e^cqYdc*"pGP@&*X)o":Y>>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p
+!<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t
+s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq<L!s/W4!<36/rW30#rW30#"onN!q#:3fk5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+kl2\%r;$3eqYg>t\#TfB!rr?%!<WE)!!*0(!<`Q+"o\KB!W`B*"9A`2\\#9Ip&4g]s7Q'as7lTm
+s8W)ts8M!W&,Z;$o_e^cqYdc*"pGP@&*X)o":Y>>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p
+!<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t
+s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq<L!s/W4!<36/rW30#rW30#"onN!q#:3fk5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!<N?,#m187!!!'#!s/W,"p>)3$jI"?TUboSpA4^XqYU*f
+s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r
+rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^<gqu$Hnrr)fpq#CBm#QFc&rVZQjr;QZormC`Zrr<#t
+s8N'!!<<-'!<NB$rVQNjrW42BSI,@(!rr?'"9AW2"8WH1r<!0#r<!0#!;ZHcp\spck5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!<N?,#m187!!!'#!s/W,"p>)3$jI"?TUboSpA4^XqYU*f
+s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r
+rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^<gqu$Hnrr)fpq#CBm#QFc&rVZQjr;QZormC`Zrr<#t
+s8N'!!<<-'!<NB$rVQNjrW42BSI,@(!rr?'"9AW2"8WH1r<!0#r<!0#!;ZHcp\spck5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!<N?,#m187!!!'#!s/W,"p>)3$jI"?TUboSpA4^XqYU*f
+s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r
+rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^<gqu$Hnrr)fpq#CBm#QFc&rVZQjr;QZormC`Zrr<#t
+s8N'!!<<-'!<NB$rVQNjrW42BSI,@(!rr?'"9AW2"8WH1r<!0#r<!0#!;ZHcp\spck5Pkgs8Duu
+!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!<E0$!seu6"TAH=!rrK*#QP&1#6P)1!<`N/L]@)Cq"sp]
+rVulrhu=2bq=jj_r.Kh3!"/f0":aPp%g<.>"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I
+s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'!
+!<E6*rW<<%qtg0drW3$!*XVoC"U5)3!"&r:$M4K,qud0#qud0#GPCk,q#:-dk5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!<E0$!seu6"TAH=!rrK*#QP&1#6P)1!<`N/L]@)Cq"sp]
+rVulrhu=2bq=jj_r.Kh3!"/f0":aPp%g<.>"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I
+s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'!
+!<E6*rW<<%qtg0drW3$!*XVoC"U5)3!"&r:$M4K,qud0#qud0#GPCk,q#:-dk5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!<E0$!seu6"TAH=!rrK*#QP&1#6P)1!<`N/L]@)Cq"sp]
+rVulrhu=2bq=jj_r.Kh3!"/f0":aPp%g<.>"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I
+s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'!
+!<E6*rW<<%qtg0drW3$!*XVoC"U5)3!"&r:$M4K,qud0#qud0#GPCk,q#:-dk5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&)
+n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s at cf%gECA!L\lGq"spbrVZEgoZ$n<!!30#r;ZZp!!W;j
+s8W)Is8W'?q>C'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT.
+"9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO)<q=smcrr)TRrs\l+rVup!!!*'$r;Zcf
+s8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&)
+n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s at cf%gECA!L\lGq"spbrVZEgoZ$n<!!30#r;ZZp!!W;j
+s8W)Is8W'?q>C'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT.
+"9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO)<q=smcrr)TRrs\l+rVup!!!*'$r;Zcf
+s8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&)
+n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s at cf%gECA!L\lGq"spbrVZEgoZ$n<!!30#r;ZZp!!W;j
+s8W)Is8W'?q>C'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT.
+"9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO)<q=smcrr)TRrs\l+rVup!!!*'$r;Zcf
+s8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O%
+p\"=Oqtp?krrN,tiVsGdrV?%g!<E?-!s&B%"TS\q!;HR)#6ULqqsFC]rqcQiq>L00rsSl/!<;us
+qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3
+rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6<ek5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O%
+p\"=Oqtp?krrN,tiVsGdrV?%g!<E?-!s&B%"TS\q!;HR)#6ULqqsFC]rqcQiq>L00rsSl/!<;us
+qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3
+rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6<ek5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O%
+p\"=Oqtp?krrN,tiVsGdrV?%g!<E?-!s&B%"TS\q!;HR)#6ULqqsFC]rqcQiq>L00rsSl/!<;us
+qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3
+rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6<ek5Pkgs8Duu!<<-#
+!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!<E0#!PlFd]=Ykn!!iT.!!`K*!!EQ1"Tec)!snu2
+7ecoUqY9pcrr3#urS[\cq>*8Z"Tni-!<N6$!WWAn!;Q[,!sZR;qtg$dqtU0frVlWf`r?GI!W`8u
+s82is"oSE#q>L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls
+s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m
+rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!<E0#!PlFd]=Ykn!!iT.!!`K*!!EQ1"Tec)!snu2
+7ecoUqY9pcrr3#urS[\cq>*8Z"Tni-!<N6$!WWAn!;Q[,!sZR;qtg$dqtU0frVlWf`r?GI!W`8u
+s82is"oSE#q>L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls
+s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m
+rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!<E0#!PlFd]=Ykn!!iT.!!`K*!!EQ1"Tec)!snu2
+7ecoUqY9pcrr3#urS[\cq>*8Z"Tni-!<N6$!WWAn!;Q[,!sZR;qtg$dqtU0frVlWf`r?GI!W`8u
+s82is"oSE#q>L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls
+s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m
+rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3
+"pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh
+rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT
+!<a;`6\E2'pAFgeqYBserVZ]kqZ$Qo"T8/prr2osr;P+D2u`UPp](-k!!`N0!rrH(s8)`e1B>bR
+dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH-
+#lk#1!<E/ps7>pZs82j"!WW6"roF*0~>
+p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3
+"pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh
+rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT
+!<a;`6\E2'pAFgeqYBserVZ]kqZ$Qo"T8/prr2osr;P+D2u`UPp](-k!!`N0!rrH(s8)`e1B>bR
+dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH-
+#lk#1!<E/ps7>pZs82j"!WW6"roF*0~>
+p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3
+"pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh
+rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT
+!<a;`6\E2'pAFgeqYBserVZ]kqZ$Qo"T8/prr2osr;P+D2u`UPp](-k!!`N0!rrH(s8)`e1B>bR
+dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH-
+#lk#1!<E/ps7>pZs82j"!WW6"roF*0~>
+p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0
+!!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/
+ru_1<rW!!1'bV#j'*&1G%Lisa,S'ePp\t$dr;HWprr1CH#Q=T"rquZjr;Q[<q#:!`k]g&c*!liQ
+!!<Q=;lo!Jo(W.^rq??]q>U<ks8Dots8L.?2uEUKrqHBl!"],:!<<,cqYoRTkjJHCrqQKlo`"g[
+rqcWirUp0irVlisrr2rtrr2HTs7,j^q<@narr<#ts8E$#rW!!($L[Zfq>C6q$j$V5"UXc!s7ZH\
+p]CBo"9JQ'rr2!YJ,~>
+p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0
+!!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/
+ru_1<rW!!1'bV#j'*&1G%Lisa,S'ePp\t$dr;HWprr1CH#Q=T"rquZjr;Q[<q#:!`k]g&c*!liQ
+!!<Q=;lo!Jo(W.^rq??]q>U<ks8Dots8L.?2uEUKrqHBl!"],:!<<,cqYoRTkjJHCrqQKlo`"g[
+rqcWirUp0irVlisrr2rtrr2HTs7,j^q<@narr<#ts8E$#rW!!($L[Zfq>C6q$j$V5"UXc!s7ZH\
+p]CBo"9JQ'rr2!YJ,~>
+p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0
+!!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/
+ru_1<rW!!1'bV#j'*&1G%Lisa,S'ePp\t$dr;HWprr1CH#Q=T"rquZjr;Q[<q#:!`k]g&c*!liQ
+!!<Q=;lo!Jo(W.^rq??]q>U<ks8Dots8L.?2uEUKrqHBl!"],:!<<,cqYoRTkjJHCrqQKlo`"g[
+rqcWirUp0irVlisrr2rtrr2HTs7,j^q<@narr<#ts8E$#rW!!($L[Zfq>C6q$j$V5"UXc!s7ZH\
+p]CBo"9JQ'rr2!YJ,~>
+nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E'
+$O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj at 1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78
+oHF89!<<Q0"TSZ*!XKA<!#kb6qYp<equ-Norr1CH$NC#%r;HWorVZT`rr*l4rUTg4PW8pV%g3":
+"rL+#`oQ^arr2Qhrq6<jqZ-TnrlP0Irr;TUrq6j5p&>!jr[I[Bs8MldrqH<crqu3`rVQTcs7Q<h
+o(htBrq,j^rq,j^p&=[Zqu-Ekl2M:ns8W)urW*''"p>8<o)8R`r;$=&#65M@!#>S4rq5mLq!eLl
+rW!'&!!*#tjSs`~>
+nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E'
+$O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj at 1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78
+oHF89!<<Q0"TSZ*!XKA<!#kb6qYp<equ-Norr1CH$NC#%r;HWorVZT`rr*l4rUTg4PW8pV%g3":
+"rL+#`oQ^arr2Qhrq6<jqZ-TnrlP0Irr;TUrq6j5p&>!jr[I[Bs8MldrqH<crqu3`rVQTcs7Q<h
+o(htBrq,j^rq,j^p&=[Zqu-Ekl2M:ns8W)urW*''"p>8<o)8R`r;$=&#65M@!#>S4rq5mLq!eLl
+rW!'&!!*#tjSs`~>
+nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E'
+$O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj at 1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78
+oHF89!<<Q0"TSZ*!XKA<!#kb6qYp<equ-Norr1CH$NC#%r;HWorVZT`rr*l4rUTg4PW8pV%g3":
+"rL+#`oQ^arr2Qhrq6<jqZ-TnrlP0Irr;TUrq6j5p&>!jr[I[Bs8MldrqH<crqu3`rVQTcs7Q<h
+o(htBrq,j^rq,j^p&=[Zqu-Ekl2M:ns8W)urW*''"p>8<o)8R`r;$=&#65M@!#>S4rq5mLq!eLl
+rW!'&!!*#tjSs`~>
+p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P
+!Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!<Vck&I&7;!!`Q0!W`E)-7AKcpAOsgr;Z`3
+ru_(:r:MWb,pXW^+Wr$Y,U"?[,Q7-&rTO1WrVlfrrr1CHs8FDDrVlisrr)cpqsa.Ujo52GrRls,
+3>Mi*"U+l/, at IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d?
+f[em-hoZ,s!>5;3!WN'!!WMoir;H<fq>0 at U&,uV/rr;ru!W`9&!<N/mqsjXq!=/f.&-)t3q=4L`
+ciX=I!!E?'!<2uYs*t~>
+p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P
+!Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!<Vck&I&7;!!`Q0!W`E)-7AKcpAOsgr;Z`3
+ru_(:r:MWb,pXW^+Wr$Y,U"?[,Q7-&rTO1WrVlfrrr1CHs8FDDrVlisrr)cpqsa.Ujo52GrRls,
+3>Mi*"U+l/, at IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d?
+f[em-hoZ,s!>5;3!WN'!!WMoir;H<fq>0 at U&,uV/rr;ru!W`9&!<N/mqsjXq!=/f.&-)t3q=4L`
+ciX=I!!E?'!<2uYs*t~>
+p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P
+!Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!<Vck&I&7;!!`Q0!W`E)-7AKcpAOsgr;Z`3
+ru_(:r:MWb,pXW^+Wr$Y,U"?[,Q7-&rTO1WrVlfrrr1CHs8FDDrVlisrr)cpqsa.Ujo52GrRls,
+3>Mi*"U+l/, at IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d?
+f[em-hoZ,s!>5;3!WN'!!WMoir;H<fq>0 at U&,uV/rr;ru!W`9&!<N/mqsjXq!=/f.&-)t3q=4L`
+ciX=I!!E?'!<2uYs*t~>
+p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS
+!!36-!XJr2`VKB#qYp<hrVlisrr2l\rs/H#r<!*&!!2Qh%0lk7$315>#lm6cqu-?crPAO6rZ1S*
+q>L<dr9aOZp&+R^nGE4Xp\jg`qtp<irr;use,TIIq#;H4s8Donq=+ at Rp\s?bKj?;A#QXr.#Uq-\
+ZfgoNqt0dar;Z]qr;$?>s#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi,
+#5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ'
+rr2!YJ,~>
+p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS
+!!36-!XJr2`VKB#qYp<hrVlisrr2l\rs/H#r<!*&!!2Qh%0lk7$315>#lm6cqu-?crPAO6rZ1S*
+q>L<dr9aOZp&+R^nGE4Xp\jg`qtp<irr;use,TIIq#;H4s8Donq=+ at Rp\s?bKj?;A#QXr.#Uq-\
+ZfgoNqt0dar;Z]qr;$?>s#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi,
+#5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ'
+rr2!YJ,~>
+p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS
+!!36-!XJr2`VKB#qYp<hrVlisrr2l\rs/H#r<!*&!!2Qh%0lk7$315>#lm6cqu-?crPAO6rZ1S*
+q>L<dr9aOZp&+R^nGE4Xp\jg`qtp<irr;use,TIIq#;H4s8Donq=+ at Rp\s?bKj?;A#QXr.#Uq-\
+ZfgoNqt0dar;Z]qr;$?>s#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi,
+#5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ'
+rr2!YJ,~>
+p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;Zfqrr<!Bq>UBfr:p3hq"sp_
+rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+
+ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia at s8)WgrVcQjs8)]lp#WJs4!5"9!rrN,
+7rb#uhYI*Jr;6<cr:p9=s#9iKqssdaq#(-cqYg6YrqWOpWMcr#"UY57"S2d%!<ic0#Rg_/!!WB'
+!WW0#!WN5lr:TUTs7GRU&,uV/rr;ru!WrE&$3UtE!Vlfm!"T/@#6Y,:"Tnc/"U>/;!X&E%"9JQ'
+rr2!YJ,~>
+p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;Zfqrr<!Bq>UBfr:p3hq"sp_
+rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+
+ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia at s8)WgrVcQjs8)]lp#WJs4!5"9!rrN,
+7rb#uhYI*Jr;6<cr:p9=s#9iKqssdaq#(-cqYg6YrqWOpWMcr#"UY57"S2d%!<ic0#Rg_/!!WB'
+!WW0#!WN5lr:TUTs7GRU&,uV/rr;ru!WrE&$3UtE!Vlfm!"T/@#6Y,:"Tnc/"U>/;!X&E%"9JQ'
+rr2!YJ,~>
+p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;Zfqrr<!Bq>UBfr:p3hq"sp_
+rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+
+ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia at s8)WgrVcQjs8)]lp#WJs4!5"9!rrN,
+7rb#uhYI*Jr;6<cr:p9=s#9iKqssdaq#(-cqYg6YrqWOpWMcr#"UY57"S2d%!<ic0#Rg_/!!WB'
+!WW0#!WN5lr:TUTs7GRU&,uV/rr;ru!WrE&$3UtE!Vlfm!"T/@#6Y,:"Tnc/"U>/;!X&E%"9JQ'
+rr2!YJ,~>
+p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc<drV$3frquNhqu6Nfq>^Knrr2rtr?2%7s8W#rrU^$b
+q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51
+"T%lkOd5p1%[E9<MO9Tjqu$<grr)`orqufp"9/?"rn%2Mrr)isrql^Drquforr)NfrquZlq>:$a
+q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+
+"T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5!<rT*
+#Rh%?"U+f)"9JQ'rr2!YJ,~>
+p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc<drV$3frquNhqu6Nfq>^Knrr2rtr?2%7s8W#rrU^$b
+q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51
+"T%lkOd5p1%[E9<MO9Tjqu$<grr)`orqufp"9/?"rn%2Mrr)isrql^Drquforr)NfrquZlq>:$a
+q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+
+"T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5!<rT*
+#Rh%?"U+f)"9JQ'rr2!YJ,~>
+p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc<drV$3frquNhqu6Nfq>^Knrr2rtr?2%7s8W#rrU^$b
+q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51
+"T%lkOd5p1%[E9<MO9Tjqu$<grr)`orqufp"9/?"rn%2Mrr)isrql^Drquforr)NfrquZlq>:$a
+q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+
+"T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5!<rT*
+#Rh%?"U+f)"9JQ'rr2!YJ,~>
+q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm
+rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g
+qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^;
+pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l.
+!"/T+!=&T)#lt,0r.G+K!<N,r!<N*!rqcHhrUBdMrrrE%s8N&trW!'%!rrB*mf3Oo!!3-#!<N0"%
+13(:!!!$&!!<3'!W2iVs*t~>
+q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm
+rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g
+qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^;
+pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l.
+!"/T+!=&T)#lt,0r.G+K!<N,r!<N*!rqcHhrUBdMrrrE%s8N&trW!'%!rrB*mf3Oo!!3-#!<N0"%
+13(:!!!$&!!<3'!W2iVs*t~>
+q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm
+rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g
+qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^;
+pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l.
+!"/T+!=&T)#lt,0r.G+K!<N,r!<N*!rqcHhrUBdMrrrE%s8N&trW!'%!rrB*mf3Oo!!3-#!<N0"%
+13(:!!!$&!!<3'!W2iVs*t~>
+q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9&
+!!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2
+!<rQ*#6Fp?s7lTlo(r-ls8Dopr#bY,q>C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ
+q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t
+s8UmT!!3'!#lt)6!<`H*!;uiWs*t~>
+q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9&
+!!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2
+!<rQ*#6Fp?s7lTlo(r-ls8Dopr#bY,q>C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ
+q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t
+s8UmT!!3'!#lt)6!<`H*!;uiWs*t~>
+q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9&
+!!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2
+!<rQ*#6Fp?s7lTlo(r-ls8Dopr#bY,q>C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ
+q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t
+s8UmT!!3'!#lt)6!<`H*!;uiWs*t~>
+q#:?nrr!?+rVZQk!"8i1!<NQ-ZMFLrrquirr;Zfrqu?ZoqYp<j(]O@/q=sa]p%kup"U+r-!!33r
+rUg'brVZZqroj at crr2s$!!;lp((LEJ#Qau,!X/W4Yl=ImrVZTjr;?Nm\c3KBs7ik+ZELR=ZE^^>
+Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k
+!s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT
+!!3'!!!3'#rrE3(!<<#Ys*t~>
+q#:?nrr!?+rVZQk!"8i1!<NQ-ZMFLrrquirr;Zfrqu?ZoqYp<j(]O@/q=sa]p%kup"U+r-!!33r
+rUg'brVZZqroj at crr2s$!!;lp((LEJ#Qau,!X/W4Yl=ImrVZTjr;?Nm\c3KBs7ik+ZELR=ZE^^>
+Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k
+!s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT
+!!3'!!!3'#rrE3(!<<#Ys*t~>
+q#:?nrr!?+rVZQk!"8i1!<NQ-ZMFLrrquirr;Zfrqu?ZoqYp<j(]O@/q=sa]p%kup"U+r-!!33r
+rUg'brVZZqroj at crr2s$!!;lp((LEJ#Qau,!X/W4Yl=ImrVZTjr;?Nm\c3KBs7ik+ZELR=ZE^^>
+Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k
+!s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT
+!!3'!!!3'#rrE3(!<<#Ys*t~>
+q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW<Z3!YGMC
+!s/)lrVHKjrrE&^rrrE%!!E9'p](d/"9B#6$j-Y=!QrU]p$;VUr;6Qn\c;^.(%D&!oDARdr:U*h
+o?RI=!rr/rp\4Hns8Mupr#bS*qtp3cqu$?hjmLXI4#8&`!<EB9(,`)brqQHlr;P+D2td"ErVZ3l
+!tG>6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr<!#trVliprosFdrr<#ts8UmT
+!!3'!#lt)-#mLA4!;QKQs*t~>
+q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW<Z3!YGMC
+!s/)lrVHKjrrE&^rrrE%!!E9'p](d/"9B#6$j-Y=!QrU]p$;VUr;6Qn\c;^.(%D&!oDARdr:U*h
+o?RI=!rr/rp\4Hns8Mupr#bS*qtp3cqu$?hjmLXI4#8&`!<EB9(,`)brqQHlr;P+D2td"ErVZ3l
+!tG>6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr<!#trVliprosFdrr<#ts8UmT
+!!3'!#lt)-#mLA4!;QKQs*t~>
+q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW<Z3!YGMC
+!s/)lrVHKjrrE&^rrrE%!!E9'p](d/"9B#6$j-Y=!QrU]p$;VUr;6Qn\c;^.(%D&!oDARdr:U*h
+o?RI=!rr/rp\4Hns8Mupr#bS*qtp3cqu$?hjmLXI4#8&`!<EB9(,`)brqQHlr;P+D2td"ErVZ3l
+!tG>6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr<!#trVliprosFdrr<#ts8UmT
+!!3'!#lt)-#mLA4!;QKQs*t~>
+q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA
+"pt>3!s&B2pAY'frVZZqroj at crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri
+r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!<Q.!WjF%p](0js8(+B2Z;h=o)&=r
+!<Nc3i8`_Ji8!>fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT
+!WE'*!<NZ2"TSncrr2!YJ,~>
+q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA
+"pt>3!s&B2pAY'frVZZqroj at crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri
+r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!<Q.!WjF%p](0js8(+B2Z;h=o)&=r
+!<Nc3i8`_Ji8!>fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT
+!WE'*!<NZ2"TSncrr2!YJ,~>
+q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA
+"pt>3!s&B2pAY'frVZZqroj at crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri
+r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!<Q.!WjF%p](0js8(+B2Z;h=o)&=r
+!<Nc3i8`_Ji8!>fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT
+!WE'*!<NZ2"TSncrr2!YJ,~>
+q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj
+rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0
+o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^<irVlWhoD[k5Wh9_#"TSl4!#psss82irqu+qB
+!q$!Orr+V at p%n1Sr:BpbrqQHcqYpKep\t$gp?qYRrqHHiqYp3Wrr2rus8N'!rrN0!rr<#tkl1hc
+s8W)us4mYT!WE'*!<N6&"pP+qs7taUJ,~>
+q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj
+rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0
+o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^<irVlWhoD[k5Wh9_#"TSl4!#psss82irqu+qB
+!q$!Orr+V at p%n1Sr:BpbrqQHcqYpKep\t$gp?qYRrqHHiqYp3Wrr2rus8N'!rrN0!rr<#tkl1hc
+s8W)us4mYT!WE'*!<N6&"pP+qs7taUJ,~>
+q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj
+rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0
+o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^<irVlWhoD[k5Wh9_#"TSl4!#psss82irqu+qB
+!q$!Orr+V at p%n1Sr:BpbrqQHcqYpKep\t$gp?qYRrqHHiqYp3Wrr2rus8N'!rrN0!rr<#tkl1hc
+s8W)us4mYT!WE'*!<N6&"pP+qs7taUJ,~>
+q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtp<ir;6?drr2fprr2iq&bu at uoDJOf
+!"&f0&do0<rqcTkrrE&^rs&K&!!E9'!;QX"!!3E7!#GA/rWVrlrqQKiqYpQp\c2d0o`"O_rXf#+
+qYp?jrqZBk#Qt))rr2]'s8Drqr;lotrr*f2q"sd\_PDBN!!E9'$4%IP#n`9tqYU6jrQtR&r:9j\
+oD\1VrpB^Wrqc?fq>UB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u
+h#IEUrW!3)!X]&2!<3#Zj8XW~>
+q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtp<ir;6?drr2fprr2iq&bu at uoDJOf
+!"&f0&do0<rqcTkrrE&^rs&K&!!E9'!;QX"!!3E7!#GA/rWVrlrqQKiqYpQp\c2d0o`"O_rXf#+
+qYp?jrqZBk#Qt))rr2]'s8Drqr;lotrr*f2q"sd\_PDBN!!E9'$4%IP#n`9tqYU6jrQtR&r:9j\
+oD\1VrpB^Wrqc?fq>UB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u
+h#IEUrW!3)!X]&2!<3#Zj8XW~>
+q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtp<ir;6?drr2fprr2iq&bu at uoDJOf
+!"&f0&do0<rqcTkrrE&^rs&K&!!E9'!;QX"!!3E7!#GA/rWVrlrqQKiqYpQp\c2d0o`"O_rXf#+
+qYp?jrqZBk#Qt))rr2]'s8Drqr;lotrr*f2q"sd\_PDBN!!E9'$4%IP#n`9tqYU6jrQtR&r:9j\
+oD\1VrpB^Wrqc?fq>UB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u
+h#IEUrW!3)!X]&2!<3#Zj8XW~>
+q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o
+2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El
+rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-N<uDs8N&urr2inqtKUG`LB",":,#5%5h.2
+K,Ob0OT,:Zqu-HldJkNlq#($gqu63_rqZ?gq#:!dq"Xj[q>U0hs8;onqu?WprVHQirr2rt!<<*!
+!!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~>
+q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o
+2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El
+rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-N<uDs8N&urr2inqtKUG`LB",":,#5%5h.2
+K,Ob0OT,:Zqu-HldJkNlq#($gqu63_rqZ?gq#:!dq"Xj[q>U0hs8;onqu?WprVHQirr2rt!<<*!
+!!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~>
+q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o
+2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El
+rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-N<uDs8N&urr2inqtKUG`LB",":,#5%5h.2
+K,Ob0OT,:Zqu-HldJkNlq#($gqu63_rqZ?gq#:!dq"Xj[q>U0hs8;onqu?WprVHQirr2rt!<<*!
+!!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~>
+q>^Kn&G5u$qt at Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp
+!!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j
+s8N#Es8W#sr<E9$rr2lqrVZ[Cr;6<hrVQWnqu$9^lHl;Q=:bW:$OIXeEk0`i`$#4"O8]+Ws8;op
+dJs7Fs8;oos8)9bnGiLgs8W*!#QFf(s8Dorrp'O`rr;p#s7uKj!Wq<\%g2k;!WiB+!<YYZrqcTl
+qW.[,~>
+q>^Kn&G5u$qt at Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp
+!!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j
+s8N#Es8W#sr<E9$rr2lqrVZ[Cr;6<hrVQWnqu$9^lHl;Q=:bW:$OIXeEk0`i`$#4"O8]+Ws8;op
+dJs7Fs8;oos8)9bnGiLgs8W*!#QFf(s8Dorrp'O`rr;p#s7uKj!Wq<\%g2k;!WiB+!<YYZrqcTl
+qW.[,~>
+q>^Kn&G5u$qt at Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp
+!!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j
+s8N#Es8W#sr<E9$rr2lqrVZ[Cr;6<hrVQWnqu$9^lHl;Q=:bW:$OIXeEk0`i`$#4"O8]+Ws8;op
+dJs7Fs8;oos8)9bnGiLgs8W*!#QFf(s8Dorrp'O`rr;p#s7uKj!Wq<\%g2k;!WiB+!<YYZrqcTl
+qW.[,~>
+q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s
+!WrT/!rr9!ir9emrr<0%!<<B*#ljr1#6=g3>ke9lo_bE_(B4 at 5qu-Qppfdn)qt^$aqYU0fs8W)t
+bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr
+r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9 at l#QP#3#6P!5AG#`tqYpHcjSs`~>
+q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s
+!WrT/!rr9!ir9emrr<0%!<<B*#ljr1#6=g3>ke9lo_bE_(B4 at 5qu-Qppfdn)qt^$aqYU0fs8W)t
+bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr
+r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9 at l#QP#3#6P!5AG#`tqYpHcjSs`~>
+q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s
+!WrT/!rr9!ir9emrr<0%!<<B*#ljr1#6=g3>ke9lo_bE_(B4 at 5qu-Qppfdn)qt^$aqYU0fs8W)t
+bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr
+r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9 at l#QP#3#6P!5AG#`tqYpHcjSs`~>
+q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo
+!<WH-!rr9!ir9enrr<0%!<<?-#Qt22!sE`<s7?6bp\^`b(B+72qY^?kq>1U$q"agcrquZks8W)t
+d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!<rl^>D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or
+nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~>
+q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo
+!<WH-!rr9!ir9enrr<0%!<<?-#Qt22!sE`<s7?6bp\^`b(B+72qY^?kq>1U$q"agcrquZks8W)t
+d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!<rl^>D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or
+nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~>
+q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo
+!<WH-!rr9!ir9enrr<0%!<<?-#Qt22!sE`<s7?6bp\^`b(B+72qY^?kq>1U$q"agcrquZks8W)t
+d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!<rl^>D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or
+nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~>
+q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8<B+qt]pZ
+MuWnZ!<N<'rr1pW#QF`'"98H&!<*01!WW^frUodUq>(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq
+rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A
+ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;-<fp\O^Er=8W$p at nFWs7Z-XoD\U]p#H(&~>
+q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8<B+qt]pZ
+MuWnZ!<N<'rr1pW#QF`'"98H&!<*01!WW^frUodUq>(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq
+rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A
+ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;-<fp\O^Er=8W$p at nFWs7Z-XoD\U]p#H(&~>
+q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8<B+qt]pZ
+MuWnZ!<N<'rr1pW#QF`'"98H&!<*01!WW^frUodUq>(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq
+rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A
+ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;-<fp\O^Er=8W$p at nFWs7Z-XoD\U]p#H(&~>
+q#:s$s8DccqZm3'"p5A<!rDlprr2ourr)Zm&,c:ur<!-*!X&Z.pA+Raq>:3lrqZR(qYpNgqtU0h
+!!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq
+s8N#Es8W)trA+<Jqu-Eis8DcirV-?GbFM?`+:8/U&g1&8Y06A5r:Ba^p$9Z0<\js_'ohqeqY:$f
+rlb?Aro!hV!<<*!!!iN(s8W&rs8M<`s8E9!s6fg`q>C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~>
+q#:s$s8DccqZm3'"p5A<!rDlprr2ourr)Zm&,c:ur<!-*!X&Z.pA+Raq>:3lrqZR(qYpNgqtU0h
+!!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq
+s8N#Es8W)trA+<Jqu-Eis8DcirV-?GbFM?`+:8/U&g1&8Y06A5r:Ba^p$9Z0<\js_'ohqeqY:$f
+rlb?Aro!hV!<<*!!!iN(s8W&rs8M<`s8E9!s6fg`q>C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~>
+q#:s$s8DccqZm3'"p5A<!rDlprr2ourr)Zm&,c:ur<!-*!X&Z.pA+Raq>:3lrqZR(qYpNgqtU0h
+!!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq
+s8N#Es8W)trA+<Jqu-Eis8DcirV-?GbFM?`+:8/U&g1&8Y06A5r:Ba^p$9Z0<\js_'ohqeqY:$f
+rlb?Aro!hV!<<*!!!iN(s8W&rs8M<`s8E9!s6fg`q>C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~>
+q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm!
+!!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf
+s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4<e*lo&r;-BgptX2K1+<S<"p$'PpAb-g
+r;<JmrrE*!rr<<(!<<)trVul^s8W''qu?EdqYodXiVjAdr:fjZq#13cqWn"MpA+UHs*t~>
+q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm!
+!!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf
+s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4<e*lo&r;-BgptX2K1+<S<"p$'PpAb-g
+r;<JmrrE*!rr<<(!<<)trVul^s8W''qu?EdqYodXiVjAdr:fjZq#13cqWn"MpA+UHs*t~>
+q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm!
+!!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf
+s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4<e*lo&r;-BgptX2K1+<S<"p$'PpAb-g
+r;<JmrrE*!rr<<(!<<)trVul^s8W''qu?EdqYodXiVjAdr:fjZq#13cqWn"MpA+UHs*t~>
+q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8<E%qZ7$)!WWN,qZ$Nlq=4Ikqu-?jrr;rr!!3'!
+!<E3"ro="krr)is"T\]+!s/MRrqQEkqY^?jrR(Z at r7V)crr)fprr)fpr;m!"s82Hds8N#ts8N#E
+s8Dopr$qL=q"FOM\qEF"'*/:A!?a:Zc/nTqo_\=\q!u85Cd8^9!"&`<5(28bp\t-lr29Sp!<<*!
+!!iN(s8W&rs8M<`rr*,mrr)T`qYB+Ls8<E'rV-9irVcQhr:qr=roF*0~>
+q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8<E%qZ7$)!WWN,qZ$Nlq=4Ikqu-?jrr;rr!!3'!
+!<E3"ro="krr)is"T\]+!s/MRrqQEkqY^?jrR(Z at r7V)crr)fprr)fpr;m!"s82Hds8N#ts8N#E
+s8Dopr$qL=q"FOM\qEF"'*/:A!?a:Zc/nTqo_\=\q!u85Cd8^9!"&`<5(28bp\t-lr29Sp!<<*!
+!!iN(s8W&rs8M<`rr*,mrr)T`qYB+Ls8<E'rV-9irVcQhr:qr=roF*0~>
+q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8<E%qZ7$)!WWN,qZ$Nlq=4Ikqu-?jrr;rr!!3'!
+!<E3"ro="krr)is"T\]+!s/MRrqQEkqY^?jrR(Z at r7V)crr)fprr)fpr;m!"s82Hds8N#ts8N#E
+s8Dopr$qL=q"FOM\qEF"'*/:A!?a:Zc/nTqo_\=\q!u85Cd8^9!"&`<5(28bp\t-lr29Sp!<<*!
+!!iN(s8W&rs8M<`rr*,mrr)T`qYB+Ls8<E'rV-9irVcQhr:qr=roF*0~>
+q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0&
+rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t
+s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8
+`em%j#QtG<!('bFZK1r_r;Q`rrr/krrrE*!rr<<(!<<)trVul^s8W'&s8Dutrr2r]rW)TirY,5/
+rqQKcrr;firqZTirt,qOq#0:RJ,~>
+q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0&
+rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t
+s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8
+`em%j#QtG<!('bFZK1r_r;Q`rrr/krrrE*!rr<<(!<<)trVul^s8W'&s8Dutrr2r]rW)TirY,5/
+rqQKcrr;firqZTirt,qOq#0:RJ,~>
+q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0&
+rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t
+s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8
+`em%j#QtG<!('bFZK1r_r;Q`rrr/krrrE*!rr<<(!<<)trVul^s8W'&s8Dutrr2r]rW)TirY,5/
+rqQKcrr;firqZTirt,qOq#0:RJ,~>
+q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp at e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$
+rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYp<crVQ0bd/O7N!!3,ur6YKD
+rr)lsrW)lqrr;[Gq=j!]V_on+#64l0.oq8Sr:L!bq>U3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro
+rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~>
+q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp at e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$
+rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYp<crVQ0bd/O7N!!3,ur6YKD
+rr)lsrW)lqrr;[Gq=j!]V_on+#64l0.oq8Sr:L!bq>U3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro
+rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~>
+q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp at e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$
+rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYp<crVQ0bd/O7N!!3,ur6YKD
+rr)lsrW)lqrr;[Gq=j!]V_on+#64l0.oq8Sr:L!bq>U3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro
+rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~>
+q#:Eos8W)trr<B-!=&],%0HS1!<Min&HW(8'*/XK"U"f,rr;rss8N#hs8N#qs8E!$!WW3%rqcWp
+rosFnrUg$i"T]YCrVQKbqY0OYdJjaPrUg-`rVlHdpAWqCqt^-9rriH(!WW,rd/X.Fqu8SPs7Z'^
+mD,'@63dSu"UY`;@'9D'nac\OmecV'ZA2g*!=/`4%l-k/NW&eOp\4^arVuoqqYd>lrrE*!rr<<(
+!<<)trVul<rtkM2rpp'eq"41Rrr2Kdh;A>>!<<E+s7taUJ,~>
+q#:Eos8W)trr<B-!=&],%0HS1!<Min&HW(8'*/XK"U"f,rr;rss8N#hs8N#qs8E!$!WW3%rqcWp
+rosFnrUg$i"T]YCrVQKbqY0OYdJjaPrUg-`rVlHdpAWqCqt^-9rriH(!WW,rd/X.Fqu8SPs7Z'^
+mD,'@63dSu"UY`;@'9D'nac\OmecV'ZA2g*!=/`4%l-k/NW&eOp\4^arVuoqqYd>lrrE*!rr<<(
+!<<)trVul<rtkM2rpp'eq"41Rrr2Kdh;A>>!<<E+s7taUJ,~>
+q#:Eos8W)trr<B-!=&],%0HS1!<Min&HW(8'*/XK"U"f,rr;rss8N#hs8N#qs8E!$!WW3%rqcWp
+rosFnrUg$i"T]YCrVQKbqY0OYdJjaPrUg-`rVlHdpAWqCqt^-9rriH(!WW,rd/X.Fqu8SPs7Z'^
+mD,'@63dSu"UY`;@'9D'nac\OmecV'ZA2g*!=/`4%l-k/NW&eOp\4^arVuoqqYd>lrrE*!rr<<(
+!<<)trVul<rtkM2rpp'eq"41Rrr2Kdh;A>>!<<E+s7taUJ,~>
+q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk
+"Z8XAq=aR\qY^?hr7CuIrr<!/rUfpcrq??grVOY at qr[kLd/O7N!!3,ur6YHDrr)lqr\+6Go$`Uc
+'EA:;(_%j4LV)OEp\Xshp%.A(T2 at 9X!s\i=,?92rf)#=Ap](3ks82fp!r`&rVuQbss8W*!#QFf(
+s8DorrlG*Lq#:0hqt'jar;QNfaMSGc!sJZ/!Wi5tjSs`~>
+q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk
+"Z8XAq=aR\qY^?hr7CuIrr<!/rUfpcrq??grVOY at qr[kLd/O7N!!3,ur6YHDrr)lqr\+6Go$`Uc
+'EA:;(_%j4LV)OEp\Xshp%.A(T2 at 9X!s\i=,?92rf)#=Ap](3ks82fp!r`&rVuQbss8W*!#QFf(
+s8DorrlG*Lq#:0hqt'jar;QNfaMSGc!sJZ/!Wi5tjSs`~>
+q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk
+"Z8XAq=aR\qY^?hr7CuIrr<!/rUfpcrq??grVOY at qr[kLd/O7N!!3,ur6YHDrr)lqr\+6Go$`Uc
+'EA:;(_%j4LV)OEp\Xshp%.A(T2 at 9X!s\i=,?92rf)#=Ap](3ks82fp!r`&rVuQbss8W*!#QFf(
+s8DorrlG*Lq#:0hqt'jar;QNfaMSGc!sJZ/!Wi5tjSs`~>
+q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)!
+rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr at e$A\m6<V
+#6tk[A6G_tqtp3fnGDnLc`;Y%.KfeV#otEoNmmb#rqcQgs8VlnrVulrV#UGps8W*!#QFf(s8Dor
+rl>$Sr;HKbs829Yr;<c)"TSo1%0?\@!qlKPs*t~>
+q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)!
+rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr at e$A\m6<V
+#6tk[A6G_tqtp3fnGDnLc`;Y%.KfeV#otEoNmmb#rqcQgs8VlnrVulrV#UGps8W*!#QFf(s8Dor
+rl>$Sr;HKbs829Yr;<c)"TSo1%0?\@!qlKPs*t~>
+q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)!
+rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr at e$A\m6<V
+#6tk[A6G_tqtp3fnGDnLc`;Y%.KfeV#otEoNmmb#rqcQgs8VlnrVulrV#UGps8W*!#QFf(s8Dor
+rl>$Sr;HKbs829Yr;<c)"TSo1%0?\@!qlKPs*t~>
+q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t
+rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS
+rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*!
+#QFf(s8Dorrl>$Squ?<dp\4U`R@"$X!=&`0$3UG8"T&,Ys*t~>
+q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t
+rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS
+rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*!
+#QFf(s8Dorrl>$Squ?<dp\4U`R@"$X!=&`0$3UG8"T&,Ys*t~>
+q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t
+rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS
+rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*!
+#QFf(s8Dorrl>$Squ?<dp\4U`R@"$X!=&`0$3UG8"T&,Ys*t~>
+q#:Eos8W)trW!0/!"8o4!X&Sq!"]><!XA`."U"f,rr;rss8N#hs8W)ur=/]%qt^?r!s/H("8_uq
+r;Qcrl2M7lrr)]jp\asfqYC'dq>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD
+rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s
+rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q;<JcPuZ":k_D!X8f3!sSJujSs`~>
+q#:Eos8W)trW!0/!"8o4!X&Sq!"]><!XA`."U"f,rr;rss8N#hs8W)ur=/]%qt^?r!s/H("8_uq
+r;Qcrl2M7lrr)]jp\asfqYC'dq>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD
+rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s
+rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q;<JcPuZ":k_D!X8f3!sSJujSs`~>
+q#:Eos8W)trW!0/!"8o4!X&Sq!"]><!XA`."U"f,rr;rss8N#hs8W)ur=/]%qt^?r!s/H("8_uq
+r;Qcrl2M7lrr)]jp\asfqYC'dq>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD
+rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s
+rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q;<JcPuZ":k_D!X8f3!sSJujSs`~>
+q#:Eos8W)t#lju+#m1><!!<8l!"]8;!XSi1!WrE&rquZhs8N#hrrW2ur;QTnr!EH-"98W4!W;lo
+rr)isrosI_rXAi's82iorVuoqs8W&MrtPG2qYL$dqtg3dp&4f#!sSf-!!N2urm:ZK!WW9$rVY%B
+s8Mus/H5VJqY?*j!#WiTpAOXVs75$XNC#93"UY\S/N\R-j7N'AqYgBgr;?Njs8Drs#lFZ#rr<#t
+rVj&$(A\".rVlisqu6Wrs8N'!rrE*!rVccqdf9 at H#QOf%qY^BkqYg=*p&AY0!X&T0!t#)3!"8l2
+!s/?!jSs`~>
+q#:Eos8W)t#lju+#m1><!!<8l!"]8;!XSi1!WrE&rquZhs8N#hrrW2ur;QTnr!EH-"98W4!W;lo
+rr)isrosI_rXAi's82iorVuoqs8W&MrtPG2qYL$dqtg3dp&4f#!sSf-!!N2urm:ZK!WW9$rVY%B
+s8Mus/H5VJqY?*j!#WiTpAOXVs75$XNC#93"UY\S/N\R-j7N'AqYgBgr;?Njs8Drs#lFZ#rr<#t
+rVj&$(A\".rVlisqu6Wrs8N'!rrE*!rVccqdf9 at H#QOf%qY^BkqYg=*p&AY0!X&T0!t#)3!"8l2
+!s/?!jSs`~>
+q#:Eos8W)t#lju+#m1><!!<8l!"]8;!XSi1!WrE&rquZhs8N#hrrW2ur;QTnr!EH-"98W4!W;lo
+rr)isrosI_rXAi's82iorVuoqs8W&MrtPG2qYL$dqtg3dp&4f#!sSf-!!N2urm:ZK!WW9$rVY%B
+s8Mus/H5VJqY?*j!#WiTpAOXVs75$XNC#93"UY\S/N\R-j7N'AqYgBgr;?Njs8Drs#lFZ#rr<#t
+rVj&$(A\".rVlisqu6Wrs8N'!rrE*!rVccqdf9 at H#QOf%qY^BkqYg=*p&AY0!X&T0!t#)3!"8l2
+!s/?!jSs`~>
+q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D>
+$248orr)isriuJ:r:^*`r:U$]r;$:e:C. at 1!!*'#rr17D"TeZ)s8Dl<ruqC?r;68G)ZgT*o_eO]
+q7=IR2'N2*#mVMGGb)>+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,?
+p&=mdn,*%]o_ne_=9AX/!XJc.!<E6-"oni>V>^;Ps*t~>
+q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D>
+$248orr)isriuJ:r:^*`r:U$]r;$:e:C. at 1!!*'#rr17D"TeZ)s8Dl<ruqC?r;68G)ZgT*o_eO]
+q7=IR2'N2*#mVMGGb)>+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,?
+p&=mdn,*%]o_ne_=9AX/!XJc.!<E6-"oni>V>^;Ps*t~>
+q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D>
+$248orr)isriuJ:r:^*`r:U$]r;$:e:C. at 1!!*'#rr17D"TeZ)s8Dl<ruqC?r;68G)ZgT*o_eO]
+q7=IR2'N2*#mVMGGb)>+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,?
+p&=mdn,*%]o_ne_=9AX/!XJc.!<E6-"oni>V>^;Ps*t~>
+q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP
+rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8
+'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7
+q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~>
+q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP
+rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8
+'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7
+q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~>
+q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP
+rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8
+'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7
+q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~>
+q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT
+rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8Dl<ruqC?p&=uD)$1N"]7OZc'EeXF%
+0Jk?Zg$fRrU]sbp](3jq>U3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q
+YU9XqstgM"U>8>!s/H+!snr-!XAb_hu!<Drr(pXJ,~>
+q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT
+rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8Dl<ruqC?p&=uD)$1N"]7OZc'EeXF%
+0Jk?Zg$fRrU]sbp](3jq>U3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q
+YU9XqstgM"U>8>!s/H+!snr-!XAb_hu!<Drr(pXJ,~>
+q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT
+rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8Dl<ruqC?p&=uD)$1N"]7OZc'EeXF%
+0Jk?Zg$fRrU]sbp](3jq>U3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q
+YU9XqstgM"U>8>!s/H+!snr-!XAb_hu!<Drr(pXJ,~>
+q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4
+rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl<ruqC?r;QVM'`\qm,m+2V!!EHZ7Wm)SpA=[Z
+s7H<io_n^eq>^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^<js7lTu"98r4
+"98E.%KI(@%hAX?p\Xg]q>Tp_jSs`~>
+q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4
+rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl<ruqC?r;QVM'`\qm,m+2V!!EHZ7Wm)SpA=[Z
+s7H<io_n^eq>^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^<js7lTu"98r4
+"98E.%KI(@%hAX?p\Xg]q>Tp_jSs`~>
+q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4
+rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl<ruqC?r;QVM'`\qm,m+2V!!EHZ7Wm)SpA=[Z
+s7H<io_n^eq>^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^<js7lTu"98r4
+"98E.%KI(@%hAX?p\Xg]q>Tp_jSs`~>
+q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj
+riuM!rXJT"oD\^U!<W?)"qCV at rW!!#!!3)uci4.M!!3,ur6#$^rr)iqpl-'i!"JuD!sAmAH*Zl<
+rq,jXrVl]br;6HlrV6Egrr2lorji(-r;Z`prY>8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9 at H+8Ys6
+khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~>
+q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj
+riuM!rXJT"oD\^U!<W?)"qCV at rW!!#!!3)uci4.M!!3,ur6#$^rr)iqpl-'i!"JuD!sAmAH*Zl<
+rq,jXrVl]br;6HlrV6Egrr2lorji(-r;Z`prY>8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9 at H+8Ys6
+khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~>
+q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj
+riuM!rXJT"oD\^U!<W?)"qCV at rW!!#!!3)uci4.M!!3,ur6#$^rr)iqpl-'i!"JuD!sAmAH*Zl<
+rq,jXrVl]br;6HlrV6Egrr2lorji(-r;Z`prY>8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9 at H+8Ys6
+khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~>
+q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL)
+qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc
+rr)rrq=t!crr)forji%/qYp at 1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`(
+('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~>
+q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL)
+qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc
+rr)rrq=t!crr)forji%/qYp at 1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`(
+('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~>
+q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL)
+qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc
+rr)rrq=t!crr)forji%/qYp at 1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`(
+('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~>
+q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io
+rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+<rVuHfrqHBj
+r;6NlqZ$TnrVuos$ig5)qu?Wps8N&tr;QZorW)oCrrrE#s8Durrr3'!s8N#t"9/?!s8N!>q"t!b
+qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?)
+!!`Z-!!>Las7H9ar;QWns8N&rj8XW~>
+q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io
+rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+<rVuHfrqHBj
+r;6NlqZ$TnrVuos$ig5)qu?Wps8N&tr;QZorW)oCrrrE#s8Durrr3'!s8N#t"9/?!s8N!>q"t!b
+qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?)
+!!`Z-!!>Las7H9ar;QWns8N&rj8XW~>
+q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io
+rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+<rVuHfrqHBj
+r;6NlqZ$TnrVuos$ig5)qu?Wps8N&tr;QZorW)oCrrrE#s8Durrr3'!s8N#t"9/?!s8N!>q"t!b
+qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?)
+!!`Z-!!>Las7H9ar;QWns8N&rj8XW~>
+q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\<Vu^cpAFjfmf*@fs8W#rZ2Y at 3qXOCZq#'m^
+V%!D1!s/Q!!!30$!WN)ErriH(!WW,raT!(QrUuC<4]I@&me6PTq>0sfrr)cmrVlfls8N!3r;Q`q
+r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3)
+r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'`
+g])d~>
+q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\<Vu^cpAFjfmf*@fs8W#rZ2Y at 3qXOCZq#'m^
+V%!D1!s/Q!!!30$!WN)ErriH(!WW,raT!(QrUuC<4]I@&me6PTq>0sfrr)cmrVlfls8N!3r;Q`q
+r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3)
+r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'`
+g])d~>
+q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\<Vu^cpAFjfmf*@fs8W#rZ2Y at 3qXOCZq#'m^
+V%!D1!s/Q!!!30$!WN)ErriH(!WW,raT!(QrUuC<4]I@&me6PTq>0sfrr)cmrVlfls8N!3r;Q`q
+r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3)
+r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'`
+g])d~>
+q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9
+!!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk
+qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt
+quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~>
+q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9
+!!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk
+qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt
+quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~>
+q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9
+!!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk
+qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt
+quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~>
+q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e
+E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos
+r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6<cq#:!`rVZS6F`i"QFoVLI#64l-#QXGs!W`E.!!3?1
+p]Uj!"9eZ#"9eXZqu-Hhp\t*Ns8W'Gq=jdYp](*ipA=`0HNjHM#QP#6!=&W*$31A;Nq*#Do_SLY
+qt0jbh#Dm~>
+q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e
+E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos
+r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6<cq#:!`rVZS6F`i"QFoVLI#64l-#QXGs!W`E.!!3?1
+p]Uj!"9eZ#"9eXZqu-Hhp\t*Ns8W'Gq=jdYp](*ipA=`0HNjHM#QP#6!=&W*$31A;Nq*#Do_SLY
+qt0jbh#Dm~>
+q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e
+E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos
+r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6<cq#:!`rVZS6F`i"QFoVLI#64l-#QXGs!W`E.!!3?1
+p]Uj!"9eZ#"9eXZqu-Hhp\t*Ns8W'Gq=jdYp](*ipA=`0HNjHM#QP#6!=&W*$31A;Nq*#Do_SLY
+qt0jbh#Dm~>
+q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8<E)qu$Els8)?dqYL-cq>L<[s8W'!s8Mrp!<0>)
+&,Q7qp%Vo(!!*-2!<N<+"S_ru!<<0"rm1TJ!WW9$rVXb:&,lM*rVZHhqu-HjrVc`pr;HTorr;uu
+rql^4rr)ipqt^*dqt:!_n)Ld*?F9M,s8N#rrmCa)rVlZeq"e9#>$YE<!<NE1$3^D3"9\u4!WrT"
+!!EZ1!XK5;!r3$*rLoq`rLoq`s7lWkp at nU`j8]/Y-hdN<nbW:`qtFB&"p>24"p>,2"U#&2"T\q'
+Sc8?\rV6-dp\Od^ptYn"~>
+q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8<E)qu$Els8)?dqYL-cq>L<[s8W'!s8Mrp!<0>)
+&,Q7qp%Vo(!!*-2!<N<+"S_ru!<<0"rm1TJ!WW9$rVXb:&,lM*rVZHhqu-HjrVc`pr;HTorr;uu
+rql^4rr)ipqt^*dqt:!_n)Ld*?F9M,s8N#rrmCa)rVlZeq"e9#>$YE<!<NE1$3^D3"9\u4!WrT"
+!!EZ1!XK5;!r3$*rLoq`rLoq`s7lWkp at nU`j8]/Y-hdN<nbW:`qtFB&"p>24"p>,2"U#&2"T\q'
+Sc8?\rV6-dp\Od^ptYn"~>
+q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8<E)qu$Els8)?dqYL-cq>L<[s8W'!s8Mrp!<0>)
+&,Q7qp%Vo(!!*-2!<N<+"S_ru!<<0"rm1TJ!WW9$rVXb:&,lM*rVZHhqu-HjrVc`pr;HTorr;uu
+rql^4rr)ipqt^*dqt:!_n)Ld*?F9M,s8N#rrmCa)rVlZeq"e9#>$YE<!<NE1$3^D3"9\u4!WrT"
+!!EZ1!XK5;!r3$*rLoq`rLoq`s7lWkp at nU`j8]/Y-hdN<nbW:`qtFB&"p>24"p>,2"U#&2"T\q'
+Sc8?\rV6-dp\Od^ptYn"~>
+q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g,
+&,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s
+s8W'5rVl`kqY^<gqXh"NEA8CXP4nnSq>S_?*r#^0qtU-o!<iQ*!W`K,!X&r9$46b9!!*3'rs&c3
+rW<nC\[q=C\Gl="rr2`hr^He_qY^!arT!qXr[7X4qtg-er'j-^"9ni1!Wi?("98H*!<fs6r;?Eb
+pA"UXq#9jXq>B%JJ,~>
+q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g,
+&,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s
+s8W'5rVl`kqY^<gqXh"NEA8CXP4nnSq>S_?*r#^0qtU-o!<iQ*!W`K,!X&r9$46b9!!*3'rs&c3
+rW<nC\[q=C\Gl="rr2`hr^He_qY^!arT!qXr[7X4qtg-er'j-^"9ni1!Wi?("98H*!<fs6r;?Eb
+pA"UXq#9jXq>B%JJ,~>
+q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g,
+&,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s
+s8W'5rVl`kqY^<gqXh"NEA8CXP4nnSq>S_?*r#^0qtU-o!<iQ*!W`K,!X&r9$46b9!!*3'rs&c3
+rW<nC\[q=C\Gl="rr2`hr^He_qY^!arT!qXr[7X4qtg-er'j-^"9ni1!Wi?("98H*!<fs6r;?Eb
+pA"UXq#9jXq>B%JJ,~>
+q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0
+s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5
+q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:!<rT3!!i]-#Q)`lc-k%f
+r;ZNhpA=acrVQKjrVHcsqYKpaoD.GHs8FDBqu-Hjo/-LV!W`9/!X/Z1$ipbE!"-gDqZ$6cr;?Nf
+rU^$dq#(!Ds*t~>
+q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0
+s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5
+q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:!<rT3!!i]-#Q)`lc-k%f
+r;ZNhpA=acrVQKjrVHcsqYKpaoD.GHs8FDBqu-Hjo/-LV!W`9/!X/Z1$ipbE!"-gDqZ$6cr;?Nf
+rU^$dq#(!Ds*t~>
+q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0
+s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5
+q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:!<rT3!!i]-#Q)`lc-k%f
+r;ZNhpA=acrVQKjrVHcsqYKpaoD.GHs8FDBqu-Hjo/-LV!W`9/!X/Z1$ipbE!"-gDqZ$6cr;?Nf
+rU^$dq#(!Ds*t~>
+q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7
+q>:d&'FOmI!=&W,!<NB("TSSu!!30$!WN)ErriH(!WW,ra8ZABs8DoqrVcWms8Dlq!ri/srr2rt
+rr*]1r;6$=\rh(D%13(8!sB9rr;-Hms8:7D2u<LKrpp$g!s/H)#64c,!!WH+#MnY.jk]1Zrqucn
+nbW4\q#'d`o_ndgrVc`pr;ciprq6$aro=%Xr[.%3n/N,B$3CD8"U"f+"98Q."TdfNrr2ZjoD\a_
+rr2Heo(N(TrS7F'~>
+q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7
+q>:d&'FOmI!=&W,!<NB("TSSu!!30$!WN)ErriH(!WW,ra8ZABs8DoqrVcWms8Dlq!ri/srr2rt
+rr*]1r;6$=\rh(D%13(8!sB9rr;-Hms8:7D2u<LKrpp$g!s/H)#64c,!!WH+#MnY.jk]1Zrqucn
+nbW4\q#'d`o_ndgrVc`pr;ciprq6$aro=%Xr[.%3n/N,B$3CD8"U"f+"98Q."TdfNrr2ZjoD\a_
+rr2Heo(N(TrS7F'~>
+q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7
+q>:d&'FOmI!=&W,!<NB("TSSu!!30$!WN)ErriH(!WW,ra8ZABs8DoqrVcWms8Dlq!ri/srr2rt
+rr*]1r;6$=\rh(D%13(8!sB9rr;-Hms8:7D2u<LKrpp$g!s/H)#64c,!!WH+#MnY.jk]1Zrqucn
+nbW4\q#'d`o_ndgrVc`pr;ciprq6$aro=%Xr[.%3n/N,B$3CD8"U"f+"98Q."TdfNrr2ZjoD\a_
+rr2Heo(N(TrS7F'~>
+p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn
+o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU
+!!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?]
+rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~>
+p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn
+o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU
+!!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?]
+rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~>
+p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn
+o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU
+!!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?]
+rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~>
+pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3
+qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y>
+!"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf
+rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~>
+pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3
+qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y>
+!"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf
+rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~>
+pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3
+qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y>
+!"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf
+rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~>
+nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/
+aoqbJ!<i`0"U,/"!!30$!WN)ErriH(!WW,r])Vg0s84)?s8Doqqu69fmb#mYCbcqD!!*oO3/3IH
+rl-,c&rlkfrqt(A&,cJ&oD\U_s8MrkqtU']r:0b&p\Xj\s82ZerqQK\r<!6#"oJ8mpAOpfli7"a
++91s*s82Nga9<"Q%gN+A!s8`-!sJZ^2>$eEn+l_NqTSti~>
+nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/
+aoqbJ!<i`0"U,/"!!30$!WN)ErriH(!WW,r])Vg0s84)?s8Doqqu69fmb#mYCbcqD!!*oO3/3IH
+rl-,c&rlkfrqt(A&,cJ&oD\U_s8MrkqtU']r:0b&p\Xj\s82ZerqQK\r<!6#"oJ8mpAOpfli7"a
++91s*s82Nga9<"Q%gN+A!s8`-!sJZ^2>$eEn+l_NqTSti~>
+nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/
+aoqbJ!<i`0"U,/"!!30$!WN)ErriH(!WW,r])Vg0s84)?s8Doqqu69fmb#mYCbcqD!!*oO3/3IH
+rl-,c&rlkfrqt(A&,cJ&oD\U_s8MrkqtU']r:0b&p\Xj\s82ZerqQK\r<!6#"oJ8mpAOpfli7"a
++91s*s82Nga9<"Q%gN+A!s8`-!sJZ^2>$eEn+l_NqTSti~>
+p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f
+rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`<r;HKjq>&k%YBEnj!sel3
+*@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm
+qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!<WW/$N^_>:AFbcnGE.Lr:eD7J,~>
+p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f
+rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`<r;HKjq>&k%YBEnj!sel3
+*@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm
+qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!<WW/$N^_>:AFbcnGE.Lr:eD7J,~>
+p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f
+rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`<r;HKjq>&k%YBEnj!sel3
+*@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm
+qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!<WW/$N^_>:AFbcnGE.Lr:eD7J,~>
+p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo
+p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq
+!!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob
+rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5 at q>B3q#'mdqZ$<abQ!(~>
+p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo
+p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq
+!!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob
+rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5 at q>B3q#'mdqZ$<abQ!(~>
+p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo
+p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq
+!!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob
+rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5 at q>B3q#'mdqZ$<abQ!(~>
+p\u94r;6EjrqH<eo)JT;"onc.!<iW4#R(83#QOl*!ndP]!W`<'#6G/(r;?Qnrr2utd/P0drVZTl
+rr;lqs8)?epOe&""pFu5"T\],!!`T.!!Mck!W`9%rr17D"TeZ)s8Dl2s8;ipr$V.:qu#]sU2NjP
+"Te`4+%CO5Z2!qes7l?gqrOCa#8iO$rVufprVb.D&,lD(p&FmaqYL-arr2lir:'_%oDA4[p%J4W
+$4?J%!=JXLr:TdTnb;eDs8W'>rUp0]s7ZKt#6P57!!NT1!d8hgq=F at Yp\b'cr;6-0s*t~>
+p\u94r;6EjrqH<eo)JT;"onc.!<iW4#R(83#QOl*!ndP]!W`<'#6G/(r;?Qnrr2utd/P0drVZTl
+rr;lqs8)?epOe&""pFu5"T\],!!`T.!!Mck!W`9%rr17D"TeZ)s8Dl2s8;ipr$V.:qu#]sU2NjP
+"Te`4+%CO5Z2!qes7l?gqrOCa#8iO$rVufprVb.D&,lD(p&FmaqYL-arr2lir:'_%oDA4[p%J4W
+$4?J%!=JXLr:TdTnb;eDs8W'>rUp0]s7ZKt#6P57!!NT1!d8hgq=F at Yp\b'cr;6-0s*t~>
+p\u94r;6EjrqH<eo)JT;"onc.!<iW4#R(83#QOl*!ndP]!W`<'#6G/(r;?Qnrr2utd/P0drVZTl
+rr;lqs8)?epOe&""pFu5"T\],!!`T.!!Mck!W`9%rr17D"TeZ)s8Dl2s8;ipr$V.:qu#]sU2NjP
+"Te`4+%CO5Z2!qes7l?gqrOCa#8iO$rVufprVb.D&,lD(p&FmaqYL-arr2lir:'_%oDA4[p%J4W
+$4?J%!=JXLr:TdTnb;eDs8W'>rUp0]s7ZKt#6P57!!NT1!d8hgq=F at Yp\b'cr;6-0s*t~>
+p\u93qYC!crquEgo^ll$"U"i0!<iW5#Qt22!!N?&!ndPY!WrH+"9J`(r;P"A!WN&rr"o>2q#:!d
+qYb41!<E6&!=/i2!!<3&!!M]i!W`9%rr17D"TeZ)s8Dl2s82cpr$V70fYiY7//89j!Z!XlM8nK<
+p\=OXq>0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm"
+rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~>
+p\u93qYC!crquEgo^ll$"U"i0!<iW5#Qt22!!N?&!ndPY!WrH+"9J`(r;P"A!WN&rr"o>2q#:!d
+qYb41!<E6&!=/i2!!<3&!!M]i!W`9%rr17D"TeZ)s8Dl2s82cpr$V70fYiY7//89j!Z!XlM8nK<
+p\=OXq>0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm"
+rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~>
+p\u93qYC!crquEgo^ll$"U"i0!<iW5#Qt22!!N?&!ndPY!WrH+"9J`(r;P"A!WN&rr"o>2q#:!d
+qYb41!<E6&!=/i2!!<3&!!M]i!W`9%rr17D"TeZ)s8Dl2s82cpr$V70fYiY7//89j!Z!XlM8nK<
+p\=OXq>0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm"
+rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~>
+q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e
+r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8Dl<s8W'Wr;Zfqs8W#nqY0aZqYU'W
+[$,2o,m+8N!ZF%B[F++6p\4^_r:]rpL0R=t":G>RP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj
+rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE%
+s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~>
+q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e
+r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8Dl<s8W'Wr;Zfqs8W#nqY0aZqYU'W
+[$,2o,m+8N!ZF%B[F++6p\4^_r:]rpL0R=t":G>RP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj
+rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE%
+s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~>
+q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e
+r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8Dl<s8W'Wr;Zfqs8W#nqY0aZqYU'W
+[$,2o,m+8N!ZF%B[F++6p\4^_r:]rpL0R=t":G>RP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj
+rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE%
+s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~>
+q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S at AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_
+3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh<rr+hQr;HWprr)]fqu$$/UmF7_%L*";(-PKH\`<AW
+q"j[XqXhq-Qm*:Y#6tSg2K-&$rr;ops8KS/!<)fos8NT%rosFV!<E-$!<;f)rUfpbl2Lqds8W)u
+s8E!."onr>!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~>
+q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S at AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_
+3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh<rr+hQr;HWprr)]fqu$$/UmF7_%L*";(-PKH\`<AW
+q"j[XqXhq-Qm*:Y#6tSg2K-&$rr;ops8KS/!<)fos8NT%rosFV!<E-$!<;f)rUfpbl2Lqds8W)u
+s8E!."onr>!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~>
+q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S at AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_
+3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh<rr+hQr;HWprr)]fqu$$/UmF7_%L*";(-PKH\`<AW
+q"j[XqXhq-Qm*:Y#6tSg2K-&$rr;ops8KS/!<)fos8NT%rosFV!<E-$!<;f)rUfpbl2Lqds8W)u
+s8E!."onr>!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~>
+q>^Ko!<)ops8*B,pFQ at J!!!-'!!`Q7!XSl/rVus#!S7;Y!<rN2$3:J5rVlf?rt#,'o)8:NpAP!b
++p/)U!Xmod!W`9%rr1IJs8Mus"Tn`)s8Dl<s8W'Us7uZnp\XpepAOj7RTL=;"T\r>-";;.g#r,*
+qu6TgqXUM@=</(U!!*'9H(_b*l2LGWrqs8*!<)op'E.q/rVuTkqtBjj#lal)rr)H\r;$?VrrrE%
+s8N&urW!E2!s/N3"<o&hq#10hrpB7Pq>:Ksqt]d\rVlfWs*t~>
+q>^Ko!<)ops8*B,pFQ at J!!!-'!!`Q7!XSl/rVus#!S7;Y!<rN2$3:J5rVlf?rt#,'o)8:NpAP!b
++p/)U!Xmod!W`9%rr1IJs8Mus"Tn`)s8Dl<s8W'Us7uZnp\XpepAOj7RTL=;"T\r>-";;.g#r,*
+qu6TgqXUM@=</(U!!*'9H(_b*l2LGWrqs8*!<)op'E.q/rVuTkqtBjj#lal)rr)H\r;$?VrrrE%
+s8N&urW!E2!s/N3"<o&hq#10hrpB7Pq>:Ksqt]d\rVlfWs*t~>
+q>^Ko!<)ops8*B,pFQ at J!!!-'!!`Q7!XSl/rVus#!S7;Y!<rN2$3:J5rVlf?rt#,'o)8:NpAP!b
++p/)U!Xmod!W`9%rr1IJs8Mus"Tn`)s8Dl<s8W'Us7uZnp\XpepAOj7RTL=;"T\r>-";;.g#r,*
+qu6TgqXUM@=</(U!!*'9H(_b*l2LGWrqs8*!<)op'E.q/rVuTkqtBjj#lal)rr)H\r;$?VrrrE%
+s8N&urW!E2!s/N3"<o&hq#10hrpB7Pq>:Ksqt]d\rVlfWs*t~>
+p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?(
+huEfZ!!3)uec5[Krr33%!WW9$rVXh<rVeAJq"k!hqTQC38.c"*&-*e/7?mWEoD\I[q>KU2e"q$u%
+0Qh7![Bg4L at k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r!
+"8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~>
+p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?(
+huEfZ!!3)uec5[Krr33%!WW9$rVXh<rVeAJq"k!hqTQC38.c"*&-*e/7?mWEoD\I[q>KU2e"q$u%
+0Qh7![Bg4L at k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r!
+"8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~>
+p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?(
+huEfZ!!3)uec5[Krr33%!WW9$rVXh<rVeAJq"k!hqTQC38.c"*&-*e/7?mWEoD\I[q>KU2e"q$u%
+0Qh7![Bg4L at k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r!
+"8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~>
+q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo#
+qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ<s8W'Wr;HTcqs'l0<Z_YL!"BJGD2kmR
+r:^!crUTg[pon-r)%$KQ!XB*QPebcJrquQhs82`nrqufo\c3KDqtg3grVZQlq!eCcrWiQ"!"Sqt
+q>:0Mrtk\7s8N&u!!!$""onf4!<<?*"98W-!"%li#7(bF#R1;+r8dm.~>
+q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo#
+qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ<s8W'Wr;HTcqs'l0<Z_YL!"BJGD2kmR
+r:^!crUTg[pon-r)%$KQ!XB*QPebcJrquQhs82`nrqufo\c3KDqtg3grVZQlq!eCcrWiQ"!"Sqt
+q>:0Mrtk\7s8N&u!!!$""onf4!<<?*"98W-!"%li#7(bF#R1;+r8dm.~>
+q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo#
+qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ<s8W'Wr;HTcqs'l0<Z_YL!"BJGD2kmR
+r:^!crUTg[pon-r)%$KQ!XB*QPebcJrquQhs82`nrqufo\c3KDqtg3grVZQlq!eCcrWiQ"!"Sqt
+q>:0Mrtk\7s8N&u!!!$""onf4!<<?*"98W-!"%li#7(bF#R1;+r8dm.~>
+q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4 at 5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM
+!s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ<s8W'Uqtg3A[!!Jt#lt&7(.<\<htm?@qtg9X
+o\.HJBe0Do"oni-3eE7\rr)Qhqu-Qos8N&qr;=&("8r&nr;QX+r:SbG!=/K&%/i!Xr;HQlo&9Tb
+rr<#ts8N'!$NUJ9!<E?0!YYhB!<iH(klM(r!!*o:!rVQKs*t~>
+q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4 at 5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM
+!s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ<s8W'Uqtg3A[!!Jt#lt&7(.<\<htm?@qtg9X
+o\.HJBe0Do"oni-3eE7\rr)Qhqu-Qos8N&qr;=&("8r&nr;QX+r:SbG!=/K&%/i!Xr;HQlo&9Tb
+rr<#ts8N'!$NUJ9!<E?0!YYhB!<iH(klM(r!!*o:!rVQKs*t~>
+q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4 at 5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM
+!s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ<s8W'Uqtg3A[!!Jt#lt&7(.<\<htm?@qtg9X
+o\.HJBe0Do"oni-3eE7\rr)Qhqu-Qos8N&qr;=&("8r&nr;QX+r:SbG!=/K&%/i!Xr;HQlo&9Tb
+rr<#ts8N'!$NUJ9!<E?0!YYhB!<iH(klM(r!!*o:!rVQKs*t~>
+q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3<
+"T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON at +jr:Tp^p[mV,
+X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N
+"oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~>
+q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3<
+"T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON at +jr:Tp^p[mV,
+X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N
+"oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~>
+q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3<
+"T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON at +jr:Tp^p[mV,
+X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N
+"oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~>
+q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op
+s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG
+J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du
+!<<,r#$1`tr;QZorVb^T(]O at 2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~>
+q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op
+s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG
+J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du
+!<<,r#$1`tr;QZorVb^T(]O at 2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~>
+q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op
+s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG
+J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du
+!<<,r#$1`tr;QZorVb^T(]O at 2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~>
+q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!<E0#!r)`s
+!<<0"rn.8NrVuj,s8Mojp]^s)qYKjarVc`ps8W)Gs"+-Gs,%Nn$B3*^p\X^\r;#^<a.H[/)?L'I%
+im9XZd7eY!<SDZqYL*er;HW'rrE&prt#&#qt^*eoE>=#!rrQ%D><r*iVsGdqu$BkrV?Kt%giRJ!
+"&b`!!E?'!<2uYs*t~>
+q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!<E0#!r)`s
+!<<0"rn.8NrVuj,s8Mojp]^s)qYKjarVc`ps8W)Gs"+-Gs,%Nn$B3*^p\X^\r;#^<a.H[/)?L'I%
+im9XZd7eY!<SDZqYL*er;HW'rrE&prt#&#qt^*eoE>=#!rrQ%D><r*iVsGdqu$BkrV?Kt%giRJ!
+"&b`!!E?'!<2uYs*t~>
+q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!<E0#!r)`s
+!<<0"rn.8NrVuj,s8Mojp]^s)qYKjarVc`ps8W)Gs"+-Gs,%Nn$B3*^p\X^\r;#^<a.H[/)?L'I%
+im9XZd7eY!<SDZqYL*er;HW'rrE&prt#&#qt^*eoE>=#!rrQ%D><r*iVsGdqu$BkrV?Kt%giRJ!
+"&b`!!E?'!<2uYs*t~>
+p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s
+!<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4
+KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/?
+$jlt9!o<n[!WW6"roF*0~>
+p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s
+!<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4
+KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/?
+$jlt9!o<n[!WW6"roF*0~>
+p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s
+!<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4
+KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/?
+$jlt9!o<n[!WW6"roF*0~>
+q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p
+!!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5 at AmGY%>6n9Db!!!3W=*_R(
+kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9
+#64f0h>dZ[!!*#tjSs`~>
+q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p
+!!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5 at AmGY%>6n9Db!!!3W=*_R(
+kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9
+#64f0h>dZ[!!*#tjSs`~>
+q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p
+!!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5 at AmGY%>6n9Db!!!3W=*_R(
+kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9
+#64f0h>dZ[!!*#tjSs`~>
+q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK
+!WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L<kr$qaJ
+Q2UIV\c;U*')hh/s82Wj!!NZ3!!NE(s7lHbg&DTZr:p0doDH#t%gN at K!!`S^!!E?'!<2uYs*t~>
+q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK
+!WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L<kr$qaJ
+Q2UIV\c;U*')hh/s82Wj!!NZ3!!NE(s7lHbg&DTZr:p0doDH#t%gN at K!!`S^!!E?'!<2uYs*t~>
+q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK
+!WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L<kr$qaJ
+Q2UIV\c;U*')hh/s82Wj!!NZ3!!NE(s7lHbg&DTZr:p0doDH#t%gN at K!!`S^!!E?'!<2uYs*t~>
+q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!<B)#m1M(!!!&s!!30$!;url
+!!30$!WN)Nrt>;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R
+rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O
+!tYM=h>dZ[!!*#tjSs`~>
+q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!<B)#m1M(!!!&s!!30$!;url
+!!30$!WN)Nrt>;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R
+rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O
+!tYM=h>dZ[!!*#tjSs`~>
+q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!<B)#m1M(!!!&s!!30$!;url
+!!30$!WN)Nrt>;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R
+rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O
+!tYM=h>dZ[!!*#tjSs`~>
+q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB)
+!<E9(pAb6q!!3)uf`)T_rr<#tr;6 at .!!*&imf3:brVlfrs8LFG-N*]<M'<'.<[SRa$NLVJ:55Xp
+pA+X[s8MWgr;$Blrr4ML!0mBZqu?Zp\c3KFrVZTjr;?Nmp`]V=!<W<%&cVXqqYpBFrso&+qZ$Kl
+s8MrY#QtJ9!Sm_Y!WW6"roF*0~>
+q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB)
+!<E9(pAb6q!!3)uf`)T_rr<#tr;6 at .!!*&imf3:brVlfrs8LFG-N*]<M'<'.<[SRa$NLVJ:55Xp
+pA+X[s8MWgr;$Blrr4ML!0mBZqu?Zp\c3KFrVZTjr;?Nmp`]V=!<W<%&cVXqqYpBFrso&+qZ$Kl
+s8MrY#QtJ9!Sm_Y!WW6"roF*0~>
+q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB)
+!<E9(pAb6q!!3)uf`)T_rr<#tr;6 at .!!*&imf3:brVlfrs8LFG-N*]<M'<'.<[SRa$NLVJ:55Xp
+pA+X[s8MWgr;$Blrr4ML!0mBZqu?Zp\c3KFrVZTjr;?Nmp`]V=!<W<%&cVXqqYpBFrso&+qZ$Kl
+s8MrY#QtJ9!Sm_Y!WW6"roF*0~>
+q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK,
+pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[
+r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtp<hq?d6$"9Sf0$h=#jq#:!`q>T at Q&,?/&r;QHjrVlcn
+!!WE("l94^!WW6"roF*0~>
+q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK,
+pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[
+r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtp<hq?d6$"9Sf0$h=#jq#:!`q>T at Q&,?/&r;QHjrVlcn
+!!WE("l94^!WW6"roF*0~>
+q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK,
+pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[
+r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtp<hq?d6$"9Sf0$h=#jq#:!`q>T at Q&,?/&r;QHjrVlcn
+!!WE("l94^!WW6"roF*0~>
+q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd>
+"98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqH<hq"XadrqQHp!!N8urquc>ru_7=
+rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI
+rr`9!qtc!GJ,~>
+q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd>
+"98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqH<hq"XadrqQHp!!N8urquc>ru_7=
+rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI
+rr`9!qtc!GJ,~>
+q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd>
+"98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqH<hq"XadrqQHp!!N8urquc>ru_7=
+rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI
+rr`9!qtc!GJ,~>
+q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81
+!=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl at _B-iO)C
+oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu
+rquYHs*t~>
+q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81
+!=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl at _B-iO)C
+oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu
+rquYHs*t~>
+q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81
+!=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl at _B-iO)C
+oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu
+rquYHs*t~>
+q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/
+!!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&;
+r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq
+!WN%Ns*t~>
+q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/
+!!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&;
+r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq
+!WN%Ns*t~>
+q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/
+!!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&;
+r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq
+!WN%Ns*t~>
+q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+
+"9JQ(!=Sr6!<rRCqY0m]r;Zj#!sAc/p](?r!!3)ui;XSerqZKlqYp3dqtU3cq>(*l$N'l"rq4G6
+s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg
+JcGZJJ,~>
+q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+
+"9JQ(!=Sr6!<rRCqY0m]r;Zj#!sAc/p](?r!!3)ui;XSerqZKlqYp3dqtU3cq>(*l$N'l"rq4G6
+s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg
+JcGZJJ,~>
+q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+
+"9JQ(!=Sr6!<rRCqY0m]r;Zj#!sAc/p](?r!!3)ui;XSerqZKlqYp3dqtU3cq>(*l$N'l"rq4G6
+s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg
+JcGZJJ,~>
+q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r,
+"7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d
+p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26
+!;:L1q"B:=r;V9~>
+q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r,
+"7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d
+p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26
+!;:L1q"B:=r;V9~>
+q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r,
+"7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d
+p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26
+!;:L1q"B:=r;V9~>
+q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH!
+!<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k
+r;$<cpsK-ArqudDrr)inrr)`orpK(9`Eut!,6n8S!tle9C:_aVq"jaZqu&#F".&l`YQ#+-rbqiA
+"U>)5!VZBbs7CmBr;V9~>
+q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH!
+!<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k
+r;$<cpsK-ArqudDrr)inrr)`orpK(9`Eut!,6n8S!tle9C:_aVq"jaZqu&#F".&l`YQ#+-rbqiA
+"U>)5!VZBbs7CmBr;V9~>
+q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH!
+!<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k
+r;$<cpsK-ArqudDrr)inrr)`orpK(9`Eut!,6n8S!tle9C:_aVq"jaZqu&#F".&l`YQ#+-rbqiA
+"U>)5!VZBbs7CmBr;V9~>
+q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!<EE.!rrE'!WWAt
+!<30$!WW9"!#5b>"TSo4WVuYioD/=[rVQWq!<E0%pAb6q!!3)ui;XVkrqHKp!s8c.#Qk23#Qk7,
+qtU3gqtg3;s8W)qs!I^Drqufpr:]s_q>&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP#
+!rrB*#bD"jqtL'fs8W(Ms*t~>
+q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!<EE.!rrE'!WWAt
+!<30$!WW9"!#5b>"TSo4WVuYioD/=[rVQWq!<E0%pAb6q!!3)ui;XVkrqHKp!s8c.#Qk23#Qk7,
+qtU3gqtg3;s8W)qs!I^Drqufpr:]s_q>&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP#
+!rrB*#bD"jqtL'fs8W(Ms*t~>
+q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!<EE.!rrE'!WWAt
+!<30$!WW9"!#5b>"TSo4WVuYioD/=[rVQWq!<E0%pAb6q!!3)ui;XVkrqHKp!s8c.#Qk23#Qk7,
+qtU3gqtg3;s8W)qs!I^Drqufpr:]s_q>&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP#
+!rrB*#bD"jqtL'fs8W(Ms*t~>
+q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83#
+!<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-)
+!!<6&#JpB:q#C?ls7aq at s8Mios8N&u./s, at qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in
+s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr<!.rr<#trr<#ts8VuqqZ$HU
+rsnl)q>^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~>
+q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83#
+!<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-)
+!!<6&#JpB:q#C?ls7aq at s8Mios8N&u./s, at qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in
+s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr<!.rr<#trr<#ts8VuqqZ$HU
+rsnl)q>^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~>
+q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83#
+!<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-)
+!!<6&#JpB:q#C?ls7aq at s8Mios8N&u./s, at qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in
+s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr<!.rr<#trr<#ts8VuqqZ$HU
+rsnl)q>^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~>
+q#;-.qYU9lqtU0:!WiB1!X&W+!<iT5!@Q8A#q[GM0d\1qp&=sNrs&Dsr:]a\.d-m4!=]8;!!rl9
+!!*<.f$jZnq>UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN
+UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg
+rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a
+rq?!XrqcTgq#13koChtXjSs`~>
+q#;-.qYU9lqtU0:!WiB1!X&W+!<iT5!@Q8A#q[GM0d\1qp&=sNrs&Dsr:]a\.d-m4!=]8;!!rl9
+!!*<.f$jZnq>UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN
+UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg
+rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a
+rq?!XrqcTgq#13koChtXjSs`~>
+q#;-.qYU9lqtU0:!WiB1!X&W+!<iT5!@Q8A#q[GM0d\1qp&=sNrs&Dsr:]a\.d-m4!=]8;!!rl9
+!!*<.f$jZnq>UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN
+UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg
+rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a
+rq?!XrqcTgq#13koChtXjSs`~>
+q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<<B*"UtJ2ro="`q"4U^p^R90kl;5%#m:59
+$31;G!!2<\r;HWjrrE&r!!!)p!!30$!WN)Vs8VoprY,5,p\47Ss7YjZq=XL]rr;rjrqjP3s82fn
+s8Doq*q&ROT3=N""9T#B!sVU8!""eXrr;rhrr)]frql`qrVjk;)u]d5s7lWo&c`+:!t>53lhp&I
+q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX
+rr29`pAP!fq=":]jSs`~>
+q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<<B*"UtJ2ro="`q"4U^p^R90kl;5%#m:59
+$31;G!!2<\r;HWjrrE&r!!!)p!!30$!WN)Vs8VoprY,5,p\47Ss7YjZq=XL]rr;rjrqjP3s82fn
+s8Doq*q&ROT3=N""9T#B!sVU8!""eXrr;rhrr)]frql`qrVjk;)u]d5s7lWo&c`+:!t>53lhp&I
+q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX
+rr29`pAP!fq=":]jSs`~>
+q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<<B*"UtJ2ro="`q"4U^p^R90kl;5%#m:59
+$31;G!!2<\r;HWjrrE&r!!!)p!!30$!WN)Vs8VoprY,5,p\47Ss7YjZq=XL]rr;rjrqjP3s82fn
+s8Doq*q&ROT3=N""9T#B!sVU8!""eXrr;rhrr)]frql`qrVjk;)u]d5s7lWo&c`+:!t>53lhp&I
+q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX
+rr29`pAP!fq=":]jSs`~>
+q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!<LjR#lt#5!"],6li-nDrs&;un,;kh!pBUp
+"TSNA!s9&6!"&]%q#9j`q>UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3
+rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-<jrr<#qrlG*WrVuWks6K^g":>,1
+!YYG1qu6Klq#'sbrr)ios8<N,qYU0dqYU0drr2ceqYU9dl2M:ls8N#cqYp3\!tPA4#RLP,!!N]0
+$3L>3rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~>
+q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!<LjR#lt#5!"],6li-nDrs&;un,;kh!pBUp
+"TSNA!s9&6!"&]%q#9j`q>UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3
+rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-<jrr<#qrlG*WrVuWks6K^g":>,1
+!YYG1qu6Klq#'sbrr)ios8<N,qYU0dqYU0drr2ceqYU9dl2M:ls8N#cqYp3\!tPA4#RLP,!!N]0
+$3L>3rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~>
+q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!<LjR#lt#5!"],6li-nDrs&;un,;kh!pBUp
+"TSNA!s9&6!"&]%q#9j`q>UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3
+rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-<jrr<#qrlG*WrVuWks6K^g":>,1
+!YYG1qu6Klq#'sbrr)ios8<N,qYU0dqYU0drr2ceqYU9dl2M:ls8N#cqYp3\!tPA4#RLP,!!N]0
+$3L>3rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~>
+q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S at AX!rru7!XSc(ro="`qt9sb$NLS at kl;5"
+!=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50
+!<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8
+!;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr!<ro4!<Vuq*=N/Q
+$31&5#7(;8h!Y(5p\a[]r;['.$j[.D!;lWRs*t~>
+q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S at AX!rru7!XSc(ro="`qt9sb$NLS at kl;5"
+!=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50
+!<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8
+!;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr!<ro4!<Vuq*=N/Q
+$31&5#7(;8h!Y(5p\a[]r;['.$j[.D!;lWRs*t~>
+q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S at AX!rru7!XSc(ro="`qt9sb$NLS at kl;5"
+!=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50
+!<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8
+!;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr!<ro4!<Vuq*=N/Q
+$31&5#7(;8h!Y(5p\a[]r;['.$j[.D!;lWRs*t~>
+q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG
+#S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6
+!<<#ss8<r1o`"[dnc&I_mEi_>73iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX
+q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<)
+$j$b9r:fg]qt'gW"9Sr1!>YY<qXNYHJ,~>
+q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG
+#S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6
+!<<#ss8<r1o`"[dnc&I_mEi_>73iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX
+q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<)
+$j$b9r:fg]qt'gW"9Sr1!>YY<qXNYHJ,~>
+q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG
+#S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6
+!<<#ss8<r1o`"[dnc&I_mEi_>73iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX
+q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<)
+$j$b9r:fg]qt'gW"9Sr1!>YY<qXNYHJ,~>
+q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp'
+r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@
+r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L
+qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!<!<rQ)#R1>6$O$eA
+!N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~>
+q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp'
+r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@
+r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L
+qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!<!<rQ)#R1>6$O$eA
+!N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~>
+q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp'
+r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@
+r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L
+qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!<!<rQ)#R1>6$O$eA
+!N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~>
+q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!<W?#!S.5W!sAc6!!*K&rr1sX#5n,n!!*9)kQ(Vd%0C6Z
+pAOjfq#CBlq>^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$<dPQqA,!WiZ(r;ZQd]`8$2s8=>F
+qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J
+rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)!<N6&
+!!3-$!s/H0!!!?+!W`W/!=/l.rquTiqu-Ts!!*3&"9SK"jSs`~>
+q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!<W?#!S.5W!sAc6!!*K&rr1sX#5n,n!!*9)kQ(Vd%0C6Z
+pAOjfq#CBlq>^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$<dPQqA,!WiZ(r;ZQd]`8$2s8=>F
+qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J
+rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)!<N6&
+!!3-$!s/H0!!!?+!W`W/!=/l.rquTiqu-Ts!!*3&"9SK"jSs`~>
+q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!<W?#!S.5W!sAc6!!*K&rr1sX#5n,n!!*9)kQ(Vd%0C6Z
+pAOjfq#CBlq>^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$<dPQqA,!WiZ(r;ZQd]`8$2s8=>F
+qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J
+rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)!<N6&
+!!3-$!s/H0!!!?+!W`W/!=/l.rquTiqu-Ts!!*3&"9SK"jSs`~>
+n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M
+rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc
+#lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs at G^=[b!rrK("U+i,"TS9!
+"8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M at E!WrH-!X8Z,!t#8<!=&`2!!3-$"U4u"rVQWprr*!#
+rW!'&!!*#tjSs`~>
+n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M
+rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc
+#lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs at G^=[b!rrK("U+i,"TS9!
+"8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M at E!WrH-!X8Z,!t#8<!=&`2!!3-$"U4u"rVQWprr*!#
+rW!'&!!*#tjSs`~>
+n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M
+rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc
+#lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs at G^=[b!rrK("U+i,"TS9!
+"8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M at E!WrH-!X8Z,!t#8<!=&`2!!3-$"U4u"rVQWprr*!#
+rW!'&!!*#tjSs`~>
+n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r
+!!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF
+Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6"
+qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'%
+!WW6"roF*0~>
+n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r
+!!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF
+Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6"
+qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'%
+!WW6"roF*0~>
+n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r
+!!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF
+Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6"
+qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'%
+!WW6"roF*0~>
+nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r
+!!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4>
+N;<MKr:L!fdJs7G2?37Gp%V8`!!`W1!WWO)9M7t]"U"u1!X&?*!s\f,$3CP:q$$os!!iGsYd<l+
+qXsd\rVu`YrrrE%s8N&ur;ZfurW!9+!Wi?(!!E9(!!<-"&cr(C!!39'!XSi3!WMuqrquZqr;Zs%
+!!*#tjSs`~>
+nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r
+!!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4>
+N;<MKr:L!fdJs7G2?37Gp%V8`!!`W1!WWO)9M7t]"U"u1!X&?*!s\f,$3CP:q$$os!!iGsYd<l+
+qXsd\rVu`YrrrE%s8N&ur;ZfurW!9+!Wi?(!!E9(!!<-"&cr(C!!39'!XSi3!WMuqrquZqr;Zs%
+!!*#tjSs`~>
+nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r
+!!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4>
+N;<MKr:L!fdJs7G2?37Gp%V8`!!`W1!WWO)9M7t]"U"u1!X&?*!s\f,$3CP:q$$os!!iGsYd<l+
+qXsd\rVu`YrrrE%s8N&ur;ZfurW!9+!Wi?(!!E9(!!<-"&cr(C!!39'!XSi3!WMuqrquZqr;Zs%
+!!*#tjSs`~>
+o`+derVZutq"jUZp\O[<rW<&trr)lsrWrE#nbiCYoD\aLs8VfsrW3W6!<q]f"ucMXoCi4JnG`Lf
+qu?]upAb6q!!3)uhu=JjrrE3%rqZHk1BS'bn,3:h$2FMqr;Fb;q>Tj_qYh9)q>L9ks8)ZkpZgbB
+HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y
+qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs
+!WW6"roF*0~>
+o`+derVZutq"jUZp\O[<rW<&trr)lsrWrE#nbiCYoD\aLs8VfsrW3W6!<q]f"ucMXoCi4JnG`Lf
+qu?]upAb6q!!3)uhu=JjrrE3%rqZHk1BS'bn,3:h$2FMqr;Fb;q>Tj_qYh9)q>L9ks8)ZkpZgbB
+HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y
+qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs
+!WW6"roF*0~>
+o`+derVZutq"jUZp\O[<rW<&trr)lsrWrE#nbiCYoD\aLs8VfsrW3W6!<q]f"ucMXoCi4JnG`Lf
+qu?]upAb6q!!3)uhu=JjrrE3%rqZHk1BS'bn,3:h$2FMqr;Fb;q>Tj_qYh9)q>L9ks8)ZkpZgbB
+HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y
+qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs
+!WW6"roF*0~>
+p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d
+qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh
+q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!<<H7!!!*3)up9FjQ"qLj5fG'
+r:g0Urq-0_s8McZrr2?`kl1hcs8W)us8;ot!WE'@!<NB+"Tel/!WWT.!!iQ;!!`K-!s&T+"pOu%
+rVZNgqu?j$!!*#tjSs`~>
+p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d
+qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh
+q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!<<H7!!!*3)up9FjQ"qLj5fG'
+r:g0Urq-0_s8McZrr2?`kl1hcs8W)us8;ot!WE'@!<NB+"Tel/!WWT.!!iQ;!!`K-!s&T+"pOu%
+rVZNgqu?j$!!*#tjSs`~>
+p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d
+qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh
+q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!<<H7!!!*3)up9FjQ"qLj5fG'
+r:g0Urq-0_s8McZrr2?`kl1hcs8W)us8;ot!WE'@!<NB+"Tel/!WWT.!!iQ;!!`K-!s&T+"pOu%
+rVZNgqu?j$!!*#tjSs`~>
+p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N
+s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o
+qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T
+o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@!<N6%!!<6(!!!'%$igP6&-)\7!!3-+
+$ip;(rVZNgqu?j$!!*#tjSs`~>
+p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N
+s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o
+qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T
+o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@!<N6%!!<6(!!!'%$igP6&-)\7!!3-+
+$ip;(rVZNgqu?j$!!*#tjSs`~>
+p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N
+s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o
+qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T
+o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@!<N6%!!<6(!!!'%$igP6&-)\7!!3-+
+$ip;(rVZNgqu?j$!!*#tjSs`~>
+q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_
+rqH9d!#6(/!!NE0!<rPcr;HZp!rW&rq>UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr<?+rV$9j
+!=Af&o)JLarltKCrW<-!rr2rtrp0Uarr;g0s8D`hrqu]kqYpKkrqZB^rr2cnr;+h at 2u`=FhZ*QT
+"UtM:().Pu*#'1fpAb0knc&.Ws82Wlrr2Z`s7uNjqtU3Nq#9R9rp0.SrUp*bo]cDUrWrQ&s8N'!
+!<<0"!$D:Wr;H<cp&Fshq#13`rYGP8#lk21#64c'rr)lqqtpKn!!E?'!<2uYs*t~>
+q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_
+rqH9d!#6(/!!NE0!<rPcr;HZp!rW&rq>UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr<?+rV$9j
+!=Af&o)JLarltKCrW<-!rr2rtrp0Uarr;g0s8D`hrqu]kqYpKkrqZB^rr2cnr;+h at 2u`=FhZ*QT
+"UtM:().Pu*#'1fpAb0knc&.Ws82Wlrr2Z`s7uNjqtU3Nq#9R9rp0.SrUp*bo]cDUrWrQ&s8N'!
+!<<0"!$D:Wr;H<cp&Fshq#13`rYGP8#lk21#64c'rr)lqqtpKn!!E?'!<2uYs*t~>
+q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_
+rqH9d!#6(/!!NE0!<rPcr;HZp!rW&rq>UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr<?+rV$9j
+!=Af&o)JLarltKCrW<-!rr2rtrp0Uarr;g0s8D`hrqu]kqYpKkrqZB^rr2cnr;+h at 2u`=FhZ*QT
+"UtM:().Pu*#'1fpAb0knc&.Ws82Wlrr2Z`s7uNjqtU3Nq#9R9rp0.SrUp*bo]cDUrWrQ&s8N'!
+!<<0"!$D:Wr;H<cp&Fshq#13`rYGP8#lk21#64c'rr)lqqtpKn!!E?'!<2uYs*t~>
+q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p
+'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@
+s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g
+r9jR`qXXRFnb`4^q#:31qp*U[df]RB!<i3&p\O at YqtoUWs8EK-rVulu!=f,>!!iTWqYU<mrY>A#
+rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~>
+q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p
+'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@
+s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g
+r9jR`qXXRFnb`4^q#:31qp*U[df]RB!<i3&p\O at YqtoUWs8EK-rVulu!=f,>!!iTWqYU<mrY>A#
+rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~>
+q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p
+'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@
+s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g
+r9jR`qXXRFnb`4^q#:31qp*U[df]RB!<i3&p\O at YqtoUWs8EK-rVulu!=f,>!!iTWqYU<mrY>A#
+rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~>
+q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s%
+07%C#6hWCr;$0]r:Ba[rs/N'!<E0#!Wi&r!W`9%rr1aR(]XU;s8;Qg":.]nrV6<m#eTX'r;HQkr
+Vk.Crr*,trT_eYdam[5&^o:^cggYrs8DQcs7-*cr;HTnrm(O&qu$9gqXsjcqt0mWq>1!erV$0hq
+!e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o
+DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s%
+07%C#6hWCr;$0]r:Ba[rs/N'!<E0#!Wi&r!W`9%rr1aR(]XU;s8;Qg":.]nrV6<m#eTX'r;HQkr
+Vk.Crr*,trT_eYdam[5&^o:^cggYrs8DQcs7-*cr;HTnrm(O&qu$9gqXsjcqt0mWq>1!erV$0hq
+!e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o
+DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s%
+07%C#6hWCr;$0]r:Ba[rs/N'!<E0#!Wi&r!W`9%rr1aR(]XU;s8;Qg":.]nrV6<m#eTX'r;HQkr
+Vk.Crr*,trT_eYdam[5&^o:^cggYrs8DQcs7-*cr;HTnrm(O&qu$9gqXsjcqt0mWq>1!erV$0hq
+!e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o
+DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>U`srpp!]qtg3gdf'mTq"sg`rq6<dr;-EjrVQ?hs8LgR#Pe2fqYU<t"6fdr":,)2"TeZ."e5Ag
+qt]p_q>UZu!<N9%!!;lp!W`9%rr1aR(]XU;s8;ln$N^&&p%nLg!!;ieq"=O]r;P%Bs8E9'q"Ugh
+7mKE262<hZ4[h\;TXV;am/Q_SrqlBcr;?Qmrr1=F$2aPqp\Fj]s7u]or at 7X;s8Dcks7Q5\TqA-O
+qk=&k!rrW-"p"E""8r6#rVQ^!rWDrjqt^*gp?DVWrXJo+s8N*#"qCV@$3p>*qu?]q$2s\mqYTp\
+r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~>
+q>U`srpp!]qtg3gdf'mTq"sg`rq6<dr;-EjrVQ?hs8LgR#Pe2fqYU<t"6fdr":,)2"TeZ."e5Ag
+qt]p_q>UZu!<N9%!!;lp!W`9%rr1aR(]XU;s8;ln$N^&&p%nLg!!;ieq"=O]r;P%Bs8E9'q"Ugh
+7mKE262<hZ4[h\;TXV;am/Q_SrqlBcr;?Qmrr1=F$2aPqp\Fj]s7u]or at 7X;s8Dcks7Q5\TqA-O
+qk=&k!rrW-"p"E""8r6#rVQ^!rWDrjqt^*gp?DVWrXJo+s8N*#"qCV@$3p>*qu?]q$2s\mqYTp\
+r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~>
+q>U`srpp!]qtg3gdf'mTq"sg`rq6<dr;-EjrVQ?hs8LgR#Pe2fqYU<t"6fdr":,)2"TeZ."e5Ag
+qt]p_q>UZu!<N9%!!;lp!W`9%rr1aR(]XU;s8;ln$N^&&p%nLg!!;ieq"=O]r;P%Bs8E9'q"Ugh
+7mKE262<hZ4[h\;TXV;am/Q_SrqlBcr;?Qmrr1=F$2aPqp\Fj]s7u]or at 7X;s8Dcks7Q5\TqA-O
+qk=&k!rrW-"p"E""8r6#rVQ^!rWDrjqt^*gp?DVWrXJo+s8N*#"qCV@$3p>*qu?]q$2s\mqYTp\
+r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~>
+q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2%
+Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$<r#P\/jq>UEr!VZEbpA=abrm1WEr
+Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q"
+To)6$MXl8!<rN5"9eo!"9A<+!<2lt#Q"W%p%&"UqWRtZrXJo+s8N*##QY&7!"&Aqqu?]q('!dsp%
+A1Vq#CHs!<WE*rr2rtrr<#r!!E?'!<2uYs*t~>
+q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2%
+Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$<r#P\/jq>UEr!VZEbpA=abrm1WEr
+Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q"
+To)6$MXl8!<rN5"9eo!"9A<+!<2lt#Q"W%p%&"UqWRtZrXJo+s8N*##QY&7!"&Aqqu?]q('!dsp%
+A1Vq#CHs!<WE*rr2rtrr<#r!!E?'!<2uYs*t~>
+q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2%
+Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$<r#P\/jq>UEr!VZEbpA=abrm1WEr
+Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q"
+To)6$MXl8!<rN5"9eo!"9A<+!<2lt#Q"W%p%&"UqWRtZrXJo+s8N*##QY&7!"&Aqqu?]q('!dsp%
+A1Vq#CHs!<WE*rr2rtrr<#r!!E?'!<2uYs*t~>
+q>UZtq>^3dq#/P>(C'pD!<E=CDfTc=qu$6dq>^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4
+#m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE
+rWi<"rJ;<o!!E#snH&Xk%g`4:#QP_f2knq%qtBmar;QZormCa)rV--_qY^6gqf-[qCN4<6"9el.
+"p"l.#6552!t,,7!!NT."oJ?/q$@*#p'1ZrNV`SGnc/I_l2Ue_%KHD,rrE-("p=u6!<;oms8N!3
+nG)nQqtU!h!WW6)"p4f's8W)us82j"!WW6"roF*0~>
+q>UZtq>^3dq#/P>(C'pD!<E=CDfTc=qu$6dq>^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4
+#m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE
+rWi<"rJ;<o!!E#snH&Xk%g`4:#QP_f2knq%qtBmar;QZormCa)rV--_qY^6gqf-[qCN4<6"9el.
+"p"l.#6552!t,,7!!NT."oJ?/q$@*#p'1ZrNV`SGnc/I_l2Ue_%KHD,rrE-("p=u6!<;oms8N!3
+nG)nQqtU!h!WW6)"p4f's8W)us82j"!WW6"roF*0~>
+q>UZtq>^3dq#/P>(C'pD!<E=CDfTc=qu$6dq>^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4
+#m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE
+rWi<"rJ;<o!!E#snH&Xk%g`4:#QP_f2knq%qtBmar;QZormCa)rV--_qY^6gqf-[qCN4<6"9el.
+"p"l.#6552!t,,7!!NT."oJ?/q$@*#p'1ZrNV`SGnc/I_l2Ue_%KHD,rrE-("p=u6!<;oms8N!3
+nG)nQqtU!h!WW6)"p4f's8W)us82j"!WW6"roF*0~>
+q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4<qYU0grVQEfrquQLrs\i%r9jO["98E&!WiDk!"T/5
+#m:82!<iW,$jZl;qtp3g#Q4W(!s/N,!r)`s!<<0"rn[Sk!!30#r;6<m"Sqffq=k+#!WD]dqY^9i
+rm1WErWi9!rjQr_AnL:<&S#Tf)?pQL#Qt2R?E`Shq#10jrm(O&qXsa`qYOT%=oe^3!!*?*"p=u.
+":#)2"9J`$#RUP5!<]6rUA:Ggp]Ufuq$$uts7lKgq#'OWl2Ue_%KHD,rrE-%#7Cb?#64Ans8W'5
+o_eOZqYBs]!<W?)"pG,.rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4<qYU0grVQEfrquQLrs\i%r9jO["98E&!WiDk!"T/5
+#m:82!<iW,$jZl;qtp3g#Q4W(!s/N,!r)`s!<<0"rn[Sk!!30#r;6<m"Sqffq=k+#!WD]dqY^9i
+rm1WErWi9!rjQr_AnL:<&S#Tf)?pQL#Qt2R?E`Shq#10jrm(O&qXsa`qYOT%=oe^3!!*?*"p=u.
+":#)2"9J`$#RUP5!<]6rUA:Ggp]Ufuq$$uts7lKgq#'OWl2Ue_%KHD,rrE-%#7Cb?#64Ans8W'5
+o_eOZqYBs]!<W?)"pG,.rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4<qYU0grVQEfrquQLrs\i%r9jO["98E&!WiDk!"T/5
+#m:82!<iW,$jZl;qtp3g#Q4W(!s/N,!r)`s!<<0"rn[Sk!!30#r;6<m"Sqffq=k+#!WD]dqY^9i
+rm1WErWi9!rjQr_AnL:<&S#Tf)?pQL#Qt2R?E`Shq#10jrm(O&qXsa`qYOT%=oe^3!!*?*"p=u.
+":#)2"9J`$#RUP5!<]6rUA:Ggp]Ufuq$$uts7lKgq#'OWl2Ue_%KHD,rrE-%#7Cb?#64Ans8W'5
+o_eOZqYBs]!<W?)"pG,.rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>Ud!p&4pfr;Q`t!R^r`!sJ`+!<iH*!sf)47R7"Or;-3brVQ9Hrsnr)rq#p\ot:>+!WrN+!Up("
+!rrH(!W`9%!sJi6!")!hq>LHo!!E3'!<r]%!!30$!WN)SrtbY:!<;uqp]1Kkr;ZQj!<rQ(qu$9g
+rVk+Bs8E9#s8VWMjQ5M!j721 at gZ[UMH#5r*$NLPG28Jq_rqufprr1=F%K62#r;-Bo!!!-%"U"r,
+![[mK!!*W4#6k;2q7a\V]"GHNpAOkV!<!*&rr!&5q>C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r
+qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~>
+q>Ud!p&4pfr;Q`t!R^r`!sJ`+!<iH*!sf)47R7"Or;-3brVQ9Hrsnr)rq#p\ot:>+!WrN+!Up("
+!rrH(!W`9%!sJi6!")!hq>LHo!!E3'!<r]%!!30$!WN)SrtbY:!<;uqp]1Kkr;ZQj!<rQ(qu$9g
+rVk+Bs8E9#s8VWMjQ5M!j721 at gZ[UMH#5r*$NLPG28Jq_rqufprr1=F%K62#r;-Bo!!!-%"U"r,
+![[mK!!*W4#6k;2q7a\V]"GHNpAOkV!<!*&rr!&5q>C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r
+qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~>
+q>Ud!p&4pfr;Q`t!R^r`!sJ`+!<iH*!sf)47R7"Or;-3brVQ9Hrsnr)rq#p\ot:>+!WrN+!Up("
+!rrH(!W`9%!sJi6!")!hq>LHo!!E3'!<r]%!!30$!WN)SrtbY:!<;uqp]1Kkr;ZQj!<rQ(qu$9g
+rVk+Bs8E9#s8VWMjQ5M!j721 at gZ[UMH#5r*$NLPG28Jq_rqufprr1=F%K62#r;-Bo!!!-%"U"r,
+![[mK!!*W4#6k;2q7a\V]"GHNpAOkV!<!*&rr!&5q>C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r
+qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~>
+q>UZtr;Zfjnc._O$j?Y5!!<B)!!EB(#m'f$*=2]K!"8i0!WW`3!!N]00e32%o)AX]qu$Ems8N#\
+rtYP5rVHEfqY\hD!!iQ2!<W<%!WW<,mf4[>"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+
+!<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)<bq>V90qt]RAhT<EK!Y#27
+A%hm:rVlcmrr2fBrt,2-o`"Ua!rr<(!XSl-&-2t6!?9J>e^2 at fd/<S:rqHBfqtL-h!"&H("Qo^-
+qtpBhs8)lorVGdYs8EK-rVuis!!<3&!!:UJrql`prY5>1s8DrqrW!!"!!**#s8N&urr<#r!!E?'
+!<2uYs*t~>
+q>UZtr;Zfjnc._O$j?Y5!!<B)!!EB(#m'f$*=2]K!"8i0!WW`3!!N]00e32%o)AX]qu$Ems8N#\
+rtYP5rVHEfqY\hD!!iQ2!<W<%!WW<,mf4[>"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+
+!<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)<bq>V90qt]RAhT<EK!Y#27
+A%hm:rVlcmrr2fBrt,2-o`"Ua!rr<(!XSl-&-2t6!?9J>e^2 at fd/<S:rqHBfqtL-h!"&H("Qo^-
+qtpBhs8)lorVGdYs8EK-rVuis!!<3&!!:UJrql`prY5>1s8DrqrW!!"!!**#s8N&urr<#r!!E?'
+!<2uYs*t~>
+q>UZtr;Zfjnc._O$j?Y5!!<B)!!EB(#m'f$*=2]K!"8i0!WW`3!!N]00e32%o)AX]qu$Ems8N#\
+rtYP5rVHEfqY\hD!!iQ2!<W<%!WW<,mf4[>"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+
+!<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)<bq>V90qt]RAhT<EK!Y#27
+A%hm:rVlcmrr2fBrt,2-o`"Ua!rr<(!XSl-&-2t6!?9J>e^2 at fd/<S:rqHBfqtL-h!"&H("Qo^-
+qtpBhs8)lorVGdYs8EK-rVuis!!<3&!!:UJrql`prY5>1s8DrqrW!!"!!**#s8N&urr<#r!!E?'
+!<2uYs*t~>
+q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos
+roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+
+!<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r
+dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos
+roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+
+!<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r
+dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos
+roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+
+!<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r
+dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg
+s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~>
+q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])<G!!!*'!"&i2!!!?0!rrT,"p"Gts7Q<frVuos
+roa:]rVZTnr<E;rn.,R5"9&9'!<<<2!q-*t#R(A4#mC>4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f.
+!!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@
+s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p at J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])<G!!!*'!"&i2!!!?0!rrT,"p"Gts7Q<frVuos
+roa:]rVZTnr<E;rn.,R5"9&9'!<<<2!q-*t#R(A4#mC>4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f.
+!!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@
+s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p at J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])<G!!!*'!"&i2!!!?0!rrT,"p"Gts7Q<frVuos
+roa:]rVZTnr<E;rn.,R5"9&9'!<<<2!q-*t#R(A4#mC>4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f.
+!!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@
+s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p at J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:!<ii2$31&0!"Ar<!!*0(!<Nc)s7Q3crVuos
+roa=Zr"Au-rquTkqBd3b$3^h?!!*'"!q63h!uh:E!WW3($3T;Eq#:$\rr2L1.KKMP!<<9)!!N9$
+!!3)uh>[`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn
+dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:!<ii2$31&0!"Ar<!!*0(!<Nc)s7Q3crVuos
+roa=Zr"Au-rquTkqBd3b$3^h?!!*'"!q63h!uh:E!WW3($3T;Eq#:$\rr2L1.KKMP!<<9)!!N9$
+!!3)uh>[`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn
+dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:!<ii2$31&0!"Ar<!!*0(!<Nc)s7Q3crVuos
+roa=Zr"Au-rquTkqBd3b$3^h?!!*'"!q63h!uh:E!WW3($3T;Eq#:$\rr2L1.KKMP!<<9)!!N9$
+!!3)uh>[`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn
+dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis
+!!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S<Gp\Facs8W)t
+kPtS[rr)lr&-).squ6Ke2?3dp!X8l1!q61;!WW3&"TSN'!!WN.&cp)PqsXL^qZ$+M!!!$(!<NH*
+!!*'#rVlcphZ!i]!W`8urr2rur;Qp%!!3,ur5ep6rpg$^rqu^*rr)EI;um.SYk\+prVulndJkrn
+qtg6iqu6Kinc/OarqZTjrqcZaqtpEhp%84Qs8)He_?:&CrsAi*4oG?Po`+Xaro!ebrVuis!!*'#
+!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S<Gp\Facs8W)t
+kPtS[rr)lr&-).squ6Ke2?3dp!X8l1!q61;!WW3&"TSN'!!WN.&cp)PqsXL^qZ$+M!!!$(!<NH*
+!!*'#rVlcphZ!i]!W`8urr2rur;Qp%!!3,ur5ep6rpg$^rqu^*rr)EI;um.SYk\+prVulndJkrn
+qtg6iqu6Kinc/OarqZTjrqcZaqtpEhp%84Qs8)He_?:&CrsAi*4oG?Po`+Xaro!ebrVuis!!*'#
+!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S<Gp\Facs8W)t
+kPtS[rr)lr&-).squ6Ke2?3dp!X8l1!q61;!WW3&"TSN'!!WN.&cp)PqsXL^qZ$+M!!!$(!<NH*
+!!*'#rVlcphZ!i]!W`8urr2rur;Qp%!!3,ur5ep6rpg$^rqu^*rr)EI;um.SYk\+prVulndJkrn
+qtg6iqu6Kinc/OarqZTjrqcZaqtpEhp%84Qs8)He_?:&CrsAi*4oG?Po`+Xaro!ebrVuis!!*'#
+!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~>
+q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^
+s8N#\s8W&srr2p-rV6<doDSYb#65)5!!!B(!;uro!!WT,!sAl0!r`<<"qCV<!3l+lqtg9jpAIbh
+"T\f1#6=i(!WDuRrs/T+!<;urrr<&srriH(!WW,rVuQbqrr3#ur;QO#PRJ'9Q21IYp\t3kdJkm!
+q"4L\o)/FXr;HTerql`nrquZfr;HZor;HBbqX=Bd#m(/4q$@)sqZ$TdqY0X=rs\l+rVup!!!*'$
+r;Zcfs8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^
+s8N#\s8W&srr2p-rV6<doDSYb#65)5!!!B(!;uro!!WT,!sAl0!r`<<"qCV<!3l+lqtg9jpAIbh
+"T\f1#6=i(!WDuRrs/T+!<;urrr<&srriH(!WW,rVuQbqrr3#ur;QO#PRJ'9Q21IYp\t3kdJkm!
+q"4L\o)/FXr;HTerql`nrquZfr;HZor;HBbqX=Bd#m(/4q$@)sqZ$TdqY0X=rs\l+rVup!!!*'$
+r;Zcfs8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^
+s8N#\s8W&srr2p-rV6<doDSYb#65)5!!!B(!;uro!!WT,!sAl0!r`<<"qCV<!3l+lqtg9jpAIbh
+"T\f1#6=i(!WDuRrs/T+!<;urrr<&srriH(!WW,rVuQbqrr3#ur;QO#PRJ'9Q21IYp\t3kdJkm!
+q"4L\o)/FXr;HTerql`nrquZfr;HZor;HBbqX=Bd#m(/4q$@)sqZ$TdqY0X=rs\l+rVup!!!*'$
+r;Zcfs8W'#!!3-#rW*6'rr<#ts8Vus"9JQ'rr2!YJ,~>
+q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu<!X])2#RCP2r;?Nn
+s8N#\rrE&prt"u+r:L!cr;:2?"TeZ*#6Ff("9AQ*!sA8t&-Mt8!!<3(!=&Z/$j6Qsp\Xsf&c)A#
+DIs%X!ser/!W`B$rVZWNrs/T+!<;urrr<&srriH(!WW,r\GuC(q#:EprVlfr&H;V-rq+,]!#^1T
+r;HHjrr(7E"TA/pq>'sb,l%?<qt^6frr)WkqY^9fp\apfpA:*Z!sAf7oFbg9o_eUXs6\YB%/p5*
+!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu<!X])2#RCP2r;?Nn
+s8N#\rrE&prt"u+r:L!cr;:2?"TeZ*#6Ff("9AQ*!sA8t&-Mt8!!<3(!=&Z/$j6Qsp\Xsf&c)A#
+DIs%X!ser/!W`B$rVZWNrs/T+!<;urrr<&srriH(!WW,r\GuC(q#:EprVlfr&H;V-rq+,]!#^1T
+r;HHjrr(7E"TA/pq>'sb,l%?<qt^6frr)WkqY^9fp\apfpA:*Z!sAf7oFbg9o_eUXs6\YB%/p5*
+!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu<!X])2#RCP2r;?Nn
+s8N#\rrE&prt"u+r:L!cr;:2?"TeZ*#6Ff("9AQ*!sA8t&-Mt8!!<3(!=&Z/$j6Qsp\Xsf&c)A#
+DIs%X!ser/!W`B$rVZWNrs/T+!<;urrr<&srriH(!WW,r\GuC(q#:EprVlfr&H;V-rq+,]!#^1T
+r;HHjrr(7E"TA/pq>'sb,l%?<qt^6frr)WkqY^9fp\apfpA:*Z!sAf7oFbg9o_eUXs6\YB%/p5*
+!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~>
+q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k
+s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7 at qoD/F_r;(sG
+#64o2!<EQ%r;?NMrt>A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K
+s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis
+!!3-&!!3&lrq-3urr)cr!<N9%!sAQ%rqufr!!E0""9JQ'rr2!YJ,~>
+q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k
+s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7 at qoD/F_r;(sG
+#64o2!<EQ%r;?NMrt>A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K
+s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis
+!!3-&!!3&lrq-3urr)cr!<N9%!sAQ%rqufr!!E0""9JQ'rr2!YJ,~>
+q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k
+s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7 at qoD/F_r;(sG
+#64o2!<EQ%r;?NMrt>A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K
+s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis
+!!3-&!!3&lrq-3urr)cr!<N9%!sAQ%rqufr!!E0""9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r at qu-Qprr1OL&,lG(Q3.6l
+!WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u<pAP!ihZ"5h!W`8uo_SjprVQEhrrN0$s8Dkg
+rt#&,qu65[$Nj/Sr;?Hjqu4qA"oeJuqtg0bs8W$4qZ$Elqu6Kkqt9u&B*JD>!sJ`%qt^'dhZ"#_
+s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r at qu-Qprr1OL&,lG(Q3.6l
+!WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u<pAP!ihZ"5h!W`8uo_SjprVQEhrrN0$s8Dkg
+rt#&,qu65[$Nj/Sr;?Hjqu4qA"oeJuqtg0bs8W$4qZ$Elqu6Kkqt9u&B*JD>!sJ`%qt^'dhZ"#_
+s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r at qu-Qprr1OL&,lG(Q3.6l
+!WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u<pAP!ihZ"5h!W`8uo_SjprVQEhrrN0$s8Dkg
+rt#&,qu65[$Nj/Sr;?Hjqu4qA"oeJuqtg0bs8W$4qZ$Elqu6Kkqt9u&B*JD>!sJ`%qt^'dhZ"#_
+s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[
+Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg
+rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup%
+#R^\8q>UBhs8DrsrVud+#ltA<!>>S3q>^*eq"k$prW!'&!!*#tjSs`~>
+f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[
+Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg
+rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup%
+#R^\8q>UBhs8DrsrVud+#ltA<!>>S3q>^*eq"k$prW!'&!!*#tjSs`~>
+f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[
+Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg
+rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup%
+#R^\8q>UBhs8DrsrVud+#ltA<!>>S3q>^*eq"k$prW!'&!!*#tjSs`~>
+f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2
+!s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cq<u>D!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf
+rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8
+pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2
+!s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cq<u>D!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf
+rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8
+pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2
+!s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cq<u>D!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf
+rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8
+pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s at UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,?
+"Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf&
+rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k
+o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s at UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,?
+"Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf&
+rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k
+o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s at UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,?
+"Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf&
+rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k
+o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y
+lMgM`!"Ju9k5Z;-!<<B*%0lk>rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g
+&,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu
+#6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y
+lMgM`!"Ju9k5Z;-!<<B*%0lk>rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g
+&,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu
+#6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y
+lMgM`!"Ju9k5Z;-!<<B*%0lk>rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g
+&,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu
+#6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!%
+fQJ(!Ug!i!=Ar,!"J5\p at nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F
+9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm
+JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~>
+f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!%
+fQJ(!Ug!i!=Ar,!"J5\p at nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F
+9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm
+JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~>
+f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!%
+fQJ(!Ug!i!=Ar,!"J5\p at nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F
+9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm
+JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~>
+o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh.
+q>^6irqH-`/Hu1Y!<WB(!WiB(nGiOirW!Q4"98E)!s\hPrr;]kp\4[`rqG7K'*&(6s8;lqrVHQn
+s8N$"!!3,ur5Sd:rr;uurqQN_rr)lrrXSi(r;ZEQB*eQao_SI]r6YKDrq$.+r;$9_rVQT>!t,,!
+$j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~>
+o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh.
+q>^6irqH-`/Hu1Y!<WB(!WiB(nGiOirW!Q4"98E)!s\hPrr;]kp\4[`rqG7K'*&(6s8;lqrVHQn
+s8N$"!!3,ur5Sd:rr;uurqQN_rr)lrrXSi(r;ZEQB*eQao_SI]r6YKDrq$.+r;$9_rVQT>!t,,!
+$j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~>
+o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh.
+q>^6irqH-`/Hu1Y!<WB(!WiB(nGiOirW!Q4"98E)!s\hPrr;]kp\4[`rqG7K'*&(6s8;lqrVHQn
+s8N$"!!3,ur5Sd:rr;uurqQN_rr)lrrXSi(r;ZEQB*eQao_SI]r6YKDrq$.+r;$9_rVQT>!t,,!
+$j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~>
+o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!<YRcrlb<Pqtfs^
+oL1qH!=8u2"p+f.kPu)&!WiY?rUp$coD\C[q#0(L"on])s8;lqqYp^#!!3,ur5emBrVufns8Mu[
+rr)lsrr;p*p](6flZ)t-EqfS/q8`L8rqcX*rq?0brqa2/!!i]'"Tq!hq>T(I"oeQ%rr<#P!!!'!
+!riN."9f/,j8XW~>
+o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!<YRcrlb<Pqtfs^
+oL1qH!=8u2"p+f.kPu)&!WiY?rUp$coD\C[q#0(L"on])s8;lqqYp^#!!3,ur5emBrVufns8Mu[
+rr)lsrr;p*p](6flZ)t-EqfS/q8`L8rqcX*rq?0brqa2/!!i]'"Tq!hq>T(I"oeQ%rr<#P!!!'!
+!riN."9f/,j8XW~>
+o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!<YRcrlb<Pqtfs^
+oL1qH!=8u2"p+f.kPu)&!WiY?rUp$coD\C[q#0(L"on])s8;lqqYp^#!!3,ur5emBrVufns8Mu[
+rr)lsrr;p*p](6flZ)t-EqfS/q8`L8rqcX*rq?0brqa2/!!i]'"Tq!hq>T(I"oeQ%rr<#P!!!'!
+!riN."9f/,j8XW~>
+m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!<WDsrr1+@&,Z(tq>1$^
+>lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU
+s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!<WT!!Eo*mq>T(I"oeQ%rr<#P!"&`.
+!XAr1&-)n0roF*0~>
+m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!<WDsrr1+@&,Z(tq>1$^
+>lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU
+s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!<WT!!Eo*mq>T(I"oeQ%rr<#P!"&`.
+!XAr1&-)n0roF*0~>
+m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!<WDsrr1+@&,Z(tq>1$^
+>lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU
+s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!<WT!!Eo*mq>T(I"oeQ%rr<#P!"&`.
+!XAr1&-)n0roF*0~>
+nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb<PrqcBf
+q"t$eE<?4J#m(51kl;4t#m()/!WiOgqY9d\rVH3DrrrH)!<;urrqcWu!WW9$rVXb:#Q=]%rVlis
+r;$B\r;ciqrVud)q>^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs at c"UG,.EW#\*q>T(I"oeQ%
+rr<#P!"&`.!X&l6$3L;.q;hR+~>
+nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb<PrqcBf
+q"t$eE<?4J#m(51kl;4t#m()/!WiOgqY9d\rVH3DrrrH)!<;urrqcWu!WW9$rVXb:#Q=]%rVlis
+r;$B\r;ciqrVud)q>^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs at c"UG,.EW#\*q>T(I"oeQ%
+rr<#P!"&`.!X&l6$3L;.q;hR+~>
+nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb<PrqcBf
+q"t$eE<?4J#m(51kl;4t#m()/!WiOgqY9d\rVH3DrrrH)!<;urrqcWu!WW9$rVXb:#Q=]%rVlis
+r;$B\r;ciqrVud)q>^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs at c"UG,.EW#\*q>T(I"oeQ%
+rr<#P!"&`.!X&l6$3L;.q;hR+~>
+q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K
+qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl
+qtpEgrTjL`rX\`#pA+Qn!<Q$@rU]mbqu4_;r;6QnrVd9'rr<3'!sJl2r;Z9Zq9f3Grr<#ts8UdQ
+$3:20!t>D>!sAGqjSs`~>
+q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K
+qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl
+qtpEgrTjL`rX\`#pA+Qn!<Q$@rU]mbqu4_;r;6QnrVd9'rr<3'!sJl2r;Z9Zq9f3Grr<#ts8UdQ
+$3:20!t>D>!sAGqjSs`~>
+q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K
+qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl
+qtpEgrTjL`rX\`#pA+Qn!<Q$@rU]mbqu4_;r;6QnrVd9'rr<3'!sJl2r;Z9Zq9f3Grr<#ts8UdQ
+$3:20!t>D>!sAGqjSs`~>
+q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G
+rV-9hqYL*`q=pW`!<iQ+qZ$TsnGj(#$4I+H"U+l3"^(d%rVlTKrrrH)!<;urrqcWu!WW9$rVXb:
+#QFGos8;coqrn%Xs8W'/rV$9eqY.2t!_:l=qtL-caSu8=r;?Tn&-)M'?iUH8!WiK+pA+IXr6bNJ
+rr<#ts8UdQ$3:20!=]&8!2'#bjSs`~>
+q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G
+rV-9hqYL*`q=pW`!<iQ+qZ$TsnGj(#$4I+H"U+l3"^(d%rVlTKrrrH)!<;urrqcWu!WW9$rVXb:
+#QFGos8;coqrn%Xs8W'/rV$9eqY.2t!_:l=qtL-caSu8=r;?Tn&-)M'?iUH8!WiK+pA+IXr6bNJ
+rr<#ts8UdQ$3:20!=]&8!2'#bjSs`~>
+q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G
+rV-9hqYL*`q=pW`!<iQ+qZ$TsnGj(#$4I+H"U+l3"^(d%rVlTKrrrH)!<;urrqcWu!WW9$rVXb:
+#QFGos8;coqrn%Xs8W'/rV$9eqY.2t!_:l=qtL-caSu8=r;?Tn&-)M'?iUH8!WiK+pA+IXr6bNJ
+rr<#ts8UdQ$3:20!=]&8!2'#bjSs`~>
+q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@
+(]44-qu$<irUfISpTY,.!s8T*!!!$$"7Z@%!<`Q/&-)e9"TSNkq>L?dhZ!c[!W`8urr2co"TeZ)
+s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7
+rqlfqqU,<Hrr<#ts8UdQ!!3'#"p>87"o\;ijSs`~>
+q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@
+(]44-qu$<irUfISpTY,.!s8T*!!!$$"7Z@%!<`Q/&-)e9"TSNkq>L?dhZ!c[!W`8urr2co"TeZ)
+s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7
+rqlfqqU,<Hrr<#ts8UdQ!!3'#"p>87"o\;ijSs`~>
+q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@
+(]44-qu$<irUfISpTY,.!s8T*!!!$$"7Z@%!<`Q/&-)e9"TSNkq>L?dhZ!c[!W`8urr2co"TeZ)
+s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7
+rqlfqqU,<Hrr<#ts8UdQ!!3'#"p>87"o\;ijSs`~>
+q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08
+rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<<E+!W)fdrSIPY!!30#r;Q]lrriH(
+!WW,raSuMCrUdjQC2dh]C@>m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`.
+!Rgr?rq$0_dJjCLs8W)us4RG[!<N<&!s/JOo)ARJs*t~>
+q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08
+rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<<E+!W)fdrSIPY!!30#r;Q]lrriH(
+!WW,raSuMCrUdjQC2dh]C@>m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`.
+!Rgr?rq$0_dJjCLs8W)us4RG[!<N<&!s/JOo)ARJs*t~>
+q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08
+rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<<E+!W)fdrSIPY!!30#r;Q]lrriH(
+!WW,raSuMCrUdjQC2dh]C@>m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`.
+!Rgr?rq$0_dJjCLs8W)us4RG[!<N<&!s/JOo)ARJs*t~>
+q>Ud#qYpHhrr2WirTjG<r;Q]d$ig>3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT.
+"9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH)
+!<;urrqcWu!WW9$rVXh<rr2rp"d'W+$jR%:#6+qr"onu/"qh4G#RUnC$3^MD&VL&]qtp<krQ5'U
+qu-Njrql0`'F4[O!!<3$l2LYZrVQNhe,TII"o\2qqY^?M!"K,3"98K(!rr</!!rN#rT!p.~>
+q>Ud#qYpHhrr2WirTjG<r;Q]d$ig>3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT.
+"9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH)
+!<;urrqcWu!WW9$rVXh<rr2rp"d'W+$jR%:#6+qr"onu/"qh4G#RUnC$3^MD&VL&]qtp<krQ5'U
+qu-Njrql0`'F4[O!!<3$l2LYZrVQNhe,TII"o\2qqY^?M!"K,3"98K(!rr</!!rN#rT!p.~>
+q>Ud#qYpHhrr2WirTjG<r;Q]d$ig>3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT.
+"9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH)
+!<;urrqcWu!WW9$rVXh<rr2rp"d'W+$jR%:#6+qr"onu/"qh4G#RUnC$3^MD&VL&]qtp<krQ5'U
+qu-Njrql0`'F4[O!!<3$l2LYZrVQNhe,TII"o\2qqY^?M!"K,3"98K(!rr</!!rN#rT!p.~>
+q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<<B/!"&i/
+$2O5mr;HWnrrE&?s8W!2qtg0dr;?Eu!!*H3!!`K.!<N6($h"&s!<<0"rn[SY!!30#r;Q]lrriH(
+!WW,rb5_M@"o\B!L_gH]!!**#rW*T2!WW?'"p,/4&Y8arrVlcnr5o!=rY=l#meck]!<<N.#Qt8/
+s8W)trVcZle,TFH"oJ)mq>LKR!"B#3#QOi=!#>\BqXj[[j8XW~>
+q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<<B/!"&i/
+$2O5mr;HWnrrE&?s8W!2qtg0dr;?Eu!!*H3!!`K.!<N6($h"&s!<<0"rn[SY!!30#r;Q]lrriH(
+!WW,rb5_M@"o\B!L_gH]!!**#rW*T2!WW?'"p,/4&Y8arrVlcnr5o!=rY=l#meck]!<<N.#Qt8/
+s8W)trVcZle,TFH"oJ)mq>LKR!"B#3#QOi=!#>\BqXj[[j8XW~>
+q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<<B/!"&i/
+$2O5mr;HWnrrE&?s8W!2qtg0dr;?Eu!!*H3!!`K.!<N6($h"&s!<<0"rn[SY!!30#r;Q]lrriH(
+!WW,rb5_M@"o\B!L_gH]!!**#rW*T2!WW?'"p,/4&Y8arrVlcnr5o!=rY=l#meck]!<<N.#Qt8/
+s8W)trVcZle,TFH"oJ)mq>LKR!"B#3#QOi=!#>\BqXj[[j8XW~>
+q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"<r8S^RiT&eBirBSi#QOr5!"&]4"q(PRp[@JH
+rVjb8s82urqYL*gr!r`I)Zp6M"UYS;!!iZ,"n2Kn!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+#QO]$JeSCh+R'LS&J>ck'G1rj(E*nf"p5$<gA_$JrVcT6rt"u$q>L0J!!E9=!!NNIrU^$grr2rr
+e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~>
+q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"<r8S^RiT&eBirBSi#QOr5!"&]4"q(PRp[@JH
+rVjb8s82urqYL*gr!r`I)Zp6M"UYS;!!iZ,"n2Kn!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+#QO]$JeSCh+R'LS&J>ck'G1rj(E*nf"p5$<gA_$JrVcT6rt"u$q>L0J!!E9=!!NNIrU^$grr2rr
+e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~>
+q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"<r8S^RiT&eBirBSi#QOr5!"&]4"q(PRp[@JH
+rVjb8s82urqYL*gr!r`I)Zp6M"UYS;!!iZ,"n2Kn!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+#QO]$JeSCh+R'LS&J>ck'G1rj(E*nf"p5$<gA_$JrVcT6rt"u$q>L0J!!E9=!!NNIrU^$grr2rr
+e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~>
+q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl
+rknd9rVcZor=A]%p&%A]!rrH(%fl_3!<qrm!W`9%rr1aR"on])s8;lqqYp^#!!3,ur6#'>rXSu$
+s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!!<Tb
+p\Xpes8N#Hs8W''rV6<Yqu&<4iA;'01HdNU1,Ak,p@%_Pqu?TTs*t~>
+q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl
+rknd9rVcZor=A]%p&%A]!rrH(%fl_3!<qrm!W`9%rr1aR"on])s8;lqqYp^#!!3,ur6#'>rXSu$
+s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!!<Tb
+p\Xpes8N#Hs8W''rV6<Yqu&<4iA;'01HdNU1,Ak,p@%_Pqu?TTs*t~>
+q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl
+rknd9rVcZor=A]%p&%A]!rrH(%fl_3!<qrm!W`9%rr1aR"on])s8;lqqYp^#!!3,ur6#'>rXSu$
+s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!!<Tb
+p\Xpes8N#Hs8W''rV6<Yqu&<4iA;'01HdNU1,Ak,p@%_Pqu?TTs*t~>
+q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!<N9%!=&T*!=&T4!s/Q*!WW<(
+!<l'prr2Z`rke^2r=8VqrV$"\$N^kB!X/T)"Rc<l!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+&-)J*L_^%)f_>1:q=sa\qXXG!qYU'^q=jgbo_#jq!X]<?lhC)Prr<#sqT/[HqY^3o"pY22":Ij$
+p%/+)s8W''qt]m]n,*%WiVa;\s7Q?gqY^3gnGW7RrVcKOs*t~>
+q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!<N9%!=&T*!=&T4!s/Q*!WW<(
+!<l'prr2Z`rke^2r=8VqrV$"\$N^kB!X/T)"Rc<l!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+&-)J*L_^%)f_>1:q=sa\qXXG!qYU'^q=jgbo_#jq!X]<?lhC)Prr<#sqT/[HqY^3o"pY22":Ij$
+p%/+)s8W''qt]m]n,*%WiVa;\s7Q?gqY^3gnGW7RrVcKOs*t~>
+q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!<N9%!=&T*!=&T4!s/Q*!WW<(
+!<l'prr2Z`rke^2r=8VqrV$"\$N^kB!X/T)"Rc<l!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@
+&-)J*L_^%)f_>1:q=sa\qXXG!qYU'^q=jgbo_#jq!X]<?lhC)Prr<#sqT/[HqY^3o"pY22":Ij$
+p%/+)s8W''qt]m]n,*%WiVa;\s7Q?gqY^3gnGW7RrVcKOs*t~>
+q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb
+p;$_'r=8Vuq>0ns at KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,*
+KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD
+rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~>
+q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb
+p;$_'r=8Vuq>0ns at KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,*
+KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD
+rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~>
+q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb
+p;$_'r=8Vuq>0ns at KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,*
+KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD
+rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~>
+q>UfurV?-_q"t*o!Wi9#!<E8l!"T88!<rN+"9AN,"p"])!s&9#rW!0(!WWB+!WWH(!=]88"V1_@
+H2.+/q#C6f_>j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ)
+s8Dl<s8W'+qu?SL)$LW)r;6Bhrr)orq>U?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8
+K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~>
+q>UfurV?-_q"t*o!Wi9#!<E8l!"T88!<rN+"9AN,"p"])!s&9#rW!0(!WWB+!WWH(!=]88"V1_@
+H2.+/q#C6f_>j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ)
+s8Dl<s8W'+qu?SL)$LW)r;6Bhrr)orq>U?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8
+K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~>
+q>UfurV?-_q"t*o!Wi9#!<E8l!"T88!<rN+"9AN,"p"])!s&9#rW!0(!WWB+!WWH(!=]88"V1_@
+H2.+/q#C6f_>j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ)
+s8Dl<s8W'+qu?SL)$LW)r;6Bhrr)orq>U?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8
+K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~>
+q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*!<N9(!!<N-#*euap](0kr;-El])NQCs8Mcmqu?SY
+"9AZ+#Qb#,"TeZ+":"W$!W`9%rr1aR"on])s8;lqqu7!%!WW6#rVZ]prltKCrr;j"r.Z'h'=HNl
+fE0aYfD!u8g"=s/f at I-gNg<L$+V+VU#s#!Crq?9grr)urs8L at E(&@n0qZ$QpBa+S?!s&B)OoOqF
+s7Z9drpB^ipAb0grVuf]s8Dp#qu?Torr(dT%fZM&s8Vups7lWkr;Q`ojSs`~>
+q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*!<N9(!!<N-#*euap](0kr;-El])NQCs8Mcmqu?SY
+"9AZ+#Qb#,"TeZ+":"W$!W`9%rr1aR"on])s8;lqqu7!%!WW6#rVZ]prltKCrr;j"r.Z'h'=HNl
+fE0aYfD!u8g"=s/f at I-gNg<L$+V+VU#s#!Crq?9grr)urs8L at E(&@n0qZ$QpBa+S?!s&B)OoOqF
+s7Z9drpB^ipAb0grVuf]s8Dp#qu?Torr(dT%fZM&s8Vups7lWkr;Q`ojSs`~>
+q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*!<N9(!!<N-#*euap](0kr;-El])NQCs8Mcmqu?SY
+"9AZ+#Qb#,"TeZ+":"W$!W`9%rr1aR"on])s8;lqqu7!%!WW6#rVZ]prltKCrr;j"r.Z'h'=HNl
+fE0aYfD!u8g"=s/f at I-gNg<L$+V+VU#s#!Crq?9grr)urs8L at E(&@n0qZ$QpBa+S?!s&B)OoOqF
+s7Z9drpB^ipAb0grVuf]s8Dp#qu?Torr(dT%fZM&s8Vups7lWkr;Q`ojSs`~>
+q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/!<i`4"TSo2!r)`s!<<0"
+rn[SW!!30#r;$@!rW3'"s8Dorrr1+@&,lG&Jf"Rp93kh.>[(E9>5;G'>Q%b*=VW_/)''"f$31;F
+EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~>
+q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/!<i`4"TSo2!r)`s!<<0"
+rn[SW!!30#r;$@!rW3'"s8Dorrr1+@&,lG&Jf"Rp93kh.>[(E9>5;G'>Q%b*=VW_/)''"f$31;F
+EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~>
+q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/!<i`4"TSo2!r)`s!<<0"
+rn[SW!!30#r;$@!rW3'"s8Dorrr1+@&,lG&Jf"Rp93kh.>[(E9>5;G'>Q%b*=VW_/)''"f$31;F
+EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~>
+q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX
+!W`8uq>Ud#!WW6#rVccqrlb<Hqu6JJ'EeLDq[3?0p'Ua+((:9J%06n<(cGociplm;o`"ggs8W)t
+ci4gSrVZWjs7SJT!<N95!=H[@q>:3bqYgB_s7uX!qu?Kgrq66`PlH7~>
+q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX
+!W`8uq>Ud#!WW6#rVccqrlb<Hqu6JJ'EeLDq[3?0p'Ua+((:9J%06n<(cGociplm;o`"ggs8W)t
+ci4gSrVZWjs7SJT!<N95!=H[@q>:3bqYgB_s7uX!qu?Kgrq66`PlH7~>
+q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX
+!W`8uq>Ud#!WW6#rVccqrlb<Hqu6JJ'EeLDq[3?0p'Ua+((:9J%06n<(cGociplm;o`"ggs8W)t
+ci4gSrVZWjs7SJT!<N95!=H[@q>:3bqYgB_s7uX!qu?Kgrq66`PlH7~>
+q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<</q!!30$!WN)Srr`<'
+!<;umrsAZ+!!*&trVulrbQ%VA#P+$!!!3-%!rW0"!;QZp!#bk>!WrN6!!3gTK:TO'o^htZoDSI_
+rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~>
+q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<</q!!30$!WN)Srr`<'
+!<;umrsAZ+!!*&trVulrbQ%VA#P+$!!!3-%!rW0"!;QZp!#bk>!WrN6!!3gTK:TO'o^htZoDSI_
+rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~>
+q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<</q!!30$!WN)Srr`<'
+!<;umrsAZ+!!*&trVulrbQ%VA#P+$!!!3-%!rW0"!;QZp!#bk>!WrN6!!3gTK:TO'o^htZoDSI_
+rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~>
+q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4
+p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlb<Gr;#g8^9Y6;[e[<GYI2!SjR2g at rV$3hq>UEh
+rVlisrr17D$1Rr]rqu`q!<Ec2!"/Asq>U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~>
+q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4
+p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlb<Gr;#g8^9Y6;[e[<GYI2!SjR2g at rV$3hq>UEh
+rVlisrr17D$1Rr]rqu`q!<Ec2!"/Asq>U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~>
+q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4
+p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlb<Gr;#g8^9Y6;[e[<GYI2!SjR2g at rV$3hq>UEh
+rVlisrr17D$1Rr]rqu`q!<Ec2!"/Asq>U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~>
+q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fP<q#LQt
+!<<0"rn[SW!!30#r:p6s!WW6#rVccqrlb?ArWW?$rquZiq>L-equ6Wo!<<&t&cMS&q>U0grqHEb
+s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~>
+q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fP<q#LQt
+!<<0"rn[SW!!30#r:p6s!WW6#rVccqrlb?ArWW?$rquZiq>L-equ6Wo!<<&t&cMS&q>U0grqHEb
+s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~>
+q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fP<q#LQt
+!<<0"rn[SW!!30#r:p6s!WW6#rVccqrlb?ArWW?$rquZiq>L-equ6Wo!<<&t&cMS&q>U0grqHEb
+s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~>
+q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc&
+!rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm
+qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r<E?%pAY'brVDcYJ,~>
+q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc&
+!rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm
+qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r<E?%pAY'brVDcYJ,~>
+q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc&
+!rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm
+qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r<E?%pAY'brVDcYJ,~>
+q>UZks7cQmrqG%Es8F#<rVulsrr)corVQTlpAO[`q#C-dq#(*frkZJMrr2oss8KS/*rZ-6qu?]i
+s8Mup4ZioK!<N?+!X&Q,!rr?%!WE#shu=GgrrN3$s7ZHjrVlcprr)cr!!)rqq#:3prr<#trmLiH
+rXJo&qu?WorqlZnr;QZoq>^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU<krVlisrr17D'`It.p\=Fi
+#64cmp]('gr;6Hmqtp*e(]OI6s8Drsr;?Ehq>8(Dqullkr:p0_rfmG5~>
+q>UZks7cQmrqG%Es8F#<rVulsrr)corVQTlpAO[`q#C-dq#(*frkZJMrr2oss8KS/*rZ-6qu?]i
+s8Mup4ZioK!<N?+!X&Q,!rr?%!WE#shu=GgrrN3$s7ZHjrVlcprr)cr!!)rqq#:3prr<#trmLiH
+rXJo&qu?WorqlZnr;QZoq>^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU<krVlisrr17D'`It.p\=Fi
+#64cmp]('gr;6Hmqtp*e(]OI6s8Drsr;?Ehq>8(Dqullkr:p0_rfmG5~>
+q>UZks7cQmrqG%Es8F#<rVulsrr)corVQTlpAO[`q#C-dq#(*frkZJMrr2oss8KS/*rZ-6qu?]i
+s8Mup4ZioK!<N?+!X&Q,!rr?%!WE#shu=GgrrN3$s7ZHjrVlcprr)cr!!)rqq#:3prr<#trmLiH
+rXJo&qu?WorqlZnr;QZoq>^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU<krVlisrr17D'`It.p\=Fi
+#64cmp]('gr;6Hmqtp*e(]OI6s8Drsr;?Ehq>8(Dqullkr:p0_rfmG5~>
+ao<7Rq>L<grqZTkqY:!gmJZhSrq??cqs47Prr/i"!<r2qrVlfrs8K;'(Amk)p\@hi#64f2!=8f1
+!WW6$!WE#shu=_hr<EH+r9sX\r;QWmrqlNm!`o$nnbN.]r;ZfrrR1`Crr;orrWiB#qY^<jrr)`o
+s8Ei7rVuiorVZWmrr)`ls8W)uqZ$Nkqu?Z;rt#&)q=4I\!Xf*4rV69^s8DKf(]=71r;6Ehq#'m_
+p\YL(p^$Hjq=jgar0753~>
+ao<7Rq>L<grqZTkqY:!gmJZhSrq??cqs47Prr/i"!<r2qrVlfrs8K;'(Amk)p\@hi#64f2!=8f1
+!WW6$!WE#shu=_hr<EH+r9sX\r;QWmrqlNm!`o$nnbN.]r;ZfrrR1`Crr;orrWiB#qY^<jrr)`o
+s8Ei7rVuiorVZWmrr)`ls8W)uqZ$Nkqu?Z;rt#&)q=4I\!Xf*4rV69^s8DKf(]=71r;6Ehq#'m_
+p\YL(p^$Hjq=jgar0753~>
+ao<7Rq>L<grqZTkqY:!gmJZhSrq??cqs47Prr/i"!<r2qrVlfrs8K;'(Amk)p\@hi#64f2!=8f1
+!WW6$!WE#shu=_hr<EH+r9sX\r;QWmrqlNm!`o$nnbN.]r;ZfrrR1`Crr;orrWiB#qY^<jrr)`o
+s8Ei7rVuiorVZWmrr)`ls8W)uqZ$Nkqu?Z;rt#&)q=4I\!Xf*4rV69^s8DKf(]=71r;6Ehq#'m_
+p\YL(p^$Hjq=jgar0753~>
+ao<UXq"t$hr:p3dqu-0en+utVqu$E\pl1K!Ool$k#m9kurVlfqrrE&'rtbG)qs3tUCC14G"p,29
+"TeZ)!!3&tro!etqu?Tp$3L,"r:p-dqYU3cqZR'!r;6?grr)fqs8MuFs8W'!rVl]m#Q+K!q>C3j
+qYU<mrYPG/rVZWmr;?TnrVlfoqu$9erVZThq>SM9&,H5&oD\Uh"a'S<nbN4aqsj^dq\B,'s8;Wf
+qu-6brrEK%!r2`mqYU*bPlH7~>
+ao<UXq"t$hr:p3dqu-0en+utVqu$E\pl1K!Ool$k#m9kurVlfqrrE&'rtbG)qs3tUCC14G"p,29
+"TeZ)!!3&tro!etqu?Tp$3L,"r:p-dqYU3cqZR'!r;6?grr)fqs8MuFs8W'!rVl]m#Q+K!q>C3j
+qYU<mrYPG/rVZWmr;?TnrVlfoqu$9erVZThq>SM9&,H5&oD\Uh"a'S<nbN4aqsj^dq\B,'s8;Wf
+qu-6brrEK%!r2`mqYU*bPlH7~>
+ao<UXq"t$hr:p3dqu-0en+utVqu$E\pl1K!Ool$k#m9kurVlfqrrE&'rtbG)qs3tUCC14G"p,29
+"TeZ)!!3&tro!etqu?Tp$3L,"r:p-dqYU3cqZR'!r;6?grr)fqs8MuFs8W'!rVl]m#Q+K!q>C3j
+qYU<mrYPG/rVZWmr;?TnrVlfoqu$9erVZThq>SM9&,H5&oD\Uh"a'S<nbN4aqsj^dq\B,'s8;Wf
+qu-6brrEK%!r2`mqYU*bPlH7~>
+ao<U]s7ZHhqY^-bqYg*]rqcTgr;:ejGRX`U!X&K0$NU/'r;HVsrtbM0p\4:Vr.Kq-"pP55"TeZ)
+!!3&tro!etqu$Ho"9eYsr;-?iqu$EgrW39"p\aj_rVQNls8DoEs8W&us8N#trsAZ$qY^!`q>^?j
+qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_
+rV$*g%/'c$p\jm\rV_u\J,~>
+ao<U]s7ZHhqY^-bqYg*]rqcTgr;:ejGRX`U!X&K0$NU/'r;HVsrtbM0p\4:Vr.Kq-"pP55"TeZ)
+!!3&tro!etqu$Ho"9eYsr;-?iqu$EgrW39"p\aj_rVQNls8DoEs8W&us8N#trsAZ$qY^!`q>^?j
+qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_
+rV$*g%/'c$p\jm\rV_u\J,~>
+ao<U]s7ZHhqY^-bqYg*]rqcTgr;:ejGRX`U!X&K0$NU/'r;HVsrtbM0p\4:Vr.Kq-"pP55"TeZ)
+!!3&tro!etqu$Ho"9eYsr;-?iqu$EgrW39"p\aj_rVQNls8DoEs8W&us8N#trsAZ$qY^!`q>^?j
+qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_
+rV$*g%/'c$p\jm\rV_u\J,~>
+ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$`
+ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9 at H%fQ>'rVlcm
+q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F%
+r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~>
+ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$`
+ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9 at H%fQ>'rVlcm
+q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F%
+r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~>
+ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$`
+ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9 at H%fQ>'rVlcm
+q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F%
+r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~>
+fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj]
+s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl
+rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z
+rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~>
+fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj]
+s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl
+rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z
+rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~>
+fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj]
+s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl
+rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z
+rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~>
+g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ:
+rVlQ_rql<er:KX-!!`Q*!<N9&rquiriVstsrqcQp$MO>prVlclrr2Wr!s/>erVZBequ$HnrVb1E
+s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W
+p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~>
+g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ:
+rVlQ_rql<er:KX-!!`Q*!<N9&rquiriVstsrqcQp$MO>prVlclrr2Wr!s/>erVZBequ$HnrVb1E
+s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W
+p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~>
+g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ:
+rVlQ_rql<er:KX-!!`Q*!<N9&rquiriVstsrqcQp$MO>prVlclrr2Wr!s/>erVZBequ$HnrVb1E
+s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W
+p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~>
+g&D'Orquiprqccnqu-Km+8u33rqH<h(`4+n!<`H/"99,;#QOi2!##D8!"Ju4"TJ?"rr2rtriuJ:
+rql]np%\L[p&"^ajQ- at O!WiB'rquiriVs,Ys82X"!?1t9%KHA%rr;Zp!X8Dur;QNkrr<!"rr)iF
+s8W'/qu-NmqY9m_?4R/cQhpRXqu?]q(](d,!=/i4!!!-+"98E&!=fX=qu-*br5nsLrqu]`rVc'[
+r;HQdrqlZmnc'EtqZ$3dr;IT3"p+_r#mg8"rqH6erV6>Us*t~>
+g&D'Orquiprqccnqu-Km+8u33rqH<h(`4+n!<`H/"99,;#QOi2!##D8!"Ju4"TJ?"rr2rtriuJ:
+rql]np%\L[p&"^ajQ- at O!WiB'rquiriVs,Ys82X"!?1t9%KHA%rr;Zp!X8Dur;QNkrr<!"rr)iF
+s8W'/qu-NmqY9m_?4R/cQhpRXqu?]q(](d,!=/i4!!!-+"98E&!=fX=qu-*br5nsLrqu]`rVc'[
+r;HQdrqlZmnc'EtqZ$3dr;IT3"p+_r#mg8"rqH6erV6>Us*t~>
+g&D'Orquiprqccnqu-Km+8u33rqH<h(`4+n!<`H/"99,;#QOi2!##D8!"Ju4"TJ?"rr2rtriuJ:
+rql]np%\L[p&"^ajQ- at O!WiB'rquiriVs,Ys82X"!?1t9%KHA%rr;Zp!X8Dur;QNkrr<!"rr)iF
+s8W'/qu-NmqY9m_?4R/cQhpRXqu?]q(](d,!=/i4!!!-+"98E&!=fX=qu-*br5nsLrqu]`rVc'[
+r;HQdrqlZmnc'EtqZ$3dr;IT3"p+_r#mg8"rqH6erV6>Us*t~>
+li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5<!!WE9#6Ff(
+"s!mJrr)fpV#Lr$s7?9ds8N'&!!!6'rr(dT(]+10rrWQ0qYU<fs8;Kdrr`T-s82]iqof!Prr)`o
+qu?]hpTG/3!!LU at q>:0is!%I at r;Xc'!!\4n^<OX2`7)G2"9ecimJQeWrVlcorr2lprmCcArUKmf
+rVlisrr2p,qYU<krs/W)!!*'!!;ZEhPlH7~>
+li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5<!!WE9#6Ff(
+"s!mJrr)fpV#Lr$s7?9ds8N'&!!!6'rr(dT(]+10rrWQ0qYU<fs8;Kdrr`T-s82]iqof!Prr)`o
+qu?]hpTG/3!!LU at q>:0is!%I at r;Xc'!!\4n^<OX2`7)G2"9ecimJQeWrVlcorr2lprmCcArUKmf
+rVlisrr2p,qYU<krs/W)!!*'!!;ZEhPlH7~>
+li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5<!!WE9#6Ff(
+"s!mJrr)fpV#Lr$s7?9ds8N'&!!!6'rr(dT(]+10rrWQ0qYU<fs8;Kdrr`T-s82]iqof!Prr)`o
+qu?]hpTG/3!!LU at q>:0is!%I at r;Xc'!!\4n^<OX2`7)G2"9ecimJQeWrVlcorr2lprmCcArUKmf
+rVlisrr2p,qYU<krs/W)!!*'!!;ZEhPlH7~>
+l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ at h
+)#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$
+rVl<cp\+Ka*sM`eL[tH at rr)iqs8W)trV!f^!",_%s7lKjpAFs6 at L*VI9uHkrr;6Kns8Mrqd/Wq?
+nc/Oc')qk/s7H?Qrq-6krrN3"p%&(Qq>QWYJ,~>
+l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ at h
+)#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$
+rVl<cp\+Ka*sM`eL[tH at rr)iqs8W)trV!f^!",_%s7lKjpAFs6 at L*VI9uHkrr;6Kns8Mrqd/Wq?
+nc/Oc')qk/s7H?Qrq-6krrN3"p%&(Qq>QWYJ,~>
+l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ at h
+)#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$
+rVl<cp\+Ka*sM`eL[tH at rr)iqs8W)trV!f^!",_%s7lKjpAFs6 at L*VI9uHkrr;6Kns8Mrqd/Wq?
+nc/Oc')qk/s7H?Qrq-6krrN3"p%&(Qq>QWYJ,~>
+l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;%
+r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U
+rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa
+rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~>
+l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;%
+r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U
+rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa
+rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~>
+l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;%
+r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U
+rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa
+rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~>
+n,N at cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!<ET1!!NZ1#Qb,6"U,#/:f'^[
+r;Q?eqt9OWrr08(q>U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E at kq>C9l
+bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl
+\c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~>
+n,N at cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!<ET1!!NZ1#Qb,6"U,#/:f'^[
+r;Q?eqt9OWrr08(q>U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E at kq>C9l
+bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl
+\c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~>
+n,N at cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!<ET1!!NZ1#Qb,6"U,#/:f'^[
+r;Q?eqt9OWrr08(q>U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E at kq>C9l
+bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl
+\c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~>
+n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t at T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4?
+q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c:
+"(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3<TF"
+K^o!>rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~>
+n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t at T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4?
+q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c:
+"(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3<TF"
+K^o!>rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~>
+n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t at T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4?
+q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c:
+"(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3<TF"
+K^o!>rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~>
+n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe
+q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp=
+rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf
+Yk at nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~>
+n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe
+q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp=
+rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf
+Yk at nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~>
+n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe
+q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp=
+rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf
+Yk at nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~>
+n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio
+qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN
+rVZNlo_nd4rtGD1rV?3-3<KIIc27;3r;ZZlrr2os+TD?;qSP,k#QOl-!rrB*"9JQ($3:;3!!<dC
+kk>&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~>
+n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio
+qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN
+rVZNlo_nd4rtGD1rV?3-3<KIIc27;3r;ZZlrr2os+TD?;qSP,k#QOl-!rrB*"9JQ($3:;3!!<dC
+kk>&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~>
+n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio
+qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN
+rVZNlo_nd4rtGD1rV?3-3<KIIc27;3r;ZZlrr2os+TD?;qSP,k#QOl-!rrB*"9JQ($3:;3!!<dC
+kk>&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~>
+q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u
+W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfu<E8!Y"^4o+>uau*r>t_5q>0mdp\Fad
+rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3*
+q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!<W3"%13(@!!*30-b0!PrVHH<s7uZart>5-qtU'enlu7t
+!<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf*
+rVuorq>^3hrVZ$^J,~>
+q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u
+W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfu<E8!Y"^4o+>uau*r>t_5q>0mdp\Fad
+rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3*
+q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!<W3"%13(@!!*30-b0!PrVHH<s7uZart>5-qtU'enlu7t
+!<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf*
+rVuorq>^3hrVZ$^J,~>
+q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u
+W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfu<E8!Y"^4o+>uau*r>t_5q>0mdp\Fad
+rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3*
+q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!<W3"%13(@!!*30-b0!PrVHH<s7uZart>5-qtU'enlu7t
+!<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf*
+rVuorq>^3hrVZ$^J,~>
+q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!<BsO_=?sl
+rr2flrVZHfr;HWps8N#Nrs/Q'quQj"!<M-Z(Bsp@"9nul4[_Fr5Q1KOq>L<knG)tYqLSYWrTj-$%
+g*?FoD&:`r;6Ekqu?]q#QMA%!"*;*U%k2hR at U0u$jmu7q#C?lrVuc2rrE&prt#+trVZKgq>p[("
+TSo'_=[R%g].<Q2uWLGpAOs[rqHElpA=jdrVlirrVuihq"=R]r:p6brVufms7uQhs8Dupq"aabq
+>:0hq"ap\rp9Z8~>
+q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!<BsO_=?sl
+rr2flrVZHfr;HWps8N#Nrs/Q'quQj"!<M-Z(Bsp@"9nul4[_Fr5Q1KOq>L<knG)tYqLSYWrTj-$%
+g*?FoD&:`r;6Ekqu?]q#QMA%!"*;*U%k2hR at U0u$jmu7q#C?lrVuc2rrE&prt#+trVZKgq>p[("
+TSo'_=[R%g].<Q2uWLGpAOs[rqHElpA=jdrVlirrVuihq"=R]r:p6brVufms7uQhs8Dupq"aabq
+>:0hq"ap\rp9Z8~>
+q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!<BsO_=?sl
+rr2flrVZHfr;HWps8N#Nrs/Q'quQj"!<M-Z(Bsp@"9nul4[_Fr5Q1KOq>L<knG)tYqLSYWrTj-$%
+g*?FoD&:`r;6Ekqu?]q#QMA%!"*;*U%k2hR at U0u$jmu7q#C?lrVuc2rrE&prt#+trVZKgq>p[("
+TSo'_=[R%g].<Q2uWLGpAOs[rqHElpA=jdrVlirrVuihq"=R]r:p6brVufms7uQhs8Dupq"aabq
+>:0hq"ap\rp9Z8~>
+q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[
+s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!<Ni5-n$>>mJHYUqsXO^Jc?5Tqr1<[
+!"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+
+,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L<jrV6Bgq#13j
+r;HZkr:p*drqH?hrr2BdJ,~>
+q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[
+s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!<Ni5-n$>>mJHYUqsXO^Jc?5Tqr1<[
+!"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+
+,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L<jrV6Bgq#13j
+r;HZkr:p*drqH?hrr2BdJ,~>
+q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[
+s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!<Ni5-n$>>mJHYUqsXO^Jc?5Tqr1<[
+!"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+
+,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L<jrV6Bgq#13j
+r;HZkr:p*drqH?hrr2BdJ,~>
+q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!<N6.!"KJ="!.IK!X&K:!u1e<!rrhsiUQg at r;Q-`p%SI_
+s8W)qqY^<gqu$Hns8N#Nrs/H"qu[!&!<M*Y('FUT!!!]5!"B)6%KI(M(`W2Kq=jabJc?&Up=;h9
+!3bqlrVl]qrVlZns8E;r]fc>qXnqklqu6Wo%f6+sm>M;R:>PI<o_SUe_>jQ5rr)lr&HDb%rV6s:
+!!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ%
+1rR;o_o:4%2'BKrVc`pn,In~>
+q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!<N6.!"KJ="!.IK!X&K:!u1e<!rrhsiUQg at r;Q-`p%SI_
+s8W)qqY^<gqu$Hns8N#Nrs/H"qu[!&!<M*Y('FUT!!!]5!"B)6%KI(M(`W2Kq=jabJc?&Up=;h9
+!3bqlrVl]qrVlZns8E;r]fc>qXnqklqu6Wo%f6+sm>M;R:>PI<o_SUe_>jQ5rr)lr&HDb%rV6s:
+!!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ%
+1rR;o_o:4%2'BKrVc`pn,In~>
+q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!<N6.!"KJ="!.IK!X&K:!u1e<!rrhsiUQg at r;Q-`p%SI_
+s8W)qqY^<gqu$Hns8N#Nrs/H"qu[!&!<M*Y('FUT!!!]5!"B)6%KI(M(`W2Kq=jabJc?&Up=;h9
+!3bqlrVl]qrVlZns8E;r]fc>qXnqklqu6Wo%f6+sm>M;R:>PI<o_SUe_>jQ5rr)lr&HDb%rV6s:
+!!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ%
+1rR;o_o:4%2'BKrVc`pn,In~>
+q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5<pGs8MTgrr;]dq>U'cqYU-g
+rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5.
+rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup,
+"98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R
+!t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~>
+q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5<pGs8MTgrr;]dq>U'cqYU-g
+rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5.
+rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup,
+"98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R
+!t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~>
+q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5<pGs8MTgrr;]dq>U'cqYU-g
+rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5.
+rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup,
+"98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R
+!t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~>
+q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj
+rVc`qs8C at F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\r<!7:cBq>Q6N#Q"7:%KR!_rql]r
+rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@
+s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M!
+,l at Q@')_Y)rVc`rrq-5@~>
+q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj
+rVc`qs8C at F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\r<!7:cBq>Q6N#Q"7:%KR!_rql]r
+rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@
+s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M!
+,l at Q@')_Y)rVc`rrq-5@~>
+q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj
+rVc`qs8C at F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\r<!7:cBq>Q6N#Q"7:%KR!_rql]r
+rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@
+s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M!
+,l at Q@')_Y)rVc`rrq-5@~>
+q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j
+rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U<<ib(g&(aJ
+s8Mios8E?#]0-,tWr2npr;HTor!rT$s8)cD9)oHSp&"Xdr4i7Irr)clqu$Bj_?^&B!<`E)7K*,Q
+qu$<drnm`@rr)cnrr39)q#.htrV-?qr<360qYC7(p[/:fs7?0h"98/p!"T#&!Y+Yp!Ykk6nc9%]
+p\tI!qsF1\&GZ,!rVc`rrq-5@~>
+q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j
+rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U<<ib(g&(aJ
+s8Mios8E?#]0-,tWr2npr;HTor!rT$s8)cD9)oHSp&"Xdr4i7Irr)clqu$Bj_?^&B!<`E)7K*,Q
+qu$<drnm`@rr)cnrr39)q#.htrV-?qr<360qYC7(p[/:fs7?0h"98/p!"T#&!Y+Yp!Ykk6nc9%]
+p\tI!qsF1\&GZ,!rVc`rrq-5@~>
+q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j
+rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U<<ib(g&(aJ
+s8Mios8E?#]0-,tWr2npr;HTor!rT$s8)cD9)oHSp&"Xdr4i7Irr)clqu$Bj_?^&B!<`E)7K*,Q
+qu$<drnm`@rr)cnrr39)q#.htrV-?qr<360qYC7(p[/:fs7?0h"98/p!"T#&!Y+Yp!Ykk6nc9%]
+p\tI!qsF1\&GZ,!rVc`rrq-5@~>
+q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ"
+rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS
+j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!<!!$
+$NaN*qYp?jp\O^biVu7Ds8Drpqtp?n!r;["V>C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t
+rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~>
+q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ"
+rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS
+j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!<!!$
+$NaN*qYp?jp\O^biVu7Ds8Drpqtp?n!r;["V>C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t
+rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~>
+q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ"
+rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS
+j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!<!!$
+$NaN*qYp?jp\O^biVu7Ds8Drpqtp?n!r;["V>C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t
+rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~>
+q>Ua!q"t!_p\t:!rW+5G"9S`,!<iQ/!s*+UC23_Aqtg0]qYU'_s7ZH`r;?NhrVHBhs8DrnrrE&F
+rrrE%!!E9'ciF(K%0-Y8"T\dhs7c?^r;-AKrs/8q?NLOMkPk;Ws8N#t%K?8#qS>Gt"g.^ur;HWm
+rso#,s8)ZNE<ZJ`rVlTlpqZn at r;HBfp\XWJ"9J`+!!3RDrr2p"rr)`jg&FA:s7lWhq=g0\"oA6"
+!rVcq!<)s!"oA,u!WE$$!rDfk#7L;)q?d<&qZ@#upBCj.pA"anrVuI%!;uWg!X&5srpKf:~>
+q>Ua!q"t!_p\t:!rW+5G"9S`,!<iQ/!s*+UC23_Aqtg0]qYU'_s7ZH`r;?NhrVHBhs8DrnrrE&F
+rrrE%!!E9'ciF(K%0-Y8"T\dhs7c?^r;-AKrs/8q?NLOMkPk;Ws8N#t%K?8#qS>Gt"g.^ur;HWm
+rso#,s8)ZNE<ZJ`rVlTlpqZn at r;HBfp\XWJ"9J`+!!3RDrr2p"rr)`jg&FA:s7lWhq=g0\"oA6"
+!rVcq!<)s!"oA,u!WE$$!rDfk#7L;)q?d<&qZ@#upBCj.pA"anrVuI%!;uWg!X&5srpKf:~>
+q>Ua!q"t!_p\t:!rW+5G"9S`,!<iQ/!s*+UC23_Aqtg0]qYU'_s7ZH`r;?NhrVHBhs8DrnrrE&F
+rrrE%!!E9'ciF(K%0-Y8"T\dhs7c?^r;-AKrs/8q?NLOMkPk;Ws8N#t%K?8#qS>Gt"g.^ur;HWm
+rso#,s8)ZNE<ZJ`rVlTlpqZn at r;HBfp\XWJ"9J`+!!3RDrr2p"rr)`jg&FA:s7lWhq=g0\"oA6"
+!rVcq!<)s!"oA,u!WE$$!rDfk#7L;)q?d<&qZ@#upBCj.pA"anrVuI%!;uWg!X&5srpKf:~>
+q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr<rrrE%
+!!E9'cN"FY!sAT.!s&FNq>'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu*
+rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r<!3'r9t$nqtC0p
+q>^X!qtL<sr;Qj$rr2iu#QO\r!XO,J!sSPqKEh_Vp]h$"p\Fpkq"j^j"FL.Imf.e~>
+q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr<rrrE%
+!!E9'cN"FY!sAT.!s&FNq>'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu*
+rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r<!3'r9t$nqtC0p
+q>^X!qtL<sr;Qj$rr2iu#QO\r!XO,J!sSPqKEh_Vp]h$"p\Fpkq"j^j"FL.Imf.e~>
+q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr<rrrE%
+!!E9'cN"FY!sAT.!s&FNq>'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu*
+rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r<!3'r9t$nqtC0p
+q>^X!qtL<sr;Qj$rr2iu#QO\r!XO,J!sSPqKEh_Vp]h$"p\Fpkq"j^j"FL.Imf.e~>
+q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,<pA+RTs7Q6eq>'g^q=t!epAasds8N#=rrrE%
+!!E9'cN"FY"9\`0"98E. at fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs
+rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK
+!<W&u"9AGq"9JAt!<W9#rr<9'p%t*Y!;d!$Abl3/"T&#u#Q=Gt!s88nq3_EfrVc`as*t~>
+q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,<pA+RTs7Q6eq>'g^q=t!epAasds8N#=rrrE%
+!!E9'cN"FY"9\`0"98E. at fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs
+rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK
+!<W&u"9AGq"9JAt!<W9#rr<9'p%t*Y!;d!$Abl3/"T&#u#Q=Gt!s88nq3_EfrVc`as*t~>
+q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,<pA+RTs7Q6eq>'g^q=t!epAasds8N#=rrrE%
+!!E9'cN"FY"9\`0"98E. at fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs
+rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK
+!<W&u"9AGq"9JAt!<W9#rr<9'p%t*Y!;d!$Abl3/"T&#u#Q=Gt!s88nq3_EfrVc`as*t~>
+q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n at NrqQE^rqQ<hqtg6ds8N#@rrrE%
+!!E9'cN*tGrrWT/!!!-)!DrLfp&'[H$2XO,"T_?Mr;Q]pr;ciqrrE&truq@<r;#mUkP"cKr;HWo
+s8Muqr;QTlrle":*K'jiq>1$e_>b&Fq>:(c"9ei1!<W6#rU^$9s$Qe]rqZKip'(Nur;$O+!=oY?
+r;clus7lWpqY^HsrVo\!!;cThr!<Z%YQ+\$quO/(quI6(r_3_$qXsjS"U"]$rr2EeJ,~>
+q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n at NrqQE^rqQ<hqtg6ds8N#@rrrE%
+!!E9'cN*tGrrWT/!!!-)!DrLfp&'[H$2XO,"T_?Mr;Q]pr;ciqrrE&truq@<r;#mUkP"cKr;HWo
+s8Muqr;QTlrle":*K'jiq>1$e_>b&Fq>:(c"9ei1!<W6#rU^$9s$Qe]rqZKip'(Nur;$O+!=oY?
+r;clus7lWpqY^HsrVo\!!;cThr!<Z%YQ+\$quO/(quI6(r_3_$qXsjS"U"]$rr2EeJ,~>
+q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n at NrqQE^rqQ<hqtg6ds8N#@rrrE%
+!!E9'cN*tGrrWT/!!!-)!DrLfp&'[H$2XO,"T_?Mr;Q]pr;ciqrrE&truq@<r;#mUkP"cKr;HWo
+s8Muqr;QTlrle":*K'jiq>1$e_>b&Fq>:(c"9ei1!<W6#rU^$9s$Qe]rqZKip'(Nur;$O+!=oY?
+r;clus7lWpqY^HsrVo\!!;cThr!<Z%YQ+\$quO/(quI6(r_3_$qXsjS"U"]$rr2EeJ,~>
+q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE%
+!!E9'ci=R[!!<B1!!39-"UG/)s7uPKrser)>R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn
+s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB
+qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl<dJ,~>
+q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE%
+!!E9'ci=R[!!<B1!!39-"UG/)s7uPKrser)>R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn
+s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB
+qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl<dJ,~>
+q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE%
+!!E9'ci=R[!!<B1!!39-"UG/)s7uPKrser)>R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn
+s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB
+qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl<dJ,~>
+q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:p<jrVQNlrlb<F
+rr2s$!!:LI%flY4!!E9'!!!<0!$_:<qMG4Xn,BUM!!:CCrVcWorVc`rrr2p>rr)ips8;lqs7cKk
+rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!<EZ-oah0D*\&E4
+!!<E$p]1BmrriQ(rX&ktrp][\!!_ff!s&>t!rVQt"Q07S"9A>tp at nFh"8i#prp]r<~>
+q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:p<jrVQNlrlb<F
+rr2s$!!:LI%flY4!!E9'!!!<0!$_:<qMG4Xn,BUM!!:CCrVcWorVc`rrr2p>rr)ips8;lqs7cKk
+rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!<EZ-oah0D*\&E4
+!!<E$p]1BmrriQ(rX&ktrp][\!!_ff!s&>t!rVQt"Q07S"9A>tp at nFh"8i#prp]r<~>
+q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:p<jrVQNlrlb<F
+rr2s$!!:LI%flY4!!E9'!!!<0!$_:<qMG4Xn,BUM!!:CCrVcWorVc`rrr2p>rr)ips8;lqs7cKk
+rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!<EZ-oah0D*\&E4
+!!<E$p]1BmrriQ(rX&ktrp][\!!_ff!s&>t!rVQt"Q07S"9A>tp at nFh"8i#prp]r<~>
+q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf>
+rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&<!!C"1rVZQir;HTo!<2rs#QF]$r;QWos8N#r
+rt58/rqucls1A=39&K.;s8)cm_#FoA!rrQ.!!!32l2UGSoD\^gs8LXM7/lr[rVl`i#mC>.rW!W4
+"T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~>
+q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf>
+rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&<!!C"1rVZQir;HTo!<2rs#QF]$r;QWos8N#r
+rt58/rqucls1A=39&K.;s8)cm_#FoA!rrQ.!!!32l2UGSoD\^gs8LXM7/lr[rVl`i#mC>.rW!W4
+"T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~>
+q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf>
+rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&<!!C"1rVZQir;HTo!<2rs#QF]$r;QWos8N#r
+rt58/rqucls1A=39&K.;s8)cm_#FoA!rrQ.!!!32l2UGSoD\^gs8LXM7/lr[rVl`i#mC>.rW!W4
+"T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~>
+p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk
+nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"-
+nbW%[p\Fjhnc&=`%JKbu]IX("B'K<pp]($0rtkV4rVHNcs8Cmb":"o3!=0D;rr2HfrVc]ps8N&u
+q#1KtqYp<jqYoaZ8,iAaq>9[[!!NJurX&E!oEtZs!!!9'q#CKlqu at 0"r!`i)rWW&r!!;9Y!!`/r
+q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~>
+p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk
+nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"-
+nbW%[p\Fjhnc&=`%JKbu]IX("B'K<pp]($0rtkV4rVHNcs8Cmb":"o3!=0D;rr2HfrVc]ps8N&u
+q#1KtqYp<jqYoaZ8,iAaq>9[[!!NJurX&E!oEtZs!!!9'q#CKlqu at 0"r!`i)rWW&r!!;9Y!!`/r
+q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~>
+p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk
+nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"-
+nbW%[p\Fjhnc&=`%JKbu]IX("B'K<pp]($0rtkV4rVHNcs8Cmb":"o3!=0D;rr2HfrVc]ps8N&u
+q#1KtqYp<jqYoaZ8,iAaq>9[[!!NJurX&E!oEtZs!!!9'q#CKlqu at 0"r!`i)rWW&r!!;9Y!!`/r
+q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~>
+p\t9mr;QR[r;ZEeqtKd\n,</9/h@/+'*8=;!s/Z-!ttY:!!EB+!!3B3!=fD<daHFho)7qMq!J"Y
+rUBgXrqlWhrVcHgqu6TLrs&K$rr<0%!lt?P#6G,?#Qt2,r;--eq>1-iPQ)0mrVuE`Ihi/,^%D<r
+r;$BerqZKms8)^*rVu`f`"E1ePk=qSq>^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H<js8)`p
+qu?Zqq[!2urqZTjqu6HVs$uqarV??gmK!=grq6ZGnG`LirrWQ.r;?d%qsXanq=4XkrV?Tcr@@sQ
+rrEGUpAFaY#mgJ,pB:]mrW`E&/-Z7Sr:L$_s7u<eJ,~>
+p\t9mr;QR[r;ZEeqtKd\n,</9/h@/+'*8=;!s/Z-!ttY:!!EB+!!3B3!=fD<daHFho)7qMq!J"Y
+rUBgXrqlWhrVcHgqu6TLrs&K$rr<0%!lt?P#6G,?#Qt2,r;--eq>1-iPQ)0mrVuE`Ihi/,^%D<r
+r;$BerqZKms8)^*rVu`f`"E1ePk=qSq>^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H<js8)`p
+qu?Zqq[!2urqZTjqu6HVs$uqarV??gmK!=grq6ZGnG`LirrWQ.r;?d%qsXanq=4XkrV?Tcr@@sQ
+rrEGUpAFaY#mgJ,pB:]mrW`E&/-Z7Sr:L$_s7u<eJ,~>
+p\t9mr;QR[r;ZEeqtKd\n,</9/h@/+'*8=;!s/Z-!ttY:!!EB+!!3B3!=fD<daHFho)7qMq!J"Y
+rUBgXrqlWhrVcHgqu6TLrs&K$rr<0%!lt?P#6G,?#Qt2,r;--eq>1-iPQ)0mrVuE`Ihi/,^%D<r
+r;$BerqZKms8)^*rVu`f`"E1ePk=qSq>^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H<js8)`p
+qu?Zqq[!2urqZTjqu6HVs$uqarV??gmK!=grq6ZGnG`LirrWQ.r;?d%qsXanq=4XkrV?Tcr@@sQ
+rrEGUpAFaY#mgJ,pB:]mrW`E&/-Z7Sr:L$_s7u<eJ,~>
+p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\
+qYg?ip%S1Urr)9arn at AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b
+p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_
+s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQa&#5nE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n
+#Q at 6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~>
+p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\
+qYg?ip%S1Urr)9arn at AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b
+p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_
+s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQa&#5nE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n
+#Q at 6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~>
+p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\
+qYg?ip%S1Urr)9arn at AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b
+p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_
+s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQa&#5nE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n
+#Q at 6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~>
+p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X
+q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT!
+&%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q<bqY^3f
+rr)ios8<N,qu$Bhqu$Bhr;?Bcqt^0cl2O9Nq"agcqY10t$3'`("8hj!!<3$*#l+6!#5Ris"8W$!
+A,H(-s7H!f#Q4E!"T8,oV?.&'rr<..s8--uo(rS'q>:3dqtg<as*t~>
+p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X
+q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT!
+&%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q<bqY^3f
+rr)ios8<N,qu$Bhqu$Bhr;?Bcqt^0cl2O9Nq"agcqY10t$3'`("8hj!!<3$*#l+6!#5Ris"8W$!
+A,H(-s7H!f#Q4E!"T8,oV?.&'rr<..s8--uo(rS'q>:3dqtg<as*t~>
+p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X
+q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT!
+&%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q<bqY^3f
+rr)ios8<N,qu$Bhqu$Bhr;?Bcqt^0cl2O9Nq"agcqY10t$3'`("8hj!!<3$*#l+6!#5Ris"8W$!
+A,H(-s7H!f#Q4E!"T8,oV?.&'rr<..s8--uo(rS'q>:3dqtg<as*t~>
+p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1!<rN."U5/3":,#1"9]#=#Qb*bM2_B/
+qYg-frV?Klo)AXg"9&/rro*k]rr)is"98MR!<3)n!"T,3!XJc7"U+Vis8Dimr;N,as8Mrr&,uM*
+oCf4-"U.P0>[:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp at e<@"U>><"U5)0q>L6jqX=7[
+q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH<aq#Lg'rqld&p&>$rqu?m/qtL-sq"b-p
+rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~>
+p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1!<rN."U5/3":,#1"9]#=#Qb*bM2_B/
+qYg-frV?Klo)AXg"9&/rro*k]rr)is"98MR!<3)n!"T,3!XJc7"U+Vis8Dimr;N,as8Mrr&,uM*
+oCf4-"U.P0>[:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp at e<@"U>><"U5)0q>L6jqX=7[
+q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH<aq#Lg'rqld&p&>$rqu?m/qtL-sq"b-p
+rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~>
+p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1!<rN."U5/3":,#1"9]#=#Qb*bM2_B/
+qYg-frV?Klo)AXg"9&/rro*k]rr)is"98MR!<3)n!"T,3!XJc7"U+Vis8Dimr;N,as8Mrr&,uM*
+oCf4-"U.P0>[:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp at e<@"U>><"U5)0q>L6jqX=7[
+q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH<aq#Lg'rqld&p&>$rqu?m/qtL-sq"b-p
+rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~>
+p&G!i#Q+MsrVHQbqYp at Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74]
+DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm
+p at diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M
+o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u
+#*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~>
+p&G!i#Q+MsrVHQbqYp at Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74]
+DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm
+p at diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M
+o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u
+#*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~>
+p&G!i#Q+MsrVHQbqYp at Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74]
+DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm
+p at diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M
+o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u
+#*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~>
+o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50
+#?b83p\ajdq>C6jqtp<jiW&rS"TJK-!<^pR"T\Z,!s/Mu!"T)1!!3?0!!-'pp&+F[p%t!R&cVb-
+r;?Hfp:VjS!<`B-!!35s!;QZo!ri<$!"K&6!<<?R`V]T/rr<#trlG*mqu-7m!<rZ/#QP+)qYU*`
+q=X4Np\ag\qu6WpqYC'hrE*2#rE*2#!<3#lrV?3bl2O*Hs7-'bqXaLc"TRqjq>L*i$1 at Kk"9&%l
+qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~>
+o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50
+#?b83p\ajdq>C6jqtp<jiW&rS"TJK-!<^pR"T\Z,!s/Mu!"T)1!!3?0!!-'pp&+F[p%t!R&cVb-
+r;?Hfp:VjS!<`B-!!35s!;QZo!ri<$!"K&6!<<?R`V]T/rr<#trlG*mqu-7m!<rZ/#QP+)qYU*`
+q=X4Np\ag\qu6WpqYC'hrE*2#rE*2#!<3#lrV?3bl2O*Hs7-'bqXaLc"TRqjq>L*i$1 at Kk"9&%l
+qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~>
+o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50
+#?b83p\ajdq>C6jqtp<jiW&rS"TJK-!<^pR"T\Z,!s/Mu!"T)1!!3?0!!-'pp&+F[p%t!R&cVb-
+r;?Hfp:VjS!<`B-!!35s!;QZo!ri<$!"K&6!<<?R`V]T/rr<#trlG*mqu-7m!<rZ/#QP+)qYU*`
+q=X4Np\ag\qu6WpqYC'hrE*2#rE*2#!<3#lrV?3bl2O*Hs7-'bqXaLc"TRqjq>L*i$1 at Kk"9&%l
+qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~>
+nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l-
+!s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW
+rr+PKq>:!co<0&4"TT]#0fCgE2_m<K2).'M2Dd0K4#8TQ1,1dB4#ArC!sJZFZL.Ygrr)utrr1:E
+2Ym at Os7?9dq>*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P
+rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r<EE)
+p%nan5PtHUrVZWds*t~>
+nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l-
+!s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW
+rr+PKq>:!co<0&4"TT]#0fCgE2_m<K2).'M2Dd0K4#8TQ1,1dB4#ArC!sJZFZL.Ygrr)utrr1:E
+2Ym at Os7?9dq>*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P
+rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r<EE)
+p%nan5PtHUrVZWds*t~>
+nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l-
+!s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW
+rr+PKq>:!co<0&4"TT]#0fCgE2_m<K2).'M2Dd0K4#8TQ1,1dB4#ArC!sJZFZL.Ygrr)utrr1:E
+2Ym at Os7?9dq>*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P
+rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r<EE)
+p%nan5PtHUrVZWds*t~>
+i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^
+s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:(
+cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi
+q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu#
+-nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@<S/cc%V0I[;;!rhc`rql]es*t~>
+i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^
+s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:(
+cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi
+q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu#
+-nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@<S/cc%V0I[;;!rhc`rql]es*t~>
+i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^
+s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:(
+cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi
+q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu#
+-nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@<S/cc%V0I[;;!rhc`rql]es*t~>
+iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rr<K/!tuIb&c)8#
+rVuosroa=]r<26\rpfa8rW_]U!X&K)#Oh]u!ttY(oD8%ROoPIV2>mLLrr(Y=%Km"O?KCqWrVc6a
+p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@>
+&/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq<S.b
+$Od%$mJ6J_!=f)8mJm4p!<qihmJmIn!<MTbrquit"onYk!!!N0"QB7VrquEbo`'F~>
+iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rr<K/!tuIb&c)8#
+rVuosroa=]r<26\rpfa8rW_]U!X&K)#Oh]u!ttY(oD8%ROoPIV2>mLLrr(Y=%Km"O?KCqWrVc6a
+p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@>
+&/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq<S.b
+$Od%$mJ6J_!=f)8mJm4p!<qihmJmIn!<MTbrquit"onYk!!!N0"QB7VrquEbo`'F~>
+iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rr<K/!tuIb&c)8#
+rVuosroa=]r<26\rpfa8rW_]U!X&K)#Oh]u!ttY(oD8%ROoPIV2>mLLrr(Y=%Km"O?KCqWrVc6a
+p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@>
+&/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq<S.b
+$Od%$mJ6J_!=f)8mJm4p!<qihmJmIn!<MTbrquit"onYk!!!N0"QB7VrquEbo`'F~>
+hZ!WUr;QTlq at ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S at UDr;HZqrr2*\
+#QFQ!oD8@`rRq2Uqt^3q#R(22mf<C`"9/,lrfI-rrqcZjs82ij at Mo.V"C:d!qYL3js8)cmr;IH2
+qu6Ebr8LZ\%0Q`XiVrEEq>C6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3
+!=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia
+r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~>
+hZ!WUr;QTlq at ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S at UDr;HZqrr2*\
+#QFQ!oD8@`rRq2Uqt^3q#R(22mf<C`"9/,lrfI-rrqcZjs82ij at Mo.V"C:d!qYL3js8)cmr;IH2
+qu6Ebr8LZ\%0Q`XiVrEEq>C6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3
+!=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia
+r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~>
+hZ!WUr;QTlq at ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S at UDr;HZqrr2*\
+#QFQ!oD8@`rRq2Uqt^3q#R(22mf<C`"9/,lrfI-rrqcZjs82ij at Mo.V"C:d!qYL3js8)cmr;IH2
+qu6Ebr8LZ\%0Q`XiVrEEq>C6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3
+!=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia
+r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~>
+iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp<brUBh6*\AT:!!<95!W`?!!Y#D8#QbS=!;ucns8W)t
+kPke`pAFp[rq--ArWi8srUhB8!<_il#7(\-oD/+ZmudW+rr;lqrVuQjqsR2l"TSoRO3m1dnc/:\
+r;?0cqt:!gp$(e-+9`5U$ut\5p\jm_rVlisrr1:E2u!=Er;?TP!!iQ7"Te]+!!*-*$ig\:"p+c+
+eH,mS.3oub*?Y7[m/H\SpAFddq#9RXrUTgaoBH;Trr<#urA=NRqYp?js7uH]rVZTmrq$!brq-0e
+o)AOZrqHEjrqucoqYTm`q=O7Wrr)TcrV?6_rVHQnr<`?"rr)TjnG`@[o`'F~>
+iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp<brUBh6*\AT:!!<95!W`?!!Y#D8#QbS=!;ucns8W)t
+kPke`pAFp[rq--ArWi8srUhB8!<_il#7(\-oD/+ZmudW+rr;lqrVuQjqsR2l"TSoRO3m1dnc/:\
+r;?0cqt:!gp$(e-+9`5U$ut\5p\jm_rVlisrr1:E2u!=Er;?TP!!iQ7"Te]+!!*-*$ig\:"p+c+
+eH,mS.3oub*?Y7[m/H\SpAFddq#9RXrUTgaoBH;Trr<#urA=NRqYp?js7uH]rVZTmrq$!brq-0e
+o)AOZrqHEjrqucoqYTm`q=O7Wrr)TcrV?6_rVHQnr<`?"rr)TjnG`@[o`'F~>
+iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp<brUBh6*\AT:!!<95!W`?!!Y#D8#QbS=!;ucns8W)t
+kPke`pAFp[rq--ArWi8srUhB8!<_il#7(\-oD/+ZmudW+rr;lqrVuQjqsR2l"TSoRO3m1dnc/:\
+r;?0cqt:!gp$(e-+9`5U$ut\5p\jm_rVlisrr1:E2u!=Er;?TP!!iQ7"Te]+!!*-*$ig\:"p+c+
+eH,mS.3oub*?Y7[m/H\SpAFddq#9RXrUTgaoBH;Trr<#urA=NRqYp?js7uH]rVZTmrq$!brq-0e
+o)AOZrqHEjrqucoqYTm`q=O7Wrr)TcrV?6_rVHQnr<`?"rr)TjnG`@[o`'F~>
+iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!<W6&rrNW8!XK/8#7:/&rVuos
+roa:crqu9`o_JC:rWiDmrUp(J!=/,p#6>)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt
+k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F
+2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H<Y
+s8)]nr;Q]erquT_rqcZmp](3gq>:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~>
+iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!<W6&rrNW8!XK/8#7:/&rVuos
+roa:crqu9`o_JC:rWiDmrUp(J!=/,p#6>)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt
+k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F
+2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H<Y
+s8)]nr;Q]erquT_rqcZmp](3gq>:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~>
+iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!<W6&rrNW8!XK/8#7:/&rVuos
+roa:crqu9`o_JC:rWiDmrUp(J!=/,p#6>)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt
+k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F
+2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H<Y
+s8)]nr;Q]erquT_rqcZmp](3gq>:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~>
+huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg<fq#9S]9htcj!rN-0!"8i9#QtM&r;HZqrr2*\
+s8E3!qYpEir7V)Tq=sg]p\Y'nnGie$!3l%lqXj`Js8W$1s8)Zmp\ORPqJfUq"98Z,(-m`UR2EH9
+Q&_Gp1):#r!XAm-Gk^n1qtTmarVc`prrE&Es#9fKr:Kd_!W`E5$ig8:!!N?*:K(7h<)?BfmeH_X
+rqufXr;HEfqYp<cq#'d\r;HTfp%eL[qtTFU!r`,srVf(\q>1$fqYg?drqlWlrV?Bgr;6NnqY'mc
+qYU<iqtL*fqtC$gqZ$BkrVc`crqu`jrVlNiqu-Hfqu6WmqtU!co`'F~>
+huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg<fq#9S]9htcj!rN-0!"8i9#QtM&r;HZqrr2*\
+s8E3!qYpEir7V)Tq=sg]p\Y'nnGie$!3l%lqXj`Js8W$1s8)Zmp\ORPqJfUq"98Z,(-m`UR2EH9
+Q&_Gp1):#r!XAm-Gk^n1qtTmarVc`prrE&Es#9fKr:Kd_!W`E5$ig8:!!N?*:K(7h<)?BfmeH_X
+rqufXr;HEfqYp<cq#'d\r;HTfp%eL[qtTFU!r`,srVf(\q>1$fqYg?drqlWlrV?Bgr;6NnqY'mc
+qYU<iqtL*fqtC$gqZ$BkrVc`crqu`jrVlNiqu-Hfqu6WmqtU!co`'F~>
+huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg<fq#9S]9htcj!rN-0!"8i9#QtM&r;HZqrr2*\
+s8E3!qYpEir7V)Tq=sg]p\Y'nnGie$!3l%lqXj`Js8W$1s8)Zmp\ORPqJfUq"98Z,(-m`UR2EH9
+Q&_Gp1):#r!XAm-Gk^n1qtTmarVc`prrE&Es#9fKr:Kd_!W`E5$ig8:!!N?*:K(7h<)?BfmeH_X
+rqufXr;HEfqYp<cq#'d\r;HTfp%eL[qtTFU!r`,srVf(\q>1$fqYg?drqlWlrV?Bgr;6NnqY'mc
+qYU<iqtL*fqtC$gqZ$BkrVc`crqu`jrVlNiqu-Hfqu6WmqtU!co`'F~>
+q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<<B+
+!!iu5qtp<js8N#troj at crr;uss7t=I#QF8loDSZ'"7Z?r#QOo%qYC!cOoI$4qtpEkrVlQgqZ$6[
+iN5EW'EA4A%KR%K,9R^+#8%";#6>Q!CY\CMqY9d`q#:3lrlb<Tq=XRFs8E!$#RUcIB5(smB5%;?
+rr+&5rqH9dqt^6krVHKipAOgcqtU*dr:g-gr;?Qhqu-6ckl1_`rVlfr#Q=\rs82ioqYgEtr;6Nj
+s8)`p!;HHl-MmcBq>^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#:<ko`'F~>
+q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<<B+
+!!iu5qtp<js8N#troj at crr;uss7t=I#QF8loDSZ'"7Z?r#QOo%qYC!cOoI$4qtpEkrVlQgqZ$6[
+iN5EW'EA4A%KR%K,9R^+#8%";#6>Q!CY\CMqY9d`q#:3lrlb<Tq=XRFs8E!$#RUcIB5(smB5%;?
+rr+&5rqH9dqt^6krVHKipAOgcqtU*dr:g-gr;?Qhqu-6ckl1_`rVlfr#Q=\rs82ioqYgEtr;6Nj
+s8)`p!;HHl-MmcBq>^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#:<ko`'F~>
+q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<<B+
+!!iu5qtp<js8N#troj at crr;uss7t=I#QF8loDSZ'"7Z?r#QOo%qYC!cOoI$4qtpEkrVlQgqZ$6[
+iN5EW'EA4A%KR%K,9R^+#8%";#6>Q!CY\CMqY9d`q#:3lrlb<Tq=XRFs8E!$#RUcIB5(smB5%;?
+rr+&5rqH9dqt^6krVHKipAOgcqtU*dr:g-gr;?Qhqu-6ckl1_`rVlfr#Q=\rs82ioqYgEtr;6Nj
+s8)`p!;HHl-MmcBq>^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#:<ko`'F~>
+q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e
+!V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!<iT+!!NK,!s:e[L;<9Np\a[Sq>U?j
+rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU<mrVuosrVZTjqiq,2~>
+q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e
+!V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!<iT+!!NK,!s:e[L;<9Np\a[Sq>U?j
+rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU<mrVuosrVZTjqiq,2~>
+q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e
+!V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!<iT+!!NK,!s:e[L;<9Np\a[Sq>U?j
+rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU<mrVuosrVZTjqiq,2~>
+q>^Kor;ZcqdJk'^r;6?eqtg<crV-$RQ^*m@"onW*q#(*irVlls\c2p0q>'XWq"Y$^!!WH6"S_fh
+pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_
+r;-'cqu?Hjqu-<h$iL#'r;HZqrVuosrr2irr0753~>
+q>^Kor;ZcqdJk'^r;6?eqtg<crV-$RQ^*m@"onW*q#(*irVlls\c2p0q>'XWq"Y$^!!WH6"S_fh
+pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_
+r;-'cqu?Hjqu-<h$iL#'r;HZqrVuosrr2irr0753~>
+q>^Kor;ZcqdJk'^r;6?eqtg<crV-$RQ^*m@"onW*q#(*irVlls\c2p0q>'XWq"Y$^!!WH6"S_fh
+pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_
+r;-'cqu?Hjqu-<h$iL#'r;HZqrVuosrr2irr0753~>
+q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K
+s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$<frlP0Nrqucjr;6$^s82?a
+qu$Kfp\t-ks8Mio#QFc'rr2rtrVliprfmG5~>
+q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K
+s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$<frlP0Nrqucjr;6$^s82?a
+qu$Kfp\t-ks8Mio#QFc'rr2rtrVliprfmG5~>
+q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K
+s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$<frlP0Nrqucjr;6$^s82?a
+qu$Kfp\t-ks8Mio#QFc'rr2rtrVliprfmG5~>
+oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg
+rV_iXs8N#t./s2 at rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$<b
+pAb$do_eUdqYC-krql]qrqQNnrr)lsrf-r.~>
+oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg
+rV_iXs8N#t./s2 at rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$<b
+pAb$do_eUdqYC-krql]qrqQNnrr)lsrf-r.~>
+oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg
+rV_iXs8N#t./s2 at rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$<b
+pAb$do_eUdqYC-krql]qrqQNnrr)lsrf-r.~>
+p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I
+s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp
+p](3ks8Voo#ljl%s8W)us8J#XJ,~>
+p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I
+s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp
+p](3ks8Voo#ljl%s8W)us8J#XJ,~>
+p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I
+s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp
+p](3ks8Voo#ljl%s8W)us8J#XJ,~>
+q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p
+rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y
+qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~>
+q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p
+rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y
+qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~>
+q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p
+rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y
+qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~>
+q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr<!6rr<#srqu`mpAas\s7l0Yrr2Wjrr)c!rsnl(
+p&G'\rrE0%!WiB(!Vl]t!=fD9rr)orLAq;Rr;6Kqqu-Kmrsec's8;osrqufrqYpNmrr<#t`W$GH
+s7ZBjq#C9drr;ins8Mfn!<2lq!<2Wjs8Musr;Mr\J,~>
+q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr<!6rr<#srqu`mpAas\s7l0Yrr2Wjrr)c!rsnl(
+p&G'\rrE0%!WiB(!Vl]t!=fD9rr)orLAq;Rr;6Kqqu-Kmrsec's8;osrqufrqYpNmrr<#t`W$GH
+s7ZBjq#C9drr;ins8Mfn!<2lq!<2Wjs8Musr;Mr\J,~>
+q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr<!6rr<#srqu`mpAas\s7l0Yrr2Wjrr)c!rsnl(
+p&G'\rrE0%!WiB(!Vl]t!=fD9rr)orLAq;Rr;6Kqqu-Kmrsec's8;osrqufrqYpNmrr<#t`W$GH
+s7ZBjq#C9drr;ins8Mfn!<2lq!<2Wjs8Musr;Mr\J,~>
+q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g
+qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~>
+q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g
+qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~>
+q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g
+qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~>
+q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c
+ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~>
+q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c
+ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~>
+q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c
+ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~>
+q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:]
+rMff%rW!!,!<iZ2q#CBrrW<9$r;?PFs+13's*t~>
+q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:]
+rMff%rW!!,!<iZ2q#CBrrW<9$r;?PFs+13's*t~>
+q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:]
+rMff%rW!!,!<iZ2q#CBrrW<9$r;?PFs+13's*t~>
+q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2!<WQ,!<`[[ORrADq=sj`qtU*gWW*5%
+!X8Z-#6P8,!<3*'!W;ilr.4m!s+LE&~>
+q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2!<WQ,!<`[[ORrADq=sj`qtU*gWW*5%
+!X8Z-#6P8,!<3*'!W;ilr.4m!s+LE&~>
+q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2!<WQ,!<`[[ORrADq=sj`qtU*gWW*5%
+!X8Z-#6P8,!<3*'!W;ilr.4m!s+LE&~>
+q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd&
+"pG)1p]1<q!!3)s!<%KKJcCE'J,~>
+q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd&
+"pG)1p]1<q!!3)s!<%KKJcCE'J,~>
+q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd&
+"pG)1p]1<q!!3)s!<%KKJcCE'J,~>
+q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!<<B2!!?JDm/6eYrqcSm
+rs/H)!!36'#R'o&rW<)t!<.QLJcCE'J,~>
+q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!<<B2!!?JDm/6eYrqcSm
+rs/H)!!36'#R'o&rW<)t!<.QLJcCE'J,~>
+q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!<<B2!!?JDm/6eYrqcSm
+rs/H)!!36'#R'o&rW<)t!<.QLJcCE'J,~>
+q>U]ur;ZWfq"b-m!UB^i!<WE*!WrT$!!*<-rW)s!(]XR<!<iT-"TST+#QY>>!W`Norqu`gq>%#i
+#P\B$"Tec.!VcZp!<WE%rr.KKJcCB&J,~>
+q>U]ur;ZWfq"b-m!UB^i!<WE*!WrT$!!*<-rW)s!(]XR<!<iT-"TST+#QY>>!W`Norqu`gq>%#i
+#P\B$"Tec.!VcZp!<WE%rr.KKJcCB&J,~>
+q>U]ur;ZWfq"b-m!UB^i!<WE*!WrT$!!*<-rW)s!(]XR<!<iT-"TST+#QY>>!W`Norqu`gq>%#i
+#P\B$"Tec.!VcZp!<WE%rr.KKJcCB&J,~>
+q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P
+p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~>
+q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P
+p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~>
+q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P
+p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~>
+q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9
+rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~>
+q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9
+rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~>
+q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9
+rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~>
+q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp
+s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp
+s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp
+s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>Ud"qW at eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390
+eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>Ud"qW at eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390
+eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>Ud"qW at eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390
+eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~>
+q>U]mrq?<drqcWmr9aG<s7Q0e!!<H+!"Ar.p&=scq>:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD
+!W`2rq>:0js8W)'rs&E%!<E0#!quZr!<<0"rdk*#s+C?%~>
+q>U]mrq?<drqcWmr9aG<s7Q0e!!<H+!"Ar.p&=scq>:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD
+!W`2rq>:0js8W)'rs&E%!<E0#!quZr!<<0"rdk*#s+C?%~>
+q>U]mrq?<drqcWmr9aG<s7Q0e!!<H+!"Ar.p&=scq>:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD
+!W`2rq>:0js8W)'rs&E%!<E0#!quZr!<<0"rdk*#s+C?%~>
+q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$<iqu-cos7uHirr)a*qajHa#QP)4!Wr`0qYg9g
+rr<#tYl=q,!!33%!!;lp!W`9%rr.KKJcCB&J,~>
+q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$<iqu-cos7uHirr)a*qajHa#QP)4!Wr`0qYg9g
+rr<#tYl=q,!!33%!!;lp!W`9%rr.KKJcCB&J,~>
+q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$<iqu-cos7uHirr)a*qajHa#QP)4!Wr`0qYg9g
+rr<#tYl=q,!!33%!!;lp!W`9%rr.KKJcCB&J,~>
+q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb
+rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~>
+q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb
+rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~>
+q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb
+rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~>
+q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p
+rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~>
+q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p
+rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~>
+q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p
+rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~>
+f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/
+s8)WgU]:AnaoD;<!rr9!e,TIIl2Lb_qu6Zqg&D'Oqu6ZqV#Pr~>
+f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/
+s8)WgU]:AnaoD;<!rr9!e,TIIl2Lb_qu6Zqg&D'Oqu6ZqV#Pr~>
+f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/
+s8)WgU]:AnaoD;<!rr9!e,TIIl2Lb_qu6Zqg&D'Oqu6ZqV#Pr~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/
+!tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/
+!tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/
+!tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg<fpBCX/!=B;@q>^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t
+"p#,4"o\H"UAt8maoD;<d/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg<fpBCX/!=B;@q>^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t
+"p#,4"o\H"UAt8maoD;<d/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg<fpBCX/!=B;@q>^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t
+"p#,4"o\H"UAt8maoD;<d/X.FJcF7"J,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7Zr<!31!!*-+,l%<:rr;usZN't(rr`H+#6=r2pAbC)
+!t"o)q>GmEj8]/YJcDPGJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7Zr<!31!!*-+,l%<:rr;usZN't(rr`H+#6=r2pAbC)
+!t"o)q>GmEj8]/YJcDPGJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7Zr<!31!!*-+,l%<:rr;usZN't(rr`H+#6=r2pAbC)
+!t"o)q>GmEj8]/YJcDPGJ,~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$
+#6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$
+#6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$
+#6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5
+!r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf<s8VurquQcqp]('gl2Ue]rr)iqkl1kdrVZTlrr;fn
+nc/Faq#:QtrVZTlrr;fnXT*e~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5
+!r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf<s8VurquQcqp]('gl2Ue]rr)iqkl1kdrVZTlrr;fn
+nc/Faq#:QtrVZTlrr;fnXT*e~>
+f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5
+!r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf<s8VurquQcqp]('gl2Ue]rr)iqkl1kdrVZTlrr;fn
+nc/Faq#:QtrVZTlrr;fnXT*e~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd&
+!!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W
+r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr<!'f\+p1
+rquZjrVZ`qli7"a#Q4T!f%/I*rqZKhs8W'-s8N#rs8W)uf\4s0f[ofKs4@;Krr*-#r;QWmrr&qu
+J,~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd&
+!!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W
+r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr<!'f\+p1
+rquZjrVZ`qli7"a#Q4T!f%/I*rqZKhs8W'-s8N#rs8W)uf\4s0f[ofKs4@;Krr*-#r;QWmrr&qu
+J,~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd&
+!!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W
+r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr<!'f\+p1
+rquZjrVZ`qli7"a#Q4T!f%/I*rqZKhs8W'-s8N#rs8W)uf\4s0f[ofKs4@;Krr*-#r;QWmrr&qu
+J,~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG=
+qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^<i
+rTaF_rWi&q"9SZ)rVZ9es8EH*q"=[b])Vs6!sJi0rVup!r;[0*!sAW-_7ogFqu$'cs8EQ*rqlcu
+!s?:8qt^3hs8)][s8W'*o_eOg!<<;<r;?NmquQcqqu?]q&,c>%pAY!f^]P&J"TSQ,"Si$.!<N6(
+_RogHr;$$]p\XpbXT*e~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG=
+qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^<i
+rTaF_rWi&q"9SZ)rVZ9es8EH*q"=[b])Vs6!sJi0rVup!r;[0*!sAW-_7ogFqu$'cs8EQ*rqlcu
+!s?:8qt^3hs8)][s8W'*o_eOg!<<;<r;?NmquQcqqu?]q&,c>%pAY!f^]P&J"TSQ,"Si$.!<N6(
+_RogHr;$$]p\XpbXT*e~>
+f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG=
+qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^<i
+rTaF_rWi&q"9SZ)rVZ9es8EH*q"=[b])Vs6!sJi0rVup!r;[0*!sAW-_7ogFqu$'cs8EQ*rqlcu
+!s?:8qt^3hs8)][s8W'*o_eOg!<<;<r;?NmquQcqqu?]q&,c>%pAY!f^]P&J"TSQ,"Si$.!<N6(
+_RogHr;$$]p\XpbXT*e~>
+fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr
+#5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d at or:g3js8N#t&cVb%qZ7!(!W`E%
+qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+!<N?(!WE'+!<N?+!!rk'rV6B`s8W)u
+r!i9*!XJi2qYU!_rVZWjli7"a$N0Vp!sJ`/"9&2trquirqZ$Tp&,#tup\jlf!!iW2#64o1!Vl^+
+#6G)0#Q^h%pA"FOpAasdXT*e~>
+fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr
+#5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d at or:g3js8N#t&cVb%qZ7!(!W`E%
+qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+!<N?(!WE'+!<N?+!!rk'rV6B`s8W)u
+r!i9*!XJi2qYU!_rVZWjli7"a$N0Vp!sJ`/"9&2trquirqZ$Tp&,#tup\jlf!!iW2#64o1!Vl^+
+#6G)0#Q^h%pA"FOpAasdXT*e~>
+fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr
+#5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d at or:g3js8N#t&cVb%qZ7!(!W`E%
+qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+!<N?(!WE'+!<N?+!!rk'rV6B`s8W)u
+r!i9*!XJi2qYU!_rVZWjli7"a$N0Vp!sJ`/"9&2trquirqZ$Tp&,#tup\jlf!!iW2#64o1!Vl^+
+#6G)0#Q^h%pA"FOpAasdXT*e~>
+f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY at U!!<E,!W`,rrVj2(#Q42nq#('bO7<2T
+"9T#&p%S4[li7"a#Q=N#"p+l9"7ZEh!<3'1!t>85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q
+rVcZlrp0UarWiB'!<E9)s8DQhs8N&n%Ju.e"UbD7!W`<'!s/Q$!!rZ-!s8Q0"-EQ\oDeji&,cD"
+$4-_9$2XJnrV6*dqWn1]rWr;qM?a+]$j$;*rVucqrqcZprX\r(o_eWI#6Fl5!W`Q-"p4T$%gE:H
+!"8o/OSeDBr;$BfqlKgJ~>
+f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY at U!!<E,!W`,rrVj2(#Q42nq#('bO7<2T
+"9T#&p%S4[li7"a#Q=N#"p+l9"7ZEh!<3'1!t>85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q
+rVcZlrp0UarWiB'!<E9)s8DQhs8N&n%Ju.e"UbD7!W`<'!s/Q$!!rZ-!s8Q0"-EQ\oDeji&,cD"
+$4-_9$2XJnrV6*dqWn1]rWr;qM?a+]$j$;*rVucqrqcZprX\r(o_eWI#6Fl5!W`Q-"p4T$%gE:H
+!"8o/OSeDBr;$BfqlKgJ~>
+f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY at U!!<E,!W`,rrVj2(#Q42nq#('bO7<2T
+"9T#&p%S4[li7"a#Q=N#"p+l9"7ZEh!<3'1!t>85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q
+rVcZlrp0UarWiB'!<E9)s8DQhs8N&n%Ju.e"UbD7!W`<'!s/Q$!!rZ-!s8Q0"-EQ\oDeji&,cD"
+$4-_9$2XJnrV6*dqWn1]rWr;qM?a+]$j$;*rVucqrqcZprX\r(o_eWI#6Fl5!W`Q-"p4T$%gE:H
+!"8o/OSeDBr;$BfqlKgJ~>
+f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ,
+#Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^<i
+r;Q$^rr**&!!3<,s8;Kgs8E8tr-/2L!XAu0!<`H,"9JW$!<3')!t#/2!=e]"oDeji&,c5%!!ii3
+$2jMhpA+OVrp0UarX/>s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4
+"U+Slqt'O\q"q/mJ,~>
+f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ,
+#Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^<i
+r;Q$^rr**&!!3<,s8;Kgs8E8tr-/2L!XAu0!<`H,"9JW$!<3')!t#/2!=e]"oDeji&,c5%!!ii3
+$2jMhpA+OVrp0UarX/>s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4
+"U+Slqt'O\q"q/mJ,~>
+f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ,
+#Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^<i
+r;Q$^rr**&!!3<,s8;Kgs8E8tr-/2L!XAu0!<`H,"9JW$!<3')!t#/2!=e]"oDeji&,c5%!!ii3
+$2jMhpA+OVrp0UarX/>s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4
+"U+Slqt'O\q"q/mJ,~>
+q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[
+qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3
+qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds
+"9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp<gqYU3hqu?]q%e0DmrrWW5"on[qT:VUApmr"kRfWp#
+"9Sl(rUTaWp](&js*t~>
+q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[
+qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3
+qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds
+"9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp<gqYU3hqu?]q%e0DmrrWW5"on[qT:VUApmr"kRfWp#
+"9Sl(rUTaWp](&js*t~>
+q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[
+qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3
+qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds
+"9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp<gqYU3hqu?]q%e0DmrrWW5"on[qT:VUApmr"kRfWp#
+"9Sl(rUTaWp](&js*t~>
+q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!<i]1"V1\8s7Q?hrk/:,r<N?"
+qW.VN7L/G`rrN?+q=agfqWn1]rWiAt"U5&5!rM6^s83H,oD\Xj!sAW.$2XGlr;Zfrrr2utrr!**
+#6Y)/"9&,orquirlMpk_"p"]+"TeQ"oDeji&,H/,"U#/4[f64%q>1!erql`qrWfk3#lk&19DS2Z
+s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U
+q>("#q=V/t!W`H*8b`&UrV6<fXT*e~>
+q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!<i]1"V1\8s7Q?hrk/:,r<N?"
+qW.VN7L/G`rrN?+q=agfqWn1]rWiAt"U5&5!rM6^s83H,oD\Xj!sAW.$2XGlr;Zfrrr2utrr!**
+#6Y)/"9&,orquirlMpk_"p"]+"TeQ"oDeji&,H/,"U#/4[f64%q>1!erql`qrWfk3#lk&19DS2Z
+s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U
+q>("#q=V/t!W`H*8b`&UrV6<fXT*e~>
+q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!<i]1"V1\8s7Q?hrk/:,r<N?"
+qW.VN7L/G`rrN?+q=agfqWn1]rWiAt"U5&5!rM6^s83H,oD\Xj!sAW.$2XGlr;Zfrrr2utrr!**
+#6Y)/"9&,orquirlMpk_"p"]+"TeQ"oDeji&,H/,"U#/4[f64%q>1!erql`qrWfk3#lk&19DS2Z
+s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U
+q>("#q=V/t!W`H*8b`&UrV6<fXT*e~>
+q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r<N&q
+nG*%W$3BVr"pi6ErUTOYli6t`"ni*%!!<5jrr<#urr)j0qu6<fqu6p)!<NK-q>:!fs8N#rrt#,-
+p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q<fs8E<&0*2Ib!<E,srVcrtrr;usrr<#t#lXbJ!XSr0
+!r_`js8EN,q"asm"TSWapA"I_rq5RVs8E<&ncoO&#QXf$rr2rr!<2ips8EE$qt2ZJ!WWQ.qu60b
+rV?F'rVZ?7!!*-$!;u]frqcWnXT*e~>
+q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r<N&q
+nG*%W$3BVr"pi6ErUTOYli6t`"ni*%!!<5jrr<#urr)j0qu6<fqu6p)!<NK-q>:!fs8N#rrt#,-
+p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q<fs8E<&0*2Ib!<E,srVcrtrr;usrr<#t#lXbJ!XSr0
+!r_`js8EN,q"asm"TSWapA"I_rq5RVs8E<&ncoO&#QXf$rr2rr!<2ips8EE$qt2ZJ!WWQ.qu60b
+rV?F'rVZ?7!!*-$!;u]frqcWnXT*e~>
+q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r<N&q
+nG*%W$3BVr"pi6ErUTOYli6t`"ni*%!!<5jrr<#urr)j0qu6<fqu6p)!<NK-q>:!fs8N#rrt#,-
+p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q<fs8E<&0*2Ib!<E,srVcrtrr;usrr<#t#lXbJ!XSr0
+!r_`js8EN,q"asm"TSWapA"I_rq5RVs8E<&ncoO&#QXf$rr2rr!<2ips8EE$qt2ZJ!WWQ.qu60b
+rV?F'rVZ?7!!*-$!;u]frqcWnXT*e~>
+q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe
+ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/
+q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@
+!<2uss8W'"s8N#ss8W'/rVuj&!<E0-s8W&qrr2lqrVuos'*%q,r:g-i"p##4"oe>or;ZNjn,NFe
+s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0!<E/lrVuMi
+s*t~>
+q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe
+ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/
+q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@
+!<2uss8W'"s8N#ss8W'/rVuj&!<E0-s8W&qrr2lqrVuos'*%q,r:g-i"p##4"oe>or;ZNjn,NFe
+s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0!<E/lrVuMi
+s*t~>
+q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe
+ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/
+q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@
+!<2uss8W'"s8N#ss8W'/rVuj&!<E0-s8W&qrr2lqrVuos'*%q,r:g-i"p##4"oe>or;ZNjn,NFe
+s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0!<E/lrVuMi
+s*t~>
+q>Ufrs8;-\rr!*(!<N0"rrMWi%g)k8"TSQ)!!rZ+#lk>>!;QX)!"8i-"UP/<!!!<1"pY&,#Qb)/
+rSmhOrr1sX#Q4ArpAY!hr8IYUo`"gsrVlT]rq-3brW<K%!<3)u!<3')"9SAup\t!fkl1hb"9AK(
+!:^!grql^,rr)EarqcF+!!3E+!;lcmrqZQsrr3!!!r`2us8N#]rrr?%!!!$#nc&poqt^d&!!NB&
+rq$0irXSf(!#5Y@!;-9gqu-KkrVccrrY#80qYg?hrWNK+!s&,hrVlWdrpTmerr<!)rr)Nm$3181
+!<2Tirr)ugj;Ips#n6[upAOabo)AXdrt55*qtp*d"98T2#3u3eoD\a`XT*e~>
+q>Ufrs8;-\rr!*(!<N0"rrMWi%g)k8"TSQ)!!rZ+#lk>>!;QX)!"8i-"UP/<!!!<1"pY&,#Qb)/
+rSmhOrr1sX#Q4ArpAY!hr8IYUo`"gsrVlT]rq-3brW<K%!<3)u!<3')"9SAup\t!fkl1hb"9AK(
+!:^!grql^,rr)EarqcF+!!3E+!;lcmrqZQsrr3!!!r`2us8N#]rrr?%!!!$#nc&poqt^d&!!NB&
+rq$0irXSf(!#5Y@!;-9gqu-KkrVccrrY#80qYg?hrWNK+!s&,hrVlWdrpTmerr<!)rr)Nm$3181
+!<2Tirr)ugj;Ips#n6[upAOabo)AXdrt55*qtp*d"98T2#3u3eoD\a`XT*e~>
+q>Ufrs8;-\rr!*(!<N0"rrMWi%g)k8"TSQ)!!rZ+#lk>>!;QX)!"8i-"UP/<!!!<1"pY&,#Qb)/
+rSmhOrr1sX#Q4ArpAY!hr8IYUo`"gsrVlT]rq-3brW<K%!<3)u!<3')"9SAup\t!fkl1hb"9AK(
+!:^!grql^,rr)EarqcF+!!3E+!;lcmrqZQsrr3!!!r`2us8N#]rrr?%!!!$#nc&poqt^d&!!NB&
+rq$0irXSf(!#5Y@!;-9gqu-KkrVccrrY#80qYg?hrWNK+!s&,hrVlWdrpTmerr<!)rr)Nm$3181
+!<2Tirr)ugj;Ips#n6[upAOabo)AXdrt55*qtp*d"98T2#3u3eoD\a`XT*e~>
+p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn
+rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2
+!:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.%<o^i+_r[7C2"98N('^#Dmqu-Kk
+rVulss8N&urqcNbrq6<r"9f#-s8DEarVl-_$2sc$!<`E(&f:B8s8W'Gp\t0m$31P9r:'^[p%\F_
+rr<#ts8W&op\js]!!`r6#3YIOs8;ZiXT*e~>
+p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn
+rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2
+!:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.%<o^i+_r[7C2"98N('^#Dmqu-Kk
+rVulss8N&urqcNbrq6<r"9f#-s8DEarVl-_$2sc$!<`E(&f:B8s8W'Gp\t0m$31P9r:'^[p%\F_
+rr<#ts8W&op\js]!!`r6#3YIOs8;ZiXT*e~>
+p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn
+rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2
+!:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.%<o^i+_r[7C2"98N('^#Dmqu-Kk
+rVulss8N&urqcNbrq6<r"9f#-s8DEarVl-_$2sc$!<`E(&f:B8s8W'Gp\t0m$31P9r:'^[p%\F_
+rr<#ts8W&op\js]!!`r6#3YIOs8;ZiXT*e~>
+q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD
+o)8 at _ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j*
+o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6
+r;Zg<!<WB%r;?Nmr;HZps8W)us8Mloo)&Ce"Tel.nG`4]me6JBrsAZ$rX/i8$ioquoDeji-iN`<
+!!WZ.#O26`oD\:[r;Q`rrr<#tqZ$-aquHcu$NLP2p\Oa\riH-M~>
+q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD
+o)8 at _ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j*
+o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6
+r;Zg<!<WB%r;?Nmr;HZps8W)us8Mloo)&Ce"Tel.nG`4]me6JBrsAZ$rX/i8$ioquoDeji-iN`<
+!!WZ.#O26`oD\:[r;Q`rrr<#tqZ$-aquHcu$NLP2p\Oa\riH-M~>
+q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD
+o)8 at _ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j*
+o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6
+r;Zg<!<WB%r;?Nmr;HZps8W)us8Mloo)&Ce"Tel.nG`4]me6JBrsAZ$rX/i8$ioquoDeji-iN`<
+!!WZ.#O26`oD\:[r;Q`rrr<#tqZ$-aquHcu$NLP2p\Oa\riH-M~>
+q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!<WZ'!#YkF!WrE*"Tn`5!<WN+!<Ymds7uNZ
+p\+Ucj8T>^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn
+qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj at cr;clu!<Mln!<2rs#la]*"p##3p\sdas8FDC
+pIYPh"pG52rVc`qrVlirs8W)us8MomrUp'i!"8l0s7uBar;HQZrsAZ$quHm%!W`5poDegh-LUm<
+!W`9*qY:$`pAY*grr<#srr;uprUogR9`tV%!Xetsn,*(\XT*e~>
+q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!<WZ'!#YkF!WrE*"Tn`5!<WN+!<Ymds7uNZ
+p\+Ucj8T>^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn
+qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj at cr;clu!<Mln!<2rs#la]*"p##3p\sdas8FDC
+pIYPh"pG52rVc`qrVlirs8W)us8MomrUp'i!"8l0s7uBar;HQZrsAZ$quHm%!W`5poDegh-LUm<
+!W`9*qY:$`pAY*grr<#srr;uprUogR9`tV%!Xetsn,*(\XT*e~>
+q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!<WZ'!#YkF!WrE*"Tn`5!<WN+!<Ymds7uNZ
+p\+Ucj8T>^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn
+qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj at cr;clu!<Mln!<2rs#la]*"p##3p\sdas8FDC
+pIYPh"pG52rVc`qrVlirs8W)us8MomrUp'i!"8l0s7uBar;HQZrsAZ$quHm%!W`5poDegh-LUm<
+!W`9*qY:$`pAY*grr<#srr;uprUogR9`tV%!Xetsn,*(\XT*e~>
+q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<<N3!s&T#!"'#6"TeZ-$NU82"TAE-#%7E(s76-aqYpKS
+rs&8upR\%LS)0_FR@]uN"Te]."9Jf1#4MTt!WE#pqt0gakl1hb"9AK(!:9_!rr)fnqtp*[q"eN3
+?Y<^?s7lHcq>UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6"
+r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4
+"82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~>
+q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<<N3!s&T#!"'#6"TeZ-$NU82"TAE-#%7E(s76-aqYpKS
+rs&8upR\%LS)0_FR@]uN"Te]."9Jf1#4MTt!WE#pqt0gakl1hb"9AK(!:9_!rr)fnqtp*[q"eN3
+?Y<^?s7lHcq>UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6"
+r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4
+"82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~>
+q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<<N3!s&T#!"'#6"TeZ-$NU82"TAE-#%7E(s76-aqYpKS
+rs&8upR\%LS)0_FR@]uN"Te]."9Jf1#4MTt!WE#pqt0gakl1hb"9AK(!:9_!rr)fnqtp*[q"eN3
+?Y<^?s7lHcq>UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6"
+r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4
+"82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~>
+q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!<EK.#64i-p])-8#6Y#.!!33("TndMHi!L1rVZWeqYL3j
+j8TA\s7?Hr!!WSa!"Au0!W`<'!!**(!X/Z0pAb0or;m9+!!;unr:^'^qrn%`r<*-$!W_`i!<2or
+&cVb*q=sj\q>U6hr;?TpqY:!arri?$!<<3#!<)rsroj at cr;clu!<Mln!<2or#65/6!![QFq"+Oc
+rY,81qu?s*!!<,sr;Q]or;QZps8N#t&,Z>$qtt[=!<<H,rVcKirU0^crr2p'rqcp$!<WT#r:Bsg
+r[7XC"98f4!.4bEq"Xmar;?Qorr)irs8;cirV?'e#6=r at q>9s_s88tuJ,~>
+q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!<EK.#64i-p])-8#6Y#.!!33("TndMHi!L1rVZWeqYL3j
+j8TA\s7?Hr!!WSa!"Au0!W`<'!!**(!X/Z0pAb0or;m9+!!;unr:^'^qrn%`r<*-$!W_`i!<2or
+&cVb*q=sj\q>U6hr;?TpqY:!arri?$!<<3#!<)rsroj at cr;clu!<Mln!<2or#65/6!![QFq"+Oc
+rY,81qu?s*!!<,sr;Q]or;QZps8N#t&,Z>$qtt[=!<<H,rVcKirU0^crr2p'rqcp$!<WT#r:Bsg
+r[7XC"98f4!.4bEq"Xmar;?Qorr)irs8;cirV?'e#6=r at q>9s_s88tuJ,~>
+q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!<EK.#64i-p])-8#6Y#.!!33("TndMHi!L1rVZWeqYL3j
+j8TA\s7?Hr!!WSa!"Au0!W`<'!!**(!X/Z0pAb0or;m9+!!;unr:^'^qrn%`r<*-$!W_`i!<2or
+&cVb*q=sj\q>U6hr;?TpqY:!arri?$!<<3#!<)rsroj at cr;clu!<Mln!<2or#65/6!![QFq"+Oc
+rY,81qu?s*!!<,sr;Q]or;QZps8N#t&,Z>$qtt[=!<<H,rVcKirU0^crr2p'rqcp$!<WT#r:Bsg
+r[7XC"98f4!.4bEq"Xmar;?Qorr)irs8;cirV?'e#6=r at q>9s_s88tuJ,~>
+q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!<E;t!<<B(!>GS9!rr at eO-0G5s7u]nrr)fqqu6TT
+rs/K$rrE0$!<h6Z$N^;.!WW6$!!3<(!qu[)!W`?'"p4skq>1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s
+s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o at rloDeji
+-iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ"
+oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z
+s*t~>
+q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!<E;t!<<B(!>GS9!rr at eO-0G5s7u]nrr)fqqu6TT
+rs/K$rrE0$!<h6Z$N^;.!WW6$!!3<(!qu[)!W`?'"p4skq>1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s
+s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o at rloDeji
+-iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ"
+oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z
+s*t~>
+q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!<E;t!<<B(!>GS9!rr at eO-0G5s7u]nrr)fqqu6TT
+rs/K$rrE0$!<h6Z$N^;.!WW6$!!3<(!qu[)!W`?'"p4skq>1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s
+s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o at rloDeji
+-iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ"
+oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z
+s*t~>
+q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$
+!<<3#!<)rsroj at cr;clu!<Mrps83<%rr)coqu@$'!X&Gpo)Jah&-)A"!rrE*!r)Q^qY^<hqtpEn
+rX\u(rVlX-"9J].rqQBes8DKf&,Z)"qt9^]rW*3(!<rZ'qt'jfrWiDo!s/]5!WDcms8N#t&H;_-
+p@\@d!!<B)r:BscpAX%N#Q4PpqYg<fr;$?grrE&Zs*t~>
+q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$
+!<<3#!<)rsroj at cr;clu!<Mrps83<%rr)coqu@$'!X&Gpo)Jah&-)A"!rrE*!r)Q^qY^<hqtpEn
+rX\u(rVlX-"9J].rqQBes8DKf&,Z)"qt9^]rW*3(!<rZ'qt'jfrWiDo!s/]5!WDcms8N#t&H;_-
+p@\@d!!<B)r:BscpAX%N#Q4PpqYg<fr;$?grrE&Zs*t~>
+q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$
+!<<3#!<)rsroj at cr;clu!<Mrps83<%rr)coqu@$'!X&Gpo)Jah&-)A"!rrE*!r)Q^qY^<hqtpEn
+rX\u(rVlX-"9J].rqQBes8DKf&,Z)"qt9^]rW*3(!<rZ'qt'jfrWiDo!s/]5!WDcms8N#t&H;_-
+p@\@d!!<B)r:BscpAX%N#Q4PpqYg<fr;$?grrE&Zs*t~>
+q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb
+nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u
+&cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~>
+q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb
+nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u
+&cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~>
+q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb
+nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u
+&cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~>
+q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!!<H.!SRAKrr)]ir;Pp["oSQ)
+!!3/Irri?$!<<3#!<)rsroj at cr;clu!<Mrp&,ZA#qu-'`rWX&:!Wr;qrq$0irX\i(rVus,!WW6"
+pAb-dqYpBls8EMurq$*c%1<=@$MsMqr:TRZ&,Q,$rV??arW!-0!<DuloCN"^rWiB#!!!3)!r2Be
+&cMV'rr2Qh!<<E,#m0kuqu6TWs8Drsrs&;srUKmZr;$?Is*t~>
+q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!!<H.!SRAKrr)]ir;Pp["oSQ)
+!!3/Irri?$!<<3#!<)rsroj at cr;clu!<Mrp&,ZA#qu-'`rWX&:!Wr;qrq$0irX\i(rVus,!WW6"
+pAb-dqYpBls8EMurq$*c%1<=@$MsMqr:TRZ&,Q,$rV??arW!-0!<DuloCN"^rWiB#!!!3)!r2Be
+&cMV'rr2Qh!<<E,#m0kuqu6TWs8Drsrs&;srUKmZr;$?Is*t~>
+q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!!<H.!SRAKrr)]ir;Pp["oSQ)
+!!3/Irri?$!<<3#!<)rsroj at cr;clu!<Mrp&,ZA#qu-'`rWX&:!Wr;qrq$0irX\i(rVus,!WW6"
+pAb-dqYpBls8EMurq$*c%1<=@$MsMqr:TRZ&,Q,$rV??arW!-0!<DuloCN"^rWiB#!!!3)!r2Be
+&cMV'rr2Qh!<<E,#m0kuqu6TWs8Drsrs&;srUKmZr;$?Is*t~>
+q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5<!!!]/qu-NmqYL-Qrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,prt#)%rql<drXK)4!t#&!pAFO^s8EQ)q#0I\!!EB+p@/(\
+o_\Xbs8N!,lML2P!rr<(!#5G2r;Q3c#la`$p\4[]pBpm"!sJVtrq$0irWi63!"/l2"TJ#m&cMV"
+p&+gbnHT*q"p4f'qY0aIrrE&trVuj%q>UBdnFuq]q>L<lhuA3~>
+q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5<!!!]/qu-NmqYL-Qrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,prt#)%rql<drXK)4!t#&!pAFO^s8EQ)q#0I\!!EB+p@/(\
+o_\Xbs8N!,lML2P!rr<(!#5G2r;Q3c#la`$p\4[]pBpm"!sJVtrq$0irWi63!"/l2"TJ#m&cMV"
+p&+gbnHT*q"p4f'qY0aIrrE&trVuj%q>UBdnFuq]q>L<lhuA3~>
+q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5<!!!]/qu-NmqYL-Qrrr?(!<<0$
+d/O7JrrE*$rW)osrr2-]"oSH%!!*,prt#)%rql<drXK)4!t#&!pAFO^s8EQ)q#0I\!!EB+p@/(\
+o_\Xbs8N!,lML2P!rr<(!#5G2r;Q3c#la`$p\4[]pBpm"!sJVtrq$0irWi63!"/l2"TJ#m&cMV"
+p&+gbnHT*q"p4f'qY0aIrrE&trVuj%q>UBdnFuq]q>L<lhuA3~>
+q>U]srqH<erpo^'rs/E"qYpBdqYL0ih#@QWrr<0%!lb3K#ljr6p\4Xcs8MrorTF1ar<*-$!W`#q
+q>T at Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N
+rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m
+s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~>
+q>U]srqH<erpo^'rs/E"qYpBdqYL0ih#@QWrr<0%!lb3K#ljr6p\4Xcs8MrorTF1ar<*-$!W`#q
+q>T at Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N
+rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m
+s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~>
+q>U]srqH<erpo^'rs/E"qYpBdqYL0ih#@QWrr<0%!lb3K#ljr6p\4Xcs8MrorTF1ar<*-$!W`#q
+q>T at Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N
+rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m
+s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~>
+q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[
+rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C at -!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@]
+qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*!<N3!p](9mrr3Q/
+p\Xjfp\b0o#6k2.rVlcikPk\`r;6Bhrr!#pgYCT0h"gjLrVlfRs*t~>
+q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[
+rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C at -!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@]
+qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*!<N3!p](9mrr3Q/
+p\Xjfp\b0o#6k2.rVlcikPk\`r;6Bhrr!#pgYCT0h"gjLrVlfRs*t~>
+q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[
+rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C at -!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@]
+qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*!<N3!p](9mrr3Q/
+p\Xjfp\b0o#6k2.rVlcikPk\`r;6Bhrr!#pgYCT0h"gjLrVlfRs*t~>
+q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!<E<)#m:,#hu<lY"9AK(!;c`qrr;m"
+rr)fnr;H0bs8N6!rVuloq#:KrrrE*$rW)osrr2-]"oSH%!!*,orsnf$rqZTj"98E-"oA/sqt'jf
+rXSl's76F!!!EK(o_&(\q"k$jrXS`#qsj[_!=Sr1!;lcnq""IbrW`?#p&"RXr;?Tu!^?>Up\4^f
+rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@
+r<)rpr;-El"o\K"s8N#[s*t~>
+q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!<E<)#m:,#hu<lY"9AK(!;c`qrr;m"
+rr)fnr;H0bs8N6!rVuloq#:KrrrE*$rW)osrr2-]"oSH%!!*,orsnf$rqZTj"98E-"oA/sqt'jf
+rXSl's76F!!!EK(o_&(\q"k$jrXS`#qsj[_!=Sr1!;lcnq""IbrW`?#p&"RXr;?Tu!^?>Up\4^f
+rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@
+r<)rpr;-El"o\K"s8N#[s*t~>
+q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!<E<)#m:,#hu<lY"9AK(!;c`qrr;m"
+rr)fnr;H0bs8N6!rVuloq#:KrrrE*$rW)osrr2-]"oSH%!!*,orsnf$rqZTj"98E-"oA/sqt'jf
+rXSl's76F!!!EK(o_&(\q"k$jrXS`#qsj[_!=Sr1!;lcnq""IbrW`?#p&"RXr;?Tu!^?>Up\4^f
+rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@
+r<)rpr;-El"o\K"s8N#[s*t~>
+M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\
+rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be#
+qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p at e4[s8Mus#Pn]."9ef'
+r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8<r3s8DigrV?BmrWE9(;ZNotqu6<dqt9j`rVHHfrr2'[
+J,~>
+M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\
+rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be#
+qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p at e4[s8Mus#Pn]."9ef'
+r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8<r3s8DigrV?BmrWE9(;ZNotqu6<dqt9j`rVHHfrr2'[
+J,~>
+M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\
+rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be#
+qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p at e4[s8Mus#Pn]."9ef'
+r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8<r3s8DigrV?BmrWE9(;ZNotqu6<dqt9j`rVHHfrr2'[
+J,~>
+M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l
+o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5
+s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7
+p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#:<fs8Drr
+k5Tr~>
+M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l
+o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5
+s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7
+p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#:<fs8Drr
+k5Tr~>
+M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l
+o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5
+s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7
+p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#:<fs8Drr
+k5Tr~>
+M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq
+s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C%
+0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H
+NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq
+>C9jrr2'[J,~>
+M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq
+s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C%
+0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H
+NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq
+>C9jrr2'[J,~>
+M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq
+s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C%
+0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H
+NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq
+>C9jrr2'[J,~>
+M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr<E/j
+r;ZBbq"apmrr3!!!r`2us8N#]rrr?%!!!$#p\tcrqt^-^q[iu;#6Fu*rqlH[rt#)*qXjaj!seu6
+q>^<fq#1*is8EQ+pAF at PqZ?s&!s8PsqYp?_s8W'/q#C0dr:Tgg"pk84o_A=]p\t6mrr3<(r;Zj#%
+0Q_3p at J=arX\YuqtBa]r!WZ1#6=f!q>KRX+o_?0rq6<Wrr36/s7_rd!r2Sd!sW?3rUos^q"Ogaq
+>UBUs*t~>
+M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr<E/j
+r;ZBbq"apmrr3!!!r`2us8N#]rrr?%!!!$#p\tcrqt^-^q[iu;#6Fu*rqlH[rt#)*qXjaj!seu6
+q>^<fq#1*is8EQ+pAF at PqZ?s&!s8PsqYp?_s8W'/q#C0dr:Tgg"pk84o_A=]p\t6mrr3<(r;Zj#%
+0Q_3p at J=arX\YuqtBa]r!WZ1#6=f!q>KRX+o_?0rq6<Wrr36/s7_rd!r2Sd!sW?3rUos^q"Ogaq
+>UBUs*t~>
+M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr<E/j
+r;ZBbq"apmrr3!!!r`2us8N#]rrr?%!!!$#p\tcrqt^-^q[iu;#6Fu*rqlH[rt#)*qXjaj!seu6
+q>^<fq#1*is8EQ+pAF at PqZ?s&!s8PsqYp?_s8W'/q#C0dr:Tgg"pk84o_A=]p\t6mrr3<(r;Zj#%
+0Q_3p at J=arX\YuqtBa]r!WZ1#6=f!q>KRX+o_?0rq6<Wrr36/s7_rd!r2Sd!sW?3rUos^q"Ogaq
+>UBUs*t~>
+M#RYXrr<0%!m^iV!<NB(!=],7Zh="dq#1'Irrr?(!<<0$qZ$Tp#P7uoqYTdUrV?Hgs8MourVZTd
+q#:KrrrE*$rW)osrr2-]"oSH%!!*,prt##!qYg6i":YJ6!OMUjqYTg_%f-)"p\G$s":5/.p\b!_
+qZ$Tp&,#bsp[n9c!WWN,!<2ohrq$0irX\u-r:BgY8I5b*"9\MupAX[`$3'i("T\],Zh+%bs8W'/
+q=sj`s7uWq!X8c-r;$9el2Mq)o_eR`r9sYY":4c"rVurqr:mPt"\o!mr;Q3_qtU'froX62~>
+M#RYXrr<0%!m^iV!<NB(!=],7Zh="dq#1'Irrr?(!<<0$qZ$Tp#P7uoqYTdUrV?Hgs8MourVZTd
+q#:KrrrE*$rW)osrr2-]"oSH%!!*,prt##!qYg6i":YJ6!OMUjqYTg_%f-)"p\G$s":5/.p\b!_
+qZ$Tp&,#bsp[n9c!WWN,!<2ohrq$0irX\u-r:BgY8I5b*"9\MupAX[`$3'i("T\],Zh+%bs8W'/
+q=sj`s7uWq!X8c-r;$9el2Mq)o_eR`r9sYY":4c"rVurqr:mPt"\o!mr;Q3_qtU'froX62~>
+M#RYXrr<0%!m^iV!<NB(!=],7Zh="dq#1'Irrr?(!<<0$qZ$Tp#P7uoqYTdUrV?Hgs8MourVZTd
+q#:KrrrE*$rW)osrr2-]"oSH%!!*,prt##!qYg6i":YJ6!OMUjqYTg_%f-)"p\G$s":5/.p\b!_
+qZ$Tp&,#bsp[n9c!WWN,!<2ohrq$0irX\u-r:BgY8I5b*"9\MupAX[`$3'i("T\],Zh+%bs8W'/
+q=sj`s7uWq!X8c-r;$9el2Mq)o_eR`r9sYY":4c"rVurqr:mPt"\o!mr;Q3_qtU'froX62~>
+M#RYXrr<0%!n[MQ!ri<!!"K59!<<o;$H`;Fr:g$eqr%JXr<*-$!W`)ss8E6"s7H9c0/`M]q(i41
+2Db+$s7uHi"TJE%!!<-"rVulrkl1hb!<<*#!VcU)o)&@^rqm**!"]8,rVH6cnc'*tq>:$e!<E9*
+!<2ohrqlQls8EQ,rVlQgp\b'q"oo;4nbi(Os8W'/q>]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu
+p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn at qsj.Rr;Q]X
+s*t~>
+M#RYXrr<0%!n[MQ!ri<!!"K59!<<o;$H`;Fr:g$eqr%JXr<*-$!W`)ss8E6"s7H9c0/`M]q(i41
+2Db+$s7uHi"TJE%!!<-"rVulrkl1hb!<<*#!VcU)o)&@^rqm**!"]8,rVH6cnc'*tq>:$e!<E9*
+!<2ohrqlQls8EQ,rVlQgp\b'q"oo;4nbi(Os8W'/q>]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu
+p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn at qsj.Rr;Q]X
+s*t~>
+M#RYXrr<0%!n[MQ!ri<!!"K59!<<o;$H`;Fr:g$eqr%JXr<*-$!W`)ss8E6"s7H9c0/`M]q(i41
+2Db+$s7uHi"TJE%!!<-"rVulrkl1hb!<<*#!VcU)o)&@^rqm**!"]8,rVH6cnc'*tq>:$e!<E9*
+!<2ohrqlQls8EQ,rVlQgp\b'q"oo;4nbi(Os8W'/q>]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu
+p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn at qsj.Rr;Q]X
+s*t~>
+M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq
+rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^
+s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4
+!!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T at S!WMocrq$L"rUp0`iW9H+rquQY
+rTaC]k5Tr~>
+M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq
+rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^
+s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4
+!!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T at S!WMocrq$L"rUp0`iW9H+rquQY
+rTaC]k5Tr~>
+M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq
+rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^
+s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4
+!!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T at S!WMocrq$L"rUp0`iW9H+rquQY
+rTaC]k5Tr~>
+M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f,
+!!!9'!!E?$s8W)orri?$!<<3#!<)rsroj at cr;clu!<N#rs8EN.p\sjIrW<9+#6O]#qtKjas8<Z0
+rVlisp&Fpcr!3<*!!*5rr:^-equ?Zp%JKf!s8Muu"98f:nG`=Zs8W)ts8W'.qtg?jqYpNs!!`N(
+q#1$^rrMurrqd!#!!<3($i^&'nGWpor;ZWmrVup(!"T+urq,FSs8E#rrVIN6#m:;4p\s[_%f>qu
+qWA%k#l";qq>U?jr;HWYs*t~>
+M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f,
+!!!9'!!E?$s8W)orri?$!<<3#!<)rsroj at cr;clu!<N#rs8EN.p\sjIrW<9+#6O]#qtKjas8<Z0
+rVlisp&Fpcr!3<*!!*5rr:^-equ?Zp%JKf!s8Muu"98f:nG`=Zs8W)ts8W'.qtg?jqYpNs!!`N(
+q#1$^rrMurrqd!#!!<3($i^&'nGWpor;ZWmrVup(!"T+urq,FSs8E#rrVIN6#m:;4p\s[_%f>qu
+qWA%k#l";qq>U?jr;HWYs*t~>
+M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f,
+!!!9'!!E?$s8W)orri?$!<<3#!<)rsroj at cr;clu!<N#rs8EN.p\sjIrW<9+#6O]#qtKjas8<Z0
+rVlisp&Fpcr!3<*!!*5rr:^-equ?Zp%JKf!s8Muu"98f:nG`=Zs8W)ts8W'.qtg?jqYpNs!!`N(
+q#1$^rrMurrqd!#!!<3($i^&'nGWpor;ZWmrVup(!"T+urq,FSs8E#rrVIN6#m:;4p\s[_%f>qu
+qWA%k#l";qq>U?jr;HWYs*t~>
+M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH,
+"U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr%
+fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!<WSjrpTj\rrE&trt58/r;$<ep&4pn$j-_0s8MH^q
+>V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW!<Ec7!9jODr
+Vc1!!s%N[r:TparVlfqrrE&bs*t~>
+M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH,
+"U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr%
+fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!<WSjrpTj\rrE&trt58/r;$<ep&4pn$j-_0s8MH^q
+>V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW!<Ec7!9jODr
+Vc1!!s%N[r:TparVlfqrrE&bs*t~>
+M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH,
+"U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr%
+fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!<WSjrpTj\rrE&trt58/r;$<ep&4pn$j-_0s8MH^q
+>V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW!<Ec7!9jODr
+Vc1!!s%N[r:TparVlfqrrE&bs*t~>
+M>mhUqY^C&#6t:_!"TS?"U+u9!<bJ5qY^6_s8:OL"oSQ)!!3/ss8W''meZqXqu&9*q(;n(/i5I<
+/H>kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us
+rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i%
+fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q
+Z-s'chRJ:rVc`ps8W)bs*t~>
+M>mhUqY^C&#6t:_!"TS?"U+u9!<bJ5qY^6_s8:OL"oSQ)!!3/ss8W''meZqXqu&9*q(;n(/i5I<
+/H>kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us
+rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i%
+fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q
+Z-s'chRJ:rVc`ps8W)bs*t~>
+M>mhUqY^C&#6t:_!"TS?"U+u9!<bJ5qY^6_s8:OL"oSQ)!!3/ss8W''meZqXqu&9*q(;n(/i5I<
+/H>kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us
+rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i%
+fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q
+Z-s'chRJ:rVc`ps8W)bs*t~>
+M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c
+qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!<YdbrV?3ap\k*j')hb*
+r;?3]q"Fpl!t,;!p\FX_q#:j%rVQQfp&,=$!!`N$r:om`&cV_-pA=d^\-N0=%g;h&qXj[\s8W!+
+s7Q<er=0#>"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u
+"M=L'rr2oss8MBbJ,~>
+M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c
+qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!<YdbrV?3ap\k*j')hb*
+r;?3]q"Fpl!t,;!p\FX_q#:j%rVQQfp&,=$!!`N$r:om`&cV_-pA=d^\-N0=%g;h&qXj[\s8W!+
+s7Q<er=0#>"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u
+"M=L'rr2oss8MBbJ,~>
+M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c
+qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!<YdbrV?3ap\k*j')hb*
+r;?3]q"Fpl!t,;!p\FX_q#:j%rVQQfp&,=$!!`N$r:om`&cV_-pA=d^\-N0=%g;h&qXj[\s8W!+
+s7Q<er=0#>"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u
+"M=L'rr2oss8MBbJ,~>
+M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-<dr<E2uq#($^
+#5nN&!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VucqrXSi(rVZX!!rr?.p]('Zp at eIarY#2-r;6<c
+mJ6SY!XAf.s6]1Mr;$@'qtU$fqZ$Bg"9nu5"98/ooD]F%r;-Hir;-[#!s/[4p&Fj\rV6C&p\t$]
+r;6X-"UY;+r:g*Yr=AZ&q>0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q
+rVlfrs8MBbJ,~>
+M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-<dr<E2uq#($^
+#5nN&!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VucqrXSi(rVZX!!rr?.p]('Zp at eIarY#2-r;6<c
+mJ6SY!XAf.s6]1Mr;$@'qtU$fqZ$Bg"9nu5"98/ooD]F%r;-Hir;-[#!s/[4p&Fj\rV6C&p\t$]
+r;6X-"UY;+r:g*Yr=AZ&q>0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q
+rVlfrs8MBbJ,~>
+M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-<dr<E2uq#($^
+#5nN&!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VucqrXSi(rVZX!!rr?.p]('Zp at eIarY#2-r;6<c
+mJ6SY!XAf.s6]1Mr;$@'qtU$fqZ$Bg"9nu5"98/ooD]F%r;-Hir;-[#!s/[4p&Fj\rV6C&p\t$]
+r;6X-"UY;+r:g*Yr=AZ&q>0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q
+rVlfrs8MBbJ,~>
+M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p at A.\oDeXarquusrpU6q
+rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!<N at WreUZ,MXuZ:Ll$eFJr#>A
+"pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$
+rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl
+rr2os!<2?bJ,~>
+M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p at A.\oDeXarquusrpU6q
+rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!<N at WreUZ,MXuZ:Ll$eFJr#>A
+"pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$
+rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl
+rr2os!<2?bJ,~>
+M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p at A.\oDeXarquusrpU6q
+rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!<N at WreUZ,MXuZ:Ll$eFJr#>A
+"pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$
+rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl
+rr2os!<2?bJ,~>
+M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj
+p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5
+!rrQ,!<N<'qYg<drso&,r;$-aoD8Rm!!!6!qY1$irr)lsrXSf"rqug(!=&`,r;QWjrV?I(qXsab
+rVQEp"98c0"9JT)nGj(#!!`Q0!sSr7!X8Z4"T85Vs8W$2oE&rjMN at uD!W`K,FEVM=EKBnlrqlfq
+rojB4~>
+M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj
+p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5
+!rrQ,!<N<'qYg<drso&,r;$-aoD8Rm!!!6!qY1$irr)lsrXSf"rqug(!=&`,r;QWjrV?I(qXsab
+rVQEp"98c0"9JT)nGj(#!!`Q0!sSr7!X8Z4"T85Vs8W$2oE&rjMN at uD!W`K,FEVM=EKBnlrqlfq
+rojB4~>
+M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj
+p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5
+!rrQ,!<N<'qYg<drso&,r;$-aoD8Rm!!!6!qY1$irr)lsrXSf"rqug(!=&`,r;QWjrV?I(qXsab
+rVQEp"98c0"9JT)nGj(#!!`Q0!sSr7!X8Z4"T85Vs8W$2oE&rjMN at uD!W`K,FEVM=EKBnlrqlfq
+rojB4~>
+bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o
+rqu`jrr<!$qZ$Bkqrdt_r<*-$!W`)ss8E9%s8Dutqu?Zkrs/K%rqcZo!!N9$!<N2nrri?$!<<3#
+!<)rsroj at cr;clu!<N#rs8EQ,qu?Im$ipM8!X])2#R^Y(!WN6$!"9#3!WW<,!!**#s7-'^rso&,
+qu?]jrWN<&!XDg+pA"[frr2rsrXJ`%q"Ogq!<NB#r;-BhqZ$Tp&-).trVlUt"98c4!so,3!:^(#
+!!*0%"9SW,#QOu."pFi#iVt"sq>9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~>
+bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o
+rqu`jrr<!$qZ$Bkqrdt_r<*-$!W`)ss8E9%s8Dutqu?Zkrs/K%rqcZo!!N9$!<N2nrri?$!<<3#
+!<)rsroj at cr;clu!<N#rs8EQ,qu?Im$ipM8!X])2#R^Y(!WN6$!"9#3!WW<,!!**#s7-'^rso&,
+qu?]jrWN<&!XDg+pA"[frr2rsrXJ`%q"Ogq!<NB#r;-BhqZ$Tp&-).trVlUt"98c4!so,3!:^(#
+!!*0%"9SW,#QOu."pFi#iVt"sq>9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~>
+bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o
+rqu`jrr<!$qZ$Bkqrdt_r<*-$!W`)ss8E9%s8Dutqu?Zkrs/K%rqcZo!!N9$!<N2nrri?$!<<3#
+!<)rsroj at cr;clu!<N#rs8EQ,qu?Im$ipM8!X])2#R^Y(!WN6$!"9#3!WW<,!!**#s7-'^rso&,
+qu?]jrWN<&!XDg+pA"[frr2rsrXJ`%q"Ogq!<NB#r;-BhqZ$Tp&-).trVlUt"98c4!so,3!:^(#
+!!*0%"9SW,#QOu."pFi#iVt"sq>9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~>
+dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p at eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_
+rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H<d!"9>;
+!YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf
+s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8<c+r:@T*9DeP]pURlH#Qt/1'FFp?rVlfq
+s8W&urTsQ7~>
+dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p at eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_
+rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H<d!"9>;
+!YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf
+s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8<c+r:@T*9DeP]pURlH#Qt/1'FFp?rVlfq
+s8W&urTsQ7~>
+dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p at eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_
+rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H<d!"9>;
+!YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf
+s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8<c+r:@T*9DeP]pURlH#Qt/1'FFp?rVlfq
+s8W&urTsQ7~>
+dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<`
+rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39
+!Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i
+r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5'
+qu6Tps8W&urTsQ7~>
+dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<`
+rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39
+!Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i
+r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5'
+qu6Tps8W&urTsQ7~>
+dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<`
+rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39
+!Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i
+r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5'
+qu6Tps8W&urTsQ7~>
+dJs1ErVm<*qtg<hs8N#ts8N#rrr1=F&,#JkpAP![r;QQbs7lTjqsj[jq=X^brquHIrs/,orq??f
+p&=1T"oSQ)!!3/ars/Q's8N&t!!3'!!<N2nrri?$!<<3#!<)rsroj at cr;clu!<Mrp&,c>(mfEap
+!<<Ahmd9-(md]QDmd8p2mKqnU!"Ao.s82choDegh"oni3$NU5#oDedg"T at lp&.8C:"TJ>up%eIa
+s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m!<E)tiW&rW$iL##p&=:d&HDaprr2d&s53/1jo52V
+rr2rtrr29aJ,~>
+dJs1ErVm<*qtg<hs8N#ts8N#rrr1=F&,#JkpAP![r;QQbs7lTjqsj[jq=X^brquHIrs/,orq??f
+p&=1T"oSQ)!!3/ars/Q's8N&t!!3'!!<N2nrri?$!<<3#!<)rsroj at cr;clu!<Mrp&,c>(mfEap
+!<<Ahmd9-(md]QDmd8p2mKqnU!"Ao.s82choDegh"oni3$NU5#oDedg"T at lp&.8C:"TJ>up%eIa
+s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m!<E)tiW&rW$iL##p&=:d&HDaprr2d&s53/1jo52V
+rr2rtrr29aJ,~>
+dJs1ErVm<*qtg<hs8N#ts8N#rrr1=F&,#JkpAP![r;QQbs7lTjqsj[jq=X^brquHIrs/,orq??f
+p&=1T"oSQ)!!3/ars/Q's8N&t!!3'!!<N2nrri?$!<<3#!<)rsroj at cr;clu!<Mrp&,c>(mfEap
+!<<Ahmd9-(md]QDmd8p2mKqnU!"Ao.s82choDegh"oni3$NU5#oDedg"T at lp&.8C:"TJ>up%eIa
+s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m!<E)tiW&rW$iL##p&=:d&HDaprr2d&s53/1jo52V
+rr2rtrr29aJ,~>
+d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG at N#57up
+r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st*
+#6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g
+mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH<h
+rqQHjrr)isrp9Z8~>
+d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG at N#57up
+r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st*
+#6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g
+mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH<h
+rqQHjrr)isrp9Z8~>
+d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG at N#57up
+r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st*
+#6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g
+mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH<h
+rqQHjrr)isrp9Z8~>
+dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r
+hu*NProj at cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja]
+"p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.!<Dfi
+rquclqZ$Tp"o%idrr2Ng!!X&@rposarpfm]rWi0%!!E9+!<1sW)uTa-rVl?cp&4n7!Wq00qtg3e
+qXXRYqY^<krojB4~>
+dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r
+hu*NProj at cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja]
+"p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.!<Dfi
+rquclqZ$Tp"o%idrr2Ng!!X&@rposarpfm]rWi0%!!E9+!<1sW)uTa-rVl?cp&4n7!Wq00qtg3e
+qXXRYqY^<krojB4~>
+dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r
+hu*NProj at cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja]
+"p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.!<Dfi
+rquclqZ$Tp"o%idrr2Ng!!X&@rposarpfm]rWi0%!!E9+!<1sW)uTa-rVl?cp&4n7!Wq00qtg3e
+qXXRYqY^<krojB4~>
+dJs4Fs8Duq%/\&d!<rT*q=XX_rVc]odJjaUpA+k+"Tl`_nFHJOrq$-Zrs&?/!"/u2#i>Ud#QOr&
+s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L
+#QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!<WW:!rVunq>L3i
+qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[!<WH,!W1jU)t<e*oD/=)`5fs.":G2?^rQKHrr2Th
+o_e[erojB4~>
+dJs4Fs8Duq%/\&d!<rT*q=XX_rVc]odJjaUpA+k+"Tl`_nFHJOrq$-Zrs&?/!"/u2#i>Ud#QOr&
+s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L
+#QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!<WW:!rVunq>L3i
+qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[!<WH,!W1jU)t<e*oD/=)`5fs.":G2?^rQKHrr2Th
+o_e[erojB4~>
+dJs4Fs8Duq%/\&d!<rT*q=XX_rVc]odJjaUpA+k+"Tl`_nFHJOrq$-Zrs&?/!"/u2#i>Ud#QOr&
+s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L
+#QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!<WW:!rVunq>L3i
+qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[!<WH,!W1jU)t<e*oD/=)`5fs.":G2?^rQKHrr2Th
+o_e[erojB4~>
+iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j
+s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!!
+!r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh
+s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1
+"9A>srqQKYs8W'&pAP-o!<i](rosI_rYbb0qYL,q:/t"d!<EE*!s&D+WNH$sqYg?jr;Q$^J,~>
+iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j
+s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!!
+!r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh
+s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1
+"9A>srqQKYs8W'&pAP-o!<i](rosI_rYbb0qYL,q:/t"d!<EE*!s&D+WNH$sqYg?jr;Q$^J,~>
+iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j
+s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!!
+!r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh
+s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1
+"9A>srqQKYs8W'&pAP-o!<i](rosI_rYbb0qYL,q:/t"d!<EE*!s&D+WNH$sqYg?jr;Q$^J,~>
+iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5 at rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj
+!<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl']
+"oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^<iqtp?k
+s8N#rrt,2'qX0^S!X&Q,rV-<hs76-fs8W'2s8Dflr;QKh#RCM;#&!c0rV6BXs8W'-s8;p*"9Jr,
+rr2lprr20^s8F);rV-<hC6XtZqI=8MB*JGA!X/^hT(r*Zrr;urrVl-_J,~>
+iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5 at rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj
+!<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl']
+"oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^<iqtp?k
+s8N#rrt,2'qX0^S!X&Q,rV-<hs76-fs8W'2s8Dflr;QKh#RCM;#&!c0rV6BXs8W'-s8;p*"9Jr,
+rr2lprr20^s8F);rV-<hC6XtZqI=8MB*JGA!X/^hT(r*Zrr;urrVl-_J,~>
+iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5 at rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj
+!<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl']
+"oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^<iqtp?k
+s8N#rrt,2'qX0^S!X&Q,rV-<hs76-fs8W'2s8Dflr;QKh#RCM;#&!c0rV6BXs8W'-s8;p*"9Jr,
+rr2lprr20^s8F);rV-<hC6XtZqI=8MB*JGA!X/^hT(r*Zrr;urrVl-_J,~>
+h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo
+qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$
+!!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t
+rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo
+m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~>
+h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo
+qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$
+!!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t
+rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo
+m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~>
+h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo
+qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$
+!!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t
+rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo
+m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~>
+iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!<E9'!=B8<"(_?)qtC!\qu$<dqYC-k
+rql`r!oEtZ!<<0"roa:cr;Zm"!!3)`rsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!'!rr;ur!<26_
+#Q+T&!!**!rql`qrX\c!rrE</"9e/fqt9gWrVc'^s8E6)!sJ`1C%_Dors/8q!rrN,#ke)m!WE#p
+s!dsFqYL-r$N^J3R/$URp&4UZrr<#ts8W)pr:fpWrr`B,$3gA%q"FR^li7"a&,#Z"!>GM<B)V]+
+r;HTnrpKgarYb\2p@\@Yqt10oBk[/5qY9uRP6;-mrVHBgk5Tr~>
+iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!<E9'!=B8<"(_?)qtC!\qu$<dqYC-k
+rql`r!oEtZ!<<0"roa:cr;Zm"!!3)`rsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!'!rr;ur!<26_
+#Q+T&!!**!rql`qrX\c!rrE</"9e/fqt9gWrVc'^s8E6)!sJ`1C%_Dors/8q!rrN,#ke)m!WE#p
+s!dsFqYL-r$N^J3R/$URp&4UZrr<#ts8W)pr:fpWrr`B,$3gA%q"FR^li7"a&,#Z"!>GM<B)V]+
+r;HTnrpKgarYb\2p@\@Yqt10oBk[/5qY9uRP6;-mrVHBgk5Tr~>
+iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!<E9'!=B8<"(_?)qtC!\qu$<dqYC-k
+rql`r!oEtZ!<<0"roa:cr;Zm"!!3)`rsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!'!rr;ur!<26_
+#Q+T&!!**!rql`qrX\c!rrE</"9e/fqt9gWrVc'^s8E6)!sJ`1C%_Dors/8q!rrN,#ke)m!WE#p
+s!dsFqYL-r$N^J3R/$URp&4UZrr<#ts8W)pr:fpWrr`B,$3gA%q"FR^li7"a&,#Z"!>GM<B)V]+
+r;HTnrpKgarYb\2p@\@Yqt10oBk[/5qY9uRP6;-mrVHBgk5Tr~>
+iW&oV!WDopq at NH%q#(!b:egul!!<9*!<iT)"TJJBrtkS2q>gQt!!!3.!u(`59`4kgp\t-fr;$0g
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir
+l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n
+s8Mlp./s/Bq>CR!#7(k<pAOmdpA4Xbs8W)us8MlhrVZNe!s&T.#5n;kq#'FWs8EQ'q>^[+!sf#-
+rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~>
+iW&oV!WDopq at NH%q#(!b:egul!!<9*!<iT)"TJJBrtkS2q>gQt!!!3.!u(`59`4kgp\t-fr;$0g
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir
+l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n
+s8Mlp./s/Bq>CR!#7(k<pAOmdpA4Xbs8W)us8MlhrVZNe!s&T.#5n;kq#'FWs8EQ'q>^[+!sf#-
+rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~>
+iW&oV!WDopq at NH%q#(!b:egul!!<9*!<iT)"TJJBrtkS2q>gQt!!!3.!u(`59`4kgp\t-fr;$0g
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir
+l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n
+s8Mlp./s/Bq>CR!#7(k<pAOmdpA4Xbs8W)us8MlhrVZNe!s&T.#5n;kq#'FWs8EQ'q>^[+!sf#-
+rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~>
+iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!<s#7!'C2Srql6ar;HHk
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rV?H_rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!
+rVl']#Q4](!!*-"rql`qrWN)f2\?&h!XJ>jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!<WB)#5nJt
+!W;oks!dsFrq?<m#mgY9q#13lr;?<err<#ts8W)qrU]@R1^=6e$jQV"r;H'^li7"a&,5tA#Qk)6
+!WDupr;HTnrpTjerr2lrrYb\+nGDVLrqld'rl,'Q2*Ug5p?__Uq>'mbk5Tr~>
+iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!<s#7!'C2Srql6ar;HHk
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rV?H_rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!
+rVl']#Q4](!!*-"rql`qrWN)f2\?&h!XJ>jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!<WB)#5nJt
+!W;oks!dsFrq?<m#mgY9q#13lr;?<err<#ts8W)qrU]@R1^=6e$jQV"r;H'^li7"a&,5tA#Qk)6
+!WDupr;HTnrpTjerr2lrrYb\+nGDVLrqld'rl,'Q2*Ug5p?__Uq>'mbk5Tr~>
+iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!<s#7!'C2Srql6ar;HHk
+!<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rV?H_rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!
+rVl']#Q4](!!*-"rql`qrWN)f2\?&h!XJ>jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!<WB)#5nJt
+!W;oks!dsFrq?<m#mgY9q#13lr;?<err<#ts8W)qrU]@R1^=6e$jQV"r;H'^li7"a&,5tA#Qk)6
+!WDupr;HTnrpTjerr2lrrYb\+nGDVLrqld'rl,'Q2*Ug5p?__Uq>'mbk5Tr~>
+h>\Ajqu$Hfr at 9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!<N9'!!36'!Y#,0*r>j7p](0drrE&r
+!!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3"
+!VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7<qu$Hns8N&urr2pH
+rr)]frWE9'$P)\+mJ["_rVQQns8N&urqlZmr::6u!=Ai-rqcBbr;>m\s8E9$rr)ou"9nl'rVulc
+s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~>
+h>\Ajqu$Hfr at 9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!<N9'!!36'!Y#,0*r>j7p](0drrE&r
+!!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3"
+!VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7<qu$Hns8N&urr2pH
+rr)]frWE9'$P)\+mJ["_rVQQns8N&urqlZmr::6u!=Ai-rqcBbr;>m\s8E9$rr)ou"9nl'rVulc
+s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~>
+h>\Ajqu$Hfr at 9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!<N9'!!36'!Y#,0*r>j7p](0drrE&r
+!!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3"
+!VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7<qu$Hns8N&urr2pH
+rr)]frWE9'$P)\+mJ["_rVQQns8N&urqlZmr::6u!=Ai-rqcBbr;>m\s8E9$rr)ou"9nl'rVulc
+s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~>
+iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!<E6%!6>*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h
+q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd
+quH`Zrr`H*!<N>us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt!<E,tr;?Qn
+rVZ]prr)lsrY"f4!<WE,!<26^rqH<err)lsrr2p/qt:!frW!-*!!`5rr;Q]jr9OC_rr;j'rr<6/
+!!WB$rVc`pmJeI1r;?Nmrqu]jrqH<erWWB"rqlZg#lt#1%d*TWrr)irrr)fpli2J~>
+iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!<E6%!6>*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h
+q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd
+quH`Zrr`H*!<N>us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt!<E,tr;?Qn
+rVZ]prr)lsrY"f4!<WE,!<26^rqH<err)lsrr2p/qt:!frW!-*!!`5rr;Q]jr9OC_rr;j'rr<6/
+!!WB$rVc`pmJeI1r;?Nmrqu]jrqH<erWWB"rqlZg#lt#1%d*TWrr)irrr)fpli2J~>
+iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!<E6%!6>*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h
+q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd
+quH`Zrr`H*!<N>us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt!<E,tr;?Qn
+rVZ]prr)lsrY"f4!<WE,!<26^rqH<err)lsrr2p/qt:!frW!-*!!`5rr;Q]jr9OC_rr;j'rr<6/
+!!WB$rVc`pmJeI1r;?Nmrqu]jrqH<erWWB"rqlZg#lt#1%d*TWrr)irrr)fpli2J~>
+nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNo<!<<6&$igS6%LE+<!!!H&s8DlnrVc`BrrrE%
+!!E9'p](O*"9IoTrr)ilrrE&r!!!)X!!30$!WN)`s8W')r;?]u!X&\kr;?Qj!rMoonbs'sq>C6f
+m/R+e!!`N'qXa^`s8W'/q"YI1!<E6%jR)O:qu$6fnGWmerV$3ipZ2\]":+u3qY:'qrVcg-!!EB!
+iVs/^#m(50!r_ffs8W)rruqC6rp^-n!!!*%m-a`AoD/Cbmf!"\rV>j>mK!:q!=]_8rqccrrVZNl
+s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg
+!<;]kr;-Ei)?9g>mJ-SWrVl![J,~>
+nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNo<!<<6&$igS6%LE+<!!!H&s8DlnrVc`BrrrE%
+!!E9'p](O*"9IoTrr)ilrrE&r!!!)X!!30$!WN)`s8W')r;?]u!X&\kr;?Qj!rMoonbs'sq>C6f
+m/R+e!!`N'qXa^`s8W'/q"YI1!<E6%jR)O:qu$6fnGWmerV$3ipZ2\]":+u3qY:'qrVcg-!!EB!
+iVs/^#m(50!r_ffs8W)rruqC6rp^-n!!!*%m-a`AoD/Cbmf!"\rV>j>mK!:q!=]_8rqccrrVZNl
+s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg
+!<;]kr;-Ei)?9g>mJ-SWrVl![J,~>
+nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNo<!<<6&$igS6%LE+<!!!H&s8DlnrVc`BrrrE%
+!!E9'p](O*"9IoTrr)ilrrE&r!!!)X!!30$!WN)`s8W')r;?]u!X&\kr;?Qj!rMoonbs'sq>C6f
+m/R+e!!`N'qXa^`s8W'/q"YI1!<E6%jR)O:qu$6fnGWmerV$3ipZ2\]":+u3qY:'qrVcg-!!EB!
+iVs/^#m(50!r_ffs8W)rruqC6rp^-n!!!*%m-a`AoD/Cbmf!"\rV>j>mK!:q!=]_8rqccrrVZNl
+s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg
+!<;]kr;-Ei)?9g>mJ-SWrVl![J,~>
+nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E
+"oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j
+!!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N'
+iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"<eJQQXe^hjma48]?!=B89!#>\9q>U?js8Mrms8W)u
+r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um
+e^_akcdMn(&HMA#r;ci[s*t~>
+nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E
+"oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j
+!!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N'
+iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"<eJQQXe^hjma48]?!=B89!#>\9q>U?js8Mrms8W)u
+r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um
+e^_akcdMn(&HMA#r;ci[s*t~>
+nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E
+"oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j
+!!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N'
+iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"<eJQQXe^hjma48]?!=B89!#>\9q>U?js8Mrms8W)u
+r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um
+e^_akcdMn(&HMA#r;ci[s*t~>
+mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY<drUK^_rVl`orW)oDrrrE%
+!!E9'pAbC$!!<T/rVQEj!<2lr!!;$X!W`9%rr23_s8E9!rW33'!so)/!r`6#!:^("!sf59!XK):
+#m(/2!ke%!s8W'/q"jkS":+u-!=o86!rr<+nGs.%!sJZ,!<<-%#S at 1@rU^!`rs/2r$Od%B"8q-X
+#Q>#:!!<6.qXje;rr)flp at eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/
+p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9)
+!s/r9!(0:D5sYDErVc`Ys*t~>
+mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY<drUK^_rVl`orW)oDrrrE%
+!!E9'pAbC$!!<T/rVQEj!<2lr!!;$X!W`9%rr23_s8E9!rW33'!so)/!r`6#!:^("!sf59!XK):
+#m(/2!ke%!s8W'/q"jkS":+u-!=o86!rr<+nGs.%!sJZ,!<<-%#S at 1@rU^!`rs/2r$Od%B"8q-X
+#Q>#:!!<6.qXje;rr)flp at eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/
+p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9)
+!s/r9!(0:D5sYDErVc`Ys*t~>
+mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY<drUK^_rVl`orW)oDrrrE%
+!!E9'pAbC$!!<T/rVQEj!<2lr!!;$X!W`9%rr23_s8E9!rW33'!so)/!r`6#!:^("!sf59!XK):
+#m(/2!ke%!s8W'/q"jkS":+u-!=o86!rr<+nGs.%!sJZ,!<<-%#S at 1@rU^!`rs/2r$Od%B"8q-X
+#Q>#:!!<6.qXje;rr)flp at eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/
+p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9)
+!s/r9!(0:D5sYDErVc`Ys*t~>
+mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0%
+!qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-r<!-'!<<,i!=9#4%0?\J$3LD7
+rWE9(SGi?bs8EPsq=XVl!s&K*":"o5!rrJo!=oD="TSW,!<`Q4!"E'.q"sme#Q+>u!sA]2r8IY\
+rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg<jqu6Kms8EQ-
+pA=[j!sSi2qX=CYq"ajRs8W'/qY^7n#QtYC"T%umrUg-gnc'[-s7uZis7lV#<b5TK=D(b>!ruM5
+?!LQ9rqHEdp\Xsg!<20]J,~>
+mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0%
+!qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-r<!-'!<<,i!=9#4%0?\J$3LD7
+rWE9(SGi?bs8EPsq=XVl!s&K*":"o5!rrJo!=oD="TSW,!<`Q4!"E'.q"sme#Q+>u!sA]2r8IY\
+rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg<jqu6Kms8EQ-
+pA=[j!sSi2qX=CYq"ajRs8W'/qY^7n#QtYC"T%umrUg-gnc'[-s7uZis7lV#<b5TK=D(b>!ruM5
+?!LQ9rqHEdp\Xsg!<20]J,~>
+mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0%
+!qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-r<!-'!<<,i!=9#4%0?\J$3LD7
+rWE9(SGi?bs8EPsq=XVl!s&K*":"o5!rrJo!=oD="TSW,!<`Q4!"E'.q"sme#Q+>u!sA]2r8IY\
+rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg<jqu6Kms8EQ-
+pA=[j!sSi2qX=CYq"ajRs8W'/qY^7n#QtYC"T%umrUg-gnc'[-s7uZis7lV#<b5TK=D(b>!ruM5
+?!LQ9rqHEdp\Xsg!<20]J,~>
+mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN%
+"98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG at 6G"T\H%!!3'!nGs.(!Xeu:!"'):
+!XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm
+#Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ&
+r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr
+qu-Nkq=jacp\agbrVl![J,~>
+mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN%
+"98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG at 6G"T\H%!!3'!nGs.(!Xeu:!"'):
+!XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm
+#Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ&
+r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr
+qu-Nkq=jacp\agbrVl![J,~>
+mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN%
+"98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG at 6G"T\H%!!3'!nGs.(!Xeu:!"'):
+!XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm
+#Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ&
+r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr
+qu-Nkq=jacp\agbrVl![J,~>
+nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p at A%Up\=U`rqucp!<(:E
+"oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd at NMMhCipPSd)%uH0t
+M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R at LNJdK.pA4FYq>U]mrJ->h
+Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ<dqt?&*MMmCPMN3RNM2%"HMN!FSLl;-*p%nR_rVH?hrqucm
+s8W'/p at S:ZMMI(FrqH<aq"=RYli7"a&,c;$s,)MiMYd)EqXaa\qsj\1r;Z`lrVQHkp\apas7Q6b
+MZF"[p\k$dpA+U_s7Z3_rVc`Ys*t~>
+nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p at A%Up\=U`rqucp!<(:E
+"oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd at NMMhCipPSd)%uH0t
+M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R at LNJdK.pA4FYq>U]mrJ->h
+Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ<dqt?&*MMmCPMN3RNM2%"HMN!FSLl;-*p%nR_rVH?hrqucm
+s8W'/p at S:ZMMI(FrqH<aq"=RYli7"a&,c;$s,)MiMYd)EqXaa\qsj\1r;Z`lrVQHkp\apas7Q6b
+MZF"[p\k$dpA+U_s7Z3_rVc`Ys*t~>
+nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p at A%Up\=U`rqucp!<(:E
+"oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd at NMMhCipPSd)%uH0t
+M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R at LNJdK.pA4FYq>U]mrJ->h
+Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ<dqt?&*MMmCPMN3RNM2%"HMN!FSLl;-*p%nR_rVH?hrqucm
+s8W'/p at S:ZMMI(FrqH<aq"=RYli7"a&,c;$s,)MiMYd)EqXaa\qsj\1r;Z`lrVQHkp\apas7Q6b
+MZF"[p\k$dpA+U_s7Z3_rVc`Ys*t~>
+nc&Ugrr3]2r;HTgqc at 8.!<WB+!WiE#rq?6hrW)s"'a+OF!sYBorV$0cr:^*^q=jaar;?Nlrm:ZK
+rr2s$!!;oqrrE9-!!NK!r;$?mrql`r!oEtZ!<<0"rp'O`rr;j'qZ$HirVccqrVZTlp]('g&,Z%q
+qu$?fq>:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h
+rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El
+rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d
+p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~>
+nc&Ugrr3]2r;HTgqc at 8.!<WB+!WiE#rq?6hrW)s"'a+OF!sYBorV$0cr:^*^q=jaar;?Nlrm:ZK
+rr2s$!!;oqrrE9-!!NK!r;$?mrql`r!oEtZ!<<0"rp'O`rr;j'qZ$HirVccqrVZTlp]('g&,Z%q
+qu$?fq>:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h
+rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El
+rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d
+p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~>
+nc&Ugrr3]2r;HTgqc at 8.!<WB+!WiE#rq?6hrW)s"'a+OF!sYBorV$0cr:^*^q=jaar;?Nlrm:ZK
+rr2s$!!;oqrrE9-!!NK!r;$?mrql`r!oEtZ!<<0"rp'O`rr;j'qZ$HirVccqrVZTlp]('g&,Z%q
+qu$?fq>:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h
+rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El
+rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d
+p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~>
+nc&Ugrr;rr"%5KW"8r6"!<rN)rr;oos82j.!<<9'"8r/srr)ips8Mlpqu$H;rrrE%!!E9'p](O"
+!!30$"8r/orrE&r!!!)o!"B88"98H(!!WE'#QOo-p](?r!!3)ulMpn`#lXf&s8N&trr;oqp]('g
+&-)M+rVliqs8Dups8W#srql`qrX]&.s8W#sr;Z]pqu?]os8DHerr**"s8)cqrVlfurVufjrr`6"
+rVulri;X#\r;Z`qs82Wls8Moq$3'l&s8;osrVuosrW3&srr3E+rVZ]ls8N&trVuiprr<#ts8N)u
+qZ$Tp!W2orrX/]'s8DrprVulsrp0U`rW`E$rr)lprr2p"rVulqnGiOf+T;3:r;HQirV?<hp&4O^
+rr)]jq=ORa5=Ik+s8;KerVl![J,~>
+nc&Ugrr;rr"%5KW"8r6"!<rN)rr;oos82j.!<<9'"8r/srr)ips8Mlpqu$H;rrrE%!!E9'p](O"
+!!30$"8r/orrE&r!!!)o!"B88"98H(!!WE'#QOo-p](?r!!3)ulMpn`#lXf&s8N&trr;oqp]('g
+&-)M+rVliqs8Dups8W#srql`qrX]&.s8W#sr;Z]pqu?]os8DHerr**"s8)cqrVlfurVufjrr`6"
+rVulri;X#\r;Z`qs82Wls8Moq$3'l&s8;osrVuosrW3&srr3E+rVZ]ls8N&trVuiprr<#ts8N)u
+qZ$Tp!W2orrX/]'s8DrprVulsrp0U`rW`E$rr)lprr2p"rVulqnGiOf+T;3:r;HQirV?<hp&4O^
+rr)]jq=ORa5=Ik+s8;KerVl![J,~>
+nc&Ugrr;rr"%5KW"8r6"!<rN)rr;oos82j.!<<9'"8r/srr)ips8Mlpqu$H;rrrE%!!E9'p](O"
+!!30$"8r/orrE&r!!!)o!"B88"98H(!!WE'#QOo-p](?r!!3)ulMpn`#lXf&s8N&trr;oqp]('g
+&-)M+rVliqs8Dups8W#srql`qrX]&.s8W#sr;Z]pqu?]os8DHerr**"s8)cqrVlfurVufjrr`6"
+rVulri;X#\r;Z`qs82Wls8Moq$3'l&s8;osrVuosrW3&srr3E+rVZ]ls8N&trVuiprr<#ts8N)u
+qZ$Tp!W2orrX/]'s8DrprVulsrp0U`rW`E$rr)lprr2p"rVulqnGiOf+T;3:r;HQirV?<hp&4O^
+rr)]jq=ORa5=Ik+s8;KerVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d)
+"p,#1!WW<-!<ro4!!i5u!W`9%rr.KKJcEIas8Dus*<#an/29":0.\b-3%HL20e4q0#lk85/H5;?
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d)
+"p,#1!WW<-!<ro4!!i5u!W`9%rr.KKJcEIas8Dus*<#an/29":0.\b-3%HL20e4q0#lk85/H5;?
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d)
+"p,#1!WW<-!<ro4!!i5u!W`9%rr.KKJcEIas8Dus*<#an/29":0.\b-3%HL20e4q0#lk85/H5;?
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4!
+$igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(!<O#:!!3E+"q:\D#kS&o
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4!
+$igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(!<O#:!!3E+"q:\D#kS&o
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4!
+$igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(!<O#:!!3E+"q:\D#kS&o
+rVl![J,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1<u
+!<<6$!!io3!!<W4!!!5u!!30$!WN(Ls+13crrN-!r;IZ6r:Td_!sAZ2qYU*Xr;Q]jrr2ier;Q0^
+rVc`Ys*t~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1<u
+!<<6$!!io3!!<W4!!!5u!!30$!WN(Ls+13crrN-!r;IZ6r:Td_!sAZ2qYU*Xr;Q]jrr2ier;Q0^
+rVc`Ys*t~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1<u
+!<<6$!!io3!!<W4!!!5u!!30$!WN(Ls+13crrN-!r;IZ6r:Td_!sAZ2qYU*Xr;Q]jrr2ier;Q0^
+rVc`Ys*t~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+
+$3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV?<hn,<4a
+kPp&~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+
+$3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV?<hn,<4a
+kPp&~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+
+$3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV?<hn,<4a
+kPp&~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g.
+!!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a
+r;?Nlroa<3~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g.
+!!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a
+r;?Nlroa<3~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g.
+!!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a
+r;?Nlroa<3~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d,
+!"eu&rqH<f$NLS=!!r<!!W`9%rr.KKJcEOc!<)oss8N&u)Ys=-r:KpXrW!'&#64n8qu$<cr:g'c
+p\k'ikPp&~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d,
+!"eu&rqH<f$NLS=!!r<!!W`9%rr.KKJcEOc!<)oss8N&u)Ys=-r:KpXrW!'&#64n8qu$<cr:g'c
+p\k'ikPp&~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d,
+!"eu&rqH<f$NLS=!!r<!!W`9%rr.KKJcEOc!<)oss8N&u)Ys=-r:KpXrW!'&#64n8qu$<cr:g'c
+p\k'ikPp&~>
+mf*IirVcZl!WE-#!WE*!!<rN)rr;uss82ls!ri90!r2fpq>L-gs8N&tqoA^?rr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg
+!Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~>
+mf*IirVcZl!WE-#!WE*!!<rN)rr;uss82ls!ri90!r2fpq>L-gs8N&tqoA^?rr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg
+!Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~>
+mf*IirVcZl!WE-#!WE*!!<rN)rr;uss82ls!ri90!r2fpq>L-gs8N&tqoA^?rr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg
+!Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~>
+mf*=er;QR@"9JZ1!<<E/!s8Q)rVlcorr<$"!!!*'!!3;tqu6?gq"jjds8DflaSuGCrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m
+HjB`T!<@k)rquTgrVZWos8N#_s*t~>
+mf*=er;QR@"9JZ1!<<E/!s8Q)rVlcorr<$"!!!*'!!3;tqu6?gq"jjds8DflaSuGCrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m
+HjB`T!<@k)rquTgrVZWos8N#_s*t~>
+mf*=er;QR@"9JZ1!<<E/!s8Q)rVlcorr<$"!!!*'!!3;tqu6?gq"jjds8DflaSuGCrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m
+HjB`T!<@k)rquTgrVZWos8N#_s*t~>
+nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!<N6)!!<2or;QQdq"ssdq>^31rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;?<e
+q"k*npA:)=!sJ`0!,;*%s8;fns8W)tlMlA~>
+nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!<N6)!!<2or;QQdq"ssdq>^31rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;?<e
+q"k*npA:)=!sJ`0!,;*%s8;fns8W)tlMlA~>
+nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!<N6)!!<2or;QQdq"ssdq>^31rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;?<e
+q"k*npA:)=!sJ`0!,;*%s8;fns8W)tlMlA~>
+nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^
+nbiOiqYL6^WWN\1!Wu<kqtp<is8W)tlMlA~>
+nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^
+nbiOiqYL6^WWN\1!Wu<kqtp<is8W)tlMlA~>
+nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^
+nbiOiqYL6^WWN\1!Wu<kqtp<is8W)tlMlA~>
+nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!<iZ-#mEBYrVQEanbr4^r:p01rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13bs8W)sr>tt0rqc?e
+p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~>
+nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!<iZ-#mEBYrVQEanbr4^r:p01rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13bs8W)sr>tt0rqc?e
+p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~>
+nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!<iZ-#mEBYrVQEanbr4^r:p01rrrE%!!E9'
+p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13bs8W)sr>tt0rqc?e
+p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~>
+nc&Ugrr3]2r;HTeq"E;A!<<W3!W`B%rqlTlqu@<4#R1D3#:C\op&4[crUU!fpW3@<rr2s$!!;oq
+#6=f)!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1n[7rqcR5o(;nOpAFOh
+!WMWbs7,j_blInH/+NB3rVuosrp'N6~>
+nc&Ugrr3]2r;HTeq"E;A!<<W3!W`B%rqlTlqu@<4#R1D3#:C\op&4[crUU!fpW3@<rr2s$!!;oq
+#6=f)!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1n[7rqcR5o(;nOpAFOh
+!WMWbs7,j_blInH/+NB3rVuosrp'N6~>
+nc&Ugrr3]2r;HTeq"E;A!<<W3!W`B%rqlTlqu@<4#R1D3#:C\op&4[crUU!fpW3@<rr2s$!!;oq
+#6=f)!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1n[7rqcR5o(;nOpAFOh
+!WMWbs7,j_blInH/+NB3rVuosrp'N6~>
+nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N)
+!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D%
+g`mV#ndXI'E[n*r;HZqrr23_J,~>
+nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N)
+!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D%
+g`mV#ndXI'E[n*r;HZqrr23_J,~>
+nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N)
+!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D%
+g`mV#ndXI'E[n*r;HZqrr23_J,~>
+mf*=er;QR at rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu
+!!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[
+!X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~>
+mf*=er;QR at rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu
+!!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[
+!X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~>
+mf*=er;QR at rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu
+!!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[
+!X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~>
+l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!<E0#!sAZ;!sI<0p&=gcr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d
+rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~>
+l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!<E0#!sAZ;!sI<0p&=gcr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d
+rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~>
+l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!<E0#!sAZ;!sI<0p&=gcr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d
+rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~>
+l2N=6s8W)rqu$B_qu$3cqtU!c$3:8<!!ET0"9SZ)!Wi?%&HW%;[f6%!r;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h
+63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~>
+l2N=6s8W)rqu$B_qu$3cqtU!c$3:8<!!ET0"9SZ)!Wi?%&HW%;[f6%!r;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h
+63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~>
+l2N=6s8W)rqu$B_qu$3cqtU!c$3:8<!!ET0"9SZ)!Wi?%&HW%;[f6%!r;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h
+63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~>
+k5PJ]r;HL5s7Z3YrqQEi!!<T/!=o55!s8Q(!Wi?/!!`Q0!;c]m!r`,tc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;-<hrVKYs
+s82Tho_SIarquWir;?NmkPp&~>
+k5PJ]r;HL5s7Z3YrqQEi!!<T/!=o55!s8Q(!Wi?/!!`Q0!;c]m!r`,tc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;-<hrVKYs
+s82Tho_SIarquWir;?NmkPp&~>
+k5PJ]r;HL5s7Z3YrqQEi!!<T/!=o55!s8Q(!Wi?/!!`Q0!;c]m!r`,tc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;-<hrVKYs
+s82Tho_SIarquWir;?NmkPp&~>
+k5PJ]r;QR7q"aU^pAY'`q/-E?!!<B/!WrN*!<WH+%KZ\9"p"N!quZirrltHHrr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1\L5rr2lrrWN,ts8Dlor=Jo+
+r:p6fp&"[crVZQjrVc`Xs*t~>
+k5PJ]r;QR7q"aU^pAY'`q/-E?!!<B/!WrN*!<WH+%KZ\9"p"N!quZirrltHHrr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1\L5rr2lrrWN,ts8Dlor=Jo+
+r:p6fp&"[crVZQjrVc`Xs*t~>
+k5PJ]r;QR7q"aU^pAY'`q/-E?!!<B/!WrN*!<WH+%KZ\9"p"N!quZirrltHHrr2s$!!;oq#6=f)
+!WW<%rqZQorql`r!qu["!<E/rs8Dusqu?]upAb?t!!3&trdk*#s1\L5rr2lrrWN,ts8Dlor=Jo+
+r:p6fp&"[crVZQjrVc`Xs*t~>
+k5PJ]r;HL;q#1!^s7c<Zs,R<k!sAZ-"9SZ*!s/K.#64i2#Pe2or;HWoc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj
+rVQTms8W'!s8M-[J,~>
+k5PJ]r;HL;q#1!^s7c<Zs,R<k!sAZ-"9SZ*!s/K.#64i2#Pe2or;HWoc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj
+rVQTms8W'!s8M-[J,~>
+k5PJ]r;HL;q#1!^s7c<Zs,R<k!sAZ-"9SZ*!s/K.#64i2#Pe2or;HWoc2RtHrr<0%!r)a#!<<*$
+!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj
+rVQTms8W'!s8M-[J,~>
+l2Lqds8W)rqu6L<s7cEhr;-$Ys8S^^'*A4:"U"l-!s/K,!s/T*"T.cfr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h
+qu6KmrVlis!<2'ZJ,~>
+l2Lqds8W)rqu6L<s7cEhr;-$Ys8S^^'*A4:"U"l-!s/K,!s/T*"T.cfr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h
+qu6KmrVlis!<2'ZJ,~>
+l2Lqds8W)rqu6L<s7cEhr;-$Ys8S^^'*A4:"U"l-!s/K,!s/T*"T.cfr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h
+qu6KmrVlis!<2'ZJ,~>
+l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i
+rr;rrs8N)ujSs`~>
+l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i
+rr;rrs8N)ujSs`~>
+l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a#
+!<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i
+rr;rrs8N)ujSs`~>
+l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?'
+!<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^<grr2*\!<2rs$NC)*p](9a
+s8)`orr;us#Q=N!q>1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^
+s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p
+s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~>
+l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?'
+!<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^<grr2*\!<2rs$NC)*p](9a
+s8)`orr;us#Q=N!q>1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^
+s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p
+s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~>
+l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?'
+!<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^<grr2*\!<2rs$NC)*p](9a
+s8)`orr;us#Q=N!q>1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^
+s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p
+s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~>
+g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu
+!W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q
+rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko
+qu?Zo"onT"q>L<ks8W&urVlfsrr)lsrWN,tr:'OWrrE&prs&K!rqcZlpA4ghrpTjerr)lsrWhok
+qtg<jr;QZp!<0;(J,~>
+g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu
+!W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q
+rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko
+qu?Zo"onT"q>L<ks8W&urVlfsrr)lsrWN,tr:'OWrrE&prs&K!rqcZlpA4ghrpTjerr)lsrWhok
+qtg<jr;QZp!<0;(J,~>
+g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu
+!W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q
+rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko
+qu?Zo"onT"q>L<ks8W&urVlfsrr)lsrWN,tr:'OWrrE&prs&K!rqcZlpA4ghrpTjerr)lsrWhok
+qtg<jr;QZp!<0;(J,~>
+f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u
+s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H<er;Z`p!;ZWn
+!rr#lk5PD\$NC#&o`+a`o_ndgrr;lp#4)9fs8)cpl2M:is8)Wlrr)NhrVlcnrqucks8W)ts8N!&
+o)AI^qu$Hkqu?Bh!WVfkrW3&brVZ`qqYpm$rVZTnrq-3dq>1'ls8N#brt#,-rr2ckrr2ripAY*k
+rVc`q!<';)J,~>
+f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u
+s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H<er;Z`p!;ZWn
+!rr#lk5PD\$NC#&o`+a`o_ndgrr;lp#4)9fs8)cpl2M:is8)Wlrr)NhrVlcnrqucks8W)ts8N!&
+o)AI^qu$Hkqu?Bh!WVfkrW3&brVZ`qqYpm$rVZTnrq-3dq>1'ls8N#brt#,-rr2ckrr2ripAY*k
+rVc`q!<';)J,~>
+f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u
+s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H<er;Z`p!;ZWn
+!rr#lk5PD\$NC#&o`+a`o_ndgrr;lp#4)9fs8)cpl2M:is8)Wlrr)NhrVlcnrqucks8W)ts8N!&
+o)AI^qu$Hkqu?Bh!WVfkrW3&brVZ`qqYpm$rVZTnrq-3dq>1'ls8N#brt#,-rr2ckrr2ripAY*k
+rVc`q!<';)J,~>
+f)GdMrVl^2q"a^ZrVl^3*<?<E!s&>srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t
+rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f at b!!WH)k5FiJ
+rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p at nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ
+r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1 at r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2
+gueD*qtp<irpKddrr2p.rVZWnqYoF0k2uI3rquWjrr2us[/YX~>
+f)GdMrVl^2q"a^ZrVl^3*<?<E!s&>srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t
+rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f at b!!WH)k5FiJ
+rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p at nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ
+r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1 at r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2
+gueD*qtp<irpKddrr2p.rVZWnqYoF0k2uI3rquWjrr2us[/YX~>
+f)GdMrVl^2q"a^ZrVl^3*<?<E!s&>srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t
+rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f at b!!WH)k5FiJ
+rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p at nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ
+r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1 at r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2
+gueD*qtp<irpKddrr2p.rVZWnqYoF0k2uI3rquWjrr2us[/YX~>
+f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq
+rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg
+nbVq%"p+i+!!3$"!<E2j!ri<!!Z1s[cMd/(rV??irr<#tr;6<j":5=VpAFpSrt#,#rquKgp?`"e
+!<UR?pAXmf!<2ut$i^,'r:]j]cH-%m!;clu!riB$!ri?2"hi7Zs82`kqu$Bjrql`qrXf#)qt0dn
+!XSkPp at n@Yr;HW`rrE&trtGA.r;QEb"pb53cN!e<q>:0ks8KD*J,~>
+f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq
+rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg
+nbVq%"p+i+!!3$"!<E2j!ri<!!Z1s[cMd/(rV??irr<#tr;6<j":5=VpAFpSrt#,#rquKgp?`"e
+!<UR?pAXmf!<2ut$i^,'r:]j]cH-%m!;clu!riB$!ri?2"hi7Zs82`kqu$Bjrql`qrXf#)qt0dn
+!XSkPp at n@Yr;HW`rrE&trtGA.r;QEb"pb53cN!e<q>:0ks8KD*J,~>
+f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq
+rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg
+nbVq%"p+i+!!3$"!<E2j!ri<!!Z1s[cMd/(rV??irr<#tr;6<j":5=VpAFpSrt#,#rquKgp?`"e
+!<UR?pAXmf!<2ut$i^,'r:]j]cH-%m!;clu!riB$!ri?2"hi7Zs82`kqu$Bjrql`qrXf#)qt0dn
+!XSkPp at n@Yr;HW`rrE&trtGA.r;QEb"pb53cN!e<q>:0ks8KD*J,~>
+g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1<p"TST(!<2olrrE&r
+!!!)q!!E<&!W;urrql`r!quZu!<<0!rr2Ee!<2ut$i^)#q6:A3!X/Q.!rW/u!;QZp!;lj+"9er3
+!s/K'"9Jf37fNDdrso&,r;-9cq61&(#n-e6!W<'#!<DWjrrDuu$N^D<!4;auq#9j`rr2p)rr)`p
+$3^\:r;6HWrt#&)r:p']o<e]*":,;2qY^0h&H;_0rr2lor;->i"Te].!s/?%rrMus$3:20"9Jh6
+s7c<`rqlfqrql`qrXf&+qu-<r#m:>8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~>
+g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1<p"TST(!<2olrrE&r
+!!!)q!!E<&!W;urrql`r!quZu!<<0!rr2Ee!<2ut$i^)#q6:A3!X/Q.!rW/u!;QZp!;lj+"9er3
+!s/K'"9Jf37fNDdrso&,r;-9cq61&(#n-e6!W<'#!<DWjrrDuu$N^D<!4;auq#9j`rr2p)rr)`p
+$3^\:r;6HWrt#&)r:p']o<e]*":,;2qY^0h&H;_0rr2lor;->i"Te].!s/?%rrMus$3:20"9Jh6
+s7c<`rqlfqrql`qrXf&+qu-<r#m:>8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~>
+g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1<p"TST(!<2olrrE&r
+!!!)q!!E<&!W;urrql`r!quZu!<<0!rr2Ee!<2ut$i^)#q6:A3!X/Q.!rW/u!;QZp!;lj+"9er3
+!s/K'"9Jf37fNDdrso&,r;-9cq61&(#n-e6!W<'#!<DWjrrDuu$N^D<!4;auq#9j`rr2p)rr)`p
+$3^\:r;6HWrt#&)r:p']o<e]*":,;2qY^0h&H;_0rr2lor;->i"Te].!s/?%rrMus$3:20"9Jh6
+s7c<`rqlfqrql`qrXf&+qu-<r#m:>8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~>
+g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]1<q"Tno/!WN#mrrE&r
+!!!)q!!iZ-"9&5srVZZm!!!)p!!NB'!WE#snGiOfs8NK+rVQEo!WrN*"pG82!ri<#!;QZp!<3*!
+!r`<2"pY>8!XSu5 at JKa!rVZX-rVZTfQj+$#!!iW+!<E6'!<E2h!WN-=!<NB-"Te`'r;Z`orr2rt
+rr)`j#m:V;"8;Tgl2M:nqYU-Yr;$C%!!!38r:^*_s8W',rVZTcq>^p(!sf&2!WE0#!W2p/!<N?*
+#6b83Sc&-Zr;HTnrqcX+rr)cmqXY="!"B81q>1!drpKddrr2p&r;-<ip&kO"rWiPur;QZprj)QS~>
+g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]1<q"Tno/!WN#mrrE&r
+!!!)q!!iZ-"9&5srVZZm!!!)p!!NB'!WE#snGiOfs8NK+rVQEo!WrN*"pG82!ri<#!;QZp!<3*!
+!r`<2"pY>8!XSu5 at JKa!rVZX-rVZTfQj+$#!!iW+!<E6'!<E2h!WN-=!<NB-"Te`'r;Z`orr2rt
+rr)`j#m:V;"8;Tgl2M:nqYU-Yr;$C%!!!38r:^*_s8W',rVZTcq>^p(!sf&2!WE0#!W2p/!<N?*
+#6b83Sc&-Zr;HTnrqcX+rr)cmqXY="!"B81q>1!drpKddrr2p&r;-<ip&kO"rWiPur;QZprj)QS~>
+g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]1<q"Tno/!WN#mrrE&r
+!!!)q!!iZ-"9&5srVZZm!!!)p!!NB'!WE#snGiOfs8NK+rVQEo!WrN*"pG82!ri<#!;QZp!<3*!
+!r`<2"pY>8!XSu5 at JKa!rVZX-rVZTfQj+$#!!iW+!<E6'!<E2h!WN-=!<NB-"Te`'r;Z`orr2rt
+rr)`j#m:V;"8;Tgl2M:nqYU-Yr;$C%!!!38r:^*_s8W',rVZTcq>^p(!sf&2!WE0#!W2p/!<N?*
+#6b83Sc&-Zr;HTnrqcX+rr)cmqXY="!"B81q>1!drpKddrr2p&r;-<ip&kO"rWiPur;QZprj)QS~>
+nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E
+"oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!<W5tq>L6j!!*6'!<_ro!r`,tnGiOf
+rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!<WLNrr)`nr;?Qor<W>o$igM;!<E<$GjK\d
+GBeCY$3C;6!Wn,Srr)corr3K-rVZO!"98K.qu$<jrr2os!<2Kf&,uV*r;HHk!<WQ,%!VRGr:^0j
+rZqI?r;20K!!E9-"UB6sFa&+RH$OLWGBj5o!WW6-!X8Dnrqu]nrVc`ps8W'.rVZ9e!!3?2#lji#
+rVlfarso&.rr2lmqYp3q#QY/2FoD:<rj)QS~>
+nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E
+"oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!<W5tq>L6j!!*6'!<_ro!r`,tnGiOf
+rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!<WLNrr)`nr;?Qor<W>o$igM;!<E<$GjK\d
+GBeCY$3C;6!Wn,Srr)corr3K-rVZO!"98K.qu$<jrr2os!<2Kf&,uV*r;HHk!<WQ,%!VRGr:^0j
+rZqI?r;20K!!E9-"UB6sFa&+RH$OLWGBj5o!WW6-!X8Dnrqu]nrVc`ps8W'.rVZ9e!!3?2#lji#
+rVlfarso&.rr2lmqYp3q#QY/2FoD:<rj)QS~>
+nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E
+"oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!<W5tq>L6j!!*6'!<_ro!r`,tnGiOf
+rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!<WLNrr)`nr;?Qor<W>o$igM;!<E<$GjK\d
+GBeCY$3C;6!Wn,Srr)corr3K-rVZO!"98K.qu$<jrr2os!<2Kf&,uV*r;HHk!<WQ,%!VRGr:^0j
+rZqI?r;20K!!E9-"UB6sFa&+RH$OLWGBj5o!WW6-!X8Dnrqu]nrVc`ps8W'.rVZ9e!!3?2#lji#
+rVlfarso&.rr2lmqYp3q#QY/2FoD:<rj)QS~>
+nc'C(s8W)rqtp<eq>C*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i,
+rW<Z8#RpS)qu6Hf#QY)3"9S_u!!*#_rt58/r=&`-#6g.fqtg0dr;HWoq#C9krr!9$q#-<U!sA]/
+!ri2srr2oss8EB(r;1(4!<WN/OcfV?!r`,tnGa'trVlZhQ3IKo!s/Q'rr)iqrVm?+rVZg*!<r`,
+qu?]qrVlfsrp]prqu?KiqY:!i#R1J8qu6NcrrrE#rVcd&r<*(`(B*^uqZ$Ejr;-0`qiHi#!!EQ2
+"EX;:rqucorr2lr$i^,&p\Y!u"pP>-rr2l^s8W$*s8;]lr<!$'!XS\srqufp!<0;(J,~>
+nc'C(s8W)rqtp<eq>C*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i,
+rW<Z8#RpS)qu6Hf#QY)3"9S_u!!*#_rt58/r=&`-#6g.fqtg0dr;HWoq#C9krr!9$q#-<U!sA]/
+!ri2srr2oss8EB(r;1(4!<WN/OcfV?!r`,tnGa'trVlZhQ3IKo!s/Q'rr)iqrVm?+rVZg*!<r`,
+qu?]qrVlfsrp]prqu?KiqY:!i#R1J8qu6NcrrrE#rVcd&r<*(`(B*^uqZ$Ejr;-0`qiHi#!!EQ2
+"EX;:rqucorr2lr$i^,&p\Y!u"pP>-rr2l^s8W$*s8;]lr<!$'!XS\srqufp!<0;(J,~>
+nc'C(s8W)rqtp<eq>C*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i,
+rW<Z8#RpS)qu6Hf#QY)3"9S_u!!*#_rt58/r=&`-#6g.fqtg0dr;HWoq#C9krr!9$q#-<U!sA]/
+!ri2srr2oss8EB(r;1(4!<WN/OcfV?!r`,tnGa'trVlZhQ3IKo!s/Q'rr)iqrVm?+rVZg*!<r`,
+qu?]qrVlfsrp]prqu?KiqY:!i#R1J8qu6NcrrrE#rVcd&r<*(`(B*^uqZ$Ejr;-0`qiHi#!!EQ2
+"EX;:rqucorr2lr$i^,&p\Y!u"pP>-rr2l^s8W$*s8;]lr<!$'!XS\srqufp!<0;(J,~>
+mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU<lrqla6!WW<*"9ef+
+#mU_>#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK%
+rqucqrr)j)rr)cl!<WB+!!N&mrVQ`qrr2Ee#lXc%r:p,g#Qao+s8E&trr)j,rquZi!X&N+$NL&(
+s8DoqrrE&frt#)'qtU*\r<!3,%KlM)s8DTi*<,p8r!<K-"Tk[sr;6-dp&G$frV$*_r;H0b"TeT,
+!X8Durqlrurr2rtrr)j-rr)clq#pp("U4c%rVZWnm/R+a$ig/#rquft#6P,/qY^<lrj2WT~>
+mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU<lrqla6!WW<*"9ef+
+#mU_>#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK%
+rqucqrr)j)rr)cl!<WB+!!N&mrVQ`qrr2Ee#lXc%r:p,g#Qao+s8E&trr)j,rquZi!X&N+$NL&(
+s8DoqrrE&frt#)'qtU*\r<!3,%KlM)s8DTi*<,p8r!<K-"Tk[sr;6-dp&G$frV$*_r;H0b"TeT,
+!X8Durqlrurr2rtrr)j-rr)clq#pp("U4c%rVZWnm/R+a$ig/#rquft#6P,/qY^<lrj2WT~>
+mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU<lrqla6!WW<*"9ef+
+#mU_>#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK%
+rqucqrr)j)rr)cl!<WB+!!N&mrVQ`qrr2Ee#lXc%r:p,g#Qao+s8E&trr)j,rquZi!X&N+$NL&(
+s8DoqrrE&frt#)'qtU*\r<!3,%KlM)s8DTi*<,p8r!<K-"Tk[sr;6-dp&G$frV$*_r;H0b"TeT,
+!X8Durqlrurr2rtrr)j-rr)clq#pp("U4c%rVZWnm/R+a$ig/#rquft#6P,/qY^<lrj2WT~>
+nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE)
+!!E92!WiH0!:p0dqY^@"!<iK)%eK`&rVul_s8W''r;m0/!<_ufq#:*hqu6Wo%0$%oo`5's!!30!
+rr)]n%0$5'r!!-*"9ef"qu6Qms8MNf$iU)"r;HWn#lt).!ri2srso&+qY:<q#m^W!q=ajer;Q]r
+rpTjsqt^$aqYL6n"p4o)q#C6`s!RgErB1Jg"U"i&qsjXap\OparVQKlq>'g_rkemF!<N>nrqu`n
+rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[br<rZ'q>U?n"Tei/o_\Oas8KD*J,~>
+nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE)
+!!E92!WiH0!:p0dqY^@"!<iK)%eK`&rVul_s8W''r;m0/!<_ufq#:*hqu6Wo%0$%oo`5's!!30!
+rr)]n%0$5'r!!-*"9ef"qu6Qms8MNf$iU)"r;HWn#lt).!ri2srso&+qY:<q#m^W!q=ajer;Q]r
+rpTjsqt^$aqYL6n"p4o)q#C6`s!RgErB1Jg"U"i&qsjXap\OparVQKlq>'g_rkemF!<N>nrqu`n
+rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[br<rZ'q>U?n"Tei/o_\Oas8KD*J,~>
+nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE)
+!!E92!WiH0!:p0dqY^@"!<iK)%eK`&rVul_s8W''r;m0/!<_ufq#:*hqu6Wo%0$%oo`5's!!30!
+rr)]n%0$5'r!!-*"9ef"qu6Qms8MNf$iU)"r;HWn#lt).!ri2srso&+qY:<q#m^W!q=ajer;Q]r
+rpTjsqt^$aqYL6n"p4o)q#C6`s!RgErB1Jg"U"i&qsjXap\OparVQKlq>'g_rkemF!<N>nrqu`n
+rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[br<rZ'q>U?n"Tei/o_\Oas8KD*J,~>
+nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu at T9!!*6'
+!!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf
+r;[$%!!*)urr)]ns8EB(quHcu!!30"q#C<lmf*drnGW+]p\"Ug!W`B%s8Mrr')qh+q>h$+&-)_0
+rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I at r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj
+#m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~>
+nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu at T9!!*6'
+!!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf
+r;[$%!!*)urr)]ns8EB(quHcu!!30"q#C<lmf*drnGW+]p\"Ug!W`B%s8Mrr')qh+q>h$+&-)_0
+rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I at r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj
+#m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~>
+nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu at T9!!*6'
+!!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf
+r;[$%!!*)urr)]ns8EB(quHcu!!30"q#C<lmf*drnGW+]p\"Ug!W`B%s8Mrr')qh+q>h$+&-)_0
+rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I at r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj
+#m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~>
+nc'F)s8W)rqtg0m!<r`6'b:-9rqH'anGiHkrrrE%!!E9&p](O-!!!3'!!3&ts8DotrVl]p(]j[<
+!!!0-!"K#0lh^VMrq??j$31J9!XJH"rW*)urVl<d!<2ors8E6(!!!H0kl1GKrrE&ss8W'-rV6Bh
+l3%1h!!*)us8Mio$i^,'"ooJF!s%ljs8)`bs8Vm)s8MNer=T)2!<W9#rr;urrt58/r9+4c!"TM1
+o`"abrr<#tnGa$uqYBpdr<sD@#7gk3rpKdXs!%I at r=T)A!W`,srTs:XrqQ3ep\sj[qtp-`rqug!
+$3:A#r;6Knr;ciqrt,2.r;GjM#64`0"9/8rqu$H\s8W$*s8;]l%LN==!!E#oqu-Qo[/YX~>
+nc'F)s8W)rqtg0m!<r`6'b:-9rqH'anGiHkrrrE%!!E9&p](O-!!!3'!!3&ts8DotrVl]p(]j[<
+!!!0-!"K#0lh^VMrq??j$31J9!XJH"rW*)urVl<d!<2ors8E6(!!!H0kl1GKrrE&ss8W'-rV6Bh
+l3%1h!!*)us8Mio$i^,'"ooJF!s%ljs8)`bs8Vm)s8MNer=T)2!<W9#rr;urrt58/r9+4c!"TM1
+o`"abrr<#tnGa$uqYBpdr<sD@#7gk3rpKdXs!%I at r=T)A!W`,srTs:XrqQ3ep\sj[qtp-`rqug!
+$3:A#r;6Knr;ciqrt,2.r;GjM#64`0"9/8rqu$H\s8W$*s8;]l%LN==!!E#oqu-Qo[/YX~>
+nc'F)s8W)rqtg0m!<r`6'b:-9rqH'anGiHkrrrE%!!E9&p](O-!!!3'!!3&ts8DotrVl]p(]j[<
+!!!0-!"K#0lh^VMrq??j$31J9!XJH"rW*)urVl<d!<2ors8E6(!!!H0kl1GKrrE&ss8W'-rV6Bh
+l3%1h!!*)us8Mio$i^,'"ooJF!s%ljs8)`bs8Vm)s8MNer=T)2!<W9#rr;urrt58/r9+4c!"TM1
+o`"abrr<#tnGa$uqYBpdr<sD@#7gk3rpKdXs!%I at r=T)A!W`,srTs:XrqQ3ep\sj[qtp-`rqug!
+$3:A#r;6Knr;ciqrt,2.r;GjM#64`0"9/8rqu$H\s8W$*s8;]l%LN==!!E#oqu-Qo[/YX~>
+nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6
+!WW3'!<N65#n[+,rquZes83*%$ig8/!!N&srW<,t!<)Ees8Moq#QOu-!s&?"s8MBbs8EQ&rV$3j
+!!*9)!<)rss8W)qs8W'!!!W?%"9SSqs8Vuqnc'$prq-3eq>L?o!<E9$q>Us(r;?Ks!rrE'o)AUb
+qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa
+qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~>
+nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6
+!WW3'!<N65#n[+,rquZes83*%$ig8/!!N&srW<,t!<)Ees8Moq#QOu-!s&?"s8MBbs8EQ&rV$3j
+!!*9)!<)rss8W)qs8W'!!!W?%"9SSqs8Vuqnc'$prq-3eq>L?o!<E9$q>Us(r;?Ks!rrE'o)AUb
+qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa
+qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~>
+nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6
+!WW3'!<N65#n[+,rquZes83*%$ig8/!!N&srW<,t!<)Ees8Moq#QOu-!s&?"s8MBbs8EQ&rV$3j
+!!*9)!<)rss8W)qs8W'!!!W?%"9SSqs8Vuqnc'$prq-3eq>L?o!<E9$q>Us(r;?Ks!rrE'o)AUb
+qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa
+qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~>
+nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/
+&c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos
+#Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs&<!r;ZQh$iU,,
+!WMop%fZD(rr<N8!XAMprVQKjrr2Bd%fZG%rVZa##64tsrqcWlp\u`As8Muor<WH6!Wi8rq"t'h
+q"+L_qZ$TjrVlKerVcd(!=&T)rqcKgr;Q]qrr*3'rr)cmrUg'irW!0,rVcThr;HT^rseo)s8)Qj
+!"Au0&HDV'rqlfqriuKR~>
+nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/
+&c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos
+#Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs&<!r;ZQh$iU,,
+!WMop%fZD(rr<N8!XAMprVQKjrr2Bd%fZG%rVZa##64tsrqcWlp\u`As8Muor<WH6!Wi8rq"t'h
+q"+L_qZ$TjrVlKerVcd(!=&T)rqcKgr;Q]qrr*3'rr)cmrUg'irW!0,rVcThr;HT^rseo)s8)Qj
+!"Au0&HDV'rqlfqriuKR~>
+nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/
+&c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos
+#Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs&<!r;ZQh$iU,,
+!WMop%fZD(rr<N8!XAMprVQKjrr2Bd%fZG%rVZa##64tsrqcWlp\u`As8Muor<WH6!Wi8rq"t'h
+q"+L_qZ$TjrVlKerVcd(!=&T)rqcKgr;Q]qrr*3'rr)cmrUg'irW!0,rVcThr;HT^rseo)s8)Qj
+!"Au0&HDV'rqlfqriuKR~>
+li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYp<eq>L9irVlfsrlP0FrVZTj!<NE/q#LEt'*A4=
+!<N2prqQBdqt^!b!!!'$#6"]7"Tecg49,0Pq>'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a
+s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrE&tr<EB0!"K%Iq>U<j
+!<2Kfs82io$hj6!!<rN)qu-KjrV?KnrXJQ!q>Bs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6)
+r:p<lrY5D3qu$Hlr;-d(!<`M<s7Q?gr:U!XrtGD0r;HWcqYpU"%KQ\3qZ$KkrVj&$J,~>
+li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYp<eq>L9irVlfsrlP0FrVZTj!<NE/q#LEt'*A4=
+!<N2prqQBdqt^!b!!!'$#6"]7"Tecg49,0Pq>'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a
+s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrE&tr<EB0!"K%Iq>U<j
+!<2Kfs82io$hj6!!<rN)qu-KjrV?KnrXJQ!q>Bs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6)
+r:p<lrY5D3qu$Hlr;-d(!<`M<s7Q?gr:U!XrtGD0r;HWcqYpU"%KQ\3qZ$KkrVj&$J,~>
+li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYp<eq>L9irVlfsrlP0FrVZTj!<NE/q#LEt'*A4=
+!<N2prqQBdqt^!b!!!'$#6"]7"Tecg49,0Pq>'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a
+s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrE&tr<EB0!"K%Iq>U<j
+!<2Kfs82io$hj6!!<rN)qu-KjrV?KnrXJQ!q>Bs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6)
+r:p<lrY5D3qu$Hlr;-d(!<`M<s7Q?gr:U!XrtGD0r;HWcqYpU"%KQ\3qZ$KkrVj&$J,~>
+li7"ar;lfr*WZ6 at r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk=
+X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q
+mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T)
+o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~>
+li7"ar;lfr*WZ6 at r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk=
+X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q
+mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T)
+o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~>
+li7"ar;lfr*WZ6 at r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk=
+X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q
+mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T)
+o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~>
+li7"ar;lfr('4L:r;HNeqZi at LPPP+QpAFa[r;HNgrqc`orl5!<rVuj!!W`?'q#DcL!XT26$O-\/
+r:Bd[rqcZj!sAZ-#QP,>!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>Ug$rVc_2#QXu1"8i&qrVl?e
+&,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j
+rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~>
+li7"ar;lfr('4L:r;HNeqZi at LPPP+QpAFa[r;HNgrqc`orl5!<rVuj!!W`?'q#DcL!XT26$O-\/
+r:Bd[rqcZj!sAZ-#QP,>!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>Ug$rVc_2#QXu1"8i&qrVl?e
+&,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j
+rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~>
+li7"ar;lfr('4L:r;HNeqZi at LPPP+QpAFa[r;HNgrqc`orl5!<rVuj!!W`?'q#DcL!XT26$O-\/
+r:Bd[rqcZj!sAZ-#QP,>!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>Ug$rVc_2#QXu1"8i&qrVl?e
+&,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j
+rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~>
+li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!<quQfsrW<-$q#D`E!X/W."Tnl)
+p&=a^rql]i!s8T-%0-D/K)bTBp at nL^rqZQbnGVhV#6b,2pA+[^rTjL`rW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrrE#rVHEnrW<0&qu6TprVl`b
+rX\r*rVHEl$NLG<!<;rorr2`n&,c;$r;-?_$O-\6"TS;nrql`qrr)j.rr)cmq>('n!s&Jtqtp<i
+rr)lsrY5D3r;?QbrUp'g"9no1q#(!aq=spYrX\r&qYC!cp&G@(!X&Z+q#(!g!<0A*J,~>
+li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!<quQfsrW<-$q#D`E!X/W."Tnl)
+p&=a^rql]i!s8T-%0-D/K)bTBp at nL^rqZQbnGVhV#6b,2pA+[^rTjL`rW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrrE#rVHEnrW<0&qu6TprVl`b
+rX\r*rVHEl$NLG<!<;rorr2`n&,c;$r;-?_$O-\6"TS;nrql`qrr)j.rr)cmq>('n!s&Jtqtp<i
+rr)lsrY5D3r;?QbrUp'g"9no1q#(!aq=spYrX\r&qYC!cp&G@(!X&Z+q#(!g!<0A*J,~>
+li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!<quQfsrW<-$q#D`E!X/W."Tnl)
+p&=a^rql]i!s8T-%0-D/K)bTBp at nL^rqZQbnGVhV#6b,2pA+[^rTjL`rW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrrrE#rVHEnrW<0&qu6TprVl`b
+rX\r*rVHEl$NLG<!<;rorr2`n&,c;$r;-?_$O-\6"TS;nrql`qrr)j.rr)cmq>('n!s&Jtqtp<i
+rr)lsrY5D3r;?QbrUp'g"9no1q#(!aq=spYrX\r&qYC!cp&G@(!X&Z+q#(!g!<0A*J,~>
+li7"ar;lfrrrEf6rVl`iqZ7!)"p+d<A,?,sqt9g`rqc`orl5!<r<3-"!s/Mu!%/!R$ipG7!XEN8
+r:L!^rquZo!X8l3"ot.krVHBcrqcWmq#0p\o*Ope#6P):p&"R_p?VbYrW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrsSi)rVQ0r!X&`/s8;cm!;uBd
+&,Q;'qYL:!$j6d(n,!%_r:p:$pAFsep%Sgu!X8Z$qt^*gs8Mus&H;V)qsXId"TS],q>'mbrVlcq
+s8E]3rqlWmqXsIX$jHq:"T at oep\FXSrX\l$rqlQ]pAbF&#Qg at mqtp6i!<0A*J,~>
+li7"ar;lfrrrEf6rVl`iqZ7!)"p+d<A,?,sqt9g`rqc`orl5!<r<3-"!s/Mu!%/!R$ipG7!XEN8
+r:L!^rquZo!X8l3"ot.krVHBcrqcWmq#0p\o*Ope#6P):p&"R_p?VbYrW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrsSi)rVQ0r!X&`/s8;cm!;uBd
+&,Q;'qYL:!$j6d(n,!%_r:p:$pAFsep%Sgu!X8Z$qt^*gs8Mus&H;V)qsXId"TS],q>'mbrVlcq
+s8E]3rqlWmqXsIX$jHq:"T at oep\FXSrX\l$rqlQ]pAbF&#Qg at mqtp6i!<0A*J,~>
+li7"ar;lfrrrEf6rVl`iqZ7!)"p+d<A,?,sqt9g`rqc`orl5!<r<3-"!s/Mu!%/!R$ipG7!XEN8
+r:L!^rquZo!X8l3"ot.krVHBcrqcWmq#0p\o*Ope#6P):p&"R_p?VbYrW`K)!<<3"s8M?as8N#t
+!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrsSi)rVQ0r!X&`/s8;cm!;uBd
+&,Q;'qYL:!$j6d(n,!%_r:p:$pAFsep%Sgu!X8Z$qt^*gs8Mus&H;V)qsXId"TS],q>'mbrVlcq
+s8E]3rqlWmqXsIX$jHq:"T at oep\FXSrX\l$rqlQ]pAbF&#Qg at mqtp6i!<0A*J,~>
+li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!<rZ,"9AW.
+o)8:Xo`+ac"T\f/!!fk*rr)NfqYC'gp\amcm8sM]!!`N4"T&/rqYKOXs8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>UHorr!0""onf.$VUBpr;QZp
+r:0^rr;Q<cr!*<0!!Dfdqt^6jq>V'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p
+qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~>
+li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!<rZ,"9AW.
+o)8:Xo`+ac"T\f/!!fk*rr)NfqYC'gp\amcm8sM]!!`N4"T&/rqYKOXs8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>UHorr!0""onf.$VUBpr;QZp
+r:0^rr;Q<cr!*<0!!Dfdqt^6jq>V'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p
+qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~>
+li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!<rZ,"9AW.
+o)8:Xo`+ac"T\f/!!fk*rr)NfqYC'gp\amcm8sM]!!`N4"T&/rqYKOXs8E6)!!*'$rVul_s8W)t
+rrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"q>UHorr!0""onf.$VUBpr;QZp
+r:0^rr;Q<cr!*<0!!Dfdqt^6jq>V'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p
+qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~>
+li7"ar;lis%06G/!r_rkrqZ^%!<NB&":>/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!<rN*
+!!!0`n,*(WpAOmi#ljr2aR]<'rquWdrVcKdr;-6b"Ujf""p5>3q#:6hli7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI!<NW/2)R9L
+1c.!DnM:V02E*BH$NL;;!;lWerV-=)r;-<hr;Q?l%fcb9rUKjarVlfqs8N#ss8N!*rU9Xa!WrN4
+!;ufprr<#t(]XL7s8Mros8;fipC%*2!XJc^1,LmD1@[.21-%*F2_m8p"9T28q#(0gXT*e~>
+li7"ar;lis%06G/!r_rkrqZ^%!<NB&":>/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!<rN*
+!!!0`n,*(WpAOmi#ljr2aR]<'rquWdrVcKdr;-6b"Ujf""p5>3q#:6hli7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI!<NW/2)R9L
+1c.!DnM:V02E*BH$NL;;!;lWerV-=)r;-<hr;Q?l%fcb9rUKjarVlfqs8N#ss8N!*rU9Xa!WrN4
+!;ufprr<#t(]XL7s8Mros8;fipC%*2!XJc^1,LmD1@[.21-%*F2_m8p"9T28q#(0gXT*e~>
+li7"ar;lis%06G/!r_rkrqZ^%!<NB&":>/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!<rN*
+!!!0`n,*(WpAOmi#ljr2aR]<'rquWdrVcKdr;-6b"Ujf""p5>3q#:6hli7"a#6Fl+!!<-!rp0Ua
+rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI!<NW/2)R9L
+1c.!DnM:V02E*BH$NL;;!;lWerV-=)r;-<hr;Q?l%fcb9rUKjarVlfqs8N#ss8N!*rU9Xa!WrN4
+!;ufprr<#t(]XL7s8Mros8;fipC%*2!XJc^1,LmD1@[.21-%*F2_m8p"9T28q#(0gXT*e~>
+nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn. at rq$-M
+!!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3"
+s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"
+q>^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu at 9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;&
+s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0!<rN5
+!!!<,$2jZ"riH-M~>
+nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn. at rq$-M
+!!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3"
+s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"
+q>^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu at 9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;&
+s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0!<rN5
+!!!<,$2jZ"riH-M~>
+nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn. at rq$-M
+!!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3"
+s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!!!*-"
+q>^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu at 9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;&
+s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0!<rN5
+!!!<,$2jZ"riH-M~>
+nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu at T8!!**#!<E6(!s/Q'q"ajeq#($erVlisrmC`N
+rpoaXp^.!-n,O+/#lFVtmJd(b"8MNeqZ$QprVlfqrs&Jhqu.-,$h+-$!<E-!n,!%\li7"a#Qau,
+!!<-!rr2lrs8E<&rqQNhr:p9^q>Um"s8MWp!!!$#!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"pAY[&p&b=)!"/u<&cr%7#R(P1!ri<!!"]/6!!<?(!!N?+"SViks8;lls8W$,qu$!`!Wi?1
+!!*#jr:K[^s8EW/r;QK_!!*'##QFJjqu-Nkrr2rtrr2j,nbVqX!WWu<!X&K6!!!3-nH''u"U"u2%
+0-b=$NgD.rW)ers*t~>
+nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu at T8!!**#!<E6(!s/Q'q"ajeq#($erVlisrmC`N
+rpoaXp^.!-n,O+/#lFVtmJd(b"8MNeqZ$QprVlfqrs&Jhqu.-,$h+-$!<E-!n,!%\li7"a#Qau,
+!!<-!rr2lrs8E<&rqQNhr:p9^q>Um"s8MWp!!!$#!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"pAY[&p&b=)!"/u<&cr%7#R(P1!ri<!!"]/6!!<?(!!N?+"SViks8;lls8W$,qu$!`!Wi?1
+!!*#jr:K[^s8EW/r;QK_!!*'##QFJjqu-Nkrr2rtrr2j,nbVqX!WWu<!X&K6!!!3-nH''u"U"u2%
+0-b=$NgD.rW)ers*t~>
+nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu at T8!!**#!<E6(!s/Q'q"ajeq#($erVlisrmC`N
+rpoaXp^.!-n,O+/#lFVtmJd(b"8MNeqZ$QprVlfqrs&Jhqu.-,$h+-$!<E-!n,!%\li7"a#Qau,
+!!<-!rr2lrs8E<&rqQNhr:p9^q>Um"s8MWp!!!$#!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"pAY[&p&b=)!"/u<&cr%7#R(P1!ri<!!"]/6!!<?(!!N?+"SViks8;lls8W$,qu$!`!Wi?1
+!!*#jr:K[^s8EW/r;QK_!!*'##QFJjqu-Nkrr2rtrr2j,nbVqX!WWu<!X&K6!!!3-nH''u"U"u2%
+0-b=$NgD.rW)ers*t~>
+nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u
+s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$
+rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!<E)urqQNnrWN?(!!*'#r;ZfrmJd1br;Q`t
+rVus"rqZTorX\u%rr)m"(]XgA!<<H1!!D]j%fut9!<<9'!<<0"pAXjdp\Fh!r;QEhrosLa"onl&
+qYgEcs8W'0rVZ?gr!ET0"p"N!rq??jq>C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!<<Q/!XJi0
+rVl]nXT*e~>
+nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u
+s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$
+rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!<E)urqQNnrWN?(!!*'#r;ZfrmJd1br;Q`t
+rVus"rqZTorX\u%rr)m"(]XgA!<<H1!!D]j%fut9!<<9'!<<0"pAXjdp\Fh!r;QEhrosLa"onl&
+qYgEcs8W'0rVZ?gr!ET0"p"N!rq??jq>C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!<<Q/!XJi0
+rVl]nXT*e~>
+nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u
+s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$
+rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!<E)urqQNnrWN?(!!*'#r;ZfrmJd1br;Q`t
+rVus"rqZTorX\u%rr)m"(]XgA!<<H1!!D]j%fut9!<<9'!<<0"pAXjdp\Fh!r;QEhrosLa"onl&
+qYgEcs8W'0rVZ?gr!ET0"p"N!rq??jq>C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!<<Q/!XJi0
+rVl]nXT*e~>
+mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W<!4!<N<'!<NQ.!=&W$r;-<grVlisrR(WMrqu][
+pb)mUnGjX;"Tf#2deE8`rUfpWqtBsdrqZ?`s7ZEhrlkQU%0-G!!!`QZr:g$`r;Gs]s8E9*!!*'$
+rVulrrr<#ts8<9#pAF at Vq#C6ks8Drsr=&H#r;6Tr!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq
+!!3'!!<N2qrt>>0r;6<d!<N?'!A-5_/N#@=/b^k40.nk//1`P.0.d8+#QOlXqYL*bq>C'g&,cD)
+qtg0l#m:>1pAO[Yr:U*irX\u*nbi at g"pkS<qYBmaq"jjerVd<"rVZKm!Xf,4/M\k2/MHWH%kfLh
+0/+sZ!!3]40`D"LpT4CF~>
+mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W<!4!<N<'!<NQ.!=&W$r;-<grVlisrR(WMrqu][
+pb)mUnGjX;"Tf#2deE8`rUfpWqtBsdrqZ?`s7ZEhrlkQU%0-G!!!`QZr:g$`r;Gs]s8E9*!!*'$
+rVulrrr<#ts8<9#pAF at Vq#C6ks8Drsr=&H#r;6Tr!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq
+!!3'!!<N2qrt>>0r;6<d!<N?'!A-5_/N#@=/b^k40.nk//1`P.0.d8+#QOlXqYL*bq>C'g&,cD)
+qtg0l#m:>1pAO[Yr:U*irX\u*nbi at g"pkS<qYBmaq"jjerVd<"rVZKm!Xf,4/M\k2/MHWH%kfLh
+0/+sZ!!3]40`D"LpT4CF~>
+mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W<!4!<N<'!<NQ.!=&W$r;-<grVlisrR(WMrqu][
+pb)mUnGjX;"Tf#2deE8`rUfpWqtBsdrqZ?`s7ZEhrlkQU%0-G!!!`QZr:g$`r;Gs]s8E9*!!*'$
+rVulrrr<#ts8<9#pAF at Vq#C6ks8Drsr=&H#r;6Tr!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq
+!!3'!!<N2qrt>>0r;6<d!<N?'!A-5_/N#@=/b^k40.nk//1`P.0.d8+#QOlXqYL*bq>C'g&,cD)
+qtg0l#m:>1pAO[Yr:U*irX\u*nbi at g"pkS<qYBmaq"jjerVd<"rVZKm!Xf,4/M\k2/MHWH%kfLh
+0/+sZ!!3]40`D"LpT4CF~>
+mf*=erVl^+rUg'gp&4g^q"OYUp at nObs82j!!<<-$r<!!"#Qb,4#mLG0nc&Od!<1:D#Q=PkqY:$q
+!V$.3!<ii5"9Z+4r:p-dq!\1Ur;?3dp\Y!b\$lMC!=8i6nGie$rU]mVr;?<Ts8W''!WW6$!r`/u
+rr3K-rVZQhrVZQjo_SOarr;rrs8<B(rql<q"98K(!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;6']qum-*!X&Jmq#C'^rqcHis8<]3rVcZkqt^-bqZ$[!"9eQ!q>C9ko_JLt
+r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_ at o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu<c
+&,lM)qu?Nu"9ei3rr)imr2fpK~>
+mf*=erVl^+rUg'gp&4g^q"OYUp at nObs82j!!<<-$r<!!"#Qb,4#mLG0nc&Od!<1:D#Q=PkqY:$q
+!V$.3!<ii5"9Z+4r:p-dq!\1Ur;?3dp\Y!b\$lMC!=8i6nGie$rU]mVr;?<Ts8W''!WW6$!r`/u
+rr3K-rVZQhrVZQjo_SOarr;rrs8<B(rql<q"98K(!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;6']qum-*!X&Jmq#C'^rqcHis8<]3rVcZkqt^-bqZ$[!"9eQ!q>C9ko_JLt
+r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_ at o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu<c
+&,lM)qu?Nu"9ei3rr)imr2fpK~>
+mf*=erVl^+rUg'gp&4g^q"OYUp at nObs82j!!<<-$r<!!"#Qb,4#mLG0nc&Od!<1:D#Q=PkqY:$q
+!V$.3!<ii5"9Z+4r:p-dq!\1Ur;?3dp\Y!b\$lMC!=8i6nGie$rU]mVr;?<Ts8W''!WW6$!r`/u
+rr3K-rVZQhrVZQjo_SOarr;rrs8<B(rql<q"98K(!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;6']qum-*!X&Jmq#C'^rqcHis8<]3rVcZkqt^-bqZ$[!"9eQ!q>C9ko_JLt
+r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_ at o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu<c
+&,lM)qu?Nu"9ei3rr)imr2fpK~>
+mf3=ds8<Q-qY9s_q"sd_r;HB^rV60fs82is!WE)u!<<-!!=fG;":bV6qu6QlrVlisrmC`Nqt'db
+n,!@nnGjX6$31>8!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$
+!r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;66ep]^g+":(Xoq"XU^qY0gar;I?-qtg3ar:g?p"p+r'qtg*dqu-?j&,uJ)
+s7u['!!<B-qYU$_r:U*irXo,,qtTtm"UP/4!quQ^p]'paq>V!)rV?0e!<E?+!1s)erVQN_r=Ac%
+r;6Ni#6Ou2!<)lqrqWYqJ,~>
+mf3=ds8<Q-qY9s_q"sd_r;HB^rV60fs82is!WE)u!<<-!!=fG;":bV6qu6QlrVlisrmC`Nqt'db
+n,!@nnGjX6$31>8!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$
+!r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;66ep]^g+":(Xoq"XU^qY0gar;I?-qtg3ar:g?p"p+r'qtg*dqu-?j&,uJ)
+s7u['!!<B-qYU$_r:U*irXo,,qtTtm"UP/4!quQ^p]'paq>V!)rV?0e!<E?+!1s)erVQN_r=Ac%
+r;6Ni#6Ou2!<)lqrqWYqJ,~>
+mf3=ds8<Q-qY9s_q"sd_r;HB^rV60fs82is!WE)u!<<-!!=fG;":bV6qu6QlrVlisrmC`Nqt'db
+n,!@nnGjX6$31>8!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$
+!r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<</us8W)crrE#qrr<*!
+!!*-"rr2utrVmN/r;66ep]^g+":(Xoq"XU^qY0gar;I?-qtg3ar:g?p"p+r'qtg*dqu-?j&,uJ)
+s7u['!!<B-qYU$_r:U*irXo,,qtTtm"UP/4!quQ^p]'paq>V!)rV?0e!<E?+!1s)erVQN_r=Ac%
+r;6Ni#6Ou2!<)lqrqWYqJ,~>
+mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2
+"o/5q!"&c<!WW9(#QOj]M#R;Oq at EW$r:ouIKF%Y\"98T-"9\H"q#LVBqY'IZrqbs\s8E6)!!*'$
+rVulrs8W'!rVZZl$N9aVLP^hBLPUeDre_,>M2I)j!!!'$!<)rsq#CBn"Te])!<</us8W)crrE#q
+rr<*!!!*-"rr2utrVmK.qtfp_r!EQ8!!NMus7H0bq"F[drX&Q$qYC'dq"b$prW3;ur:g6hs8;Zl%
+efr&p5&tX!"K#*r;$Bip&G'k&cMY&o_JCf$igS9p at S:Us8)WgrsJ`(s7ZEn!WW?)!ri&tr;Q6b&
+,uA$p\sjn"9AQ)q>C3ir2fpK~>
+mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2
+"o/5q!"&c<!WW9(#QOj]M#R;Oq at EW$r:ouIKF%Y\"98T-"9\H"q#LVBqY'IZrqbs\s8E6)!!*'$
+rVulrs8W'!rVZZl$N9aVLP^hBLPUeDre_,>M2I)j!!!'$!<)rsq#CBn"Te])!<</us8W)crrE#q
+rr<*!!!*-"rr2utrVmK.qtfp_r!EQ8!!NMus7H0bq"F[drX&Q$qYC'dq"b$prW3;ur:g6hs8;Zl%
+efr&p5&tX!"K#*r;$Bip&G'k&cMY&o_JCf$igS9p at S:Us8)WgrsJ`(s7ZEn!WW?)!ri&tr;Q6b&
+,uA$p\sjn"9AQ)q>C3ir2fpK~>
+mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2
+"o/5q!"&c<!WW9(#QOj]M#R;Oq at EW$r:ouIKF%Y\"98T-"9\H"q#LVBqY'IZrqbs\s8E6)!!*'$
+rVulrs8W'!rVZZl$N9aVLP^hBLPUeDre_,>M2I)j!!!'$!<)rsq#CBn"Te])!<</us8W)crrE#q
+rr<*!!!*-"rr2utrVmK.qtfp_r!EQ8!!NMus7H0bq"F[drX&Q$qYC'dq"b$prW3;ur:g6hs8;Zl%
+efr&p5&tX!"K#*r;$Bip&G'k&cMY&o_JCf$igS9p at S:Us8)WgrsJ`(s7ZEn!WW?)!ri&tr;Q6b&
+,uA$p\sjn"9AQ)q>C3ir2fpK~>
+m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n
+!<WB("pP/2q#DK<!!3-#!rr<&!=!L`Ec,o<Df9Z8#lt,/!WW3(!!!)q!"9&6!!<3$"T85jr;HKV
+s8W'+!WW6$!r`/us8N#trVd&qrVgd?!!*9&!<*#u!ri?&!rW*'"9A?!rVu]is8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N3!rrE&srt>;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ.
+#OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<<Q0!;66d
+s8Mio!r`,trr<#t&,#o!r;LXD"9Ac/q>U-br2fpK~>
+m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n
+!<WB("pP/2q#DK<!!3-#!rr<&!=!L`Ec,o<Df9Z8#lt,/!WW3(!!!)q!"9&6!!<3$"T85jr;HKV
+s8W'+!WW6$!r`/us8N#trVd&qrVgd?!!*9&!<*#u!ri?&!rW*'"9A?!rVu]is8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N3!rrE&srt>;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ.
+#OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<<Q0!;66d
+s8Mio!r`,trr<#t&,#o!r;LXD"9Ac/q>U-br2fpK~>
+m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n
+!<WB("pP/2q#DK<!!3-#!rr<&!=!L`Ec,o<Df9Z8#lt,/!WW3(!!!)q!"9&6!!<3$"T85jr;HKV
+s8W'+!WW6$!r`/us8N#trVd&qrVgd?!!*9&!<*#u!ri?&!rW*'"9A?!rVu]is8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N3!rrE&srt>;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ.
+#OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<<Q0!;66d
+s8Mio!r`,trr<#t&,#o!r;LXD"9Ac/q>U-br2fpK~>
+l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!<i`/"o\Yo!!<6("9eN%rr`?)
+!V$-r":5)/"Tnh%rVc`n!<26_s8E`7!!*'$rVulrr;?QnrVZWhrqlg"#knB!!ri<#!!`Q+rVHNl
+q"ages8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop')qk.q>To]"U>&0!W;l^rVHEjoDeji&,#nt
+!=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi
+V?-`'%1r((rV-<errW/urr2rtrX\hrq=+Ca#6Y;?$gdQ_r;E_sJ,~>
+l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!<i`/"o\Yo!!<6("9eN%rr`?)
+!V$-r":5)/"Tnh%rVc`n!<26_s8E`7!!*'$rVulrr;?QnrVZWhrqlg"#knB!!ri<#!!`Q+rVHNl
+q"ages8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop')qk.q>To]"U>&0!W;l^rVHEjoDeji&,#nt
+!=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi
+V?-`'%1r((rV-<errW/urr2rtrX\hrq=+Ca#6Y;?$gdQ_r;E_sJ,~>
+l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!<i`/"o\Yo!!<6("9eN%rr`?)
+!V$-r":5)/"Tnh%rVc`n!<26_s8E`7!!*'$rVulrr;?QnrVZWhrqlg"#knB!!ri<#!!`Q+rVHNl
+q"ages8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop')qk.q>To]"U>&0!W;l^rVHEjoDeji&,#nt
+!=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi
+V?-`'%1r((rV-<errW/urr2rtrX\hrq=+Ca#6Y;?$gdQ_r;E_sJ,~>
+l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!<N?+!s/N+
+!s/N+"9S]+nGj"'!X/Q/!X8AurVZTlrosI_rYGV9!<<3"s8N#rrVlfoqu$6`r;m!&!<W&srrMrr
+"pY&'o_e[cqu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcQloD/Lj!rr?$qtU3bq>0^_
+s8EQ,roFXp"To)3r;$<iq>C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X
+s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~>
+l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!<N?+!s/N+
+!s/N+"9S]+nGj"'!X/Q/!X8AurVZTlrosI_rYGV9!<<3"s8N#rrVlfoqu$6`r;m!&!<W&srrMrr
+"pY&'o_e[cqu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcQloD/Lj!rr?$qtU3bq>0^_
+s8EQ,roFXp"To)3r;$<iq>C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X
+s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~>
+l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!<N?+!s/N+
+!s/N+"9S]+nGj"'!X/Q/!X8AurVZTlrosI_rYGV9!<<3"s8N#rrVlfoqu$6`r;m!&!<W&srrMrr
+"pY&'o_e[cqu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcQloD/Lj!rr?$qtU3bq>0^_
+s8EQ,roFXp"To)3r;$<iq>C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X
+s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~>
+l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rr<?*"Tn`)$Le#q!W3'""T/?%
+!Up'p!=9&4"p!9Rrr)cqrosI_rY>P8!<<3"s8N&trr<#rqu$<hq?6j#$MXW"!W<!'"jm/Go)A[[
+qu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c
+!!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71 at P2Ap&4jbrt"r)
+p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ<fXT*e~>
+l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rr<?*"Tn`)$Le#q!W3'""T/?%
+!Up'p!=9&4"p!9Rrr)cqrosI_rY>P8!<<3"s8N&trr<#rqu$<hq?6j#$MXW"!W<!'"jm/Go)A[[
+qu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c
+!!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71 at P2Ap&4jbrt"r)
+p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ<fXT*e~>
+l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rr<?*"Tn`)$Le#q!W3'""T/?%
+!Up'p!=9&4"p!9Rrr)cqrosI_rY>P8!<<3"s8N&trr<#rqu$<hq?6j#$MXW"!W<!'"jm/Go)A[[
+qu?]q"Te])!<</us8W)crrE#qrr<*!!!*-"q>V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c
+!!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71 at P2Ap&4jbrt"r)
+p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ<fXT*e~>
+l2M=oq>L?Ur:g$cp at dqRp@S at aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/
+!WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU
+q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrt>>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$
+!!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r
+rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~>
+l2M=oq>L?Ur:g$cp at dqRp@S at aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/
+!WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU
+q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrt>>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$
+!!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r
+rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~>
+l2M=oq>L?Ur:g$cp at dqRp@S at aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/
+!WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU
+q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qrt>>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$
+!!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r
+rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~>
+l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1 at lo!WN/u!WN0"
+!U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0'
+!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_
+o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0-
+!=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~>
+l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1 at lo!WN/u!WN0"
+!U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0'
+!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_
+o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0-
+!=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~>
+l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1 at lo!WN/u!WN0"
+!U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0'
+!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_
+o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0-
+!=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~>
+l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n
+"U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?(
+!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5 at V#6t80mf)qV
+n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@
+!!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~>
+l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n
+"U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?(
+!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5 at V#6t80mf)qV
+n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@
+!!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~>
+l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n
+"U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?(
+!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5 at V#6t80mf)qV
+n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@
+!!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~>
+nc/Xgrr<#t(B=.&r;+ at P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG*
+qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp
+r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp
+q=sda#6P#0!<2`hrV6<crrE&ts8N!/r:p<u!WWQ.rqQ3crVl]orr)j0rVQHiqt^0k"9\])p&4 at T
+r;$3]rt>;.r;PdWqu$Qr!<N;pp\t'arqZR)rqZNmqYC-k!!NE.qtL-dq#;*.s8W)srVZKgqu6]t
+!snu/qYL3hri?'L~>
+nc/Xgrr<#t(B=.&r;+ at P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG*
+qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp
+r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp
+q=sda#6P#0!<2`hrV6<crrE&ts8N!/r:p<u!WWQ.rqQ3crVl]orr)j0rVQHiqt^0k"9\])p&4 at T
+r;$3]rt>;.r;PdWqu$Qr!<N;pp\t'arqZR)rqZNmqYC-k!!NE.qtL-dq#;*.s8W)srVZKgqu6]t
+!snu/qYL3hri?'L~>
+nc/Xgrr<#t(B=.&r;+ at P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG*
+qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp
+r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp
+q=sda#6P#0!<2`hrV6<crrE&ts8N!/r:p<u!WWQ.rqQ3crVl]orr)j0rVQHiqt^0k"9\])p&4 at T
+r;$3]rt>;.r;PdWqu$Qr!<N;pp\t'arqZR)rqZNmqYC-k!!NE.qtL-dq#;*.s8W)srVZKgqu6]t
+!snu/qYL3hri?'L~>
+nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&?
+rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g
+rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t
+qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a
+!!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~>
+nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&?
+rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g
+rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t
+qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a
+!!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~>
+nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&?
+rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g
+rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t
+qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a
+!!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~>
+nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$<n#R186"p=r-#m()3!Wm.Nqu69pqY^9gr;Q`rrlP0?
+p&=dp"T\]4"9\l.":,%d!"T)1"Tnf2"U+r.BD28oq"`tMs8E9*!!*'$rVulrrr3-#rVQHgrquco
+!<2]lr;Q]os8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMoprr*H,qtU0i!X\r3#Q4Gsrr)ik
+rrE&ts8W$'s8)Bp"9\u4s8DisrVlfnrrE&tr=8DtquHs%"9nStr;-BirqZQorr)j0rquZiq"jjb
+"98H)".&KPqYL-crt"u+qYpBhp]L['!XAZ%r;HEj!<2uts8<N/pAXsa!!WW2"T&#lnGiI]XT*e~>
+nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$<n#R186"p=r-#m()3!Wm.Nqu69pqY^9gr;Q`rrlP0?
+p&=dp"T\]4"9\l.":,%d!"T)1"Tnf2"U+r.BD28oq"`tMs8E9*!!*'$rVulrrr3-#rVQHgrquco
+!<2]lr;Q]os8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMoprr*H,qtU0i!X\r3#Q4Gsrr)ik
+rrE&ts8W$'s8)Bp"9\u4s8DisrVlfnrrE&tr=8DtquHs%"9nStr;-BirqZQorr)j0rquZiq"jjb
+"98H)".&KPqYL-crt"u+qYpBhp]L['!XAZ%r;HEj!<2uts8<N/pAXsa!!WW2"T&#lnGiI]XT*e~>
+nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$<n#R186"p=r-#m()3!Wm.Nqu69pqY^9gr;Q`rrlP0?
+p&=dp"T\]4"9\l.":,%d!"T)1"Tnf2"U+r.BD28oq"`tMs8E9*!!*'$rVulrrr3-#rVQHgrquco
+!<2]lr;Q]os8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMoprr*H,qtU0i!X\r3#Q4Gsrr)ik
+rrE&ts8W$'s8)Bp"9\u4s8DisrVlfnrrE&tr=8DtquHs%"9nStr;-BirqZQorr)j0rquZiq"jjb
+"98H)".&KPqYL-crt"u+qYpBhp]L['!XAZ%r;HEj!<2uts8<N/pAXsa!!WW2"T&#lnGiI]XT*e~>
+nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC
+q=aH4!t5D;#6b)5!<N>]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh
+s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N!-r;66eq>q'+!=AVtrVu`grrE&trsnu*
+s7l<k"pbJ;s82`mrVc`nrt>>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq
+q>'p`rt#&-qu?Tkq?-s'#6Fl&qu-<i!<2ut')__.rqZKd"onW-"SqrpoDALcXT*e~>
+nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC
+q=aH4!t5D;#6b)5!<N>]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh
+s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N!-r;66eq>q'+!=AVtrVu`grrE&trsnu*
+s7l<k"pbJ;s82`mrVc`nrt>>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq
+q>'p`rt#&-qu?Tkq?-s'#6Fl&qu-<i!<2ut')__.rqZKd"onW-"SqrpoDALcXT*e~>
+nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC
+q=aH4!t5D;#6b)5!<N>]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh
+s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N!-r;66eq>q'+!=AVtrVu`grrE&trsnu*
+s7l<k"pbJ;s82`mrVc`nrt>>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq
+q>'p`rt#&-qu?Tkq?-s'#6Fl&qu-<i!<2ut')__.rqZKd"onW-"SqrpoDALcXT*e~>
+nc/Xg#ljo(rr)cr!XAW*!<E<%!#u%>s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC
+rqH6aRLK6-!=8c/!Wh3Z%g<(>!!<H+!L`TVp&"7Wp#H)PrWiQ*!<<3"s8N#qs8)`bs8N#hs8W'%
+!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N#tr!`B"qZ7$0!sN?6rVl`hrt>>2s8Mros8)Hl'`ngK
+q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl
+s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~>
+nc/Xg#ljo(rr)cr!XAW*!<E<%!#u%>s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC
+rqH6aRLK6-!=8c/!Wh3Z%g<(>!!<H+!L`TVp&"7Wp#H)PrWiQ*!<<3"s8N#qs8)`bs8N#hs8W'%
+!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N#tr!`B"qZ7$0!sN?6rVl`hrt>>2s8Mros8)Hl'`ngK
+q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl
+s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~>
+nc/Xg#ljo(rr)cr!XAW*!<E<%!#u%>s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC
+rqH6aRLK6-!=8c/!Wh3Z%g<(>!!<H+!L`TVp&"7Wp#H)PrWiQ*!<<3"s8N#qs8)`bs8N#hs8W'%
+!W`9%!!3#ts8MEc!<)iq!!3'!!<N2qs8N#tr!`B"qZ7$0!sN?6rVl`hrt>>2s8Mros8)Hl'`ngK
+q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl
+s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~>
+nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF
+s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9%
+!!3#ts8MEc!<)iq!!3'!!<N2nrt"o'qYL3m!<iZ/#5J,orr2]m'`S.4rqlTls763t"pP/+q>0sc
+rVlZn')qk.qYU-j!=B2=#P at rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=%
+!"&`)qu$6h(B4 at 6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~>
+nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF
+s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9%
+!!3#ts8MEc!<)iq!!3'!!<N2nrt"o'qYL3m!<iZ/#5J,orr2]m'`S.4rqlTls763t"pP/+q>0sc
+rVlZn')qk.qYU-j!=B2=#P at rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=%
+!"&`)qu$6h(B4 at 6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~>
+nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF
+s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9%
+!!3#ts8MEc!<)iq!!3'!!<N2nrt"o'qYL3m!<iZ/#5J,orr2]m'`S.4rqlTls763t"pP/+q>0sc
+rVlZn')qk.qYU-j!=B2=#P at rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=%
+!"&`)qu$6h(B4 at 6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~>
+mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL
+s7H9arVFY;&.&LE!"&Q'rrN-$nGr at crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq
+j8]/Y"Te])!<</us8W)crrE#qrr<*!!!*-"pAYBrr;QT_a9*+T!<iB#rV6BbrsSi'qu-CJ!=K2=
+!VlZj!rMopqYq3-rVcQkr<!0("p)U<m/?hRpAFI\&,H5'rr;p!!WrK*r;ZZmqt^7&rU]s`rp]j'
+!<E<+!;cZmp&>^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~>
+mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL
+s7H9arVFY;&.&LE!"&Q'rrN-$nGr at crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq
+j8]/Y"Te])!<</us8W)crrE#qrr<*!!!*-"pAYBrr;QT_a9*+T!<iB#rV6BbrsSi'qu-CJ!=K2=
+!VlZj!rMopqYq3-rVcQkr<!0("p)U<m/?hRpAFI\&,H5'rr;p!!WrK*r;ZZmqt^7&rU]s`rp]j'
+!<E<+!;cZmp&>^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~>
+mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL
+s7H9arVFY;&.&LE!"&Q'rrN-$nGr at crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq
+j8]/Y"Te])!<</us8W)crrE#qrr<*!!!*-"pAYBrr;QT_a9*+T!<iB#rV6BbrsSi'qu-CJ!=K2=
+!VlZj!rMopqYq3-rVcQkr<!0("p)U<m/?hRpAFI\&,H5'rr;p!!WrK*r;ZZmqt^7&rU]s`rp]j'
+!<E<+!;cZmp&>^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~>
+nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc<iSEGgqu6NcqYg'cq#0FUp\jjcr;liprr2utaoDD:%
+K6>&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr
+r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr
+t58-qu-Em!s&H("Sr#oqtp<jqYq0,rVcHcrriB(!!)umpAO[]rUBgtrVuZks8;p"!<E<$s7lTjq
+>V!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~>
+nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc<iSEGgqu6NcqYg'cq#0FUp\jjcr;liprr2utaoDD:%
+K6>&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr
+r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr
+t58-qu-Em!s&H("Sr#oqtp<jqYq0,rVcHcrriB(!!)umpAO[]rUBgtrVuZks8;p"!<E<$s7lTjq
+>V!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~>
+nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc<iSEGgqu6NcqYg'cq#0FUp\jjcr;liprr2utaoDD:%
+K6>&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr
+r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr
+t58-qu-Em!s&H("Sr#oqtp<jqYq0,rVcHcrriB(!!)umpAO[]rUBgtrVuZks8;p"!<E<$s7lTjq
+>V!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~>
+nc/Uf*rZ!5r;?^'!!!?+!<E0#"9AJurr2rmq"apgs8N#trr*3'rr;utrr;utqu6Tp!<1+?s8N&u
+'E8%3rr)Tt!!Nf3"UG)8!!E?1!Vl]u"98E*"oSE:#m(J7&-;h3"p=r,q>Bpcs8N&urr;uXs8W''
+!WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N3!rrE&p
+rrN)urVd',!!3?)rr2rpo`#F#rVZTm!<E?("8D`jrVc`n'E8%2s8W&pqu-NnoD]U,!<<Z/r;QWp
+rpTjtqZ$Nnr:^F$"TSW.rr2ipq>V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s%
+#5.uoqtg9jX8d\~>
+nc/Uf*rZ!5r;?^'!!!?+!<E0#"9AJurr2rmq"apgs8N#trr*3'rr;utrr;utqu6Tp!<1+?s8N&u
+'E8%3rr)Tt!!Nf3"UG)8!!E?1!Vl]u"98E*"oSE:#m(J7&-;h3"p=r,q>Bpcs8N&urr;uXs8W''
+!WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N3!rrE&p
+rrN)urVd',!!3?)rr2rpo`#F#rVZTm!<E?("8D`jrVc`n'E8%2s8W&pqu-NnoD]U,!<<Z/r;QWp
+rpTjtqZ$Nnr:^F$"TSW.rr2ipq>V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s%
+#5.uoqtg9jX8d\~>
+nc/Uf*rZ!5r;?^'!!!?+!<E0#"9AJurr2rmq"apgs8N#trr*3'rr;utrr;utqu6Tp!<1+?s8N&u
+'E8%3rr)Tt!!Nf3"UG)8!!E?1!Vl]u"98E*"oSE:#m(J7&-;h3"p=r,q>Bpcs8N&urr;uXs8W''
+!WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!<N3!rrE&p
+rrN)urVd',!!3?)rr2rpo`#F#rVZTm!<E?("8D`jrVc`n'E8%2s8W&pqu-NnoD]U,!<<Z/r;QWp
+rpTjtqZ$Nnr:^F$"TSW.rr2ipq>V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s%
+#5.uoqtg9jX8d\~>
+nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B
+!rrW-!sK>:rpfOXg].<Q#6Fl+!!<-!rojC^q[EJtrr;ljrqQBjqYp3cs8W'%!W`9%!!3#ts8MEc
+!<)iq!!3'!!<N2ns8MusrX/T*"98f=rpp*_r:U*irY,8.r!`W+%1;@rrVcWkrVlirs8W&s$iKno
+rp^'s$NL2*rVlfart##,qu-Hl&ci"<"9SSnq#0mcs8EH*r!*6&#n6S-rVuiprr2utqu?]q&H2Fs
+p^7?1(BOC1r;-9frV`htJ,~>
+nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B
+!rrW-!sK>:rpfOXg].<Q#6Fl+!!<-!rojC^q[EJtrr;ljrqQBjqYp3cs8W'%!W`9%!!3#ts8MEc
+!<)iq!!3'!!<N2ns8MusrX/T*"98f=rpp*_r:U*irY,8.r!`W+%1;@rrVcWkrVlirs8W&s$iKno
+rp^'s$NL2*rVlfart##,qu-Hl&ci"<"9SSnq#0mcs8EH*r!*6&#n6S-rVuiprr2utqu?]q&H2Fs
+p^7?1(BOC1r;-9frV`htJ,~>
+nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B
+!rrW-!sK>:rpfOXg].<Q#6Fl+!!<-!rojC^q[EJtrr;ljrqQBjqYp3cs8W'%!W`9%!!3#ts8MEc
+!<)iq!!3'!!<N2ns8MusrX/T*"98f=rpp*_r:U*irY,8.r!`W+%1;@rrVcWkrVlirs8W&s$iKno
+rp^'s$NL2*rVlfart##,qu-Hl&ci"<"9SSnq#0mcs8EH*r!*6&#n6S-rVuiprr2utqu?]q&H2Fs
+p^7?1(BOC1r;-9frV`htJ,~>
+nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2
+":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr
+mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p*
+r;$<heGp*[$4-V/rr2?c&,H8&r;QZp$k*+=#lXDnrq6<krXAc'%hA[K!S%&Is8DlprrE&qrt,2.
+r:U'_!=&Z+&cDY.rVZYps*t~>
+nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2
+":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr
+mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p*
+r;$<heGp*[$4-V/rr2?c&,H8&r;QZp$k*+=#lXDnrq6<krXAc'%hA[K!S%&Is8DlprrE&qrt,2.
+r:U'_!=&Z+&cDY.rVZYps*t~>
+nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2
+":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr
+mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p*
+r;$<heGp*[$4-V/rr2?c&,H8&r;QZp$k*+=#lXDnrq6<krXAc'%hA[K!S%&Is8DlprrE&qrt,2.
+r:U'_!=&Z+&cDY.rVZYps*t~>
+nc'F(rr2loqu$?n"TeZ)"onls5l^<Nr:p5art"YerUg(T7KWVr!rrc3"pOf&&d&+7!!3?.#7(;<
+"98f67Rm+Hrqc`mr7h8OrW`K)!<<3"s8M?as8N&rs7m&8]tD%ho_e^\rql]ls8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N2nrt#,,pA=^a637,k$39njs7Q'bs8F#:r;6O&!<NH#pAY$grVlfrs8N&t
+s8N#rr:^'lrW30(6N-l^rpKdsrr)]`r;6Hn!<WW.r;?*_p&G'k&H2Mn!X/W3!<)lrr;?Qos8Mrr
+'E7t.r;6<`#Qk/3"oSB"rVc`qriH-M~>
+nc'F(rr2loqu$?n"TeZ)"onls5l^<Nr:p5art"YerUg(T7KWVr!rrc3"pOf&&d&+7!!3?.#7(;<
+"98f67Rm+Hrqc`mr7h8OrW`K)!<<3"s8M?as8N&rs7m&8]tD%ho_e^\rql]ls8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N2nrt#,,pA=^a637,k$39njs7Q'bs8F#:r;6O&!<NH#pAY$grVlfrs8N&t
+s8N#rr:^'lrW30(6N-l^rpKdsrr)]`r;6Hn!<WW.r;?*_p&G'k&H2Mn!X/W3!<)lrr;?Qos8Mrr
+'E7t.r;6<`#Qk/3"oSB"rVc`qriH-M~>
+nc'F(rr2loqu$?n"TeZ)"onls5l^<Nr:p5art"YerUg(T7KWVr!rrc3"pOf&&d&+7!!3?.#7(;<
+"98f67Rm+Hrqc`mr7h8OrW`K)!<<3"s8M?as8N&rs7m&8]tD%ho_e^\rql]ls8W'%!W`9%!!3#t
+s8MEc!<)iq!!3'!!<N2nrt#,,pA=^a637,k$39njs7Q'bs8F#:r;6O&!<NH#pAY$grVlfrs8N&t
+s8N#rr:^'lrW30(6N-l^rpKdsrr)]`r;6Hn!<WW.r;?*_p&G'k&H2Mn!X/W3!<)lrr;?Qos8Mrr
+'E7t.r;6<`#Qk/3"oSB"rVc`qriH-M~>
+nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+<
+!=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAb-k%/'JmqZd*)!W`9!q>0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut
+rqu]ms7uNn!<WB.rr)iqmf*grqt0a^p\k-q$4m@?p&=m^s8W'0rVZ["!s&Q-qtL*equ6Wqrqud0
+rr)clp%"s\!=Sr2qu-Qnr;Q`qXT*e~>
+nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+<
+!=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAb-k%/'JmqZd*)!W`9!q>0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut
+rqu]ms7uNn!<WB.rr)iqmf*grqt0a^p\k-q$4m@?p&=m^s8W'0rVZ["!s&Q-qtL*equ6Wqrqud0
+rr)clp%"s\!=Sr2qu-Qnr;Q`qXT*e~>
+nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+<
+!=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAb-k%/'JmqZd*)!W`9!q>0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut
+rqu]ms7uNn!<WB.rr)iqmf*grqt0a^p\k-q$4m@?p&=m^s8W'0rVZ["!s&Q-qtL*equ6Wqrqud0
+rr)clp%"s\!=Sr2qu-Qnr;Q`qXT*e~>
+nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb
+rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!<</us8W)c
+rrE#qrr<*!!!*-"pAY[&rVlcms7l^!"pkD0p at eIXs8W'CrVQd##QY&/qu?Tmrr)cmrr;rss8Mrn
+qu$3g"p+r4#kS#nrr2<b%fZD#q==Lb!!rl8r:^$cp&G'k%K64u"U5)7#5e5pqtpBgrtGD1qtp<h
+!rr]6!"&Q%s8Muss8K,"J,~>
+nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb
+rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!<</us8W)c
+rrE#qrr<*!!!*-"pAY[&rVlcms7l^!"pkD0p at eIXs8W'CrVQd##QY&/qu?Tmrr)cmrr;rss8Mrn
+qu$3g"p+r4#kS#nrr2<b%fZD#q==Lb!!rl8r:^$cp&G'k%K64u"U5)7#5e5pqtpBgrtGD1qtp<h
+!rr]6!"&Q%s8Muss8K,"J,~>
+nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb
+rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!<</us8W)c
+rrE#qrr<*!!!*-"pAY[&rVlcms7l^!"pkD0p at eIXs8W'CrVQd##QY&/qu?Tmrr)cmrr;rss8Mrn
+qu$3g"p+r4#kS#nrr2<b%fZD#q==Lb!!rl8r:^$cp&G'k%K64u"U5)7#5e5pqtpBgrtGD1qtp<h
+!rr]6!"&Q%s8Muss8K,"J,~>
+nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e
+pA=d\qu$BerVZNig].<Q#6Fl+!!<-!rpBacrXo,,r;HTk#6Or+!t+btqtU!`qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAY[&s8;ils7uj*!sSl(p\k$_s8W'3rVQ]t#m1HirUg'dqtp?krr)ir
+rr*?(q"FI["98E2#ke/prr2?cs8N&r$iBbp!X&`5#''S<rUp3jrXJi(p&kU%"U+PurVQKkq>V--
+r;6Bhq#CR)!!J5VrVlcorr2kts*t~>
+nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e
+pA=d\qu$BerVZNig].<Q#6Fl+!!<-!rpBacrXo,,r;HTk#6Or+!t+btqtU!`qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAY[&s8;ils7uj*!sSl(p\k$_s8W'3rVQ]t#m1HirUg'dqtp?krr)ir
+rr*?(q"FI["98E2#ke/prr2?cs8N&r$iBbp!X&`5#''S<rUp3jrXJi(p&kU%"U+PurVQKkq>V--
+r;6Bhq#CR)!!J5VrVlcorr2kts*t~>
+nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e
+pA=d\qu$BerVZNig].<Q#6Fl+!!<-!rpBacrXo,,r;HTk#6Or+!t+btqtU!`qu?]q"Te])!<</u
+s8W)crrE#qrr<*!!!*-"pAY[&s8;ils7uj*!sSl(p\k$_s8W'3rVQ]t#m1HirUg'dqtp?krr)ir
+rr*?(q"FI["98E2#ke/prr2?cs8N&r$iBbp!X&`5#''S<rUp3jrXJi(p&kU%"U+PurVQKkq>V--
+r;6Bhq#CR)!!J5VrVlcorr2kts*t~>
+nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,(
+s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk
+r<<B1!!3;trVlKhrr<#trr3*"r;m#u!<<&ts8W)urrE#es8W'$rVuor!WE'"!WMfm&,uV-qY^-d
+"9\c,!;lfqrVc`os"F?Hs8;ljrq-Kr#m:>.rV6<gqu$Hnrr2rtrr<#tr;6Bi!<WH0!;ZNjrqu`p
+s8MQg&,uJ+qu-Ql!<W?-#QXf$q"t*irr<#urXo,,lO!dq!sSStrqcNkr;?TorVmH.r;6BipAb9t
+"9SQ"rVZWmrr0#!J,~>
+nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,(
+s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk
+r<<B1!!3;trVlKhrr<#trr3*"r;m#u!<<&ts8W)urrE#es8W'$rVuor!WE'"!WMfm&,uV-qY^-d
+"9\c,!;lfqrVc`os"F?Hs8;ljrq-Kr#m:>.rV6<gqu$Hnrr2rtrr<#tr;6Bi!<WH0!;ZNjrqu`p
+s8MQg&,uJ+qu-Ql!<W?-#QXf$q"t*irr<#urXo,,lO!dq!sSStrqcNkr;?TorVmH.r;6BipAb9t
+"9SQ"rVZWmrr0#!J,~>
+nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,(
+s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk
+r<<B1!!3;trVlKhrr<#trr3*"r;m#u!<<&ts8W)urrE#es8W'$rVuor!WE'"!WMfm&,uV-qY^-d
+"9\c,!;lfqrVc`os"F?Hs8;ljrq-Kr#m:>.rV6<gqu$Hnrr2rtrr<#tr;6Bi!<WH0!;ZNjrqu`p
+s8MQg&,uJ+qu-Ql!<W?-#QXf$q"t*irr<#urXo,,lO!dq!sSStrqcNkr;?TorVmH.r;6BipAb9t
+"9SQ"rVZWmrr0#!J,~>
+dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5
+rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR)
+rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<<?!qu-Nl
+rVuosnGa!qs7lWdr3?;4!XA`(q>1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-<q
+$NU>2rr2lorVierJ,~>
+dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5
+rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR)
+rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<<?!qu-Nl
+rVuosnGa!qs7lWdr3?;4!XA`(q>1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-<q
+$NU>2rr2lorVierJ,~>
+dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5
+rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR)
+rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<<?!qu-Nl
+rVuosnGa!qs7lWdr3?;4!XA`(q>1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-<q
+$NU>2rr2lorVierJ,~>
+dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe
+s8N&s')_J'r;cm'!<rQ&s8;fjrVuosrr3'!r;lis$3C2+r;Q]orVuorn,Ejrr;Zco!<<-#!WW3!
+rV?I(rp9X`kPb5X!X&]-"oeK!rr;oq&,l2"qu6ThrW!--#6Oi%qYpEnrr)lqrY,8.qtg$j!<N62
+!r;`lrqu`ps8MNf%K-7tqY^!`!"o8;"onN"rql`qrr<#urXf&+rrE*%!sf53s82cprVcckrXA](
+!=&T*#l+H!rVc_ps*t~>
+dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe
+s8N&s')_J'r;cm'!<rQ&s8;fjrVuosrr3'!r;lis$3C2+r;Q]orVuorn,Ejrr;Zco!<<-#!WW3!
+rV?I(rp9X`kPb5X!X&]-"oeK!rr;oq&,l2"qu6ThrW!--#6Oi%qYpEnrr)lqrY,8.qtg$j!<N62
+!r;`lrqu`ps8MNf%K-7tqY^!`!"o8;"onN"rql`qrr<#urXf&+rrE*%!sf53s82cprVcckrXA](
+!=&T*#l+H!rVc_ps*t~>
+dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe
+s8N&s')_J'r;cm'!<rQ&s8;fjrVuosrr3'!r;lis$3C2+r;Q]orVuorn,Ejrr;Zco!<<-#!WW3!
+rV?I(rp9X`kPb5X!X&]-"oeK!rr;oq&,l2"qu6ThrW!--#6Oi%qYpEnrr)lqrY,8.qtg$j!<N62
+!r;`lrqu`ps8MNf%K-7tqY^!`!"o8;"onN"rql`qrr<#urXf&+rrE*%!sf53s82cprVcckrXA](
+!=&T*#l+H!rVc_ps*t~>
+dJk$^rVQQlq>U<cs7cL+$i^"uqY^<ks8W)/rs/Q$qtp?krVZKjq>:6kqYo"E$NC#&#RLJ>!<;Ze
+mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr<!$!
+!WN&nrtP;-p&+aVqs+4k!<E?&rV60`qYU3ir=8Asr;69WrYbeA!!3?'nGN:]s8;lr"UkbI!UKX[
+rVl`ns8W)frtG/%rqQBdm0!Ft"T\Sss8;iorr2os!WE#rrt58/n`pD_!!`N&rV66gqtpBjrVdB,
+r;6Bj'++aI!!*#sr;6EjWW.J~>
+dJk$^rVQQlq>U<cs7cL+$i^"uqY^<ks8W)/rs/Q$qtp?krVZKjq>:6kqYo"E$NC#&#RLJ>!<;Ze
+mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr<!$!
+!WN&nrtP;-p&+aVqs+4k!<E?&rV60`qYU3ir=8Asr;69WrYbeA!!3?'nGN:]s8;lr"UkbI!UKX[
+rVl`ns8W)frtG/%rqQBdm0!Ft"T\Sss8;iorr2os!WE#rrt58/n`pD_!!`N&rV66gqtpBjrVdB,
+r;6Bj'++aI!!*#sr;6EjWW.J~>
+dJk$^rVQQlq>U<cs7cL+$i^"uqY^<ks8W)/rs/Q$qtp?krVZKjq>:6kqYo"E$NC#&#RLJ>!<;Ze
+mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr<!$!
+!WN&nrtP;-p&+aVqs+4k!<E?&rV60`qYU3ir=8Asr;69WrYbeA!!3?'nGN:]s8;lr"UkbI!UKX[
+rVl`ns8W)frtG/%rqQBdm0!Ft"T\Sss8;iorr2os!WE#rrt58/n`pD_!!`N&rV66gqtpBjrVdB,
+r;6Bj'++aI!!*#sr;6EjWW.J~>
+dJjmQq>U<hp\Xm`q?I3)"8)HbqY^?lrrE&/rs/Q%r;?Nmrr)Zmq>UElqu,%E#laf$!!i`.$L?mO
+&Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n
+rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<<?'r;6Hl
+r;HZqrpg"'pAamcs6osd!!3]3!<2cgqtp<irVl`p')qe(p\"O[!!iW0!!`;nq>0p_q>1-err<B,
+!rrE%o)&:ZqY[>mJ,~>
+dJjmQq>U<hp\Xm`q?I3)"8)HbqY^?lrrE&/rs/Q%r;?Nmrr)Zmq>UElqu,%E#laf$!!i`.$L?mO
+&Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n
+rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<<?'r;6Hl
+r;HZqrpg"'pAamcs6osd!!3]3!<2cgqtp<irVl`p')qe(p\"O[!!iW0!!`;nq>0p_q>1-err<B,
+!rrE%o)&:ZqY[>mJ,~>
+dJjmQq>U<hp\Xm`q?I3)"8)HbqY^?lrrE&/rs/Q%r;?Nmrr)Zmq>UElqu,%E#laf$!!i`.$L?mO
+&Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n
+rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<<?'r;6Hl
+r;HZqrpg"'pAamcs6osd!!3]3!<2cgqtp<irVl`p')qe(p\"O[!!iW0!!`;nq>0p_q>1-err<B,
+!rrE%o)&:ZqY[>mJ,~>
+dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r<E<4!s&i3l2^hb%0-\7!!ET.
+#lkt?oDeafrr2otrVl`o!=T)4!r`#mr;HQks8W)grs8T's8DrpquQs!"9SW&rqQNnr=8c*qu-6f
+*rlKF!!``0!;urt!<*!-$N^;/$ig;/$hWofrV$7*rr)clqu-Qr%fub/p\Xpgr;HZqrpg"@pAP$Z
+rr2fb!<E0."5rYIqtp<irVlisrr2rsrVQEcq#;9<!<<3&!rr?)!<<3!!;lj+"98Q0#l+AqqYC!c
+ri6!K~>
+dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r<E<4!s&i3l2^hb%0-\7!!ET.
+#lkt?oDeafrr2otrVl`o!=T)4!r`#mr;HQks8W)grs8T's8DrpquQs!"9SW&rqQNnr=8c*qu-6f
+*rlKF!!``0!;urt!<*!-$N^;/$ig;/$hWofrV$7*rr)clqu-Qr%fub/p\Xpgr;HZqrpg"@pAP$Z
+rr2fb!<E0."5rYIqtp<irVlisrr2rsrVQEcq#;9<!<<3&!rr?)!<<3!!;lj+"98Q0#l+AqqYC!c
+ri6!K~>
+dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r<E<4!s&i3l2^hb%0-\7!!ET.
+#lkt?oDeafrr2otrVl`o!=T)4!r`#mr;HQks8W)grs8T's8DrpquQs!"9SW&rqQNnr=8c*qu-6f
+*rlKF!!``0!;urt!<*!-$N^;/$ig;/$hWofrV$7*rr)clqu-Qr%fub/p\Xpgr;HZqrpg"@pAP$Z
+rr2fb!<E0."5rYIqtp<irVlisrr2rsrVQEcq#;9<!<<3&!rr?)!<<3!!;lj+"98Q0#l+AqqYC!c
+ri6!K~>
+dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ<rsJc(r;Zg,!"8r7#OML*!<N?*!!<?)"onW)
+"o[uhrVuoqrr2p2rVQKi!!!$&!sAT$qu-KkrVuosnc&mns8W)tr;6WsrW<6$rVcNk&cV\)rr)Q\
+rV\PW"U554%KZ_2!tkV7!!3B5!s&T2!WWW72#mCMp%eXerr<!2rr)ch!X&N0#O_QfrVl`ns8W)g
+rt,2%rVlcjqu/SU#QP#0rqu]nr;cirrrN)trr;us%eonu3"#lr!!NB*"p+f,r;c`r$j[(<#QQpb
+p&4gcqu-NnXT*e~>
+dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ<rsJc(r;Zg,!"8r7#OML*!<N?*!!<?)"onW)
+"o[uhrVuoqrr2p2rVQKi!!!$&!sAT$qu-KkrVuosnc&mns8W)tr;6WsrW<6$rVcNk&cV\)rr)Q\
+rV\PW"U554%KZ_2!tkV7!!3B5!s&T2!WWW72#mCMp%eXerr<!2rr)ch!X&N0#O_QfrVl`ns8W)g
+rt,2%rVlcjqu/SU#QP#0rqu]nr;cirrrN)trr;us%eonu3"#lr!!NB*"p+f,r;c`r$j[(<#QQpb
+p&4gcqu-NnXT*e~>
+dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ<rsJc(r;Zg,!"8r7#OML*!<N?*!!<?)"onW)
+"o[uhrVuoqrr2p2rVQKi!!!$&!sAT$qu-KkrVuosnc&mns8W)tr;6WsrW<6$rVcNk&cV\)rr)Q\
+rV\PW"U554%KZ_2!tkV7!!3B5!s&T2!WWW72#mCMp%eXerr<!2rr)ch!X&N0#O_QfrVl`ns8W)g
+rt,2%rVlcjqu/SU#QP#0rqu]nr;cirrrN)trr;us%eonu3"#lr!!NB*"p+f,r;c`r$j[(<#QQpb
+p&4gcqu-NnXT*e~>
+h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9
+!<N?*!"&c6!!`Q*9DA>_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!<WE&
+r;HTirrDurrZ_:>rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2
+rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!<N6)!<WH*!!*'"
+q>h!,!WrR"s8;`lrVZTlrr0#!J,~>
+h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9
+!<N?*!"&c6!!`Q*9DA>_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!<WE&
+r;HTirrDurrZ_:>rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2
+rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!<N6)!<WH*!!*'"
+q>h!,!WrR"s8;`lrVZTlrr0#!J,~>
+h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9
+!<N?*!"&c6!!`Q*9DA>_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!<WE&
+r;HTirrDurrZ_:>rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2
+rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!<N6)!<WH*!!*'"
+q>h!,!WrR"s8;`lrVZTlrr0#!J,~>
+iVroWrr2usrqm<#rqZ9apA+KMT)\is!<WE&!!30$!.k15rrE&srsA]&qtX\*!XA`.kPu"l&-E1B
+#m=f9r;?Nmq#CBn"_7i>#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH
+$3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk
+o_JF_Ad&>?!s/N!!!**%rW<Q/BOgf:p&Fpdr;?NmWrIS~>
+iVroWrr2usrqm<#rqZ9apA+KMT)\is!<WE&!!30$!.k15rrE&srsA]&qtX\*!XA`.kPu"l&-E1B
+#m=f9r;?Nmq#CBn"_7i>#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH
+$3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk
+o_JF_Ad&>?!s/N!!!**%rW<Q/BOgf:p&Fpdr;?NmWrIS~>
+iVroWrr2usrqm<#rqZ9apA+KMT)\is!<WE&!!30$!.k15rrE&srsA]&qtX\*!XA`.kPu"l&-E1B
+#m=f9r;?Nmq#CBn"_7i>#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH
+$3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk
+o_JF_Ad&>?!s/N!!!**%rW<Q/BOgf:p&Fpdr;?NmWrIS~>
+iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n
+IXHPAr;HTnrqQNnrWi at LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C<ds8W)ur<W?#r:g#8
+JpDeDIK4fpI//0qq"ja[qYg9gnc&jnH[1-hq"F7WquZirroa:epj[R8IJ`j:qu6Nmr;cirs8W)u
+r<`E$rq60dp3hLArdOlqqg8BlrdG)uI/is8qtC'hquZirri6!K~>
+iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n
+IXHPAr;HTnrqQNnrWi at LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C<ds8W)ur<W?#r:g#8
+JpDeDIK4fpI//0qq"ja[qYg9gnc&jnH[1-hq"F7WquZirroa:epj[R8IJ`j:qu6Nmr;cirs8W)u
+r<`E$rq60dp3hLArdOlqqg8BlrdG)uI/is8qtC'hquZirri6!K~>
+iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n
+IXHPAr;HTnrqQNnrWi at LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C<ds8W)ur<W?#r:g#8
+JpDeDIK4fpI//0qq"ja[qYg9gnc&jnH[1-hq"F7WquZirroa:epj[R8IJ`j:qu6Nmr;cirs8W)u
+r<`E$rq60dp3hLArdOlqqg8BlrdG)uI/is8qtC'hquZirri6!K~>
+iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa
+rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e
+r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^
+qY^<iri,pJ~>
+iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa
+rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e
+r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^
+qY^<iri,pJ~>
+iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa
+rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e
+r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^
+qY^<iri,pJ~>
+iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn
+r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a
+qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)"
+J,~>
+iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn
+r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a
+qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)"
+J,~>
+iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn
+r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a
+qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)"
+J,~>
+h>[`Yqtp<h3<99^!=0A@!X&N*%0H\2!!30$!.k1.rs/Q'q>L0gmITiIq>LWsqu-<hrVQK`s8W''
+qZ$?]rVHBiqYpQpnc'-sr:^*fqu-?gqtU*\qtp*Wrs&GspA+Uco^i+^rWi2sr;?Qdr;H-bs7lfq
+q"Xa]qYpQpl2M"drVQHjp]($Yrs/Jnr;-'\rVZ3c#Q=Drr:g-gr;-Enro*nIrnRO(~>
+h>[`Yqtp<h3<99^!=0A@!X&N*%0H\2!!30$!.k1.rs/Q'q>L0gmITiIq>LWsqu-<hrVQK`s8W''
+qZ$?]rVHBiqYpQpnc'-sr:^*fqu-?gqtU*\qtp*Wrs&GspA+Uco^i+^rWi2sr;?Qdr;H-bs7lfq
+q"Xa]qYpQpl2M"drVQHjp]($Yrs/Jnr;-'\rVZ3c#Q=Drr:g-gr;-Enro*nIrnRO(~>
+h>[`Yqtp<h3<99^!=0A@!X&N*%0H\2!!30$!.k1.rs/Q'q>L0gmITiIq>LWsqu-<hrVQK`s8W''
+qZ$?]rVHBiqYpQpnc'-sr:^*fqu-?gqtU*\qtp*Wrs&GspA+Uco^i+^rWi2sr;?Qdr;H-bs7lfq
+q"Xa]qYpQpl2M"drVQHjp]($Yrs/Jnr;-'\rVZ3c#Q=Drr:g-gr;-Enro*nIrnRO(~>
+h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t
+r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j
+q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~>
+h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t
+r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j
+q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~>
+h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t
+r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j
+q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~>
+iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i
+rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZ<fnc&jnpA4Xb
+q#C6hroX4cqu6Wgrqu-^rr;oqqZ$Tp"oSE"qZ$-Urs/K%qYpBkrr;oqhZ*-Fq>KCSJ,~>
+iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i
+rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZ<fnc&jnpA4Xb
+q#C6hroX4cqu6Wgrqu-^rr;oqqZ$Tp"oSE"qZ$-Urs/K%qYpBkrr;oqhZ*-Fq>KCSJ,~>
+iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i
+rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZ<fnc&jnpA4Xb
+q#C6hroX4cqu6Wgrqu-^rr;oqqZ$Tp"oSE"qZ$-Urs/K%qYpBkrr;oqhZ*-Fq>KCSJ,~>
+mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!<N<&'Ft-;meq_:JcC<$\GlR+rr*i9
+p\=abq>1-Vrq?<grq-6grqZ6WrVlKanG;5GJ,~>
+mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!<N<&'Ft-;meq_:JcC<$\GlR+rr*i9
+p\=abq>1-Vrq?<grq-6grqZ6WrVlKanG;5GJ,~>
+mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!<N<&'Ft-;meq_:JcC<$\GlR+rr*i9
+p\=abq>1-Vrq?<grq-6grqZ6WrVlKanG;5GJ,~>
+nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O
+rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~>
+nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O
+rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~>
+nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O
+rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~>
+nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O
+qYg<hq>C-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~>
+nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O
+qYg<hq>C-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~>
+nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O
+qYg<hq>C-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~>
+nc/Xg(B=C3qtp<ds7,r[#m(50"onr+q"ssgrW!T5!sSi0":bD4?!@"#rVZ9coDeW;s+13$s1/10
+qAoD+rqH?es7$![q==9[U8Xug!X8f9!W`K*!<iN$jSs`~>
+nc/Xg(B=C3qtp<ds7,r[#m(50"onr+q"ssgrW!T5!sSi0":bD4?!@"#rVZ9coDeW;s+13$s1/10
+qAoD+rqH?es7$![q==9[U8Xug!X8f9!W`K*!<iN$jSs`~>
+nc/Xg(B=C3qtp<ds7,r[#m(50"onr+q"ssgrW!T5!sSi0":bD4?!@"#rVZ9coDeW;s+13$s1/10
+qAoD+rqH?es7$![q==9[U8Xug!X8f9!W`K*!<iN$jSs`~>
+nc/Xg(B=C3qtp<er/Hj@$3UV9#6Ou*q=jjfr;[H2!s&N1!,loWoD\adqtKm`s8.BIJcC<$\c3cD
+s7Q<gr:TgZqN$\nNK=;H!!30)"9eo1"Tec0!Wi;]s*t~>
+nc/Xg(B=C3qtp<er/Hj@$3UV9#6Ou*q=jjfr;[H2!s&N1!,loWoD\adqtKm`s8.BIJcC<$\c3cD
+s7Q<gr:TgZqN$\nNK=;H!!30)"9eo1"Tec0!Wi;]s*t~>
+nc/Xg(B=C3qtp<er/Hj@$3UV9#6Ou*q=jjfr;[H2!s&N1!,loWoD\adqtKm`s8.BIJcC<$\c3cD
+s7Q<gr:TgZqN$\nNK=;H!!30)"9eo1"Tec0!Wi;]s*t~>
+nc'I*s8W)sr;?M<HiaKS":+u/!=/`*rVHBjqu@<1!!WN1qZ$Hfrr2ikqt^0iq18Qss+13\ru_.6
+q=ji3FE_hO!<E<7!ser2!X&Z."U>&4#6Y2?!W;$YJ,~>
+nc'I*s8W)sr;?M<HiaKS":+u/!=/`*rVHBjqu@<1!!WN1qZ$Hfrr2ikqt^0iq18Qss+13\ru_.6
+q=ji3FE_hO!<E<7!ser2!X&Z."U>&4#6Y2?!W;$YJ,~>
+nc'I*s8W)sr;?M<HiaKS":+u/!=/`*rVHBjqu@<1!!WN1qZ$Hfrr2ikqt^0iq18Qss+13\ru_.6
+q=ji3FE_hO!<E<7!ser2!X&Z."U>&4#6Y2?!W;$YJ,~>
+mJdn!r;?Kq"U5#1!<N?*!<rQ&r;6Bkqu@<1!!EB-p]('arqQNdrVlclr.4m!s+13\ru_"4qI*_6
+!<iN*!s8T,$O$k>!s\o/"Te`-"Te]1#Q3Z_J,~>
+mJdn!r;?Kq"U5#1!<N?*!<rQ&r;6Bkqu@<1!!EB-p]('arqQNdrVlclr.4m!s+13\ru_"4qI*_6
+!<iN*!s8T,$O$k>!s\o/"Te`-"Te]1#Q3Z_J,~>
+mJdn!r;?Kq"U5#1!<N?*!<rQ&r;6Bkqu@<1!!EB-p]('arqQNdrVlclr.4m!s+13\ru_"4qI*_6
+!<iN*!s8T,$O$k>!s\o/"Te`-"Te]1#Q3Z_J,~>
+mJm4cs8Dru!!E0"rrE?)!<E,trVlip!"]/2!s&H"s8Dlpr;Z]prr2kIs+13$s1&(Np&@Jd!W`B)
+!!30%"9J`,"98K2!<<0-!sSo/!WWT*jSs`~>
+mJm4cs8Dru!!E0"rrE?)!<E,trVlip!"]/2!s&H"s8Dlpr;Z]prr2kIs+13$s1&(Np&@Jd!W`B)
+!!30%"9J`,"98K2!<<0-!sSo/!WWT*jSs`~>
+mJm4cs8Dru!!E0"rrE?)!<E,trVlip!"]/2!s&H"s8Dlpr;Z]prr2kIs+13$s1&(Np&@Jd!W`B)
+!!30%"9J`,"98K2!<<0-!sSo/!WWT*jSs`~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3
+!WW6%#11]9roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3
+!WW6%#11]9roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3
+!WW6%#11]9roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6
+#Nt:,jS&?Hn`9_#~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6
+#Nt:,jS&?Hn`9_#~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6
+#Nt:,jS&?Hn`9_#~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n
+!;PgXqu-*bp>l7(~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n
+!;PgXqu-*bp>l7(~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n
+!;PgXqu-*bp>l7(~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3
+#laf"o_JLUroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3
+#laf"o_JLUroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3
+#laf"o_JLUroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup&
+"9%lfrqlEgqW.[,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup&
+"9%lfrqlEgqW.[,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup&
+"9%lfrqlEgqW.[,~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5
+r;,pXqu$EljSs`~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5
+r;,pXqu$EljSs`~>
+li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5
+r;,pXqu$EljSs`~>
+nc/Ufs8W)t&-2h5!<<3%!<E<'!<<#qrVufr!<E3!!>PM.rr)cis82fms82iqrVc`ps8W)?s8N#p
+s8W'<s8Dutrr2`nrVc`qs8)cks8;osqZ$Qos8;osrVc`os8W)hrs&H%qu?WprV6Boqu?QLrseu-
+rVuirrVlfrrql`mkPkhds7uNkrVulroD\gikl1k`rqlZorVufpoDeji"Sr)trr1sXs8Mlps8<'!
+s8)]lrrE&drs8T'q>1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~>
+nc/Ufs8W)t&-2h5!<<3%!<E<'!<<#qrVufr!<E3!!>PM.rr)cis82fms82iqrVc`ps8W)?s8N#p
+s8W'<s8Dutrr2`nrVc`qs8)cks8;osqZ$Qos8;osrVc`os8W)hrs&H%qu?WprV6Boqu?QLrseu-
+rVuirrVlfrrql`mkPkhds7uNkrVulroD\gikl1k`rqlZorVufpoDeji"Sr)trr1sXs8Mlps8<'!
+s8)]lrrE&drs8T'q>1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~>
+nc/Ufs8W)t&-2h5!<<3%!<E<'!<<#qrVufr!<E3!!>PM.rr)cis82fms82iqrVc`ps8W)?s8N#p
+s8W'<s8Dutrr2`nrVc`qs8)cks8;osqZ$Qos8;osrVc`os8W)hrs&H%qu?WprV6Boqu?QLrseu-
+rVuirrVlfrrql`mkPkhds7uNkrVulroD\gikl1k`rqlZorVufpoDeji"Sr)trr1sXs8Mlps8<'!
+s8)]lrrE&drs8T'q>1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~>
+nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.?
+!r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk
+"oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl
+rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;-<cqYBg]
+qY^$`oltn.H@#l!!s/N)!!Ie/L4K:#jSs`~>
+nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.?
+!r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk
+"oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl
+rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;-<cqYBg]
+qY^$`oltn.H@#l!!s/N)!!Ie/L4K:#jSs`~>
+nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.?
+!r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk
+"oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl
+rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;-<cqYBg]
+qY^$`oltn.H@#l!!s/N)!!Ie/L4K:#jSs`~>
+mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q
+ruq7<s8)cfr;?HiqYpKmr;?QorqlNhq#(!gqu6Klq#C?mqu?]qoD]$ns8;]hrVZHj#Q"8nqu$6h
+qVhGbqY^?js82ZkrV?BirV?<dl2M(dqtU*cqu$Bkrql`krosFhq#C*ar;-6ds8Vuqq>U]sr;?Nk
+q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_
+rq6p$q#$58P)te+"UtP:"TrT<jSs`~>
+mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q
+ruq7<s8)cfr;?HiqYpKmr;?QorqlNhq#(!gqu6Klq#C?mqu?]qoD]$ns8;]hrVZHj#Q"8nqu$6h
+qVhGbqY^?js82ZkrV?BirV?<dl2M(dqtU*cqu$Bkrql`krosFhq#C*ar;-6ds8Vuqq>U]sr;?Nk
+q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_
+rq6p$q#$58P)te+"UtP:"TrT<jSs`~>
+mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q
+ruq7<s8)cfr;?HiqYpKmr;?QorqlNhq#(!gqu6Klq#C?mqu?]qoD]$ns8;]hrVZHj#Q"8nqu$6h
+qVhGbqY^?js82ZkrV?BirV?<dl2M(dqtU*cqu$Bkrql`krosFhq#C*ar;-6ds8Vuqq>U]sr;?Nk
+q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_
+rq6p$q#$58P)te+"UtP:"TrT<jSs`~>
+mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<"
+pAX[_q$Hiqp](6lrVcZorql`ks8</uq#:'fr;6Ekrr<#toD]$krVcHhq>9pd#4qfjrVQEaiVsGd
+q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b
+rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d
+p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~>
+mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<"
+pAX[_q$Hiqp](6lrVcZorql`ks8</uq#:'fr;6Ekrr<#toD]$krVcHhq>9pd#4qfjrVQEaiVsGd
+q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b
+rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d
+p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~>
+mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<"
+pAX[_q$Hiqp](6lrVcZorql`ks8</uq#:'fr;6Ekrr<#toD]$krVcHhq>9pd#4qfjrVQEaiVsGd
+q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b
+rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d
+p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~>
+nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!<WW."$uq\q>L<h$2F2lr;?Nms8W)<
+s8;j=qt0dbp&=pfrU^!_o_AIarqQBioDJ@[rqZKdr:p<hr;-Blrq$-prV??hq>L<erqd-%rVc`p
+qtpEas7lBdi;X;_rqcBcs7lQVs8;Eds8D3^$2sf$rpp!UrVZTjr<**!rVZWk!WE#`rri?!q#Bm`
+rr;iqr;?Nhr!35fs8)Nhq#(-ir;PmZs8N&ss8EB$o)J[\rqcQkrVlfrs8MQg$2sf$rpp!UrVZTj
+r<**!rVZWk!WE#@ru_"7rB0oJr:p3bq"+=Vq#:$frVl`nq"X[Xpq=PV^&@$lJ,~>
+nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!<WW."$uq\q>L<h$2F2lr;?Nms8W)<
+s8;j=qt0dbp&=pfrU^!_o_AIarqQBioDJ@[rqZKdr:p<hr;-Blrq$-prV??hq>L<erqd-%rVc`p
+qtpEas7lBdi;X;_rqcBcs7lQVs8;Eds8D3^$2sf$rpp!UrVZTjr<**!rVZWk!WE#`rri?!q#Bm`
+rr;iqr;?Nhr!35fs8)Nhq#(-ir;PmZs8N&ss8EB$o)J[\rqcQkrVlfrs8MQg$2sf$rpp!UrVZTj
+r<**!rVZWk!WE#@ru_"7rB0oJr:p3bq"+=Vq#:$frVl`nq"X[Xpq=PV^&@$lJ,~>
+nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!<WW."$uq\q>L<h$2F2lr;?Nms8W)<
+s8;j=qt0dbp&=pfrU^!_o_AIarqQBioDJ@[rqZKdr:p<hr;-Blrq$-prV??hq>L<erqd-%rVc`p
+qtpEas7lBdi;X;_rqcBcs7lQVs8;Eds8D3^$2sf$rpp!UrVZTjr<**!rVZWk!WE#`rri?!q#Bm`
+rr;iqr;?Nhr!35fs8)Nhq#(-ir;PmZs8N&ss8EB$o)J[\rqcQkrVlfrs8MQg$2sf$rpp!UrVZTj
+r<**!rVZWk!WE#@ru_"7rB0oJr:p3bq"+=Vq#:$frVl`nq"X[Xpq=PV^&@$lJ,~>
+nc/Ufs8W,u0`Ck<s8)HheCam)!sSN"o(r:b!rrE,!!EK."p"r/$R?tqpAY'`rVQQkr;HWps8L(=
+-3!l at r;HTnr:U*doDegZr$3^</L3"r.OHDh,VT/ppAOj`pAOd`r;Z`qrq$-poD8IXrU0FYrqlcp
+rVd'#rr;oqnG_b4rsn`$pA+I[oDA:ZpAXmfq<7hbrqcZpq=FOXrVcWm$NL,(r;6?equ$Elm/IFh
+rVHEgoDeO\qu$*c#5J,gr;?Terqufp!<2'Z!<2rq$i]Vjp%SFTqYU3hrr2rtrpg!prqcZpq=FOX
+rVcWm$NL,(r;6?equ$Elbl8d_oIU.j/L2_>qtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~>
+nc/Ufs8W,u0`Ck<s8)HheCam)!sSN"o(r:b!rrE,!!EK."p"r/$R?tqpAY'`rVQQkr;HWps8L(=
+-3!l at r;HTnr:U*doDegZr$3^</L3"r.OHDh,VT/ppAOj`pAOd`r;Z`qrq$-poD8IXrU0FYrqlcp
+rVd'#rr;oqnG_b4rsn`$pA+I[oDA:ZpAXmfq<7hbrqcZpq=FOXrVcWm$NL,(r;6?equ$Elm/IFh
+rVHEgoDeO\qu$*c#5J,gr;?Terqufp!<2'Z!<2rq$i]Vjp%SFTqYU3hrr2rtrpg!prqcZpq=FOX
+rVcWm$NL,(r;6?equ$Elbl8d_oIU.j/L2_>qtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~>
+nc/Ufs8W,u0`Ck<s8)HheCam)!sSN"o(r:b!rrE,!!EK."p"r/$R?tqpAY'`rVQQkr;HWps8L(=
+-3!l at r;HTnr:U*doDegZr$3^</L3"r.OHDh,VT/ppAOj`pAOd`r;Z`qrq$-poD8IXrU0FYrqlcp
+rVd'#rr;oqnG_b4rsn`$pA+I[oDA:ZpAXmfq<7hbrqcZpq=FOXrVcWm$NL,(r;6?equ$Elm/IFh
+rVHEgoDeO\qu$*c#5J,gr;?Terqufp!<2'Z!<2rq$i]Vjp%SFTqYU3hrr2rtrpg!prqcZpq=FOX
+rVcWm$NL,(r;6?equ$Elbl8d_oIU.j/L2_>qtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~>
+nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!<rN5!sATA!Wi?@%/Bhrq=spdr;HWps8L(=
+!WN#rq]Ph3p%\Ra%1EXe'*A4;#mC;@!!!'''EAgV%hB*Hp\FX^r;Z`qrq$0irWW2ss8Mlhrr)lr
+rr36"s8Mrhrr2`Ps8N!#q>U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq
+!<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg
+)Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr<uN!=&oC$lBNali-h\q=jmcp\t'h
+qZ$9crqZQSs*t~>
+nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!<rN5!sATA!Wi?@%/Bhrq=spdr;HWps8L(=
+!WN#rq]Ph3p%\Ra%1EXe'*A4;#mC;@!!!'''EAgV%hB*Hp\FX^r;Z`qrq$0irWW2ss8Mlhrr)lr
+rr36"s8Mrhrr2`Ps8N!#q>U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq
+!<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg
+)Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr<uN!=&oC$lBNali-h\q=jmcp\t'h
+qZ$9crqZQSs*t~>
+nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!<rN5!sATA!Wi?@%/Bhrq=spdr;HWps8L(=
+!WN#rq]Ph3p%\Ra%1EXe'*A4;#mC;@!!!'''EAgV%hB*Hp\FX^r;Z`qrq$0irWW2ss8Mlhrr)lr
+rr36"s8Mrhrr2`Ps8N!#q>U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq
+!<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg
+)Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr<uN!=&oC$lBNali-h\q=jmcp\t'h
+qZ$9crqZQSs*t~>
+mJd4drVl^Iq"t$iqY^<lo`"jbqYp6f!!*'""T\f0!<<--!!<B/!!<?(li6;Lr;?Nms8W)Os8N#r
+s8W)urs/Q'rr;uss8;il,l?os"9AW+$3UM4#6b)0!s&B5"U4u-'EA4>!!N?-!!;ZZrVZZn!rW&r
+rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg
+!<3'&!!*'#!WE''!<WH#qu6Worp]pkrVZWorW2rt!W`9%rW)s!$ig;.!<E0#qu-<gqZ$NmrVl$\
+s8N#p"oS>u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII
++8,R2rqd'7$P<C@!!!?+!XS;dk4A6 at rr;ZdrquNjroF*0~>
+mJd4drVl^Iq"t$iqY^<lo`"jbqYp6f!!*'""T\f0!<<--!!<B/!!<?(li6;Lr;?Nms8W)Os8N#r
+s8W)urs/Q'rr;uss8;il,l?os"9AW+$3UM4#6b)0!s&B5"U4u-'EA4>!!N?-!!;ZZrVZZn!rW&r
+rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg
+!<3'&!!*'#!WE''!<WH#qu6Worp]pkrVZWorW2rt!W`9%rW)s!$ig;.!<E0#qu-<gqZ$NmrVl$\
+s8N#p"oS>u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII
++8,R2rqd'7$P<C@!!!?+!XS;dk4A6 at rr;ZdrquNjroF*0~>
+mJd4drVl^Iq"t$iqY^<lo`"jbqYp6f!!*'""T\f0!<<--!!<B/!!<?(li6;Lr;?Nms8W)Os8N#r
+s8W)urs/Q'rr;uss8;il,l?os"9AW+$3UM4#6b)0!s&B5"U4u-'EA4>!!N?-!!;ZZrVZZn!rW&r
+rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg
+!<3'&!!*'#!WE''!<WH#qu6Worp]pkrVZWorW2rt!W`9%rW)s!$ig;.!<E0#qu-<gqZ$NmrVl$\
+s8N#p"oS>u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII
++8,R2rqd'7$P<C@!!!?+!XS;dk4A6 at rr;ZdrquNjroF*0~>
+i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1
+!rrW2!!3Q/"U4r0!rrT-"pFu5!<NB(!s/K)!8H9-r;QHio_AC`s8Mulrr`9#rW2uu&ci1;"98N.
+!!!$$!!30&q>L<li;X&`!!**#!<3#sk5QP&q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHN`
+ruq@<s7cNl-NF5L!<N6&!WW3'"9AW*"9\]*gZn_9mJ[%`j8Tbjq>U6^pA"U@!XA]-!!abGr;HQm
+nc'^1q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&<
+!sdW2gXFpRqtp?Ps*t~>
+i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1
+!rrW2!!3Q/"U4r0!rrT-"pFu5!<NB(!s/K)!8H9-r;QHio_AC`s8Mulrr`9#rW2uu&ci1;"98N.
+!!!$$!!30&q>L<li;X&`!!**#!<3#sk5QP&q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHN`
+ruq@<s7cNl-NF5L!<N6&!WW3'"9AW*"9\]*gZn_9mJ[%`j8Tbjq>U6^pA"U@!XA]-!!abGr;HQm
+nc'^1q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&<
+!sdW2gXFpRqtp?Ps*t~>
+i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1
+!rrW2!!3Q/"U4r0!rrT-"pFu5!<NB(!s/K)!8H9-r;QHio_AC`s8Mulrr`9#rW2uu&ci1;"98N.
+!!!$$!!30&q>L<li;X&`!!**#!<3#sk5QP&q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHN`
+ruq@<s7cNl-NF5L!<N6&!WW3'"9AW*"9\]*gZn_9mJ[%`j8Tbjq>U6^pA"U@!XA]-!!abGr;HQm
+nc'^1q>U0g!=8f-%0HV<!!<<'!s&`6!"8n\q>L?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&<
+!sdW2gXFpRqtp?Ps*t~>
+i;`cT')h_&s#:#f!X8Z/!<<H,"p=o,rW!!#!!(@F!<2ip5Q(ERrVQ?cqu$?irPHDO!X&W4!sB8>
+!W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E)
+!!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2
+q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^<jr;Q6d
++8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrR:fHrZ:t2qtU*cqtU-]rqH6_3'0;g!>>kA
+!s\f+!lMjl]]9$B~>
+i;`cT')h_&s#:#f!X8Z/!<<H,"p=o,rW!!#!!(@F!<2ip5Q(ERrVQ?cqu$?irPHDO!X&W4!sB8>
+!W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E)
+!!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2
+q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^<jr;Q6d
++8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrR:fHrZ:t2qtU*cqtU-]rqH6_3'0;g!>>kA
+!s\f+!lMjl]]9$B~>
+i;`cT')h_&s#:#f!X8Z/!<<H,"p=o,rW!!#!!(@F!<2ip5Q(ERrVQ?cqu$?irPHDO!X&W4!sB8>
+!W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E)
+!!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2
+q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^<jr;Q6d
++8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrR:fHrZ:t2qtU*cqtU-]rqH6_3'0;g!>>kA
+!s\f+!lMjl]]9$B~>
+i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A at aWW<8'#6G>9$P*4C
+>>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/
+!s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk
+rVlBf+oM<:q#BsW%0-J:!<Nf4"p##2"9T#5"9nr/VZ-8cqu6TTs8W$1s82T[qPsT#!so,9;#g at f
+qu-Nbs8Dp>rV6<j!W`f7#6tD9!sAW+!!!')!tG;5!NH(rqZ$Klrm^uJrY"i#r:TgTo`+dbrUg$b
+p&=ga=8c(t!X8i6!X&Q,r8dm.~>
+i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A at aWW<8'#6G>9$P*4C
+>>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/
+!s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk
+rVlBf+oM<:q#BsW%0-J:!<Nf4"p##2"9T#5"9nr/VZ-8cqu6TTs8W$1s82T[qPsT#!so,9;#g at f
+qu-Nbs8Dp>rV6<j!W`f7#6tD9!sAW+!!!')!tG;5!NH(rqZ$Klrm^uJrY"i#r:TgTo`+dbrUg$b
+p&=ga=8c(t!X8i6!X&Q,r8dm.~>
+i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A at aWW<8'#6G>9$P*4C
+>>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/
+!s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk
+rVlBf+oM<:q#BsW%0-J:!<Nf4"p##2"9T#5"9nr/VZ-8cqu6TTs8W$1s82T[qPsT#!so,9;#g at f
+qu-Nbs8Dp>rV6<j!W`f7#6tD9!sAW+!!!')!tG;5!NH(rqZ$Klrm^uJrY"i#r:TgTo`+dbrUg$b
+p&=ga=8c(t!X8i6!X&Q,r8dm.~>
+huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W
+F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$
+CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp
+rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu)
+rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e
+o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~>
+huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W
+F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$
+CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp
+rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu)
+rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e
+o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~>
+huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W
+F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$
+CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp
+rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu)
+rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e
+o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~>
+iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1
+K7E[kqY1!fq]c"<qu6Kjr:^'eq=aj_pAKAlK)l;[#QY#3!!%<=rV$'dq>U?lrr2p"rr;rurW!H1
+q>9s]s7lQk!<r]/!X/MYrs/W*!<E0#rr;r`s8W)urVud>q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9
+!t"eur;-6hr;HWeruq@<qt9gYpAY-u!<`N*s8)?`oDSCVN=#gn#RGbRp at eLbj8Tehq==RYq>UU$
+!sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L
+rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~>
+iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1
+K7E[kqY1!fq]c"<qu6Kjr:^'eq=aj_pAKAlK)l;[#QY#3!!%<=rV$'dq>U?lrr2p"rr;rurW!H1
+q>9s]s7lQk!<r]/!X/MYrs/W*!<E0#rr;r`s8W)urVud>q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9
+!t"eur;-6hr;HWeruq@<qt9gYpAY-u!<`N*s8)?`oDSCVN=#gn#RGbRp at eLbj8Tehq==RYq>UU$
+!sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L
+rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~>
+iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1
+K7E[kqY1!fq]c"<qu6Kjr:^'eq=aj_pAKAlK)l;[#QY#3!!%<=rV$'dq>U?lrr2p"rr;rurW!H1
+q>9s]s7lQk!<r]/!X/MYrs/W*!<E0#rr;r`s8W)urVud>q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9
+!t"eur;-6hr;HWeruq@<qt9gYpAY-u!<`N*s8)?`oDSCVN=#gn#RGbRp at eLbj8Tehq==RYq>UU$
+!sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L
+rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~>
+iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8<c3q"OR`qs%Vp!sAu4#7LX'
+R/HXRpAFddr[%U>rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u
+!"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2!<Zp1r;-0^qtloj
+#QP#7 at eouqr:U!drr)isrqZToq]Ge3p[@qVS-8or"TW-2q!RkTqY0jm!=8`4"8;Qdrr1sX'`.h(
+kkb*a!s8c0!!E5jr:g!_qu-0e./s2Dr;6Bfs7cj,$O-V3$3:6?qu$<bp\XiY#m^M7$"E`/p&+L\
+rVlcq!<1aQs8F,:r;-3ep\Fae@:EhVB*8A=$NU;1"9\r3!X/T0"p"Y`s*t~>
+iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8<c3q"OR`qs%Vp!sAu4#7LX'
+R/HXRpAFddr[%U>rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u
+!"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2!<Zp1r;-0^qtloj
+#QP#7 at eouqr:U!drr)isrqZToq]Ge3p[@qVS-8or"TW-2q!RkTqY0jm!=8`4"8;Qdrr1sX'`.h(
+kkb*a!s8c0!!E5jr:g!_qu-0e./s2Dr;6Bfs7cj,$O-V3$3:6?qu$<bp\XiY#m^M7$"E`/p&+L\
+rVlcq!<1aQs8F,:r;-3ep\Fae@:EhVB*8A=$NU;1"9\r3!X/T0"p"Y`s*t~>
+iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8<c3q"OR`qs%Vp!sAu4#7LX'
+R/HXRpAFddr[%U>rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u
+!"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2!<Zp1r;-0^qtloj
+#QP#7 at eouqr:U!drr)isrqZToq]Ge3p[@qVS-8or"TW-2q!RkTqY0jm!=8`4"8;Qdrr1sX'`.h(
+kkb*a!s8c0!!E5jr:g!_qu-0e./s2Dr;6Bfs7cj,$O-V3$3:6?qu$<bp\XiY#m^M7$"E`/p&+L\
+rVlcq!<1aQs8F,:r;-3ep\Fae@:EhVB*8A=$NU;1"9\r3!X/T0"p"Y`s*t~>
+iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd
+p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt%
+g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar
+Up0n!<iK-"o\;prqcNirr)isrqZR;rVZZmq"k!fpBgs%!s]&,r:g$ep&=ag%KZh:"o at uhrr1sX'
+E7e)o_eXf#QY/6!!`2ms8;fnrVlcrrV-=?rr)cmqtp6i9EY_'"onc2!!r](rV?0arUp0n!<iK-"
+o\;prqcNirr)isrnIJQrZD%9q>*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~>
+iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd
+p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt%
+g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar
+Up0n!<iK-"o\;prqcNirr)isrqZR;rVZZmq"k!fpBgs%!s]&,r:g$ep&=ag%KZh:"o at uhrr1sX'
+E7e)o_eXf#QY/6!!`2ms8;fnrVlcrrV-=?rr)cmqtp6i9EY_'"onc2!!r](rV?0arUp0n!<iK-"
+o\;prqcNirr)isrnIJQrZD%9q>*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~>
+iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd
+p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt%
+g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar
+Up0n!<iK-"o\;prqcNirr)isrqZR;rVZZmq"k!fpBgs%!s]&,r:g$ep&=ag%KZh:"o at uhrr1sX'
+E7e)o_eXf#QY/6!!`2ms8;fnrVlcrrV-=?rr)cmqtp6i9EY_'"onc2!!r](rV?0arUp0n!<iK-"
+o\;prqcNirr)isrnIJQrZD%9q>*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~>
+iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$<m[
+!WW6)!"&l,qtg6frV?Hks8;or-iO&Ds8DorrVZ]prr;urqt^$\rVt*T!XAf.!=8c,s7QEhr;HTn
+rr2rtrW2rurW!3)rVulsrql`or;ciu!;u]n!<2-\!WE,t!!<0"rU0\=q>^HhrpB^Ur:^Bq$3151
+!<N?*$2X]!o`+shp<3L@!<EQ`q"=Xbqtp<ks8Murq#CBn,lRZ>r;?7#!"&]3#;PrHrU]sYrQGBP
+!X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB(
+!WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/<!=0&7#64c-"U+o1"p+f/
+":PP9!s/;[s*t~>
+iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$<m[
+!WW6)!"&l,qtg6frV?Hks8;or-iO&Ds8DorrVZ]prr;urqt^$\rVt*T!XAf.!=8c,s7QEhr;HTn
+rr2rtrW2rurW!3)rVulsrql`or;ciu!;u]n!<2-\!WE,t!!<0"rU0\=q>^HhrpB^Ur:^Bq$3151
+!<N?*$2X]!o`+shp<3L@!<EQ`q"=Xbqtp<ks8Murq#CBn,lRZ>r;?7#!"&]3#;PrHrU]sYrQGBP
+!X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB(
+!WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/<!=0&7#64c-"U+o1"p+f/
+":PP9!s/;[s*t~>
+iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$<m[
+!WW6)!"&l,qtg6frV?Hks8;or-iO&Ds8DorrVZ]prr;urqt^$\rVt*T!XAf.!=8c,s7QEhr;HTn
+rr2rtrW2rurW!3)rVulsrql`or;ciu!;u]n!<2-\!WE,t!!<0"rU0\=q>^HhrpB^Ur:^Bq$3151
+!<N?*$2X]!o`+shp<3L@!<EQ`q"=Xbqtp<ks8Murq#CBn,lRZ>r;?7#!"&]3#;PrHrU]sYrQGBP
+!X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB(
+!WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/<!=0&7#64c-"U+o1"p+f/
+":PP9!s/;[s*t~>
+dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o
+rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t
+!!<0"rU0\<rpB7Tqu$0dq>L[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u
+rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp at S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis
+rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9
+!!`c4$3UG;"9JQ*#QY53#m(23!<EW0jSIs;J,~>
+dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o
+rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t
+!!<0"rU0\<rpB7Tqu$0dq>L[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u
+rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp at S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis
+rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9
+!!`c4$3UG;"9JQ*#QY53#m(23!<EW0jSIs;J,~>
+dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o
+rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t
+!!<0"rU0\<rpB7Tqu$0dq>L[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u
+rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp at S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis
+rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9
+!!`c4$3UG;"9JQ*#QY53#m(23!<EW0jSIs;J,~>
+dJk$^qYpElr;QTg!!iQ)$ig)&r;-<is8W)MrtYP5s8Mupn+ukq!!3E+"9f&2!<W<0rqlQis8;rs
+pAZ*2s8W)tr;6?go_nagmelhi!!`]1o_nacr;HWkrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs"=9LrquHhjnSfV!"Ao4#m()/!s&E-r:L$]oD\.W!!!??!"&SooDAF]r;Zfrrq?Blrr2j=
+r:p$p!!ErB!<2]hq=ssgq!JCl!=Af2roWkNrq,p`q!%hYrXnr)!WW6(!Xf#"p\t*iq>1$grr2ut
+q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k<RH
+!!!0&!!`K*!!E9'$31)0!rr?!qYC'VroF*0~>
+dJk$^qYpElr;QTg!!iQ)$ig)&r;-<is8W)MrtYP5s8Mupn+ukq!!3E+"9f&2!<W<0rqlQis8;rs
+pAZ*2s8W)tr;6?go_nagmelhi!!`]1o_nacr;HWkrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs"=9LrquHhjnSfV!"Ao4#m()/!s&E-r:L$]oD\.W!!!??!"&SooDAF]r;Zfrrq?Blrr2j=
+r:p$p!!ErB!<2]hq=ssgq!JCl!=Af2roWkNrq,p`q!%hYrXnr)!WW6(!Xf#"p\t*iq>1$grr2ut
+q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k<RH
+!!!0&!!`K*!!E9'$31)0!rr?!qYC'VroF*0~>
+dJk$^qYpElr;QTg!!iQ)$ig)&r;-<is8W)MrtYP5s8Mupn+ukq!!3E+"9f&2!<W<0rqlQis8;rs
+pAZ*2s8W)tr;6?go_nagmelhi!!`]1o_nacr;HWkrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs"=9LrquHhjnSfV!"Ao4#m()/!s&E-r:L$]oD\.W!!!??!"&SooDAF]r;Zfrrq?Blrr2j=
+r:p$p!!ErB!<2]hq=ssgq!JCl!=Af2roWkNrq,p`q!%hYrXnr)!WW6(!Xf#"p\t*iq>1$grr2ut
+q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k<RH
+!!!0&!!`K*!!E9'$31)0!rr?!qYC'VroF*0~>
+dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s
+r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_<!r_obrUg*[oEYI#!WWc0rV??eqsj^brZM1;q#(9u
+!=]#/rUg*`pAFmf#QY#3!=\JrrVl`prr)W[s8W)tr=f"trq-s*%fcq;,lRQ6rqH<frVlKi.fTD@
+q#:*hrSn%e!!rW.)ZB^G!=/i1rV5s^o`"FR#QY&0!"]&,q>:$ceGgW_rWiK.!<<68#6G#:!!<KH
+,S_%7p[S7^rTa at BrqlWSs*t~>
+dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s
+r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_<!r_obrUg*[oEYI#!WWc0rV??eqsj^brZM1;q#(9u
+!=]#/rUg*`pAFmf#QY#3!=\JrrVl`prr)W[s8W)tr=f"trq-s*%fcq;,lRQ6rqH<frVlKi.fTD@
+q#:*hrSn%e!!rW.)ZB^G!=/i1rV5s^o`"FR#QY&0!"]&,q>:$ceGgW_rWiK.!<<68#6G#:!!<KH
+,S_%7p[S7^rTa at BrqlWSs*t~>
+dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s
+r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_<!r_obrUg*[oEYI#!WWc0rV??eqsj^brZM1;q#(9u
+!=]#/rUg*`pAFmf#QY#3!=\JrrVl`prr)W[s8W)tr=f"trq-s*%fcq;,lRQ6rqH<frVlKi.fTD@
+q#:*hrSn%e!!rW.)ZB^G!=/i1rV5s^o`"FR#QY&0!"]&,q>:$ceGgW_rWiK.!<<68#6G#:!!<KH
+,S_%7p[S7^rTa at BrqlWSs*t~>
+dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl
+rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2
+qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5
+_Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q
+!X&N/!XK#-r[S$Z!<NSTrVu?dqt'b<%0Zb6!7L95qtg3hrrE&Nru_74!s/N2"To&5$8=%`2*1U/
+q>U*Wr:g'YrU9[\r;PdWJ,~>
+dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl
+rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2
+qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5
+_Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q
+!X&N/!XK#-r[S$Z!<NSTrVu?dqt'b<%0Zb6!7L95qtg3hrrE&Nru_74!s/N2"To&5$8=%`2*1U/
+q>U*Wr:g'YrU9[\r;PdWJ,~>
+dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl
+rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2
+qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5
+_Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q
+!X&N/!XK#-r[S$Z!<NSTrVu?dqt'b<%0Zb6!7L95qtg3hrrE&Nru_74!s/N2"To&5$8=%`2*1U/
+q>U*Wr:g'YrU9[\r;PdWJ,~>
+dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk
+!<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DBc0)Y\G
+p&=d_quI',!"/itrVcBr!XK/<!VuclrqQKfr;d$)#6P2.p\Xgbs8W)tnGa4#p&Fpj!!iQ+#Q48j
+q>U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29
+!_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY
+qYU0cs7Q9fj8XW~>
+dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk
+!<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DBc0)Y\G
+p&=d_quI',!"/itrVcBr!XK/<!VuclrqQKfr;d$)#6P2.p\Xgbs8W)tnGa4#p&Fpj!!iQ+#Q48j
+q>U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29
+!_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY
+qYU0cs7Q9fj8XW~>
+dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk
+!<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DBc0)Y\G
+p&=d_quI',!"/itrVcBr!XK/<!VuclrqQKfr;d$)#6P2.p\Xgbs8W)tnGa4#p&Fpj!!iQ+#Q48j
+q>U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29
+!_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY
+qYU0cs7Q9fj8XW~>
+dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g
+rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h
+oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_
+qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=- at s82feqk*ol!!E?.
+qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[
+pA4[bs7i;djSs`~>
+dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g
+rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h
+oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_
+qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=- at s82feqk*ol!!E?.
+qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[
+pA4[bs7i;djSs`~>
+dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g
+rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h
+oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_
+qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=- at s82feqk*ol!!E?.
+qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[
+pA4[bs7i;djSs`~>
+mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9
+qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis!<N/UrrN*"
+qu?fts8DZkrr2lr0E2"Br;--ep&G@#!X/T.p&4g`HNsNQ#69JLqu$<iqtg0q!!ic7!r`#oqu6Tm
+rUBh/qu?QbE"2mO"U9eXrUg-cr;?Bm!s/H."o/#ip\apfnc'F'rr2lpp%\=\q?$^&!<iQ,pA=me
+rVQKirr2rsrr)jMrr;QeqY's_!!iZ."T\f"rVZG;#64i2!/:%Ar;-EiqYLNu#R1P9rVQNirr2io
+f`)!IpAXq-p\F[VrVu`jr;$$arq?Bhp%\C]Mh?bALC!h=s*t~>
+mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9
+qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis!<N/UrrN*"
+qu?fts8DZkrr2lr0E2"Br;--ep&G@#!X/T.p&4g`HNsNQ#69JLqu$<iqtg0q!!ic7!r`#oqu6Tm
+rUBh/qu?QbE"2mO"U9eXrUg-cr;?Bm!s/H."o/#ip\apfnc'F'rr2lpp%\=\q?$^&!<iQ,pA=me
+rVQKirr2rsrr)jMrr;QeqY's_!!iZ."T\f"rVZG;#64i2!/:%Ar;-EiqYLNu#R1P9rVQNirr2io
+f`)!IpAXq-p\F[VrVu`jr;$$arq?Bhp%\C]Mh?bALC!h=s*t~>
+mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9
+qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis!<N/UrrN*"
+qu?fts8DZkrr2lr0E2"Br;--ep&G@#!X/T.p&4g`HNsNQ#69JLqu$<iqtg0q!!ic7!r`#oqu6Tm
+rUBh/qu?QbE"2mO"U9eXrUg-cr;?Bm!s/H."o/#ip\apfnc'F'rr2lpp%\=\q?$^&!<iQ,pA=me
+rVQKirr2rsrr)jMrr;QeqY's_!!iZ."T\f"rVZG;#64i2!/:%Ar;-EiqYLNu#R1P9rVQNirr2io
+f`)!IpAXq-p\F[VrVu`jr;$$arq?Bhp%\C]Mh?bALC!h=s*t~>
+mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f
+oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr at g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm
+nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe
+q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up at 8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci
+q=a^]p&=jdp\4R`qYU<crVcWnDKBc7EruOG"UkJ3jSs`~>
+mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f
+oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr at g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm
+nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe
+q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up at 8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci
+q=a^]p&=jdp\4R`qYU<crVcWnDKBc7EruOG"UkJ3jSs`~>
+mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f
+oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr at g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm
+nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe
+q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up at 8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci
+q=a^]p&=jdp\4R`qYU<crVcWnDKBc7EruOG"UkJ3jSs`~>
+mf3=dqYgBl&,c(sr:Tm_p\js_rUTp_q>C6lr"/`&oCr:Vqtp6eqYU3is8W)OrtPJ(qtTsb"Tec1
+!X,Ctn,*%^!<<3#!<<&XrrN,trqu`ns8MTh!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk
+!<2ip0DG&9n,3%b!s&T.!!3#mq=jpfV?m\5!sDa'o)JObq=pZi#lt;<=T.d_s7ZHgqsj\.r;QNf
+rh^#&#lt'4q=ja]rV65f!!3<(!XJStpAOpcrr2Qi(]O+)p\jpQr;9Xt"ptY<"8Vogrq$0fqt^6l
+rqcXJp[\:Or;-Qu!<rW+!W;`gp](2h#n6q<"BbQls7uZipnA$#!=0!6rUKR\pAXpcg&E/dqYU*`
+rVcKio(rCdp\7ur='&K-!WrK*!s/Q+#RUChs*t~>
+mf3=dqYgBl&,c(sr:Tm_p\js_rUTp_q>C6lr"/`&oCr:Vqtp6eqYU3is8W)OrtPJ(qtTsb"Tec1
+!X,Ctn,*%^!<<3#!<<&XrrN,trqu`ns8MTh!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk
+!<2ip0DG&9n,3%b!s&T.!!3#mq=jpfV?m\5!sDa'o)JObq=pZi#lt;<=T.d_s7ZHgqsj\.r;QNf
+rh^#&#lt'4q=ja]rV65f!!3<(!XJStpAOpcrr2Qi(]O+)p\jpQr;9Xt"ptY<"8Vogrq$0fqt^6l
+rqcXJp[\:Or;-Qu!<rW+!W;`gp](2h#n6q<"BbQls7uZipnA$#!=0!6rUKR\pAXpcg&E/dqYU*`
+rVcKio(rCdp\7ur='&K-!WrK*!s/Q+#RUChs*t~>
+mf3=dqYgBl&,c(sr:Tm_p\js_rUTp_q>C6lr"/`&oCr:Vqtp6eqYU3is8W)OrtPJ(qtTsb"Tec1
+!X,Ctn,*%^!<<3#!<<&XrrN,trqu`ns8MTh!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk
+!<2ip0DG&9n,3%b!s&T.!!3#mq=jpfV?m\5!sDa'o)JObq=pZi#lt;<=T.d_s7ZHgqsj\.r;QNf
+rh^#&#lt'4q=ja]rV65f!!3<(!XJStpAOpcrr2Qi(]O+)p\jpQr;9Xt"ptY<"8Vogrq$0fqt^6l
+rqcXJp[\:Or;-Qu!<rW+!W;`gp](2h#n6q<"BbQls7uZipnA$#!=0!6rUKR\pAXpcg&E/dqYU*`
+rVcKio(rCdp\7ur='&K-!WrK*!s/Q+#RUChs*t~>
+mf*:drquippcoKU5sY>Bqt^4T5X.S#5XI_$5s[d757[GcqYU*bp\t-hr;Q`rrn7;hqtg$`p at e^k
+!<WB's8Mfkr;H]s!<<*#rr1pW!WN&sr;QZorpp'irW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"
+rUU!grr<!OrVH6_p-/fd!sSl/^A7I!r:g6^!<iZ5!=8Mtq"Xj]r:^3q!!*0'q>:!]qss^anGiOe
++8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e
+p&G'ks8ObNqY'^X56qDp"p=t at q=XX_p]'db"U555#l4>lq#9sapAkEt!<WE!qt]s_o)8O?rt>/+
+p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~>
+mf*:drquippcoKU5sY>Bqt^4T5X.S#5XI_$5s[d757[GcqYU*bp\t-hr;Q`rrn7;hqtg$`p at e^k
+!<WB's8Mfkr;H]s!<<*#rr1pW!WN&sr;QZorpp'irW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"
+rUU!grr<!OrVH6_p-/fd!sSl/^A7I!r:g6^!<iZ5!=8Mtq"Xj]r:^3q!!*0'q>:!]qss^anGiOe
++8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e
+p&G'ks8ObNqY'^X56qDp"p=t at q=XX_p]'db"U555#l4>lq#9sapAkEt!<WE!qt]s_o)8O?rt>/+
+p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~>
+mf*:drquippcoKU5sY>Bqt^4T5X.S#5XI_$5s[d757[GcqYU*bp\t-hr;Q`rrn7;hqtg$`p at e^k
+!<WB's8Mfkr;H]s!<<*#rr1pW!WN&sr;QZorpp'irW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"
+rUU!grr<!OrVH6_p-/fd!sSl/^A7I!r:g6^!<iZ5!=8Mtq"Xj]r:^3q!!*0'q>:!]qss^anGiOe
++8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e
+p&G'ks8ObNqY'^X56qDp"p=t at q=XX_p]'db"U555#l4>lq#9sapAkEt!<WE!qt]s_o)8O?rt>/+
+p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~>
+n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF?
+#R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabnc'g/
+rqZKloDf"&!"BJfoDSL_p at eO6!X/W/!\"*8r;?QlrVlHhs8E`*q#('_r?hXH!=/]1eGT4<q>U3`
+pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabg&E/b
+p\k*e-nm&$/-H.W!>#;5"U>&8!<<-2!=/c-#n?Cbs*t~>
+n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF?
+#R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabnc'g/
+rqZKloDf"&!"BJfoDSL_p at eO6!X/W/!\"*8r;?QlrVlHhs8E`*q#('_r?hXH!=/]1eGT4<q>U3`
+pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabg&E/b
+p\k*e-nm&$/-H.W!>#;5"U>&8!<<-2!=/c-#n?Cbs*t~>
+n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF?
+#R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabnc'g/
+rqZKloDf"&!"BJfoDSL_p at eO6!X/W/!\"*8r;?QlrVlHhs8E`*q#('_r?hXH!=/]1eGT4<q>U3`
+pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!<WW/!=Jf'r;H?frr(@P#R^V4-i`f:o_eabg&E/b
+p\k*e-nm&$/-H.W!>#;5"U>&8!<<-2!=/c-#n?Cbs*t~>
+n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG<qu6Worqucp!<(UN%0$)#s8)j*
+!!E9%s8)`o$2si(!!*'"!WN)Us8W)brrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!rr;rirrN,t
+rqufp0E1YDrr3'##6G)3mJc)Dqu6Hes6fpi!!<35qYp9crq-6i!!N?&%MeL2s7ZHirpg"4rqcWd
+rVl!e"TSQ)&,Z+pnG`=Zr=0&9#8.I;rVHNWqu$EkrrE&orsSSurq$0fr;R$'#Rp\4#la5grr)Qb
+rqQ9g!WN&sr;Z^Krq69irrW6+!X8boro*kRrqcEimf3Fi!rrr0rqQ<go`+mj"TSN4(%D/$pAY!h
+g&E/lrpUL:!!*9("pG#>!<N9'!!3H1$4-e8":5&9!s&;\s*t~>
+n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG<qu6Worqucp!<(UN%0$)#s8)j*
+!!E9%s8)`o$2si(!!*'"!WN)Us8W)brrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!rr;rirrN,t
+rqufp0E1YDrr3'##6G)3mJc)Dqu6Hes6fpi!!<35qYp9crq-6i!!N?&%MeL2s7ZHirpg"4rqcWd
+rVl!e"TSQ)&,Z+pnG`=Zr=0&9#8.I;rVHNWqu$EkrrE&orsSSurq$0fr;R$'#Rp\4#la5grr)Qb
+rqQ9g!WN&sr;Z^Krq69irrW6+!X8boro*kRrqcEimf3Fi!rrr0rqQ<go`+mj"TSN4(%D/$pAY!h
+g&E/lrpUL:!!*9("pG#>!<N9'!!3H1$4-e8":5&9!s&;\s*t~>
+n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG<qu6Worqucp!<(UN%0$)#s8)j*
+!!E9%s8)`o$2si(!!*'"!WN)Us8W)brrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!rr;rirrN,t
+rqufp0E1YDrr3'##6G)3mJc)Dqu6Hes6fpi!!<35qYp9crq-6i!!N?&%MeL2s7ZHirpg"4rqcWd
+rVl!e"TSQ)&,Z+pnG`=Zr=0&9#8.I;rVHNWqu$EkrrE&orsSSurq$0fr;R$'#Rp\4#la5grr)Qb
+rqQ9g!WN&sr;Z^Krq69irrW6+!X8boro*kRrqcEimf3Fi!rrr0rqQ<go`+mj"TSN4(%D/$pAY!h
+g&E/lrpUL:!!*9("pG#>!<N9'!!3H1$4-e8":5&9!s&;\s*t~>
+n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu at B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55(
+rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh
+nc'g3q>U$clM_"u!<<c5p\spdrqQNmo)K!q&HDt%qYpKjqu-Kn!<2fo(]OC4rp]jb!!!3-!"B&0
+q#:*arqcHirqHEprr)cmrquokqt'de-jK_P(%qA%nb<%YrVl"#"Ter2$hjAhrq69[rX]&9"TSPs
+p\"O_rV5(G$2XN"$31>3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~>
+n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu at B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55(
+rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh
+nc'g3q>U$clM_"u!<<c5p\spdrqQNmo)K!q&HDt%qYpKjqu-Kn!<2fo(]OC4rp]jb!!!3-!"B&0
+q#:*arqcHirqHEprr)cmrquokqt'de-jK_P(%qA%nb<%YrVl"#"Ter2$hjAhrq69[rX]&9"TSPs
+p\"O_rV5(G$2XN"$31>3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~>
+n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu at B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55(
+rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p!
+rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh
+nc'g3q>U$clM_"u!<<c5p\spdrqQNmo)K!q&HDt%qYpKjqu-Kn!<2fo(]OC4rp]jb!!!3-!"B&0
+q#:*arqcHirqHEprr)cmrquokqt'de-jK_P(%qA%nb<%YrVl"#"Ter2$hjAhrq69[rX]&9"TSPs
+p\"O_rV5(G$2XN"$31>3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~>
+n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l
+rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU
+!W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H,
+rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d&
+!!<BPp&=acqY^BnpAXmf"9/?"rVl^JrVZKihZ3cc!!3HLnb)nNrr)]lmJln]"9no-!WDuirqZQh
+rr<<+!<iT(r:U'`gAh3Ps8<r?!X8l0!tkSI"T\W,!WrQ-!!rW+"<Sd0+TDB:qW.[,~>
+n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l
+rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU
+!W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H,
+rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d&
+!!<BPp&=acqY^BnpAXmf"9/?"rVl^JrVZKihZ3cc!!3HLnb)nNrr)]lmJln]"9no-!WDuirqZQh
+rr<<+!<iT(r:U'`gAh3Ps8<r?!X8l0!tkSI"T\W,!WrQ-!!rW+"<Sd0+TDB:qW.[,~>
+n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l
+rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU
+!W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H,
+rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d&
+!!<BPp&=acqY^BnpAXmf"9/?"rVl^JrVZKihZ3cc!!3HLnb)nNrr)]lmJln]"9no-!WDuirqZQh
+rr<<+!<iT(r:U'`gAh3Ps8<r?!X8l0!tkSI"T\W,!WrQ-!!rW+"<Sd0+TDB:qW.[,~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*"
+!<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk2u`jW
+rr)`iq#C3`!Xf#5"9So/qtU0iqu6Wgr;ZKu"9]/9"o%o^rV-<hr\src!<WMAq"jmdrpg$drZ1t8
+r&Or]#6k1Mqu-0`o_JGF!!E9&"ipQ;qYgBlo`#O!pAY$gqo/X:"TSN,qY0mdrq$.Krr<#trVQEc
+s8)Bi$NUG7!sel'q#:9irr;Zhs7Zj'":YG:p\XCWp\t*i3!'Be!sQO9qYU6jg].<Q+85[9%g<%=
+!W`B-!!3?0!!5)?2%]fj"8DcarV?EhroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*"
+!<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk2u`jW
+rr)`iq#C3`!Xf#5"9So/qtU0iqu6Wgr;ZKu"9]/9"o%o^rV-<hr\src!<WMAq"jmdrpg$drZ1t8
+r&Or]#6k1Mqu-0`o_JGF!!E9&"ipQ;qYgBlo`#O!pAY$gqo/X:"TSN,qY0mdrq$.Krr<#trVQEc
+s8)Bi$NUG7!sel'q#:9irr;Zhs7Zj'":YG:p\XCWp\t*i3!'Be!sQO9qYU6jg].<Q+85[9%g<%=
+!W`B-!!3?0!!5)?2%]fj"8DcarV?EhroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*"
+!<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis!<N/UrrN*"qu?fts8DZk2u`jW
+rr)`iq#C3`!Xf#5"9So/qtU0iqu6Wgr;ZKu"9]/9"o%o^rV-<hr\src!<WMAq"jmdrpg$drZ1t8
+r&Or]#6k1Mqu-0`o_JGF!!E9&"ipQ;qYgBlo`#O!pAY$gqo/X:"TSN,qY0mdrq$.Krr<#trVQEc
+s8)Bi$NUG7!sel'q#:9irr;Zhs7Zj'":YG:p\XCWp\t*i3!'Be!sQO9qYU6jg].<Q+85[9%g<%=
+!W`B-!!3?0!!5)?2%]fj"8DcarV?EhroF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*#
+!!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUTtErquZio^Vh\
+"UG)5$rHrql2:DTr;?6cqYF"i%0Zk7Y4M\crV69dq?6m*!WiZ*nbi4\rr2Qis8;rqrVIQ3oF2!)
+!sT22r;#mUp&+dj#lk;4$MF&`rVc`frt4\rs7Q'b!!r`7"9Ac(qZ$Qon,G3Cr;6?_nb`Fl#QP)<
+;#^+Or;-<gr:U!aqG75&"U"h.oDeI]q"spa"T\l1!XS_or;$9irnd\TrZCq4%0I7E!!`i:"p.Up
+>>S/kqsb$q!s%lbq"t!crVP[UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*#
+!!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUTtErquZio^Vh\
+"UG)5$rHrql2:DTr;?6cqYF"i%0Zk7Y4M\crV69dq?6m*!WiZ*nbi4\rr2Qis8;rqrVIQ3oF2!)
+!sT22r;#mUp&+dj#lk;4$MF&`rVc`frt4\rs7Q'b!!r`7"9Ac(qZ$Qon,G3Cr;6?_nb`Fl#QP)<
+;#^+Or;-<gr:U!aqG75&"U"h.oDeI]q"spa"T\l1!XS_or;$9irnd\TrZCq4%0I7E!!`i:"p.Up
+>>S/kqsb$q!s%lbq"t!crVP[UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*#
+!!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUTtErquZio^Vh\
+"UG)5$rHrql2:DTr;?6cqYF"i%0Zk7Y4M\crV69dq?6m*!WiZ*nbi4\rr2Qis8;rqrVIQ3oF2!)
+!sT22r;#mUp&+dj#lk;4$MF&`rVc`frt4\rs7Q'b!!r`7"9Ac(qZ$Qon,G3Cr;6?_nb`Fl#QP)<
+;#^+Or;-<gr:U!aqG75&"U"h.oDeI]q"spa"T\l1!XS_or;$9irnd\TrZCq4%0I7E!!`i:"p.Up
+>>S/kqsb$q!s%lbq"t!crVP[UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2lKrttA,Q3%<s!!W8qrUp-arVulu!!*'#
+!ri2rrrE&trs&K$rVl`nroa=[rqHEnrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUKnFrr)c]
+qN;'f"Tnc*s7lNhq=aa_o_eLRrVcp'$NgM9r;Z9_o_nRZ#lt;8!!W,srqlQjrr2Nh+o_H<r;HWp
+q>^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM
+"pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+
+#Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2lKrttA,Q3%<s!!W8qrUp-arVulu!!*'#
+!ri2rrrE&trs&K$rVl`nroa=[rqHEnrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUKnFrr)c]
+qN;'f"Tnc*s7lNhq=aa_o_eLRrVcp'$NgM9r;Z9_o_nRZ#lt;8!!W,srqlQjrr2Nh+o_H<r;HWp
+q>^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM
+"pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+
+#Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2lKrttA,Q3%<s!!W8qrUp-arVulu!!*'#
+!ri2rrrE&trs&K$rVl`nroa=[rqHEnrW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rUKnFrr)c]
+qN;'f"Tnc*s7lNhq=aa_o_eLRrVcp'$NgM9r;Z9_o_nRZ#lt;8!!W,srqlQjrr2Nh+o_H<r;HWp
+q>^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM
+"pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+
+#Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*#
+!!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h
+rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e
+rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p
+q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*#
+!!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h
+rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e
+rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p
+q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*#
+!!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u
+pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h
+rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e
+rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p
+q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*#
+!!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h
+r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3
+R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W"
+q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*#
+!!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h
+r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3
+R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W"
+q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*#
+!!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os
+!ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h
+r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3
+R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W"
+q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-#
+!<W9"p\t<nr;?HjlM^e^rVQ]prr)isrr2ourW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rV$9j
+rr;rrr%e-T!X&l2#6=c#oD8"Rp&G'hrVcWkqYUU!"pP)4r;-0\rqu<^W!!_8#R!lupAXserVc`r
+rqZTmrZ;%9r;63aZ3CU8"9hKso(`+Zq"_,q!X/r5:AXqfrqucrrr2p4rquWgqY'da<!31'!<`Q#
+rqlBcrr2Nhrr2rrrqnPK#Qb,:!!`N'qt'[SqXsmgqu-Kjr;-<s!!WW.#5n>lp&=mZq5=E/!sf$(
+qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-#
+!<W9"p\t<nr;?HjlM^e^rVQ]prr)isrr2ourW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rV$9j
+rr;rrr%e-T!X&l2#6=c#oD8"Rp&G'hrVcWkqYUU!"pP)4r;-0\rqu<^W!!_8#R!lupAXserVc`r
+rqZTmrZ;%9r;63aZ3CU8"9hKso(`+Zq"_,q!X/r5:AXqfrqucrrr2p4rquWgqY'da<!31'!<`Q#
+rqlBcrr2Nhrr2rrrqnPK#Qb,:!!`N'qt'[SqXsmgqu-Kjr;-<s!!WW.#5n>lp&=mZq5=E/!sf$(
+qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-#
+!<W9"p\t<nr;?HjlM^e^rVQ]prr)isrr2ourW2uu!!3#t"9&8u!W<!!!WCmT!WE,t!!<0"rV$9j
+rr;rrr%e-T!X&l2#6=c#oD8"Rp&G'hrVcWkqYUU!"pP)4r;-0\rqu<^W!!_8#R!lupAXserVc`r
+rqZTmrZ;%9r;63aZ3CU8"9hKso(`+Zq"_,q!X/r5:AXqfrqucrrr2p4rquWgqY'da<!31'!<`Q#
+rqlBcrr2Nhrr2rrrqnPK#Qb,:!!`N'qt'[SqXsmgqu-Kjr;-<s!!WW.#5n>lp&=mZq5=E/!sf$(
+qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*#
+!!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT
+rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ#<I!<`H]rUp*ds7H<e!<iZ;
+!<iB"p\OdcrVllsq#;B6rVZTlrVl]drW*60!s/W%qYg$WrVHHm"p>#0!ri,urqucrrr2p4rquWg
+rUg*e!<rW-!<`Jtqu$3err2Kgs8N&srqnPE!WW?*!!1.;rqlThrVZQjrVuWkqY^<5$3C52!]BrL
+r;?TerqZX!"qCY:rVcKequ-Kn!<2$Ys8E#srqdZ,q=sjcoDJ1V_9'a-aT;JK!<E9,!BN.t2>[11
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*#
+!!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT
+rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ#<I!<`H]rUp*ds7H<e!<iZ;
+!<iB"p\OdcrVllsq#;B6rVZTlrVl]drW*60!s/W%qYg$WrVHHm"p>#0!ri,urqucrrr2p4rquWg
+rUg*e!<rW-!<`Jtqu$3err2Kgs8N&srqnPE!WW?*!!1.;rqlThrVZQjrVuWkqY^<5$3C52!]BrL
+r;?TerqZX!"qCY:rVcKequ-Kn!<2$Ys8E#srqdZ,q=sjcoDJ1V_9'a-aT;JK!<E9,!BN.t2>[11
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*#
+!!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT
+rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ#<I!<`H]rUp*ds7H<e!<iZ;
+!<iB"p\OdcrVllsq#;B6rVZTlrVl]drW*60!s/W%qYg$WrVHHm"p>#0!ri,urqucrrr2p4rquWg
+rUg*e!<rW-!<`Jtqu$3err2Kgs8N&srqnPE!WW?*!!1.;rqlThrVZQjrVuWkqY^<5$3C52!]BrL
+r;?TerqZX!"qCY:rVcKequ-Kn!<2$Ys8E#srqdZ,q=sjcoDJ1V_9'a-aT;JK!<E9,!BN.t2>[11
+s*t~>
+li7"ap#5rNrr2oU(#\!-i8*>l!<i]."TST(!<<0"rVlfqrrE&Mru(S0q?$d+!!M3Kr;ZHiq>1-k
+!<<-#!<W9"qYpj!s82`er;QKhrr)fp&H2V-q>U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r
+!WE'*!WN,ur;Zcpr;lis!<N/UrrN*"qu?fts8DZk'`A"1q"am]rZqRI"9SW5o_eO\rVulq+9)<>
+qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?<o!#5J>!%.UCq>9p`o\ocL
++pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!<WH,!"JSu
+q>(!hrr!r<s8Monqu-Km!<W`1&-V_'s8DWeqtU<p!!<N/.K/u9ro=%YrZD1>rpopbp&=mdrr)io
+rVZHji8!>JecZ!V#m(81+T(7"J,~>
+li7"ap#5rNrr2oU(#\!-i8*>l!<i]."TST(!<<0"rVlfqrrE&Mru(S0q?$d+!!M3Kr;ZHiq>1-k
+!<<-#!<W9"qYpj!s82`er;QKhrr)fp&H2V-q>U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r
+!WE'*!WN,ur;Zcpr;lis!<N/UrrN*"qu?fts8DZk'`A"1q"am]rZqRI"9SW5o_eO\rVulq+9)<>
+qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?<o!#5J>!%.UCq>9p`o\ocL
++pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!<WH,!"JSu
+q>(!hrr!r<s8Monqu-Km!<W`1&-V_'s8DWeqtU<p!!<N/.K/u9ro=%YrZD1>rpopbp&=mdrr)io
+rVZHji8!>JecZ!V#m(81+T(7"J,~>
+li7"ap#5rNrr2oU(#\!-i8*>l!<i]."TST(!<<0"rVlfqrrE&Mru(S0q?$d+!!M3Kr;ZHiq>1-k
+!<<-#!<W9"qYpj!s82`er;QKhrr)fp&H2V-q>U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r
+!WE'*!WN,ur;Zcpr;lis!<N/UrrN*"qu?fts8DZk'`A"1q"am]rZqRI"9SW5o_eO\rVulq+9)<>
+qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?<o!#5J>!%.UCq>9p`o\ocL
++pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!<WH,!"JSu
+q>(!hrr!r<s8Monqu-Km!<W`1&-V_'s8DWeqtU<p!!<N/.K/u9ro=%YrZD1>rpopbp&=mdrr)io
+rVZHji8!>JecZ!V#m(81+T(7"J,~>
+g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!<W9"qu7'#
+qtp<jrWNH4$k*F<"W7RL"UGPL&-WFM"UYD:'a4aS#6b>/r;HWorVuos!W<&t!!rT(rql`qrqulr
+!!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY.
+q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc
+n,E at dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis
+rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N
+rr2NXo^`%b!!rSbs*t~>
+g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!<W9"qu7'#
+qtp<jrWNH4$k*F<"W7RL"UGPL&-WFM"UYD:'a4aS#6b>/r;HWorVuos!W<&t!!rT(rql`qrqulr
+!!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY.
+q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc
+n,E at dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis
+rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N
+rr2NXo^`%b!!rSbs*t~>
+g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!<W9"qu7'#
+qtp<jrWNH4$k*F<"W7RL"UGPL&-WFM"UYD:'a4aS#6b>/r;HWorVuos!W<&t!!rT(rql`qrqulr
+!!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY.
+q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc
+n,E at dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis
+rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N
+rr2NXo^`%b!!rSbs*t~>
+f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[
+p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!<E0#rVuoprVuor!W<!!
+!WCmT!WE,t!!<0"rV$7(rq,d\qY'ml!=Su;!"Al+s8Dlorr<!!rr)fn)u]F-!=Ai-!sS&crVlBZ
+r;.<2!!`K(m/6_WrVlftrr)Ni5lU`ZqYg3XrXo;=!Wr\pqYp<\qssaZ!!<3$$ju"nr;QQls8Dut
+rr)fmq#'Xb$31M8"U+i(q"XjbpAFjerVlNj')qOorqc?f"T]#4$ig_8rr;rprVlis!WN&rr#>V,
+r;d6+!!<Dkp\k*^oDJJ&!!!6(!:9X[qu-No!WN&Xs8N!%p&=pgs8;QcrX\o"s82cUs8Muos6T^`
+p\EnMJ,~>
+f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[
+p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!<E0#rVuoprVuor!W<!!
+!WCmT!WE,t!!<0"rV$7(rq,d\qY'ml!=Su;!"Al+s8Dlorr<!!rr)fn)u]F-!=Ai-!sS&crVlBZ
+r;.<2!!`K(m/6_WrVlftrr)Ni5lU`ZqYg3XrXo;=!Wr\pqYp<\qssaZ!!<3$$ju"nr;QQls8Dut
+rr)fmq#'Xb$31M8"U+i(q"XjbpAFjerVlNj')qOorqc?f"T]#4$ig_8rr;rprVlis!WN&rr#>V,
+r;d6+!!<Dkp\k*^oDJJ&!!!6(!:9X[qu-No!WN&Xs8N!%p&=pgs8;QcrX\o"s82cUs8Muos6T^`
+p\EnMJ,~>
+f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[
+p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!<E0#rVuoprVuor!W<!!
+!WCmT!WE,t!!<0"rV$7(rq,d\qY'ml!=Su;!"Al+s8Dlorr<!!rr)fn)u]F-!=Ai-!sS&crVlBZ
+r;.<2!!`K(m/6_WrVlftrr)Ni5lU`ZqYg3XrXo;=!Wr\pqYp<\qssaZ!!<3$$ju"nr;QQls8Dut
+rr)fmq#'Xb$31M8"U+i(q"XjbpAFjerVlNj')qOorqc?f"T]#4$ig_8rr;rprVlis!WN&rr#>V,
+r;d6+!!<Dkp\k*^oDJJ&!!!6(!:9X[qu-No!WN&Xs8N!%p&=pgs8;QcrX\o"s82cUs8Muos6T^`
+p\EnMJ,~>
+f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h
+rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur
+!W<!!!WCmT!WE,t!!<0"rV$7'rVuiqo(pH/%06Y6"tK??s8W)trVuosrV[Z6s7.]@%0-A4!W;fe
+rqucmr<*<3!X/T%qu$Hms8N)up&@,QrVZTar;?Hg!<<3'!=&MsrV6<hp\b-n#mLG2s7lH_qY:!f
+s8N#rrquTjrWEN-$NpP]rVHNir;ZcqrVZZjrt550rVlBaaT2hO"p"oXp at eOdrr2lrs8Muq)ZKd-
+/-$+Z!!WK%qXsjcrqlWs"ptD8!;u`lrr2rt!<2$Ys8E?#qYJgYeCDsnd/DAlck"XQeBuXneBl7c
+e^VRerqPRSJ,~>
+f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h
+rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur
+!W<!!!WCmT!WE,t!!<0"rV$7'rVuiqo(pH/%06Y6"tK??s8W)trVuosrV[Z6s7.]@%0-A4!W;fe
+rqucmr<*<3!X/T%qu$Hms8N)up&@,QrVZTar;?Hg!<<3'!=&MsrV6<hp\b-n#mLG2s7lH_qY:!f
+s8N#rrquTjrWEN-$NpP]rVHNir;ZcqrVZZjrt550rVlBaaT2hO"p"oXp at eOdrr2lrs8Muq)ZKd-
+/-$+Z!!WK%qXsjcrqlWs"ptD8!;u`lrr2rt!<2$Ys8E?#qYJgYeCDsnd/DAlck"XQeBuXneBl7c
+e^VRerqPRSJ,~>
+f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h
+rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur
+!W<!!!WCmT!WE,t!!<0"rV$7'rVuiqo(pH/%06Y6"tK??s8W)trVuosrV[Z6s7.]@%0-A4!W;fe
+rqucmr<*<3!X/T%qu$Hms8N)up&@,QrVZTar;?Hg!<<3'!=&MsrV6<hp\b-n#mLG2s7lH_qY:!f
+s8N#rrquTjrWEN-$NpP]rVHNir;ZcqrVZZjrt550rVlBaaT2hO"p"oXp at eOdrr2lrs8Muq)ZKd-
+/-$+Z!!WK%qXsjcrqlWs"ptD8!;u`lrr2rt!<2$Ys8E?#qYJgYeCDsnd/DAlck"XQeBuXneBl7c
+e^VRerqPRSJ,~>
+f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn
+q"t.!!sJi/qu at T<!WWK7"98H.#7(>?!<N90"Tef,!Xnu*rqufrrW3&urW3E,"8_lnrr<#rr;lis
+!<N/UrrN*"qu?fts8DZk'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8Dres8N!VqZ$Nds%!.o$jm*NqtBjWp\+AO!!3<3!PJ7+qYC'[rVlclqu-Nmot:G."9JW9s
+8VunrVHQlrr;rr!<)`n'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8DrTs8W''q>[l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~>
+f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn
+q"t.!!sJi/qu at T<!WWK7"98H.#7(>?!<N90"Tef,!Xnu*rqufrrW3&urW3E,"8_lnrr<#rr;lis
+!<N/UrrN*"qu?fts8DZk'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8Dres8N!VqZ$Nds%!.o$jm*NqtBjWp\+AO!!3<3!PJ7+qYC'[rVlclqu-Nmot:G."9JW9s
+8VunrVHQlrr;rr!<)`n'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8DrTs8W''q>[l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~>
+f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn
+q"t.!!sJi/qu at T<!WWK7"98H.#7(>?!<N90"Tef,!Xnu*rqufrrW3&urW3E,"8_lnrr<#rr;lis
+!<N/UrrN*"qu?fts8DZk'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8Dres8N!VqZ$Nds%!.o$jm*NqtBjWp\+AO!!3<3!PJ7+qYC'[rVlclqu-Nmot:G."9JW9s
+8VunrVHQlrr;rr!<)`n'`7h%rqlQn"To#8"TeQ#q#:<nrr2Tj(]=44"U"l0!qc?ep\Fjbqa(Dd%
+0QaEs8DrTs8W''q>[l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~>
+g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYU<m!<<-#!<W9"q>Ud!
+qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4 at g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W<!!
+!WCmT!WE,t!!<0"rV$7-rqQKis7ZQs#m^b=>5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m
+r;Zs(!WW?#rpKeFo_A at XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1
+r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b
+qu$Kt"TeZ+r;PXSs8E9!rW<B+"TSW"!WNN9"98W+"Te]2!W`?)!os<2~>
+g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYU<m!<<-#!<W9"q>Ud!
+qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4 at g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W<!!
+!WCmT!WE,t!!<0"rV$7-rqQKis7ZQs#m^b=>5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m
+r;Zs(!WW?#rpKeFo_A at XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1
+r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b
+qu$Kt"TeZ+r;PXSs8E9!rW<B+"TSW"!WNN9"98W+"Te]2!W`?)!os<2~>
+g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYU<m!<<-#!<W9"q>Ud!
+qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4 at g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W<!!
+!WCmT!WE,t!!<0"rV$7-rqQKis7ZQs#m^b=>5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m
+r;Zs(!WW?#rpKeFo_A at XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1
+r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b
+qu$Kt"TeZ+r;PXSs8E9!rW<B+"TSW"!WNN9"98W+"Te]2!W`?)!os<2~>
+g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!<W9"qu8,C
+s82Zlp%J at Zr;Q`qs8MurqYgBb$NLG5%062'p%\F^p]q-,#Qb50rqZR%rquj!"9\i'qZ$Nnrquft
+r;Zj!rSIPTrW2os!ri5upAb-j%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-N]s#L&NrVuZh!X&Z,#R0u&q#:!_qYkX=#6Y)1MZ!>Np\OgdqtU!brr.iV"pG,2
+!-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~>
+g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!<W9"qu8,C
+s82Zlp%J at Zr;Q`qs8MurqYgBb$NLG5%062'p%\F^p]q-,#Qb50rqZR%rquj!"9\i'qZ$Nnrquft
+r;Zj!rSIPTrW2os!ri5upAb-j%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-N]s#L&NrVuZh!X&Z,#R0u&q#:!_qYkX=#6Y)1MZ!>Np\OgdqtU!brr.iV"pG,2
+!-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~>
+g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!<W9"qu8,C
+s82Zlp%J at Zr;Q`qs8MurqYgBb$NLG5%062'p%\F^p]q-,#Qb50rqZR%rquj!"9\i'qZ$Nnrquft
+r;Zj!rSIPTrW2os!ri5upAb-j%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-N]s#L&NrVuZh!X&Z,#R0u&q#:!_qYkX=#6Y)1MZ!>Np\OgdqtU!brr.iV"pG,2
+!-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f
+qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~>
+g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B
+rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r
+r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!<Q."oSApqtg9jrr2rtrqZToqA]Ej
+!"8i3!-nM>rV?Kgr/C[\#6P*Mqtg6fs82<c3W9!Qs7lAK!<rN5#&O>6q"sm]rVlp,"Tei.qXjg^
+qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6
+M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ<!!!E?%!!EB(
+!!N2[s*t~>
+g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B
+rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r
+r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!<Q."oSApqtg9jrr2rtrqZToqA]Ej
+!"8i3!-nM>rV?Kgr/C[\#6P*Mqtg6fs82<c3W9!Qs7lAK!<rN5#&O>6q"sm]rVlp,"Tei.qXjg^
+qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6
+M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ<!!!E?%!!EB(
+!!N2[s*t~>
+g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B
+rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r
+r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!<Q."oSApqtg9jrr2rtrqZToqA]Ej
+!"8i3!-nM>rV?Kgr/C[\#6P*Mqtg6fs82<c3W9!Qs7lAK!<rN5#&O>6q"sm]rVlp,"Tei.qXjg^
+qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6
+M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ<!!!E?%!!EB(
+!!N2[s*t~>
+dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!<E3"rql`prr;pBr;6Bir;?Nm
+s8W)ts8Doo!W`E*!W`5qrVHEgr;Zg!!!*0#rql`orr3'"!so5)qY0pdq>U<nr;Zj!rTX@]rr)ls
+rX8Z"qZ$^"!<<-"s8M`l%fH>!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\
+rVQX'"9SZ*rq?<fq>C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m'
+!seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3
+!<N2nrVQEgrT!narquZcq"FX]o)JObs8<2urqHm(!<</u!9=*0~>
+dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!<E3"rql`prr;pBr;6Bir;?Nm
+s8W)ts8Doo!W`E*!W`5qrVHEgr;Zg!!!*0#rql`orr3'"!so5)qY0pdq>U<nr;Zj!rTX@]rr)ls
+rX8Z"qZ$^"!<<-"s8M`l%fH>!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\
+rVQX'"9SZ*rq?<fq>C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m'
+!seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3
+!<N2nrVQEgrT!narquZcq"FX]o)JObs8<2urqHm(!<</u!9=*0~>
+dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!<E3"rql`prr;pBr;6Bir;?Nm
+s8W)ts8Doo!W`E*!W`5qrVHEgr;Zg!!!*0#rql`orr3'"!so5)qY0pdq>U<nr;Zj!rTX@]rr)ls
+rX8Z"qZ$^"!<<-"s8M`l%fH>!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\
+rVQX'"9SZ*rq?<fq>C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m'
+!seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3
+!<N2nrVQEgrT!narquZcq"FX]o)JObs8<2urqHm(!<</u!9=*0~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm
+s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!<WE*qt^$cs8;Ke!W<!!!WD9_!<2fo
+"TJ/^#Qal(s8N)upAY^'oDA+j"U#27":"Drq"aaar;Q`rq>UEk*W>j6!X&f4"pb)%qY0manFF0n%
+g2n97/ZWRqY0jVs"aTPp at S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q
+>1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr
+;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm
+s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!<WE*qt^$cs8;Ke!W<!!!WD9_!<2fo
+"TJ/^#Qal(s8N)upAY^'oDA+j"U#27":"Drq"aaar;Q`rq>UEk*W>j6!X&f4"pb)%qY0manFF0n%
+g2n97/ZWRqY0jVs"aTPp at S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q
+>1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr
+;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm
+s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!<WE*qt^$cs8;Ke!W<!!!WD9_!<2fo
+"TJ/^#Qal(s8N)upAY^'oDA+j"U#27":"Drq"aaar;Q`rq>UEk*W>j6!X&f4"pb)%qY0manFF0n%
+g2n97/ZWRqY0jVs"aTPp at S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q
+>1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr
+;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn
+s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!<WH-/aiW5oDAIa!W<!!!WD-[s8N#t%
+eT_r!<W<'!<E0"rr<#trVulr&HDS(q"t3p!!3<9dJWt8rVZTlrr2`l+8#R,q#AeG!WWN-1B$qFp
+AXa_qu?g&"p#)*r:p0fqsj\ArqZKiq>1$T!!<?+!=e`#q=sjdq>LC%"Tn`*rVZWlqu$HfqYU0k!
+s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e!
+!<B/!=JT!q"t$ekl:\^rVm0&qu?9fp\t0gq>CWkr:U$a!!NK*!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn
+s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!<WH-/aiW5oDAIa!W<!!!WD-[s8N#t%
+eT_r!<W<'!<E0"rr<#trVulr&HDS(q"t3p!!3<9dJWt8rVZTlrr2`l+8#R,q#AeG!WWN-1B$qFp
+AXa_qu?g&"p#)*r:p0fqsj\ArqZKiq>1$T!!<?+!=e`#q=sjdq>LC%"Tn`*rVZWlqu$HfqYU0k!
+s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e!
+!<B/!=JT!q"t$ekl:\^rVm0&qu?9fp\t0gq>CWkr:U$a!!NK*!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn
+s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!<WH-/aiW5oDAIa!W<!!!WD-[s8N#t%
+eT_r!<W<'!<E0"rr<#trVulr&HDS(q"t3p!!3<9dJWt8rVZTlrr2`l+8#R,q#AeG!WWN-1B$qFp
+AXa_qu?g&"p#)*r:p0fqsj\ArqZKiq>1$T!!<?+!=e`#q=sjdq>LC%"Tn`*rVZWlqu$HfqYU0k!
+s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e!
+!<B/!=JT!q"t$ekl:\^rVm0&qu?9fp\t0gq>CWkr:U$a!!NK*!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb<rpBaZrr3!!!<<-&rr2]mqu6Tnrr<#t)#sR6
+quQj"!!**"qZ$KlrVcft!<<*$rr2cos8EN,!X&`6!!3&erqlZer;lis!<N/^rrE&sr@%[Dr;H6f
+":"r/!WN,us8W)ts8W)sr;HZpqtq?4"qLe9"VVdf(D at V_'_W7_(D at f1'-.,S#6587o`"LWq"FL^
+!!`Q*!!W,pq#9g^rq-4GqYp?hrqlEf!sS`+!!O5'rqHElrr23`!!*3)'E%M!qt9LYoDTa1%g<"I
+!9=(OrVc`frtk\7s8MuprVulor#,P>%g)e8',hN#',UQ\p(\Vb'-/,-*<H3G!"T)%rq,s[pA"Ue
+#6Fl*"o%rirpfsdli7"arVuos"nqcerr;WcrW2ukrr*$##64`)quGdWJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb<rpBaZrr3!!!<<-&rr2]mqu6Tnrr<#t)#sR6
+quQj"!!**"qZ$KlrVcft!<<*$rr2cos8EN,!X&`6!!3&erqlZer;lis!<N/^rrE&sr@%[Dr;H6f
+":"r/!WN,us8W)ts8W)sr;HZpqtq?4"qLe9"VVdf(D at V_'_W7_(D at f1'-.,S#6587o`"LWq"FL^
+!!`Q*!!W,pq#9g^rq-4GqYp?hrqlEf!sS`+!!O5'rqHElrr23`!!*3)'E%M!qt9LYoDTa1%g<"I
+!9=(OrVc`frtk\7s8MuprVulor#,P>%g)e8',hN#',UQ\p(\Vb'-/,-*<H3G!"T)%rq,s[pA"Ue
+#6Fl*"o%rirpfsdli7"arVuos"nqcerr;WcrW2ukrr*$##64`)quGdWJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb<rpBaZrr3!!!<<-&rr2]mqu6Tnrr<#t)#sR6
+quQj"!!**"qZ$KlrVcft!<<*$rr2cos8EN,!X&`6!!3&erqlZer;lis!<N/^rrE&sr@%[Dr;H6f
+":"r/!WN,us8W)ts8W)sr;HZpqtq?4"qLe9"VVdf(D at V_'_W7_(D at f1'-.,S#6587o`"LWq"FL^
+!!`Q*!!W,pq#9g^rq-4GqYp?hrqlEf!sS`+!!O5'rqHElrr23`!!*3)'E%M!qt9LYoDTa1%g<"I
+!9=(OrVc`frtk\7s8MuprVulor#,P>%g)e8',hN#',UQ\p(\Vb'-/,-*<H3G!"T)%rq,s[pA"Ue
+#6Fl*"o%rirpfsdli7"arVuos"nqcerr;WcrW2ukrr*$##64`)quGdWJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou
+!!3'!#QO`%rr;ut!W<!"!ri2rrrE&tr=&f1"pP;9qY^'drqu]qr;Zj!rTO7^rr)ios8=8<rpg!k
+"pt>6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(%
+0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!<W<2#6=b_rqHEkoCWFj!WiK)qYpKlrr2riq>^s'!!<6/r
+Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8!
+ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!<<B+!!2utj8XW~>
+dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou
+!!3'!#QO`%rr;ut!W<!"!ri2rrrE&tr=&f1"pP;9qY^'drqu]qr;Zj!rTO7^rr)ios8=8<rpg!k
+"pt>6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(%
+0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!<W<2#6=b_rqHEkoCWFj!WiK)qYpKlrr2riq>^s'!!<6/r
+Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8!
+ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!<<B+!!2utj8XW~>
+dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou
+!!3'!#QO`%rr;ut!W<!"!ri2rrrE&tr=&f1"pP;9qY^'drqu]qr;Zj!rTO7^rr)ios8=8<rpg!k
+"pt>6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(%
+0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!<W<2#6=b_rqHEkoCWFj!WiK)qYpKlrr2riq>^s'!!<6/r
+Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8!
+ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!<<B+!!2utj8XW~>
+dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6&
+rr;ou!!3'!#QOc&rVlis!W<!"!ri2rrt58.rVZ`t!Wa&:s8VlhrVZTpr;Zj!rTF26rr)cmrVcK\
+p>Q&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]%
+qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX
+":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[<!s&Z0!<rT3!s&]1
+#l+Grr:KmbkpZ`<!WWA^p&+d_rr)lrkl1qfr;QQo#mLA9p](U2!!*0*!!!*$!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6&
+rr;ou!!3'!#QOc&rVlis!W<!"!ri2rrt58.rVZ`t!Wa&:s8VlhrVZTpr;Zj!rTF26rr)cmrVcK\
+p>Q&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]%
+qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX
+":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[<!s&Z0!<rT3!s&]1
+#l+Grr:KmbkpZ`<!WWA^p&+d_rr)lrkl1qfr;QQo#mLA9p](U2!!*0*!!!*$!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6&
+rr;ou!!3'!#QOc&rVlis!W<!"!ri2rrt58.rVZ`t!Wa&:s8VlhrVZTpr;Zj!rTF26rr)cmrVcK\
+p>Q&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]%
+qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX
+":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[<!s&Z0!<rT3!s&]1
+#l+Grr:KmbkpZ`<!WWA^p&+d_rr)lrkl1qfr;QQo#mLA9p](U2!!*0*!!!*$!W2rXs*t~>
+dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8
+rr;ou!!*'#!<;usrVZZo!<E0#!<N3!qu79-s8W!T!<E0#"T88rrUg-g!W<!!!WD9_rr)orrVR<(
+s7ZZu!WW?,2uEOQrr;urs8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(_Z'N3
+nbr+Zn,r^p!s&N&s7cBhqucoss8Mcm%ep"kqYp0erq$0m#QXu2rq[W5qY^!b!s\o/!X/E!rVQQj
+p^I3/$3^MfrqHHgrr)lrpAY3ms8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(
+_Z'N3nbr+Zn,r^p!s&N&s7cBhqucoss8M<`$3'l"p':X("98`&!!NB'"onW-quH`u!!)'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8
+rr;ou!!*'#!<;usrVZZo!<E0#!<N3!qu79-s8W!T!<E0#"T88rrUg-g!W<!!!WD9_rr)orrVR<(
+s7ZZu!WW?,2uEOQrr;urs8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(_Z'N3
+nbr+Zn,r^p!s&N&s7cBhqucoss8Mcm%ep"kqYp0erq$0m#QXu2rq[W5qY^!b!s\o/!X/E!rVQQj
+p^I3/$3^MfrqHHgrr)lrpAY3ms8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(
+_Z'N3nbr+Zn,r^p!s&N&s7cBhqucoss8M<`$3'l"p':X("98`&!!NB'"onW-quH`u!!)'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8
+rr;ou!!*'#!<;usrVZZo!<E0#!<N3!qu79-s8W!T!<E0#"T88rrUg-g!W<!!!WD9_rr)orrVR<(
+s7ZZu!WW?,2uEOQrr;urs8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(_Z'N3
+nbr+Zn,r^p!s&N&s7cBhqucoss8Mcm%ep"kqYp0erq$0m#QXu2rq[W5qY^!b!s\o/!X/E!rVQQj
+p^I3/$3^MfrqHHgrr)lrpAY3ms8Drn&c;Upr;[!&!<`K.!"&]2$igM-!;HR9#QOi-!"T&6!!*0(
+_Z'N3nbr+Zn,r^p!s&N&s7cBhqucoss8M<`$3'l"p':X("98`&!!NB'"onW-quH`u!!)'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C<jqtF%j!XSr3!r)]jr;?["!<WE*rr26`)?0[8s8<!!!<<0$
+r;?<bq#:-m"9ei1!<2uprt55,s7lQp!!N?.W;QMgrVl`rr;Zj!rTX=^rVld at rVZNerVQ$`#QXr0
+!r;N_qtg<kqY^0_qu-9dqQg2,#Qk,/r_3AfrCufU-;I6092J8W9E>4t!Wrc-r:p0ds8;X'!!EE/
+"0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d
+rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX!<WE*!t"r(q"ssgr:gg'"9\o2
+YQ"Iur;-9gs8W)`s8W''qYL9p!tYJ;oDnjk#6Or.!so/8r8dm.~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C<jqtF%j!XSr3!r)]jr;?["!<WE*rr26`)?0[8s8<!!!<<0$
+r;?<bq#:-m"9ei1!<2uprt55,s7lQp!!N?.W;QMgrVl`rr;Zj!rTX=^rVld at rVZNerVQ$`#QXr0
+!r;N_qtg<kqY^0_qu-9dqQg2,#Qk,/r_3AfrCufU-;I6092J8W9E>4t!Wrc-r:p0ds8;X'!!EE/
+"0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d
+rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX!<WE*!t"r(q"ssgr:gg'"9\o2
+YQ"Iur;-9gs8W)`s8W''qYL9p!tYJ;oDnjk#6Or.!so/8r8dm.~>
+dJjINs8N&s!WW<$!!30$!71Z_q#C<jqtF%j!XSr3!r)]jr;?["!<WE*rr26`)?0[8s8<!!!<<0$
+r;?<bq#:-m"9ei1!<2uprt55,s7lQp!!N?.W;QMgrVl`rr;Zj!rTX=^rVld at rVZNerVQ$`#QXr0
+!r;N_qtg<kqY^0_qu-9dqQg2,#Qk,/r_3AfrCufU-;I6092J8W9E>4t!Wrc-r:p0ds8;X'!!EE/
+"0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d
+rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX!<WE*!t"r(q"ssgr:gg'"9\o2
+YQ"Iur;-9gs8W)`s8W''qYL9p!tYJ;oDnjk#6Or.!so/8r8dm.~>
+dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<<N1".K/^q>1F(!!*<,rr26`)?0[8s8<!!!<<9'
+q>KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp at n7^!XAl0"Rl?g
+q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g
+qYU9ls8Mfnrr2oqs84D<s8N0/!"/c6pA4[Zrpp*g!!rl5#R1,"qYC'k!W`H+"9\Jup\F^brVlfh
+rtG;'qu?Bdp\4Lm!=B&7!=/N"rVlcqnG`Id!;l`m*b5HY!!r^tqtp*eq>C,%#71n@"pOo#qu-Bg
+rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!<<Q(jSs`~>
+dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<<N1".K/^q>1F(!!*<,rr26`)?0[8s8<!!!<<9'
+q>KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp at n7^!XAl0"Rl?g
+q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g
+qYU9ls8Mfnrr2oqs84D<s8N0/!"/c6pA4[Zrpp*g!!rl5#R1,"qYC'k!W`H+"9\Jup\F^brVlfh
+rtG;'qu?Bdp\4Lm!=B&7!=/N"rVlcqnG`Id!;l`m*b5HY!!r^tqtp*eq>C,%#71n@"pOo#qu-Bg
+rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!<<Q(jSs`~>
+dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<<N1".K/^q>1F(!!*<,rr26`)?0[8s8<!!!<<9'
+q>KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp at n7^!XAl0"Rl?g
+q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g
+qYU9ls8Mfnrr2oqs84D<s8N0/!"/c6pA4[Zrpp*g!!rl5#R1,"qYC'k!W`H+"9\Jup\F^brVlfh
+rtG;'qu?Bdp\4Lm!=B&7!=/N"rVlcqnG`Id!;l`m*b5HY!!r^tqtp*eq>C,%#71n@"pOo#qu-Bg
+rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!<<Q(jSs`~>
+dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8<!!!<iN+
+r;-6gp\4Lh"98W+#6"N"r;RB+s8Mch#RLJ3"9J;orquZl!W<!!!WD0\rVe&?p\fIC!X]/=!;cTk
+s8Vrkq=saYpAFd`I0'NU!<rXTqYU3grUKk2rVuirq>L0hr<!3*!sAi,o_8=YqtKgk"UkM=#Q+2o
+rqu]nrrE&ns8N#srVufpq'?1O!!r]3q>9mbrUKa[I0T`X#QfMRp at a"<!sA]1!.Ob<r;?Bhrr2Tj
+')D=tp at eF\qL&DJ"p"o1Iers>r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro
+rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~>
+dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8<!!!<iN+
+r;-6gp\4Lh"98W+#6"N"r;RB+s8Mch#RLJ3"9J;orquZl!W<!!!WD0\rVe&?p\fIC!X]/=!;cTk
+s8Vrkq=saYpAFd`I0'NU!<rXTqYU3grUKk2rVuirq>L0hr<!3*!sAi,o_8=YqtKgk"UkM=#Q+2o
+rqu]nrrE&ns8N#srVufpq'?1O!!r]3q>9mbrUKa[I0T`X#QfMRp at a"<!sA]1!.Ob<r;?Bhrr2Tj
+')D=tp at eF\qL&DJ"p"o1Iers>r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro
+rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~>
+dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8<!!!<iN+
+r;-6gp\4Lh"98W+#6"N"r;RB+s8Mch#RLJ3"9J;orquZl!W<!!!WD0\rVe&?p\fIC!X]/=!;cTk
+s8Vrkq=saYpAFd`I0'NU!<rXTqYU3grUKk2rVuirq>L0hr<!3*!sAi,o_8=YqtKgk"UkM=#Q+2o
+rqu]nrrE&ns8N#srVufpq'?1O!!r]3q>9mbrUKa[I0T`X#QfMRp at a"<!sA]1!.Ob<r;?Bhrr2Tj
+')D=tp at eF\qL&DJ"p"o1Iers>r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro
+rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~>
+dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8<!!!<`N,
+r;HEiq#,"/"U"u0"8r,srr)j/qZ$NjqNq?b#mUKGrVHBgr;lis!<N/^rrE&trVuj?r;?Tt#6Fr9
+!<;uls8W&jpAY!aq"Fa]!!WK."98N"qu$?inbsa1s8;olrqcWg"U>)/!XShus7?$^qY$-V!sA]+
+Dtj&,r;?Qo!<2cnqu6Wo-i<T5OTkgm!XEH5q>0[[q"jpi!<iT6!rVli!WiK2!X/T'r:^-fqu6Te
+rt4u(r:g![s7QEs!X/],!rDflqu-'a,5hK=s7lTirq?R$!WW9-s7H?_q"jj\PQV'k!s!96q#C9i
+rr2utlMpn`#Pn#m#6>2<"7lNm!=&`.!W`B*!<2'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8<!!!<`N,
+r;HEiq#,"/"U"u0"8r,srr)j/qZ$NjqNq?b#mUKGrVHBgr;lis!<N/^rrE&trVuj?r;?Tt#6Fr9
+!<;uls8W&jpAY!aq"Fa]!!WK."98N"qu$?inbsa1s8;olrqcWg"U>)/!XShus7?$^qY$-V!sA]+
+Dtj&,r;?Qo!<2cnqu6Wo-i<T5OTkgm!XEH5q>0[[q"jpi!<iT6!rVli!WiK2!X/T'r:^-fqu6Te
+rt4u(r:g![s7QEs!X/],!rDflqu-'a,5hK=s7lTirq?R$!WW9-s7H?_q"jj\PQV'k!s!96q#C9i
+rr2utlMpn`#Pn#m#6>2<"7lNm!=&`.!W`B*!<2'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8<!!!<`N,
+r;HEiq#,"/"U"u0"8r,srr)j/qZ$NjqNq?b#mUKGrVHBgr;lis!<N/^rrE&trVuj?r;?Tt#6Fr9
+!<;uls8W&jpAY!aq"Fa]!!WK."98N"qu$?inbsa1s8;olrqcWg"U>)/!XShus7?$^qY$-V!sA]+
+Dtj&,r;?Qo!<2cnqu6Wo-i<T5OTkgm!XEH5q>0[[q"jpi!<iT6!rVli!WiK2!X/T'r:^-fqu6Te
+rt4u(r:g![s7QEs!X/],!rDflqu-'a,5hK=s7lTirq?R$!WW9-s7H?_q"jj\PQV'k!s!96q#C9i
+rr2utlMpn`#Pn#m#6>2<"7lNm!=&`.!W`B*!<2'ZJ,~>
+dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs!<WH)rr26`)ufm:s8<!!!<rW-
+r;$0ZrD<Xs$j$b<"T82rrr)j/rVQThnF%%l"UtG5qu$0ar;lis!<N/`s8N#srVud.qtCEt#QXr/
+Xo7bds82cmqtp<jq at 2^g$j-J<!<]J(qu$ElmJeC/s8;oorqufnUB:W!!X)O$nG2tXli$b^"TT&5
+"8r#pr;?Qo!<2Qhs8FADo`+^e!"/u2"8Dijp%SFTrVus0!X],0rVH]t#6b)0XnMShs7Gg\s8)fo
+rq[)h;[`a.$ipI4s82`mrpB_0rVufqqu6NnqkF5r!!3:'r:'OZqWn+Y!!N?5!!E/qrqu]nrrE&`
+s8N!$q5pd"XKV,q#H=l/W2Hc!rT+!/~>
+dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs!<WH)rr26`)ufm:s8<!!!<rW-
+r;$0ZrD<Xs$j$b<"T82rrr)j/rVQThnF%%l"UtG5qu$0ar;lis!<N/`s8N#srVud.qtCEt#QXr/
+Xo7bds82cmqtp<jq at 2^g$j-J<!<]J(qu$ElmJeC/s8;oorqufnUB:W!!X)O$nG2tXli$b^"TT&5
+"8r#pr;?Qo!<2Qhs8FADo`+^e!"/u2"8Dijp%SFTrVus0!X],0rVH]t#6b)0XnMShs7Gg\s8)fo
+rq[)h;[`a.$ipI4s82`mrpB_0rVufqqu6NnqkF5r!!3:'r:'OZqWn+Y!!N?5!!E/qrqu]nrrE&`
+s8N!$q5pd"XKV,q#H=l/W2Hc!rT+!/~>
+dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs!<WH)rr26`)ufm:s8<!!!<rW-
+r;$0ZrD<Xs$j$b<"T82rrr)j/rVQThnF%%l"UtG5qu$0ar;lis!<N/`s8N#srVud.qtCEt#QXr/
+Xo7bds82cmqtp<jq at 2^g$j-J<!<]J(qu$ElmJeC/s8;oorqufnUB:W!!X)O$nG2tXli$b^"TT&5
+"8r#pr;?Qo!<2Qhs8FADo`+^e!"/u2"8Dijp%SFTrVus0!X],0rVH]t#6b)0XnMShs7Gg\s8)fo
+rq[)h;[`a.$ipI4s82`mrpB_0rVufqqu6NnqkF5r!!3:'r:'OZqWn+Y!!N?5!!E/qrqu]nrrE&`
+s8N!$q5pd"XKV,q#H=l/W2Hc!rT+!/~>
+dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8<!!!<N6&
+rVZTa3<KHi"UG26_u'B1rqud-rV6<eq?@!1"q(\rrVHKk!W<!!!WD9_rVliq&,Z4u4TbZf%fc\1
+rVH<arVld/qu6E[qtC*o"VCk;!W2lnr;HW^s8N!Br;QWmr:p*p"9f26&G,bmqYp9iqo&[<";(hu
+rVcTirr<#tnGad%r;$-,!!<9(!C?ALrV?![s24m?$j-Mjq)JH\"TSW*rV?Eerql6c'E7n.q="4T
+!<`Q<"98K"rqlWlrpBabrZh@?r;HQgq?[9.$igk1qY0jcq#C61"98Q:#!)Y\qYU9ls8M<`s8E9%
+pA=jYr:os\rr2rtrr;p&r;HBbrVZ6`roF*0~>
+dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8<!!!<N6&
+rVZTa3<KHi"UG26_u'B1rqud-rV6<eq?@!1"q(\rrVHKk!W<!!!WD9_rVliq&,Z4u4TbZf%fc\1
+rVH<arVld/qu6E[qtC*o"VCk;!W2lnr;HW^s8N!Br;QWmr:p*p"9f26&G,bmqYp9iqo&[<";(hu
+rVcTirr<#tnGad%r;$-,!!<9(!C?ALrV?![s24m?$j-Mjq)JH\"TSW*rV?Eerql6c'E7n.q="4T
+!<`Q<"98K"rqlWlrpBabrZh@?r;HQgq?[9.$igk1qY0jcq#C61"98Q:#!)Y\qYU9ls8M<`s8E9%
+pA=jYr:os\rr2rtrr;p&r;HBbrVZ6`roF*0~>
+dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8<!!!<N6&
+rVZTa3<KHi"UG26_u'B1rqud-rV6<eq?@!1"q(\rrVHKk!W<!!!WD9_rVliq&,Z4u4TbZf%fc\1
+rVH<arVld/qu6E[qtC*o"VCk;!W2lnr;HW^s8N!Br;QWmr:p*p"9f26&G,bmqYp9iqo&[<";(hu
+rVcTirr<#tnGad%r;$-,!!<9(!C?ALrV?![s24m?$j-Mjq)JH\"TSW*rV?Eerql6c'E7n.q="4T
+!<`Q<"98K"rqlWlrpBabrZh@?r;HQgq?[9.$igk1qY0jcq#C61"98Q:#!)Y\qYU9ls8M<`s8E9%
+pA=jYr:os\rr2rtrr;p&r;HBbrVZ6`roF*0~>
+dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8<!!!<<K-
+qtp@?!!!*%!=&\[rqlWlrr2os&cDM(nG`ID!!3-$#RgS,q#(6l!!*-!l2Ue_s8O>CrVQHj!='&7
+!X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g
+nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk
+s8MQg&,uJ'q>Bpb!<rT,&c`XBoDSXjs8MuqnGag4rqHHfqtL'geH#XZ#Qc+JpAFm^s8;Bj!!NN,
+#6"JrqYgHorp'O`rWi5sp\k!frVQEgs8NQ-rVZNfq>^'bp\aaarT+!/~>
+dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8<!!!<<K-
+qtp@?!!!*%!=&\[rqlWlrr2os&cDM(nG`ID!!3-$#RgS,q#(6l!!*-!l2Ue_s8O>CrVQHj!='&7
+!X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g
+nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk
+s8MQg&,uJ'q>Bpb!<rT,&c`XBoDSXjs8MuqnGag4rqHHfqtL'geH#XZ#Qc+JpAFm^s8;Bj!!NN,
+#6"JrqYgHorp'O`rWi5sp\k!frVQEgs8NQ-rVZNfq>^'bp\aaarT+!/~>
+dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8<!!!<<K-
+qtp@?!!!*%!=&\[rqlWlrr2os&cDM(nG`ID!!3-$#RgS,q#(6l!!*-!l2Ue_s8O>CrVQHj!='&7
+!X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g
+nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk
+s8MQg&,uJ'q>Bpb!<rT,&c`XBoDSXjs8MuqnGag4rqHHfqtL'geH#XZ#Qc+JpAFm^s8;Bj!!NN,
+#6"JrqYgHorp'O`rWi5sp\k!frVQEgs8NQ-rVZNfq>^'bp\aaarT+!/~>
+dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl
+rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao
+!!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm
+!!WQ-!!;llq>1!es8W)trUBjerZhC at rVZTno(W at m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk
+r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!<WH)m.U>Trr2utq#CBnr;RT1rqlQ^rX/]1
+"9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_
+*qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~>
+dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl
+rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao
+!!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm
+!!WQ-!!;llq>1!es8W)trUBjerZhC at rVZTno(W at m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk
+r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!<WH)m.U>Trr2utq#CBnr;RT1rqlQ^rX/]1
+"9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_
+*qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~>
+dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl
+rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao
+!!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm
+!!WQ-!!;llq>1!es8W)trUBjerZhC at rVZTno(W at m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk
+r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!<WH)m.U>Trr2utq#CBnr;RT1rqlQ^rX/]1
+"9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_
+*qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~>
+dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o
+o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'#
+!<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl
+!<i`=s8)`lr;HTo!<2Ed,Q at Z>qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq
+p at naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl
+rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq
+rrX#G!"o88!"9A:!!<<-!WM0[J,~>
+dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o
+o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'#
+!<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl
+!<i`=s8)`lr;HTo!<2Ed,Q at Z>qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq
+p at naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl
+rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq
+rrX#G!"o88!"9A:!!<<-!WM0[J,~>
+dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o
+o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'#
+!<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl
+!<i`=s8)`lr;HTo!<2Ed,Q at Z>qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq
+p at naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl
+rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq
+rrX#G!"o88!"9A:!!<<-!WM0[J,~>
+dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e
+rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l:
+!<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6
+!!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crUKn2q>U-f
+q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\
+rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crTX>(q#19u!XL2$0J4Y%
+qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~>
+dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e
+rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l:
+!<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6
+!!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crUKn2q>U-f
+q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\
+rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crTX>(q#19u!XL2$0J4Y%
+qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~>
+dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e
+rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l:
+!<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6
+!!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crUKn2q>U-f
+q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\
+rVc`rrpKe3rr)clqYfm]rr<*$!<rSps7c*ap[8#.#7^kD%F4qIr;Q<crTX>(q#19u!XL2$0J4Y%
+qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~>
+dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!<E9'!"#sHqtg<ir;QKhrquHaqZ$Hl
+rVuimrUp3crqlHj&HDk9!rrT5!<b[arr2cjrVHNmr;Tsss8Docqu?*]5m.8l#6=r0$N^A;!sJQ%
+o_nUaqt0XUrqQKeo_nX`rqlZeqYg<kqt at e>!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae
+qY:'frVl'],l[c at r;?<hrVf"h#R1>7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4
+#718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*!<N?hrVH<gr;HWZs!7UB
+rVZTfs8Dp]$O?q<#/L95rVZWkqYUHt!rrK+pA=^_s7uHSs8Vm8#QP8?r;?Edp\O%KqZ[$.rq66j
+$31/7!rrH*$i]5eJ,~>
+dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!<E9'!"#sHqtg<ir;QKhrquHaqZ$Hl
+rVuimrUp3crqlHj&HDk9!rrT5!<b[arr2cjrVHNmr;Tsss8Docqu?*]5m.8l#6=r0$N^A;!sJQ%
+o_nUaqt0XUrqQKeo_nX`rqlZeqYg<kqt at e>!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae
+qY:'frVl'],l[c at r;?<hrVf"h#R1>7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4
+#718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*!<N?hrVH<gr;HWZs!7UB
+rVZTfs8Dp]$O?q<#/L95rVZWkqYUHt!rrK+pA=^_s7uHSs8Vm8#QP8?r;?Edp\O%KqZ[$.rq66j
+$31/7!rrH*$i]5eJ,~>
+dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!<E9'!"#sHqtg<ir;QKhrquHaqZ$Hl
+rVuimrUp3crqlHj&HDk9!rrT5!<b[arr2cjrVHNmr;Tsss8Docqu?*]5m.8l#6=r0$N^A;!sJQ%
+o_nUaqt0XUrqQKeo_nX`rqlZeqYg<kqt at e>!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae
+qY:'frVl'],l[c at r;?<hrVf"h#R1>7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4
+#718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*!<N?hrVH<gr;HWZs!7UB
+rVZTfs8Dp]$O?q<#/L95rVZWkqYUHt!rrK+pA=^_s7uHSs8Vm8#QP8?r;?Edp\O%KqZ[$.rq66j
+$31/7!rrH*$i]5eJ,~>
+dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IW<sJm6"Te`*!s,="rVQBfr;HWi,5q94r;-<h
+q"OFZr9jL[pB1R""pkS=#lkB9r;6HcrVQKiq>XXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a
+oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$<jr;?Tpr;?Tnp\4Zb#mgV<#7CA(rqcQk
+rr2!Y+8l06qu-Zu!sJf.rq6*Zqu?<`!=8`-#m1+tnc&C_rp]q/o_e^`q#"8'!"Ao.U\albqYU0d
+<XT*8#RLP5#Pn5pr;cijrrE#srtbS2rVlcip\q&s#lt;:$N'YuqY^<kroF)$r;ZQhrW<0'"U"l*
+p%e7Ws7H'e#lk#5!rhf]rqcQll2Mk(nHB$s"TA2mp\OL\qXt6s"o\5o!X/Q(#64o-$jHRis*t~>
+dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IW<sJm6"Te`*!s,="rVQBfr;HWi,5q94r;-<h
+q"OFZr9jL[pB1R""pkS=#lkB9r;6HcrVQKiq>XXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a
+oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$<jr;?Tpr;?Tnp\4Zb#mgV<#7CA(rqcQk
+rr2!Y+8l06qu-Zu!sJf.rq6*Zqu?<`!=8`-#m1+tnc&C_rp]q/o_e^`q#"8'!"Ao.U\albqYU0d
+<XT*8#RLP5#Pn5pr;cijrrE#srtbS2rVlcip\q&s#lt;:$N'YuqY^<kroF)$r;ZQhrW<0'"U"l*
+p%e7Ws7H'e#lk#5!rhf]rqcQll2Mk(nHB$s"TA2mp\OL\qXt6s"o\5o!X/Q(#64o-$jHRis*t~>
+dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IW<sJm6"Te`*!s,="rVQBfr;HWi,5q94r;-<h
+q"OFZr9jL[pB1R""pkS=#lkB9r;6HcrVQKiq>XXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a
+oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$<jr;?Tpr;?Tnp\4Zb#mgV<#7CA(rqcQk
+rr2!Y+8l06qu-Zu!sJf.rq6*Zqu?<`!=8`-#m1+tnc&C_rp]q/o_e^`q#"8'!"Ao.U\albqYU0d
+<XT*8#RLP5#Pn5pr;cijrrE#srtbS2rVlcip\q&s#lt;:$N'YuqY^<kroF)$r;ZQhrW<0'"U"l*
+p%e7Ws7H'e#lk#5!rhf]rqcQll2Mk(nHB$s"TA2mp\OL\qXt6s"o\5o!X/Q(#64o-$jHRis*t~>
+dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT
+rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX
+p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L<ljSp=u
+s82ckDug.H#6g6NObo-[OHK\J!=/c2O8JnMp\k'\ru_78qtg'aq>:O'":5&4N/s'[P)Yig!s&K1
+!!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!<r]4"d+k.M3!^ZOokde
+#Qk6kqu-9`rVc!\+8l*<$3g_.p](3cs8Vig$3L>/o)Aal!sJf/"To#:qrId-~>
+dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT
+rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX
+p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L<ljSp=u
+s82ckDug.H#6g6NObo-[OHK\J!=/c2O8JnMp\k'\ru_78qtg'aq>:O'":5&4N/s'[P)Yig!s&K1
+!!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!<r]4"d+k.M3!^ZOokde
+#Qk6kqu-9`rVc!\+8l*<$3g_.p](3cs8Vig$3L>/o)Aal!sJf/"To#:qrId-~>
+dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT
+rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX
+p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L<ljSp=u
+s82ckDug.H#6g6NObo-[OHK\J!=/c2O8JnMp\k'\ru_78qtg'aq>:O'":5&4N/s'[P)Yig!s&K1
+!!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!<r]4"d+k.M3!^ZOokde
+#Qk6kqu-9`rVc!\+8l*<$3g_.p](3cs8Vig$3L>/o)Aal!sJf/"To#:qrId-~>
+dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/
+H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-<hpAF7Js+^gZ!<rQ0!=&T/!Hrd5GBS7S
+q>L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z
+rr;p=r;Z]nq>(*p"Teo1!<E6%!<WE(!<<9+#m:5+o`+acnc'j0s8;cfr:p0k"oo)6!<NK."pG2;
+#6=i1!<`]0LAgcBr;HWfrrE#srtG>,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3
+!W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~>
+dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/
+H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-<hpAF7Js+^gZ!<rQ0!=&T/!Hrd5GBS7S
+q>L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z
+rr;p=r;Z]nq>(*p"Teo1!<E6%!<WE(!<<9+#m:5+o`+acnc'j0s8;cfr:p0k"oo)6!<NK."pG2;
+#6=i1!<`]0LAgcBr;HWfrrE#srtG>,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3
+!W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~>
+dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/
+H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-<hpAF7Js+^gZ!<rQ0!=&T/!Hrd5GBS7S
+q>L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z
+rr;p=r;Z]nq>(*p"Teo1!<E6%!<WE(!<<9+#m:5+o`+acnc'j0s8;cfr:p0k"oo)6!<NK."pG2;
+#6=i1!<`]0LAgcBr;HWfrrE#srtG>,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3
+!W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~>
+li7"aoj at b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4
+?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/
+$31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5
+oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l at T=rquWeqO[`p!X\o.
+"TSW-"TSf1!!3E-!<MroqYU3grr2Wk!<)or')_Y)r;Z6b"9Jl2"Tf)'rVlNejT#2X&,lP,rqcBu
+!s8Z.!<E0%!<*!-!WrH(!!<F;qt9scqW\#%r;Qa"!!<2orVZZoqZ$Er"9AJrqZ6cu!!iQ+!rrE$
+jSs`~>
+li7"aoj at b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4
+?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/
+$31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5
+oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l at T=rquWeqO[`p!X\o.
+"TSW-"TSf1!!3E-!<MroqYU3grr2Wk!<)or')_Y)r;Z6b"9Jl2"Tf)'rVlNejT#2X&,lP,rqcBu
+!s8Z.!<E0%!<*!-!WrH(!!<F;qt9scqW\#%r;Qa"!!<2orVZZoqZ$Er"9AJrqZ6cu!!iQ+!rrE$
+jSs`~>
+li7"aoj at b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4
+?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/
+$31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5
+oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l at T=rquWeqO[`p!X\o.
+"TSW-"TSf1!!3E-!<MroqYU3grr2Wk!<)or')_Y)r;Z6b"9Jl2"Tf)'rVlNejT#2X&,lP,rqcBu
+!s8Z.!<E0%!<*!-!WrH(!!<F;qt9scqW\#%r;Qa"!!<2orVZZoqZ$Er"9AJrqZ6cu!!iQ+!rrE$
+jSs`~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1
+!s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/
+!WiT/!!39+r<!!%)#t3L!snr3!s/H-"LGQ7r;6EhqYBpbrVZTmqZcooqXjjj"TAE+Z24Cmr;H<I
+rs\f)s8Dll[0?a9!WiE#!"Au3!s/H&!XAi+qu$Bjnc/Re)ZBR0q>LEu"pb2<!!!-)!<E<+!"&f.
+#I44!rVccqpAb-ks8;rqrqcipo`5*srW*5.qY^*crUo.L%/^))rVZN""p>#0!Wi3!%0?V6!WW3%
+#6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r<EN-!!<&uj8XW~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1
+!s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/
+!WiT/!!39+r<!!%)#t3L!snr3!s/H-"LGQ7r;6EhqYBpbrVZTmqZcooqXjjj"TAE+Z24Cmr;H<I
+rs\f)s8Dll[0?a9!WiE#!"Au3!s/H&!XAi+qu$Bjnc/Re)ZBR0q>LEu"pb2<!!!-)!<E<+!"&f.
+#I44!rVccqpAb-ks8;rqrqcipo`5*srW*5.qY^*crUo.L%/^))rVZN""p>#0!Wi3!%0?V6!WW3%
+#6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r<EN-!!<&uj8XW~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1
+!s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/
+!WiT/!!39+r<!!%)#t3L!snr3!s/H-"LGQ7r;6EhqYBpbrVZTmqZcooqXjjj"TAE+Z24Cmr;H<I
+rs\f)s8Dll[0?a9!WiE#!"Au3!s/H&!XAi+qu$Bjnc/Re)ZBR0q>LEu"pb2<!!!-)!<E<+!"&f.
+#I44!rVccqpAb-ks8;rqrqcipo`5*srW*5.qY^*crUo.L%/^))rVZN""p>#0!Wi3!%0?V6!WW3%
+#6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r<EN-!!<&uj8XW~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!<N6$
+#R1;0%M&dL!<N6*"U5:YaSbi2r:0aaqu$EkrrE&nrrN,trqufp)>jF.qYL*^r:\:W!!!B-!s&Z;%
+0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i
+Vs8aqt9a`r;6j&!<Mfm"p#&;q>^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!<N6$#6";lrr)lro
+D]R)rVZQhqY^1B!!!B-$3g>+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr
+Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!<N6$
+#R1;0%M&dL!<N6*"U5:YaSbi2r:0aaqu$EkrrE&nrrN,trqufp)>jF.qYL*^r:\:W!!!B-!s&Z;%
+0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i
+Vs8aqt9a`r;6j&!<Mfm"p#&;q>^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!<N6$#6";lrr)lro
+D]R)rVZQhqY^1B!!!B-$3g>+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr
+Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!<N6$
+#R1;0%M&dL!<N6*"U5:YaSbi2r:0aaqu$EkrrE&nrrN,trqufp)>jF.qYL*^r:\:W!!!B-!s&Z;%
+0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i
+Vs8aqt9a`r;6j&!<Mfm"p#&;q>^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!<N6$#6";lrr)lro
+D]R)rVZQhqY^1B!!!B-$3g>+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr
+Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW.
+!WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9!<W</
+!!36$"9&?6"TSZ0!=f+nkiCXrrqQ0_qtp<h!rMrprqucm&,u+Zki(a[hr4)$q"t'jrSdb]q#10d
+o)&(;n`U5<l.l4.rr)]^s8W)urVuj6kP=?$kih$iioT:^j5oC^jlkgerU9[`rVlffrtYP3r;?Hh
+rpf%4iTT%RiUH^=qu6WoiVs/XrVcN^qt/h:kQg/4h#-dCrVGdY)?'I5!<i`-p\k*hrpg$dli-n^
+rpKh"!WW<"!!*#Zs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW.
+!WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9!<W</
+!!36$"9&?6"TSZ0!=f+nkiCXrrqQ0_qtp<h!rMrprqucm&,u+Zki(a[hr4)$q"t'jrSdb]q#10d
+o)&(;n`U5<l.l4.rr)]^s8W)urVuj6kP=?$kih$iioT:^j5oC^jlkgerU9[`rVlffrtYP3r;?Hh
+rpf%4iTT%RiUH^=qu6WoiVs/XrVcN^qt/h:kQg/4h#-dCrVGdY)?'I5!<i`-p\k*hrpg$dli-n^
+rpKh"!WW<"!!*#Zs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW.
+!WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9!<W</
+!!36$"9&?6"TSZ0!=f+nkiCXrrqQ0_qtp<h!rMrprqucm&,u+Zki(a[hr4)$q"t'jrSdb]q#10d
+o)&(;n`U5<l.l4.rr)]^s8W)urVuj6kP=?$kih$iioT:^j5oC^jlkgerU9[`rVlffrtYP3r;?Hh
+rpf%4iTT%RiUH^=qu6WoiVs/XrVcN^qt/h:kQg/4h#-dCrVGdY)?'I5!<i`-p\k*hrpg$dli-n^
+rpKh"!WW<"!!*#Zs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np at S(XpA"Uc'D_Y-rr2]s!<E6.!sAc1!WVup
+kl1Pjs7c<gq>1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW`
+rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo
+r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH<g!r_odrr)rsrosFnq#:9ho_SUerqQKlq#10giVsMh
+q>:*hrqQKkrVZTlrVlfprVcZor<N>prquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f*
+!!*'"roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np at S(XpA"Uc'D_Y-rr2]s!<E6.!sAc1!WVup
+kl1Pjs7c<gq>1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW`
+rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo
+r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH<g!r_odrr)rsrosFnq#:9ho_SUerqQKlq#10giVsMh
+q>:*hrqQKkrVZTlrVlfprVcZor<N>prquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f*
+!!*'"roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np at S(XpA"Uc'D_Y-rr2]s!<E6.!sAc1!WVup
+kl1Pjs7c<gq>1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW`
+rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo
+r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH<g!r_odrr)rsrosFnq#:9ho_SUerqQKlq#10giVsMh
+q>:*hrqQKkrVZTlrVlfprVcZor<N>prquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f*
+!!*'"roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ
+rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$
+qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a
+#l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd
+rr)*]+9)3G!!!P^jlGOah<!bUhW!DPjl$7D!!!'$!<N9%roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ
+rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$
+qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a
+#l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd
+rr)*]+9)3G!!!P^jlGOah<!bUhW!DPjl$7D!!!'$!<N9%roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ
+rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$
+qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a
+#l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd
+rr)*]+9)3G!!!P^jlGOah<!bUhW!DPjl$7D!!!'$!<N9%roF*0~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT`
+pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C<drr)QjrTsOUrVZNhr;HQjr:p9e
+rq?6crr2ibs82Wjrr2osrr2`n&+]bsq>^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj#
+mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$
+q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT`
+pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C<drr)QjrTsOUrVZNhr;HQjr:p9e
+rq?6crr2ibs82Wjrr2osrr2`n&+]bsq>^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj#
+mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$
+q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT`
+pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C<drr)QjrTsOUrVZNhr;HQjr:p9e
+rq?6crr2ibs82Wjrr2osrr2`n&+]bsq>^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj#
+mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$
+q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\
+s*t~>
+n,N at c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o
+r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm
+rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq
+#QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$<ir;-HlrV-?lqV_AV
+qYpKoqY1!irql^#rr)cns8)cllMpn`+8l+3!Wru;#65)3"98N,!!!'(!!NB(!WWE,#6Y'!roF*0~>
+n,N at c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o
+r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm
+rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq
+#QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$<ir;-HlrV-?lqV_AV
+qYpKoqY1!irql^#rr)cns8)cllMpn`+8l+3!Wru;#65)3"98N,!!!'(!!NB(!WWE,#6Y'!roF*0~>
+n,N at c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o
+r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm
+rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq
+#QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$<ir;-HlrV-?lqV_AV
+qYpKoqY1!irql^#rr)cns8)cllMpn`+8l+3!Wru;#65)3"98N,!!!'(!!NB(!WWE,#6Y'!roF*0~>
+n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu at B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$
+s24m:rWiDuqH[N<BOU^Gs'bn9$=dUW at U`hb at 9id+jSs`~>
+n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu at B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$
+s24m:rWiDuqH[N<BOU^Gs'bn9$=dUW at U`hb at 9id+jSs`~>
+n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu at B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$
+s24m:rWiDuqH[N<BOU^Gs'bn9$=dUW at U`hb at 9id+jSs`~>
+n,NFe#lX\uqZI$(!s8H&rr`?'"o\<!q at ii.!<WB"!"K#2!so5>!dX_>pAFgcr;QZqr.4m!s+13f
+s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~>
+n,NFe#lX\uqZI$(!s8H&rr`?'"o\<!q at ii.!<WB"!"K#2!so5>!dX_>pAFgcr;QZqr.4m!s+13f
+s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~>
+n,NFe#lX\uqZI$(!s8H&rr`?'"o\<!q at ii.!<WB"!"K#2!so5>!dX_>pAFgcr;QZqr.4m!s+13f
+s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~>
+n,NFe"9&/pqu-Zs!W<!."p>),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9
+#Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~>
+n,NFe"9&/pqu-Zs!W<!."p>),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9
+#Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~>
+n,NFe"9&/pqu-Zs!W<!."p>),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9
+#Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~>
+n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H at tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt
+s8DZkr;Hrso_S4Zq>1$Ms*t~>
+n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H at tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt
+s8DZkr;Hrso_S4Zq>1$Ms*t~>
+n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H at tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt
+s8DZkr;Hrso_S4Zq>1$Ms*t~>
+mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W''
+s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~>
+mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W''
+s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~>
+mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W''
+s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~>
+mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf
+s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~>
+mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf
+s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~>
+mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf
+s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~>
+mf37b"9&/rrVZX+qZ$<hp&F^`qYgBiqu6Ekrr)j,rr)cop\sscrqZQiqYU9krrE%Ls+13$s24m:
+rWDrprUp0h!<)Hf#Q"H!rVlNiroF*0~>
+mf37b"9&/rrVZX+qZ$<hp&F^`qYgBiqu6Ekrr)j,rr)cop\sscrqZQiqYU9krrE%Ls+13$s24m:
+rWDrprUp0h!<)Hf#Q"H!rVlNiroF*0~>
+mf37b"9&/rrVZX+qZ$<hp&F^`qYgBiqu6Ekrr)j,rr)cop\sscrqZQiqYU9krrE%Ls+13$s24m:
+rWDrprUp0h!<)Hf#Q"H!rVlNiroF*0~>
+nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H<i!<)lq&H1hlqYU9aq>:-hr;HWps8L^O
+q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u
+rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du
+qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6<hrqcTnqYpBkrqufrrWW,iqYp?f
+nGWFcrr)oorr*0#s7?6hq>U*bs8W(Ls0VfV~>
+nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H<i!<)lq&H1hlqYU9aq>:-hr;HWps8L^O
+q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u
+rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du
+qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6<hrqcTnqYpBkrqufrrWW,iqYp?f
+nGWFcrr)oorr*0#s7?6hq>U*bs8W(Ls0VfV~>
+nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H<i!<)lq&H1hlqYU9aq>:-hr;HWps8L^O
+q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u
+rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du
+qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6<hrqcTnqYpBkrqufrrWW,iqYp?f
+nGWFcrr)oorr*0#s7?6hq>U*bs8W(Ls0VfV~>
+nc&Ugrr4#<r;-6eq=sUZe_Am6f$rI at rVcTma4o1sgY196g]#n;g"4g0pA+[Zs8)WiqYL*gf)PaK
+qu7E1rVulfq>^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp at J:O
+rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J at Zqt^6h
+q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf
+p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~>
+nc&Ugrr4#<r;-6eq=sUZe_Am6f$rI at rVcTma4o1sgY196g]#n;g"4g0pA+[Zs8)WiqYL*gf)PaK
+qu7E1rVulfq>^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp at J:O
+rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J at Zqt^6h
+q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf
+p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~>
+nc&Ugrr4#<r;-6eq=sUZe_Am6f$rI at rVcTma4o1sgY196g]#n;g"4g0pA+[Zs8)WiqYL*gf)PaK
+qu7E1rVulfq>^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp at J:O
+rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J at Zqt^6h
+q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf
+p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~>
+nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u
+s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV6<i!<)orr;Zfr
+#Pe2ks7cHkq>1(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm
+pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*&
+rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~>
+nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u
+s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV6<i!<)orr;Zfr
+#Pe2ks7cHkq>1(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm
+pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*&
+rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~>
+nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u
+s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV6<i!<)orr;Zfr
+#Pe2ks7cHkq>1(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm
+pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*&
+rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~>
+mf3=d)ZBU2kl1Ve!<rQ/!!!?+rqHBiqu[-/#6G#1r;[K4!sA`7!!K>%mJQqZq>1!fs8W)Ls8W':
+rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q
+rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn
+s""*Iq>:'bp\Fa]qY^-`rqu0\qY^<krr)fpq>L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU
+p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~>
+mf3=d)ZBU2kl1Ve!<rQ/!!!?+rqHBiqu[-/#6G#1r;[K4!sA`7!!K>%mJQqZq>1!fs8W)Ls8W':
+rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q
+rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn
+s""*Iq>:'bp\Fa]qY^-`rqu0\qY^<krr)fpq>L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU
+p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~>
+mf3=d)ZBU2kl1Ve!<rQ/!!!?+rqHBiqu[-/#6G#1r;[K4!sA`7!!K>%mJQqZq>1!fs8W)Ls8W':
+rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q
+rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn
+s""*Iq>:'bp\Fa]qY^-`rqu0\qY^<krr)fpq>L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU
+p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~>
+mf3=d!<)op"-NWe"8i30#6Feur;6L$!<W?*"p=c'&cht4!sAo3P5Y.RrVZTlrr<#tg&M*Os8O&;
+rVZTdq=jX[NKTHdP*V8lNKa)(qY'g[rV?Ejru(h7r;-0_qi?c$QB.;hO-5\(pAb!cqu$ElqZ$Tp
+#6">qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF
+r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_ at q#'jUr;-<^s7ZEi
+rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp at nOaquQcqJcE(VJ,~>
+mf3=d!<)op"-NWe"8i30#6Feur;6L$!<W?*"p=c'&cht4!sAo3P5Y.RrVZTlrr<#tg&M*Os8O&;
+rVZTdq=jX[NKTHdP*V8lNKa)(qY'g[rV?Ejru(h7r;-0_qi?c$QB.;hO-5\(pAb!cqu$ElqZ$Tp
+#6">qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF
+r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_ at q#'jUr;-<^s7ZEi
+rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp at nOaquQcqJcE(VJ,~>
+mf3=d!<)op"-NWe"8i30#6Feur;6L$!<W?*"p=c'&cht4!sAo3P5Y.RrVZTlrr<#tg&M*Os8O&;
+rVZTdq=jX[NKTHdP*V8lNKa)(qY'g[rV?Ejru(h7r;-0_qi?c$QB.;hO-5\(pAb!cqu$ElqZ$Tp
+#6">qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF
+r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_ at q#'jUr;-<^s7ZEi
+rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp at nOaquQcqJcE(VJ,~>
+mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r
+ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl
+r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe
+qu$BjrVlcq#laf#rW<B+#m:/1*XVsmp\4C[q>:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L
+"pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4!<I[rGl.+1r:^-equ6KprVleIs0VfV~>
+mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r
+ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl
+r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe
+qu$BjrVlcq#laf#rW<B+#m:/1*XVsmp\4C[q>:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L
+"pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4!<I[rGl.+1r:^-equ6KprVleIs0VfV~>
+mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r
+ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl
+r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe
+qu$BjrVlcq#laf#rW<B+#m:/1*XVsmp\4C[q>:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L
+"pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4!<I[rGl.+1r:^-equ6KprVleIs0VfV~>
+n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5!<E<)$j65$p\t0jrr2otrn7;qrVlis
+rr)`jpAY*dq$R?0"98Z-!s&N+?iTcrqsjX`s8W)trVud+qtX\$!!iQ/!s8i3&I2bErVZWmr;R0(
+rVcWerqQ6d!!iW(!"K#4"TS].A,,igs8)Wjr;HTms8W'1rVZEcp]Ua#!=/c0#m1bE at K6<(rVZ`q
+rVnDIr;1"/#6t;3!s8Z3!!$O%rVQNlrr)`jr;ZTis7g,6!=&W*$31A6"98K$!"o;7!s/]1!"B26
+"^q6'qYL!as8;j'rVZThrVH^$!sAhu!##J8"p4r."9S]. at Uo0-pA4X_r;?NlJcE+WJ,~>
+n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5!<E<)$j65$p\t0jrr2otrn7;qrVlis
+rr)`jpAY*dq$R?0"98Z-!s&N+?iTcrqsjX`s8W)trVud+qtX\$!!iQ/!s8i3&I2bErVZWmr;R0(
+rVcWerqQ6d!!iW(!"K#4"TS].A,,igs8)Wjr;HTms8W'1rVZEcp]Ua#!=/c0#m1bE at K6<(rVZ`q
+rVnDIr;1"/#6t;3!s8Z3!!$O%rVQNlrr)`jr;ZTis7g,6!=&W*$31A6"98K$!"o;7!s/]1!"B26
+"^q6'qYL!as8;j'rVZThrVH^$!sAhu!##J8"p4r."9S]. at Uo0-pA4X_r;?NlJcE+WJ,~>
+n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5!<E<)$j65$p\t0jrr2otrn7;qrVlis
+rr)`jpAY*dq$R?0"98Z-!s&N+?iTcrqsjX`s8W)trVud+qtX\$!!iQ/!s8i3&I2bErVZWmr;R0(
+rVcWerqQ6d!!iW(!"K#4"TS].A,,igs8)Wjr;HTms8W'1rVZEcp]Ua#!=/c0#m1bE at K6<(rVZ`q
+rVnDIr;1"/#6t;3!s8Z3!!$O%rVQNlrr)`jr;ZTis7g,6!=&W*$31A6"98K$!"o;7!s/]1!"B26
+"^q6'qYL!as8;j'rVZThrVH^$!sAhu!##J8"p4r."9S]. at Uo0-pA4X_r;?NlJcE+WJ,~>
+n,N:a!<E?%!!!'!!<3'(s8Muprr<-!!!!&p!!WH(!rtjkrVc`prrE&OrrE&truM+;r;6Kcs7lEo
+"p+i+#64i-!WWHtq>1-eqYpKorVliq(]*M!!rrl4!<W<,#6k>59)eP`o]lGOrqud&rr)fqoC)YU
+9EP.m'a+L:"p,)4!<Yjlp at eF]r;HWorVZZos8W'jrVZHjp](Br!WrQ*$j$V<!)<4crVlQgrr)ir
+s8N&to)/[m"U+l4!!<9*!X&Krs7?*bqYL0drqH3cq+M"o"98E-!<EB,!WW9!!$VFF!<`N+"9nu1
+!E)Pfq=jjfrr2`mqYpKjr;?Bn!WrE*!WE'$!X/Q)p](L!"T\T'"9e]*$ij3'o)&@`q=ssgrV_<I
+[/YX~>
+n,N:a!<E?%!!!'!!<3'(s8Muprr<-!!!!&p!!WH(!rtjkrVc`prrE&OrrE&truM+;r;6Kcs7lEo
+"p+i+#64i-!WWHtq>1-eqYpKorVliq(]*M!!rrl4!<W<,#6k>59)eP`o]lGOrqud&rr)fqoC)YU
+9EP.m'a+L:"p,)4!<Yjlp at eF]r;HWorVZZos8W'jrVZHjp](Br!WrQ*$j$V<!)<4crVlQgrr)ir
+s8N&to)/[m"U+l4!!<9*!X&Krs7?*bqYL0drqH3cq+M"o"98E-!<EB,!WW9!!$VFF!<`N+"9nu1
+!E)Pfq=jjfrr2`mqYpKjr;?Bn!WrE*!WE'$!X/Q)p](L!"T\T'"9e]*$ij3'o)&@`q=ssgrV_<I
+[/YX~>
+n,N:a!<E?%!!!'!!<3'(s8Muprr<-!!!!&p!!WH(!rtjkrVc`prrE&OrrE&truM+;r;6Kcs7lEo
+"p+i+#64i-!WWHtq>1-eqYpKorVliq(]*M!!rrl4!<W<,#6k>59)eP`o]lGOrqud&rr)fqoC)YU
+9EP.m'a+L:"p,)4!<Yjlp at eF]r;HWorVZZos8W'jrVZHjp](Br!WrQ*$j$V<!)<4crVlQgrr)ir
+s8N&to)/[m"U+l4!!<9*!X&Krs7?*bqYL0drqH3cq+M"o"98E-!<EB,!WW9!!$VFF!<`N+"9nu1
+!E)Pfq=jjfrr2`mqYpKjr;?Bn!WrE*!WE'$!X/Q)p](L!"T\T'"9e]*$ij3'o)&@`q=ssgrV_<I
+[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To at q>C6kr;RZ6
+rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp
+rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH<i
+q#C6ipGrH\#QY&."TST-!!3E,qZ&&G!!33%!!<9&#m()^pAOmbs8)]jrV6Edqu$<m!<W?'!"T,3
+!s8N4!W<#u!WN-1!<N9%!!39*"onr;1Ape at rqurirqZPEs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To at q>C6kr;RZ6
+rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp
+rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH<i
+q#C6ipGrH\#QY&."TST-!!3E,qZ&&G!!33%!!<9&#m()^pAOmbs8)]jrV6Edqu$<m!<W?'!"T,3
+!s8N4!W<#u!WN-1!<N9%!!39*"onr;1Ape at rqurirqZPEs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To at q>C6kr;RZ6
+rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp
+rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH<i
+q#C6ipGrH\#QY&."TST-!!3E,qZ&&G!!33%!!<9&#m()^pAOmbs8)]jrV6Edqu$<m!<W?'!"T,3
+!s8N4!W<#u!WN-1!<N9%!!39*"onr;1Ape at rqurirqZPEs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!<E6,!X/T)!<N6+!?:t9p\k*jru:t9
+r;66[!!3-3!<iK+!s\o0!!NEBrr)Haqu-Hm!<2ur$M=&hq@!?/!"8l6rW!N3!!!E0!!!r:qu-Nn
+r;?Qorr)jhrr)cnrVkX]!<<?,$31A9!<EB-)u9I4rVQNbs8Doqrq-0r!!<3-"98]/$3:J>!!X>7
+rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZ<fp\=d[rr2ioqZ6d"!!!6)
+#64o7!;llj!"T55"pY//*r>m2pAb*brq1jB[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!<E6,!X/T)!<N6+!?:t9p\k*jru:t9
+r;66[!!3-3!<iK+!s\o0!!NEBrr)Haqu-Hm!<2ur$M=&hq@!?/!"8l6rW!N3!!!E0!!!r:qu-Nn
+r;?Qorr)jhrr)cnrVkX]!<<?,$31A9!<EB-)u9I4rVQNbs8Doqrq-0r!!<3-"98]/$3:J>!!X>7
+rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZ<fp\=d[rr2ioqZ6d"!!!6)
+#64o7!;llj!"T55"pY//*r>m2pAb*brq1jB[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!<E6,!X/T)!<N6+!?:t9p\k*jru:t9
+r;66[!!3-3!<iK+!s\o0!!NEBrr)Haqu-Hm!<2ur$M=&hq@!?/!"8l6rW!N3!!!E0!!!r:qu-Nn
+r;?Qorr)jhrr)cnrVkX]!<<?,$31A9!<EB-)u9I4rVQNbs8Doqrq-0r!!<3-"98]/$3:J>!!X>7
+rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZ<fp\=d[rr2ioqZ6d"!!!6)
+#64o7!;llj!"T55"pY//*r>m2pAb*brq1jB[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!<DH`pAFjb&HMk)p\t0kru:t9
+r;6Km"UY>3$NLA2lM^PVr:9spoD\adqY^9k,Q at Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej
+qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu
+rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec<q>'pbp]^a!&c_t-qYp'_rquTerr)io!WW9%
+!!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!<DH`pAFjb&HMk)p\t0kru:t9
+r;6Km"UY>3$NLA2lM^PVr:9spoD\adqY^9k,Q at Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej
+qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu
+rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec<q>'pbp]^a!&c_t-qYp'_rquTerr)io!WW9%
+!!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!<DH`pAFjb&HMk)p\t0kru:t9
+r;6Km"UY>3$NLA2lM^PVr:9spoD\adqY^9k,Q at Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej
+qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu
+rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec<q>'pbp]^a!&c_t-qYp'_rquTerr)io!WW9%
+!!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*<Jr;IW5r;?O"
+!!WH*"9J]*r;Z0VrTF;#rVZZhs8Mrr,Q at Z?rqQKekQ1bb!XJl5(&[e$kl:DVq#17#rr)`krVuos
+rr)j*rr)cnrquNq"q1S6!WN'brV$3j!p9%Pq"agep\=[^s8<K/!sel0!!3)nqtC$akmeL.r;QNh
+rV,je!WW3*$3U\C!rsJ\q"a7PqYU3gqtg-brZ_=4r;IEH";U1Zq#9jZrr)Qjs82lt!<<*%!WE&o
+qu6Bcq>L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*<Jr;IW5r;?O"
+!!WH*"9J]*r;Z0VrTF;#rVZZhs8Mrr,Q at Z?rqQKekQ1bb!XJl5(&[e$kl:DVq#17#rr)`krVuos
+rr)j*rr)cnrquNq"q1S6!WN'brV$3j!p9%Pq"agep\=[^s8<K/!sel0!!3)nqtC$akmeL.r;QNh
+rV,je!WW3*$3U\C!rsJ\q"a7PqYU3gqtg-brZ_=4r;IEH";U1Zq#9jZrr)Qjs82lt!<<*%!WE&o
+qu6Bcq>L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*<Jr;IW5r;?O"
+!!WH*"9J]*r;Z0VrTF;#rVZZhs8Mrr,Q at Z?rqQKekQ1bb!XJl5(&[e$kl:DVq#17#rr)`krVuos
+rr)j*rr)cnrquNq"q1S6!WN'brV$3j!p9%Pq"agep\=[^s8<K/!sel0!!3)nqtC$akmeL.r;QNh
+rV,je!WW3*$3U\C!rsJ\q"a7PqYU3gqtg-brZ_=4r;IEH";U1Zq#9jZrr)Qjs82lt!<<*%!WE&o
+qu6Bcq>L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\
+"Ut\=%0c_-r;?Ek!<DHYrr2coqY^@7rr)fnqYU0k!Xf,4"pG,*o`+ddrpp'bqZ?itrVZWmrrE&s
+s%`Rlr:Kscp+uaN!rr],q=jOUq(i$Sd)aS^d*p4ecdC+[!<EB,#lk,8q>C!]q=b$or:g-_p%n4M
+ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie
+qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\
+"Ut\=%0c_-r;?Ek!<DHYrr2coqY^@7rr)fnqYU0k!Xf,4"pG,*o`+ddrpp'bqZ?itrVZWmrrE&s
+s%`Rlr:Kscp+uaN!rr],q=jOUq(i$Sd)aS^d*p4ecdC+[!<EB,#lk,8q>C!]q=b$or:g-_p%n4M
+ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie
+qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\
+"Ut\=%0c_-r;?Ek!<DHYrr2coqY^@7rr)fnqYU0k!Xf,4"pG,*o`+ddrpp'bqZ?itrVZWmrrE&s
+s%`Rlr:Kscp+uaN!rr],q=jOUq(i$Sd)aS^d*p4ecdC+[!<EB,#lk,8q>C!]q=b$or:g-_p%n4M
+ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie
+qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu
+rrNuB!WiN+%1NCAq#C![rVQa!rV-<go`+pgrrE&tr>>J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs
+rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!<iW-#6Fhunbr1]!sS>qp%nXQ
+r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$
+r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu
+rrNuB!WiN+%1NCAq#C![rVQa!rV-<go`+pgrrE&tr>>J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs
+rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!<iW-#6Fhunbr1]!sS>qp%nXQ
+r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$
+r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu
+rrNuB!WiN+%1NCAq#C![rVQa!rV-<go`+pgrrE&tr>>J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs
+rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!<iW-#6Fhunbr1]!sS>qp%nXQ
+r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$
+r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~>
+li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs
+#RCM2!<3'<!WrN)#6Y&1"TSj5r;HQiqsXamq<\+[q#C<lrr<!Crr)cpq>'dh!!WE'"p"o*rUp#Z
+s7#sarE^)+r;HNhrVQTnrVoRjr;6<drVQEl!sJ`1!r;floDeai"9ni5!"Ao4!!<?("98K-!"&f.
+ at ef]qq=ssi#laSlp%\R_quHd(!<N9'"9;U$q=XR`s7lKfrqeJHrqQHfqYg-bqYC$[s7c?_rVcd-
+TDSQ^q"aphqZ-Zt!!*-$rr2iprVcNkpAb*hr;ZTl&,l:tpA=daqZ$1l"p"]'r;HWqrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs
+#RCM2!<3'<!WrN)#6Y&1"TSj5r;HQiqsXamq<\+[q#C<lrr<!Crr)cpq>'dh!!WE'"p"o*rUp#Z
+s7#sarE^)+r;HNhrVQTnrVoRjr;6<drVQEl!sJ`1!r;floDeai"9ni5!"Ao4!!<?("98K-!"&f.
+ at ef]qq=ssi#laSlp%\R_quHd(!<N9'"9;U$q=XR`s7lKfrqeJHrqQHfqYg-bqYC$[s7c?_rVcd-
+TDSQ^q"aphqZ-Zt!!*-$rr2iprVcNkpAb*hr;ZTl&,l:tpA=daqZ$1l"p"]'r;HWqrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs
+#RCM2!<3'<!WrN)#6Y&1"TSj5r;HQiqsXamq<\+[q#C<lrr<!Crr)cpq>'dh!!WE'"p"o*rUp#Z
+s7#sarE^)+r;HNhrVQTnrVoRjr;6<drVQEl!sJ`1!r;floDeai"9ni5!"Ao4!!<?("98K-!"&f.
+ at ef]qq=ssi#laSlp%\R_quHd(!<N9'"9;U$q=XR`s7lKfrqeJHrqQHfqYg-bqYC$[s7c?_rVcd-
+TDSQ^q"aphqZ-Zt!!*-$rr2iprVcNkpAb*hr;ZTl&,l:tpA=daqZ$1l"p"]'r;HWqrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!<i2sqtU'c"onf6
+"9&<#!WE-:!<NB-!s/N+q=jd\q#9jg!;l``rVH<hrr2os,5qH:qtYpL"pt>1!sO#GrVQEpo_/7Y
+qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[*
+r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i
+!WW6$!<E3"s8N&rqh0cWM2-nApkTH8Mtd&Fp at S4Yq"b-sM"^]DrrE%Ls1//[~>
+li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!<i2sqtU'c"onf6
+"9&<#!WE-:!<NB-!s/N+q=jd\q#9jg!;l``rVH<hrr2os,5qH:qtYpL"pt>1!sO#GrVQEpo_/7Y
+qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[*
+r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i
+!WW6$!<E3"s8N&rqh0cWM2-nApkTH8Mtd&Fp at S4Yq"b-sM"^]DrrE%Ls1//[~>
+li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!<i2sqtU'c"onf6
+"9&<#!WE-:!<NB-!s/N+q=jd\q#9jg!;l``rVH<hrr2os,5qH:qtYpL"pt>1!sO#GrVQEpo_/7Y
+qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[*
+r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i
+!WW6$!<E3"s8N&rqh0cWM2-nApkTH8Mtd&Fp at S4Yq"b-sM"^]DrrE%Ls1//[~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!<E0#a8ZtOr;6BcqY1*o$N^D4r;$9cqYQHY
+":>D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42 at qtp3f!<r]4!s&T.q"jd`pBYC0
+r:Ts^!W`2iqYC!`s8Mus)?0U4q>L*cp]^p)!!<H(p\k'breq0m!<r]%!*]L/!W`E.p&"U]s7g[B
+M>?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/&#7PQlpA+L\qt^!l!H%c0q>:0k
+quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!<E0#a8ZtOr;6BcqY1*o$N^D4r;$9cqYQHY
+":>D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42 at qtp3f!<r]4!s&T.q"jd`pBYC0
+r:Ts^!W`2iqYC!`s8Mus)?0U4q>L*cp]^p)!!<H(p\k'breq0m!<r]%!*]L/!W`E.p&"U]s7g[B
+M>?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/&#7PQlpA+L\qt^!l!H%c0q>:0k
+quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!<E0#a8ZtOr;6BcqY1*o$N^D4r;$9cqYQHY
+":>D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42 at qtp3f!<r]4!s&T.q"jd`pBYC0
+r:Ts^!W`2iqYC!`s8Mus)?0U4q>L*cp]^p)!!<H(p\k'breq0m!<r]%!*]L/!W`E.p&"U]s7g[B
+M>?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/&#7PQlpA+L\qt^!l!H%c0q>:0k
+quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!<N6$a8ZtQs8Mlkp[tBb#QY54rVH?grVQTr
+"Tel)!WN6$!<3*"!<3*-p\ssWrV-C!q>'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR!
+q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b
+p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj!
+!!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!<N6$a8ZtQs8Mlkp[tBb#QY54rVH?grVQTr
+"Tel)!WN6$!<3*"!<3*-p\ssWrV-C!q>'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR!
+q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b
+p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj!
+!!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!<N6$a8ZtQs8Mlkp[tBb#QY54rVH?grVQTr
+"Tel)!WN6$!<3*"!<3*-p\ssWrV-C!q>'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR!
+q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b
+p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj!
+!!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b
+r!<E,o)Saj&,Z>&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!<W8mq#1!j$f_-brUdf)qYgBi
+qu??dru(h7s763fpAY1*":>5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m)
+!s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t
+s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b
+r!<E,o)Saj&,Z>&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!<W8mq#1!j$f_-brUdf)qYgBi
+qu??dru(h7s763fpAY1*":>5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m)
+!s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t
+s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b
+r!<E,o)Saj&,Z>&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!<W8mq#1!j$f_-brUdf)qYgBi
+qu??dru(h7s763fpAY1*":>5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m)
+!s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t
+s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~>
+li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^
+p<qRAnCJ3No()DIq$$rqs7ZEjq#Bs`s!%I?qt0e@!<E6/"Ub=Ur:KjVquHlprUfs`m1UiBrqlKe
+r;-F/rquZkqu6U#"U5#/"oJ2jr:]g8g"4[Gf.PV#eBunGrVZWiqum?!q#:$fp&"^g!Wi?1#6>23
+o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$!<N<$s8N&urW!<(
+rquK_qYC.*#64u1!!4PIoD8Cao)JsdqYU6jrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^
+p<qRAnCJ3No()DIq$$rqs7ZEjq#Bs`s!%I?qt0e@!<E6/"Ub=Ur:KjVquHlprUfs`m1UiBrqlKe
+r;-F/rquZkqu6U#"U5#/"oJ2jr:]g8g"4[Gf.PV#eBunGrVZWiqum?!q#:$fp&"^g!Wi?1#6>23
+o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$!<N<$s8N&urW!<(
+rquK_qYC.*#64u1!!4PIoD8Cao)JsdqYU6jrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^
+p<qRAnCJ3No()DIq$$rqs7ZEjq#Bs`s!%I?qt0e@!<E6/"Ub=Ur:KjVquHlprUfs`m1UiBrqlKe
+r;-F/rquZkqu6U#"U5#/"oJ2jr:]g8g"4[Gf.PV#eBunGrVZWiqum?!q#:$fp&"^g!Wi?1#6>23
+o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$!<N<$s8N&urW!<(
+rquK_qYC.*#64u1!!4PIoD8Cao)JsdqYU6jrdk*[s*t~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d
+qu6Kgr;?TorW)utrr<!4rVQ-arquco#Nbg[p\spZs8N&trr2p'rVQTb!#5J=!WE'6rq$-gnKIr5
+s8DcmrqHL.p%&+]rUfpc(]=:3nbiCr!!<9(!;lcmq>U<hq=OI]rV?I7nG`@bqY]m_s6]g[!9sL]
+q>Tp_rqd-)":5&6"9 at cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+
+!!*'#!Wi<#rr2p"!!2lkp&=sk!<WT+!"Jl*qtK[T)%6HAr;HTnJcE:\J,~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d
+qu6Kgr;?TorW)utrr<!4rVQ-arquco#Nbg[p\spZs8N&trr2p'rVQTb!#5J=!WE'6rq$-gnKIr5
+s8DcmrqHL.p%&+]rUfpc(]=:3nbiCr!!<9(!;lcmq>U<hq=OI]rV?I7nG`@bqY]m_s6]g[!9sL]
+q>Tp_rqd-)":5&6"9 at cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+
+!!*'#!Wi<#rr2p"!!2lkp&=sk!<WT+!"Jl*qtK[T)%6HAr;HTnJcE:\J,~>
+li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d
+qu6Kgr;?TorW)utrr<!4rVQ-arquco#Nbg[p\spZs8N&trr2p'rVQTb!#5J=!WE'6rq$-gnKIr5
+s8DcmrqHL.p%&+]rUfpc(]=:3nbiCr!!<9(!;lcmq>U<hq=OI]rV?I7nG`@bqY]m_s6]g[!9sL]
+q>Tp_rqd-)":5&6"9 at cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+
+!!*'#!Wi<#rr2p"!!2lkp&=sk!<WT+!"Jl*qtK[T)%6HAr;HTnJcE:\J,~>
+li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!<E0#rr0q;+8Ps9li%.m"onl0oCr"Ymf)hO
+rqZTnrVlfprr)iqs8Dp.qYp$[r:L6orVlfnr:p9frVlfqruq@<q#:j)&-;h?!"8;pqYC*j!XJes
+s7H$b$NU2)pAXjdq#;9,rr;io$k`OF!=8,krV,p_q"t*]rql]orVc`pIf99>s8)corUp0er<`Q'
+q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn
+quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t
+ec5[Krr<#ts8W,upAY<qs8W)ts8N#rrri?$rr2rsrqQNnrqcZlrr)lrrn at C&~>
+li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!<E0#rr0q;+8Ps9li%.m"onl0oCr"Ymf)hO
+rqZTnrVlfprr)iqs8Dp.qYp$[r:L6orVlfnr:p9frVlfqruq@<q#:j)&-;h?!"8;pqYC*j!XJes
+s7H$b$NU2)pAXjdq#;9,rr;io$k`OF!=8,krV,p_q"t*]rql]orVc`pIf99>s8)corUp0er<`Q'
+q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn
+quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t
+ec5[Krr<#ts8W,upAY<qs8W)ts8N#rrri?$rr2rsrqQNnrqcZlrr)lrrn at C&~>
+li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!<E0#rr0q;+8Ps9li%.m"onl0oCr"Ymf)hO
+rqZTnrVlfprr)iqs8Dp.qYp$[r:L6orVlfnr:p9frVlfqruq@<q#:j)&-;h?!"8;pqYC*j!XJes
+s7H$b$NU2)pAXjdq#;9,rr;io$k`OF!=8,krV,p_q"t*]rql]orVc`pIf99>s8)corUp0er<`Q'
+q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn
+quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t
+ec5[Krr<#ts8W,upAY<qs8W)ts8N#rrri?$rr2rsrqQNnrqcZlrr)lrrn at C&~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:rrE&tr at J'O%KQV:rVu<br:p6as8Mle
+rVZTmr;$6irqu3]p[\:\rVcg"r;-9er;HWoqYq`:qWlu=!!Nf4"p#nGq"=RT#mp_6rVc$[r at .g$
+rV6$`rqQLGrqu`fpA=pl"pY23r;QHgpAFgdq>^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q:
+rVus#!<WB+rVl`nqtpNuqtg3dqYU3hrr2lr2ZEaV!WiQ/!s&N&rqufnrr<'!r;ZcrquQj!!!*'"
+s8W)us8E!$o`"^crq63gr:p<erV?Kqqu@$%q>1*er<!<(rqccprVk^Srr2rtrr1dSrr2fps8N#t
+s8N&us8M`l#Oq]krV?HjrVQR!s8DorrqlZnrr;oq!WE#os82d$s8Dusq>BjarS7F'~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:rrE&tr at J'O%KQV:rVu<br:p6as8Mle
+rVZTmr;$6irqu3]p[\:\rVcg"r;-9er;HWoqYq`:qWlu=!!Nf4"p#nGq"=RT#mp_6rVc$[r at .g$
+rV6$`rqQLGrqu`fpA=pl"pY23r;QHgpAFgdq>^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q:
+rVus#!<WB+rVl`nqtpNuqtg3dqYU3hrr2lr2ZEaV!WiQ/!s&N&rqufnrr<'!r;ZcrquQj!!!*'"
+s8W)us8E!$o`"^crq63gr:p<erV?Kqqu@$%q>1*er<!<(rqccprVk^Srr2rtrr1dSrr2fps8N#t
+s8N&us8M`l#Oq]krV?HjrVQR!s8DorrqlZnrr;oq!WE#os82d$s8Dusq>BjarS7F'~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:rrE&tr at J'O%KQV:rVu<br:p6as8Mle
+rVZTmr;$6irqu3]p[\:\rVcg"r;-9er;HWoqYq`:qWlu=!!Nf4"p#nGq"=RT#mp_6rVc$[r at .g$
+rV6$`rqQLGrqu`fpA=pl"pY23r;QHgpAFgdq>^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q:
+rVus#!<WB+rVl`nqtpNuqtg3dqYU3hrr2lr2ZEaV!WiQ/!s&N&rqufnrr<'!r;ZcrquQj!!!*'"
+s8W)us8E!$o`"^crq63gr:p<erV?Kqqu@$%q>1*er<!<(rqccprVk^Srr2rtrr1dSrr2fps8N#t
+s8N&us8M`l#Oq]krV?HjrVQR!s8DorrqlZnrr;oq!WE#os82d$s8Dusq>BjarS7F'~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s"FBMrUp?u!!rf0rVcThq>0d_s82co
+p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!<N?-p%SFYp%nmr
+p&Fs^rqQLGrV?*`s6p:"!!WE+qYL6fp[J1Rq>U<brp]jZpAY$er9sRVoDSO_r;Qa&r:Bmdru(e8
+rVus#!!30(rr;opr;6Ttqtp<gqu$Bjrr2os.K0;H!<NB*!WW<#s8Duprr<'!r;ZcrquQj!!!*'"
+s8W)us8E'%qtg3hr<`&mrVliro_nglqu@!$q>(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll
+rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s"FBMrUp?u!!rf0rVcThq>0d_s82co
+p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!<N?-p%SFYp%nmr
+p&Fs^rqQLGrV?*`s6p:"!!WE+qYL6fp[J1Rq>U<brp]jZpAY$er9sRVoDSO_r;Qa&r:Bmdru(e8
+rVus#!!30(rr;opr;6Ttqtp<gqu$Bjrr2os.K0;H!<NB*!WW<#s8Duprr<'!r;ZcrquQj!!!*'"
+s8W)us8E'%qtg3hr<`&mrVliro_nglqu@!$q>(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll
+rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s"FBMrUp?u!!rf0rVcThq>0d_s82co
+p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!<N?-p%SFYp%nmr
+p&Fs^rqQLGrV?*`s6p:"!!WE+qYL6fp[J1Rq>U<brp]jZpAY$er9sRVoDSO_r;Qa&r:Bmdru(e8
+rVus#!!30(rr;opr;6Ttqtp<gqu$Bjrr2os.K0;H!<NB*!WW<#s8Duprr<'!r;ZcrquQj!!!*'"
+s8W)us8E'%qtg3hr<`&mrVliro_nglqu@!$q>(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll
+rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV-X"!Xf,8p%S=Wq"XZbY,\h0
+Y-Oq-WMH]"X0/K%rV60drhTa#p\t-hrr;uurr2p at rVQEn"9Si1"9S]!s8;BbXonk3&,,qoq#1'q
+!W;rqs8;Zls8+ADq"jmk!WiQ-!rqulq"jdbXK8S,X0/G"Yck4/Y,\S,r;HBbs7EJt;tU"arr3]2
+s8E!!!<<-$"9/?"s8Mos!W;oqrr)corr4nTs8N*#!WW6$!r`/ts82fr!<;usrr;lt!!*'#!!*'!
+rr<#t!<VrgqYp?erqQ?fs82im!!<&u#la\srVHEl"T88u!r`,tY5eP$rVllrq>U3i#Q4AfrVcWl
+qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV-X"!Xf,8p%S=Wq"XZbY,\h0
+Y-Oq-WMH]"X0/K%rV60drhTa#p\t-hrr;uurr2p at rVQEn"9Si1"9S]!s8;BbXonk3&,,qoq#1'q
+!W;rqs8;Zls8+ADq"jmk!WiQ-!rqulq"jdbXK8S,X0/G"Yck4/Y,\S,r;HBbs7EJt;tU"arr3]2
+s8E!!!<<-$"9/?"s8Mos!W;oqrr)corr4nTs8N*#!WW6$!r`/ts82fr!<;usrr;lt!!*'#!!*'!
+rr<#t!<VrgqYp?erqQ?fs82im!!<&u#la\srVHEl"T88u!r`,tY5eP$rVllrq>U3i#Q4AfrVcWl
+qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV-X"!Xf,8p%S=Wq"XZbY,\h0
+Y-Oq-WMH]"X0/K%rV60drhTa#p\t-hrr;uurr2p at rVQEn"9Si1"9S]!s8;BbXonk3&,,qoq#1'q
+!W;rqs8;Zls8+ADq"jmk!WiQ-!rqulq"jdbXK8S,X0/G"Yck4/Y,\S,r;HBbs7EJt;tU"arr3]2
+s8E!!!<<-$"9/?"s8Mos!W;oqrr)corr4nTs8N*#!WW6$!r`/ts82fr!<;usrr;lt!!*'#!!*'!
+rr<#t!<VrgqYp?erqQ?fs82im!!<&u#la\srVHEl"T88u!r`,tY5eP$rVllrq>U3i#Q4AfrVcWl
+qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!.OArV?Qt$j$\8p%J7Qo)/:d!bcF_
+BP_Gc!XSu4"oni+r;$?d!sAl.rql`qrr<#urr<!ArVZX!!rrZ4!=/c)pAama!<WT0!W;`ds8)<t
+!<;upqYp<j0E(nEs8)He#64c1!X/Q"q>0aXr;cn5 at r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1
+rVuis!<<*#!!E6#rr<#s!<N/uqZ$Tprr3-"s8E!!r;\DNrVulsqu6Wrs8;ors82ou!<<-#!<<)u
+s8W'%!;c]cr:]palM^YWr;66h!rN$(rr)cpr;H[!rVlirrn[VQrq$0err)lorql]qrr)j!rr;us
+rVm0%rr<#trr<#tq#:]nq"addqu?Worr)cos8N0!r;?Klq#C6jrVuos$2s]"s8)Kerr)iQs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!.OArV?Qt$j$\8p%J7Qo)/:d!bcF_
+BP_Gc!XSu4"oni+r;$?d!sAl.rql`qrr<#urr<!ArVZX!!rrZ4!=/c)pAama!<WT0!W;`ds8)<t
+!<;upqYp<j0E(nEs8)He#64c1!X/Q"q>0aXr;cn5 at r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1
+rVuis!<<*#!!E6#rr<#s!<N/uqZ$Tprr3-"s8E!!r;\DNrVulsqu6Wrs8;ors82ou!<<-#!<<)u
+s8W'%!;c]cr:]palM^YWr;66h!rN$(rr)cpr;H[!rVlirrn[VQrq$0err)lorql]qrr)j!rr;us
+rVm0%rr<#trr<#tq#:]nq"addqu?Worr)cos8N0!r;?Klq#C6jrVuos$2s]"s8)Kerr)iQs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!.OArV?Qt$j$\8p%J7Qo)/:d!bcF_
+BP_Gc!XSu4"oni+r;$?d!sAl.rql`qrr<#urr<!ArVZX!!rrZ4!=/c)pAama!<WT0!W;`ds8)<t
+!<;upqYp<j0E(nEs8)He#64c1!X/Q"q>0aXr;cn5 at r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1
+rVuis!<<*#!!E6#rr<#s!<N/uqZ$Tprr3-"s8E!!r;\DNrVulsqu6Wrs8;ors82ou!<<-#!<<)u
+s8W'%!;c]cr:]palM^YWr;66h!rN$(rr)cpr;H[!rVlirrn[VQrq$0err)lorql]qrr)j!rr;us
+rVm0%rr<#trr<#tq#:]nq"addqu?Worr)cos8N0!r;?Klq#C6jrVuos$2s]"s8)Kerr)iQs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV:X;%gN:@IJ3L:p\X^c"8que
+s7c3i!!NK.%fch1q>1!]p&tQuq"Xmgrr<!@rqq<K"9er5!<`K#o_\:S!sSo1!JL4=qYU#9"+C"F
+pA"Y?r;QZnq=jo<!!iT6#CZ=Gq>B^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut
+!!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV
+qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orr<!7rr)cns8W&q
+rr<#trVc`pr;Q]nr;Q]nq>UEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r
+rs\o*rV$9br;QTmr;HWPs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV:X;%gN:@IJ3L:p\X^c"8que
+s7c3i!!NK.%fch1q>1!]p&tQuq"Xmgrr<!@rqq<K"9er5!<`K#o_\:S!sSo1!JL4=qYU#9"+C"F
+pA"Y?r;QZnq=jo<!!iT6#CZ=Gq>B^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut
+!!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV
+qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orr<!7rr)cns8W&q
+rr<#trVc`pr;Q]nr;Q]nq>UEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r
+rs\o*rV$9br;QTmr;HWPs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrV:X;%gN:@IJ3L:p\X^c"8que
+s7c3i!!NK.%fch1q>1!]p&tQuq"Xmgrr<!@rqq<K"9er5!<`K#o_\:S!sSo1!JL4=qYU#9"+C"F
+pA"Y?r;QZnq=jo<!!iT6#CZ=Gq>B^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut
+!!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV
+qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orr<!7rr)cns8W&q
+rr<#trVc`pr;Q]nr;Q]nq>UEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r
+rs\o*rV$9br;QTmr;HWPs*t~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrVlHi"U+o6"8qokp\a^o!Vuca
+s6KIa!!EN.#QU:jpAOX\o`,'nqY:(:rr)iqs8Ms!"9nu/#6=snrV$0^p]1X+!!`l'o_\I_r<32r
+s7lBh0E1kFrVlQcr;d$6#6k5(qu$-`q$$rqqu-3brs/Z+"9JZ1RJ?gTqt0ae$2sVpr;Q^"rVuis
+!<N0"$N^5+rqufq!!*#urq??nrVuin!!*0"rr4DDrr<'!r;ZcrquQj!!!*'"s8W)us8E!)s7Q9c
+meQhVq>U0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj
+rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq at WApqY9mbs8Momr;HQj
+qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrVlHi"U+o6"8qokp\a^o!Vuca
+s6KIa!!EN.#QU:jpAOX\o`,'nqY:(:rr)iqs8Ms!"9nu/#6=snrV$0^p]1X+!!`l'o_\I_r<32r
+s7lBh0E1kFrVlQcr;d$6#6k5(qu$-`q$$rqqu-3brs/Z+"9JZ1RJ?gTqt0ae$2sVpr;Q^"rVuis
+!<N0"$N^5+rqufq!!*#urq??nrVuin!!*0"rr4DDrr<'!r;ZcrquQj!!!*'"s8W)us8E!)s7Q9c
+meQhVq>U0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj
+rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq at WApqY9mbs8Momr;HQj
+qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s!n$HrVlHi"U+o6"8qokp\a^o!Vuca
+s6KIa!!EN.#QU:jpAOX\o`,'nqY:(:rr)iqs8Ms!"9nu/#6=snrV$0^p]1X+!!`l'o_\I_r<32r
+s7lBh0E1kFrVlQcr;d$6#6k5(qu$-`q$$rqqu-3brs/Z+"9JZ1RJ?gTqt0ae$2sVpr;Q^"rVuis
+!<N0"$N^5+rqufq!!*#urq??nrVuin!!*0"rr4DDrr<'!r;ZcrquQj!!!*'"s8W)us8E!)s7Q9c
+meQhVq>U0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj
+rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq at WApqY9mbs8Momr;HQj
+qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s""*IrVQ?j"98H5!VlQgq>L3r!rVii
+q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu
+rVcQes"F!Bq>^<jq>14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K#
+!!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u
+#u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm
+r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM#
+p\asdqu$Bjrqu]mrr2lqr!E5prqQ at kq"t!grVllsjSs`~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s""*IrVQ?j"98H5!VlQgq>L3r!rVii
+q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu
+rVcQes"F!Bq>^<jq>14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K#
+!!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u
+#u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm
+r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM#
+p\asdqu$Bjrqu]mrr2lqr!E5prqQ at kq"t!grVllsjSs`~>
+li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W<!"!<<,:s""*IrVQ?j"98H5!VlQgq>L3r!rVii
+q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu
+rVcQes"F!Bq>^<jq>14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K#
+!!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u
+#u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm
+r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM#
+p\asdqu$Bjrqu]mrr2lqr!E5prqQ at kq"t!grVllsjSs`~>
+li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF
+r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu
+qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t
+rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1
+rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9
+r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg
+r;?Nkr:^-io_\L_q#:![rqc<dqY1!erVZZnqu6HdrpB^ao`+j]s7S8V2#dLHrVQNerql`qrp9Z8~>
+li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF
+r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu
+qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t
+rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1
+rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9
+r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg
+r;?Nkr:^-io_\L_q#:![rqc<dqY1!erVZZnqu6HdrpB^ao`+j]s7S8V2#dLHrVQNerql`qrp9Z8~>
+li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF
+r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu
+qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t
+rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1
+rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9
+r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg
+r;?Nkr:^-io_\L_q#:![rqc<dqY1!erVZZnqu6HdrpB^ao`+j]s7S8V2#dLHrVQNerql`qrp9Z8~>
+li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\
+rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`i</fQ
+rquZns8N&us8N&u1B.4U#R(5/#QOc$mf!.a%fuP*rVcg!!=&W3!"nbqrq,s]$O?M,n+?GTs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$3L2+rr)fq!!*&srr*#t!<<0!!!<0"rVlcr
+!W2p%!so)1!$1e4rW*!#rW!6*!<)rsrVu`p!<)rtrndYcp\t'crpB(OrpTRUqY^18r>kqZrZ;+7
+3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj
+r@[jDn,+4O+<V[E+Y"i7q>C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~>
+li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\
+rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`i</fQ
+rquZns8N&us8N&u1B.4U#R(5/#QOc$mf!.a%fuP*rVcg!!=&W3!"nbqrq,s]$O?M,n+?GTs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$3L2+rr)fq!!*&srr*#t!<<0!!!<0"rVlcr
+!W2p%!so)1!$1e4rW*!#rW!6*!<)rsrVu`p!<)rtrndYcp\t'crpB(OrpTRUqY^18r>kqZrZ;+7
+3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj
+r@[jDn,+4O+<V[E+Y"i7q>C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~>
+li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\
+rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`i</fQ
+rquZns8N&us8N&u1B.4U#R(5/#QOc$mf!.a%fuP*rVcg!!=&W3!"nbqrq,s]$O?M,n+?GTs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$3L2+rr)fq!!*&srr*#t!<<0!!!<0"rVlcr
+!W2p%!so)1!$1e4rW*!#rW!6*!<)rsrVu`p!<)rtrndYcp\t'crpB(OrpTRUqY^18r>kqZrZ;+7
+3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj
+r@[jDn,+4O+<V[E+Y"i7q>C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~>
+li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np
+"o\K2'F4^<r;QWno)\pbs8)Qks8FP9r:p9[#6Or+#Qk&3q=ag`nG`Ii!<<<)#8[4.rqlHh!!WE#
+r;ZfrrVc`ps8W)trtt\1q#CU#$NLA*s7uE^p]Lp&q=jRi!!3B'!#>M.rr2Ta!<W8brpp'fs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!%KcV/rr2lr!!*&srr<#rq>^`us8N&uqucit
+$Npb?"V(bCq#:*i!r`0+!<E)urr)lo!!)uts8LmT:]17cr:Bper:'^`rY#GJ!!<?+!<<*#":bS?
+qu6BfqY]st$j at 1J"Vq(L!!NQ6!"9&2nG<.]rr2EdlLt2Orr)Wis7PXUqY(*s$k;k+q>L1"r;HWo
+&HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~>
+li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np
+"o\K2'F4^<r;QWno)\pbs8)Qks8FP9r:p9[#6Or+#Qk&3q=ag`nG`Ii!<<<)#8[4.rqlHh!!WE#
+r;ZfrrVc`ps8W)trtt\1q#CU#$NLA*s7uE^p]Lp&q=jRi!!3B'!#>M.rr2Ta!<W8brpp'fs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!%KcV/rr2lr!!*&srr<#rq>^`us8N&uqucit
+$Npb?"V(bCq#:*i!r`0+!<E)urr)lo!!)uts8LmT:]17cr:Bper:'^`rY#GJ!!<?+!<<*#":bS?
+qu6BfqY]st$j at 1J"Vq(L!!NQ6!"9&2nG<.]rr2EdlLt2Orr)Wis7PXUqY(*s$k;k+q>L1"r;HWo
+&HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~>
+li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np
+"o\K2'F4^<r;QWno)\pbs8)Qks8FP9r:p9[#6Or+#Qk&3q=ag`nG`Ii!<<<)#8[4.rqlHh!!WE#
+r;ZfrrVc`ps8W)trtt\1q#CU#$NLA*s7uE^p]Lp&q=jRi!!3B'!#>M.rr2Ta!<W8brpp'fs8W)u
+rr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!%KcV/rr2lr!!*&srr<#rq>^`us8N&uqucit
+$Npb?"V(bCq#:*i!r`0+!<E)urr)lo!!)uts8LmT:]17cr:Bper:'^`rY#GJ!!<?+!<<*#":bS?
+qu6BfqY]st$j at 1J"Vq(L!!NQ6!"9&2nG<.]rr2EdlLt2Orr)Wis7PXUqY(*s$k;k+q>L1"r;HWo
+&HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~>
+li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS<!!2cjq#:9i"qU^t
+qq;5b!!WT,#64]#p%SC[!WrB"qtpCDrr)W[rVlfgrVup$!!!*$!;?H^s8Mut%KHP<"p+f'p&=sd
+rWE6!qZ$Qnrqlots8W)trr4eRqt^!f#Qb&8!ri/err;g!!VZHjkPtS`!!!N4nb<%Oqu-Hn#Q=;j
+rq??ks8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'A!r`/us8Drt!<<#trr2fr!!*'"
+!<E)urr;ok!!!$$!WE'7"9AK'!!hlg!WrE&!<E3"s8MusqZ$Wps8W)Ts"=<ArVlfdp?qM7"VMFm
+o_SF^rVQBaqYg@*'+*m^rVlff!"'P:rr2Wio_J=]o_ngmjm2sLr;]Lt'DhJ'p@\C`q!n@^p'25u
+*!,F!rr)clqu$BkrW<?%p&4m[rq?<j!"&r/p\"R]k5P,Np(IE-rr2Warr2lnobnJB'*[Iorq6<h
+rr2'[J,~>
+li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS<!!2cjq#:9i"qU^t
+qq;5b!!WT,#64]#p%SC[!WrB"qtpCDrr)W[rVlfgrVup$!!!*$!;?H^s8Mut%KHP<"p+f'p&=sd
+rWE6!qZ$Qnrqlots8W)trr4eRqt^!f#Qb&8!ri/err;g!!VZHjkPtS`!!!N4nb<%Oqu-Hn#Q=;j
+rq??ks8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'A!r`/us8Drt!<<#trr2fr!!*'"
+!<E)urr;ok!!!$$!WE'7"9AK'!!hlg!WrE&!<E3"s8MusqZ$Wps8W)Ts"=<ArVlfdp?qM7"VMFm
+o_SF^rVQBaqYg@*'+*m^rVlff!"'P:rr2Wio_J=]o_ngmjm2sLr;]Lt'DhJ'p@\C`q!n@^p'25u
+*!,F!rr)clqu$BkrW<?%p&4m[rq?<j!"&r/p\"R]k5P,Np(IE-rr2Warr2lnobnJB'*[Iorq6<h
+rr2'[J,~>
+li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS<!!2cjq#:9i"qU^t
+qq;5b!!WT,#64]#p%SC[!WrB"qtpCDrr)W[rVlfgrVup$!!!*$!;?H^s8Mut%KHP<"p+f'p&=sd
+rWE6!qZ$Qnrqlots8W)trr4eRqt^!f#Qb&8!ri/err;g!!VZHjkPtS`!!!N4nb<%Oqu-Hn#Q=;j
+rq??ks8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'A!r`/us8Drt!<<#trr2fr!!*'"
+!<E)urr;ok!!!$$!WE'7"9AK'!!hlg!WrE&!<E3"s8MusqZ$Wps8W)Ts"=<ArVlfdp?qM7"VMFm
+o_SF^rVQBaqYg@*'+*m^rVlff!"'P:rr2Wio_J=]o_ngmjm2sLr;]Lt'DhJ'p@\C`q!n@^p'25u
+*!,F!rr)clqu$BkrW<?%p&4m[rq?<j!"&r/p\"R]k5P,Np(IE-rr2Warr2lnobnJB'*[Iorq6<h
+rr2'[J,~>
+li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp at e[i!<W?2r;HBgq#;rK
+ci3A>!<<3%#mLG0p%n^fo at +!pqYC-gs""*Ir;Z`cp&4@,!<WT1"9eo.qu6Hjp%8D9"V(P6(^Ta2
+pAXUZ#RC>)r;HTl"TA?"rr2os1]I:IrsJl<!Wri,qsjI\odgd+qY1*r#m:50!!*#fp](6\aTO*g
+rVcTgrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#u(=s8N&rrr<'!rr2clqu[!&
+!!!'#rVuiqqXuTA0`NdC/hAJ5.P<>'#583&!<E6'!<3#trVu`p!<)rtrndZQr;Q<^r;-Bje,hH+
+s82fmqYgEnrqu`oqu6ON.LF#cp\Y$nr;?3^s8W)sq>0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF,
+!<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq at NSR$NBu$!<`;s
+qZ$9brVlfZs*t~>
+li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp at e[i!<W?2r;HBgq#;rK
+ci3A>!<<3%#mLG0p%n^fo at +!pqYC-gs""*Ir;Z`cp&4@,!<WT1"9eo.qu6Hjp%8D9"V(P6(^Ta2
+pAXUZ#RC>)r;HTl"TA?"rr2os1]I:IrsJl<!Wri,qsjI\odgd+qY1*r#m:50!!*#fp](6\aTO*g
+rVcTgrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#u(=s8N&rrr<'!rr2clqu[!&
+!!!'#rVuiqqXuTA0`NdC/hAJ5.P<>'#583&!<E6'!<3#trVu`p!<)rtrndZQr;Q<^r;-Bje,hH+
+s82fmqYgEnrqu`oqu6ON.LF#cp\Y$nr;?3^s8W)sq>0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF,
+!<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq at NSR$NBu$!<`;s
+qZ$9brVlfZs*t~>
+li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp at e[i!<W?2r;HBgq#;rK
+ci3A>!<<3%#mLG0p%n^fo at +!pqYC-gs""*Ir;Z`cp&4@,!<WT1"9eo.qu6Hjp%8D9"V(P6(^Ta2
+pAXUZ#RC>)r;HTl"TA?"rr2os1]I:IrsJl<!Wri,qsjI\odgd+qY1*r#m:50!!*#fp](6\aTO*g
+rVcTgrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#u(=s8N&rrr<'!rr2clqu[!&
+!!!'#rVuiqqXuTA0`NdC/hAJ5.P<>'#583&!<E6'!<3#trVu`p!<)rtrndZQr;Q<^r;-Bje,hH+
+s82fmqYgEnrqu`oqu6ON.LF#cp\Y$nr;?3^s8W)sq>0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF,
+!<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq at NSR$NBu$!<`;s
+qZ$9brVlfZs*t~>
+li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i
+$MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK&
+q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;- at Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6["
+qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m
+!WrE&!Wi<#rVlZgrVZNeq>L<kr;-Ejrquol"9ei-!WiB$s8MusqZ$Wps8W)Ts8W!1s760fpUCB$
+p](6kqYg6frr;uqrr"bSqtC!l!k\:!"V(1sqYU3jqtg9gr;m$.r:p!as7l9e!W`2is8DrqrUU!b
+qZB:[qu0"c^%MC(2uW[PrV](`s8)Hfp\apcnGWInqY9d[pA4U_rW*!"rV$3cnbi@]rrb^`qtiea
+[eKXsq>C3jroa<3~>
+li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i
+$MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK&
+q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;- at Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6["
+qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m
+!WrE&!Wi<#rVlZgrVZNeq>L<kr;-Ejrquol"9ei-!WiB$s8MusqZ$Wps8W)Ts8W!1s760fpUCB$
+p](6kqYg6frr;uqrr"bSqtC!l!k\:!"V(1sqYU3jqtg9gr;m$.r:p!as7l9e!W`2is8DrqrUU!b
+qZB:[qu0"c^%MC(2uW[PrV](`s8)Hfp\apcnGWInqY9d[pA4U_rW*!"rV$3cnbi@]rrb^`qtiea
+[eKXsq>C3jroa<3~>
+li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i
+$MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK&
+q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;- at Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6["
+qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m
+!WrE&!Wi<#rVlZgrVZNeq>L<kr;-Ejrquol"9ei-!WiB$s8MusqZ$Wps8W)Ts8W!1s760fpUCB$
+p](6kqYg6frr;uqrr"bSqtC!l!k\:!"V(1sqYU3jqtg9gr;m$.r:p!as7l9e!W`2is8DrqrUU!b
+qZB:[qu0"c^%MC(2uW[PrV](`s8)Hfp\apcnGWInqY9d[pA4U_rW*!"rV$3cnbi@]rrb^`qtiea
+[eKXsq>C3jroa<3~>
+li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;?<f
+$39em#m156!s/]/p\X[^p\tI'qY'merr)jLrquZhqtL-cr<<K1!so#0$MO;kqu-Bo"8r&t#Qk/@
+U&4ZXqtTq'!qcHfqu$BjrVuotrr<!Rrr)`n!rrW."/G\drUg'Y$j6A(!!<B/!WrT,rr)Hcq#(C'
+pA"I_s7uZos8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'N!r`/us8;ls!<;igqu-Eo
+!<N6$!<N6#rVlcorr2fiqYpKlrq69dqYL<j":"f+#Qar)rr)lo!!)uts8LjS'E.k#rqN8jB)DB'
+qtp*as8W)srVc^+s7Z0c!=/]$qZ-lurUTp^rVS#8r<3E,p\XpaqYU6k"p+\sqtg6jqtBsaTE4o[
+rqH?o"8Dcmrr2lp1AM0Mp at J1Yp\sd\qum2uqu6Hko(i.W!rrZ'p\Xdcq"a`_$N'Poo_]$rqXaO]
+p&4jgkPp&~>
+li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;?<f
+$39em#m156!s/]/p\X[^p\tI'qY'merr)jLrquZhqtL-cr<<K1!so#0$MO;kqu-Bo"8r&t#Qk/@
+U&4ZXqtTq'!qcHfqu$BjrVuotrr<!Rrr)`n!rrW."/G\drUg'Y$j6A(!!<B/!WrT,rr)Hcq#(C'
+pA"I_s7uZos8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'N!r`/us8;ls!<;igqu-Eo
+!<N6$!<N6#rVlcorr2fiqYpKlrq69dqYL<j":"f+#Qar)rr)lo!!)uts8LjS'E.k#rqN8jB)DB'
+qtp*as8W)srVc^+s7Z0c!=/]$qZ-lurUTp^rVS#8r<3E,p\XpaqYU6k"p+\sqtg6jqtBsaTE4o[
+rqH?o"8Dcmrr2lp1AM0Mp at J1Yp\sd\qum2uqu6Hko(i.W!rrZ'p\Xdcq"a`_$N'Poo_]$rqXaO]
+p&4jgkPp&~>
+li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;?<f
+$39em#m156!s/]/p\X[^p\tI'qY'merr)jLrquZhqtL-cr<<K1!so#0$MO;kqu-Bo"8r&t#Qk/@
+U&4ZXqtTq'!qcHfqu$BjrVuotrr<!Rrr)`n!rrW."/G\drUg'Y$j6A(!!<B/!WrT,rr)Hcq#(C'
+pA"I_s7uZos8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'N!r`/us8;ls!<;igqu-Eo
+!<N6$!<N6#rVlcorr2fiqYpKlrq69dqYL<j":"f+#Qar)rr)lo!!)uts8LjS'E.k#rqN8jB)DB'
+qtp*as8W)srVc^+s7Z0c!=/]$qZ-lurUTp^rVS#8r<3E,p\XpaqYU6k"p+\sqtg6jqtBsaTE4o[
+rqH?o"8Dcmrr2lp1AM0Mp at J1Yp\sd\qum2uqu6Hko(i.W!rrZ'p\Xdcq"a`_$N'Poo_]$rqXaO]
+p&4jgkPp&~>
+li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus
+p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$
+s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?<d":4r&!!iQ-#6G0OrVu]gpA50ts8)9b
+r;Q]qs8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!<;liqt^0l!<N?(
+!!3&rrVZZmr;HQjqu6QkrVZNlqt^Hh!X&T,!s/K#s8MusqZ$Wps8W)Trt52-qu$JJ"a0Y;rr;im
+s7lTmqY_0/qXXIa"p";p"T\Dtr;6HhrqcNls8E#urW;unp\t(h"T\E!pAXsdr;$0b#R'o%rpomk
+!K['Tq#:9hrqZ9s!;u`mq>L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^
+rr<#tlMlA~>
+li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus
+p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$
+s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?<d":4r&!!iQ-#6G0OrVu]gpA50ts8)9b
+r;Q]qs8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!<;liqt^0l!<N?(
+!!3&rrVZZmr;HQjqu6QkrVZNlqt^Hh!X&T,!s/K#s8MusqZ$Wps8W)Trt52-qu$JJ"a0Y;rr;im
+s7lTmqY_0/qXXIa"p";p"T\Dtr;6HhrqcNls8E#urW;unp\t(h"T\E!pAXsdr;$0b#R'o%rpomk
+!K['Tq#:9hrqZ9s!;u`mq>L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^
+rr<#tlMlA~>
+li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus
+p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$
+s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?<d":4r&!!iQ-#6G0OrVu]gpA50ts8)9b
+r;Q]qs8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!<;liqt^0l!<N?(
+!!3&rrVZZmr;HQjqu6QkrVZNlqt^Hh!X&T,!s/K#s8MusqZ$Wps8W)Trt52-qu$JJ"a0Y;rr;im
+s7lTmqY_0/qXXIa"p";p"T\Dtr;6HhrqcNls8E#urW;unp\t(h"T\E!pAXsdr;$0b#R'o%rpomk
+!K['Tq#:9hrqZ9s!;u`mq>L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^
+rr<#tlMlA~>
+li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8<s!n$HrVZHfq?.0+#QOu,qZ$Kkq?7'!
+Es)LJ!<E9/mf34WqXaRc!<)Tdrql`qr[[sBnGDs)":524#QY)0pAOp_rV?QsqYgKt#Rg_<rqZNe
+rV?^"rV-3dr;HTnqu?]q0_kPM%06S6#laSpr:p$m$2SiH#6Fo-$39esqtBg`q>^]tmeZeRrr2rt
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj
+r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp
+&cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g
+nG*%[quZrtq"k$hqYpBaL]7&>r;$<bqYYCC"T%rlr;6HdqJu[nrqH0\rJCR\q"jpao(`4as8Dr_
+s*t~>
+li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8<s!n$HrVZHfq?.0+#QOu,qZ$Kkq?7'!
+Es)LJ!<E9/mf34WqXaRc!<)Tdrql`qr[[sBnGDs)":524#QY)0pAOp_rV?QsqYgKt#Rg_<rqZNe
+rV?^"rV-3dr;HTnqu?]q0_kPM%06S6#laSpr:p$m$2SiH#6Fo-$39esqtBg`q>^]tmeZeRrr2rt
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj
+r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp
+&cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g
+nG*%[quZrtq"k$hqYpBaL]7&>r;$<bqYYCC"T%rlr;6HdqJu[nrqH0\rJCR\q"jpao(`4as8Dr_
+s*t~>
+li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8<s!n$HrVZHfq?.0+#QOu,qZ$Kkq?7'!
+Es)LJ!<E9/mf34WqXaRc!<)Tdrql`qr[[sBnGDs)":524#QY)0pAOp_rV?QsqYgKt#Rg_<rqZNe
+rV?^"rV-3dr;HTnqu?]q0_kPM%06S6#laSpr:p$m$2SiH#6Fo-$39esqtBg`q>^]tmeZeRrr2rt
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj
+r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp
+&cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g
+nG*%[quZrtq"k$hqYpBaL]7&>r;$<bqYYCC"T%rlr;6HdqJu[nrqH0\rJCR\q"jpao(`4as8Dr_
+s*t~>
+li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8<s!n$HrVQHhquI*)#6>,-qYgBjr1F1%
+!=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0 at ZprVE5r#m1/9p\b$h
+pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php at 7qTq>UEo
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi
+p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc,"
+pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR
+rLs>jr:p<krV,pXr:0UWs7-!Zs7Z['"9&8or;QKcrs8]'pA=[VrVQWt@/oosq>C6lrr)3`J,~>
+li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8<s!n$HrVQHhquI*)#6>,-qYgBjr1F1%
+!=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0 at ZprVE5r#m1/9p\b$h
+pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php at 7qTq>UEo
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi
+p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc,"
+pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR
+rLs>jr:p<krV,pXr:0UWs7-!Zs7Z['"9&8or;QKcrs8]'pA=[VrVQWt@/oosq>C6lrr)3`J,~>
+li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8<s!n$HrVQHhquI*)#6>,-qYgBjr1F1%
+!=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0 at ZprVE5r#m1/9p\b$h
+pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php at 7qTq>UEo
+rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi
+p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc,"
+pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR
+rLs>jr:p<krV,pXr:0UWs7-!Zs7Z['"9&8or;QKcrs8]'pA=[VrVQWt@/oosq>C6lrr)3`J,~>
+li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<<Q,rVlflq"kF$
+#6Y&2"T\f-q>(!br:p<uq"ajer;6Norr2a=qt:*r!<iT/"p4f%q"+L^!<E,prV$Bp#mCK#r:fdZ
+r:U?urr)coqZ$Tp0`(^Z"9\c2!r;lis7ZB\&-r::%06P9!!DumqtBse!Wr)js7$!coD\dirr;uu
+!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8DuprqlKir4E(4$i9VtpA4[a
+rVZZpq\&ns"oSK*!<E6'!<)rsrVu`p!<)rtrndYarVQL\"Ln=+qu-Norr2Zl&c;;$q*YJiqYg6i
+!;Z?fq>U<krr<#t!*]@$rr;uqqZd01oDeaapAb!b7g-X(q>9pSs7ii%!rDcfrVuNcq>C at eqtKp[
+o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp<irr2l_s*t~>
+li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<<Q,rVlflq"kF$
+#6Y&2"T\f-q>(!br:p<uq"ajer;6Norr2a=qt:*r!<iT/"p4f%q"+L^!<E,prV$Bp#mCK#r:fdZ
+r:U?urr)coqZ$Tp0`(^Z"9\c2!r;lis7ZB\&-r::%06P9!!DumqtBse!Wr)js7$!coD\dirr;uu
+!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8DuprqlKir4E(4$i9VtpA4[a
+rVZZpq\&ns"oSK*!<E6'!<)rsrVu`p!<)rtrndYarVQL\"Ln=+qu-Norr2Zl&c;;$q*YJiqYg6i
+!;Z?fq>U<krr<#t!*]@$rr;uqqZd01oDeaapAb!b7g-X(q>9pSs7ii%!rDcfrVuNcq>C at eqtKp[
+o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp<irr2l_s*t~>
+li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<<Q,rVlflq"kF$
+#6Y&2"T\f-q>(!br:p<uq"ajer;6Norr2a=qt:*r!<iT/"p4f%q"+L^!<E,prV$Bp#mCK#r:fdZ
+r:U?urr)coqZ$Tp0`(^Z"9\c2!r;lis7ZB\&-r::%06P9!!DumqtBse!Wr)js7$!coD\dirr;uu
+!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8DuprqlKir4E(4$i9VtpA4[a
+rVZZpq\&ns"oSK*!<E6'!<)rsrVu`p!<)rtrndYarVQL\"Ln=+qu-Norr2Zl&c;;$q*YJiqYg6i
+!;Z?fq>U<krr<#t!*]@$rr;uqqZd01oDeaapAb!b7g-X(q>9pSs7ii%!rDcfrVuNcq>C at eqtKp[
+o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp<irr2l_s*t~>
+li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@*
+!rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!<i8nr;?<h!<E,rmemS$!X&c5qt^0Y
+rqm'&q"t'ds8W'PqsaRp$31);3remGq#1'l!XSu8$NLeE$2s`!n,2h\!;u`jn,N1\rr<#ts8N'!
+!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVulqrVQWmr6k`L0/"k,0_['t
+1&`[81'd=O"9AN)!Wi<#rr)lo!!)uts8LjS#l=N*!<)osr;HTnrVuiqs8N]-r9X4\"p+Z%o`#-o
+rVH9fr;Q]qs8E!urVulss8D]n"p4`"o_n^^rVHj(oD\X`rU]d^qud#rpA4gZrVuif#6ao%qu-Ba
+rqlWmq>1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~>
+li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@*
+!rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!<i8nr;?<h!<E,rmemS$!X&c5qt^0Y
+rqm'&q"t'ds8W'PqsaRp$31);3remGq#1'l!XSu8$NLeE$2s`!n,2h\!;u`jn,N1\rr<#ts8N'!
+!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVulqrVQWmr6k`L0/"k,0_['t
+1&`[81'd=O"9AN)!Wi<#rr)lo!!)uts8LjS#l=N*!<)osr;HTnrVuiqs8N]-r9X4\"p+Z%o`#-o
+rVH9fr;Q]qs8E!urVulss8D]n"p4`"o_n^^rVHj(oD\X`rU]d^qud#rpA4gZrVuif#6ao%qu-Ba
+rqlWmq>1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~>
+li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@*
+!rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!<i8nr;?<h!<E,rmemS$!X&c5qt^0Y
+rqm'&q"t'ds8W'PqsaRp$31);3remGq#1'l!XSu8$NLeE$2s`!n,2h\!;u`jn,N1\rr<#ts8N'!
+!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVulqrVQWmr6k`L0/"k,0_['t
+1&`[81'd=O"9AN)!Wi<#rr)lo!!)uts8LjS#l=N*!<)osr;HTnrVuiqs8N]-r9X4\"p+Z%o`#-o
+rVH9fr;Q]qs8E!urVulss8D]n"p4`"o_n^^rVHj(oD\X`rU]d^qud#rpA4gZrVuif#6ao%qu-Ba
+rqlWmq>1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~>
+li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN<!<WE)!WW5;rrE&tr?hO at rq$0l!sJZ3rVQQno)8jp
+"p#&3#65"pq>:-brVlitrV?<irql`qr[.I?r;IrA!"0);!rrN(rq,j^rr<;pqYTpd"Tec5!;ZQl
+oCi1a'E8"1r;cims8W'PoD/@d!"Au1!WVE`rqQ*u'*/(5!=Jo.iV3'FrV?Em)#Nq(rVQNjrr<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuoroD\1WrqbpFm,dBp
+j6QO+(@1)Elf at 9hr<!0'!<N<'rr;urs8)crrVuoshZ!rQrqH]uqY^BlrVlfp"9/?"rr2j1rr<#t
+p\Ojo!!`DnrqQTpp%eUdr;Q]qs8E"%rVulss8Mp)!Wi>orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj
+q#9sb"pau%q=spcpAXXVqu6<frqu^$!!W,lpAFpYr=]4hr;Q3]rr2lpq<JP(rpg!erVc`[s*t~>
+li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN<!<WE)!WW5;rrE&tr?hO at rq$0l!sJZ3rVQQno)8jp
+"p#&3#65"pq>:-brVlitrV?<irql`qr[.I?r;IrA!"0);!rrN(rq,j^rr<;pqYTpd"Tec5!;ZQl
+oCi1a'E8"1r;cims8W'PoD/@d!"Au1!WVE`rqQ*u'*/(5!=Jo.iV3'FrV?Em)#Nq(rVQNjrr<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuoroD\1WrqbpFm,dBp
+j6QO+(@1)Elf at 9hr<!0'!<N<'rr;urs8)crrVuoshZ!rQrqH]uqY^BlrVlfp"9/?"rr2j1rr<#t
+p\Ojo!!`DnrqQTpp%eUdr;Q]qs8E"%rVulss8Mp)!Wi>orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj
+q#9sb"pau%q=spcpAXXVqu6<frqu^$!!W,lpAFpYr=]4hr;Q3]rr2lpq<JP(rpg!erVc`[s*t~>
+li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN<!<WE)!WW5;rrE&tr?hO at rq$0l!sJZ3rVQQno)8jp
+"p#&3#65"pq>:-brVlitrV?<irql`qr[.I?r;IrA!"0);!rrN(rq,j^rr<;pqYTpd"Tec5!;ZQl
+oCi1a'E8"1r;cims8W'PoD/@d!"Au1!WVE`rqQ*u'*/(5!=Jo.iV3'FrV?Em)#Nq(rVQNjrr<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuoroD\1WrqbpFm,dBp
+j6QO+(@1)Elf at 9hr<!0'!<N<'rr;urs8)crrVuoshZ!rQrqH]uqY^BlrVlfp"9/?"rr2j1rr<#t
+p\Ojo!!`DnrqQTpp%eUdr;Q]qs8E"%rVulss8Mp)!Wi>orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj
+q#9sb"pau%q=spcpAXXVqu6<frqu^$!!W,lpAFpYr=]4hr;Q3]rr2lpq<JP(rpg!erVc`[s*t~>
+li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[*
+!<rW2!!!Q'q>]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s*
+qu6Hk!;cWkqtp<iq>^Hn0DbYJ%gW at D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuflrpBacnb)\Vp[eCP
+rq$'frVdQ.rr2Tdro=+`!WiH*!<)rsrVu`p!<)rtrndZ(rq66rrU9a`r;HTlqtp?kqtp6dqu-Qp
+r;6NX!XSl+rpfsf!<3#jrqucps8N6&!<E)urVlglrVup&o)J:[rqQ@%"T%uorq?<dq>UBl"T[N\
+s82ikrq?<ko)A=^rqZK_rqZQdqu>p[pAbL*qtg<bo]#iM"TS;mrquKhrquQd$39r"rW2usli2J~>
+li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[*
+!<rW2!!!Q'q>]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s*
+qu6Hk!;cWkqtp<iq>^Hn0DbYJ%gW at D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuflrpBacnb)\Vp[eCP
+rq$'frVdQ.rr2Tdro=+`!WiH*!<)rsrVu`p!<)rtrndZ(rq66rrU9a`r;HTlqtp?kqtp6dqu-Qp
+r;6NX!XSl+rpfsf!<3#jrqucps8N6&!<E)urVlglrVup&o)J:[rqQ@%"T%uorq?<dq>UBl"T[N\
+s82ikrq?<ko)A=^rqZK_rqZQdqu>p[pAbL*qtg<bo]#iM"TS;mrquKhrquQd$39r"rW2usli2J~>
+li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[*
+!<rW2!!!Q'q>]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s*
+qu6Hk!;cWkqtp<iq>^Hn0DbYJ%gW at D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t
+s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"<s8N&srr<'!rVuflrpBacnb)\Vp[eCP
+rq$'frVdQ.rr2Tdro=+`!WiH*!<)rsrVu`p!<)rtrndZ(rq66rrU9a`r;HTlqtp?kqtp6dqu-Qp
+r;6NX!XSl+rpfsf!<3#jrqucps8N6&!<E)urVlglrVup&o)J:[rqQ@%"T%uorq?<dq>UBl"T[N\
+s82ikrq?<ko)A=^rqZK_rqZQdqu>p[pAbL*qtg<bo]#iM"TS;mrquKhrquQd$39r"rW2usli2J~>
+li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`l<r#HFN"9S_`
+pAOp\rq-6o!!iT+"T\DurVuNb"9A#lqtU-is8N#ts"OHNrq--f!!iQ)$31,1rVQTarqcZsr;HQm
+q#1<r#QP"\r:^0Xq#(C!r;?Egr;?Nis8W'Pq#:(1#6=i4!8m5Dr;QQk!s\i=#64c.n,NCXo`#6u
+s7cEbnc/Xfrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVuos
+rr)lsqu6Tlr;66arqufprYGP4qtL'epAG!p!W`?'!<)rsrVu`p!<)rtrndY\r;Z?gs8D]lqu6Nn
+q[i](qtg-bqr$JminOJ/!X/T'r<N6%!qcHirqu]n2uisZrVlcqs8MWj%Ku.trV$!^ir])Vr;HWm
+rV?Hbr;@W<$M=>lrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G
+#PIrmr;lorrVl6bJ,~>
+li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`l<r#HFN"9S_`
+pAOp\rq-6o!!iT+"T\DurVuNb"9A#lqtU-is8N#ts"OHNrq--f!!iQ)$31,1rVQTarqcZsr;HQm
+q#1<r#QP"\r:^0Xq#(C!r;?Egr;?Nis8W'Pq#:(1#6=i4!8m5Dr;QQk!s\i=#64c.n,NCXo`#6u
+s7cEbnc/Xfrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVuos
+rr)lsqu6Tlr;66arqufprYGP4qtL'epAG!p!W`?'!<)rsrVu`p!<)rtrndY\r;Z?gs8D]lqu6Nn
+q[i](qtg-bqr$JminOJ/!X/T'r<N6%!qcHirqu]n2uisZrVlcqs8MWj%Ku.trV$!^ir])Vr;HWm
+rV?Hbr;@W<$M=>lrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G
+#PIrmr;lorrVl6bJ,~>
+li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`l<r#HFN"9S_`
+pAOp\rq-6o!!iT+"T\DurVuNb"9A#lqtU-is8N#ts"OHNrq--f!!iQ)$31,1rVQTarqcZsr;HQm
+q#1<r#QP"\r:^0Xq#(C!r;?Egr;?Nis8W'Pq#:(1#6=i4!8m5Dr;QQk!s\i=#64c.n,NCXo`#6u
+s7cEbnc/Xfrr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#bq;s8N&srr<'!rVuos
+rr)lsqu6Tlr;66arqufprYGP4qtL'epAG!p!W`?'!<)rsrVu`p!<)rtrndY\r;Z?gs8D]lqu6Nn
+q[i](qtg-bqr$JminOJ/!X/T'r<N6%!qcHirqu]n2uisZrVlcqs8MWj%Ku.trV$!^ir])Vr;HWm
+rV?Hbr;@W<$M=>lrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G
+#PIrmr;lorrVl6bJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M at ..d<4oD8 at d!WrW4#Q!riq#($j
+!<WB*!=:X^r:Bj`rWiW#qYgBbr;Zcqs8OhQr:p0WaTDVH"Tnf,$30Sop\O^e!r)Qhr;$1!"UP//%
+/fJjr:]pk"TA8prr2fhr;6NorZD+9k5>Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s
+8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er
+Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa
+N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn
+b`@Wr<!?'rUTd^rr;us&c_e+q??p*q#9mXrquHj2?*UPrt52-q=jgf!6Op4p\k'gs7uZnmf.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M at ..d<4oD8 at d!WrW4#Q!riq#($j
+!<WB*!=:X^r:Bj`rWiW#qYgBbr;Zcqs8OhQr:p0WaTDVH"Tnf,$30Sop\O^e!r)Qhr;$1!"UP//%
+/fJjr:]pk"TA8prr2fhr;6NorZD+9k5>Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s
+8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er
+Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa
+N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn
+b`@Wr<!?'rUTd^rr;us&c_e+q??p*q#9mXrquHj2?*UPrt52-q=jgf!6Op4p\k'gs7uZnmf.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M at ..d<4oD8 at d!WrW4#Q!riq#($j
+!<WB*!=:X^r:Bj`rWiW#qYgBbr;Zcqs8OhQr:p0WaTDVH"Tnf,$30Sop\O^e!r)Qhr;$1!"UP//%
+/fJjr:]pk"TA8prr2fhr;6NorZD+9k5>Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s
+8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er
+Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa
+N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn
+b`@Wr<!?'rUTd^rr;us&c_e+q??p*q#9mXrquHj2?*UPrt52-q=jgf!6Op4p\k'gs7uZnmf.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M at ./E<*qYg-g#m^YM!Ufg]q#'pf
+"p+l,"9SGsp\aa[qu at 0'o_A4Yp&G$js8OhPr;H0a"U5;@!<WT19`Fqbs7!B!:B'q\s7c<j&H`+:
+"T.uio_%kW#5A&krVZZpq"t*krr;d7s7lX"!WW<,qYg*`q#1<s!XAr1#5e2gq"sa^#71;,!<2ut
+#lal(rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!?.rVulsrVlits8Drqqu-ctqtp<h
+rVlfprVc^2q#Bm`r;?3a!!NE)!!33"s8MusqZ$Wps8W)Trr`2lrs&K$!;c]ms8>ppqtp6eZ2b%5
+!XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur<!*$rr;rsrr)Tm#m:#!oD8<c!;ucdqYC$drVZQirVlXf
+!snMnr;-?epK7Rsq#1'err<#t&-)V$oDARk:AXqdqtg)o"o\Gtrt,&+q"[\f!W)Nes7uQkrVlfa
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M at ./E<*qYg-g#m^YM!Ufg]q#'pf
+"p+l,"9SGsp\aa[qu at 0'o_A4Yp&G$js8OhPr;H0a"U5;@!<WT19`Fqbs7!B!:B'q\s7c<j&H`+:
+"T.uio_%kW#5A&krVZZpq"t*krr;d7s7lX"!WW<,qYg*`q#1<s!XAr1#5e2gq"sa^#71;,!<2ut
+#lal(rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!?.rVulsrVlits8Drqqu-ctqtp<h
+rVlfprVc^2q#Bm`r;?3a!!NE)!!33"s8MusqZ$Wps8W)Trr`2lrs&K$!;c]ms8>ppqtp6eZ2b%5
+!XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur<!*$rr;rsrr)Tm#m:#!oD8<c!;ucdqYC$drVZQirVlXf
+!snMnr;-?epK7Rsq#1'err<#t&-)V$oDARk:AXqdqtg)o"o\Gtrt,&+q"[\f!W)Nes7uQkrVlfa
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M at ./E<*qYg-g#m^YM!Ufg]q#'pf
+"p+l,"9SGsp\aa[qu at 0'o_A4Yp&G$js8OhPr;H0a"U5;@!<WT19`Fqbs7!B!:B'q\s7c<j&H`+:
+"T.uio_%kW#5A&krVZZpq"t*krr;d7s7lX"!WW<,qYg*`q#1<s!XAr1#5e2gq"sa^#71;,!<2ut
+#lal(rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!?.rVulsrVlits8Drqqu-ctqtp<h
+rVlfprVc^2q#Bm`r;?3a!!NE)!!33"s8MusqZ$Wps8W)Trr`2lrs&K$!;c]ms8>ppqtp6eZ2b%5
+!XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur<!*$rr;rsrr)Tm#m:#!oD8<c!;ucdqYC$drVZQirVlXf
+!snMnr;-?epK7Rsq#1'err<#t&-)V$oDARk:AXqdqtg)o"o\Gtrt,&+q"[\f!W)Nes7uQkrVlfa
+s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M at 7.gBSpA4dh#mCS:#Q=Vns8M`m
+"TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0
+$N'AhqY^>(#*o&[qtp?irql`qr\4<?q>11"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo
+s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp
+r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1
+"U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f%
+/'MkrqQ3`r<AYap&+dgs8N#ts8)]kPQVBhs8;WcpAG-prVZZort52%q>'s\#R9qsq#13krVc`pm
+f.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M at 7.gBSpA4dh#mCS:#Q=Vns8M`m
+"TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0
+$N'AhqY^>(#*o&[qtp?irql`qr\4<?q>11"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo
+s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp
+r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1
+"U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f%
+/'MkrqQ3`r<AYap&+dgs8N#ts8)]kPQVBhs8;WcpAG-prVZZort52%q>'s\#R9qsq#13krVc`pm
+f.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M at 7.gBSpA4dh#mCS:#Q=Vns8M`m
+"TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0
+$N'AhqY^>(#*o&[qtp?irql`qr\4<?q>11"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo
+s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp
+r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1
+"U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f%
+/'MkrqQ3`r<AYap&+dgs8N#ts8)]kPQVBhs8;WcpAG-prVZZort52%q>'s\#R9qsq#13krVc`pm
+f.e~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8
+"onZ,":4Vjq>C0c":+\sp at J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#:<r"p"m\
+rV-9cq#:BqqY^3crq-3es8W'Pp\+ at Z!<if1"pP&!q>:*`I0^)`!"/l*p\ssdo`bHmqtp<hrVlfr
+rr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"8r-s8N&srr<'!r;?HkquH]prql`q
+rr;rnrY>"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7
+#R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp at L&:T>qZ$Hlr;ZXCr;QTe!<RiI
+qYp<iqtp^%q=adds8N#rrr;rqq>^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8
+"onZ,":4Vjq>C0c":+\sp at J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#:<r"p"m\
+rV-9cq#:BqqY^3crq-3es8W'Pp\+ at Z!<if1"pP&!q>:*`I0^)`!"/l*p\ssdo`bHmqtp<hrVlfr
+rr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"8r-s8N&srr<'!r;?HkquH]prql`q
+rr;rnrY>"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7
+#R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp at L&:T>qZ$Hlr;ZXCr;QTe!<RiI
+qYp<iqtp^%q=adds8N#rrr;rqq>^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8
+"onZ,":4Vjq>C0c":+\sp at J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#:<r"p"m\
+rV-9cq#:BqqY^3crq-3es8W'Pp\+ at Z!<if1"pP&!q>:*`I0^)`!"/l*p\ssdo`bHmqtp<hrVlfr
+rr<#ts8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"8r-s8N&srr<'!r;?HkquH]prql`q
+rr;rnrY>"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7
+#R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp at L&:T>qZ$Hlr;ZXCr;QTe!<RiI
+qYp<iqtp^%q=adds8N#rrr;rqq>^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2l>s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n
+"on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z,
+!r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6<dr::-rqYU0fr;HTn
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!!r`*s8N&srr<'!rql]m!r`,tq#CBn
+rVm`6rVl]ap\OgWrWNH,"9el-rVulqs8)crrVuoshZ$. at q#16rq"=R^qu$Ekrr)fq!"K#5!0`\5
+Pa.N$!<EQ&s8N*'s7Z<fs8W&trVHTt!WN,srVZQl!<i]%rVZNt#6+Arp\Opdrql`l/,T;Cs-!Ka
+q>^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf at 3_s7uTgqu-9grpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2l>s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n
+"on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z,
+!r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6<dr::-rqYU0fr;HTn
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!!r`*s8N&srr<'!rql]m!r`,tq#CBn
+rVm`6rVl]ap\OgWrWNH,"9el-rVulqs8)crrVuoshZ$. at q#16rq"=R^qu$Ekrr)fq!"K#5!0`\5
+Pa.N$!<EQ&s8N*'s7Z<fs8W&trVHTt!WN,srVZQl!<i]%rVZNt#6+Arp\Opdrql`l/,T;Cs-!Ka
+q>^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf at 3_s7uTgqu-9grpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&n!!<?*!"Ai'"oA,prr2l>s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n
+"on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z,
+!r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6<dr::-rqYU0fr;HTn
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!!r`*s8N&srr<'!rql]m!r`,tq#CBn
+rVm`6rVl]ap\OgWrWNH,"9el-rVulqs8)crrVuoshZ$. at q#16rq"=R^qu$Ekrr)fq!"K#5!0`\5
+Pa.N$!<EQ&s8N*'s7Z<fs8W&trVHTt!WN,srVZQl!<i]%rVZNt#6+Arp\Opdrql`l/,T;Cs-!Ka
+q>^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf at 3_s7uTgqu-9grpKf:~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6 at rXAbtq>C0fp^7',#7(>.r"o8/
+!s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B.
+!Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^-
+r;6Nln+ubKq=k!m!!<E-!<)rsrVu`p!<)rtrndY`qtU/g!`\mcqtp<irVl^Sq5jc*"9A>lp&4^Y
+rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q
+qXa^`oF+Uiqu-Norr2g+pA at br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6 at rXAbtq>C0fp^7',#7(>.r"o8/
+!s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B.
+!Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^-
+r;6Nln+ubKq=k!m!!<E-!<)rsrVu`p!<)rtrndY`qtU/g!`\mcqtp<irVl^Sq5jc*"9A>lp&4^Y
+rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q
+qXa^`oF+Uiqu-Norr2g+pA at br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6 at rXAbtq>C0fp^7',#7(>.r"o8/
+!s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B.
+!Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq
+s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^-
+r;6Nln+ubKq=k!m!!<E-!<)rsrVu`p!<)rtrndY`qtU/g!`\mcqtp<irVl^Sq5jc*"9A>lp&4^Y
+rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q
+qXa^`oF+Uiqu-Norr2g+pA at br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g
+$j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H
+"9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis
+"oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u
+rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl
+!<iT&rVZTo5PtKVqu$Blrr*$#!;l`mrVcZi#QXbrr:iA[nGN=Zs8)]lrVlcnr;Q]nqtnA7!W)fj
+qtU0`$NU,$r;Q`qr;6BerW!0(qt^'cr;A\Yr:fj^rVc^-pAaj[qtpE4%0?M'q>Bs_rr2?cJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g
+$j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H
+"9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis
+"oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u
+rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl
+!<iT&rVZTo5PtKVqu$Blrr*$#!;l`mrVcZi#QXbrr:iA[nGN=Zs8)]lrVlcnr;Q]nqtnA7!W)fj
+qtU0`$NU,$r;Q`qr;6BerW!0(qt^'cr;A\Yr:fj^rVc^-pAaj[qtpE4%0?M'q>Bs_rr2?cJ,~>
+li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g
+$j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H
+"9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis
+"oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u
+rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl
+!<iT&rVZTo5PtKVqu$Blrr*$#!;l`mrVcZi#QXbrr:iA[nGN=Zs8)]lrVlcnr;Q]nqtnA7!W)fj
+qtU0`$NU,$r;Q`qr;6BerW!0(qt^'cr;A\Yr:fj^rVc^-pAaj[qtpE4%0?M'q>Bs_rr2?cJ,~>
+nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A
+rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq
+!=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&.
+rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq
+!!*#oqu6R'p at nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V
+s"=<Frr1FM+TMB;rr)clrqH-bptZ/TrVQ?hmf3:e"U4f&p\b<uqZ$*brUp3_s8E#urr;RsrqQ*k
+!;QK]q?5[Pr;?HjrVZZis82chs8Mihp%JUuqu6Kmp&=Ud!<)cnp\=acrr2Wk"ps&YrqlBbrWV'A
+rqHBhqtpBkrVlcjrVkUOs7HBms7lNip\4[ds8W)to)F4~>
+nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A
+rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq
+!=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&.
+rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq
+!!*#oqu6R'p at nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V
+s"=<Frr1FM+TMB;rr)clrqH-bptZ/TrVQ?hmf3:e"U4f&p\b<uqZ$*brUp3_s8E#urr;RsrqQ*k
+!;QK]q?5[Pr;?HjrVZZis82chs8Mihp%JUuqu6Kmp&=Ud!<)cnp\=acrr2Wk"ps&YrqlBbrWV'A
+rqHBhqtpBkrVlcjrVkUOs7HBms7lNip\4[ds8W)to)F4~>
+nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A
+rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq
+!=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&.
+rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq
+!!*#oqu6R'p at nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V
+s"=<Frr1FM+TMB;rr)clrqH-bptZ/TrVQ?hmf3:e"U4f&p\b<uqZ$*brUp3_s8E#urr;RsrqQ*k
+!;QK]q?5[Pr;?HjrVZZis82chs8Mihp%JUuqu6Kmp&=Ud!<)cnp\=acrr2Wk"ps&YrqlBbrWV'A
+rqHBhqtpBkrVlcjrVkUOs7HBms7lNip\4[ds8W)to)F4~>
+nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W at rVZTlrr<#taT!UQ
+rr1jTrW!!&!<<l5rpT[_qXaag%KQ,"m/HDO!s/Atq"amfs8Drrrr36%r:g0l!"]A6!%&'Pp&+g\
+rVuurq>^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n
+rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq
+!<E,pr;ZET*s`/Y$k*CS#S@^X#RUnF#mq"I$QTKa#T=$V!!33%#m()3qYp6eo_ngjrr**$rVZ]q
+r8IZCqYp<cqXtO-r;-9gr;66fqXsjclLsWEqYgBm%0cgnqu?Zln-/X^rqH'Zq"jsUp at d_Hrq#FS
+$NLq<o_o*rrVcZlrr!0$o_JFOrpoa]qu6Tp!'_"brr;rkrq6O'p\t0bs7>sUrWiK3q"FabrqZm,
+rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~>
+nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W at rVZTlrr<#taT!UQ
+rr1jTrW!!&!<<l5rpT[_qXaag%KQ,"m/HDO!s/Atq"amfs8Drrrr36%r:g0l!"]A6!%&'Pp&+g\
+rVuurq>^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n
+rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq
+!<E,pr;ZET*s`/Y$k*CS#S@^X#RUnF#mq"I$QTKa#T=$V!!33%#m()3qYp6eo_ngjrr**$rVZ]q
+r8IZCqYp<cqXtO-r;-9gr;66fqXsjclLsWEqYgBm%0cgnqu?Zln-/X^rqH'Zq"jsUp at d_Hrq#FS
+$NLq<o_o*rrVcZlrr!0$o_JFOrpoa]qu6Tp!'_"brr;rkrq6O'p\t0bs7>sUrWiK3q"FabrqZm,
+rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~>
+nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W at rVZTlrr<#taT!UQ
+rr1jTrW!!&!<<l5rpT[_qXaag%KQ,"m/HDO!s/Atq"amfs8Drrrr36%r:g0l!"]A6!%&'Pp&+g\
+rVuurq>^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n
+rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq
+!<E,pr;ZET*s`/Y$k*CS#S@^X#RUnF#mq"I$QTKa#T=$V!!33%#m()3qYp6eo_ngjrr**$rVZ]q
+r8IZCqYp<cqXtO-r;-9gr;66fqXsjclLsWEqYgBm%0cgnqu?Zln-/X^rqH'Zq"jsUp at d_Hrq#FS
+$NLq<o_o*rrVcZlrr!0$o_JFOrpoa]qu6Tp!'_"brr;rkrq6O'p\t0bs7>sUrWiK3q"FabrqZm,
+rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~>
+nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr<KC&,uJ#rr)cmrVlisrlP0bq#:-e
+rq#j^!!*'&!!)lmrq??g#R(25r:Bs[rqHWtr;6?frr)oqr;SPOr;6Ks#S6t:#6kb.oD\C]rp0au
+rquHgrql'^rV$g-"U"i3s7Pp]rq?p)r;QNkqYp<j#labjqXjdf"p+]'*Vf at -r94+d$ige5rqcKj
+rW!,uqu?Wmqtp?ks8W#qrt#84!WW6$!r`/us8Drt!<<#lrrDuqruhIE!WW6$!r`/us8;lt!<;oo
+rqQHm#6t59!YPS<!!!*)qZ-Ws(B=^D#ljr2!"&]3!!3<*rr;uns6Kakp&=sjrVuisrSdcBrq63g
+qYp1*"7H$bp&=^]rq-!bn+H\Sr;QWj!!ic-rq?$Yq[O,&p&=U^q#:-hoD8Idlh189#QP/)qqM8a
+qY^?ks85Oerr`Z+rV6BhrU0R^o*5L!pAXX^s8!65roj(IrVZBhmfs73rql]krpC.)qYgEmq#:6^
+rVursnG`F\rr)Tjp'DH'q#0RWq>:0[s*t~>
+nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr<KC&,uJ#rr)cmrVlisrlP0bq#:-e
+rq#j^!!*'&!!)lmrq??g#R(25r:Bs[rqHWtr;6?frr)oqr;SPOr;6Ks#S6t:#6kb.oD\C]rp0au
+rquHgrql'^rV$g-"U"i3s7Pp]rq?p)r;QNkqYp<j#labjqXjdf"p+]'*Vf at -r94+d$ige5rqcKj
+rW!,uqu?Wmqtp?ks8W#qrt#84!WW6$!r`/us8Drt!<<#lrrDuqruhIE!WW6$!r`/us8;lt!<;oo
+rqQHm#6t59!YPS<!!!*)qZ-Ws(B=^D#ljr2!"&]3!!3<*rr;uns6Kakp&=sjrVuisrSdcBrq63g
+qYp1*"7H$bp&=^]rq-!bn+H\Sr;QWj!!ic-rq?$Yq[O,&p&=U^q#:-hoD8Idlh189#QP/)qqM8a
+qY^?ks85Oerr`Z+rV6BhrU0R^o*5L!pAXX^s8!65roj(IrVZBhmfs73rql]krpC.)qYgEmq#:6^
+rVursnG`F\rr)Tjp'DH'q#0RWq>:0[s*t~>
+nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr<KC&,uJ#rr)cmrVlisrlP0bq#:-e
+rq#j^!!*'&!!)lmrq??g#R(25r:Bs[rqHWtr;6?frr)oqr;SPOr;6Ks#S6t:#6kb.oD\C]rp0au
+rquHgrql'^rV$g-"U"i3s7Pp]rq?p)r;QNkqYp<j#labjqXjdf"p+]'*Vf at -r94+d$ige5rqcKj
+rW!,uqu?Wmqtp?ks8W#qrt#84!WW6$!r`/us8Drt!<<#lrrDuqruhIE!WW6$!r`/us8;lt!<;oo
+rqQHm#6t59!YPS<!!!*)qZ-Ws(B=^D#ljr2!"&]3!!3<*rr;uns6Kakp&=sjrVuisrSdcBrq63g
+qYp1*"7H$bp&=^]rq-!bn+H\Sr;QWj!!ic-rq?$Yq[O,&p&=U^q#:-hoD8Idlh189#QP/)qqM8a
+qY^?ks85Oerr`Z+rV6BhrU0R^o*5L!pAXX^s8!65roj(IrVZBhmfs73rql]krpC.)qYgEmq#:6^
+rVursnG`F\rr)Tjp'DH'q#0RWq>:0[s*t~>
+n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./<H2nG_tVr;?Nms8W)?s!@X@
+rr2`lqsXUg"UkA2rVQ?Uo_egl!@dsArUKU[!!WB"qYL-hqYqZ:r;6Bp"p+f8!<<,qrUTXYq?$cq
+q#(-bqu-Hkm.:,R!"T24s8;ono`"dne+rq=rqlNk-2 at N<rUg$p!!!9*!;QTip&+ag#6ZUVq"+IX
+rrW<$r;Q]or;?NmrrDuqrt#;6!W`<%!r`/us8Drt!<<#lrrDuqru_FF!W`<%!r`/us8;ls!<;rq
+rr)Eg%Kc_6!X&Q-!WWE#!<3*"!#,J7#m:58!<WZ/#mW!QrV?9fquR0'qZ?]orVlfSs$Qbar;$9g
+nLb!tdJWh7rquZlo)/=Wqu$*`r;m<+qYpKfrVH=;#P at fjqtTp\qu6BdrpKa;!"K#WqYgg0rVHHj
+rr)io9)\ejrV6Bkq>:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq
+rV?B^rq?$]qu.rIfDkXDqY9sen,In~>
+n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./<H2nG_tVr;?Nms8W)?s!@X@
+rr2`lqsXUg"UkA2rVQ?Uo_egl!@dsArUKU[!!WB"qYL-hqYqZ:r;6Bp"p+f8!<<,qrUTXYq?$cq
+q#(-bqu-Hkm.:,R!"T24s8;ono`"dne+rq=rqlNk-2 at N<rUg$p!!!9*!;QTip&+ag#6ZUVq"+IX
+rrW<$r;Q]or;?NmrrDuqrt#;6!W`<%!r`/us8Drt!<<#lrrDuqru_FF!W`<%!r`/us8;ls!<;rq
+rr)Eg%Kc_6!X&Q-!WWE#!<3*"!#,J7#m:58!<WZ/#mW!QrV?9fquR0'qZ?]orVlfSs$Qbar;$9g
+nLb!tdJWh7rquZlo)/=Wqu$*`r;m<+qYpKfrVH=;#P at fjqtTp\qu6BdrpKa;!"K#WqYgg0rVHHj
+rr)io9)\ejrV6Bkq>:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq
+rV?B^rq?$]qu.rIfDkXDqY9sen,In~>
+n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./<H2nG_tVr;?Nms8W)?s!@X@
+rr2`lqsXUg"UkA2rVQ?Uo_egl!@dsArUKU[!!WB"qYL-hqYqZ:r;6Bp"p+f8!<<,qrUTXYq?$cq
+q#(-bqu-Hkm.:,R!"T24s8;ono`"dne+rq=rqlNk-2 at N<rUg$p!!!9*!;QTip&+ag#6ZUVq"+IX
+rrW<$r;Q]or;?NmrrDuqrt#;6!W`<%!r`/us8Drt!<<#lrrDuqru_FF!W`<%!r`/us8;ls!<;rq
+rr)Eg%Kc_6!X&Q-!WWE#!<3*"!#,J7#m:58!<WZ/#mW!QrV?9fquR0'qZ?]orVlfSs$Qbar;$9g
+nLb!tdJWh7rquZlo)/=Wqu$*`r;m<+qYpKfrVH=;#P at fjqtTp\qu6BdrpKa;!"K#WqYgg0rVHHj
+rr)io9)\ejrV6Bkq>:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq
+rV?B^rq?$]qu.rIfDkXDqY9sen,In~>
+nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H<bs7QBirVlfprVZQhq==FRs8Vlmr;?Nms8W)?
+s!7UDq>^<ds8*$*#Qt54q"agao(NLn#Q"&iq"OQp!^?S\qtp<jrqudNrquZb(]XXC!<N9%r:L!f
+s7ZR"qZ$6bqYp6go_eaT!!i]6"2FL+nFuhU!=Af)p\ssfs8F)0r;ZI!!!EB/!<)inq=X^j!>YD'
+r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!<N6&rVulsrVlits8D]l!<)lr+TqiK!<N6&rVulsr;Q`s
+s82ipr:L'j!"&f7":bD4!<rT#!$;4C$3183!W`N="9JlooD/+Qs7a5061XpMr;HWnrVkdU0E(YD
+qYU0crr,+d"1H&Cr;5g[o_&1[r:BpVq$I0fqYp?io_SR`4hn9#rUp-crr2e%q7sQE!!,O`nc&SR
+q"jpfrr)cmrVQ]uq>1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo
+q>C9nrVc<bqsaL]q=smh"onJtqY9sen,In~>
+nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H<bs7QBirVlfprVZQhq==FRs8Vlmr;?Nms8W)?
+s!7UDq>^<ds8*$*#Qt54q"agao(NLn#Q"&iq"OQp!^?S\qtp<jrqudNrquZb(]XXC!<N9%r:L!f
+s7ZR"qZ$6bqYp6go_eaT!!i]6"2FL+nFuhU!=Af)p\ssfs8F)0r;ZI!!!EB/!<)inq=X^j!>YD'
+r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!<N6&rVulsrVlits8D]l!<)lr+TqiK!<N6&rVulsr;Q`s
+s82ipr:L'j!"&f7":bD4!<rT#!$;4C$3183!W`N="9JlooD/+Qs7a5061XpMr;HWnrVkdU0E(YD
+qYU0crr,+d"1H&Cr;5g[o_&1[r:BpVq$I0fqYp?io_SR`4hn9#rUp-crr2e%q7sQE!!,O`nc&SR
+q"jpfrr)cmrVQ]uq>1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo
+q>C9nrVc<bqsaL]q=smh"onJtqY9sen,In~>
+nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H<bs7QBirVlfprVZQhq==FRs8Vlmr;?Nms8W)?
+s!7UDq>^<ds8*$*#Qt54q"agao(NLn#Q"&iq"OQp!^?S\qtp<jrqudNrquZb(]XXC!<N9%r:L!f
+s7ZR"qZ$6bqYp6go_eaT!!i]6"2FL+nFuhU!=Af)p\ssfs8F)0r;ZI!!!EB/!<)inq=X^j!>YD'
+r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!<N6&rVulsrVlits8D]l!<)lr+TqiK!<N6&rVulsr;Q`s
+s82ipr:L'j!"&f7":bD4!<rT#!$;4C$3183!W`N="9JlooD/+Qs7a5061XpMr;HWnrVkdU0E(YD
+qYU0crr,+d"1H&Cr;5g[o_&1[r:BpVq$I0fqYp?io_SR`4hn9#rUp-crr2e%q7sQE!!,O`nc&SR
+q"jpfrr)cmrVQ]uq>1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo
+q>C9nrVc<bqsaL]q=smh"onJtqY9sen,In~>
+nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>L<mqtg<fs8W#prY#2,qYg?hp&4jeq#1-grVlisrlP0i
+rVlWks8;ig#64l;"9e\snb2qW<s\m(qt0g_li7Cfqu$Hns8Mups8N#ss"XKLU]^c(!!NN+!r2]m
+rVuKm"nV]cqss^\s7uWfo)f:"!s&N$nGi:YpC%'!q"=[cq>VW;qYC$crW*0*";Cq;q=sFUq-O7*
+rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!<W6"rr;rs!!*&tp\t6lrVn#E!s8T+!<W6"rr;or
+!!*&ss8DWi!sAT,!!!N0!!WZ."8Mrs!Z_FF#QOo."Tf58>5eBfr;?Ee#mp+ss8;fps8DoqiVsPd
+rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo
+W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]`
+VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~>
+nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>L<mqtg<fs8W#prY#2,qYg?hp&4jeq#1-grVlisrlP0i
+rVlWks8;ig#64l;"9e\snb2qW<s\m(qt0g_li7Cfqu$Hns8Mups8N#ss"XKLU]^c(!!NN+!r2]m
+rVuKm"nV]cqss^\s7uWfo)f:"!s&N$nGi:YpC%'!q"=[cq>VW;qYC$crW*0*";Cq;q=sFUq-O7*
+rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!<W6"rr;rs!!*&tp\t6lrVn#E!s8T+!<W6"rr;or
+!!*&ss8DWi!sAT,!!!N0!!WZ."8Mrs!Z_FF#QOo."Tf58>5eBfr;?Ee#mp+ss8;fps8DoqiVsPd
+rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo
+W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]`
+VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~>
+nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>L<mqtg<fs8W#prY#2,qYg?hp&4jeq#1-grVlisrlP0i
+rVlWks8;ig#64l;"9e\snb2qW<s\m(qt0g_li7Cfqu$Hns8Mups8N#ss"XKLU]^c(!!NN+!r2]m
+rVuKm"nV]cqss^\s7uWfo)f:"!s&N$nGi:YpC%'!q"=[cq>VW;qYC$crW*0*";Cq;q=sFUq-O7*
+rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!<W6"rr;rs!!*&tp\t6lrVn#E!s8T+!<W6"rr;or
+!!*&ss8DWi!sAT,!!!N0!!WZ."8Mrs!Z_FF#QOo."Tf58>5eBfr;?Ee#mp+ss8;fps8DoqiVsPd
+rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo
+W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]`
+VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~>
+nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg<hrqlWkrY#/*q>(!bqu$Bgr;HQkrVlisrlG*\
+qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV
+EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj
+qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum
+q"asm!!!'$#&e<rG&22;DuOYSD[p`,Dg-/=E,PaYF*DQsrr2d(s7ME]!Vl?dqYL3jr;GRR"9/2r
+rr2jXqYU3colOsR!s/Q/!!E<&"pP)/%fcY/qt^0fqYU!]qYP+4!<J%ANr]Ic!XJgFF7oS0q=Sq4
+!<<*#rW#^p"TS].!0W7rOGf-[!!rW.!X/GrrV?ElqJZW@!ser4!XAi&rV-$Vq>>.4!!NN-"Tn`)
+"9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~>
+nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg<hrqlWkrY#/*q>(!bqu$Bgr;HQkrVlisrlG*\
+qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV
+EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj
+qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum
+q"asm!!!'$#&e<rG&22;DuOYSD[p`,Dg-/=E,PaYF*DQsrr2d(s7ME]!Vl?dqYL3jr;GRR"9/2r
+rr2jXqYU3colOsR!s/Q/!!E<&"pP)/%fcY/qt^0fqYU!]qYP+4!<J%ANr]Ic!XJgFF7oS0q=Sq4
+!<<*#rW#^p"TS].!0W7rOGf-[!!rW.!X/GrrV?ElqJZW@!ser4!XAi&rV-$Vq>>.4!!NN-"Tn`)
+"9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~>
+nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg<hrqlWkrY#/*q>(!bqu$Bgr;HQkrVlisrlG*\
+qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV
+EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj
+qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum
+q"asm!!!'$#&e<rG&22;DuOYSD[p`,Dg-/=E,PaYF*DQsrr2d(s7ME]!Vl?dqYL3jr;GRR"9/2r
+rr2jXqYU3colOsR!s/Q/!!E<&"pP)/%fcY/qt^0fqYU!]qYP+4!<J%ANr]Ic!XJgFF7oS0q=Sq4
+!<<*#rW#^p"TS].!0W7rOGf-[!!rW.!X/GrrV?ElqJZW@!ser4!XAi&rV-$Vq>>.4!!NN-"Tn`)
+"9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~>
+nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U`
+s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!<EH+#6Xl"rV6Bl
+"pP&*qY9serr;m2q<e3<#QY,6"oe/kq#'uE$$Z.Bq>U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p
+rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF at q#C6kr;m6/!!rc/rVu`mp\t6o
+s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB
+rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)!<i]/!sJ[^N.ps&q#:-f
+qtu2)LAluQLPCS at LOb3]"98K(!<`E($3:2/!<2cao`+s`rJ$2aL5CcdL*ufsrUg'eqYH#(Mhm1K
+Lk189KSY*[!s/T*!XJf0!<<3(#l42or;HTno)F4~>
+nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U`
+s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!<EH+#6Xl"rV6Bl
+"pP&*qY9serr;m2q<e3<#QY,6"oe/kq#'uE$$Z.Bq>U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p
+rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF at q#C6kr;m6/!!rc/rVu`mp\t6o
+s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB
+rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)!<i]/!sJ[^N.ps&q#:-f
+qtu2)LAluQLPCS at LOb3]"98K(!<`E($3:2/!<2cao`+s`rJ$2aL5CcdL*ufsrUg'eqYH#(Mhm1K
+Lk189KSY*[!s/T*!XJf0!<<3(#l42or;HTno)F4~>
+nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U`
+s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!<EH+#6Xl"rV6Bl
+"pP&*qY9serr;m2q<e3<#QY,6"oe/kq#'uE$$Z.Bq>U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p
+rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF at q#C6kr;m6/!!rc/rVu`mp\t6o
+s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB
+rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)!<i]/!sJ[^N.ps&q#:-f
+qtu2)LAluQLPCS at LOb3]"98K(!<`E($3:2/!<2cao`+s`rJ$2aL5CcdL*ufsrUg'eqYH#(Mhm1K
+Lk189KSY*[!s/T*!XJf0!<<3(#l42or;HTno)F4~>
+JcG`Ks8O8 at qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g
+oD&aqs8Dors8DorrUKmY')MY5"9f-=p at J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_
+qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g
+!WV`hrqlWq"onf1!!)fmrVQTmp](3ks8<K"p$i"\p\a^_pfn8srU]jaqu?Tor;ciKs"FBMr;HWp
+qYd"YU7dsJSt;XKr;6HjrquWirr2lnrVlZkT:qgFU7IkTp\FUVrVZZl!;uZk$2j\sq!juMS"$)I
+T*h0_qt'RYrqlQjrVcZor<i8qs8W#or;ZZlrVca*rqQ?eq>9dYS"cRISXobP$_X&WU7_5Yq#(*i
+rp]r<~>
+JcG`Ks8O8 at qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g
+oD&aqs8Dors8DorrUKmY')MY5"9f-=p at J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_
+qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g
+!WV`hrqlWq"onf1!!)fmrVQTmp](3ks8<K"p$i"\p\a^_pfn8srU]jaqu?Tor;ciKs"FBMr;HWp
+qYd"YU7dsJSt;XKr;6HjrquWirr2lnrVlZkT:qgFU7IkTp\FUVrVZZl!;uZk$2j\sq!juMS"$)I
+T*h0_qt'RYrqlQjrVcZor<i8qs8W#or;ZZlrVca*rqQ?eq>9dYS"cRISXobP$_X&WU7_5Yq#(*i
+rp]r<~>
+JcG`Ks8O8 at qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g
+oD&aqs8Dors8DorrUKmY')MY5"9f-=p at J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_
+qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g
+!WV`hrqlWq"onf1!!)fmrVQTmp](3ks8<K"p$i"\p\a^_pfn8srU]jaqu?Tor;ciKs"FBMr;HWp
+qYd"YU7dsJSt;XKr;6HjrquWirr2lnrVlZkT:qgFU7IkTp\FUVrVZZl!;uZk$2j\sq!juMS"$)I
+T*h0_qt'RYrqlQjrVcZor<i8qs8W#or;ZZlrVca*rqQ?eq>9dYS"cRISXobP$_X&WU7_5Yq#(*i
+rp]r<~>
+JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I at Nqu?j(!so2=!<;rp
+qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p
+qXF4Rrr, at o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:<os7Q0e-hmZ;qu$?&!sf,4"UOu$pA=XZ
+!!2rmrqQHj!<E0#!XJf(rqQKjrV-?lrr;rsr"8etnGhtUpA4b\!!W;lqYg<grqufp!<1[Os8E#s
+rqufp.Jr`9qYKp_q>U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et
+pAOFNs7Q<aqYV<0s7cBamJckSs8Mrnqu$HnqY^<jqtp<iqYU3hrWiE"r;Q<fn+?VW&GuD(rVZTa
+rV$-fnGN%YrVl9cJ,~>
+JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I at Nqu?j(!so2=!<;rp
+qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p
+qXF4Rrr, at o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:<os7Q0e-hmZ;qu$?&!sf,4"UOu$pA=XZ
+!!2rmrqQHj!<E0#!XJf(rqQKjrV-?lrr;rsr"8etnGhtUpA4b\!!W;lqYg<grqufp!<1[Os8E#s
+rqufp.Jr`9qYKp_q>U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et
+pAOFNs7Q<aqYV<0s7cBamJckSs8Mrnqu$HnqY^<jqtp<iqYU3hrWiE"r;Q<fn+?VW&GuD(rVZTa
+rV$-fnGN%YrVl9cJ,~>
+JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I at Nqu?j(!so2=!<;rp
+qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p
+qXF4Rrr, at o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:<os7Q0e-hmZ;qu$?&!sf,4"UOu$pA=XZ
+!!2rmrqQHj!<E0#!XJf(rqQKjrV-?lrr;rsr"8etnGhtUpA4b\!!W;lqYg<grqufp!<1[Os8E#s
+rqufp.Jr`9qYKp_q>U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et
+pAOFNs7Q<aqYV<0s7cBamJckSs8Mrnqu$HnqY^<jqtp<iqYU3hrWiE"r;Q<fn+?VW&GuD(rVZTa
+rV$-fnGN%YrVl9cJ,~>
+JcGcK!<2ut+T;32qp>QI!s/Aoq=4 at V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@
+rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_
+qt]m_mLB<qrqcKertkY6o`"R]s2P3B!"/i,s8)NdrY>b6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[
+'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr at 7I;
+o)8O\rqZTmqt'abqu$Kmqtp<hqY:$brql6Yrr;`foDA at _p\4[drVl`prVufpqZ-Qnr<;ommdU/O
+rVcZls7ciqqtg!VrVlcoqZHfrqtpBh#5e>rqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y
+r;cics*t~>
+JcGcK!<2ut+T;32qp>QI!s/Aoq=4 at V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@
+rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_
+qt]m_mLB<qrqcKertkY6o`"R]s2P3B!"/i,s8)NdrY>b6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[
+'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr at 7I;
+o)8O\rqZTmqt'abqu$Kmqtp<hqY:$brql6Yrr;`foDA at _p\4[drVl`prVufpqZ-Qnr<;ommdU/O
+rVcZls7ciqqtg!VrVlcoqZHfrqtpBh#5e>rqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y
+r;cics*t~>
+JcGcK!<2ut+T;32qp>QI!s/Aoq=4 at V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@
+rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_
+qt]m_mLB<qrqcKertkY6o`"R]s2P3B!"/i,s8)NdrY>b6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[
+'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr at 7I;
+o)8O\rqZTmqt'abqu$Kmqtp<hqY:$brql6Yrr;`foDA at _p\4[drVl`prVufpqZ-Qnr<;ommdU/O
+rVcZls7ciqqtg!VrVlcoqZHfrqtpBh#5e>rqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y
+r;cics*t~>
+JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq at rVlchqZd-$rVuips8W&rr;Zfrs8<K-h['_r$NTl!o_ng`
+!s&<!rW`?!r;HZoo)AV$r;Q]O%06M/p\XsiqW7krrqZQgruV(:rp'=Xq>T:\#6u(Em.p>Qj8K#M
+r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^,
+rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ`
+q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a
+qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~>
+JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq at rVlchqZd-$rVuips8W&rr;Zfrs8<K-h['_r$NTl!o_ng`
+!s&<!rW`?!r;HZoo)AV$r;Q]O%06M/p\XsiqW7krrqZQgruV(:rp'=Xq>T:\#6u(Em.p>Qj8K#M
+r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^,
+rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ`
+q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a
+qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~>
+JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq at rVlchqZd-$rVuips8W&rr;Zfrs8<K-h['_r$NTl!o_ng`
+!s&<!rW`?!r;HZoo)AV$r;Q]O%06M/p\XsiqW7krrqZQgruV(:rp'=Xq>T:\#6u(Em.p>Qj8K#M
+r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^,
+rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ`
+q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a
+qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~>
+JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!<WZ/rU'FZ
+oCE4hp\OmhrVZWos8N!3rUfjaqt^7#!"8AdoCqnU"T\Atr;$@7r;ZEgrqZ<crqZO'!!)clo)8(V
+p%J(Wq!nXmrp]seq>^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T
+pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m
+qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp
+rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~>
+JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!<WZ/rU'FZ
+oCE4hp\OmhrVZWos8N!3rUfjaqt^7#!"8AdoCqnU"T\Atr;$@7r;ZEgrqZ<crqZO'!!)clo)8(V
+p%J(Wq!nXmrp]seq>^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T
+pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m
+qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp
+rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~>
+JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!<WZ/rU'FZ
+oCE4hp\OmhrVZWos8N!3rUfjaqt^7#!"8AdoCqnU"T\Atr;$@7r;ZEgrqZ<crqZO'!!)clo)8(V
+p%J(Wq!nXmrp]seq>^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T
+pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m
+qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp
+rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~>
+Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1<
+)'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B
+)''e:)&je<pAY'iq>V9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5
+*?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`<!nG`@crr)lqrmUoFrXAhtm/I%`s8Mcl
+r;HWms8W'5s8Mlgrq??hp\k'gp at J7]qu-Nns8W)tqu7!%rVcHgrr2rgrqZR!rqlZdrVQ<err<#t
+rr2utrr;rrq>^Ko"o\GrqYp<frsA]'rq$$cr;Q?fm/MS~>
+Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1<
+)'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B
+)''e:)&je<pAY'iq>V9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5
+*?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`<!nG`@crr)lqrmUoFrXAhtm/I%`s8Mcl
+r;HWms8W'5s8Mlgrq??hp\k'gp at J7]qu-Nns8W)tqu7!%rVcHgrr2rgrqZR!rqlZdrVQ<err<#t
+rr2utrr;rrq>^Ko"o\GrqYp<frsA]'rq$$cr;Q?fm/MS~>
+Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1<
+)'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B
+)''e:)&je<pAY'iq>V9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5
+*?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`<!nG`@crr)lqrmUoFrXAhtm/I%`s8Mcl
+r;HWms8W'5s8Mlgrq??hp\k'gp at J7]qu-Nns8W)tqu7!%rVcHgrr2rgrqZR!rqlZdrVQ<err<#t
+rr2utrr;rrq>^Ko"o\GrqYp<frsA]'rq$$cr;Q?fm/MS~>
+Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?<equ$Kor;6Hls8W)us8W)ts8N!%oD\@Yq#:0iqZ$O>q#9j`
+p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k
+rV-<jq"t$crs\o's7Q?fo`"garqlWlrW`#lrUg!erV?I%rqcZfrVQ6drV6Bhr;HU0o)AXaqXOR]
+p&=p^rqQKip\FgXrq#j`s8N&ss83E)p&=phqu-<fr;$?hnc/I/s8N!-qu$Kls7u]os8N&rrVc`n
+s8W'0s8DlqqZ$?js8Muos8VfmrVZ]qrW)oorrrE#r;Zflrr2upq>U]ss8;osqu?Tns8W)trrE&t
+rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~>
+Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?<equ$Kor;6Hls8W)us8W)ts8N!%oD\@Yq#:0iqZ$O>q#9j`
+p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k
+rV-<jq"t$crs\o's7Q?fo`"garqlWlrW`#lrUg!erV?I%rqcZfrVQ6drV6Bhr;HU0o)AXaqXOR]
+p&=p^rqQKip\FgXrq#j`s8N&ss83E)p&=phqu-<fr;$?hnc/I/s8N!-qu$Kls7u]os8N&rrVc`n
+s8W'0s8DlqqZ$?js8Muos8VfmrVZ]qrW)oorrrE#r;Zflrr2upq>U]ss8;osqu?Tns8W)trrE&t
+rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~>
+Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?<equ$Kor;6Hls8W)us8W)ts8N!%oD\@Yq#:0iqZ$O>q#9j`
+p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k
+rV-<jq"t$crs\o's7Q?fo`"garqlWlrW`#lrUg!erV?I%rqcZfrVQ6drV6Bhr;HU0o)AXaqXOR]
+p&=p^rqQKip\FgXrq#j`s8N&ss83E)p&=phqu-<fr;$?hnc/I/s8N!-qu$Kls7u]os8N&rrVc`n
+s8W'0s8DlqqZ$?js8Muos8VfmrVZ]qrW)oorrrE#r;Zflrr2upq>U]ss8;osqu?Tns8W)trrE&t
+rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~>
+Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-Nmqtp<i
+qu$BjrVlflrrE&srri?!qu6Qmr!WK&qtp6dqu-Qpr;?Hjq>UHorVlrur;63cs8Drrq>UHorVlru
+r;6<fs8*K-rVcZkqt^-frr2loqYU0fr;HW`s8Vp!qu$Elrr;up!W;oqrdk*Vs*t~>
+Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-Nmqtp<i
+qu$BjrVlflrrE&srri?!qu6Qmr!WK&qtp6dqu-Qpr;?Hjq>UHorVlrur;63cs8Drrq>UHorVlru
+r;6<fs8*K-rVcZkqt^-frr2loqYU0fr;HW`s8Vp!qu$Elrr;up!W;oqrdk*Vs*t~>
+Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-Nmqtp<i
+qu$BjrVlflrrE&srri?!qu6Qmr!WK&qtp6dqu-Qpr;?Hjq>UHorVlrur;63cs8Drrq>UHorVlru
+r;6<fs8*K-rVcZkqt^-frr2loqYU0fr;HW`s8Vp!qu$Elrr;up!W;oqrdk*Vs*t~>
+Jc>`LrVlrur;6<hs8<&tqtp<jr<<)op\=Uao)Jahs82io!<)Wjs8Dusp&>9prVlcnr;HWoqZ$Hl
+r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$<jr;Z`prqZQorr)iurr)cj
+rVu^$qu$BhqYL0grVZTmrVl]rrVlfbs8VurquH]prquWpr;HSFs0VfV~>
+Jc>`LrVlrur;6<hs8<&tqtp<jr<<)op\=Uao)Jahs82io!<)Wjs8Dusp&>9prVlcnr;HWoqZ$Hl
+r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$<jr;Z`prqZQorr)iurr)cj
+rVu^$qu$BhqYL0grVZTmrVl]rrVlfbs8VurquH]prquWpr;HSFs0VfV~>
+Jc>`LrVlrur;6<hs8<&tqtp<jr<<)op\=Uao)Jahs82io!<)Wjs8Dusp&>9prVlcnr;HWoqZ$Hl
+r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$<jr;Z`prqZQorr)iurr)cj
+rVu^$qu$BhqYL0grVZTmrVl]rrVlfbs8VurquH]prquWpr;HSFs0VfV~>
+Jc>`Lr;QfsrV-<irVld#rVQHfqu6Tds8W)trUg'hrVlfhrs/N%s8Muqrr2fns8MZj%0$5's8W)s
+rVlisrr2oq!ri6"qu60d!ri/rq>UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co
+r;HZpJcE(VJ,~>
+Jc>`Lr;QfsrV-<irVld#rVQHfqu6Tds8W)trUg'hrVlfhrs/N%s8Muqrr2fns8MZj%0$5's8W)s
+rVlisrr2oq!ri6"qu60d!ri/rq>UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co
+r;HZpJcE(VJ,~>
+Jc>`Lr;QfsrV-<irVld#rVQHfqu6Tds8W)trUg'hrVlfhrs/N%s8Muqrr2fns8MZj%0$5's8W)s
+rVlisrr2oq!ri6"qu60d!ri/rq>UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co
+r;HZpJcE(VJ,~>
+JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm
+rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~>
+JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm
+rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~>
+JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm
+rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~>
+JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~>
+JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~>
+JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~>
+JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U
+s*t~>
+JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U
+s*t~>
+JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U
+s*t~>
+JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9!
+qu?Tnmf*:dq#CBnJcDtSJ,~>
+JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9!
+qu?Tnmf*:dq#CBnJcDtSJ,~>
+JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9!
+qu?Tnmf*:dq#CBnJcDtSJ,~>
+JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL
+YlB4~>
+JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL
+YlB4~>
+JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL
+YlB4~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+JcC<$JcC<$]`3K~>
+%%EndData
+showpage
+%%Trailer
+end
+%%EOF
\ No newline at end of file
diff --git a/guavapage/guava_light.jpg b/guavapage/guava_light.jpg
new file mode 100644
index 0000000..b7161d9
Binary files /dev/null and b/guavapage/guava_light.jpg differ
diff --git a/htm/chap0.html b/htm/chap0.html
new file mode 100644
index 0000000..ccfba1e
--- /dev/null
+++ b/htm/chap0.html
@@ -0,0 +1,538 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Contents</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Next Chapter</a>   </div>
+
+<p><a id="X7D2C85EC87DD46E5" name="X7D2C85EC87DD46E5"></a></p>
+<div class="pcenter">
+
+<h1><strong class="pkg">GUAVA</strong></h1>
+
+
+<h2>A <strong class="pkg">GAP</strong>4 Package for computing with error-correcting codes  </h2>
+
+<p>Version 3.5</p>
+
+<p>April 25, 2008</p>
+
+</div>
+<p><b>
+Jasper Cramwinckel
+</b>
+</p><p><b>
+Erik Roijackers
+</b>
+</p><p><b>
+Reinald Baart
+</b>
+</p><p><b>Eric Minkes, Lea Ruscio
+</b>
+</p><p><b>
+Robert L Miller,  
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:rlm at robertlmiller.com">rlm at robertlmiller.com</a></span>
+</p><p><b>
+Tom Boothby
+
+</b>
+</p><p><b>
+Cen (``CJ'') Tjhai                
+
+ 
+
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:cen.tjhai at plymouth.ac.uk">cen.tjhai at plymouth.ac.uk</a></span>
+<br />WWW: <span class="URL"><a href="http://www.plymouth.ac.uk/staff/ctjhai">http://www.plymouth.ac.uk/staff/ctjhai</a></span>
+</p><p><b>
+	    David Joyner (Maintainer),                  
+
+ 
+
+</b>
+<br />e-mail: <span class="URL"><a href="mailto:wdjoyner at gmail.com">wdjoyner at gmail.com</a></span>
+<br />WWW: <span class="URL"><a href="http://sage.math.washington.edu/home/wdj/guava/">http://sage.math.washington.edu/home/wdj/guava/</a></span>
+</p>
+
+<p><a id="X81488B807F2A1CF1" name="X81488B807F2A1CF1"></a></p>
+<h3>Copyright</h3>
+<p>© The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon © 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby</p>
+
+<p><strong class="pkg">GUAVA</strong> is released under the GNU General Public License (GPL). This file is part of <strong class="pkg">GUAVA</strong>, though as documentation it is released under the GNU Free Documentation License (see <span class="URL"><a href="http://www.gnu.org/licenses/licenses.html#FDL">http://www.gnu.org/licenses/licenses.html#FDL</a></span>).</p>
+
+<p><strong class="pkg">GUAVA</strong> is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</p>
+
+<p><strong class="pkg">GUAVA</strong> is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
+
+<p>You should have received a copy of the GNU General Public License along with <strong class="pkg">GUAVA</strong>; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
+
+<p>For more details, see <span class="URL"><a href="http://www.fsf.org/licenses/gpl.html">http://www.fsf.org/licenses/gpl.html</a></span>.</p>
+
+<p>For many years <strong class="pkg">GUAVA</strong> has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL [...]
+
+<p><a id="X82A988D47DFAFCFA" name="X82A988D47DFAFCFA"></a></p>
+<h3>Acknowledgements</h3>
+<p><strong class="pkg">GUAVA</strong> was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology.</p>
+
+<p>JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision.</p>
+
+<p>The GAP 4 version of <strong class="pkg">GUAVA</strong> (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the <strong class="pkg">GUAVA</strong> directory, also available at <span class="URL"><a href="http://s [...]
+
+<p>This documentation was prepared with the <strong class="pkg">GAPDoc</strong> package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to <strong class="pkg">GAPDoc</strong>'s XML was done by David Joyner in 2004.</p>
+
+<p>Please send bug reports, suggestions and other comments about <strong class="pkg">GUAVA</strong> to <span class="URL"><a href="mailto:support at gap-system.org">support at gap-system.org</a></span>. Currently known bugs and suggested <strong class="pkg">GUAVA</strong> projects are listed on the bugs and projects web page <span class="URL"><a href="http://sage.math.washington.edu/home/wdj/guava/guava2do.html">http://sage.math.washington.edu/home/wdj/guava/guava2do.html</a></span>. Older rele [...]
+
+<p><em>Contributors</em>: Other than the authors listed on the title page, the following people have contributed code to the <strong class="pkg">GUAVA</strong> project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (``Clipper") Lennon, Jason McGowan, Shuhong Gao, Greg Gamble.</p>
+
+<p>For documentation on Leon's programs, see the src/leon/doc subdirectory of <strong class="pkg">GUAVA</strong>.</p>
+
+<p><a id="X8537FEB07AF2BEC8" name="X8537FEB07AF2BEC8"></a></p>
+
+<div class="contents">
+<h3>Contents</h3>
+
+<div class="ContChap"><a href="chap1.html#X7DFB63A97E67C0A1">1. <span class="Heading">Introduction</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X787D826579603719">1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X7E2CB7DF83B514A8">1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X80EAA631863F805B">1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></a>
+</div>
+</div>
+<div class="ContChap"><a href="chap2.html#X7A93308C82637F4F">2. <span class="Heading">Coding theory functions in GAP</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X80F192497C008691">2.1 <span class="Heading">
+Distance functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X82E5987E81487D18">2.1-1 AClosestVectorCombinationsMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X870DE258833C5AA0">2.1-2 AClosestVectorComb..MatFFEVecFFECoords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85135CEB86E61D49">2.1-3 DistancesDistributionMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7F2F630984A9D3D6">2.1-4 DistancesDistributionVecFFEsVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5 WeightVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85AA5C6587559C1C">2.1-6 DistanceVecFFE</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X87C3D1B984960984">2.2 <span class="Heading">
+Other functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C2425A786F09054">2.2-1 ConwayPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7ECC593583E68A6C">2.2-2 RandomPrimitivePolynomial</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap3.html#X836BAA9A7EBD08B1">3. <span class="Heading">Codewords</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81B73ABB87DA8E49">3.1 <span class="Heading">Construction of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B9E353D852851AA">3.1-1 Codeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2 CodewordNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F25479781E6E109">3.1-3 IsCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X8253374284B475B6">3.2 <span class="Heading">Comparisons of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8123456781234567">3.2-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7ADE7E95867A14E1">3.3 <span class="Heading">Arithmetic Operations for Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X81B1391281B13912">3.3-2 -</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-3 +</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7BBA5DCD7A8BD60D">3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X87C8B0B178496F6A">3.4-1 VectorCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X822465E884D0F484">3.4-2 PolyCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81D3230A797FE6E3">3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E3E174B7954AA6B">3.5-1 TreatAsVector</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7A6828148490BD2E">3.5-2 TreatAsPoly</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X805BF7147C68CACD">3.6 <span class="Heading">
+Other Codeword Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8000B6597EF0282F">3.6-1 NullWord</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7CDA1B547D55E6FB">3.6-2 DistanceCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B689C0284AC4296">3.6-3 Support</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7AD61C237D8D3849">3.6-4 WeightCodeword</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap4.html#X85FDDF0B7B7D87FB">4. <span class="Heading">Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7ECE60E1873B49A6">4.1 <span class="Heading">Comparisons of Codes</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.1-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X832DA51986A3882C">4.2 <span class="Heading">
+Operations for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F2703417F270341">4.2-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-2 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-3 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8744BA5E78BCF3F9">4.2-4 InformationWord</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X864091AA7D4AFE86">4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1 in</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79CA175481F8105F">4.3-2 IsSubset</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F71186281DEA83A">4.3-3 IsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B24748A7CE8D4B9">4.3-4 IsLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X850C23D07C9A9B19">4.3-5 IsCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85E3BD26856424F7">4.3-6 IsPerfectCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X789380D28018EC3F">4.3-7 IsMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80166D8D837FEB58">4.3-8 IsSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B2A0CC481D2366F">4.3-9 IsSelfOrthogonalCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8358D43981EBE970">4.3-10 IsDoublyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79ACAEF5865414A0">4.3-11 IsSinglyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CE150ED7C3DC455">4.3-12 IsEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13 IsSelfComplementaryCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFD3844859B20BF">4.3-14 IsAffineCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X861D32FB81EF0D77">4.3-15 IsAlmostAffineCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X86442DCD7A0B2146">4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X843034687D9C75B0">4.4-1 IsEquivalent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X874DED8E86BC180B">4.4-2 CodeIsomorphism</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87677B0787B4461A">4.4-3 AutomorphismGroup</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79F3261F86C29F6D">4.4-4 PermutationAutomorphismGroup</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X866EB39483DDAE72">4.5 <span class="Heading">
+Domain Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X808A4061809A6E67">4.5-1 IsFinite</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X858ADA3B7A684421">4.5-2 Size</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X86F070E0807DC34E">4.5-3 LeftActingDomain</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E6926C6850E7C4E">4.5-4 Dimension</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X856D927378C33548">4.5-5 AsSSortedList</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X823827927D6A8235">4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFA64D97A1F39A3">4.6-1 Print</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81FB5BE27903EC32">4.6-2 String</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83A5C59278E13248">4.6-3 Display</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CD08C8C780543C4">4.6-4 DisplayBoundsInfo</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D0F48B685A3ECDD">4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X817224657C9829C4">4.7-1 GeneratorMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85D4B26E7FB38D57">4.7-2 CheckMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X78E33C3A843B0261">4.7-3 GeneratorPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7C45AA317BB1195F">4.7-4 CheckPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F4CB9DB7CD97178">4.7-5 RootsOfCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X8170B52D7C154247">4.8 <span class="Heading">
+Parameters of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A36C3C67B0062E8">4.8-1 WordLength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E33FD56792DBF3D">4.8-2 Redundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B31613D8538BD29">4.8-3 MinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X813F226F855590EE">4.8-4 MinimumDistanceLeon</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X84EDF67B86B4154C">4.8-5 MinimumWeight</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X823B9A797EE42F6D">4.8-6 DecreaseMinimumDistanceUpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A679B0A7816B030">4.8-7 MinimumDistanceRandom</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A195E317D2AB7CE">4.8-8 CoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81004B007EC5DF58">4.8-9 SetCoveringRadius</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X806384B4815EFF2E">4.9 <span class="Heading">
+Distributions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AEE64467FB1E0B9">4.9-1 MinimumWeightWords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8728BCC9842A6E5D">4.9-2 WeightDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X871FD301820717A4">4.9-3 InnerDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87AD54F87C5EE77E">4.9-4 DistancesDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8495870687195324">4.9-5 OuterDistribution</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D9A39BF801948C8">4.10 <span class="Heading">
+Decoding Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A42FF7D87FC34AC">4.10-1 Decode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D870C9387C47D9F">4.10-2 Decodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D48DE2A84474C6A">4.10-3 GeneralizedReedSolomonDecoderGao</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CFF98D483502053">4.10-4 GeneralizedReedSolomonListDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80E17FA27DCAB676">4.10-5 BitFlipDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B88DEB37F28404A">4.10-6 NearestNeighborGRSDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X825E35757D778787">4.10-7 NearestNeighborDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D02E0FE8735D3E6">4.10-8 Syndrome</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B9E71987E4294A7">4.10-9 SyndromeTable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8642D0BD789DA9B5">4.10-10 StandardArray</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83231E717CCB0247">4.10-11 PermutationDecode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85B692177E2A745D">4.10-12 PermutationDecodeNC</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap5.html#X87EB64ED831CCE99">5. <span class="Heading">Generating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X86A92CB184CBD3C7">5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81AACBDD86E89D7D">5.1-1 ElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X86755AAC83A0AF4B">5.1-2 HadamardCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8122BA417F705997">5.1-3 ConferenceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81B7EE4279398F67">5.1-4 MOLSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D87DD6380B2CE69">5.1-5 RandomCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816353397F25B62E">5.1-6 NordstromRobinsonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7880D34485C60BAF">5.1-7 GreedyCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C1B374583AFB923">5.1-8 LexiCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7A11F29F7BBF45BB">5.2 <span class="Heading">
+Generating Linear Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83F400A681CFC0D6">5.2-1 GeneratorMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7CDDDFE47A10A008">5.2-2 CheckMatCodeMutable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X848D3F7B805DEB66">5.2-3 CheckMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7DECB0A57C798583">5.2-4 HammingCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X801C88D578DA6ACA">5.2-5 ReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X851592C7811D3D2A">5.2-6 AlternantCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE808BB7D1E487A">5.2-7 GoppaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F9C0A727EE075B7">5.2-8 GeneralizedSrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7A38EB3178961F3E">5.2-9 SrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87F7CB8B7A8BE624">5.2-10 CordaroWagnerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865534267C8E902A">5.2-11 FerreroDesignCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BCA10CE8660357F">5.2-12 RandomLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X839CFE4C7A567D4D">5.2-13 OptimalityCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X871508567CB34D96">5.2-14 BestKnownLinearCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X858721967BE44000">5.3 <span class="Heading">
+Gabidulin Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79BE5D497CB2E59E">5.3-1 GabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X873950F67D4A9184">5.3-2 EnlargedGabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F5BE77B7F343182">5.3-3 DavydovCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X845B4DBE83288D2D">5.3-4 TombakCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D6583347C0D4292">5.3-5 EnlargedTombakCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X81F6E4A785F368B0">5.4 <span class="Heading">
+Golay Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80ED89C079CD0D09">5.4-1 BinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X84520C7983538806">5.4-2 ExtendedBinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E0CCCD7866ADB94">5.4-3 TernaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81088A66816BCAE4">5.4-4 ExtendedTernaryGolayCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X8366CC3685F0BC85">5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X853D34A5796CEB73">5.5-1 GeneratorPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82440B78845F7F6E">5.5-2 CheckPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X818F0E6583E01D4B">5.5-3 RootsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C6BB07C87853C00">5.5-4 BCHCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X838F3CB3872CEF95">5.5-5 ReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8730B90A862A3B3E">5.5-6 ExtendedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X825F42F68179D2AB">5.5-7 QRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8764ABCF854C695E">5.5-8 QQRCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9 QQRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10 FireCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BC245E37EB7B23F">5.5-11 WholeSpaceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B4EF2017B2C61AD">5.5-12 NullCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83C5F8FE7827EAA7">5.5-13 RepetitionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82FA9F65854D98A6">5.5-14 CyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8263CE4A790D294A">5.5-15 NrCyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79826B16785E8BD3">5.5-16 QuasiCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BFEDA52835A601D">5.5-17 CyclicMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F40AF3B81C252DC">5.5-18 FourNegacirculantSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87137A257E761291">5.5-19 FourNegacirculantSelfDualCodeNC</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X850A28C579137220">5.6 <span class="Heading">
+Evaluation Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X78E078567D19D433">5.6-1 EvaluationCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X810AB3DB844FFCE9">5.6-2 GeneralizedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85B8699680B9D786">5.6-3 GeneralizedReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE68B58872D7E82">5.6-4 ToricPoints</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B24BE418010F596">5.6-5 ToricCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7AE2B2CD7C647990">5.7 <span class="Heading">
+Algebraic geometric codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X802DD9FB79A9ACA7">5.7-1 AffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857EFE567C05C981">5.7-2 AffinePointsOnCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857E36ED814A40B8">5.7-3 GenusCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8572A3037DA66F88">5.7-4 GOrbitPoint </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79742B7183051D99">5.7-5 DivisorOnAffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8626E2B57D01F2DC">5.7-6 DivisorAddition </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865FE28D828C1EAD">5.7-7 DivisorDegree </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X789DC358819A8F54">5.7-8 DivisorNegate </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8688C0E187B5C7DB">5.7-9 DivisorIsZero </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816A07997D9A7075">5.7-10 DivisorsEqual </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857B89847A649A26">5.7-11 DivisorGCD </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82231CF08073695F">5.7-12 DivisorLCM </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79C878697F99A10F">5.7-13 RiemannRochSpaceBasisFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X856DDA207EDDF256">5.7-14 DivisorOfRationalFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X878970A17E580224">5.7-15 RiemannRochSpaceBasisP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X807C52E67A440DEB">5.7-16 MoebiusTransformation </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85A0419580ED0391">5.7-17 ActionMoebiusTransformationOnFunction </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18 ActionMoebiusTransformationOnDivisorP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79FD980E7B24DB9C">5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X823386037F450B0E">5.7-20 DivisorAutomorphismGroupP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80EDF3D682E7EF3F">5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8777388C7885E335">5.7-22 GoppaCodeClassical</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8422A310854C09B0">5.7-23 EvaluationBivariateCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B6C2BED8319C811">5.7-24 EvaluationBivariateCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X842E227E8785168E">5.7-25 OnePointAGCode</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap6.html#X866FC1117814B64D">6. <span class="Heading">Manipulating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X8271A4697FDA97B2">6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X794679BE7F9EB5C1">6.1-1 ExtendedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E6E4DDA79574FDB">6.1-2 PuncturedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87691AB67FF5621B">6.1-3 EvenWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79577EB27BE8524B">6.1-4 PermutedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87E5849784BC60D2">6.1-5 ExpurgatedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8134BE2B8478BE8A">6.1-6 AugmentedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B0A6E1F82686B43">6.1-7 RemovedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X784E1255874FCA8A">6.1-8 AddedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9 ShortenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A5D5419846FC867">6.1-10 LengthenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7982D699803ECD0F">6.1-11 SubCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X809376187C1525AA">6.1-12 ResidueCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E92DC9581F96594">6.1-13 ConstructionBCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X799B12F085ACB609">6.1-14 DualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81FE1F387DFCCB22">6.1-15 ConversionFieldCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X82D18907800FE3D9">6.1-16 TraceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8799F4BF81B0842B">6.1-17 CosetCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X873EA5EE85699832">6.1-18 ConstantWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7AA203A380BC4C79">6.1-19 StandardFormCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7EF49A257D6DB53B">6.1-20 PiecewiseConstantCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X7964BF0081CC8352">6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79E00D3A8367D65A">6.2-1 DirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2 UUVCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7BFBBA5784C293C1">6.2-3 DirectProductCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X78F0B1BC81FB109C">6.2-4 IntersectionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8228A1F57A29B8F4">6.2-5 UnionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A85F8AF8154D387">6.2-6 ExtendedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E17107686A845DB">6.2-7 AmalgamatedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7D8981AF7DFE9814">6.2-8 BlockwiseDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7C37D467791CE99B">6.2-9 ConstructionXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B50943B8014134F">6.2-10 ConstructionXXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X790C614985BFAE16">6.2-11 BZCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X820327D6854A50B5">6.2-12 BZCodeNC</a></span>
+</div>
+</div>
+<div class="ContChap"><a href="chap7.html#X7A814D518460862E">7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X87C753EB840C34D3">7.1 <span class="Heading">
+Distance bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8673277C7F6C04C3">7.1-1 UpperBoundSingleton</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X828095537C91FDFA">7.1-2 UpperBoundHamming</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3 UpperBoundJohnson</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A26E2537DFF4409">7.1-4 UpperBoundPlotkin</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86A5A7C67F625A40">7.1-5 UpperBoundElias</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82366C277E218130">7.1-6 UpperBoundGriesmer</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8301FA9F7C6C7445">7.1-7 IsGriesmerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A5CB74485184FEE">7.1-8 UpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7FDF54BA81115D88">7.1-9 LowerBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CF15D2084499869">7.1-10 LowerBoundGilbertVarshamov</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8217D830871286D8">7.1-11 LowerBoundSpherePacking</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C6A58327BD6B685">7.1-12 UpperBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B3858B27A9E509A">7.1-13 BoundsMinimumDistance</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X817D0A647D3331EB">7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8320D1C180A1AAAD">7.2-1 BoundsCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7881E03E812140F4">7.2-2 IncreaseCoveringRadiusLowerBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3 ExhaustiveSearchCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85D671F4824B4B0C">7.2-4 GeneralLowerBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8638F5A67D6E50C1">7.2-5 GeneralUpperBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E7FBCC87D5562AB">7.2-6 LowerBoundCoveringRadiusSphereCovering</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E20C518360AB70">7.2-7 LowerBoundCoveringRadiusVanWee1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C72994A825228E7">7.2-8 LowerBoundCoveringRadiusVanWee2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F95362485759ACB">7.2-9 LowerBoundCoveringRadiusCountingExcess</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X829C14A383B5BF59">7.2-10 LowerBoundCoveringRadiusEmbedded1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B0C81B88604C448">7.2-11 LowerBoundCoveringRadiusEmbedded2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D27F6E27B9A0D35">7.2-12 LowerBoundCoveringRadiusInduction</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13 UpperBoundCoveringRadiusRedundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X832847A17FD0D142">7.2-14 UpperBoundCoveringRadiusDelsarte</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86F10D9E79AB8796">7.2-15 UpperBoundCoveringRadiusStrength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8585C6A982489FC3">7.2-16 UpperBoundCoveringRadiusGriesmerLike</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82A38F5F858CF3FC">7.2-17 UpperBoundCoveringRadiusCyclicCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X806EBEC77C16E657">7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82899B64802A4BCE">7.3-1 KrawtchoukMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87AFE2C078031CE4">7.3-2 GrayMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E1E7C5287919CDB">7.3-3 SylvesterMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8014A1F181ECD8AA">7.3-4 HadamardMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X797F43607AD8660D">7.3-5 VandermondeMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B47D82485B66F1D">7.3-6 PutStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7 IsInStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A97AD477E7638DE">7.3-8 PermutedCols</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B68119F85E9EC6D">7.3-9 VerticalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8033E9A67BA155C8">7.3-10 HorizontalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X804AAFF2867080F7">7.3-11 MOLS</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F34306B81DC2776">7.3-12 IsLatinSquare</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81B9B40B7B2D97D5">7.3-13 AreMOLS</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7AB5E5CE7FDF7132">7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8032E53078264ABB">7.4-1 CoordinateNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ED2EF368203AF47">7.4-2 CodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3 IsCoordinateAcceptable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87039FD179AD3009">7.4-4 GeneralizedCodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80283A2F7C8101BD">7.4-5 IsNormalCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X8308D685809A4E2F">7.5 <span class="Heading">
+Miscellaneous functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X871286437DE7A6A4">7.5-1 CodeWeightEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84DA928083B103A0">7.5-2 CodeDistanceEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84B2BE66780EFBF9">7.5-3 CodeMacWilliamsTransform</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7903286078F8051B">7.5-4 CodeDensity</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85303BAE7BD46D81">7.5-5 SphereContent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ACDC5377CD17451">7.5-6 Krawtchouk</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X827E39957A87EB51">7.5-7 PrimitiveUnityRoot</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78AEA40F7AD9D541">7.5-8 PrimitivePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A2B54EF868AA752">7.5-9 IrreduciblePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B50D3417F6FD7C6">7.5-10 MatrixRepresentationOfElement</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7805D2BB7CE4D455">7.5-11 ReciprocalPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12 CyclotomicCosets</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A4EA98D794CF410">7.5-13 WeightHistogram</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X805DF25C84585FD6">7.5-14 MultiplicityInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8072B0DA78FBE562">7.5-15 MostCommonInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C5407EF87849857">7.5-16 RotateList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E526367878F72A">7.5-17 CirculantMatrix</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7969103F7A8598F9">7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84D51EBB784E7C5D">7.6-1 MatrixTransformationOnMultivariatePolynomial </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80433A4B792880EF">7.6-2 DegreeMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X83F44E397C56F2E0">7.6-3 DegreesMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E9021697A61A60F">7.6-4 CoefficientMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79E76B6F7D177E27">7.6-5 SolveLinearSystem</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80171AA687FFDC70">7.6-6 GuavaVersion</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7EBBE86D85CC90C0">7.6-7 ZechLog</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8 CoefficientToPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8431985183B63BB7">7.6-9 DegreesMonomialTerm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X860EF39B841380A1">7.6-10 DivisorsMultivariatePolynomial</a></span>
+</div>
+</div>
+<br />
+</div>
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap1.html b/htm/chap1.html
new file mode 100644
index 0000000..3a6923a
--- /dev/null
+++ b/htm/chap1.html
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 1: Introduction</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap0.html">Previous Chapter</a>    <a href="chap2.html">Next Chapter</a>   </div>
+
+<p><a id="X7DFB63A97E67C0A1" name="X7DFB63A97E67C0A1"></a></p>
+<div class="ChapSects"><a href="chap1.html#X7DFB63A97E67C0A1">1. <span class="Heading">Introduction</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X787D826579603719">1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X7E2CB7DF83B514A8">1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></a>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap1.html#X80EAA631863F805B">1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></a>
+</div>
+</div>
+
+<h3>1. <span class="Heading">Introduction</span></h3>
+
+<p><a id="X787D826579603719" name="X787D826579603719"></a></p>
+
+<h4>1.1 <span class="Heading">Introduction to the <strong class="pkg">GUAVA</strong> package</span></h4>
+
+<p>This is the manual of the GAP package <strong class="pkg">GUAVA</strong> that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of <strong class="pkg">GUAVA</strong> requires GAP 4.4.5 or later.</p>
+
+<p>The functions can be divided into three subcategories:</p>
+
+
+<ul>
+<li><p>Construction of codes: <strong class="pkg">GUAVA</strong> can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object.</p>
+
+</li>
+<li><p>Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases.</p>
+
+</li>
+<li><p>Computations of information about codes: <strong class="pkg">GUAVA</strong> can calculate important parameters of codes quickly. The results are stored in the codes' object components.</p>
+
+</li>
+</ul>
+<p>Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see <a href="chapBib.html#biBLeon91">[Leo91]</a> and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and <code class="func">MinimumWeight</code> (<a href="chap4.html#X84EDF67B86B4154C"><b>4.8-5</b></a>) function, <strong class="pkg">GUAVA</strong> is written in the GAP language, and runs on any system supporting GAP4.3 and above. Sev [...]
+
+<p>Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane <a href="chapBib.html#biBMS83">[MS83]</a> Huffman and Pless <a href="chapBib.html#biBHP03">[HP03]</a>.</p>
+
+<p><a id="X7E2CB7DF83B514A8" name="X7E2CB7DF83B514A8"></a></p>
+
+<h4>1.2 <span class="Heading">Installing <strong class="pkg">GUAVA</strong></span></h4>
+
+<p>To install <strong class="pkg">GUAVA</strong> (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4.</p>
+
+<p>After unpacking <strong class="pkg">GUAVA</strong> the GAP-only part of <strong class="pkg">GUAVA</strong> is installed. The parts of <strong class="pkg">GUAVA</strong> depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call <code class="code">`./configure /gappath'</code> where <code class="code">/gappath</code> is the path to [...]
+
+
+<pre class="normal">
+
+./configure ../..
+
+</pre>
+
+<p>This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call</p>
+
+
+<pre class="normal">
+
+make
+
+</pre>
+
+<p>to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see <span class="URL"><a href="http://www.cygwin.com/">http://www.cygwin.com/</a></span> - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type</p>
+
+
+<pre class="normal">
+
+./configure ../.. --enable-libsuffix=64 
+make
+
+</pre>
+
+<p>to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.)</p>
+
+<p>Starting with version 2.5, you should also install the GAP package <strong class="pkg">SONATA</strong> to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory.</p>
+
+<p>This completes the installation of <strong class="pkg">GUAVA</strong> for a single architecture. If you use this installation of <strong class="pkg">GUAVA</strong> on different hardware platforms you will have to compile the binary for each platform separately.</p>
+
+<p><a id="X80EAA631863F805B" name="X80EAA631863F805B"></a></p>
+
+<h4>1.3 <span class="Heading">Loading <strong class="pkg">GUAVA</strong></span></h4>
+
+<p>After starting up GAP, the <strong class="pkg">GUAVA</strong> package needs to be loaded. Load <strong class="pkg">GUAVA</strong> by typing at the GAP prompt:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LoadPackage( "guava" );
+</pre></td></tr></table>
+
+<p>If <strong class="pkg">GUAVA</strong> isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of <strong class="pkg">GUAVA</strong>, you might consider putting this line in your `.gaprc' file.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap0.html">Previous Chapter</a>    <a href="chap2.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap2.html b/htm/chap2.html
new file mode 100644
index 0000000..4c23bc2
--- /dev/null
+++ b/htm/chap2.html
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 2: Coding theory functions in GAP</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Previous Chapter</a>    <a href="chap3.html">Next Chapter</a>   </div>
+
+<p><a id="X7A93308C82637F4F" name="X7A93308C82637F4F"></a></p>
+<div class="ChapSects"><a href="chap2.html#X7A93308C82637F4F">2. <span class="Heading">Coding theory functions in GAP</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X80F192497C008691">2.1 <span class="Heading">
+Distance functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X82E5987E81487D18">2.1-1 AClosestVectorCombinationsMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X870DE258833C5AA0">2.1-2 AClosestVectorComb..MatFFEVecFFECoords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85135CEB86E61D49">2.1-3 DistancesDistributionMatFFEVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7F2F630984A9D3D6">2.1-4 DistancesDistributionVecFFEsVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5 WeightVecFFE</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X85AA5C6587559C1C">2.1-6 DistanceVecFFE</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap2.html#X87C3D1B984960984">2.2 <span class="Heading">
+Other functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7C2425A786F09054">2.2-1 ConwayPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap2.html#X7ECC593583E68A6C">2.2-2 RandomPrimitivePolynomial</a></span>
+</div>
+</div>
+
+<h3>2. <span class="Heading">Coding theory functions in GAP</span></h3>
+
+<p>This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are</p>
+
+
+<ul>
+<li><p><code class="code">AClosestVectorCombinationsMatFFEVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">AClosestVectorCombinationsMatFFEVecFFECoords</code>,</p>
+
+</li>
+<li><p><code class="code">CosetLeadersMatFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistancesDistributionMatFFEVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistancesDistributionVecFFEsVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">DistanceVecFFE</code> and <code class="code">WeightVecFFE</code>,</p>
+
+</li>
+<li><p><code class="code">ConwayPolynomial</code> and <code class="code">IsCheapConwayPolynomial</code>,</p>
+
+</li>
+<li><p><code class="code">IsPrimitivePolynomial</code>, and <code class="code">RandomPrimitivePolynomial</code>.</p>
+
+</li>
+</ul>
+<p>However, the GAP command <code class="code">PrimitivePolynomial</code> returns an integer primitive polynomial not the finite field kind.</p>
+
+<p><a id="X80F192497C008691" name="X80F192497C008691"></a></p>
+
+<h4>2.1 <span class="Heading">
+Distance functions
+</span></h4>
+
+<p><a id="X82E5987E81487D18" name="X82E5987E81487D18"></a></p>
+
+<h5>2.1-1 AClosestVectorCombinationsMatFFEVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AClosestVectorCombinationsMatFFEVecFFE</code>( <var class="Arg">mat, F, vec, r, st</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command runs through the <var class="Arg">F</var>-linear combinations of the vectors in the rows of the matrix <var class="Arg">mat</var> that can be written as linear combinations of exactly <var class="Arg">r</var> rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector <var class="Arg">vec</var>. The length of the rows of <var class="Arg">mat</var> and the length of <var class="Arg">vec</var> must be equal, and all eleme [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111");
+[ 1 2 1 0 1 1 1 1 ]
+gap> v:=VectorCodeword(v);
+[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
+gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
+[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]
+</pre></td></tr></table>
+
+<p><a id="X870DE258833C5AA0" name="X870DE258833C5AA0"></a></p>
+
+<h5>2.1-2 AClosestVectorComb..MatFFEVecFFECoords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AClosestVectorComb..MatFFEVecFFECoords</code>( <var class="Arg">mat, F, vec, r, st</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AClosestVectorCombinationsMatFFEVecFFECoords</code> returns a two element list containing (a) the same closest vector as in <code class="code">AClosestVectorCombinationsMatFFEVecFFE</code>, and (b) a vector <var class="Arg">v</var> with exactly <var class="Arg">r</var> non-zero entries, such that v*mat is the closest vector.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(3);;
+gap> x:= Indeterminate( F );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> C := GeneratorPolCode(pol,8,F);
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
+[ 1 2 1 0 1 1 1 1 ]
+gap> G:=GeneratorMat(C);;
+gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
+[ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X85135CEB86E61D49" name="X85135CEB86E61D49"></a></p>
+
+<h5>2.1-3 DistancesDistributionMatFFEVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistributionMatFFEVecFFE</code>( <var class="Arg">mat, f, vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistributionMatFFEVecFFE</code> returns the distances distribution of the vector <var class="Arg">vec</var> to the vectors in the vector space generated by the rows of the matrix <var class="Arg">mat</var> over the finite field <var class="Arg">f</var>. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs t [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
+[ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]
+</pre></td></tr></table>
+
+<p><a id="X7F2F630984A9D3D6" name="X7F2F630984A9D3D6"></a></p>
+
+<h5>2.1-4 DistancesDistributionVecFFEsVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistributionVecFFEsVecFFE</code>( <var class="Arg">vecs, vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistributionVecFFEsVecFFE</code> returns the distances distribution of the vector <var class="Arg">vec</var> to the vectors in the list <var class="Arg">vecs</var>. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in <var class="Arg">vecs</var> that have distance i+1 to <var class="Arg">vec</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
+>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
+gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
+[ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7C9F4D657F9BA5A1" name="X7C9F4D657F9BA5A1"></a></p>
+
+<h5>2.1-5 WeightVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightVecFFE</code>( <var class="Arg">vec</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightVecFFE</code> returns the weight of the finite field vector <var class="Arg">vec</var>, i.e. the number of nonzero entries.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> WeightVecFFE(v);
+7
+</pre></td></tr></table>
+
+<p><a id="X85AA5C6587559C1C" name="X85AA5C6587559C1C"></a></p>
+
+<h5>2.1-6 DistanceVecFFE</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistanceVecFFE</code>( <var class="Arg">vec1, vec2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The <em>Hamming metric</em> on GF(q)^n is the function</p>
+
+<p class="pcenter">
+dist((v_1,...,v_n),(w_1,...,w_n))
+=|\{i\in [1..n]\ |\ v_i\not= w_i\}|.
+</p>
+
+<p>This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). <code class="code">DistanceVecFFE</code> returns the distance between the two vectors <var class="Arg">vec1</var> and <var class="Arg">vec2</var>, which must have the same length and whose elements must lie in a common field. The distance is the number of places where <var class="Arg">vec1</var> and <var class="Arg">vec2</var> differ.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
+gap> DistanceVecFFE(v1,v2);
+2
+</pre></td></tr></table>
+
+<p><a id="X87C3D1B984960984" name="X87C3D1B984960984"></a></p>
+
+<h4>2.2 <span class="Heading">
+Other functions
+</span></h4>
+
+<p>We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website <span class="URL"><a href="http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol">http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol</a></span> on Conway polynomials. The <strong class="button">prime fields</strong>: If p>= 2 is a prime then GF(p) denotes the field Z}/pZ}, with addition and multiplication performed mod p.</p>
+
+<p>The <strong class="button">prime power fields</strong>: Suppose q=p^r is a prime power, r>1, and put F=GF(p). Let F[x] denote the ring of all polynomials over F and let f(x) denote a monic irreducible polynomial in F[x] of degree r. The quotient E = F[x]/(f(x))= F[x]/f(x)F[x] is a field with q elements. If f(x) and E are related in this way, we say that f(x) is the <strong class="button">defining polynomial</strong> of E. Any defining polynomial factors completely into distinct lin [...]
+
+<p>For any finite field F, the multiplicative group of non-zero elements F^x is a cyclic group. An alpha in F is called a <strong class="button">primitive element</strong> if it is a generator of F^x. A defining polynomial f(x) of F is said to be <strong class="button">primitive</strong> if it has a root in F which is a primitive element.</p>
+
+<p><a id="X7C2425A786F09054" name="X7C2425A786F09054"></a></p>
+
+<h5>2.2-1 ConwayPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConwayPolynomial</code>( <var class="Arg">p, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A standard notation for the elements of GF(p) is given via the representatives 0, ..., p-1 of the cosets modulo p. We order these elements by 0 < 1 < 2 < ... < p-1. We introduce an ordering of the polynomials of degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... + h_0 (by convention, g_i=h_i=0 for i > r). Then we define g < h if and only if there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k h_k.</p>
+
+<p>The <strong class="button">Conway polynomial</strong> f_p,r(x) for GF(p^r) is the smallest polynomial of degree r with respect to this ordering such that:</p>
+
+
+<ul>
+<li><p>f_p,r(x) is monic,</p>
+
+</li>
+<li><p>f_p,r(x) is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of GF(p^r),</p>
+
+</li>
+<li><p>for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1)) = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of f_p,r(x) is a zero of f_p,m(x).</p>
+
+</li>
+</ul>
+<p><code class="code">ConwayPolynomial(p,n)</code> returns the polynomial f_p,r(x) defined above.</p>
+
+<p><code class="code">IsCheapConwayPolynomial(p,n)</code> returns true if <code class="code">ConwayPolynomial( p, n )</code> will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if n,p are not too big.</p>
+
+<p><a id="X7ECC593583E68A6C" name="X7ECC593583E68A6C"></a></p>
+
+<h5>2.2-2 RandomPrimitivePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomPrimitivePolynomial</code>( <var class="Arg">F, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>For a finite field <var class="Arg">F</var> and a positive integer <var class="Arg">n</var> this function returns a primitive polynomial of degree <var class="Arg">n</var> over <var class="Arg">F</var>, that is a zero of this polynomial has maximal multiplicative order |F|^n-1.</p>
+
+<p><code class="code">IsPrimitivePolynomial(f)</code> can be used to check if a univariate polynomial <var class="Arg">f</var> is primitive or not.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap1.html">Previous Chapter</a>    <a href="chap3.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap3.html b/htm/chap3.html
new file mode 100644
index 0000000..997f303
--- /dev/null
+++ b/htm/chap3.html
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 3: Codewords</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap2.html">Previous Chapter</a>    <a href="chap4.html">Next Chapter</a>   </div>
+
+<p><a id="X836BAA9A7EBD08B1" name="X836BAA9A7EBD08B1"></a></p>
+<div class="ChapSects"><a href="chap3.html#X836BAA9A7EBD08B1">3. <span class="Heading">Codewords</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81B73ABB87DA8E49">3.1 <span class="Heading">Construction of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B9E353D852851AA">3.1-1 Codeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2 CodewordNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F25479781E6E109">3.1-3 IsCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X8253374284B475B6">3.2 <span class="Heading">Comparisons of Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8123456781234567">3.2-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7ADE7E95867A14E1">3.3 <span class="Heading">Arithmetic Operations for Codewords</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X81B1391281B13912">3.3-2 -</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7F2703417F270341">3.3-3 +</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X7BBA5DCD7A8BD60D">3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X87C8B0B178496F6A">3.4-1 VectorCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X822465E884D0F484">3.4-2 PolyCodeword</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X81D3230A797FE6E3">3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7E3E174B7954AA6B">3.5-1 TreatAsVector</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7A6828148490BD2E">3.5-2 TreatAsPoly</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap3.html#X805BF7147C68CACD">3.6 <span class="Heading">
+Other Codeword Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X8000B6597EF0282F">3.6-1 NullWord</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7CDA1B547D55E6FB">3.6-2 DistanceCodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7B689C0284AC4296">3.6-3 Support</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap3.html#X7AD61C237D8D3849">3.6-4 WeightCodeword</a></span>
+</div>
+</div>
+
+<h3>3. <span class="Heading">Codewords</span></h3>
+
+<p>Let GF(q) denote a finite field with q (a prime power) elements. A <em>code</em> is a subset C of some finite-dimensional vector space V over GF(q). The <em>length</em> of C is the dimension of V. Usually, V=GF(q)^n and the length is the number of coordinate entries. When C is itself a vector space over GF(q) then it is called a <em>linear code</em> and the <em>dimension</em> of C is its dimension as a vector space over GF(q).</p>
+
+<p>In <strong class="pkg">GUAVA</strong>, a `codeword' is a GAP record, with one of its components being an element in V. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if C is linear) of V.</p>
+
+
+<table class="example">
+<tr><td><pre>
+  gap> C:=RandomLinearCode(20,10,GF(4));
+  a  [20,10,?] randomly generated code over GF(4)
+  gap> c:=Random(C);
+  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
+  gap> NamesOfComponents(C);
+  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+    "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
+     "Representative", "ZeroImmutable" ]
+  gap> NamesOfComponents(c);
+  [ "VectorCodeword", "WordLength", "treatAsPoly" ]
+  gap> c!.VectorCodeword;
+  [ immutable compressed vector length 20 over GF(4) ] 
+  gap> Display(last);
+  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
+    Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
+    Z(2)^0, 0*Z(2) ]
+  gap> C!.Dimension;
+  10
+</pre></td></tr></table>
+
+<p>Mathematically, a `codeword' is an element of a code C, but in <strong class="pkg">GUAVA</strong> the <code class="code">Codeword</code> and <code class="code">VectorCodeword</code> commands have implementations which do not check if the codeword belongs to C (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword c (belonging to C) and a rec [...]
+
+<p>A codeword c in a linear code C arises in practice by an initial encoding of a 'block' message m, adding enough redundancy to recover m after c is transmitted via a 'noisy' communication medium. In <strong class="pkg">GUAVA</strong>, for linear codes, the map mlongmapsto c is computed using the command <code class="code">c:=m*C</code> and recovering m from c is obtained by the command <code class="code">InformationWord(C,c)</code>. These commands are explained more below.</p>
+
+<p>Many operations are available on codewords themselves, although codewords also work together with codes (see chapter <a href="chap4.html#X85FDDF0B7B7D87FB"><b>4.</b></a> on Codes).</p>
+
+<p>The first section describes how codewords are constructed (see <code class="func">Codeword</code> (<a href="chap3.html#X7B9E353D852851AA"><b>3.1-1</b></a>) and <code class="func">IsCodeword</code> (<a href="chap3.html#X7F25479781E6E109"><b>3.1-3</b></a>)). Sections <a href="chap3.html#X8253374284B475B6"><b>3.2</b></a> and <a href="chap3.html#X7ADE7E95867A14E1"><b>3.3</b></a> describe the arithmetic operations applicable to codewords. Section <a href="chap3.html#X7BBA5DCD7A8BD60D"><b>3 [...]
+
+<p><a id="X81B73ABB87DA8E49" name="X81B73ABB87DA8E49"></a></p>
+
+<h4>3.1 <span class="Heading">Construction of Codewords</span></h4>
+
+<p><a id="X7B9E353D852851AA" name="X7B9E353D852851AA"></a></p>
+
+<h5>3.1-1 Codeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Codeword</code>( <var class="Arg">obj[, n][, F]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Codeword</code> returns a codeword or a list of codewords constructed from <var class="Arg">obj</var>. The object <var class="Arg">obj</var> can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list).</p>
+
+<p>If a number <var class="Arg">n</var> is specified, all constructed codewords have length <var class="Arg">n</var>. This is the only way to make sure that all elements of <var class="Arg">obj</var> are converted to codewords of the same length. Elements of <var class="Arg">obj</var> that are longer than <var class="Arg">n</var> are reduced in length by cutting of the last positions. Elements of <var class="Arg">obj</var> that are shorter than <var class="Arg">n</var> are lengthened by  [...]
+
+<p>If a Galois field <var class="Arg">F</var> is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of <var class="Arg">obj</var> are converted to the same field <var class="Arg">F</var> (otherwise they are converted one by one). Note that all elements of <var class="Arg">obj</var> must have elements over <var class="Arg">F</var> or over `Integers'. Converting from one Galois field to another is not allowed. If no <var class="Arg [...]
+
+<p>Note that a significant speed increase is achieved if <var class="Arg">F</var> is specified, even when all elements of <var class="Arg">obj</var> already have elements over <var class="Arg">F</var>.</p>
+
+<p>Every vector in <var class="Arg">obj</var> can be a finite field vector over <var class="Arg">F</var> or a vector over `Integers'. In the last case, it is converted to <var class="Arg">F</var> or, if omitted, to the smallest Galois field possible.</p>
+
+<p>Every string in <var class="Arg">obj</var> must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over <var class="Arg">F</var> or, if <var class="Arg">F</var> is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no fin [...]
+
+<p>Every polynomial in <var class="Arg">obj</var> is converted to a codeword of length <var class="Arg">n</var> or, if omitted, of a length dictated by the degree of the polynomial. If <var class="Arg">F</var> is specified, a polynomial in <var class="Arg">obj</var> must be over <var class="Arg">F</var>.</p>
+
+<p>Every element of <var class="Arg">obj</var> that is already a codeword is changed to a codeword of length <var class="Arg">n</var>. If no <var class="Arg">n</var> was specified, the codeword doesn't change. If <var class="Arg">F</var> is specified, the codeword must have base field <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := Codeword([0,1,1,1,0]);
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c ); 
+[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
+gap> c2 := Codeword([0,1,1,1,0], GF(3));
+[ 0 1 1 1 0 ]
+gap> VectorCodeword( c2 );
+[ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
+gap> Codeword([c, c2, "0110"]);
+[ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
+gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
+Z(2)^0+x_1^2
+gap> Codeword(p);
+x^2 + 1 
+</pre></td></tr></table>
+
+<p>This command can also be called using the syntax <code class="code">Codeword(obj,C)</code>. In this format, the elements of <var class="Arg">obj</var> are converted to elements of the same ambient vector space as the elements of a code <var class="Arg">C</var>. The command <code class="code">Codeword(c,C)</code> is the same as calling <code class="code">Codeword(c,n,F)</code>, where <var class="Arg">n</var> is the word length of <var class="Arg">C</var> and the <var class="Arg">F</var [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := WholeSpaceCode(7,GF(5));
+a cyclic [7,7,1]0 whole space code over GF(5)
+gap> Codeword(["0220110", [1,1,1]], C);
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
+gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
+[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> Codeword("1000000000",C);
+[ 1 0 0 0 0 0 0 0 0 0 ]
+gap> Codeword("1000000000",10,GF(3));
+[ 1 0 0 0 0 0 0 0 0 0 ]
+</pre></td></tr></table>
+
+<p><a id="X7E7ED91C79BF3EF3" name="X7E7ED91C79BF3EF3"></a></p>
+
+<h5>3.1-2 CodewordNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodewordNr</code>( <var class="Arg">C, list</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodewordNr</code> returns a list of codewords of <var class="Arg">C</var>. <var class="Arg">list</var> may be a list of integers or a single integer. For each integer of <var class="Arg">list</var>, the corresponding codeword of <var class="Arg">C</var> is returned. The correspondence of a number i with a codeword is determined as follows: if a list of elements of <var class="Arg">C</var> is available, the i^th element is taken. Otherwise, it is calculated by multip [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> R := ReedSolomonCode(2,2);
+a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
+gap> AsSSortedList(R);
+[ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
+gap> CodewordNr(R, [1,3]);
+[ [ 0 0 ], [ 2 2 ] ]
+</pre></td></tr></table>
+
+<p><a id="X7F25479781E6E109" name="X7F25479781E6E109"></a></p>
+
+<h5>3.1-3 IsCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCodeword</code> returns `true' if <var class="Arg">obj</var>, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if <var class="Arg">obj</var> is an unbound variable.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCodeword(1);
+false
+gap> IsCodeword(ReedMullerCode(2,3));
+false
+gap> IsCodeword("11111");
+false
+gap> IsCodeword(Codeword("11111"));
+true 
+</pre></td></tr></table>
+
+<p><a id="X8253374284B475B6" name="X8253374284B475B6"></a></p>
+
+<h4>3.2 <span class="Heading">Comparisons of Codewords</span></h4>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>3.2-1 =</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> =</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The equality operator <code class="code">c1 = c2</code> evaluates to `true' if the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var> are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison.</p>
+
+<p>Comparing codewords with objects of other types is not recommended, although it is possible. If <var class="Arg">c2</var> is the codeword, the other object <var class="Arg">c1</var> is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If <var class="Arg">c1</var> is the codeword, then problems may arise if <var class="Arg">c2</var> is a polynomial. In that case, the comparison always yields a ` [...]
+
+<p>The equality operator is also denoted <code class="code">EQ</code>, and <code class="code">EQ(c1,c2)</code> is the same as <code class="code">c1 = c2</code>. There is also an inequality operator, < >, or <code class="code">not EQ</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
+Z(2)^0+x_1^3
+gap> c := Codeword(P, GF(2));
+x^3 + 1
+gap> P = c;        # codeword operation
+true
+gap> c2 := Codeword("1001", GF(2));
+[ 1 0 0 1 ]
+gap> c = c2;
+true 
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c1:=Random(C);
+[ 1 0 0 1 1 0 0 ]
+gap> c2:=Random(C);
+[ 0 1 0 0 1 0 1 ]
+gap> EQ(c1,c2);
+false
+gap> not EQ(c1,c2);
+true
+</pre></td></tr></table>
+
+<p><a id="X7ADE7E95867A14E1" name="X7ADE7E95867A14E1"></a></p>
+
+<h4>3.3 <span class="Heading">Arithmetic Operations for Codewords</span></h4>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>3.3-1 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed.</p>
+
+<p>The operator <code class="code">+</code> evaluates to the sum of the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(3));
+a linear [10,5,1..3]3..5 random linear code over GF(3)
+gap> c:=Random(C);
+[ 1 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"2000000000");
+[ 0 0 2 2 2 2 1 0 2 0 ]
+gap> Codeword(c+"1000000000");
+</pre></td></tr></table>
+
+<p>The last command returns a GAP ERROR since the `codeword' which <strong class="pkg">GUAVA</strong> associates to "1000000000" belongs to GF(2) and not GF(3).</p>
+
+<p><a id="X81B1391281B13912" name="X81B1391281B13912"></a></p>
+
+<h5>3.3-2 -</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> -</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Similar to addition: the operator <code class="code">-</code> evaluates to the difference of the codewords <var class="Arg">c1</var> and <var class="Arg">c2</var>.</p>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>3.3-3 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">v, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator <code class="code">v+C</code> evaluates to the coset code of code <var class="Arg">C</var> after adding a `codeword' <var class="Arg">v</var> to all codewords in <var class="Arg">C</var>. Note that if c in C then mathematically c+C=C but <strong class="pkg">GUAVA</strong> only sees them equal as <em>sets</em>. See <code class="func">CosetCode</code> (<a href="chap6.html#X8799F4BF81B0842B"><b>6.1-17</b></a>).</p>
+
+<p>Note that the command <code class="code">C+v</code> returns the same output as the command <code class="code">v+C</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 0 0 0 0 0 0 0 ]
+gap> c+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> c+C=C;
+true
+gap> IsLinearCode(c+C);
+false
+gap> v:=Codeword("100000000");
+[ 1 0 0 0 0 0 0 0 0 ]
+gap> v+C;
+[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
+gap> C=v+C;
+false
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
+gap> v:=Codeword("0011");
+[ 0 0 1 1 ]
+gap> C+v;
+[ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
+gap> Elements(C+v);
+[ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p>In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (<code class="code">Finite [...]
+
+<p>Some other code-oriented operations with codewords are described in <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>.</p>
+
+<p><a id="X7BBA5DCD7A8BD60D" name="X7BBA5DCD7A8BD60D"></a></p>
+
+<h4>3.4 <span class="Heading">
+Functions that Convert Codewords to Vectors or Polynomials
+</span></h4>
+
+<p><a id="X87C8B0B178496F6A" name="X87C8B0B178496F6A"></a></p>
+
+<h5>3.4-1 VectorCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VectorCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">obj</var> can be a code word or a list of code words. This function returns the corresponding vectors over a finite field.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("011011");; 
+gap> VectorCodeword(a);
+[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]
+</pre></td></tr></table>
+
+<p><a id="X822465E884D0F484" name="X822465E884D0F484"></a></p>
+
+<h5>3.4-2 PolyCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PolyCodeword</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PolyCodeword</code> returns a polynomial or a list of polynomials over a Galois field, converted from <var class="Arg">obj</var>. The object <var class="Arg">obj</var> can be a codeword, or a list of codewords.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("011011");; 
+gap> PolyCodeword(a);
+x_1+x_1^2+x_1^4+x_1^5
+</pre></td></tr></table>
+
+<p><a id="X81D3230A797FE6E3" name="X81D3230A797FE6E3"></a></p>
+
+<h4>3.5 <span class="Heading">
+Functions that Change the Display Form of a Codeword
+</span></h4>
+
+<p><a id="X7E3E174B7954AA6B" name="X7E3E174B7954AA6B"></a></p>
+
+<h5>3.5-1 TreatAsVector</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TreatAsVector</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TreatAsVector</code> adapts the codewords in <var class="Arg">obj</var> to make sure they are printed as vectors. <var class="Arg">obj</var> may be a codeword or a list of codewords. Elements of <var class="Arg">obj</var> that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial.</p>
+
+<p>Note that this <em>only</em> changes the way a codeword is <em>printed</em>. <code class="code">TreatAsVector</code> returns nothing, it is called only for its side effect. The function <code class="code">VectorCodeword</code> converts codewords to vectors (see <code class="func">VectorCodeword</code> (<a href="chap3.html#X87C8B0B178496F6A"><b>3.4-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> B := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> c := CodewordNr(B, 4);
+x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
+gap> TreatAsVector(c);
+gap> c;
+[ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X7A6828148490BD2E" name="X7A6828148490BD2E"></a></p>
+
+<h5>3.5-2 TreatAsPoly</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TreatAsPoly</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TreatAsPoly</code> adapts the codewords in <var class="Arg">obj</var> to make sure they are printed as polynomials. <var class="Arg">obj</var> may be a codeword or a list of codewords. Elements of <var class="Arg">obj</var> that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first ele [...]
+
+<p>Note that this <em>only</em> changes the way a codeword is <em>printed</em>. <code class="code">TreatAsPoly</code> returns nothing, it is called only for its side effect. The function <code class="code">PolyCodeword</code> converts codewords to polynomials (see <code class="func">PolyCodeword</code> (<a href="chap3.html#X822465E884D0F484"><b>3.4-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("00001",GF(2));
+[ 0 0 0 0 1 ]
+gap> TreatAsPoly(a); a;
+x^4
+gap> b := NullWord(6,GF(4));
+[ 0 0 0 0 0 0 ]
+gap> TreatAsPoly(b); b;
+0 
+</pre></td></tr></table>
+
+<p><a id="X805BF7147C68CACD" name="X805BF7147C68CACD"></a></p>
+
+<h4>3.6 <span class="Heading">
+Other Codeword Functions
+</span></h4>
+
+<p><a id="X8000B6597EF0282F" name="X8000B6597EF0282F"></a></p>
+
+<h5>3.6-1 NullWord</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NullWord</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Other uses: <code class="code">NullWord( n )</code> (default F=GF(2)) and <code class="code">NullWord( C )</code>. <code class="code">NullWord</code> returns a codeword of length <var class="Arg">n</var> over the field <var class="Arg">F</var> of only zeros. The integer <var class="Arg">n</var> must be greater then zero. If only a code <var class="Arg">C</var> is specified, <code class="code">NullWord</code> will return a null word with both the word length and the Galois field of <va [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> NullWord(8);
+[ 0 0 0 0 0 0 0 0 ]
+gap> Codeword("0000") = NullWord(4);
+true
+gap> NullWord(5,GF(16));
+[ 0 0 0 0 0 ]
+gap> NullWord(ExtendedTernaryGolayCode());
+[ 0 0 0 0 0 0 0 0 0 0 0 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X7CDA1B547D55E6FB" name="X7CDA1B547D55E6FB"></a></p>
+
+<h5>3.6-2 DistanceCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistanceCodeword</code>( <var class="Arg">c1, c2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistanceCodeword</code> returns the Hamming distance from <var class="Arg">c1</var> to <var class="Arg">c2</var>. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, <code class="code">DistanceCodeword</code> always returns an integer between zero and the word length of the codewords.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
+gap> DistanceCodeword(a, b);
+4
+gap> DistanceCodeword(b, a);
+4
+gap> DistanceCodeword(a, a);
+0 
+</pre></td></tr></table>
+
+<p><a id="X7B689C0284AC4296" name="X7B689C0284AC4296"></a></p>
+
+<h5>3.6-3 Support</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Support</code>( <var class="Arg">c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Support</code> returns a set of integers indicating the positions of the non-zero entries in a codeword <var class="Arg">c</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Codeword("012320023002");; Support(a);
+[ 2, 3, 4, 5, 8, 9, 12 ]
+gap> Support(NullWord(7));
+[  ] 
+</pre></td></tr></table>
+
+<p>The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
+gap> S := Union(List(L, i -> Support(i)));
+[ 1, 2, 3, 5 ]
+gap> Length(S);
+4 
+</pre></td></tr></table>
+
+<p><a id="X7AD61C237D8D3849" name="X7AD61C237D8D3849"></a></p>
+
+<h5>3.6-4 WeightCodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightCodeword</code>( <var class="Arg">c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightCodeword</code> returns the weight of a codeword c, the number of non-zero entries in <var class="Arg">c</var>. As a result, <code class="code">WeightCodeword</code> always returns an integer between zero and the word length of the codeword.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WeightCodeword(Codeword("22222"));
+5
+gap> WeightCodeword(NullWord(3));
+0
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
+3 
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap2.html">Previous Chapter</a>    <a href="chap4.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap4.html b/htm/chap4.html
new file mode 100644
index 0000000..5d7ab81
--- /dev/null
+++ b/htm/chap4.html
@@ -0,0 +1,2103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 4: Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap3.html">Previous Chapter</a>    <a href="chap5.html">Next Chapter</a>   </div>
+
+<p><a id="X85FDDF0B7B7D87FB" name="X85FDDF0B7B7D87FB"></a></p>
+<div class="ChapSects"><a href="chap4.html#X85FDDF0B7B7D87FB">4. <span class="Heading">Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7ECE60E1873B49A6">4.1 <span class="Heading">Comparisons of Codes</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.1-1 =</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X832DA51986A3882C">4.2 <span class="Heading">
+Operations for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F2703417F270341">4.2-1 +</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-2 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8123456781234567">4.2-3 *</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8744BA5E78BCF3F9">4.2-4 InformationWord</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X864091AA7D4AFE86">4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1 in</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79CA175481F8105F">4.3-2 IsSubset</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F71186281DEA83A">4.3-3 IsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B24748A7CE8D4B9">4.3-4 IsLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X850C23D07C9A9B19">4.3-5 IsCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85E3BD26856424F7">4.3-6 IsPerfectCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X789380D28018EC3F">4.3-7 IsMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80166D8D837FEB58">4.3-8 IsSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B2A0CC481D2366F">4.3-9 IsSelfOrthogonalCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8358D43981EBE970">4.3-10 IsDoublyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79ACAEF5865414A0">4.3-11 IsSinglyEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CE150ED7C3DC455">4.3-12 IsEvenCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13 IsSelfComplementaryCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFD3844859B20BF">4.3-14 IsAffineCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X861D32FB81EF0D77">4.3-15 IsAlmostAffineCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X86442DCD7A0B2146">4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X843034687D9C75B0">4.4-1 IsEquivalent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X874DED8E86BC180B">4.4-2 CodeIsomorphism</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87677B0787B4461A">4.4-3 AutomorphismGroup</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X79F3261F86C29F6D">4.4-4 PermutationAutomorphismGroup</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X866EB39483DDAE72">4.5 <span class="Heading">
+Domain Functions for Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X808A4061809A6E67">4.5-1 IsFinite</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X858ADA3B7A684421">4.5-2 Size</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X86F070E0807DC34E">4.5-3 LeftActingDomain</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E6926C6850E7C4E">4.5-4 Dimension</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X856D927378C33548">4.5-5 AsSSortedList</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X823827927D6A8235">4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AFA64D97A1F39A3">4.6-1 Print</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81FB5BE27903EC32">4.6-2 String</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83A5C59278E13248">4.6-3 Display</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CD08C8C780543C4">4.6-4 DisplayBoundsInfo</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D0F48B685A3ECDD">4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X817224657C9829C4">4.7-1 GeneratorMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85D4B26E7FB38D57">4.7-2 CheckMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X78E33C3A843B0261">4.7-3 GeneratorPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7C45AA317BB1195F">4.7-4 CheckPol</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7F4CB9DB7CD97178">4.7-5 RootsOfCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X8170B52D7C154247">4.8 <span class="Heading">
+Parameters of Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A36C3C67B0062E8">4.8-1 WordLength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7E33FD56792DBF3D">4.8-2 Redundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B31613D8538BD29">4.8-3 MinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X813F226F855590EE">4.8-4 MinimumDistanceLeon</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X84EDF67B86B4154C">4.8-5 MinimumWeight</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X823B9A797EE42F6D">4.8-6 DecreaseMinimumDistanceUpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A679B0A7816B030">4.8-7 MinimumDistanceRandom</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A195E317D2AB7CE">4.8-8 CoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X81004B007EC5DF58">4.8-9 SetCoveringRadius</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X806384B4815EFF2E">4.9 <span class="Heading">
+Distributions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7AEE64467FB1E0B9">4.9-1 MinimumWeightWords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8728BCC9842A6E5D">4.9-2 WeightDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X871FD301820717A4">4.9-3 InnerDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X87AD54F87C5EE77E">4.9-4 DistancesDistribution</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8495870687195324">4.9-5 OuterDistribution</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap4.html#X7D9A39BF801948C8">4.10 <span class="Heading">
+Decoding Functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7A42FF7D87FC34AC">4.10-1 Decode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D870C9387C47D9F">4.10-2 Decodeword</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D48DE2A84474C6A">4.10-3 GeneralizedReedSolomonDecoderGao</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7CFF98D483502053">4.10-4 GeneralizedReedSolomonListDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X80E17FA27DCAB676">4.10-5 BitFlipDecoder</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B88DEB37F28404A">4.10-6 NearestNeighborGRSDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X825E35757D778787">4.10-7 NearestNeighborDecodewords</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7D02E0FE8735D3E6">4.10-8 Syndrome</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X7B9E71987E4294A7">4.10-9 SyndromeTable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X8642D0BD789DA9B5">4.10-10 StandardArray</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X83231E717CCB0247">4.10-11 PermutationDecode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap4.html#X85B692177E2A745D">4.10-12 PermutationDecodeNC</a></span>
+</div>
+</div>
+
+<h3>4. <span class="Heading">Codes</span></h3>
+
+<p>A <em>code</em> is a set of codewords (recall a codeword in <strong class="pkg">GUAVA</strong> is simply a sequence of elements of a finite field GF(q), where q is a prime power). We call these the <em>elements</em> of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter <a href="chap3.html#X836BAA9A7EBD08B1"><b>3.</b></a>.</p>
+
+<p>In <strong class="pkg">GUAVA</strong>, codes can be a set specified by its elements (this will be called an <em>unrestricted code</em>), by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code).</p>
+
+<p>Any code can be defined by its elements. If you like, you can give the code a name.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+</pre></td></tr></table>
+
+<p>An (n,M,d) code is a code with word <em>length</em> n, <em>size</em> M and <em>minimum distance</em> d. If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So</p>
+
+
+<pre class="normal">
+
+a (4,3,1..4)2..4 code over GF(2)
+
+</pre>
+
+<p>means a binary unrestricted code of length 4, with 3 elements and the minimum distance is greater than or equal to 1 and less than or equal to 4 and the covering radius is greater than or equal to 2 and less than or equal to 4.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
+a (4,3,1..4)2..4 example code over GF(2) 
+gap> MinimumDistance(C);
+2
+gap> C;
+a (4,3,2)2..4 example code over GF(2) 
+</pre></td></tr></table>
+
+<p>If the set of elements is a linear subspace of GF(q)^n, the code is called <em>linear</em>. If a code is linear, it can be defined by its <em>generator matrix</em> or <em>parity check matrix</em>. By definition, the rows of the generator matrix is a basis for the code (as a vector space over GF(q)). By definition, the rows of the parity check matrix is a basis for the dual space of the code,</p>
+
+<p class="pcenter">
+C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
+a linear [3,2,1..2]1 demo code over GF(3) 
+</pre></td></tr></table>
+
+<p>So a linear [n, k, d]r code is a code with word <em>length</em> n, <em>dimension</em> k, <em>minimum distance</em> d and <em>covering radius</em> r.</p>
+
+<p>If the code is linear and all cyclic shifts of its codewords (regarded as n-tuples) are again codewords, the code is called <em>cyclic</em>. All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial x^n -1, where n is the word length of the code. Such a polynomial is called a <em>generator polynomial</em> The generator polynomial must divide x^n-1 and its quotient is called a <em>check polynomial</em>. Multiplying a codeword in a cyclic code by the check  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+</pre></td></tr></table>
+
+<p>It is possible that <strong class="pkg">GUAVA</strong> does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function <code class="code">ElementsCode</code> (see <code class="func">ElementsCode</code> (<a href="chap5.html#X81AACBDD86E89D7D"><b>5.1-1</b></a>)). By calling the function <code class="code">IsLinearCode</code> (see <code class="func">IsLinearCode</code> (<a href="chap4.html#X7B [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
+gap> C := ElementsCode( L, GF(2) );
+a (3,4,1..3)1 user defined unrestricted code over GF(2)
+# so far, GUAVA does not know what kind of code this is
+gap> IsLinearCode( C );
+true                      # it is linear
+gap> C;
+a linear [3,2,1]1 user defined unrestricted code over GF(2) 
+</pre></td></tr></table>
+
+<p>Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic.</p>
+
+<p>Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function <code class="code">Display</code> gives a more detailed description, showing the construction history of the code.</p>
+
+<p><strong class="pkg">GUAVA</strong> doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions <code class="code">Decode</code> or <code class="code">Decodeword</code>. For more information about encoding and decoding, see sections <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a> and <a href="chap4.html#X7A42FF7D87FC34 [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> w := [ 1, 0, 1, 1 ] * R;
+[ 1 0 0 1 1 0 0 1 ]
+gap> Decode( R, w );
+[ 1 0 1 1 ]
+gap> Decode( R, w + "10000000" ); # One error at the first position
+[ 1 0 1 1 ]                       # Corrected by Guava 
+</pre></td></tr></table>
+
+<p>Sections <a href="chap4.html#X7ECE60E1873B49A6"><b>4.1</b></a> and <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a> describe the operations that are available for codes. Section <a href="chap4.html#X864091AA7D4AFE86"><b>4.3</b></a> describe the functions that tests whether an object is a code and what kind of code it is (see <code class="code">IsCode</code>, <code class="func">IsLinearCode</code> (<a href="chap4.html#X7B24748A7CE8D4B9"><b>4.3-4</b></a>) and <code class="code">IsC [...]
+
+<p><a id="X7ECE60E1873B49A6" name="X7ECE60E1873B49A6"></a></p>
+
+<h4>4.1 <span class="Heading">Comparisons of Codes</span></h4>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.1-1 =</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> =</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The equality operator <code class="code">C1 = C2</code> evaluates to `true' if the codes <var class="Arg">C1</var> and <var class="Arg">C2</var> are equal, and to `false' otherwise.</p>
+
+<p>The equality operator is also denoted <code class="code">EQ</code>, and <code class="code">Eq(C1,C2)</code> is the same as <code class="code">C1 = C2</code>. There is also an inequality operator, < >, or <code class="code">not EQ</code>.</p>
+
+<p>Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
+gap> C1 := ElementsCode( M, GF(2) );
+a (2,4,1..2)0 user defined unrestricted code over GF(2)
+gap> M = C1;
+false
+gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
+a linear [2,2,1]0 code defined by generator matrix over GF(2)
+gap> C1 = C2;
+true
+gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
+true
+gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
+false
+</pre></td></tr></table>
+
+<p>Another way of comparing codes is <code class="code">IsEquivalent</code>, which checks if two codes are equivalent (see <code class="func">IsEquivalent</code> (<a href="chap4.html#X843034687D9C75B0"><b>4.4-1</b></a>)). By the way, this called <code class="code">CodeIsomorphism</code>. For the current version of <strong class="pkg">GUAVA</strong>, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux comp [...]
+
+<p><a id="X832DA51986A3882C" name="X832DA51986A3882C"></a></p>
+
+<h4>4.2 <span class="Heading">
+Operations for Codes
+</span></h4>
+
+<p><a id="X7F2703417F270341" name="X7F2703417F270341"></a></p>
+
+<h5>4.2-1 +</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> +</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator `+' evaluates to the direct sum of the codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. See <code class="func">DirectSumCode</code> (<a href="chap6.html#X79E00D3A8367D65A"><b>6.2-1</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1:=RandomLinearCode(10,5);
+a  [10,5,?] randomly generated code over GF(2)
+gap> C2:=RandomLinearCode(9,4);
+a  [9,4,?] randomly generated code over GF(2)
+gap> C1+C2;
+a linear [10,9,1]0..10 unknown linear code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.2-2 *</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> *</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator `*' evaluates to the direct product of the codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. See <code class="func">DirectProductCode</code> (<a href="chap6.html#X7BFBBA5784C293C1"><b>6.2-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> C1*C2;
+a linear [16,4,1]4..12 direct product code
+</pre></td></tr></table>
+
+<p><a id="X8123456781234567" name="X8123456781234567"></a></p>
+
+<h5>4.2-3 *</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> *</code>( <var class="Arg">m, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The operator <code class="code">m*C</code> evaluates to the element of <var class="Arg">C</var> belonging to information word ('message') <var class="Arg">m</var>. Here <var class="Arg">m</var> may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in <strong class="pkg">GUAVA</strong>. <var class="Arg">C</var> must be linear, because in <strong class="pkg">GUAVA</strong>, encoding by multiplication is only defined for linear codes. If <var  [...]
+
+<p>To invert this, use the function <code class="code">InformationWord</code> (see <code class="func">InformationWord</code> (<a href="chap4.html#X8744BA5E78BCF3F9"><b>4.2-4</b></a>), which simply calls the function <code class="code">Decode</code>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
+a linear [4,2,1]1 code defined by generator matrix over GF(2)
+gap> m:=Codeword("11");
+[ 1 1 ]
+gap> m*C;
+[ 1 1 0 0 ]
+</pre></td></tr></table>
+
+<p><a id="X8744BA5E78BCF3F9" name="X8744BA5E78BCF3F9"></a></p>
+
+<h5>4.2-4 InformationWord</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> InformationWord</code>( <var class="Arg">C, c</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">C</var> is a linear code and <var class="Arg">c</var> is a codeword in it. The command <code class="code">InformationWord</code> returns the message word (or 'information digits') m satisfying <code class="code">c=m*C</code>. This command simply calls <code class="code">Decode</code>, provided <code class="code">c in C</code> is true. Otherwise, it returns an error.</p>
+
+<p>To invert this, use the encoding function <code class="code">*</code> (see <code class="func">*</code> (<a href="chap4.html#X8123456781234567"><b>4.2-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 1 1 1 ]
+gap> InformationWord(C,c);
+[ 0 1 1 1 ]
+gap> c:=Codeword("1111100");
+[ 1 1 1 1 1 0 0 ]
+gap> InformationWord(C,c);
+"ERROR: codeword must belong to code"
+gap> C:=NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
+gap> InformationWord(C,c);
+"ERROR: code must be linear"
+</pre></td></tr></table>
+
+<p><a id="X864091AA7D4AFE86" name="X864091AA7D4AFE86"></a></p>
+
+<h4>4.3 <span class="Heading">
+Boolean Functions for Codes
+</span></h4>
+
+<p><a id="X87BDB89B7AAFE8AD" name="X87BDB89B7AAFE8AD"></a></p>
+
+<h5>4.3-1 in</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> in</code>( <var class="Arg">c, C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">c in C</code> evaluates to `true' if <var class="Arg">C</var> contains the codeword or list of codewords specified by <var class="Arg">c</var>. Of course, <var class="Arg">c</var> and <var class="Arg">C</var> must have the same word lengths and base fields.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ] ]
+gap> eC[2] in C;
+true
+gap> [ 0 ] in C;
+false 
+</pre></td></tr></table>
+
+<p><a id="X79CA175481F8105F" name="X79CA175481F8105F"></a></p>
+
+<h5>4.3-2 IsSubset</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSubset</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">IsSubset(C1,C2)</code> returns `true' if <var class="Arg">C2</var> is a subcode of <var class="Arg">C1</var>, i.e. if <var class="Arg">C1</var> contains all the elements of <var class="Arg">C2</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
+true
+gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
+false
+gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
+true
+</pre></td></tr></table>
+
+<p><a id="X7F71186281DEA83A" name="X7F71186281DEA83A"></a></p>
+
+<h5>4.3-3 IsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCode</code> returns `true' if <var class="Arg">obj</var>, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if <var class="Arg">obj</var> is an unbound variable.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCode( 1 );
+false
+gap> IsCode( ReedMullerCode( 2,3 ) );
+true
+</pre></td></tr></table>
+
+<p><a id="X7B24748A7CE8D4B9" name="X7B24748A7CE8D4B9"></a></p>
+
+<h5>4.3-4 IsLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsLinearCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsLinearCode</code> checks if object <var class="Arg">obj</var> (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis G of the elements of <var class="Arg">obj</var> exists that generates the elements of <var class="Arg">obj</var>. If so, G is recorded as a generator matrix of <var class="Arg">obj</var> and the function returns `true'. If  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> IsLinearCode( C );
+true
+gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
+false
+gap> IsLinearCode( 1 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X850C23D07C9A9B19" name="X850C23D07C9A9B19"></a></p>
+
+<h5>4.3-5 IsCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCyclicCode</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCyclicCode</code> checks if the object <var class="Arg">obj</var> is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial g exists that generates the elements of <var class="Arg">obj</var>. If so, g is recorded as a generator polynomial of <var class="Arg">obj</var> and the function returns `true'. If not, the function returns `false'.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
+a (3,2,1..3)1 user defined unrestricted code over GF(2)
+gap> # GUAVA does not know the code is cyclic
+gap> IsCyclicCode( C );      # this command tells GUAVA to find out
+true
+gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
+false
+gap> IsCyclicCode( 1 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X85E3BD26856424F7" name="X85E3BD26856424F7"></a></p>
+
+<h5>4.3-6 IsPerfectCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsPerfectCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsPerfectCode(C)</code> returns `true' if <var class="Arg">C</var> is a perfect code. If Csubset GF(q)^n then, by definition, this means that for some positive integer t, the space GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered at the codewords in <var class="Arg">C</var>. For a code with odd minimum distance d = 2t+1, this is the case when every word of the vector space of <var class="Arg">C</var> is at distance at most t from exactly  [...]
+
+<p>In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in <a href="chapBib.html#biBHP03">[HP03]</a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> IsPerfectCode( H );
+true
+gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
+true
+gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
+false
+gap> IsPerfectCode( BinaryGolayCode() );
+true 
+</pre></td></tr></table>
+
+<p><a id="X789380D28018EC3F" name="X789380D28018EC3F"></a></p>
+
+<h5>4.3-7 IsMDSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsMDSCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsMDSCode(C)</code> returns true if <var class="Arg">C</var> is a maximum distance separable (MDS) code. A linear [n, k, d]-code of length n, dimension k and minimum distance d is an MDS code if k=n-d+1, in other words if <var class="Arg">C</var> meets the Singleton bound (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>)). An unrestricted (n, M, d) code is called <em>MDS</em> if k=n-d+1, with k equal to the  [...]
+
+<p>Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only <em>binary</em> MDS codes) and the Reed-Solomon codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 6, 3 );
+a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
+gap> IsMDSCode( C1 );
+true    # 6-3+1 = 4
+gap> IsMDSCode( QRCode( 23, GF(2) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X80166D8D837FEB58" name="X80166D8D837FEB58"></a></p>
+
+<h5>4.3-8 IsSelfDualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfDualCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfDualCode(C)</code> returns `true' if <var class="Arg">C</var> is self-dual, i.e. when <var class="Arg">C</var> is equal to its dual code (see also <code class="func">DualCode</code> (<a href="chap6.html#X799B12F085ACB609"><b>6.1-14</b></a>)). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see <code class="func">IsSelfOrthogonalCode</code> (<a href="chap4.html#X7B2 [...]
+
+<p>If <var class="Arg">C</var> is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension k is equal to the redundancy r.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
+true
+gap> C := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> DualCode( C ) = C;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7B2A0CC481D2366F" name="X7B2A0CC481D2366F"></a></p>
+
+<h5>4.3-9 IsSelfOrthogonalCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfOrthogonalCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfOrthogonalCode(C)</code> returns `true' if <var class="Arg">C</var> is self-orthogonal. A code is <em>self-orthogonal</em> if every element of <var class="Arg">C</var> is orthogonal to all elements of <var class="Arg">C</var>, including itself. (In the linear case, this simply means that the generator matrix of <var class="Arg">C</var> multiplied with its transpose yields a null matrix.)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode(1,4);
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> IsSelfOrthogonalCode(R);
+true
+gap> IsSelfDualCode(R);
+false 
+</pre></td></tr></table>
+
+<p><a id="X8358D43981EBE970" name="X8358D43981EBE970"></a></p>
+
+<h5>4.3-10 IsDoublyEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsDoublyEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsDoublyEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary linear code which has codewords of weight divisible by 4 only. According to <a href="chapBib.html#biBHP03">[HP03]</a>, a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+false
+gap> C:=ExtendedCode(C);  
+a linear [24,12,8]4 extended code
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
+gap> IsDoublyEvenCode(C);  
+true
+</pre></td></tr></table>
+
+<p><a id="X79ACAEF5865414A0" name="X79ACAEF5865414A0"></a></p>
+
+<h5>4.3-11 IsSinglyEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSinglyEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSinglyEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary self-orthogonal linear code which is not doubly-even. In other words, <var class="Arg">C</var> is a binary self-orthogonal code which has codewords of even weight.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:=Indeterminate(GF(2));                     
+x_1
+gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
+a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
+gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
+true
+gap> IsDoublyEvenCode(C);
+false
+gap> IsSinglyEvenCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X7CE150ED7C3DC455" name="X7CE150ED7C3DC455"></a></p>
+
+<h5>4.3-12 IsEvenCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsEvenCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsEvenCode(C)</code> returns `true' if <var class="Arg">C</var> is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+false
+gap> C:=ExtendedCode(C);
+a linear [24,12,8]4 extended code
+gap> IsSelfOrthogonalCode(C);
+true
+gap> IsEvenCode(C);
+true
+gap> C:=ExtendedCode(QRCode(17,GF(2)));
+a linear [18,9,6]3..5 extended code
+gap> IsSelfOrthogonalCode(C);
+false
+gap> IsEvenCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X7B6DB8CC84FCAC1C" name="X7B6DB8CC84FCAC1C"></a></p>
+
+<h5>4.3-13 IsSelfComplementaryCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsSelfComplementaryCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsSelfComplementaryCode</code> returns `true' if</p>
+
+<p class="pcenter">
+v \in C \Rightarrow 1 - v \in C,
+</p>
+
+<p>where 1 is the all-one word of length n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsSelfComplementaryCode( EvenWeightSubcode(
+> HammingCode( 3, GF(2) ) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7AFD3844859B20BF" name="X7AFD3844859B20BF"></a></p>
+
+<h5>4.3-14 IsAffineCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsAffineCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsAffineCode</code> returns `true' if <var class="Arg">C</var> is an affine code. A code is called <em>affine</em> if it is an affine space. In other words, a code is affine if it is a coset of a linear code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsAffineCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
+> [ 1, 0, 0, 0, 0, 0, 0 ] ) );
+true
+gap> IsAffineCode( NordstromRobinsonCode() );
+false 
+</pre></td></tr></table>
+
+<p><a id="X861D32FB81EF0D77" name="X861D32FB81EF0D77"></a></p>
+
+<h5>4.3-15 IsAlmostAffineCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsAlmostAffineCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsAlmostAffineCode</code> returns `true' if <var class="Arg">C</var> is an almost affine code. A code is called <em>almost affine</em> if the size of any punctured code of <var class="Arg">C</var> is q^r for some r, where q is the size of the alphabet of the code. Every affine code is also almost affine, and every code over GF(2) and GF(3) that is almost affine is also affine.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
+>                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
+>                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
+>                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
+>                             GF(4) );;
+gap> IsAlmostAffineCode( code );
+true
+gap> IsAlmostAffineCode( NordstromRobinsonCode() );
+false 
+</pre></td></tr></table>
+
+<p><a id="X86442DCD7A0B2146" name="X86442DCD7A0B2146"></a></p>
+
+<h4>4.4 <span class="Heading">
+Equivalence and Isomorphism of Codes
+</span></h4>
+
+<p><a id="X843034687D9C75B0" name="X843034687D9C75B0"></a></p>
+
+<h5>4.4-1 IsEquivalent</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsEquivalent</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>We say that <var class="Arg">C1</var> is <em>permutation equivalent</em> to <var class="Arg">C2</var> if <var class="Arg">C1</var> can be obtained from <var class="Arg">C2</var> by carrying out column permutations. <code class="code">IsEquivalent</code> returns true if <var class="Arg">C1</var> and <var class="Arg">C2</var> are equivalent codes. At this time, <code class="code">IsEquivalent</code> only handles <em>binary</em> codes. (The external unix/linux program <strong class="butt [...]
+
+<p>Note that the algorithm is <em>very slow</em> for non-linear codes.</p>
+
+<p>More generally, we say that <var class="Arg">C1</var> is <em>equivalent</em> to <var class="Arg">C2</var> if <var class="Arg">C1</var> can be obtained from <var class="Arg">C2</var> by carrying out column permutations and a permutation of the alphabet.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> H = HammingCode(3, GF(2));
+false
+gap> IsEquivalent(H, HammingCode(3, GF(2)));
+true                        # H is equivalent to a Hamming code
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+</pre></td></tr></table>
+
+<p><a id="X874DED8E86BC180B" name="X874DED8E86BC180B"></a></p>
+
+<h5>4.4-2 CodeIsomorphism</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeIsomorphism</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If the two codes <var class="Arg">C1</var> and <var class="Arg">C2</var> are permutation equivalent codes (see <code class="func">IsEquivalent</code> (<a href="chap4.html#X843034687D9C75B0"><b>4.4-1</b></a>)), <code class="code">CodeIsomorphism</code> returns the permutation that transforms <var class="Arg">C1</var> into <var class="Arg">C2</var>. If the codes are not equivalent, it returns `false'.</p>
+
+<p>At this time, <code class="code">IsEquivalent</code> only computes isomorphisms between <em>binary</em> codes on a linux/unix computer (since it calls Leon's C program <strong class="button">desauto</strong>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
+Z(2)^0+x_1+x_1^3
+gap> H := GeneratorPolCode( pol, 7, GF(2));          
+a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
+gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
+(3,4)(5,6,7) 
+gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
+true 
+</pre></td></tr></table>
+
+<p><a id="X87677B0787B4461A" name="X87677B0787B4461A"></a></p>
+
+<h5>4.4-3 AutomorphismGroup</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AutomorphismGroup</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AutomorphismGroup</code> returns the automorphism group of a linear code <var class="Arg">C</var>. For a binary code, the automorphism group is the largest permutation group of degree n such that each permutation applied to the columns of <var class="Arg">C</var> again yields <var class="Arg">C</var>. <strong class="pkg">GUAVA</strong> calls the external program <strong class="button">desauto</strong> written by J. S. Leon, if it exists, to compute the automorphism  [...]
+
+<p>See Leon <a href="chapBib.html#biBLeon82">[Leo82]</a> for a more precise description of the method, and the <code class="file">guava/src/leon/doc</code> subdirectory for for details about Leon's C programs.</p>
+
+<p>The function <code class="code">PermutedCode</code> permutes the columns of a code (see <code class="func">PermutedCode</code> (<a href="chap6.html#X79577EB27BE8524B"><b>6.1-4</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode(7,GF(2));
+a cyclic [7,1,7]3 repetition code over GF(2)
+gap> AutomorphismGroup(R);
+Sym( [ 1 .. 7 ] )
+                        # every permutation keeps R identical
+gap> C := CordaroWagnerCode(7);
+a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> AutomorphismGroup(C);
+Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
+gap> C2 :=  PermutedCode(C, (1,6)(2,7));
+a linear [7,2,4]3 permuted code
+gap> AsSSortedList(C2);
+[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
+gap> C2 = C;
+true 
+</pre></td></tr></table>
+
+<p><a id="X79F3261F86C29F6D" name="X79F3261F86C29F6D"></a></p>
+
+<h5>4.4-4 PermutationAutomorphismGroup</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationAutomorphismGroup</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutationAutomorphismGroup</code> returns the permutation automorphism group of a linear code <var class="Arg">C</var>. This is the largest permutation group of degree n such that each permutation applied to the columns of <var class="Arg">C</var> again yields <var class="Arg">C</var>. It is written in GAP, so is much slower than <code class="code">AutomorphismGroup</code>.</p>
+
+<p>When <var class="Arg">C</var> is binary <code class="code">PermutationAutomorphismGroup</code> does <em>not</em> call <code class="code">AutomorphismGroup</code>, even though they agree mathematically in that case. This way <code class="code">PermutationAutomorphismGroup</code> can be called on any platform which runs GAP.</p>
+
+<p>The older name for this command, <code class="code">PermutationGroup</code>, will become obsolete in the next version of GAP.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode(3,GF(3));
+a cyclic [3,1,3]2 repetition code over GF(3)
+gap> G:=PermutationAutomorphismGroup(R);
+Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
+gap> G=SymmetricGroup(3);
+true
+</pre></td></tr></table>
+
+<p><a id="X866EB39483DDAE72" name="X866EB39483DDAE72"></a></p>
+
+<h4>4.5 <span class="Heading">
+Domain Functions for Codes
+</span></h4>
+
+<p>These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here.</p>
+
+<p><a id="X808A4061809A6E67" name="X808A4061809A6E67"></a></p>
+
+<h5>4.5-1 IsFinite</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsFinite</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsFinite</code> is an implementation of the GAP domain function <code class="code">IsFinite</code>. It returns true for a code <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X858ADA3B7A684421" name="X858ADA3B7A684421"></a></p>
+
+<h5>4.5-2 Size</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Size</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Size</code> returns the size of <var class="Arg">C</var>, the number of elements of the code. If the code is linear, the size of the code is equal to q^k, where q is the size of the base field of <var class="Arg">C</var> and k is the dimension.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Size( RepetitionCode( 1000, GF(11) ) );
+11
+gap> Size( NordstromRobinsonCode() );
+256 
+</pre></td></tr></table>
+
+<p><a id="X86F070E0807DC34E" name="X86F070E0807DC34E"></a></p>
+
+<h5>4.5-3 LeftActingDomain</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LeftActingDomain</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LeftActingDomain</code> returns the base field of a code <var class="Arg">C</var>. Each element of <var class="Arg">C</var> consists of elements of this base field. If the base field is F, and the word length of the code is n, then the codewords are elements of F^n. If <var class="Arg">C</var> is a cyclic code, its elements are interpreted as polynomials with coefficients over F.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
+a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
+gap> LeftActingDomain( C1 );
+GF(2^2)
+gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
+GF(3^2) 
+</pre></td></tr></table>
+
+<p><a id="X7E6926C6850E7C4E" name="X7E6926C6850E7C4E"></a></p>
+
+<h5>4.5-4 Dimension</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Dimension</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Dimension</code> returns the parameter k of <var class="Arg">C</var>, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; <code class="code">Dimension</code> then returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Dimension( NullCode( 5, GF(5) ) );
+0
+gap> C := BCHCode( 15, 4, GF(4) );
+a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
+gap> Dimension( C );
+9
+gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
+true 
+</pre></td></tr></table>
+
+<p><a id="X856D927378C33548" name="X856D927378C33548"></a></p>
+
+<h5>4.5-5 AsSSortedList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AsSSortedList</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AsSSortedList</code> (as strictly sorted list) returns an immutable, duplicate free list of the elements of <var class="Arg">C</var>. For a finite field GF(q) generated by powers of Z(q), the ordering on</p>
+
+<p class="pcenter">
+GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} 
+</p>
+
+<p>is that determined by the exponents i. These elements are of the type codeword (see <code class="func">Codeword</code> (<a href="chap3.html#X7B9E353D852851AA"><b>3.1-1</b></a>)). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use <code class="code">CodewordNr</code> (see <code class="func">CodewordNr</code> (<a href="chap3.html#X7E7ED91C79BF3EF3"><b>3.1-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+gap> CodewordNr( C, [ 1, 2 ] );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p><a id="X823827927D6A8235" name="X823827927D6A8235"></a></p>
+
+<h4>4.6 <span class="Heading">
+Printing and Displaying Codes
+</span></h4>
+
+<p><a id="X7AFA64D97A1F39A3" name="X7AFA64D97A1F39A3"></a></p>
+
+<h5>4.6-1 Print</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Print</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Print</code> prints information about <var class="Arg">C</var>. This is the same as typing the identifier <var class="Arg">C</var> at the GAP-prompt.</p>
+
+<p>If the argument is an unrestricted code, information in the form</p>
+
+
+<pre class="normal">
+
+a (n,M,d)r ... code over GF(q)
+
+</pre>
+
+<p>is printed, where <var class="Arg">n</var> is the word length, <var class="Arg">M</var> the number of elements of the code, <var class="Arg">d</var> the minimum distance and <var class="Arg">r</var> the covering radius.</p>
+
+<p>If the argument is a linear code, information in the form</p>
+
+
+<pre class="normal">
+
+a linear [n,k,d]r ... code over GF(q)
+
+</pre>
+
+<p>is printed, where <var class="Arg">n</var> is the word length, <var class="Arg">k</var> the dimension of the code, <var class="Arg">d</var> the minimum distance and <var class="Arg">r</var> the covering radius.</p>
+
+<p>Except for codes produced by <code class="code">RandomLinearCode</code>, if <var class="Arg">d</var> is not yet known, it is displayed in the form</p>
+
+
+<pre class="normal">
+
+lowerbound..upperbound
+
+</pre>
+
+<p>and if <var class="Arg">r</var> is not yet known, it is displayed in the same way. For certain ranges of n, the values of <var class="Arg">lowerbound</var> and <var class="Arg">upperbound</var> are obtained from tables.</p>
+
+<p>The function <code class="code">Display</code> gives more information. See <code class="func">Display</code> (<a href="chap4.html#X83A5C59278E13248"><b>4.6-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
+a linear [8,4,4]2 extended code
+gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
+This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 
+</pre></td></tr></table>
+
+<p><a id="X81FB5BE27903EC32" name="X81FB5BE27903EC32"></a></p>
+
+<h5>4.6-2 String</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> String</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">String</code> returns information about <var class="Arg">C</var> in a string. This function is used by <code class="code">Print</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
+x_1^2+Z(3)^0
+gap> Factors(pol);
+[ x_1^2+Z(3)^0 ]
+gap> H := GeneratorPolCode( pol, 8, GF(3));
+a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
+gap> String(H);
+"a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"
+</pre></td></tr></table>
+
+<p><a id="X83A5C59278E13248" name="X83A5C59278E13248"></a></p>
+
+<h5>4.6-3 Display</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Display</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Display</code> prints the method of construction of code <var class="Arg">C</var>. With this history, in most cases an equal or equivalent code can be reconstructed. If <var class="Arg">C</var> is an unmanipulated code, the result is equal to output of the function <code class="code">Print</code> (see <code class="func">Print</code> (<a href="chap4.html#X7AFA64D97A1F39A3"><b>4.6-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Display( RepetitionCode( 6, GF(3) ) );
+a cyclic [6,1,6]4 repetition code over GF(3)
+gap> C1 := ExtendedCode( HammingCode(2) );;
+gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
+gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
+a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
+a linear [11,8,1]1..2 U U+V construction code of
+U: a linear [4,1,4]2 extended code of
+   a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+V: a linear [7,7,1]0 punctured code of
+   a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7CD08C8C780543C4" name="X7CD08C8C780543C4"></a></p>
+
+<h5>4.6-4 DisplayBoundsInfo</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DisplayBoundsInfo</code>( <var class="Arg">bds</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DisplayBoundsInfo</code> prints the method of construction of the code C indicated in <code class="code">bds:= BoundsMinimumDistance( n, k, GF(q) )</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
+gap> DisplayBoundsInfo(bounds);
+an optimal linear [20,17,d] code over GF(4) has d=3
+--------------------------------------------------------------------------------------------------
+Lb(20,17)=3, by shortening of:
+Lb(21,18)=3, by applying contruction B to a [81,77,3] code
+Lb(81,77)=3, by shortening of:
+Lb(85,81)=3, reference: Ham
+--------------------------------------------------------------------------------------------------
+Ub(20,17)=3, by considering shortening to:
+Ub(7,4)=3, by considering puncturing to:
+Ub(6,4)=2, by construction B applied to:
+Ub(2,1)=2, repetition code
+--------------------------------------------------------------------------------------------------
+Reference Ham:
+%T this reference is unknown, for more info
+%T contact A.E. Brouwer (aeb at cwi.nl)
+</pre></td></tr></table>
+
+<p><a id="X7D0F48B685A3ECDD" name="X7D0F48B685A3ECDD"></a></p>
+
+<h4>4.7 <span class="Heading">
+Generating (Check) Matrices and Polynomials
+</span></h4>
+
+<p><a id="X817224657C9829C4" name="X817224657C9829C4"></a></p>
+
+<h5>4.7-1 GeneratorMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorMat</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorMat</code> returns a generator matrix of <var class="Arg">C</var>. The code consists of all linear combinations of the rows of this matrix.</p>
+
+<p>If until now no generator matrix of <var class="Arg">C</var> was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GeneratorMat( HammingCode( 3, GF(2) ) );
+[ [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7], 
+  [ an immutable GF2 vector of length 7] ]
+gap> Display(last);
+ 1 1 1 . . . .
+ 1 . . 1 1 . .
+ . 1 . 1 . 1 .
+ 1 1 . 1 . . 1
+gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
+gap> GeneratorMat( NullCode( 14, GF(4) ) );
+[  ]
+</pre></td></tr></table>
+
+<p><a id="X85D4B26E7FB38D57" name="X85D4B26E7FB38D57"></a></p>
+
+<h5>4.7-2 CheckMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMat</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMat</code> returns a parity check matrix of <var class="Arg">C</var>. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CheckMat( HammingCode(3, GF(2) ) );
+[ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
+gap> Display(last);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> CheckMat( RepetitionCode( 5, GF(25) ) );
+[ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
+  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
+gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
+[  ] 
+</pre></td></tr></table>
+
+<p><a id="X78E33C3A843B0261" name="X78E33C3A843B0261"></a></p>
+
+<h5>4.7-3 GeneratorPol</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorPol</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorPol</code> returns the generator polynomial of <var class="Arg">C</var>. The code consists of all multiples of the generator polynomial modulo x^n-1, where n is the word length of <var class="Arg">C</var>. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> is not a cyclic code, the function returns `false'.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1
+gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
+Z(2)^0
+gap> GeneratorPol( NullCode( 7, GF(3) ) );
+-Z(3)^0+x_1^7
+</pre></td></tr></table>
+
+<p><a id="X7C45AA317BB1195F" name="X7C45AA317BB1195F"></a></p>
+
+<h5>4.7-4 CheckPol</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckPol</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckPol</code> returns the check polynomial of <var class="Arg">C</var>. The code consists of all polynomials f with</p>
+
+<p class="pcenter">
+f\cdot h \equiv 0 \ ({\rm mod}\  x^n-1),
+</p>
+
+<p>where h is the check polynomial, and n is the word length of <var class="Arg">C</var>. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of <var class="Arg">C</var> (if possible), whichever is available.</p>
+
+<p>If <var class="Arg">C</var> if not a cyclic code, the function returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
+Z(2)^0+x_1+x_1^2
+gap> CheckPol(WholeSpaceCode(4, GF(2)));
+Z(2)^0+x_1^4
+gap> CheckPol(NullCode(7,GF(3)));
+Z(3)^0
+</pre></td></tr></table>
+
+<p><a id="X7F4CB9DB7CD97178" name="X7F4CB9DB7CD97178"></a></p>
+
+<h5>4.7-5 RootsOfCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RootsOfCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RootsOfCode</code> returns a list of all zeros of the generator polynomial of a cyclic code <var class="Arg">C</var>. These are finite field elements in the splitting field of the generator polynomial, GF(q^m), m is the multiplicative order of the size of the base field of the code, modulo the word length.</p>
+
+<p>The reverse process, constructing a code from a set of roots, can be carried out by the function <code class="code">RootsCode</code> (see <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 16, 5 );
+a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
+gap> RootsOfCode( C1 );
+[ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
+gap> C2 := RootsCode( 16, last );
+a cyclic [16,12,5]3..4 code defined by roots over GF(17)
+gap> C1 = C2;
+true 
+</pre></td></tr></table>
+
+<p><a id="X8170B52D7C154247" name="X8170B52D7C154247"></a></p>
+
+<h4>4.8 <span class="Heading">
+Parameters of Codes
+</span></h4>
+
+<p><a id="X7A36C3C67B0062E8" name="X7A36C3C67B0062E8"></a></p>
+
+<h5>4.8-1 WordLength</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WordLength</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WordLength</code> returns the parameter n of <var class="Arg">C</var>, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree n-1, as calculations are carried out modulo x^n-1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WordLength( NordstromRobinsonCode() );
+16
+gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
+6
+gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
+14 
+</pre></td></tr></table>
+
+<p><a id="X7E33FD56792DBF3D" name="X7E33FD56792DBF3D"></a></p>
+
+<h5>4.8-2 Redundancy</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Redundancy</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Redundancy</code> returns the redundancy r of <var class="Arg">C</var>, which is equal to the number of check symbols in each element. If <var class="Arg">C</var> is not a linear code the redundancy is not defined and <code class="code">Redundancy</code> returns an error.</p>
+
+<p>If a linear code <var class="Arg">C</var> has dimension k and word length n, it has redundancy r=n-k.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> Redundancy(C);
+5
+gap> Redundancy( DualCode(C) );
+6 
+</pre></td></tr></table>
+
+<p><a id="X7B31613D8538BD29" name="X7B31613D8538BD29"></a></p>
+
+<h5>4.8-3 MinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistance</code> returns the minimum distance of <var class="Arg">C</var>, the largest integer d with the property that every element of <var class="Arg">C</var> has at least a Hamming distance d (see <code class="func">DistanceCodeword</code> (<a href="chap3.html#X7CDA1B547D55E6FB"><b>3.6-2</b></a>)) to any other element of <var class="Arg">C</var>. For linear codes, the minimum distance is equal to the minimum weight. This means that d is also the smallest p [...]
+
+<p>For codes with only one element, the minimum distance is defined to be equal to the word length.</p>
+
+<p>For linear codes <var class="Arg">C</var>, the algorithm used is the following: After replacing <var class="Arg">C</var> by a permutation equivalent <var class="Arg">C'</var>, one may assume the generator matrix has the following form G=(I_k , | , A), for some kx (n-k) matrix A. If A=0 then return d(C)=1. Next, find the minimum distance of the code spanned by the rows of A. Call this distance d(A). Note that d(A) is equal to the the Hamming distance d(v,0) where v is some proper linea [...]
+
+<p>This command may also be called using the syntax <code class="code">MinimumDistance(C, w)</code>. In this form, <code class="code">MinimumDistance</code> returns the minimum distance of a codeword <var class="Arg">w</var> to the code <var class="Arg">C</var>, also called the <em>distance from <var class="Arg">w</var> to</em> <var class="Arg">C</var>. This is the smallest value d for which there is an element c of the code <var class="Arg">C</var> which is at distance d from <var class [...]
+
+<p>Note that <var class="Arg">w</var> must be an element of the same vector space as the elements of <var class="Arg">C</var>. <var class="Arg">w</var> does not necessarily belong to the code (if it does, the minimum distance is zero).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := MOLSCode(7);; MinimumDistance(C);
+3
+gap> WeightDistribution(C);
+[ 1, 0, 0, 24, 24 ]
+gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
+1
+gap> MinimumDistance( NullCode( 4, GF(2) ) );
+4
+gap> C := ConferenceCode(9);; MinimumDistance(C);
+4
+gap> InnerDistribution(C);
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
+gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
+[ 3 3 6 2 ]
+gap> MinimumDistance( C, w );
+0
+gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
+3                           # so w no longer belongs to C 
+</pre></td></tr></table>
+
+<p>See also the <strong class="pkg">GUAVA</strong> commands relating to bounds on the minimum distance in section <a href="chap7.html#X87C753EB840C34D3"><b>7.1</b></a>.</p>
+
+<p><a id="X813F226F855590EE" name="X813F226F855590EE"></a></p>
+
+<h5>4.8-4 MinimumDistanceLeon</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistanceLeon</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistanceLeon</code> returns the ``probable'' minimum distance d_Leon of a linear binary code <var class="Arg">C</var>, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let <var class="Arg">C</var> be a linear code of dimension k over GF(q) as above. The algorithm has input parameters s and rho, where s is an integer between 2 and n-k, and rho is an integer between 2 and k.</p>
+
+
+<ul>
+<li><p>Find a generator matrix G of C.</p>
+
+</li>
+<li><p>Randomly permute the columns of G.</p>
+
+</li>
+<li><p>Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form:</p>
+
+<p class="pcenter">
+G=(I_{k} \, | \, Z \, | \, B)
+</p>
+
+<p>with Z a kx s matrix. If (Z,B) is the zero matrix then return 1 for the minimum distance. If Z=0 but not B then either choose another permutation of the rows of <var class="Arg">C</var> or return `method fails'.</p>
+
+</li>
+<li><p>Search Z for at most rho rows that lead to codewords of weight less than rho.</p>
+
+</li>
+<li><p>For these codewords, compute the weight of the whole word in <var class="Arg">C</var>. Return this weight.</p>
+
+</li>
+</ul>
+<p>(See for example J. S. Leon, <a href="chapBib.html#biBLeon88">[Leo88]</a> for more details.) Sometimes (as is the case in <strong class="pkg">GUAVA</strong>) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(50,22,GF(2));
+a  [50,22,?] randomly generated code over GF(2)
+gap> MinimumDistanceLeon(C); time;
+6
+211
+gap> MinimumDistance(C); time;
+6
+1204
+</pre></td></tr></table>
+
+<p><a id="X84EDF67B86B4154C" name="X84EDF67B86B4154C"></a></p>
+
+<h5>4.8-5 MinimumWeight</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumWeight</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumWeight</code> returns the minimum Hamming weight of a linear code <var class="Arg">C</var>. At the moment, this function works for binary and ternary codes only. The <code class="code">MinimumWeight</code> function relies on an external executable program which is written in C language. As a consequence, the execution time of <code class="code">MinimumWeight</code> function is faster than that of <code class="func">MinimumDistance</code> (<a href="chap4.html# [...]
+
+<p>The <code class="code">MinimumWeight</code> function implements Chen's <a href="chapBib.html#biBChen69">[Che69]</a> algorithm if <var class="Arg">C</var> is cyclic, and Zimmermann's <a href="chapBib.html#biBZimmermann96">[Zim96]</a> algorithm if <var class="Arg">C</var> is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divi [...]
+
+<p>Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed.</p>
+
+<p>If you find any bugs on this function, please report it to ctjhai at plymouth.ac.uk.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> # Extended ternary quadratic residue code of length 48
+gap> n := 47;;
+gap> x := Indeterminate(GF(3));;
+gap> F := Factors(x^n-1);;
+gap> v := List([1..n], i->Zero(GF(3)));;
+gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
+gap> G := CirculantMatrix(24, v);;
+gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
+> for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
+> od;;
+gap> C := GeneratorMatCodeNC(G, GF(3));
+a  [48,24,?] randomly generated code over GF(3)
+gap> MinimumWeight(C);
+[48,24] linear code over GF(3) - minimum weight evaluation
+Known lower-bound: 1
+There are 2 generator matrices, ranks : 24 24 
+The weight of the minimum weight codeword satisfies 0 mod 3 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 15
+Number of matrices required for codeword enumeration 2
+Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 2 matrices
+Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 2 matrices
+Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 2 matrices
+Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 2 matrices
+Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
+Termination expected with information weight 6 at matrix 1
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrices
+Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
+-----------------------------------------------------------------------------
+Minimum weight: 15
+15
+gap> 
+
+gap> # Binary cyclic code [151,45,36]
+gap> n := 151;;
+gap> x := Indeterminate(GF(2));;
+gap> F := Factors(x^n-1);;
+gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
+a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
+gap> MinimumWeight(C);
+[151,45] cyclic code over GF(2) - minimum weight evaluation
+Known lower-bound: 1
+The weight of the minimum weight codeword satisfies 0 mod 4 congruence
+Enumerating codewords with information weight 1 (w=1)
+    Found new minimum weight 56
+    Found new minimum weight 44
+Number of matrices required for codeword enumeration 1
+Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 2 (w=2) using 1 matrix
+Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
+Termination expected with information weight 11
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 3 (w=3) using 1 matrix
+   Found new minimum weight 40
+   Found new minimum weight 36
+Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 4 (w=4) using 1 matrix
+Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 5 (w=5) using 1 matrix
+Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 6 (w=6) using 1 matrix
+Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 7 (w=7) using 1 matrix
+Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 8 (w=8) using 1 matrix
+Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
+Termination expected with information weight 9
+-----------------------------------------------------------------------------
+Enumerating codewords with information weight 9 (w=9) using 1 matrix
+Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
+-----------------------------------------------------------------------------
+Minimum weight: 36
+36
+</pre></td></tr></table>
+
+<p><a id="X823B9A797EE42F6D" name="X823B9A797EE42F6D"></a></p>
+
+<h5>4.8-6 DecreaseMinimumDistanceUpperBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DecreaseMinimumDistanceUpperBound</code>( <var class="Arg">C, t, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DecreaseMinimumDistanceUpperBound</code> is an implementation of the algorithm for the minimum distance of a linear binary code <var class="Arg">C</var> by Leon <a href="chapBib.html#biBLeon88">[Leo88]</a>. This algorithm tries to find codewords with small minimum weights. The parameter <var class="Arg">t</var> is at least 1 and less than the dimension of <var class="Arg">C</var>. The best results are obtained if it is close to the dimension of the code. The paramet [...]
+
+<p>The result returned is a record with two fields; the first, <code class="code">mindist</code>, gives the lowest weight found, and <code class="code">word</code> gives the corresponding codeword. (This was implemented before <code class="code">MinimumDistanceLeon</code> but independently. The older manual had given the command incorrectly, so the command was only found after reading all the <em>*.gi</em> files in the <strong class="pkg">GUAVA</strong> library. Though both <code class=" [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(5,2,GF(2));
+a  [5,2,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,1,4);
+rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+3
+gap> C:=RandomLinearCode(8,4,GF(2));
+a  [8,4,?] randomly generated code over GF(2)
+gap> DecreaseMinimumDistanceUpperBound(C,3,4);
+rec( mindist := 2,
+  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
+gap> MinimumDistance(C);
+2
+</pre></td></tr></table>
+
+<p><a id="X7A679B0A7816B030" name="X7A679B0A7816B030"></a></p>
+
+<h5>4.8-7 MinimumDistanceRandom</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumDistanceRandom</code>( <var class="Arg">C, num, s</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumDistanceRandom</code> returns an upper bound for the minimum distance d_random of a linear binary code <var class="Arg">C</var>, using a probabilistic polynomial time algorithm. Briefly: Let <var class="Arg">C</var> be a linear code of dimension k over GF(q) as above. The algorithm has input parameters num and s, where s is an integer between 2 and n-1, and num is an integer greater than or equal to 1.</p>
+
+
+<ul>
+<li><p>Find a generator matrix G of C.</p>
+
+</li>
+<li><p>Randomly permute the columns of G, written G_p..</p>
+
+</li>
+<li><p class="pcenter">
+G=(A, B)
+</p>
+
+<p>with A a kx s matrix. If A is the zero matrix then return `method fails'.</p>
+
+</li>
+<li><p>Search A for at most 5 rows that lead to codewords, in the code C_A with generator matrix A, of minimum weight.</p>
+
+</li>
+<li><p>For these codewords, use the associated linear combination to compute the weight of the whole word in <var class="Arg">C</var>. Return this weight and codeword.</p>
+
+</li>
+</ul>
+<p>This probabilistic algorithm is repeated <var class="Arg">num</var> times (with different random permutations of the rows of G each time) and the weight and codeword of the lowest occurring weight is taken.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(60,20,GF(2));
+a  [60,20,?] randomly generated code over GF(2)
+gap> #mindist(C);time;
+gap> #mindistleon(C,10,30);time; #doesn't work well
+gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
+        1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
+130
+gap> a[2] in C;
+true
+gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
+rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
+649
+gap> Codeword(b!.word) in C;
+true
+gap> MinimumDistance(C);time;
+12
+196
+gap> c:=MinimumDistanceLeon(C);time;
+12
+66
+gap> C:=RandomLinearCode(30,10,GF(3));
+a  [30,10,?] randomly generated code over GF(3)
+gap> a:=MinimumDistanceRandom(C,10,10);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
+229
+gap> a[2] in C;
+true
+gap> MinimumDistance(C);time;
+9
+45
+gap> c:=MinimumDistanceLeon(C);
+Code must be binary. Quitting.
+0
+gap> a:=MinimumDistanceRandom(C,1,29);time;
+
+ This is a probabilistic algorithm which may return the wrong answer.
+[ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
+53
+</pre></td></tr></table>
+
+<p><a id="X7A195E317D2AB7CE" name="X7A195E317D2AB7CE"></a></p>
+
+<h5>4.8-8 CoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CoveringRadius</code> returns the <em>covering radius</em> of a linear code <var class="Arg">C</var>. This is the smallest number r with the property that each element v of the ambient vector space of <var class="Arg">C</var> has at most a distance r to the code <var class="Arg">C</var>. So for each vector v there must be an element c of <var class="Arg">C</var> with d(v,c) <= r. The smallest covering radius of any [n,k] binary linear code is denoted t(n,k). A bi [...]
+
+<p>If <var class="Arg">C</var> is a perfect code (see <code class="func">IsPerfectCode</code> (<a href="chap4.html#X85E3BD26856424F7"><b>4.3-6</b></a>)), the covering radius is equal to t, the number of errors the code can correct, where d = 2t+1, with d the minimum distance of <var class="Arg">C</var> (see <code class="func">MinimumDistance</code> (<a href="chap4.html#X7B31613D8538BD29"><b>4.8-3</b></a>)).</p>
+
+<p>If there exists a function called <code class="code">SpecialCoveringRadius</code> in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented.</p>
+
+<p>If the length of <code class="code">BoundsCoveringRadius</code> (see <code class="func">BoundsCoveringRadius</code> (<a href="chap7.html#X8320D1C180A1AAAD"><b>7.2-1</b></a>)), is 1, then the value in</p>
+
+
+<pre class="normal">
+
+C.boundsCoveringRadius
+
+</pre>
+
+<p>is returned. Otherwise, the function</p>
+
+
+<pre class="normal">
+
+C.operations.CoveringRadius
+
+</pre>
+
+<p>is executed, unless the redundancy of <var class="Arg">C</var> is too large. In the last case, a warning is issued.</p>
+
+<p>The algorithm used to compute the covering radius is the following. First, <code class="code">CosetLeadersMatFFE</code> is used to compute the list of coset leaders (which returns a codeword in each coset of GF(q)^n/C of minimum weight). Then <code class="code">WeightVecFFE</code> is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := RandomLinearCode(10, 5, GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(H);
+3
+gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
+true
+gap> CoveringRadius(H);
+1                       # Hamming codes have minimum distance 3
+gap> CoveringRadius(ReedSolomonCode(7,4));
+3 
+gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
+3
+gap> CoveringRadius( HammingCode( 5, GF(2) ) );
+1
+gap> C := ReedMullerCode( 1, 9 );;
+gap> CoveringRadius( C );
+CoveringRadius: warning, the covering radius of
+this code cannot be computed straightforward.
+Try to use IncreaseCoveringRadiusLowerBound( code ).
+(see the manual for more details).
+The covering radius of code lies in the interval:
+[ 240 .. 248 ]
+</pre></td></tr></table>
+
+<p>See also the <strong class="pkg">GUAVA</strong> commands relating to bounds on the minimum distance in section <a href="chap7.html#X817D0A647D3331EB"><b>7.2</b></a>.</p>
+
+<p><a id="X81004B007EC5DF58" name="X81004B007EC5DF58"></a></p>
+
+<h5>4.8-9 SetCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SetCoveringRadius</code>( <var class="Arg">C, intlist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SetCoveringRadius</code> enables the user to set the covering radius herself, instead of letting <strong class="pkg">GUAVA</strong> compute it. If <var class="Arg">intlist</var> is an integer, <strong class="pkg">GUAVA</strong> will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 17, 3, GF(2) );;
+gap> BoundsCoveringRadius( C );
+[ 3 .. 4 ]
+gap> SetCoveringRadius( C, [ 2 .. 3 ] );
+gap> BoundsCoveringRadius( C );
+[ [ 2 .. 3 ] ]
+</pre></td></tr></table>
+
+<p><a id="X806384B4815EFF2E" name="X806384B4815EFF2E"></a></p>
+
+<h4>4.9 <span class="Heading">
+Distributions
+</span></h4>
+
+<p><a id="X7AEE64467FB1E0B9" name="X7AEE64467FB1E0B9"></a></p>
+
+<h5>4.9-1 MinimumWeightWords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MinimumWeightWords</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MinimumWeightWords</code> returns the list of minimum weight codewords of <var class="Arg">C</var>.</p>
+
+<p>This algorithm is written in GAP is slow, so is only suitable for small codes.</p>
+
+<p>This does not call the very fast function <code class="code">MinimumWeight</code> (see <code class="func">MinimumWeight</code> (<a href="chap4.html#X84EDF67B86B4154C"><b>4.8-5</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> MinimumWeightWords(C);
+[ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
+  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]
+
+</pre></td></tr></table>
+
+<p><a id="X8728BCC9842A6E5D" name="X8728BCC9842A6E5D"></a></p>
+
+<h5>4.9-2 WeightDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WeightDistribution</code> returns the weight distribution of <var class="Arg">C</var>, as a vector. The i^th element of this vector contains the number of elements of <var class="Arg">C</var> with weight i-1. For linear codes, the weight distribution is equal to the inner distribution (see <code class="func">InnerDistribution</code> (<a href="chap4.html#X871FD301820717A4"><b>4.9-3</b></a>)). If w is the weight distribution of a linear code <var class="Arg">C</var>,  [...]
+
+<p>Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program <code class="code">DistancesDistributionMatFFEVecFFE</code>, which is written in C. See also <code class="code">CodeWeightEnumerator</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> WeightDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
+gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ]
+gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
+[ 1, 5, 10, 10, 5, 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X871FD301820717A4" name="X871FD301820717A4"></a></p>
+
+<h5>4.9-3 InnerDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> InnerDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">InnerDistribution</code> returns the inner distribution of <var class="Arg">C</var>. The i^th element of the vector contains the average number of elements of <var class="Arg">C</var> at distance i-1 to an element of <var class="Arg">C</var>. For linear codes, the inner distribution is equal to the weight distribution (see <code class="func">WeightDistribution</code> (<a href="chap4.html#X8728BCC9842A6E5D"><b>4.9-2</b></a>)).</p>
+
+<p>Suppose w is the inner distribution of <var class="Arg">C</var>. Then w[1] = 1, because each element of <var class="Arg">C</var> has exactly one element at distance zero (the element itself). The minimum distance of <var class="Arg">C</var> is the smallest value d > 0 with w[d+1] <> 0, because a distance between zero and d never occurs. See <code class="func">MinimumDistance</code> (<a href="chap4.html#X7B31613D8538BD29"><b>4.8-3</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> InnerDistribution( ConferenceCode(9) );
+[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
+gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
+[ 1, 0, 0, 0, 0, 0, 0, 3 ] 
+</pre></td></tr></table>
+
+<p><a id="X87AD54F87C5EE77E" name="X87AD54F87C5EE77E"></a></p>
+
+<h5>4.9-4 DistancesDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DistancesDistribution</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DistancesDistribution</code> returns the distribution of the distances of all elements of <var class="Arg">C</var> to a codeword <var class="Arg">w</var> in the same vector space. The i^th element of the distance distribution is the number of codewords of <var class="Arg">C</var> that have distance i-1 to <var class="Arg">w</var>. The smallest value d with w[d+1] <> 0, is defined as the <em>distance to</em> <var class="Arg">C</var> (see <code class="func">Mini [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HadamardCode(20);
+a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
+gap> c := Codeword("10110101101010010101", H);
+[ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
+gap> DistancesDistribution(H, c);
+[ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
+gap> MinimumDistance(H, c);
+5                           # distance to H 
+</pre></td></tr></table>
+
+<p><a id="X8495870687195324" name="X8495870687195324"></a></p>
+
+<h5>4.9-5 OuterDistribution</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OuterDistribution</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">OuterDistribution</code> returns a list of length q^n, where q is the size of the base field of <var class="Arg">C</var> and n is the word length. The elements of the list consist of pairs, the first coordinate being an element of GF(q)^n (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is <em>very</em> large, and for n > 20 it will not fit in the memory of most compute [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RepetitionCode( 3, GF(2) );
+a cyclic [3,1,3]1 repetition code over GF(2)
+gap> OD := OuterDistribution(C);
+[ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
+  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
+  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
+  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
+gap> WeightDistribution(C) = OD[1][2];
+true
+gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
+true 
+</pre></td></tr></table>
+
+<p><a id="X7D9A39BF801948C8" name="X7D9A39BF801948C8"></a></p>
+
+<h4>4.10 <span class="Heading">
+Decoding Functions
+</span></h4>
+
+<p><a id="X7A42FF7D87FC34AC" name="X7A42FF7D87FC34AC"></a></p>
+
+<h5>4.10-1 Decode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Decode</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Decode</code> decodes <var class="Arg">r</var> (a 'received word') with respect to code <var class="Arg">C</var> and returns the `message word' (i.e., the information digits associated to the codeword c in C closest to <var class="Arg">r</var>). Here <var class="Arg">r</var> can be a <strong class="pkg">GUAVA</strong> codeword or a list of codewords. First, possible errors in <var class="Arg">r</var> are corrected, then the codeword is decoded to an <em>information  [...]
+
+<p>A special decoder can be created by defining a function</p>
+
+
+<pre class="normal">
+
+C!.SpecialDecoder := function(C, r) ... end;
+
+</pre>
+
+<p>The function uses the arguments <var class="Arg">C</var> (the code record itself) and <var class="Arg">r</var> (a vector of the codeword type) to decode <var class="Arg">r</var> to an information vector. A normal decoder would take a codeword <var class="Arg">r</var> of the same word length and field as <var class="Arg">C</var>, and would return an information vector of length k, the dimension of <var class="Arg">C</var>. The user is not restricted to these normal demands though, and  [...]
+
+<p>Encoding is done by multiplying the information vector with the code (see <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decode(C, c);                     # decoding
+[ 1 0 1 0 ]
+gap> Decode(C, Codeword("0010101"));
+[ 1 1 0 1 ]                            # one error corrected
+gap> C!.SpecialDecoder := function(C, c)
+> return NullWord(Dimension(C));
+> end;
+function ( C, c ) ... end
+gap> Decode(C, c);
+[ 0 0 0 0 ]           # new decoder always returns null word 
+</pre></td></tr></table>
+
+<p><a id="X7D870C9387C47D9F" name="X7D870C9387C47D9F"></a></p>
+
+<h5>4.10-2 Decodeword</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Decodeword</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Decodeword</code> decodes <var class="Arg">r</var> (a 'received word') with respect to code <var class="Arg">C</var> and returns the codeword c in C closest to <var class="Arg">r</var>. Here <var class="Arg">r</var> can be a <strong class="pkg">GUAVA</strong> codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a sp [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(3);
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := "1010"*C;                    # encoding
+[ 1 0 1 1 0 1 0 ]
+gap> Decodeword(C, c);                     # decoding
+[ 1 0 1 1 0 1 0 ]
+gap>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v);
+[ 0 9 6 2 1 ]
+gap> Decodeword(C,v); # calls the special interpolation decoder
+[ 0 9 6 2 1 ]
+gap> G:=GeneratorMat(C);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
+  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
+  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
+gap> C1:=GeneratorMatCode(G,GF(11));
+a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
+gap> Decodeword(C,v); # calls syndrome decoding
+[ 0 9 6 2 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7D48DE2A84474C6A" name="X7D48DE2A84474C6A"></a></p>
+
+<h5>4.10-3 GeneralizedReedSolomonDecoderGao</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonDecoderGao</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedSolomonDecoderGao</code> decodes <var class="Arg">r</var> (a 'received word') to a codeword c in C in a generalized Reed-Solomon code <var class="Arg">C</var> (see <code class="func">GeneralizedReedSolomonCode</code> (<a href="chap5.html#X810AB3DB844FFCE9"><b>5.6-2</b></a>)), closest to <var class="Arg">r</var>. Here <var class="Arg">r</var> must be a <strong class="pkg">GUAVA</strong> codeword. If the code record does not have name `generalized Reed- [...]
+
+<p>For long codes, this method is faster in practice than the interpolation method used in <code class="code">Decodeword</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> c:=Random(C);
+[ 0 9 6 2 1 ]
+gap> v:=Codeword("09620");
+[ 0 9 6 2 0 ]
+gap> GeneralizedReedSolomonDecoderGao(C,v); 
+[ 0 9 6 2 1 ]
+</pre></td></tr></table>
+
+<p><a id="X7CFF98D483502053" name="X7CFF98D483502053"></a></p>
+
+<h5>4.10-4 GeneralizedReedSolomonListDecoder</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonListDecoder</code>( <var class="Arg">C, r, tau</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedSolomonListDecoder</code> implements Sudans list-decoding algorithm (see section 12.1 of <a href="chapBib.html#biBJH04">[JH04]</a>) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most <var class="Arg">tau</var> from <var class="Arg">r</var> (a 'received word'). <var class="Arg">C</var> must be a generalized Reed-Solomon code <var class="Arg">C</var> (see <code class="func">GeneralizedReedSolom [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap>
+gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
+  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); ## 6 error correcting
+13
+gap> z:=Zero(F);;
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
+[ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
+  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
+250
+gap> c1:=cs[1]; c1 in C;
+[ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+true
+gap> c2:=cs[2]; c2 in C;
+[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
+true
+gap> WeightCodeword(c1-r);
+7
+gap> WeightCodeword(c2-r);
+7
+</pre></td></tr></table>
+
+<p><a id="X80E17FA27DCAB676" name="X80E17FA27DCAB676"></a></p>
+
+<h5>4.10-5 BitFlipDecoder</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BitFlipDecoder</code>( <var class="Arg">C, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The iterative decoding method <code class="code">BitFlipDecoder</code> must only be applied to LDPC codes. These have not been implemented in GUAVA (but see <code class="code">FerreroDesignCode</code> for a code with similar properties). A binary low density parity check (LDPC) code of length $n$ and redundancy $r$ is defined in terms of its check matrix $H$:</p>
+
+
+<ul>
+<li><p>Each row of $H$ has exactly $x$ 1's.</p>
+
+</li>
+<li><p>Each column has exactly $y$ 1's.</p>
+
+</li>
+<li><p>The number of 1's in common between any two columns is less than or equal to one.</p>
+
+</li>
+<li><p>$x/n$ and $y/r$ are 'small'.</p>
+
+</li>
+</ul>
+<p>For these codes, <code class="code">BitFlipDecoder</code> decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in chapter 13 of <a href="chapBib.html#biBJH04">[JH04]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=HammingCode(4,GF(2));
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> c:=Random(C);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> v:=List(c);
+[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
+  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
+Z(2)^0
+gap> v:=Codeword(v);
+[ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+gap> BitFlipDecoder(C,v);
+[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
+
+
+</pre></td></tr></table>
+
+<p><a id="X7B88DEB37F28404A" name="X7B88DEB37F28404A"></a></p>
+
+<h5>4.10-6 NearestNeighborGRSDecodewords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NearestNeighborGRSDecodewords</code>( <var class="Arg">C, v, dist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NearestNeighborGRSDecodewords</code> finds all generalized Reed-Solomon codewords within distance <var class="Arg">dist</var> from <var class="Arg">v</var> <em>and</em> the associated polynomial, using ``brute force''. Input: <var class="Arg">v</var> is a received vector (a <strong class="pkg">GUAVA</strong> codeword), <var class="Arg">C</var> is a GRS code, <var class="Arg">dist</var> > 0 is the distance from <var class="Arg">v</var> to search in <var class="Arg [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C); # 6 error correcting
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
+[ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
+  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X825E35757D778787" name="X825E35757D778787"></a></p>
+
+<h5>4.10-7 NearestNeighborDecodewords</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NearestNeighborDecodewords</code>( <var class="Arg">C, v, dist</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NearestNeighborDecodewords</code> finds all codewords in a linear code <var class="Arg">C</var> within distance <var class="Arg">dist</var> from <var class="Arg">v</var>, using ``brute force''. Input: <var class="Arg">v</var> is a received vector (a <strong class="pkg">GUAVA</strong> codeword), <var class="Arg">C</var> is a linear code, <var class="Arg">dist</var> > 0 is the distance from <var class="Arg">v</var> to search in <var class="Arg">C</var>. Output: a l [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(16);
+GF(2^4)
+gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
+Z(2^4)^7
+0*Z(2)
+gap> Pts:=List([0..14],i->b^i);
+[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
+  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
+  Z(2^4)^8 ]
+gap> x:=X(F);;
+gap> R1:=PolynomialRing(F,[x]);;
+gap> vars:=IndeterminatesOfPolynomialRing(R1);;
+gap> y:=X(F,vars);;
+gap> R2:=PolynomialRing(F,[x,y]);;
+gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
+a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
+gap> MinimumDistance(C);
+13
+gap> z:=Zero(F);
+0*Z(2)
+gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
+gap> r:=Codeword(r);
+[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
+gap> cs:=NearestNeighborDecodewords(C,r,7);
+[ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
+  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]
+
+</pre></td></tr></table>
+
+<p><a id="X7D02E0FE8735D3E6" name="X7D02E0FE8735D3E6"></a></p>
+
+<h5>4.10-8 Syndrome</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Syndrome</code>( <var class="Arg">C, v</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Syndrome</code> returns the syndrome of word <var class="Arg">v</var> with respect to a linear code <var class="Arg">C</var>. <var class="Arg">v</var> is a codeword in the ambient vector space of <var class="Arg">C</var>. If <var class="Arg">v</var> is an element of <var class="Arg">C</var>, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see <code class="func">SyndromeTable</code> (<a href="chap4.html#X7 [...]
+
+<p>A syndrome is not defined for non-linear codes. <code class="code">Syndrome</code> then returns an error.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HammingCode(4);
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> v := CodewordNr( C, 7 );
+[ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
+gap> Syndrome( C, v );
+[ 0 0 0 0 ]
+gap> Syndrome( C, Codeword( "000000001100111" ) );
+[ 1 1 1 1 ]
+gap> Syndrome( C, Codeword( "000000000000001" ) );
+[ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
+               # coset of C 
+</pre></td></tr></table>
+
+<p><a id="X7B9E71987E4294A7" name="X7B9E71987E4294A7"></a></p>
+
+<h5>4.10-9 SyndromeTable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SyndromeTable</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SyndromeTable</code> returns a <em>syndrome table</em> of a linear code <var class="Arg">C</var>, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word <var class="Arg">v</var> with <code class="code">Syndrome</code> (see <code class="func">Syndrome</code> (<a href="chap4.html#X7D02E0FE8735D3E6"><b>4. [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2);
+a linear [3,1,3]1 Hamming (2,2) code over GF(2)
+gap> SyndromeTable(H);
+[ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
+  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
+gap> c := Codeword("101");
+[ 1 0 1 ]
+gap> c in H;
+false          # c is not an element of H
+gap> Syndrome(H,c);
+[ 1 0 ]        # according to the syndrome table,
+               # the error vector [ 0 1 0 ] belongs to this syndrome
+gap> c - Codeword("010") in H;
+true           # so the corrected codeword is
+               # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
+               # this is an element of H 
+</pre></td></tr></table>
+
+<p><a id="X8642D0BD789DA9B5" name="X8642D0BD789DA9B5"></a></p>
+
+<h5>4.10-10 StandardArray</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> StandardArray</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">StandardArray</code> returns the standard array of a code <var class="Arg">C</var>. This is a matrix with elements of the codeword type. It has q^r rows and q^k columns, where q is the size of the base field of <var class="Arg">C</var>, r=n-k is the redundancy of <var class="Arg">C</var>, and k is the dimension of <var class="Arg">C</var>. The first row contains all the elements of <var class="Arg">C</var>. Each other row contains words that do not belong to the cod [...]
+
+<p>A non-linear code does not have a standard array. <code class="code">StandardArray</code> then returns an error.</p>
+
+<p>Note that calculating a standard array can be very time- and memory- consuming.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> StandardArray(RepetitionCode(3)); 
+[ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
+  [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]
+</pre></td></tr></table>
+
+<p><a id="X83231E717CCB0247" name="X83231E717CCB0247"></a></p>
+
+<h5>4.10-11 PermutationDecode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationDecode</code>( <var class="Arg">C, v</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutationDecode</code> performs permutation decoding when possible and returns original vector and prints 'fail' when not possible.</p>
+
+<p>This uses <code class="code">AutomorphismGroup</code> in the binary case, and (the slower) <code class="code">PermutationAutomorphismGroup</code> otherwise, to compute the permutation automorphism group P of <var class="Arg">C</var>. The algorithm runs through the elements p of P checking if the weight of H(p* v) is less than (d-1)/2. If it is then the vector p* v is used to decode v: assuming <var class="Arg">C</var> is in standard form then c=p^-1Em is the decoded word, where m is t [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C0:=HammingCode(3,GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> G0:=GeneratorMat(C0);;
+gap> G := List(G0, ShallowCopy);;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . 1 1
+ . 1 . . 1 . 1
+ . . 1 . 1 1 .
+ . . . 1 1 1 1
+gap> H0:=CheckMat(C0);;
+gap> Display(H0);
+ . . . 1 1 1 1
+ . 1 1 . . 1 1
+ 1 . 1 . 1 . 1
+gap> c0:=Random(C0);
+[ 0 0 0 1 1 1 1 ]
+gap> v01:=c0[1]+Z(2)^2;;
+gap> v1:=List(c0, ShallowCopy);;
+gap> v1[1]:=v01;;
+gap> v1:=Codeword(v1);
+[ 1 0 0 1 1 1 1 ]
+gap> c1:=PermutationDecode(C0,v1);
+[ 0 0 0 1 1 1 1 ]
+gap> c1=c0;
+true
+</pre></td></tr></table>
+
+<p><a id="X85B692177E2A745D" name="X85B692177E2A745D"></a></p>
+
+<h5>4.10-12 PermutationDecodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutationDecodeNC</code>( <var class="Arg">C, v, P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Same as <code class="code">PermutationDecode</code> except that one may enter the permutation automorphism group <var class="Arg">P</var> in as an argument, saving time. Here <var class="Arg">P</var> is a subgroup of the symmetric group on n letters, where n is the word length of <var class="Arg">C</var>.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap3.html">Previous Chapter</a>    <a href="chap5.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap5.html b/htm/chap5.html
new file mode 100644
index 0000000..7600ac5
--- /dev/null
+++ b/htm/chap5.html
@@ -0,0 +1,2318 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 5: Generating Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap4.html">Previous Chapter</a>    <a href="chap6.html">Next Chapter</a>   </div>
+
+<p><a id="X87EB64ED831CCE99" name="X87EB64ED831CCE99"></a></p>
+<div class="ChapSects"><a href="chap5.html#X87EB64ED831CCE99">5. <span class="Heading">Generating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X86A92CB184CBD3C7">5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81AACBDD86E89D7D">5.1-1 ElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X86755AAC83A0AF4B">5.1-2 HadamardCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8122BA417F705997">5.1-3 ConferenceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81B7EE4279398F67">5.1-4 MOLSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D87DD6380B2CE69">5.1-5 RandomCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816353397F25B62E">5.1-6 NordstromRobinsonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7880D34485C60BAF">5.1-7 GreedyCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C1B374583AFB923">5.1-8 LexiCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7A11F29F7BBF45BB">5.2 <span class="Heading">
+Generating Linear Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83F400A681CFC0D6">5.2-1 GeneratorMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7CDDDFE47A10A008">5.2-2 CheckMatCodeMutable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X848D3F7B805DEB66">5.2-3 CheckMatCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7DECB0A57C798583">5.2-4 HammingCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X801C88D578DA6ACA">5.2-5 ReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X851592C7811D3D2A">5.2-6 AlternantCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE808BB7D1E487A">5.2-7 GoppaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F9C0A727EE075B7">5.2-8 GeneralizedSrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7A38EB3178961F3E">5.2-9 SrivastavaCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87F7CB8B7A8BE624">5.2-10 CordaroWagnerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865534267C8E902A">5.2-11 FerreroDesignCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BCA10CE8660357F">5.2-12 RandomLinearCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X839CFE4C7A567D4D">5.2-13 OptimalityCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X871508567CB34D96">5.2-14 BestKnownLinearCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X858721967BE44000">5.3 <span class="Heading">
+Gabidulin Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79BE5D497CB2E59E">5.3-1 GabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X873950F67D4A9184">5.3-2 EnlargedGabidulinCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F5BE77B7F343182">5.3-3 DavydovCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X845B4DBE83288D2D">5.3-4 TombakCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7D6583347C0D4292">5.3-5 EnlargedTombakCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X81F6E4A785F368B0">5.4 <span class="Heading">
+Golay Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80ED89C079CD0D09">5.4-1 BinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X84520C7983538806">5.4-2 ExtendedBinaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E0CCCD7866ADB94">5.4-3 TernaryGolayCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X81088A66816BCAE4">5.4-4 ExtendedTernaryGolayCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X8366CC3685F0BC85">5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X853D34A5796CEB73">5.5-1 GeneratorPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82440B78845F7F6E">5.5-2 CheckPolCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X818F0E6583E01D4B">5.5-3 RootsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7C6BB07C87853C00">5.5-4 BCHCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X838F3CB3872CEF95">5.5-5 ReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8730B90A862A3B3E">5.5-6 ExtendedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X825F42F68179D2AB">5.5-7 QRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8764ABCF854C695E">5.5-8 QQRCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9 QQRCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10 FireCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BC245E37EB7B23F">5.5-11 WholeSpaceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B4EF2017B2C61AD">5.5-12 NullCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X83C5F8FE7827EAA7">5.5-13 RepetitionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82FA9F65854D98A6">5.5-14 CyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8263CE4A790D294A">5.5-15 NrCyclicCodes</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79826B16785E8BD3">5.5-16 QuasiCyclicCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7BFEDA52835A601D">5.5-17 CyclicMDSCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7F40AF3B81C252DC">5.5-18 FourNegacirculantSelfDualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X87137A257E761291">5.5-19 FourNegacirculantSelfDualCodeNC</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X850A28C579137220">5.6 <span class="Heading">
+Evaluation Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X78E078567D19D433">5.6-1 EvaluationCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X810AB3DB844FFCE9">5.6-2 GeneralizedReedSolomonCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85B8699680B9D786">5.6-3 GeneralizedReedMullerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7EE68B58872D7E82">5.6-4 ToricPoints</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B24BE418010F596">5.6-5 ToricCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap5.html#X7AE2B2CD7C647990">5.7 <span class="Heading">
+Algebraic geometric codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X802DD9FB79A9ACA7">5.7-1 AffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857EFE567C05C981">5.7-2 AffinePointsOnCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857E36ED814A40B8">5.7-3 GenusCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8572A3037DA66F88">5.7-4 GOrbitPoint </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79742B7183051D99">5.7-5 DivisorOnAffineCurve</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8626E2B57D01F2DC">5.7-6 DivisorAddition </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X865FE28D828C1EAD">5.7-7 DivisorDegree </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X789DC358819A8F54">5.7-8 DivisorNegate </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8688C0E187B5C7DB">5.7-9 DivisorIsZero </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X816A07997D9A7075">5.7-10 DivisorsEqual </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X857B89847A649A26">5.7-11 DivisorGCD </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X82231CF08073695F">5.7-12 DivisorLCM </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79C878697F99A10F">5.7-13 RiemannRochSpaceBasisFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X856DDA207EDDF256">5.7-14 DivisorOfRationalFunctionP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X878970A17E580224">5.7-15 RiemannRochSpaceBasisP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X807C52E67A440DEB">5.7-16 MoebiusTransformation </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X85A0419580ED0391">5.7-17 ActionMoebiusTransformationOnFunction </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18 ActionMoebiusTransformationOnDivisorP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X79FD980E7B24DB9C">5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X823386037F450B0E">5.7-20 DivisorAutomorphismGroupP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X80EDF3D682E7EF3F">5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8777388C7885E335">5.7-22 GoppaCodeClassical</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X8422A310854C09B0">5.7-23 EvaluationBivariateCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X7B6C2BED8319C811">5.7-24 EvaluationBivariateCodeNC</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap5.html#X842E227E8785168E">5.7-25 OnePointAGCode</a></span>
+</div>
+</div>
+
+<h3>5. <span class="Heading">Generating Codes</span></h3>
+
+<p>In this chapter we describe functions for generating codes.</p>
+
+<p>Section <a href="chap5.html#X86A92CB184CBD3C7"><b>5.1</b></a> describes functions for generating unrestricted codes.</p>
+
+<p>Section <a href="chap5.html#X7A11F29F7BBF45BB"><b>5.2</b></a> describes functions for generating linear codes.</p>
+
+<p>Section <a href="chap5.html#X858721967BE44000"><b>5.3</b></a> describes functions for constructing certain covering codes, such as the Gabidulin codes.</p>
+
+<p>Section <a href="chap5.html#X81F6E4A785F368B0"><b>5.4</b></a> describes functions for constructing the Golay codes.</p>
+
+<p>Section <a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a> describes functions for generating cyclic codes.</p>
+
+<p>Section <a href="chap5.html#X850A28C579137220"><b>5.6</b></a> describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there.</p>
+
+<p><a id="X86A92CB184CBD3C7" name="X86A92CB184CBD3C7"></a></p>
+
+<h4>5.1 <span class="Heading">
+Generating Unrestricted Codes
+</span></h4>
+
+<p>In this section we start with functions that creating code from user defined matrices or special matrices (see <code class="func">ElementsCode</code> (<a href="chap5.html#X81AACBDD86E89D7D"><b>5.1-1</b></a>), <code class="func">HadamardCode</code> (<a href="chap5.html#X86755AAC83A0AF4B"><b>5.1-2</b></a>), <code class="func">ConferenceCode</code> (<a href="chap5.html#X8122BA417F705997"><b>5.1-3</b></a>) and <code class="func">MOLSCode</code> (<a href="chap5.html#X81B7EE4279398F67"><b>5 [...]
+
+<p>The next functions generate random codes (see <code class="func">RandomCode</code> (<a href="chap5.html#X7D87DD6380B2CE69"><b>5.1-5</b></a>)) and the Nordstrom-Robinson code (see <code class="func">NordstromRobinsonCode</code> (<a href="chap5.html#X816353397F25B62E"><b>5.1-6</b></a>)), respectively.</p>
+
+<p>Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see <code class="func">GreedyCode</code> (<a href="chap5.html#X7880D34485C60BAF"><b>5.1-7</b></a>) and <code class="func">LexiCode</code> (<a href="chap5.html#X7C1B374583AFB923"><b>5.1-8</b></a>)).</p>
+
+<p><a id="X81AACBDD86E89D7D" name="X81AACBDD86E89D7D"></a></p>
+
+<h5>5.1-1 ElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ElementsCode</code>( <var class="Arg">L[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ElementsCode</code> creates an unrestricted code of the list of elements <var class="Arg">L</var>, in the field <var class="Arg">F</var>. <var class="Arg">L</var> must be a list of vectors, strings, polynomials or codewords. <var class="Arg">name</var> can contain a short description of the code.</p>
+
+<p>If <var class="Arg">L</var> contains a codeword more than once, it is removed from the list and a GAP set is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
+gap> C := ElementsCode( M, "example code", GF(3) );
+a (4,3,1..4)2 example code over GF(3)
+gap> MinimumDistance( C );
+4
+gap> AsSSortedList( C );
+[ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X86755AAC83A0AF4B" name="X86755AAC83A0AF4B"></a></p>
+
+<h5>5.1-2 HadamardCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HadamardCode</code>( <var class="Arg">H[, t]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The four forms this command can take are <code class="code">HadamardCode(H,t)</code>, <code class="code">HadamardCode(H)</code>, <code class="code">HadamardCode(n,t)</code>, and <code class="code">HadamardCode(n)</code>.</p>
+
+<p>In the case when the arguments <var class="Arg">H</var> and <var class="Arg">t</var> are both given, <code class="code">HadamardCode</code> returns a Hadamard code of the t^th kind from the Hadamard matrix <var class="Arg">H</var> In case only <var class="Arg">H</var> is given, t = 3 is used.</p>
+
+<p>By definition, a Hadamard matrix is a square matrix <var class="Arg">H</var> with H* H^T = -n* I_n, where n is the size of <var class="Arg">H</var>. The entries of <var class="Arg">H</var> are either 1 or -1.</p>
+
+<p>The matrix <var class="Arg">H</var> is first transformed into a binary matrix A_n by replacing the 1's by 0's and the -1's by 1s).</p>
+
+<p>The Hadamard matrix of the <em>first kind</em> (t=1) is created by using the rows of A_n as elements, after deleting the first column. This is a (n-1, n, n/2) code. We use this code for creating the Hadamard code of the <em>second kind</em> (t=2), by adding all the complements of the already existing codewords. This results in a (n-1, 2n, n/2 -1) code. The <em>third kind</em> (t=3) is created by using the rows of A_n (without cutting a column) and their complements as elements. This w [...]
+
+<p>The command <code class="code">HadamardCode(n,t)</code> returns a Hadamard code with parameter <var class="Arg">n</var> of the t^th kind. For the command <code class="code">HadamardCode(n)</code>, t=3 is used.</p>
+
+<p>When called in these forms, <code class="code">HadamardCode</code> first creates a Hadamard matrix (see <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>)), of size <var class="Arg">n</var> and then follows the same procedure as described above. Therefore the same restrictions with respect to <var class="Arg">n</var> as for Hadamard matrices hold.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> HadamardCode( H4, 1 );
+a (3,4,2)1 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4, 2 );
+a (3,8,1)0 Hadamard code of order 4 over GF(2)
+gap> HadamardCode( H4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2) 
+gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
+gap> C := HadamardCode( 4 );
+a (4,8,2)1 Hadamard code of order 4 over GF(2)
+gap> C = HadamardCode( H4 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X8122BA417F705997" name="X8122BA417F705997"></a></p>
+
+<h5>5.1-3 ConferenceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConferenceCode</code>( <var class="Arg">H</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConferenceCode</code> returns a code of length n-1 constructed from a symmetric 'conference matrix' <var class="Arg">H</var>. A <em>conference matrix</em> <var class="Arg">H</var> is a symmetric matrix of order n, which satisfies H* H^T = ((n-1)* I, with n = 2 mod 4. The rows of frac12(H+I+J), frac12(-H+I+J), plus the zero and all-ones vectors form the elements of a binary non-linear (n-1, 2n, (n-2)/2) code.</p>
+
+<p><strong class="pkg">GUAVA</strong> constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear (n, 2(n+1), (n-1)/2)-code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
+> [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
+gap> C1 := ConferenceCode( H6 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> IsLinearCode( C1 );
+false 
+gap> C2 := ConferenceCode( 5 );
+a (5,12,2)1..4 conference code over GF(2)
+gap> AsSSortedList( C2 );
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
+  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
+  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
+</pre></td></tr></table>
+
+<p><a id="X81B7EE4279398F67" name="X81B7EE4279398F67"></a></p>
+
+<h5>5.1-4 MOLSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MOLSCode</code>( <var class="Arg">[n][,]q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MOLSCode</code> returns an (n, q^2, n-1) code over GF(q). The code is created from n-2 'Mutually Orthogonal Latin Squares' (MOLS) of size q x q. The default for <var class="Arg">n</var> is 4. <strong class="pkg">GUAVA</strong> can construct a MOLS code for n-2 <= q. Here <var class="Arg">q</var> must be a prime power, q > 2. If there are no n-2 MOLS, an error is signalled.</p>
+
+<p>Since each of the n-2 MOLS is a qx q matrix, we can create a code of size q^2 by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become n.</p>
+
+<p>The MOLS codes are MDS codes (see <code class="func">IsMDSCode</code> (<a href="chap4.html#X789380D28018EC3F"><b>4.3-7</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := MOLSCode( 6, 5 );
+a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
+gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
+>       local ls, el;
+>       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
+>       for el in VectorCodeword( AsSSortedList( C1 ) ) do
+>          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
+>       od;
+>       return ls;
+>    end );;
+gap> AreMOLS( mols );
+true
+gap> C2 := MOLSCode( 11 );
+a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 
+</pre></td></tr></table>
+
+<p><a id="X7D87DD6380B2CE69" name="X7D87DD6380B2CE69"></a></p>
+
+<h5>5.1-5 RandomCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomCode</code>( <var class="Arg">n, M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RandomCode</code> returns a random unrestricted code of size <var class="Arg">M</var> with word length <var class="Arg">n</var> over <var class="Arg">F</var>. <var class="Arg">M</var> must be less than or equal to the number of elements in the space GF(q)^n.</p>
+
+<p>The function <code class="code">RandomLinearCode</code> returns a random linear code (see <code class="func">RandomLinearCode</code> (<a href="chap5.html#X7BCA10CE8660357F"><b>5.2-12</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> MinimumDistance(C1);
+3
+gap> C2 := RandomCode( 6, 10, GF(8) );
+a (6,10,1..6)4..6 random unrestricted code over GF(8)
+gap> C1 = C2;
+false 
+</pre></td></tr></table>
+
+<p><a id="X816353397F25B62E" name="X816353397F25B62E"></a></p>
+
+<h5>5.1-6 NordstromRobinsonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NordstromRobinsonCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NordstromRobinsonCode</code> returns a Nordstrom-Robinson code, the best code with word length n=16 and minimum distance d=6 over GF(2). This is a non-linear (16, 256, 6) code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := NordstromRobinsonCode();
+a (16,256,6)4 Nordstrom-Robinson code over GF(2)
+gap> OptimalityCode( C );
+0 
+</pre></td></tr></table>
+
+<p><a id="X7880D34485C60BAF" name="X7880D34485C60BAF"></a></p>
+
+<h5>5.1-7 GreedyCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GreedyCode</code>( <var class="Arg">L, d, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GreedyCode</code> returns a Greedy code with design distance <var class="Arg">d</var> over the finite field <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the list of vectors <var class="Arg">L</var>. (The greedy algorithm checks each vector in <var class="Arg">L</var> and adds it to the code if its distance to the current code is greater than or equal to <var class="Arg">d</var>. It is obvious that the resulting code has a minimum d [...]
+
+<p>Greedy codes are often linear codes.</p>
+
+<p>The function <code class="code">LexiCode</code> creates a greedy code from a basis instead of an enumerated list (see <code class="func">LexiCode</code> (<a href="chap5.html#X7C1B374583AFB923"><b>5.1-8</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
+>                         (1,4) ), 3, GF(2) );
+a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
+gap> C1 = C2;
+false 
+</pre></td></tr></table>
+
+<p><a id="X7C1B374583AFB923" name="X7C1B374583AFB923"></a></p>
+
+<h5>5.1-8 LexiCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LexiCode</code>( <var class="Arg">n, d, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this format, <code class="code">Lexicode</code> returns a lexicode with word length <var class="Arg">n</var>, design distance <var class="Arg">d</var> over <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length <var class="Arg">n</var> over <var class="Arg">F</var>. Every time a vector is found that has a distance to the current code of at least <var class="Arg">d</var>, it is added to the code. Th [...]
+
+<p>Another syntax which one can use is <code class="code">LexiCode( B, d, F )</code>. When called in this format, <code class="code">LexiCode</code> uses the basis <var class="Arg">B</var> instead of the standard basis. <var class="Arg">B</var> is a matrix of vectors over <var class="Arg">F</var>. The code is constructed using the greedy algorithm on the list of vectors spanned by <var class="Arg">B</var>, ordered lexicographically with respect to <var class="Arg">B</var>.</p>
+
+<p>Note that binary lexicodes are always linear.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := LexiCode( 4, 3, GF(5) );
+a (4,17,3..4)2..4 lexicode over GF(5) 
+gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
+gap> C := LexiCode( B, 2, GF(2) );
+a linear [3,1,2]1..2 lexicode over GF(2) 
+</pre></td></tr></table>
+
+<p>The function <code class="code">GreedyCode</code> creates a greedy code that is not restricted to a lexicographical order (see <code class="func">GreedyCode</code> (<a href="chap5.html#X7880D34485C60BAF"><b>5.1-7</b></a>)).</p>
+
+<p><a id="X7A11F29F7BBF45BB" name="X7A11F29F7BBF45BB"></a></p>
+
+<h4>5.2 <span class="Heading">
+Generating Linear Codes
+</span></h4>
+
+<p>In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix.</p>
+
+<p>The first two functions generate linear codes from the generator matrix (<code class="func">GeneratorMatCode</code> (<a href="chap5.html#X83F400A681CFC0D6"><b>5.2-1</b></a>)) or check matrix (<code class="func">CheckMatCode</code> (<a href="chap5.html#X848D3F7B805DEB66"><b>5.2-3</b></a>)). All linear codes can be constructed with these functions.</p>
+
+<p>The next functions we describe generate some well-known codes, like Hamming codes (<code class="func">HammingCode</code> (<a href="chap5.html#X7DECB0A57C798583"><b>5.2-4</b></a>)), Reed-Muller codes (<code class="func">ReedMullerCode</code> (<a href="chap5.html#X801C88D578DA6ACA"><b>5.2-5</b></a>)) and the extended Golay codes (<code class="func">ExtendedBinaryGolayCode</code> (<a href="chap5.html#X84520C7983538806"><b>5.4-2</b></a>) and <code class="func">ExtendedTernaryGolayCode</co [...]
+
+<p>A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see <code class="func">AlternantCode</code> (<a href="chap5.html#X851592C7811D3D2A"><b>5.2-6</b></a>), <code class="func">GoppaCode</code> (<a href="chap5.html#X7EE808BB7D1E487A"><b>5.2-7</b></a>), <code class="func">GeneralizedSrivastavaCode</code> (<a href="chap5.html#X7F9C0A727EE075B7"><b>5.2-8</b></a>) and <code class="func">SrivastavaCode</ [...]
+
+<p>Finally, we describe a function for generating random linear codes (see <code class="func">RandomLinearCode</code> (<a href="chap5.html#X7BCA10CE8660357F"><b>5.2-12</b></a>)).</p>
+
+<p><a id="X83F400A681CFC0D6" name="X83F400A681CFC0D6"></a></p>
+
+<h5>5.2-1 GeneratorMatCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorMatCode</code>( <var class="Arg">G[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorMatCode</code> returns a linear code with generator matrix <var class="Arg">G</var>. <var class="Arg">G</var> must be a matrix over finite field <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length n, dimension k if <var class="Arg">G</var> is a k x n-matrix. If GF(q) is the field of the code, the size of the code w [...]
+
+<p>If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function <code class="code">BaseMat</code> and results in an equal code. The generator matrix can be retrieved with the function <code class="code">GeneratorMat</code> (see <code class="func">GeneratorMat</code> (<a href="chap4.html#X817224657C9829C4"><b>4.7-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := GeneratorMatCode( G, GF(3) );
+a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
+gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a linear [5,5,1]0 code defined by generator matrix over GF(2)
+gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
+> x -> VectorCodeword( x ) ), GF( 2 ) );
+a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
+# This is the smallest linear code that contains the N-R code 
+</pre></td></tr></table>
+
+<p><a id="X7CDDDFE47A10A008" name="X7CDDDFE47A10A008"></a></p>
+
+<h5>5.2-2 CheckMatCodeMutable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMatCodeMutable</code>( <var class="Arg">H[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMatCodeMutable</code> is the same as <code class="code">CheckMatCode</code> except that the check matrix and generator matrix are mutable.</p>
+
+<p><a id="X848D3F7B805DEB66" name="X848D3F7B805DEB66"></a></p>
+
+<h5>5.2-3 CheckMatCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckMatCode</code>( <var class="Arg">H[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckMatCode</code> returns a linear code with check matrix <var class="Arg">H</var>. <var class="Arg">H</var> must be a matrix over Galois field <var class="Arg">F</var>. <var class="Arg">[name.</var> can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, c* H^T = 0 where c is an element of the code. If <var class="Arg">H</var> is a rx n-matrix, the code has word lengt [...]
+
+<p>If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function <code class="code">BaseMat</code>. and results in an equal code. The check matrix can be retrieved with the function <code class="code">CheckMat</code> (see <code class="func">CheckMat</code> (<a href="chap4.html#X85D4B26E7FB38D57"><b>4.7-2</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
+gap> C1 := CheckMatCode( G, GF(3) );
+a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
+gap> CheckMat(C1);
+[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
+  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
+  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
+gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
+a cyclic [5,0,5]5 code defined by check matrix over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7DECB0A57C798583" name="X7DECB0A57C798583"></a></p>
+
+<h5>5.2-4 HammingCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HammingCode</code>( <var class="Arg">r, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HammingCode</code> returns a Hamming code with redundancy <var class="Arg">r</var> over <var class="Arg">F</var>. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length <var class="Arg">r</var> in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see <code class="func">Decode</code> (<a href="chap4.html#X7A42FF7D87FC34AC"><b>4.10-1</b></a>)) makes use of [...]
+
+<p>If q is the size of its field <var class="Arg">F</var>, the returned Hamming code is a linear [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := HammingCode( 3, GF(9) );
+a linear [91,88,3]1 Hamming (3,9) code over GF(9) 
+</pre></td></tr></table>
+
+<p><a id="X801C88D578DA6ACA" name="X801C88D578DA6ACA"></a></p>
+
+<h5>5.2-5 ReedMullerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReedMullerCode</code>( <var class="Arg">r, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReedMullerCode</code> returns a binary 'Reed-Muller code' <var class="Arg">R(r, k)</var> with dimension <var class="Arg">k</var> and order <var class="Arg">r</var>. This is a code with length 2^k and minimum distance 2^k-r (see for example, section 1.10 in <a href="chapBib.html#biBHP03">[HP03]</a>). By definition, the r^th order binary Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors f, where f is a Boolean function which is a polyn [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</pre></td></tr></table>
+
+<p>See <code class="func">GeneralizedReedMullerCode</code> (<a href="chap5.html#X85B8699680B9D786"><b>5.6-3</b></a>) for a more general construction.</p>
+
+<p><a id="X851592C7811D3D2A" name="X851592C7811D3D2A"></a></p>
+
+<h5>5.2-6 AlternantCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AlternantCode</code>( <var class="Arg">r, Y[, alpha], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AlternantCode</code> returns an 'alternant code', with parameters <var class="Arg">r</var>, <var class="Arg">Y</var> and <var class="Arg">alpha</var> (optional). <var class="Arg">F</var> denotes the (finite) base field. Here, <var class="Arg">r</var> is the design redundancy of the code. <var class="Arg">Y</var> and <var class="Arg">alpha</var> are both vectors of length <var class="Arg">n</var> from which the parity check matrix is constructed. The check matrix has [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
+gap> alpha := List( [0..6], i -> a^i );;
+gap> C := AlternantCode( 2, Y, alpha, GF(8) );
+a linear [7,3,3..4]3..4 alternant code over GF(8) 
+</pre></td></tr></table>
+
+<p><a id="X7EE808BB7D1E487A" name="X7EE808BB7D1E487A"></a></p>
+
+<h5>5.2-7 GoppaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GoppaCode</code>( <var class="Arg">G, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GoppaCode</code> returns a Goppa code <var class="Arg">C</var> from Goppa polynomial <var class="Arg">g</var>, having coefficients in a Galois Field GF(q). <var class="Arg">L</var> must be a list of elements in GF(q), that are not roots of <var class="Arg">g</var>. The word length of the code is equal to the length of <var class="Arg">L</var>. The parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <= deg(g)-1, a_i in L, where a_iin L and [...] is as  [...]
+
+<p>One can also call <code class="code">GoppaCode</code> using the syntax <code class="code">GoppaCode(g,n)</code>. When called with parameter <var class="Arg">n</var>, <strong class="pkg">GUAVA</strong> constructs a list L of length <var class="Arg">n</var>, such that no element of <var class="Arg">L</var> is a root of <var class="Arg">g</var>.</p>
+
+<p>This is a special case of an alternant code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:=Indeterminate(GF(8),"x");
+x
+gap> L:=Elements(GF(8));
+[ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
+gap> g:=x^2+x+1;
+x^2+x+Z(2)^0
+gap> C:=GoppaCode(g,L);
+a linear [8,2,5]3 Goppa code over GF(2)
+gap> xx := Indeterminate( GF(2), "xx" );; 
+gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
+gap> C1 := GoppaCode( gg, L );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> y := Indeterminate( GF(2), "y" );; 
+gap> h := y^2 + y + 1;;
+gap> C2 := GoppaCode( h, 8 );
+a linear [8,2,5]3 Goppa code over GF(2) 
+gap> C1=C2;
+true
+gap> C=C1;
+true
+</pre></td></tr></table>
+
+<p><a id="X7F9C0A727EE075B7" name="X7F9C0A727EE075B7"></a></p>
+
+<h5>5.2-8 GeneralizedSrivastavaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedSrivastavaCode</code>( <var class="Arg">a, w, z[, t], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedSrivastavaCode</code> returns a generalized Srivastava code with parameters <var class="Arg">a</var>, <var class="Arg">w</var>, <var class="Arg">z</var>, <var class="Arg">t</var>. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m), z is a list of length n of nonzero elements of GF(q^m). The parameter <var class="Arg">t</var> determines the designed distance: d >= st + 1. The check matrix of this code is the form</p>
+
+<p class="pcenter">
+H=([\frac{z_i}{(a_i - w_j)^k}]),
+</p>
+
+<p>1<= k<= t, where [...] is as in <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>). We use this definition of H to define the code. The default for <var class="Arg">t</var> is 1. The original Srivastava codes (see <code class="func">SrivastavaCode</code> (<a href="chap5.html#X7A38EB3178961F3E"><b>5.2-9</b></a>)) are a special case t=1, z_i=a_i^mu, for some mu.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
+gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
+gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
+a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 
+</pre></td></tr></table>
+
+<p><a id="X7A38EB3178961F3E" name="X7A38EB3178961F3E"></a></p>
+
+<h5>5.2-9 SrivastavaCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SrivastavaCode</code>( <var class="Arg">a, w[, mu], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>SrivastavaCode returns a Srivastava code with parameters <var class="Arg">a</var>, <var class="Arg">w</var> (and optionally <var class="Arg">mu</var>). a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m). The default for <var class="Arg">mu</var> is 1. The Srivastava code is a generalized Srivastava code, in which z_i = a_i^mu for some <var class="Arg">mu</var> and t=1.</p>
+
+<p>J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert <a href="chapBib.html#biBHe72">[Hel72]</a> for more details on the properties of this code. Related reference: G. Roelofsen, <strong class="button">On Goppa and Generalized Srivastava Codes</strong> PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := AsSSortedList( GF(11) ){[2..8]};;
+gap> w := AsSSortedList( GF(11) ){[9..10]};;
+gap> C := SrivastavaCode( a, w, 2, GF(11) );
+a linear [7,5,3]2 Srivastava code over GF(11)
+gap> IsMDSCode( C );
+true    # Always true if F is a prime field 
+</pre></td></tr></table>
+
+<p><a id="X87F7CB8B7A8BE624" name="X87F7CB8B7A8BE624"></a></p>
+
+<h5>5.2-10 CordaroWagnerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CordaroWagnerCode</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CordaroWagnerCode</code> returns a binary Cordaro-Wagner code. This is a code of length <var class="Arg">n</var> and dimension 2 having the best possible minimum distance d. This code is just a little bit less trivial than <code class="code">RepetitionCode</code> (see <code class="func">RepetitionCode</code> (<a href="chap5.html#X83C5F8FE7827EAA7"><b>5.5-13</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := CordaroWagnerCode( 11 );
+a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
+gap> AsSSortedList(C);                 
+[ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
+  [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X865534267C8E902A" name="X865534267C8E902A"></a></p>
+
+<h5>5.2-11 FerreroDesignCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FerreroDesignCode</code>( <var class="Arg">P, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><em>Requires the GAP package SONATA</em></p>
+
+<p>A group K together with a group of automorphism H of K such that the semidirect product KH is a Frobenius group with complement H is called a Ferrero pair (K, H) in SONATA. Take a Frobenius (G,+) group with kernel K and complement H. Consider the design D with point set K and block set a^H + b | a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation by elements of H. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from  [...]
+
+<p><code class="code">FerreroDesignCode</code> constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group.</p>
+
+<p>INPUT: P is a list of prime powers describing an abelian group G. m > 0 is an integer such that G admits a cyclic fpf automorphism group of size m. This means that for all q = p^k in P, OrderMod(p, m) must divide q (see the SONATA documentation for <code class="code">FpfAutomorphismGroupsCyclic</code>).</p>
+
+<p>OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of G. The pair (H,K) is called a Ferraro pair and the semidirect product KH is a Frobenius group with complement H.</p>
+
+<p>AUTHORS: Peter Mayr and David Joyner</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> G:=AbelianGroup([5,5] );
+ [ pc group of size 25 with 2 generators ]
+gap> FpfAutomorphismGroupsMaxSize( G );
+[ 24, 2 ]
+gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
+[ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
+  [ pc group of size 25 with 2 generators ] ]
+gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
+ [ a 2 - ( 25, 3, 2 ) nearring generated design ]
+gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
+25
+200
+gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+24
+gap> C2:=FerreroDesignCode( [5,5],3);
+a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
+gap> C1=C2;
+true
+
+</pre></td></tr></table>
+
+<p><a id="X7BCA10CE8660357F" name="X7BCA10CE8660357F"></a></p>
+
+<h5>5.2-12 RandomLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RandomLinearCode</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RandomLinearCode</code> returns a random linear code with word length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The method used is to first construct a kx n matrix of the block form (I,A), where I is a kx k identity matrix and A is a kx (n-k) matrix constructed using <code class="code">Random(F)</code> repeatedly. Then the columns are permuted using a randomly selected element of <code class="code">SymmetricGro [...]
+
+<p>To create a random unrestricted code, use <code class="code">RandomCode</code> (see <code class="func">RandomCode</code> (<a href="chap5.html#X7D87DD6380B2CE69"><b>5.1-5</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RandomLinearCode( 15, 4, GF(3) );
+a  [15,4,?] randomly generated code over GF(3)
+gap> Display(C);
+a linear [15,4,1..6]6..10 random linear code over GF(3)
+</pre></td></tr></table>
+
+<p>The method <strong class="pkg">GUAVA</strong> chooses to output the result of a <code class="code">RandomLinearCode</code> command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the <code class="code">Display</code> command to print this information. This new display method was added in version 1.9 to speed up the command (if n is about 80 and k about 40, for example, the time it took to look up and/or calculate the [...]
+
+<p><a id="X839CFE4C7A567D4D" name="X839CFE4C7A567D4D"></a></p>
+
+<h5>5.2-13 OptimalityCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OptimalityCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">OptimalityCode</code> returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function <code class="code">UpperBound</code> is not always equal to the actual upper bound A(n,d) thus the result may not be equal to 0 even if the code is optimal!</p>
+
+<p><code class="code">OptimalityLinearCode</code> is similar but applies only to linear codes.</p>
+
+<p><a id="X871508567CB34D96" name="X871508567CB34D96"></a></p>
+
+<h5>5.2-14 BestKnownLinearCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BestKnownLinearCode</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BestKnownLinearCode</code> returns the best known (as of 11 May 2006) linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The function uses the tables described in section <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>) to construct this code.</p>
+
+<p>This command can also be called using the syntax <code class="code">BestKnownLinearCode( rec )</code>, where <var class="Arg">rec</var> must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function <code class="code">BoundsMinimumDistance</code> (see <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13< [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> C1 = BinaryGolayCode();
+false     # it's constructed differently
+gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G1 := MutableCopyMat(GeneratorMat(C1));;
+gap> PutStandardForm(G1);
+()
+gap> Display(G1);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+gap> C2 := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> G2 := MutableCopyMat(GeneratorMat(C2));;
+gap> PutStandardForm(G2);
+()
+gap> Display(G2);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+## Despite their generator matrices are different, they are equivalent codes, see below.
+gap> IsEquivalent(C1,C2);
+true
+gap> CodeIsomorphism(C1,C2);
+(4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
+gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
+a linear [81,77,3]2..3 shortened code of
+a linear [85,81,3]1 Hamming (4,4) code over GF(4)
+gap> C:=BestKnownLinearCode(174,72);
+a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
+gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
+rec( n := 81, k := 77, q := 4, 
+  references := rec( Ham := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ], 
+      cap := [ "%T this reference is unknown, for more info", 
+          "%T contact A.E. Brouwer (aeb at cwi.nl)" ] ), 
+  construction := [ (Operation "ShortenedCode"), 
+      [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
+  lowerBound := 3, 
+  lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
+      "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
+  upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
+      "Ub(18,14)=3, reference: cap" ] )
+gap> C := BestKnownLinearCode( bounds );
+a linear [81,77,3]2..3 shortened code
+gap> C = BestKnownLinearCode(81, 77, GF(4) );
+true
+</pre></td></tr></table>
+
+<p><a id="X858721967BE44000" name="X858721967BE44000"></a></p>
+
+<h4>5.3 <span class="Heading">
+Gabidulin Codes
+</span></h4>
+
+<p>These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak <a href="chapBib.html#biBGDT91">[GDT91]</a>. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article.</p>
+
+<p>Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long.</p>
+
+<p><a id="X79BE5D497CB2E59E" name="X79BE5D497CB2E59E"></a></p>
+
+<h5>5.3-1 GabidulinCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GabidulinCode</code>( <var class="Arg">m, w1, w2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GabidulinCode</code> yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum distance 3 and covering radius 2. <var class="Arg">w1</var> and <var class="Arg">w2</var> should be elements of GF(2^m-2).</p>
+
+<p><a id="X873950F67D4A9184" name="X873950F67D4A9184"></a></p>
+
+<h5>5.3-2 EnlargedGabidulinCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EnlargedGabidulinCode</code>( <var class="Arg">m, w1, w2, e</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EnlargedGabidulinCode</code> yields a code of length 7. 2^m-2-2, redundancy 2m, minimum distance 3 and covering radius 2. <var class="Arg">w1</var> and <var class="Arg">w2</var> are elements of GF(2^m-2). <var class="Arg">e</var> is an element of GF(2^m).</p>
+
+<p><a id="X7F5BE77B7F343182" name="X7F5BE77B7F343182"></a></p>
+
+<h5>5.3-3 DavydovCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DavydovCode</code>( <var class="Arg">r, v, ei, ej</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DavydovCode</code> yields a code of length 2^v + 2^r-v - 3, redundancy <var class="Arg">r</var>, minimum distance 4 and covering radius 2. <var class="Arg">v</var> is an integer between 2 and r-2. <var class="Arg">ei</var> and <var class="Arg">ej</var> are elements of GF(2^v) and GF(2^r-v), respectively.</p>
+
+<p><a id="X845B4DBE83288D2D" name="X845B4DBE83288D2D"></a></p>
+
+<h5>5.3-4 TombakCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TombakCode</code>( <var class="Arg">m, e, beta, gamma, w1, w2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TombakCode</code> yields a code of length 15 * 2^m-3 - 3, redundancy 2m, minimum distance 4 and covering radius 2. <var class="Arg">e</var> is an element of GF(2^m). <var class="Arg">beta</var> and <var class="Arg">gamma</var> are elements of GF(2^m-1). <var class="Arg">w1</var> and <var class="Arg">w2</var> are elements of GF(2^m-3).</p>
+
+<p><a id="X7D6583347C0D4292" name="X7D6583347C0D4292"></a></p>
+
+<h5>5.3-5 EnlargedTombakCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EnlargedTombakCode</code>( <var class="Arg">m, e, beta, gamma, w1, w2, u</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EnlargedTombakCode</code> yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1, minimum distance 4 and covering radius 2. The parameters <var class="Arg">m</var>, <var class="Arg">e</var>, <var class="Arg">beta</var>, <var class="Arg">gamma</var>, <var class="Arg">w1</var> and <var class="Arg">w2</var> are defined as in <code class="code">TombakCode</code>. <var class="Arg">u</var> is an element of GF(2^m-1).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
+a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
+gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
+a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
+gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
+a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
+gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
+a linear [57,47,4]2 Tombak code (m=5) over GF(2)
+gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
+> Z(4)^0, Z(4)^0, Z(32)^23 );
+a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X81F6E4A785F368B0" name="X81F6E4A785F368B0"></a></p>
+
+<h4>5.4 <span class="Heading">
+Golay Codes
+</span></h4>
+
+<p>" The Golay code is probably the most important of all codes for both practical and theoretical reasons. " (<a href="chapBib.html#biBMS83">[MS83]</a>, pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter.</p>
+
+<p><a id="X80ED89C079CD0D09" name="X80ED89C079CD0D09"></a></p>
+
+<h5>5.4-1 BinaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BinaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BinaryGolayCode</code> returns a binary Golay code. This is a perfect [23,12,7] code. It is also cyclic, and has generator polynomial g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11. Extending it results in an extended Golay code (see <code class="func">ExtendedBinaryGolayCode</code> (<a href="chap5.html#X84520C7983538806"><b>5.4-2</b></a>)). There's also the ternary Golay code (see <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
+true
+gap> IsPerfectCode(C);
+true 
+gap> IsCyclicCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X84520C7983538806" name="X84520C7983538806"></a></p>
+
+<h5>5.4-2 ExtendedBinaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedBinaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedBinaryGolayCode</code> returns an extended binary Golay code. This is a [24,12,8] code. Puncturing in the last position results in a perfect binary Golay code (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>)). The code is self-dual.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedBinaryGolayCode();
+a linear [24,12,8]4 extended binary Golay code over GF(2)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [23,12,7]3 punctured code
+gap> P = BinaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+
+</pre></td></tr></table>
+
+<p><a id="X7E0CCCD7866ADB94" name="X7E0CCCD7866ADB94"></a></p>
+
+<h5>5.4-3 TernaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TernaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">TernaryGolayCode</code> returns a ternary Golay code. This is a perfect [11,6,5] code. It is also cyclic, and has generator polynomial g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see <code class="func">ExtendedTernaryGolayCode</code> (<a href="chap5.html#X81088A66816BCAE4"><b>5.4-4</b></a>)). There's also the binary Golay code (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=TernaryGolayCode();
+a cyclic [11,6,5]2 ternary Golay code over GF(3)
+gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
+true 
+gap> IsCyclicCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X81088A66816BCAE4" name="X81088A66816BCAE4"></a></p>
+
+<h5>5.4-4 ExtendedTernaryGolayCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedTernaryGolayCode</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedTernaryGolayCode</code> returns an extended ternary Golay code. This is a [12,6,6] code. Puncturing this code results in a perfect ternary Golay code (see <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)). The code is self-dual.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedTernaryGolayCode();
+a linear [12,6,6]3 extended ternary Golay code over GF(3)
+gap> IsSelfDualCode(C);
+true
+gap> P := PuncturedCode(C);
+a linear [11,6,5]2 punctured code
+gap> P = TernaryGolayCode();
+true 
+gap> IsCyclicCode(C);
+false
+</pre></td></tr></table>
+
+<p><a id="X8366CC3685F0BC85" name="X8366CC3685F0BC85"></a></p>
+
+<h4>5.5 <span class="Heading">
+Generating Cyclic Codes
+</span></h4>
+
+<p>The elements of a cyclic code C are all multiples of a ('generator') polynomial g(x), where calculations are carried out modulo x^n-1. Therefore, as polynomials in x, the elements always have degree less than n. A cyclic code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The unique monic polynomial of least degree that generates C is called the <em>generator polynomial</em> of C. It is a divisor of the polynomial x^n-1.</p>
+
+<p>The <em>check polynomial</em> is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore it is also a divisor of x^n-1. The check polynomial has the property that</p>
+
+<p class="pcenter">
+c(x)h(x) \equiv  0 \pmod{x^n-1},
+</p>
+
+<p>for every codeword c(x)in C.</p>
+
+<p>The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions.</p>
+
+<p>Two of the Golay codes already described are cyclic (see <code class="func">BinaryGolayCode</code> (<a href="chap5.html#X80ED89C079CD0D09"><b>5.4-1</b></a>) and <code class="func">TernaryGolayCode</code> (<a href="chap5.html#X7E0CCCD7866ADB94"><b>5.4-3</b></a>)). For example, the <strong class="pkg">GUAVA</strong> record for a binary Golay code contains the generator polynomial:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BinaryGolayCode();
+a cyclic [23,12,7]3 binary Golay code over GF(2)
+gap> NamesOfComponents(C);
+[ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
+  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
+  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
+  "boundsCoveringRadius", "MinimumWeightOfGenerators", 
+  "UpperBoundOptimalMinimumDistance" ]
+gap> C!.GeneratorPol;
+x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0
+</pre></td></tr></table>
+
+<p>Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>), <code class="func">BCHCode</code> (<a href="chap5.html#X7C6BB07C87853C00"><b>5.5-4</b></a>), <code class="func">ReedSolomonCode</code> (<a href="chap5.html#X838F3CB3872CEF95"><b>5.5-5</b></a>) and <code class="func">QRCode</code> (<a href="chap5.htm [...]
+
+<p>Finally we describe the trivial codes (see <code class="func">WholeSpaceCode</code> (<a href="chap5.html#X7BC245E37EB7B23F"><b>5.5-11</b></a>), <code class="func">NullCode</code> (<a href="chap5.html#X7B4EF2017B2C61AD"><b>5.5-12</b></a>), <code class="func">RepetitionCode</code> (<a href="chap5.html#X83C5F8FE7827EAA7"><b>5.5-13</b></a>)), and the command <code class="code">CyclicCodes</code> which lists all cyclic codes (<code class="func">CyclicCodes</code> (<a href="chap5.html#X82FA [...]
+
+<p><a id="X853D34A5796CEB73" name="X853D34A5796CEB73"></a></p>
+
+<h5>5.5-1 GeneratorPolCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneratorPolCode</code>( <var class="Arg">g, n[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneratorPolCode</code> creates a cyclic code with a generator polynomial <var class="Arg">g</var>, word length <var class="Arg">n</var>, over <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code.</p>
+
+<p>If <var class="Arg">g</var> is not a divisor of x^n-1, it cannot be a generator polynomial. In that case, a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the greatest common divisor of <var class="Arg">g</var> and x^n-1. This is a valid generator polynomial that generates the ideal (g). See <code class="func">Generating Cyclic Codes</code> (<a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
+Z(2)^0+x^2
+gap> C1 := GeneratorPolCode(P, 7, GF(2));
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C1 );
+Z(2)^0+x
+gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
+a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
+gap> GeneratorPol( C2 );
+Z(2)^0+x
+</pre></td></tr></table>
+
+<p><a id="X82440B78845F7F6E" name="X82440B78845F7F6E"></a></p>
+
+<h5>5.5-2 CheckPolCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CheckPolCode</code>( <var class="Arg">h, n[, name], F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CheckPolCode</code> creates a cyclic code with a check polynomial <var class="Arg">h</var>, word length <var class="Arg">n</var>, over <var class="Arg">F</var>. <var class="Arg">name</var> can contain a short description of the code (as a string).</p>
+
+<p>If <var class="Arg">h</var> is not a divisor of x^n-1, it cannot be a check polynomial. In that case, a code is created with check polynomial gcd( h, x^n-1 ), i.e. the greatest common divisor of <var class="Arg">h</var> and x^n-1. This is a valid check polynomial that yields the same elements as the ideal (h). See <a href="chap5.html#X8366CC3685F0BC85"><b>5.5</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
+-Z(3)^0+x_1^2
+gap> H := CheckPolCode(P, 7, GF(3));
+a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
+gap> CheckPol(H);
+-Z(3)^0+x_1
+gap> Gcd(P, X(GF(3))^7-1);
+-Z(3)^0+x_1
+</pre></td></tr></table>
+
+<p><a id="X818F0E6583E01D4B" name="X818F0E6583E01D4B"></a></p>
+
+<h5>5.5-3 RootsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RootsCode</code>( <var class="Arg">n, list</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see <code class="func">BCHCode</code> (<a href="chap5.html#X7C6BB07C87853C00"><b>5.5-4</b></a>), <code class="func">ReedSolomonCode</code> (<a href="chap5.html#X838F3CB3872CEF95"><b>5.5-5</b></a>) and <code class="func">QRCode</code> (<a href="chap5.html#X825F42F68179D2AB"><b>5.5-7</b></a>)). The user can give a length of the code <var class="Arg">n</var> and a prescribed set of zeros. The argument <var c [...]
+
+<p>This command can also be called with the syntax <code class="code">RootsCode( n, list, q )</code>. In this second form, the second argument is a list of integers, ranging from 0 to n-1. The resulting code will be over a field GF(q). <strong class="pkg">GUAVA</strong> calculates a primitive n^th root of unity, alpha, in the extension field of GF(q). It uses the set of the powers of alpha in the list as a prescribed set of zeros.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := PrimitiveUnityRoot( 3, 14 );
+Z(3^6)^52
+gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
+a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
+gap> MinimumDistance( C1 );
+4
+gap> b := PrimitiveUnityRoot( 2, 15 );
+Z(2^4)
+gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
+a cyclic [15,7,5]3..5 code defined by roots over GF(2)
+gap> C2 = BCHCode( 15, 5, GF(2) );
+true 
+C3 := RootsCode( 4, [ 1, 2 ], 5 );
+RootsOfCode( C3 );
+C3 = ReedSolomonCode( 4, 3 );
+
+</pre></td></tr></table>
+
+<p><a id="X7C6BB07C87853C00" name="X7C6BB07C87853C00"></a></p>
+
+<h5>5.5-4 BCHCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BCHCode</code>( <var class="Arg">n[, b], delta, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">BCHCode</code> returns a 'Bose-Chaudhuri-Hockenghem code' (or <em>BCH code</em> for short). This is the largest possible cyclic code of length <var class="Arg">n</var> over field <var class="Arg">F</var>, whose generator polynomial has zeros</p>
+
+<p class="pcenter">
+a^{b},a^{b+1}, ..., a^{b+delta-2}, 
+</p>
+
+<p>where a is a primitive n^th root of unity in the splitting field GF(q^m), <var class="Arg">b</var> is an integer 0<= b<= n-delta+1 and m is the multiplicative order of q modulo <var class="Arg">n</var>. (The integers b,...,b+delta-2 typically lie in the range 1,...,n-1.) Default value for <var class="Arg">b</var> is 1, though the algorithm allows b=0. The length <var class="Arg">n</var> of the code and the size q of the field must be relatively prime. The generator polynomial is [...]
+
+<p class="pcenter">
+a^{b}, a^{b+1}, ..., a^{b+delta-2}.
+</p>
+
+<p>The set of zeroes of the generator polynomial is equal to the union of the sets</p>
+
+<p class="pcenter">
+\{a^x\ |\ x \in C_k\},
+</p>
+
+<p>where C_k is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2 (see <code class="func">CyclotomicCosets</code> (<a href="chap7.html#X7AEA9F807E6FFEFF"><b>7.5-12</b></a>)).</p>
+
+<p>Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes), and n=q^m-1 (known as 'primitive' BCH codes). <strong class="pkg">GUAVA</strong> calculates the largest value of d for which the BCH code with designed distance d coincides with the BCH code with designed distance <var class="Arg">delta</var>. This distance d is called the <em>Bose distance</em> of the code. The true minimum distance of the code is greater than or equal to the Bose distance.</p>
+
+<p>Printed are the designed distance (to be precise, the Bose distance) d, and the starting power b.</p>
+
+<p>The Sugiyama decoding algorithm has been implemented for this code (see <code class="func">Decode</code> (<a href="chap4.html#X7A42FF7D87FC34AC"><b>4.10-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 3, 5, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> DesignedDistance( C1 );
+7
+gap> C2 := BCHCode( 23, 2, GF(2) );
+a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
+gap> DesignedDistance( C2 );       
+5
+gap> MinimumDistance(C2);
+7 
+</pre></td></tr></table>
+
+<p>See <code class="func">RootsCode</code> (<a href="chap5.html#X818F0E6583E01D4B"><b>5.5-3</b></a>) for a more general construction.</p>
+
+<p><a id="X838F3CB3872CEF95" name="X838F3CB3872CEF95"></a></p>
+
+<h5>5.5-5 ReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReedSolomonCode</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReedSolomonCode</code> returns a 'Reed-Solomon code' of length <var class="Arg">n</var>, designed distance <var class="Arg">d</var>. This code is a primitive narrow-sense BCH code over the field GF(q), where q=n+1. The dimension of an RS code is n-d+1. According to the Singleton bound (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>)) the dimension cannot be greater than this, so the true minimum distance of [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedSolomonCode( 3, 2 );
+a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
+gap> IsCyclicCode(C1);
+true
+gap> C2 := ReedSolomonCode( 4, 3 );
+a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
+gap> RootsOfCode( C2 );
+[ Z(5), Z(5)^2 ]
+gap> IsMDSCode(C2);
+true 
+</pre></td></tr></table>
+
+<p>See <code class="func">GeneralizedReedSolomonCode</code> (<a href="chap5.html#X810AB3DB844FFCE9"><b>5.6-2</b></a>) for a more general construction.</p>
+
+<p><a id="X8730B90A862A3B3E" name="X8730B90A862A3B3E"></a></p>
+
+<h5>5.5-6 ExtendedReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedReedSolomonCode</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedReedSolomonCode</code> creates a Reed-Solomon code of length n-1 with designed distance d-1 and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>) function over a Reed-Solomon code will take considerably long time.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := ExtendedReedSolomonCode(17, 13);
+a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
+gap> IsMDSCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X825F42F68179D2AB" name="X825F42F68179D2AB"></a></p>
+
+<h5>5.5-7 QRCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QRCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QRCode</code> returns a quadratic residue code. If <var class="Arg">F</var> is a field GF(q), then q must be a quadratic residue modulo <var class="Arg">n</var>. That is, an x exists with x^2 = q mod n. Both <var class="Arg">n</var> and q must be primes. Its generator polynomial is the product of the polynomials x-a^i. a is a primitive n^th root of unity, and i is an integer in the set of quadratic residues modulo <var class="Arg">n</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := QRCode( 7, GF(2) );
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
+true
+gap> IsCyclicCode(C1);
+true
+gap> IsCyclicCode(HammingCode( 3, GF(2) ));
+false
+gap> C2 := QRCode( 11, GF(3) );
+a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
+gap> C2 = TernaryGolayCode();
+true 
+gap> Q1 := QRCode( 7, GF(2));
+a cyclic [7,4,3]1 quadratic residue code over GF(2)
+gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
+Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
+[ 168, 42 ]
+</pre></td></tr></table>
+
+<p><a id="X8764ABCF854C695E" name="X8764ABCF854C695E"></a></p>
+
+<h5>5.5-8 QQRCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QQRCodeNC</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QQRCodeNC</code> is the same as <code class="code">QQRCode</code>, except that it uses <code class="code">GeneratorMatCodeNC</code> instead of <code class="code">GeneratorMatCode</code>.</p>
+
+<p><a id="X7F4C3AD2795A8D7A" name="X7F4C3AD2795A8D7A"></a></p>
+
+<h5>5.5-9 QQRCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QQRCode</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QQRCode</code> returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel <a href="chapBib.html#biBBM03">[BMd)]</a>. The parameter <var class="Arg">p</var> must be a prime. Its generator matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top row is (0,x_1,...,x_p-1), where x_i=1 if and only if i is a quadratic residue mod p, and N is a px circulant matrix whose top row is (0,y_1,...,y_p-1), where x_i+y_i=1 for all i.  [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := QQRCode( 7);
+a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
+gap> G1:=GeneratorMat(C1);;
+gap> Display(G1);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 . 1 1 1 . . . . 1 1 1 . 1
+ . . . 1 1 . 1 . 1 1 . . . 1
+ . . 1 . 1 1 1 1 . 1 . . 1 1
+ . . . . . . . 1 . . 1 1 1 .
+ . . . . . . . . . 1 1 1 . 1
+ . . . . . . . . 1 . . 1 1 1
+gap> Display(C1!.DoublyCirculant);
+ . 1 1 . 1 . . . . . 1 . 1 1
+ 1 1 . 1 . . . . . 1 . 1 1 .
+ 1 . 1 . . . 1 . 1 . 1 1 . .
+ . 1 . . . 1 1 1 . 1 1 . . .
+ 1 . . . 1 1 . . 1 1 . . . 1
+ . . . 1 1 . 1 1 1 . . . 1 .
+ . . 1 1 . 1 . 1 . . . 1 . 1
+gap> MinimumDistance(C1);
+4
+gap> C2 := QQRCode( 29); MinimumDistance(C2);
+a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
+12
+gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
+[ permutation group of size 812 with 4 generators ]
+[ 812, 7 ]
+</pre></td></tr></table>
+
+<p><a id="X7F3B8CC8831DA0E4" name="X7F3B8CC8831DA0E4"></a></p>
+
+<h5>5.5-10 FireCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FireCode</code>( <var class="Arg">g, b</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">FireCode</code> constructs a (binary) Fire code. <var class="Arg">g</var> is a primitive polynomial of degree m, and a factor of x^r-1. <var class="Arg">b</var> an integer 0 <= b <= m not divisible by r, that determines the burst length of a single error burst that can be corrected. The argument <var class="Arg">g</var> can be a polynomial with base ring GF(2), or a list of coefficients in GF(2). The generator polynomial of the code is defined as the product o [...]
+
+<p>Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If F=GF(q) and fin F[x] then we say f has <em>order</em> e if f(x)|(x^e-1). A <em>Fire code</em> is a cyclic code over F with generator polynomial g(x)= (x^2t-1-1)p(x), where p(x) does not divide x^2t-1-1 and satisfies deg(p(x))>= t. The length of such a code is the order of g(x). Non-binary Fire codes have not been implemented.</p>
+
+<p>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
+Z(2)^0+x^2+x^3
+gap> Factors( G );
+[ Z(2)^0+x^2+x^3 ]
+gap> C := FireCode( G, 3 );
+a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
+gap> MinimumDistance( C );
+4     # Still it can correct bursts of length 3 
+</pre></td></tr></table>
+
+<p><a id="X7BC245E37EB7B23F" name="X7BC245E37EB7B23F"></a></p>
+
+<h5>5.5-11 WholeSpaceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WholeSpaceCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">WholeSpaceCode</code> returns the cyclic whole space code of length <var class="Arg">n</var> over <var class="Arg">F</var>. This code consists of all polynomials of degree less than <var class="Arg">n</var> and coefficients in <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := WholeSpaceCode( 5, GF(3) );
+a cyclic [5,5,1]0 whole space code over GF(3)
+</pre></td></tr></table>
+
+<p><a id="X7B4EF2017B2C61AD" name="X7B4EF2017B2C61AD"></a></p>
+
+<h5>5.5-12 NullCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NullCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">NullCode</code> returns the zero-dimensional nullcode with length <var class="Arg">n</var> over <var class="Arg">F</var>. This code has only one word: the all zero word. It is cyclic though!</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := NullCode( 5, GF(3) );
+a cyclic [5,0,5]5 nullcode over GF(3)
+gap> AsSSortedList( C );
+[ [ 0 0 0 0 0 ] ]
+</pre></td></tr></table>
+
+<p><a id="X83C5F8FE7827EAA7" name="X83C5F8FE7827EAA7"></a></p>
+
+<h5>5.5-13 RepetitionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RepetitionCode</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RepetitionCode</code> returns the cyclic repetition code of length <var class="Arg">n</var> over <var class="Arg">F</var>. The code has as many elements as <var class="Arg">F</var>, because each codeword consists of a repetition of one of these elements.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := RepetitionCode( 3, GF(5) );
+a cyclic [3,1,3]2 repetition code over GF(5)
+gap> AsSSortedList( C );
+[ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
+gap> IsPerfectCode( C );
+false
+gap> IsMDSCode( C );
+true 
+</pre></td></tr></table>
+
+<p><a id="X82FA9F65854D98A6" name="X82FA9F65854D98A6"></a></p>
+
+<h5>5.5-14 CyclicCodes</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclicCodes</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CyclicCodes</code> returns a list of all cyclic codes of length <var class="Arg">n</var> over <var class="Arg">F</var>. It constructs all possible generator polynomials from the factors of x^n-1. Each combination of these factors yields a generator polynomial after multiplication.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CyclicCodes(3,GF(3));
+[ a cyclic [3,3,1]0 enumerated code over GF(3), 
+a cyclic [3,2,1..2]1 enumerated code over GF(3), 
+a cyclic [3,1,3]2 enumerated code over GF(3), 
+a cyclic [3,0,3]3 enumerated code over GF(3) ]
+</pre></td></tr></table>
+
+<p><a id="X8263CE4A790D294A" name="X8263CE4A790D294A"></a></p>
+
+<h5>5.5-15 NrCyclicCodes</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> NrCyclicCodes</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">NrCyclicCodes</code> calculates the number of cyclic codes of length <var class="Arg">n</var> over field <var class="Arg">F</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> NrCyclicCodes( 23, GF(2) );
+8
+gap> codelist := CyclicCodes( 23, GF(2) );
+[ a cyclic [23,23,1]0 enumerated code over GF(2), 
+  a cyclic [23,22,1..2]1 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,0,23]23 enumerated code over GF(2), 
+  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2), 
+  a cyclic [23,1,23]11 enumerated code over GF(2), 
+  a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
+gap> BinaryGolayCode() in codelist;
+true
+gap> RepetitionCode( 23, GF(2) ) in codelist;
+true
+gap> CordaroWagnerCode( 23 ) in codelist;
+false    # This code is not cyclic 
+</pre></td></tr></table>
+
+<p><a id="X79826B16785E8BD3" name="X79826B16785E8BD3"></a></p>
+
+<h5>5.5-16 QuasiCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> QuasiCyclicCode</code>( <var class="Arg">G, s, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">QuasiCyclicCode( G, k, F )</code> generates a rate 1/m quasi-cyclic code over field <var class="Arg">F</var>. The input <var class="Arg">G</var> is a list of univariate polynomials and m is the cardinality of this list. Note that m must be at least 2. The input <var class="Arg">s</var> is the size of each circulant and it may not necessarily be the same as the code dimension k, i.e. k le s.</p>
+
+<p>There also exists another version, <code class="code">QuasiCyclicCode( G, s )</code> which produces quasi-cyclic codes over F_2 only. Here the parameter <var class="Arg">s</var> holds the same definition and the input <var class="Arg">G</var> is a list of integers, where each integer is an octal representation of a binary univariate polynomial.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> #
+gap> # This example show the case for k = s
+gap> #
+gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
+Z(2)^0
+gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
+x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
+gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
+x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
+gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
+x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
+Z(2)^0
+gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
+x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
+a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
+gap> MinimumDistance(C);
+29
+gap> Display(C);
+a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
+gap> #
+gap> # This example show the case for k < s
+gap> #
+gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
+-x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
+gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
+x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
+gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
+x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
+gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
+a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
+gap> MinimumDistance(C);
+34
+gap> Display(C);
+a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
+gap> #
+gap> # This example show the binary case using octal representation
+gap> #
+gap> L1 := 001;;   # 0 000 001
+gap> L2 := 013;;   # 0 001 011
+gap> L3 := 015;;   # 0 001 101
+gap> L4 := 077;;   # 0 111 111
+gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
+a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
+gap> MinimumDistance(C);
+12
+gap> Display(C);
+a linear [28,7,12]8..14 quasi-cyclic code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X7BFEDA52835A601D" name="X7BFEDA52835A601D"></a></p>
+
+<h5>5.5-17 CyclicMDSCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclicMDSCode</code>( <var class="Arg">q, m, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Given the input parameters <var class="Arg">q</var>, <var class="Arg">m</var> and <var class="Arg">k</var>, this function returns a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k can be used, otherwise only odd value of k is accepted.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=CyclicMDSCode(2,6,24);
+a cyclic [65,24,42]31..41 MDS code over GF(64)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(5,3,77);
+a cyclic [126,77,50]35..49 MDS code over GF(125)
+gap> IsMDSCode(C);
+true
+gap> C:=CyclicMDSCode(3,3,25);
+a cyclic [28,25,4]2..3 MDS code over GF(27)
+gap> GeneratorPol(C);
+x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
+gap>
+</pre></td></tr></table>
+
+<p><a id="X7F40AF3B81C252DC" name="X7F40AF3B81C252DC"></a></p>
+
+<h5>5.5-18 FourNegacirculantSelfDualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FourNegacirculantSelfDualCode</code>( <var class="Arg">ax, bx, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A four-negacirculant self-dual code has a generator matrix G of the the following form</p>
+
+
+<pre class="normal">
+
+    -                    -
+    |        |  A  |  B  |
+G = |  I_2k  |-----+-----|
+    |        | -B^T| A^T |
+    -                    -
+		
+</pre>
+
+<p>where AA^T + BB^T = -I_k and A, B and their transposed are all k x k negacirculant matrices. The generator matrix G returns a [2k, k, d]_q self-dual code over GF(q). For discussion on four-negacirculant self-dual codes, refer to <a href="chapBib.html#biBHHKK07">[HHKK07]</a>.</p>
+
+<p>The input parameters <var class="Arg">ax</var> and <var class="Arg">bx</var> are the defining polynomials over GF(q) of negacirculant matrices A and B respectively. The last parameter <var class="Arg">k</var> is the dimension of the code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
+-x_1^4-x_1+Z(3)^0
+gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
+x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
+gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
+gap> MinimumDistance(C);;
+gap> CoveringRadius(C);;
+gap> IsSelfDualCode(C);
+true
+gap> Display(C);
+a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
+gap> Display( GeneratorMat(C) );
+ 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
+ . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
+ . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
+ . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
+ . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
+ . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
+ . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
+ . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
+ . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
+ . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
+ . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
+ . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
+ . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
+ . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
+gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
+x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
+gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
+Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
+gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
+a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
+gap> IsSelfDualCode(C);
+true
+</pre></td></tr></table>
+
+<p><a id="X87137A257E761291" name="X87137A257E761291"></a></p>
+
+<h5>5.5-19 FourNegacirculantSelfDualCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> FourNegacirculantSelfDualCodeNC</code>( <var class="Arg">ax, bx, k</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function is the same as <code class="code">FourNegacirculantSelfDualCode</code>, except this version is faster as it does not estimate the minimum distance and covering radius of the code.</p>
+
+<p><a id="X850A28C579137220" name="X850A28C579137220"></a></p>
+
+<h4>5.6 <span class="Heading">
+Evaluation Codes
+</span></h4>
+
+<p><a id="X78E078567D19D433" name="X78E078567D19D433"></a></p>
+
+<h5>5.6-1 EvaluationCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationCode</code>( <var class="Arg">P, L, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">F</var> is a finite field, <var class="Arg">L</var> is a list of rational functions in R=F[x_1,...,x_r], <var class="Arg">P</var> is a list of n points in F^r at which all of the functions in <var class="Arg">L</var> are defined. <br /> Output: The 'evaluation code' C, which is the image of the evalation map</p>
+
+<p class="pcenter">
+Eval_P:span(L)\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L. The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.EvaluationMat</code> (not the same as the generator matrix in general), <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.basis</code> (namely <var class="Arg">L</var>), and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,2);;
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
+gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
+   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
+   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
+gap> C:=EvaluationCode(Pts,L,R);
+a linear [11,8,1..3]2..3  evaluation code over GF(11)
+gap> MinimumDistance(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X810AB3DB844FFCE9" name="X810AB3DB844FFCE9"></a></p>
+
+<h5>5.6-2 GeneralizedReedSolomonCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedSolomonCode</code>( <var class="Arg">P, k, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: R=F[x], where <var class="Arg">F</var> is a finite field, <var class="Arg">k</var> is a positive integer, <var class="Arg">P</var> is a list of n points in F. <br /> Output: The C which is the image of the evaluation map</p>
+
+<p class="pcenter">
+Eval_P:F[x]_k\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f ranges over the space F[x]_k of all polynomials of degree less than k.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.degree</code> (namely <var class="Arg">k</var>), and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+<p>This code can be decoded using <code class="code">Decodeword</code>, which applies the special decoder method (the interpolation method), or using <code class="code">GeneralizedReedSolomonDecoderGao</code> which applies an algorithm of S. Gao (see <code class="func">GeneralizedReedSolomonDecoderGao</code> (<a href="chap4.html#X7D48DE2A84474C6A"><b>4.10-3</b></a>)). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen  [...]
+
+<p>The weighted version has implemented with the option <code class="code">GeneralizedReedSolomonCode(P,k,R,wts)</code>, where wts = [v_1, ..., v_n] is a sequence of n non-zero elements from the base field F of <var class="Arg">R</var>. See also the generalized Reed--Solomon code GRS_k(P, V) described in <a href="chapBib.html#biBMS83">[MS83]</a>, p.303.</p>
+
+<p>The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of <a href="chapBib.html#biBJH04">[JH04]</a>) has been implemented for generalized Reed-Solomon codes. See <code class="func">GeneralizedReedSolomonListDecoder</code> (<a href="chap4.html#X7CFF98D483502053"><b>4.10-4</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:=PolynomialRing(GF(11),["t"]);
+GF(11)[t]
+gap> P:=List([1,3,4,5,7],i->Z(11)^i);
+[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R);
+a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
+[ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
+gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
+a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
+gap> MinimumDistance(C);
+3
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X85B8699680B9D786" name="X85B8699680B9D786"></a></p>
+
+<h5>5.6-3 GeneralizedReedMullerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedReedMullerCode</code>( <var class="Arg">Pts, r, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedReedMullerCode</code> returns a 'Reed-Muller code' C with length |Pts| and order r. One considers (a) a basis of monomials for the vector space over F=GF(q) of all polynomials in F[x_1,...,x_d] of degree at most r, and (b) a set Pts of points in F^d. The generator matrix of the associated <em>Reed-Muller code</em> C is G=(f(p))_fin B,p in Pts. This code C is constructed using the command <code class="code">GeneralizedReedMullerCode(Pts,r,F)</code>. When P [...]
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">Pts</var>) and <code class="code">C!.degree</code> (namely <var class="Arg">r</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Pts:=ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
+  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
+  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
+  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
+a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X7EE68B58872D7E82" name="X7EE68B58872D7E82"></a></p>
+
+<h5>5.6-4 ToricPoints</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ToricPoints</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ToricPoints(n,F)</code> returns the points in (F^x)^n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> ToricPoints(2,GF(5));
+[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
+  [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
+  [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
+  [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
+  [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
+</pre></td></tr></table>
+
+<p><a id="X7B24BE418010F596" name="X7B24BE418010F596"></a></p>
+
+<h5>5.6-5 ToricCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ToricCode</code>( <var class="Arg">L, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns the toric codes as in D. Joyner <a href="chapBib.html#biBJo04">[Joy04]</a> (see also J. P. Hansen <a href="chapBib.html#biBHan99">[Han99]</a>). This is a truncated (generalized) Reed-Muller code. Here <var class="Arg">L</var> is a list of integral vectors and <var class="Arg">F</var> is the finite field. The size of <var class="Arg">F</var> must be different from 2.</p>
+
+<p>This command returns a record object <code class="code">C</code> with an extra component (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.exponents</code> (namely <var class="Arg">L</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=ToricCode([[1,0],[3,4]],GF(3));
+a linear [4,1,4]2 toric code over GF(3)
+gap> Display(GeneratorMat(C));
+ 1 1 2 2
+gap> Elements(C);
+[ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+<p><a id="X7AE2B2CD7C647990" name="X7AE2B2CD7C647990"></a></p>
+
+<h4>5.7 <span class="Heading">
+Algebraic geometric codes
+</span></h4>
+
+<p>Certain <strong class="pkg">GUAVA</strong> functions related to algebraic geometric codes are described in this section.</p>
+
+<p><a id="X802DD9FB79A9ACA7" name="X802DD9FB79A9ACA7"></a></p>
+
+<h5>5.7-1 AffineCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AffineCurve</code>( <var class="Arg">poly, ring</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function simply defines the data structure of an affine plane curve. In <strong class="pkg">GUAVA</strong>, an affine curve is a record <var class="Arg">crv</var> having two components: a polynomial <var class="Arg">poly</var>, accessed in <strong class="pkg">GUAVA</strong> by <var class="Arg">crv.polynomial</var>, and a polynomial ring over a field F in two variables <var class="Arg">ring</var>, accessed in <strong class="pkg">GUAVA</strong> by <var class="Arg">crv.ring</var>, c [...]
+
+<p>For example, for the ring, one could take Q}[x,y], and for the polynomial one could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y] for the ring and f(x,y)=y for the polynomial.</p>
+
+<p>(Not sure if F neeeds to be a field in fact ...)</p>
+
+<p>To compute its degree, simply use the <code class="func">DegreeMultivariatePolynomial</code> (<a href="chap7.html#X80433A4B792880EF"><b>7.6-2</b></a>) command.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+1
+gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+3
+gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
+gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
+2
+gap> q:=3;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
+gap>
+</pre></td></tr></table>
+
+<p>In GAP, a <em>point</em> on a curve defined by f(x,y)=0 is simply a list <var class="Arg">[a,b]</var> of elements of F satisfying this polynomial equation.</p>
+
+<p><a id="X857EFE567C05C981" name="X857EFE567C05C981"></a></p>
+
+<h5>5.7-2 AffinePointsOnCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AffinePointsOnCurve</code>( <var class="Arg">f, R, E</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AffinePointsOnCurve(f,R,E)</code> returns the points (x,y) in E^2 satisying f(x,y)=0, where <var class="Arg">f</var> is an element of R=F[x,y].</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);;
+gap> x:=indets[1];; y:=indets[2];;
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
+[ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
+  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
+  [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
+  [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]
+</pre></td></tr></table>
+
+<p><a id="X857E36ED814A40B8" name="X857E36ED814A40B8"></a></p>
+
+<h5>5.7-3 GenusCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GenusCurve</code>( <var class="Arg">crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If <var class="Arg">crv</var> represents f(x,y)=0, where f is a polynomial of degree d, then this function simply returns (d-1)(d-2)/2. At the present, the function does not check if the curve is singular (in which case the result may be false).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> a:=X(F);;
+gap> R1:=PolynomialRing(F,[a]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);;
+gap> b:=X(F);;
+gap> R2:=PolynomialRing(F,[a,b]);;
+gap> var2:=IndeterminatesOfPolynomialRing(R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
+gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
+rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
+gap> GenusCurve(crv);
+36
+
+</pre></td></tr></table>
+
+<p><a id="X8572A3037DA66F88" name="X8572A3037DA66F88"></a></p>
+
+<h5>5.7-4 GOrbitPoint </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GOrbitPoint </code>( <var class="Arg">GP</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><var class="Arg">P</var> must be a point in projective space P^n(F), <var class="Arg">G</var> must be a finite subgroup of GL(n+1,F), This function returns all (representatives of projective) points in the orbit G* P.</p>
+
+<p>The example below computes the orbit of the automorphism group on the Klein quartic over the field GF(43) on the ``point at infinity''.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R:= PolynomialRing( GF(43), 3 );;
+gap> vars:= IndeterminatesOfPolynomialRing(R);;
+gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
+gap> zz:=Z(43)^6;
+Z(43)^6
+gap> zzz:=Z(43);
+Z(43)
+gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
+[ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
+[ 0*Z(43), Z(43)^12, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
+gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
+[ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], 
+[ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
+gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
+>             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
+>             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
+[ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
+[ Z(43)^28, Z(43)^12, Z(43)^9 ], 
+[ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
+gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
+gap> Size(G);
+168
+gap> P:=[1,0,0]*zzz^0;
+[ Z(43)^0, 0*Z(43), 0*Z(43) ]
+gap> O:=GOrbitPoint(G,P);
+[ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
+[ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
+[ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
+[ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
+[ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
+[ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
+[ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
+[ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
+[ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
+[ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
+[ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
+[ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
+gap> Length(O);
+24
+
+</pre></td></tr></table>
+
+<p>Informally, a <em>divisor</em> on a curve is a formal integer linear combination of points on the curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the ``multiplicity'' of P_i in D) and P_i are (F-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the F-rational affine points on the curve. The <em>support</em> of a divisor D is simply the set of points which occurs in the sum defining D with non-zero ``multi [...]
+
+
+<ul>
+<li><p>the coefficients (the integer weights of the points in the support),</p>
+
+</li>
+<li><p>the support,</p>
+
+</li>
+<li><p>the curve, itself a record which has components: polynomial and polynomial ring.</p>
+
+</li>
+</ul>
+<p><a id="X79742B7183051D99" name="X79742B7183051D99"></a></p>
+
+<h5>5.7-5 DivisorOnAffineCurve</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorOnAffineCurve</code>( <var class="Arg">cdivsdivcrv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the command you use to define a divisor in <strong class="pkg">GUAVA</strong>. Of course, <var class="Arg">crv</var> is the curve on which the divisor lives, <var class="Arg">cdiv</var> is the list of coefficients (or ``multiplicities''), <var class="Arg">sdiv</var> is the list of points on <var class="Arg">crv</var> in the support.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=5;
+5
+gap> F:=GF(q);
+GF(5)
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);
+[ x_1, x_2 ]
+gap> x:=vars[1];
+x_1
+gap> y:=vars[2];
+x_2
+gap> crv:=AffineCurve(y^3-x^3-x-1,R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
+gap> Pts:=AffinePointsOnCurve(crv,R,F);;
+gap> supp:=[Pts[1],Pts[2]];
+[ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
+gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
+rec( coeffs := [ 1, -1 ], 
+     support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
+     curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
+                   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )
+
+</pre></td></tr></table>
+
+<p><a id="X8626E2B57D01F2DC" name="X8626E2B57D01F2DC"></a></p>
+
+<h5>5.7-6 DivisorAddition </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorAddition </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If D_1=m_1P_1+...+m_kP_k and D_2=n_1P_1+...+n_kP_k are divisors then D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k.</p>
+
+<p><a id="X865FE28D828C1EAD" name="X865FE28D828C1EAD"></a></p>
+
+<h5>5.7-7 DivisorDegree </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorDegree </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If D=m_1P_1+...+m_kP_k is a divisor then the <em>degree</em> is m_1+...+m_k.</p>
+
+<p><a id="X789DC358819A8F54" name="X789DC358819A8F54"></a></p>
+
+<h5>5.7-8 DivisorNegate </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorNegate </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X8688C0E187B5C7DB" name="X8688C0E187B5C7DB"></a></p>
+
+<h5>5.7-9 DivisorIsZero </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorIsZero </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X816A07997D9A7075" name="X816A07997D9A7075"></a></p>
+
+<h5>5.7-10 DivisorsEqual </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorsEqual </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Self-explanatory.</p>
+
+<p><a id="X857B89847A649A26" name="X857B89847A649A26"></a></p>
+
+<h5>5.7-11 DivisorGCD </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorGCD </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their greatest common divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve then their <em>greatest common divisor</em> is GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k. This function computes this quantity.</p>
+
+<p><a id="X82231CF08073695F" name="X82231CF08073695F"></a></p>
+
+<h5>5.7-12 DivisorLCM </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorLCM </code>( <var class="Arg">D1D2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their least common multiple is LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k are two divisors on a curve then their <em>least common multiple</em> is LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k. This function computes this quantity.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div1);
+10
+gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div2);
+10
+gap> div3:=DivisorAddition(div1,div2);
+rec( coeffs := [ 5, 3, 5, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div3);
+20
+gap> DivisorIsEffective(div1);
+true
+gap> DivisorIsEffective(div2);
+true
+gap>
+gap> ndiv1:=DivisorNegate(div1);
+rec( coeffs := [ -1, -2, -3, -4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> zdiv:=DivisorAddition(div1,ndiv1);
+rec( coeffs := [ 0, 0, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorIsZero(zdiv);
+true
+gap> div_gcd:=DivisorGCD(div1,div2);
+rec( coeffs := [ 1, 1, 2, 0, 0 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> div_lcm:=DivisorLCM(div1,div2);
+rec( coeffs := [ 4, 2, 3, 4, 3 ], 
+     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> DivisorDegree(div_gcd);
+4
+gap> DivisorDegree(div_lcm);
+16
+gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
+true
+
+</pre></td></tr></table>
+
+<p>Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the projective line P^1(F). If G leaves D unchanged (it may permute the points in the support of D but must preserve their sum in D) then the Riemann-Roch space L(D) is a G-module. The commands in this section help explore the G-module structure of L(D) in the case then the ground field F is finite.</p>
+
+<p><a id="X79C878697F99A10F" name="X79C878697F99A10F"></a></p>
+
+<h5>5.7-13 RiemannRochSpaceBasisFunctionP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RiemannRochSpaceBasisFunctionP1 </code>( <var class="Arg">PkR2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">R2</var> is a polynomial ring in two variables, say F[x,y]; <var class="Arg">P</var> is an element of the base field, say F; <var class="Arg">k</var> is an integer. Output: 1/(x-P)^k</p>
+
+<p><a id="X856DDA207EDDF256" name="X856DDA207EDDF256"></a></p>
+
+<h5>5.7-14 DivisorOfRationalFunctionP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorOfRationalFunctionP1 </code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here R = F[x,y] is a polynomial ring in the variables x,y and f is a rational function of x. Simply returns the principal divisor on P}^1 associated to f.</p>
+
+
+<table class="example">
+<tr><td><pre>
+
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> pt:=Z(11);
+Z(11)
+gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
+(Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
+gap> Df:=DivisorOfRationalFunctionP1(f,R2);
+rec( coeffs := [ -2 ], support := [ Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
+   )
+gap> Df.support;
+[ Z(11) ]
+gap> F:=GF(11);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> a:=vars[1];;
+gap> b:=vars[2];;
+gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
+gap> divf:=DivisorOfRationalFunctionP1(f,R);
+rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
+  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
+gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
+a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
+[  ]
+gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
+a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
+[ Z(11)^7, Z(11), Z(11), Z(11) ]
+
+</pre></td></tr></table>
+
+<p><a id="X878970A17E580224" name="X878970A17E580224"></a></p>
+
+<h5>5.7-15 RiemannRochSpaceBasisP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RiemannRochSpaceBasisP1 </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This returns the basis of the Riemann-Roch space L(D) associated to the divisor <var class="Arg">D</var> on the projective line P}^1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> B:=RiemannRochSpaceBasisP1(D);
+[ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
+(Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
+(Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
+  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
+(Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
+(Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
+gap> DivisorOfRationalFunctionP1(B[1],R2).support;
+[  ]
+gap> DivisorOfRationalFunctionP1(B[2],R2).support;
+[ Z(11)^2 ]
+gap> DivisorOfRationalFunctionP1(B[3],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[4],R2).support;
+[ Z(11)^3 ]
+gap> DivisorOfRationalFunctionP1(B[5],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[6],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[7],R2).support;
+[ Z(11)^7 ]
+gap> DivisorOfRationalFunctionP1(B[8],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[9],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[10],R2).support;
+[ Z(11) ]
+gap> DivisorOfRationalFunctionP1(B[11],R2).support;
+[ Z(11) ]
+
+</pre></td></tr></table>
+
+<p><a id="X807C52E67A440DEB" name="X807C52E67A440DEB"></a></p>
+
+<h5>5.7-16 MoebiusTransformation </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MoebiusTransformation </code>( <var class="Arg">AR</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The arguments are a 2x 2 matrix A with entries in a field F and a polynomial ring <var class="Arg">R</var>of one variable, say F[x]. This function returns the linear fractional transformatio associated to <var class="Arg">A</var>. These transformations can be composed with each other using GAP's <code class="code">Value</code> command.</p>
+
+<p><a id="X85A0419580ED0391" name="X85A0419580ED0391"></a></p>
+
+<h5>5.7-17 ActionMoebiusTransformationOnFunction </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ActionMoebiusTransformationOnFunction </code>( <var class="Arg">AfR2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The arguments are a 2x 2 matrix A with entries in a field F, a rational function <var class="Arg">f</var> of one variable, say in F(x), and a polynomial ring <var class="Arg">R2</var>, say F[x,y]. This function simply returns the composition of the function <var class="Arg">f</var> with the Möbius transformation of <var class="Arg">A</var>.</p>
+
+<p><a id="X7E48F9C67E7FB7B5" name="X7E48F9C67E7FB7B5"></a></p>
+
+<h5>5.7-18 ActionMoebiusTransformationOnDivisorP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ActionMoebiusTransformationOnDivisorP1 </code>( <var class="Arg">AD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>A Möbius transformation may be regarded as an automorphism of the projective line P^1. This function simply returns the image of the divisor <var class="Arg">D</var> under the Möbius transformation defined by <var class="Arg">A</var>, provided that <code class="code">IsActionMoebiusTransformationOnDivisorDefinedP1(A,D)</code> returns true.</p>
+
+<p><a id="X79FD980E7B24DB9C" name="X79FD980E7B24DB9C"></a></p>
+
+<h5>5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsActionMoebiusTransformationOnDivisorDefinedP1 </code>( <var class="Arg">AD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns true of none of the points in the support of the divisor <var class="Arg">D</var> is the pole of the Möbius transformation.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> A:=Z(11)^0*[[1,2],[1,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+false
+gap> A:=Z(11)^0*[[1,2],[3,4]];
+[ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
+gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
+true
+gap> ActionMoebiusTransformationOnDivisorP1(A,D);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> f:=MoebiusTransformation(A,R1);
+(a+Z(11))/(Z(11)^8*a+Z(11)^2)
+gap> ActionMoebiusTransformationOnFunction(A,f,R1);
+-Z(11)^0+Z(11)^3*a^-1
+
+</pre></td></tr></table>
+
+<p><a id="X823386037F450B0E" name="X823386037F450B0E"></a></p>
+
+<h5>5.7-20 DivisorAutomorphismGroupP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorAutomorphismGroupP1 </code>( <var class="Arg">D</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: A divisor <var class="Arg">D</var> on P^1(F), where F is a finite field. Output: A subgroup Aut(D)subset Aut(P^1) preserving <var class="Arg">D</var>.</p>
+
+<p>Very slow.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 2, 3, 4 ], 
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7305
+gap> IdGroup(agp);
+[ 10, 2 ]
+
+</pre></td></tr></table>
+
+<p><a id="X80EDF3D682E7EF3F" name="X80EDF3D682E7EF3F"></a></p>
+
+<h5>5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixRepresentationOnRiemannRochSpaceP1 </code>( <var class="Arg">gD</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: An element <var class="Arg">g</var> in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor <var class="Arg">D</var> on P^1(F), where F is a finite field. Output: a dx d matrix, where d = dim, L(D), representing the action of <var class="Arg">g</var> on L(D).</p>
+
+<p>Note: <var class="Arg">g</var> sends L(D) to r* L(D), where r is a polynomial of degree 1 depending on <var class="Arg">g</var> and <var class="Arg">D</var>.</p>
+
+<p>Also very slow.</p>
+
+<p>The GAP command <code class="code">BrauerCharacterValue</code> can be used to ``lift'' the eigenvalues of this matrix to the complex numbers.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> crvP1:=AffineCurve(b,R2);
+rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
+gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
+rec( coeffs := [ 1, 1, 1, 4 ],  
+     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
+     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
+gap> agp:=DivisorAutomorphismGroupP1(D);; time;
+7198
+gap> IdGroup(agp);
+[ 20, 5 ]
+gap> g:=Random(agp);
+[ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
+gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
+[ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
+  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
+[ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
+  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
+[ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
+gap> Display(rho);
+  1  .  .  .  .  .  .  .
+  1  .  .  2  .  .  .  .
+  7  . 10  .  .  .  .  .
+  5  6  .  .  .  .  .  .
+  4  .  .  . 10  .  .  .
+  5  .  .  .  3  1  .  .
+  9  .  .  .  7  1 10  .
+  3  .  .  .  8  8  6  1
+
+</pre></td></tr></table>
+
+<p><a id="X8777388C7885E335" name="X8777388C7885E335"></a></p>
+
+<h5>5.7-22 GoppaCodeClassical</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GoppaCodeClassical</code>( <var class="Arg">div, pts</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: A divisor <var class="Arg">div</var> on the projective line P}^1(F) over a finite field F and a list <var class="Arg">pts</var> of points P_1,...,P_nsubset F disjoint from the support of <var class="Arg">div</var>. <br /> Output: The classical (evaluation) Goppa code associated to this data. This is the code</p>
+
+<p class="pcenter">
+C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> a:=vars[1];;b:=vars[2];;
+gap> cdiv:=[ 1, 2, -1, -2 ];
+[ 1, 2, -1, -2 ]
+gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
+[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
+gap> crv:=rec(polynomial:=b,ring:=R2);
+rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
+gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
+rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
+  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
+gap> pts:=Difference(Elements(GF(11)),div.support);
+[ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
+gap> C:=GoppaCodeClassical(div,pts);
+a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
+gap> MinimumDistance(C);
+6
+</pre></td></tr></table>
+
+<p><a id="X8422A310854C09B0" name="X8422A310854C09B0"></a></p>
+
+<h5>5.7-23 EvaluationBivariateCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationBivariateCode</code>( <var class="Arg">pts, L, crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <code class="code">pts</code> is a set of affine points on <code class="code">crv</code>, <code class="code">L</code> is a list of rational functions on <code class="code">crv</code>. <br /> Output: The evaluation code associated to the points in <code class="code">pts</code> and functions in <code class="code">L</code>, but specifically for affine plane curves and this function checks if points are ``bad" (if so removes them from the list <code class="code">pts</code> automati [...]
+
+<p>Very similar to <code class="code">EvaluationCode</code> (see <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction).</p>
+
+<p><a id="X7B6C2BED8319C811" name="X7B6C2BED8319C811"></a></p>
+
+<h5>5.7-24 EvaluationBivariateCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvaluationBivariateCodeNC</code>( <var class="Arg">pts, L, crv</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>As in <code class="code">EvaluationBivariateCode</code> but does not check if the points are ``bad''.</p>
+
+<p>Input: <code class="code">pts</code> is a set of affine points on <code class="code">crv</code>, <code class="code">L</code> is a list of rational functions on <code class="code">crv</code>. <br /> Output: The evaluation code associated to the points in <code class="code">pts</code> and functions in <code class="code">L</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> q:=4;;
+gap> F:=GF(q^2);;
+gap> R:=PolynomialRing(F,2);;
+gap> vars:=IndeterminatesOfPolynomialRing(R);;
+gap> x:=vars[1];;
+gap> y:=vars[2];;
+gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
+rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
+gap> L:=[ x^0, x, x^2*y^-1 ];
+[ Z(2)^0, x_1, x_1^2/x_2 ]
+gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
+gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;
+
+
+ Automatically removed the following 'bad' points (either a pole or not 
+ on the curve):
+[ [ 0*Z(2), 0*Z(2) ] ]
+
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+52
+gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
+gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
+a linear [63,3,1..60]51..59  evaluation code over GF(16)
+48
+gap> C3:=EvaluationCode(P,L,R); time;
+a linear [63,3,1..56]51..59  evaluation code over GF(16)
+58
+gap> MinimumDistance(C1);
+56
+gap> MinimumDistance(C2);
+56
+gap> MinimumDistance(C3);
+56
+gap>
+</pre></td></tr></table>
+
+<p><a id="X842E227E8785168E" name="X842E227E8785168E"></a></p>
+
+<h5>5.7-25 OnePointAGCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> OnePointAGCode</code>( <var class="Arg">f, P, m, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">f</var> is a polynomial in R=F[x,y], where <var class="Arg">F</var> is a finite field, <var class="Arg">m</var> is a positive integer (the multiplicity of the `point at infinity' infty on the curve f(x,y)=0), <var class="Arg">P</var> is a list of n points on the curve over F. <br /> Output: The C which is the image of the evaluation map</p>
+
+<p class="pcenter">
+Eval_P:L(m \cdot \infty)\rightarrow F^n,
+</p>
+
+<p>given by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty) denotes the Riemann-Roch space of the divisor m * infty on the curve. This has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon depending on m and f(x,y). For more details on the Riemann-Roch space of the divisor m * infty see Proposition III.10.5 in Stichtenoth <a href="chapBib.html#biBSt93">[Sti93]</a>.</p>
+
+<p>This command returns a "record" object <code class="code">C</code> with several extra components (type <code class="code">NamesOfComponents(C)</code> to see them all): <code class="code">C!.points</code> (namely <var class="Arg">P</var>), <code class="code">C!.multiplicity</code> (namely <var class="Arg">m</var>), <code class="code">C!.curve</code> (namely <var class="Arg">f</var>) and <code class="code">C!.ring</code> (namely <var class="Arg">R</var>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R := PolynomialRing(F,["x","y"]);
+PolynomialRing(..., [ x, y ])
+gap> indets := IndeterminatesOfPolynomialRing(R);
+[ x, y ]
+gap> x:=indets[1]; y:=indets[2];
+x
+y
+gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
+gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
+a linear [11,8,1..0]2..3  one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
+gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
+a linear [9,6,1..4]2..3 one-point AG code over GF(11)
+gap> MinimumDistance(C);
+4
+</pre></td></tr></table>
+
+<p>See <code class="func">EvaluationCode</code> (<a href="chap5.html#X78E078567D19D433"><b>5.6-1</b></a>) for a more general construction.</p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap4.html">Previous Chapter</a>    <a href="chap6.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap6.html b/htm/chap6.html
new file mode 100644
index 0000000..3963c49
--- /dev/null
+++ b/htm/chap6.html
@@ -0,0 +1,983 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 6: Manipulating Codes</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap5.html">Previous Chapter</a>    <a href="chap7.html">Next Chapter</a>   </div>
+
+<p><a id="X866FC1117814B64D" name="X866FC1117814B64D"></a></p>
+<div class="ChapSects"><a href="chap6.html#X866FC1117814B64D">6. <span class="Heading">Manipulating Codes</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X8271A4697FDA97B2">6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X794679BE7F9EB5C1">6.1-1 ExtendedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E6E4DDA79574FDB">6.1-2 PuncturedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87691AB67FF5621B">6.1-3 EvenWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79577EB27BE8524B">6.1-4 PermutedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X87E5849784BC60D2">6.1-5 ExpurgatedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8134BE2B8478BE8A">6.1-6 AugmentedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B0A6E1F82686B43">6.1-7 RemovedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X784E1255874FCA8A">6.1-8 AddedElementsCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9 ShortenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A5D5419846FC867">6.1-10 LengthenedCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7982D699803ECD0F">6.1-11 SubCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X809376187C1525AA">6.1-12 ResidueCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E92DC9581F96594">6.1-13 ConstructionBCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X799B12F085ACB609">6.1-14 DualCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X81FE1F387DFCCB22">6.1-15 ConversionFieldCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X82D18907800FE3D9">6.1-16 TraceCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8799F4BF81B0842B">6.1-17 CosetCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X873EA5EE85699832">6.1-18 ConstantWeightSubcode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7AA203A380BC4C79">6.1-19 StandardFormCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7EF49A257D6DB53B">6.1-20 PiecewiseConstantCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap6.html#X7964BF0081CC8352">6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X79E00D3A8367D65A">6.2-1 DirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2 UUVCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7BFBBA5784C293C1">6.2-3 DirectProductCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X78F0B1BC81FB109C">6.2-4 IntersectionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X8228A1F57A29B8F4">6.2-5 UnionCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7A85F8AF8154D387">6.2-6 ExtendedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7E17107686A845DB">6.2-7 AmalgamatedDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7D8981AF7DFE9814">6.2-8 BlockwiseDirectSumCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7C37D467791CE99B">6.2-9 ConstructionXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X7B50943B8014134F">6.2-10 ConstructionXXCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X790C614985BFAE16">6.2-11 BZCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6.html#X820327D6854A50B5">6.2-12 BZCodeNC</a></span>
+</div>
+</div>
+
+<h3>6. <span class="Heading">Manipulating Codes</span></h3>
+
+<p>In this chapter we describe several functions <strong class="pkg">GUAVA</strong> uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it.</p>
+
+<p>In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases.</p>
+
+<p>Because <strong class="pkg">GUAVA</strong> keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch.</p>
+
+<p>In Section <a href="chap6.html#X8271A4697FDA97B2"><b>6.1</b></a>, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>), <code class="func">PuncturedCode</code> (<a href="chap6.html#X7E6E4DDA79574FDB"><b>6.1-2</b></a>), <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>), <cod [...]
+
+<p><a id="X8271A4697FDA97B2" name="X8271A4697FDA97B2"></a></p>
+
+<h4>6.1 <span class="Heading">
+Functions that Generate a New Code from a Given Code
+</span></h4>
+
+<p><a id="X794679BE7F9EB5C1" name="X794679BE7F9EB5C1"></a></p>
+
+<h5>6.1-1 ExtendedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedCode</code>( <var class="Arg">C[, i]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExtendedCode</code> extends the code <var class="Arg">C</var> <var class="Arg">i</var> times and returns the result. <var class="Arg">i</var> is equal to 1 by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight.</p>
+
+<p>The word length increases by <var class="Arg">i</var>. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true.</p>
+
+<p>A cyclic code in general is no longer cyclic after extending.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> C2 := ExtendedCode( C1 );
+a linear [8,4,4]2 extended code
+gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
+true
+gap> List( AsSSortedList( C2 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
+gap> C3 := EvenWeightSubcode( C1 );
+a linear [7,3,4]2..3 even weight subcode 
+</pre></td></tr></table>
+
+<p>To undo extending, call <code class="code">PuncturedCode</code> (see <code class="func">PuncturedCode</code> (<a href="chap6.html#X7E6E4DDA79574FDB"><b>6.1-2</b></a>)). The function <code class="code">EvenWeightSubcode</code> (see <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>)) also returns a related code with only even weights, but without changing its word length.</p>
+
+<p><a id="X7E6E4DDA79574FDB" name="X7E6E4DDA79574FDB"></a></p>
+
+<h5>6.1-2 PuncturedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PuncturedCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PuncturedCode</code> punctures <var class="Arg">C</var> in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one.</p>
+
+<p>This command can also be called with the syntax <code class="code">PuncturedCode( C, L )</code>. In this case, <code class="code">PuncturedCode</code> punctures <var class="Arg">C</var> in the columns specified by <var class="Arg">L</var>, a list of integers. All columns specified by <var class="Arg">L</var> are omitted from each codeword. If l is the length of <var class="Arg">L</var> (so the number of removed columns), the word length decreases by l. The minimum distance can also de [...]
+
+<p>Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 5, GF(2) );
+a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
+gap> C2 := PuncturedCode( C1 );
+a linear [14,7,4]3..5 punctured code
+gap> ExtendedCode( C2 ) = C1;
+false
+gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
+a linear [8,7,1]1 punctured code
+gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
+a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 
+</pre></td></tr></table>
+
+<p><code class="code">ExtendedCode</code> extends the code again (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>)), although in general this does not result in the old code.</p>
+
+<p><a id="X87691AB67FF5621B" name="X87691AB67FF5621B"></a></p>
+
+<h5>6.1-3 EvenWeightSubcode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> EvenWeightSubcode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">EvenWeightSubcode</code> returns the even weight subcode of <var class="Arg">C</var>, consisting of all codewords of <var class="Arg">C</var> with even weight. If <var class="Arg">C</var> is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If <var class="Arg">C</var> is a binary cyclic code, and g(x) is its generator polynomial, the even weight subcode either [...]
+
+<p>Of course, if all codewords of <var class="Arg">C</var> are already of even weight, the returned code is equal to <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
+an (8,33,4..8)3..8 even weight subcode
+gap> List( AsSSortedList( C1 ), WeightCodeword );
+[ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
+  4, 6, 4, 6, 8, 4, 6, 8 ]
+gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 
+</pre></td></tr></table>
+
+<p><code class="code">ExtendedCode</code> also returns a related code of only even weights, but without reducing its dimension (see <code class="func">ExtendedCode</code> (<a href="chap6.html#X794679BE7F9EB5C1"><b>6.1-1</b></a>)).</p>
+
+<p><a id="X79577EB27BE8524B" name="X79577EB27BE8524B"></a></p>
+
+<h5>6.1-4 PermutedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutedCode</code> returns <var class="Arg">C</var> after column permutations. <var class="Arg">L</var> (in GAP disjoint cycle notation) is the permutation to be executed on the columns of <var class="Arg">C</var>. If <var class="Arg">C</var> is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as <var class="Arg">C</var>, this permutation belongs to the automorphism group of <var class="Arg">C</var> (see <code class="func [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
+a linear [15,5,7]5 punctured code
+gap> C2 := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 = C1;
+false
+gap> p := CodeIsomorphism( C1, C2 );
+( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
+gap> C3 := PermutedCode( C1, p );
+a linear [15,5,7]5 permuted code
+gap> C2 = C3;
+true 
+</pre></td></tr></table>
+
+<p><a id="X87E5849784BC60D2" name="X87E5849784BC60D2"></a></p>
+
+<h5>6.1-5 ExpurgatedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExpurgatedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExpurgatedCode</code> expurgates the code <var class="Arg">C</var>> by throwing away codewords in list <var class="Arg">L</var>. <var class="Arg">C</var> must be a linear code. <var class="Arg">L</var> must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by <var class="Arg">L</var>. Since the returned code is still linear, it is very likely that, besides the words of <var class="Arg">L</var>, more [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := ExpurgatedCode( C1, L );
+a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p>This function does not work on non-linear codes. For removing words from a non-linear code, use <code class="code">RemovedElementsCode</code> (see <code class="func">RemovedElementsCode</code> (<a href="chap6.html#X7B0A6E1F82686B43"><b>6.1-7</b></a>)). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see <code class="func">EvenWeightSubcode</code> (<a href="chap6.html#X87691AB67FF5621B"><b>6.1-3</b></a>)).</p>
+
+<p><a id="X8134BE2B8478BE8A" name="X8134BE2B8478BE8A"></a></p>
+
+<h5>6.1-6 AugmentedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AugmentedCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AugmentedCode</code> returns <var class="Arg">C</var> after augmenting. <var class="Arg">C</var> must be a linear code, <var class="Arg">L</var> must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by <var class="Arg">L</var> as well as the words that were already in code <var class="Arg">C</var>. Note that the new code in general will consist of more words than only the codewords of <var class="Arg">C</var>  [...]
+
+<p>This command can also be called with the syntax <code class="code">AugmentedCode(C)</code>. When called without a list of codewords, <code class="code">AugmentedCode</code> returns <var class="Arg">C</var> after adding the all-ones vector to the generator matrix. <var class="Arg">C</var> must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If <var class="Arg">C</var> is a binary code which does not contain the a [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C31 := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
+a linear [8,7,1..2]1 code, augmented with 3 word(s)
+gap> C32 = ReedMullerCode( 2, 3 );
+true 
+gap> C1 := CordaroWagnerCode(6);
+a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
+gap> Codeword( [0,0,1,1,1,1] ) in C1;
+true
+gap> C2 := AugmentedCode( C1 );
+a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
+gap> Codeword( [1,1,0,0,0,0] ) in C2;
+true
+</pre></td></tr></table>
+
+<p>The function <code class="code">AddedElementsCode</code> adds elements to the codewords instead of adding them to the basis (see <code class="func">AddedElementsCode</code> (<a href="chap6.html#X784E1255874FCA8A"><b>6.1-8</b></a>)).</p>
+
+<p><a id="X7B0A6E1F82686B43" name="X7B0A6E1F82686B43"></a></p>
+
+<h5>6.1-7 RemovedElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RemovedElementsCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">RemovedElementsCode</code> returns code <var class="Arg">C</var> after removing a list of codewords <var class="Arg">L</var> from its elements. <var class="Arg">L</var> must be a list of codeword input. The result is an unrestricted code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
+[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
+gap> C2 := RemovedElementsCode( C1, L );
+a (15,2013,3..15)2..15 code with 35 word(s) removed
+gap> WeightDistribution( C2 );
+[ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
+gap> MinimumDistance( C2 );
+3        # C2 is not linear, so the minimum weight does not have to
+         # be equal to the minimum distance 
+</pre></td></tr></table>
+
+<p>Adding elements to a code is done by the function <code class="code">AddedElementsCode</code> (see <code class="func">AddedElementsCode</code> (<a href="chap6.html#X784E1255874FCA8A"><b>6.1-8</b></a>)). To remove codewords from the base of a linear code, use <code class="code">ExpurgatedCode</code> (see <code class="func">ExpurgatedCode</code> (<a href="chap6.html#X87E5849784BC60D2"><b>6.1-5</b></a>)).</p>
+
+<p><a id="X784E1255874FCA8A" name="X784E1255874FCA8A"></a></p>
+
+<h5>6.1-8 AddedElementsCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AddedElementsCode</code>( <var class="Arg">C, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AddedElementsCode</code> returns code <var class="Arg">C</var> after adding a list of codewords <var class="Arg">L</var> to its elements. <var class="Arg">L</var> must be a list of codeword input. The result is an unrestricted code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := NullCode( 6, GF(2) );
+a cyclic [6,0,6]6 nullcode over GF(2)
+gap> C2 := AddedElementsCode( C1, [ "111111" ] );
+a (6,2,1..6)3 code with 1 word(s) added
+gap> IsCyclicCode( C2 );
+true
+gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
+a (6,4,1..6)2 code with 2 word(s) added
+gap> IsCyclicCode( C3 );
+true 
+</pre></td></tr></table>
+
+<p>To remove elements from a code, use <code class="code">RemovedElementsCode</code> (see <code class="func">RemovedElementsCode</code> (<a href="chap6.html#X7B0A6E1F82686B43"><b>6.1-7</b></a>)). To add elements to the base of a linear code, use <code class="code">AugmentedCode</code> (see <code class="func">AugmentedCode</code> (<a href="chap6.html#X8134BE2B8478BE8A"><b>6.1-6</b></a>)).</p>
+
+<p><a id="X81CBEAFF7B9DE6EF" name="X81CBEAFF7B9DE6EF"></a></p>
+
+<h5>6.1-9 ShortenedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ShortenedCode</code>( <var class="Arg">C[, L]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ShortenedCode( C )</code> returns the code <var class="Arg">C</var> shortened by taking a cross section. If <var class="Arg">C</var> is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If <var class="Arg">C</var> was a [n,k,d] code, the shortened code generally is a [n-1,k-1,d] code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases.</p>
+
+<p>If <var class="Arg">C</var> is a non-linear code, <code class="code">ShortenedCode</code> first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as <var class="Arg">C</var>.</p>
+
+<p>This command can also be called using the syntax <code class="code">ShortenedCode(C,L)</code>. When called in this format, <code class="code">ShortenedCode</code> repeats the shortening process on each of the columns specified by <var class="Arg">L</var>. <var class="Arg">L</var> therefore is a list of integers. The column numbers in <var class="Arg">L</var> are the numbers as they are before the shortening process. If <var class="Arg">L</var> has l entries, the returned code has a wo [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 4 );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> C2 := ShortenedCode( C1 );
+a linear [14,10,3]2 shortened code
+gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
+a (4,3,1..4)2 user defined unrestricted code over GF(2)
+gap> MinimumDistance( C3 );
+2
+gap> C4 := ShortenedCode( C3 );
+a (3,2,2..3)1..2 shortened code
+gap> AsSSortedList( C4 );
+[ [ 0 0 0 ], [ 1 0 1 ] ]
+gap> C5 := HammingCode( 5, GF(2) );
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
+a linear [28,23,3]2 shortened code
+gap> OptimalityLinearCode( C6 );
+0
+</pre></td></tr></table>
+
+<p>The function <code class="code">LengthenedCode</code> lengthens the code again (only for linear codes), see <code class="func">LengthenedCode</code> (<a href="chap6.html#X7A5D5419846FC867"><b>6.1-10</b></a>). In general, this is not exactly the inverse function.</p>
+
+<p><a id="X7A5D5419846FC867" name="X7A5D5419846FC867"></a></p>
+
+<h5>6.1-10 LengthenedCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LengthenedCode</code>( <var class="Arg">C[, i]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LengthenedCode( C )</code> returns the code <var class="Arg">C</var> lengthened. <var class="Arg">C</var> must be a linear code. First, the all-ones vector is added to the generator matrix (see <code class="func">AugmentedCode</code> (<a href="chap6.html#X8134BE2B8478BE8A"><b>6.1-6</b></a>)). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended <var class="Arg">i</var> times (see <code class="func">ExtendedCode</code [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := CordaroWagnerCode( 5 );
+a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
+gap> C2 := LengthenedCode( C1 );
+a linear [6,3,2]2..3 code, lengthened with 1 column(s) 
+</pre></td></tr></table>
+
+<p><code class="code">ShortenedCode</code>' shortens the code, see <code class="func">ShortenedCode</code> (<a href="chap6.html#X81CBEAFF7B9DE6EF"><b>6.1-9</b></a>). In general, this is not exactly the inverse function.</p>
+
+<p><a id="X7982D699803ECD0F" name="X7982D699803ECD0F"></a></p>
+
+<h5>6.1-11 SubCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SubCode</code>( <var class="Arg">C[, s]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function <code class="code">SubCode</code> returns a subcode of <var class="Arg">C</var> by taking the first k - s rows of the generator matrix of <var class="Arg">C</var>, where k is the dimension of <var class="Arg">C</var>. The interger <var class="Arg">s</var> may be omitted and in this case it is assumed as 1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode(31,11);
+a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
+gap> S1:= SubCode(C);
+a linear [31,10,11]7..13 subcode
+gap> WeightDistribution(S1);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+gap> S2:= SubCode(C, 8);
+a linear [31,3,11]14..20 subcode
+gap> History(S2);
+[ "a linear [31,3,11]14..20 subcode of",
+  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
+gap> WeightDistribution(S2);
+[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0 ]
+</pre></td></tr></table>
+
+<p><a id="X809376187C1525AA" name="X809376187C1525AA"></a></p>
+
+<h5>6.1-12 ResidueCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ResidueCode</code>( <var class="Arg">C[, c]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">ResidueCode</code> takes a codeword <var class="Arg">c</var> of <var class="Arg">C</var> (if <var class="Arg">c</var> is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where <var class="Arg">c</var> is unequal to zero. The resulting code is an [n-w, k-1, d-lfloor w*(q-1)/q rfloor ] code. <var class="Arg">C</var> must be a linear code and <v [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode( 15, 7 );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> C2 := ResidueCode( C1 );
+a linear [8,4,4]2 residue code
+gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
+gap> C3 := ResidueCode( C1, c );
+a linear [7,4,3]1 residue code 
+</pre></td></tr></table>
+
+<p><a id="X7E92DC9581F96594" name="X7E92DC9581F96594"></a></p>
+
+<h5>6.1-13 ConstructionBCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionBCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">ConstructionBCode</code> takes a binary linear code <var class="Arg">C</var> and calculates the minimum distance of the dual of <var class="Arg">C</var> (see <code class="func">DualCode</code> (<a href="chap6.html#X799B12F085ACB609"><b>6.1-14</b></a>)). It then removes the columns of the parity check matrix of <var class="Arg">C</var> where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity ch [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ReedMullerCode( 2, 5 );
+a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
+gap> C2 := ConstructionBCode( C1 );
+a linear [24,9,8]5..10 Construction B (8 coordinates)
+gap> BoundsMinimumDistance( 24, 9, GF(2) );
+rec( n := 24, k := 9, q := 2, references := rec(  ), 
+  construction := [ [ Operation "UUVCode" ], 
+      [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
+                      [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
+                  [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
+          [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
+  lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
+      "Lb(12,7)=4, u u+v construction of C1 and C2:", 
+      "Lb(6,5)=2, dual of the repetition code", 
+      "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
+  upperBound := 8, 
+  upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
+                             contradict:", "Ub(18,4)=8, Griesmer bound" ] )
+# so C2 is optimal
+</pre></td></tr></table>
+
+<p><a id="X799B12F085ACB609" name="X799B12F085ACB609"></a></p>
+
+<h5>6.1-14 DualCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DualCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DualCode</code> returns the dual code of <var class="Arg">C</var>. The dual code consists of all codewords that are orthogonal to the codewords of <var class="Arg">C</var>. If <var class="Arg">C</var> is a linear code with generator matrix G, the dual code has parity check matrix G (or if <var class="Arg">C</var> has parity check matrix H, the dual code has generator matrix H). So if <var class="Arg">C</var> is a linear [n, k] code, the dual code of <var class="Arg" [...]
+
+<p>The dual code is always a linear code, even if <var class="Arg">C</var> is non-linear.</p>
+
+<p>If a code <var class="Arg">C</var> is equal to its dual code, it is called <em>self-dual</em>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := ReedMullerCode( 1, 3 );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> RD := DualCode( R );
+a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
+gap> R = RD;
+true
+gap> N := WholeSpaceCode( 7, GF(4) );
+a cyclic [7,7,1]0 whole space code over GF(4)
+gap> DualCode( N ) = NullCode( 7, GF(4) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X81FE1F387DFCCB22" name="X81FE1F387DFCCB22"></a></p>
+
+<h5>6.1-15 ConversionFieldCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConversionFieldCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConversionFieldCode</code> returns the code obtained from <var class="Arg">C</var> after converting its field. If the field of <var class="Arg">C</var> is GF(q^m), the returned code has field GF(q). Each symbol of every codeword is replaced by a concatenation of m symbols from GF(q). If <var class="Arg">C</var> is an (n, M, d_1) code, the returned code is a (n* m, M, d_2) code, where d_2 > d_1.</p>
+
+<p>See also <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> R := RepetitionCode( 4, GF(4) );
+a cyclic [4,1,4]3 repetition code over GF(4)
+gap> R2 := ConversionFieldCode( R );
+a linear [8,2,4]3..4 code, converted to basefield GF(2)
+gap> Size( R ) = Size( R2 );
+true
+gap> GeneratorMat( R );
+[ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
+gap> GeneratorMat( R2 );
+[ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X82D18907800FE3D9" name="X82D18907800FE3D9"></a></p>
+
+<h5>6.1-16 TraceCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> TraceCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">C</var> is a linear code defined over an extension E of <var class="Arg">F</var> (<var class="Arg">F</var> is the ``base field'')</p>
+
+<p>Output: The linear code generated by Tr_E/F(c), for all c in C.</p>
+
+<p><code class="code">TraceCode</code> returns the image of the code <var class="Arg">C</var> under the trace map. If the field of <var class="Arg">C</var> is GF(q^m), the returned code has field GF(q).</p>
+
+<p>Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
+a  [10,4,?] randomly generated code over GF(4)
+5
+gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
+a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
+1
+
+</pre></td></tr></table>
+
+<p><a id="X8799F4BF81B0842B" name="X8799F4BF81B0842B"></a></p>
+
+<h5>6.1-17 CosetCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CosetCode</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CosetCode</code> returns the coset of a code <var class="Arg">C</var> with respect to word <var class="Arg">w</var>. <var class="Arg">w</var> must be of the codeword type. Then, <var class="Arg">w</var> is added to each codeword of <var class="Arg">C</var>, yielding the elements of the new code. If <var class="Arg">C</var> is linear and <var class="Arg">w</var> is an element of <var class="Arg">C</var>, the new code is equal to <var class="Arg">C</var>, otherwise th [...]
+
+<p>Generating a coset is also possible by simply adding the word <var class="Arg">w</var> to <var class="Arg">C</var>. See <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(3, GF(2));
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> c := Codeword("1011011");; c in H;
+false
+gap> C := CosetCode(H, c);
+a (7,16,3)1 coset code
+gap> List(AsSSortedList(C), el-> Syndrome(H, el));
+[ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
+  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
+# All elements of the coset have the same syndrome in H 
+</pre></td></tr></table>
+
+<p><a id="X873EA5EE85699832" name="X873EA5EE85699832"></a></p>
+
+<h5>6.1-18 ConstantWeightSubcode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstantWeightSubcode</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ConstantWeightSubcode</code> returns the subcode of <var class="Arg">C</var> that only has codewords of weight <var class="Arg">w</var>. The resulting code is a non-linear code, because it does not contain the all-zero vector.</p>
+
+<p>This command also can be called with the syntax <code class="code">ConstantWeightSubcode(C)</code> In this format, <code class="code">ConstantWeightSubcode</code> returns the subcode of <var class="Arg">C</var> consisting of all minimum weight codewords of <var class="Arg">C</var>.</p>
+
+<p><code class="code">ConstantWeightSubcode</code> first checks if Leon's binary <code class="code">wtdist</code> exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in <var class="Arg">C</var> to see if it is of the desired weight.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> N := NordstromRobinsonCode();; WeightDistribution(N);
+[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
+gap> C := ConstantWeightSubcode(N, 8);
+a (16,30,6..16)5..8 code with codewords of weight 8
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
+gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
+[ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
+gap> C := ConstantWeightSubcode(eg);
+a (12,264,6..12)3..6 code with codewords of weight 6
+gap> WeightDistribution(C);
+[ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X7AA203A380BC4C79" name="X7AA203A380BC4C79"></a></p>
+
+<h5>6.1-19 StandardFormCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> StandardFormCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">StandardFormCode</code> returns <var class="Arg">C</var> after putting it in standard form. If <var class="Arg">C</var> is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'.</p>
+
+<p>If <var class="Arg">C</var> is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although <strong class="pkg">GUAVA</strong> always puts both matrices in a standard form using <code class="code">BaseMat</code>, this never alters the code. <code class="code">StandardFormCode</code> even applies column permutations if un [...]
+
+<p>If <var class="Arg">C</var> is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore <code class="code">StandardFormCode</code> just returns a copy of <var class="Arg">C</var> for cyc [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
+          "random form code", GF(2) );
+a linear [4,2,1..2]1..2 random form code over GF(2)
+gap> Codeword( GeneratorMat( G ) );
+[ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
+gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
+[ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7EF49A257D6DB53B" name="X7EF49A257D6DB53B"></a></p>
+
+<h5>6.1-20 PiecewiseConstantCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PiecewiseConstantCode</code>( <var class="Arg">part, wts[, F]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PiecewiseConstantCode</code> returns a code with length n = sum n_i, where <var class="Arg">part</var>=[ n_1, dots, n_k ]. <var class="Arg">wts</var> is a list of <var class="Arg">constraints</var> w=(w_1,...,w_k), each of length k, where 0 <= w_i <= n_i. The default field is GF(2).</p>
+
+<p>A constraint is a list of integers, and a word c = ( c_1, dots, c_k ) (according to <var class="Arg">part</var>, i.e., each c_i is a subword of length n_i) is in the resulting code if and only if, for some constraint w in <var class="Arg">wts</var>, |c_i| = w_i for all 1 <= i <= k, where | ...| denotes the Hamming weight.</p>
+
+<p>An example might make things clearer:</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PiecewiseConstantCode( [ 2, 3 ],
+     [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+the C code programs are compiled, so using Leon's binary....
+a (5,7,1..5)1..5 piecewise constant code over GF(2)
+gap> AsSSortedList(last);
+[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
+  [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
+gap>
+
+</pre></td></tr></table>
+
+<p>The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7.</p>
+
+<p><a id="X7964BF0081CC8352" name="X7964BF0081CC8352"></a></p>
+
+<h4>6.2 <span class="Heading">
+Functions that Generate a New Code from Two or More Given Codes
+</span></h4>
+
+<p><a id="X79E00D3A8367D65A" name="X79E00D3A8367D65A"></a></p>
+
+<h5>6.2-1 DirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DirectSumCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DirectSumCode</code> returns the direct sum of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. The direct sum code consists of every codeword of <var class="Arg">C1</var> concatenated by every codeword of <var class="Arg">C2</var>. Therefore, if <var class="Arg">Ci</var> was a (n_i,M_i,d_i) code, the result is a (n_1+n_2,M_1*M_2,min(d_1,d_2)) code.</p>
+
+<p>If both <var class="Arg">C1</var> and <var class="Arg">C2</var> are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic.</p>
+
+<p>Performing a direct sum can also be done by adding two codes (see Section <a href="chap4.html#X832DA51986A3882C"><b>4.2</b></a>). Another often used method is the `u, u+v'-construction, described in <code class="func">UUVCode</code> (<a href="chap6.html#X86E9D6DE7F1A07E6"><b>6.2-2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
+gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
+gap> D := DirectSumCode(C1, C2);;
+gap> AsSSortedList(D);
+[ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
+gap> D = C1 + C2;   # addition = direct sum
+true 
+</pre></td></tr></table>
+
+<p><a id="X86E9D6DE7F1A07E6" name="X86E9D6DE7F1A07E6"></a></p>
+
+<h5>6.2-2 UUVCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UUVCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UUVCode</code> returns the so-called (u|u+v) construction applied to <var class="Arg">C1</var> and <var class="Arg">C2</var>. The resulting code consists of every codeword u of <var class="Arg">C1</var> concatenated by the sum of u and every codeword v of <var class="Arg">C2</var>. If <var class="Arg">C1</var> and <var class="Arg">C2</var> have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If <var class="Arg">Ci</v [...]
+
+<p>If both <var class="Arg">C1</var> and <var class="Arg">C2</var> are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic.</p>
+
+<p>The function <code class="code">DirectSumCode</code> returns another sum of codes (see <code class="func">DirectSumCode</code> (<a href="chap6.html#X79E00D3A8367D65A"><b>6.2-1</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
+a cyclic [4,3,2]1 even weight subcode
+gap> C2 := RepetitionCode(4, GF(2));
+a cyclic [4,1,4]2 repetition code over GF(2)
+gap> R := UUVCode(C1, C2);
+a linear [8,4,4]2 U U+V construction code
+gap> R = ReedMullerCode(1,3);
+true 
+</pre></td></tr></table>
+
+<p><a id="X7BFBBA5784C293C1" name="X7BFBBA5784C293C1"></a></p>
+
+<h5>6.2-3 DirectProductCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DirectProductCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">DirectProductCode</code> returns the direct product of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. Both must be linear codes. Suppose <var class="Arg">Ci</var> has generator matrix G_i. The direct product of <var class="Arg">C1</var> and <var class="Arg">C2</var> then has the Kronecker product of G_1 and G_2 as the generator matrix (see the GAP command <code class="code">KroneckerProduct</code>).</p>
+
+<p>If <var class="Arg">Ci</var> is a [n_i, k_i, d_i] code, the direct product then is an [n_1* n_2,k_1* k_2,d_1* d_2] code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L1 := LexiCode(10, 4, GF(2));
+a linear [10,5,4]2..4 lexicode over GF(2)
+gap> L2 := LexiCode(8, 3, GF(2));
+a linear [8,4,3]2..3 lexicode over GF(2)
+gap> D := DirectProductCode(L1, L2);
+a linear [80,20,12]20..45 direct product code 
+</pre></td></tr></table>
+
+<p><a id="X78F0B1BC81FB109C" name="X78F0B1BC81FB109C"></a></p>
+
+<h5>6.2-4 IntersectionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IntersectionCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IntersectionCode</code> returns the intersection of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. This code consists of all codewords that are both in <var class="Arg">C1</var> and <var class="Arg">C2</var>. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := CyclicCodes(7, GF(2));
+[ a cyclic [7,7,1]0 enumerated code over GF(2),
+  a cyclic [7,6,1..2]1 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,0,7]7 enumerated code over GF(2),
+  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2),
+  a cyclic [7,1,7]3 enumerated code over GF(2),
+  a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
+gap> IntersectionCode(C[6], C[8]) = C[7];
+true 
+</pre></td></tr></table>
+
+<p>The <em>hull</em> of a linear code is the intersection of the code with its dual code. In other words, the hull of C is <code class="code">IntersectionCode(C, DualCode(C))</code>.</p>
+
+<p><a id="X8228A1F57A29B8F4" name="X8228A1F57A29B8F4"></a></p>
+
+<h5>6.2-5 UnionCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UnionCode</code>( <var class="Arg">C1, C2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UnionCode</code> returns the union of codes <var class="Arg">C1</var> and <var class="Arg">C2</var>. This code consists of the union of all codewords of <var class="Arg">C1</var> and <var class="Arg">C2</var> and all linear combinations. Therefore this function works only for linear codes. The function <code class="code">AddedElementsCode</code> can be used for non-linear codes, or if the resulting code should not include linear combinations. See <code class="func"> [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
+a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
+gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
+a linear [3,1,3]1 code defined by generator matrix over GF(2)
+gap> U := UnionCode(G, H);
+a linear [3,3,1]0 union code
+gap> c := Codeword("010");; c in G;
+false
+gap> c in H;
+false
+gap> c in U;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7A85F8AF8154D387" name="X7A85F8AF8154D387"></a></p>
+
+<h5>6.2-6 ExtendedDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExtendedDirectSumCode</code>( <var class="Arg">L, B, m</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The extended direct sum construction is described in section V of Graham and Sloane <a href="chapBib.html#biBGS85">[GS85]</a>. The resulting code consists of <var class="Arg">m</var> copies of <var class="Arg">L</var>, extended by repeating the codewords of <var class="Arg">B</var> <var class="Arg">m</var> times.</p>
+
+<p>Suppose <var class="Arg">L</var> is an [n_L, k_L]r_L code, and <var class="Arg">B</var> is an [n_L, k_B]r_B code (non-linear codes are also permitted). The length of <var class="Arg">B</var> must be equal to the length of <var class="Arg">L</var>. The length of the new code is n = m n_L, the dimension (in the case of linear codes) is k <= m k_L + k_B, and the covering radius is r <= lfloor m Psi( L, B ) rfloor, with</p>
+
+<p class="pcenter">
+\Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}}
+               \sum_{v \in B} {\rm d}( L, v + u ).
+</p>
+
+<p>However, this computation will not be executed, because it may be too time consuming for large codes.</p>
+
+<p>If L subseteq B, and L and B are linear codes, the last copy of <var class="Arg">L</var> is omitted. In this case the dimension is k = m k_L + (k_B - k_L).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := WholeSpaceCode( 7, GF(2) );
+a cyclic [7,7,1]0 whole space code over GF(2)
+gap> e := ExtendedDirectSumCode( c, d, 3 );
+a linear [21,15,1..3]2 3-fold extended direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7E17107686A845DB" name="X7E17107686A845DB"></a></p>
+
+<h5>6.2-7 AmalgamatedDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AmalgamatedDirectSumCode</code>( <var class="Arg">c1, c2[, check]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AmalgamatedDirectSumCode</code> returns the amalgamated direct sum of the codes <var class="Arg">c1</var> and <var class="Arg">c2</var>. The amalgamated direct sum code consists of all codewords of the form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | , v) in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <= M_1 * M_2 / 2.</p>
+
+<p>If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively.</p>
+
+<p>If <var class="Arg">c1</var> is a normal code (see <code class="func">IsNormalCode</code> (<a href="chap7.html#X80283A2F7C8101BD"><b>7.4-5</b></a>)) with the last coordinate acceptable (see <code class="func">IsCoordinateAcceptable</code> (<a href="chap7.html#X7D24F8BF7F9A7BF1"><b>7.4-3</b></a>)), and <var class="Arg">c2</var> is a normal code with the first coordinate acceptable, then the covering radius of the new code is r <= r_1 + r_2. However, checking whether a code is normal [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := HammingCode( 3, GF(2) );
+a linear [7,4,3]1 Hamming (3,2) code over GF(2)
+gap> d := ReedMullerCode( 1, 4 );
+a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
+gap> e := DirectSumCode( c, d );
+a linear [23,9,3]7 direct sum code
+gap> f := AmalgamatedDirectSumCode( c, d );;
+gap> MinimumDistance( f );;
+gap> CoveringRadius( f );; 
+gap> f;
+a linear [22,8,3]7 amalgamated direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7D8981AF7DFE9814" name="X7D8981AF7DFE9814"></a></p>
+
+<h5>6.2-8 BlockwiseDirectSumCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BlockwiseDirectSumCode</code>( <var class="Arg">C1, L1, C2, L2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BlockwiseDirectSumCode</code> returns a subcode of the direct sum of <var class="Arg">C1</var> and <var class="Arg">C2</var>. The fields of <var class="Arg">C1</var> and <var class="Arg">C2</var> must be same. The lists <var class="Arg">L1</var> and <var class="Arg">L2</var> are two equally long with elements from the ambient vector spaces of <var class="Arg">C1</var> and <var class="Arg">C2</var>, respectively, <em>or</em> <var class="Arg">L1</var> and <var class=" [...]
+
+<p>In the first case, the blockwise direct sum code is defined as</p>
+
+<p class="pcenter">
+bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ),
+</p>
+
+<p>where ell is the length of <var class="Arg">L1</var> and <var class="Arg">L2</var>, and oplus is the direct sum.</p>
+
+<p>In the second case, it is defined as</p>
+
+<p class="pcenter">
+bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).
+</p>
+
+<p>The length of the new code is n = n_1 + n_2.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := HammingCode( 3, GF(2) );;
+gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
+gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
+> C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
+a (13,1024,1..13)1..2 blockwise direct sum code
+</pre></td></tr></table>
+
+<p><a id="X7C37D467791CE99B" name="X7C37D467791CE99B"></a></p>
+
+<h5>6.2-9 ConstructionXCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionXCode</code>( <var class="Arg">C, A</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Consider a list of j linear codes of the same length N over the same field F, C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N, K_i, D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a list of j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ..., A_j-1 where the parameter of the ith code A_i is [n_i, k_i=(K_i-K_i+1), d_i], an [n, K_1, d] linear code over field F can be constructed where n = N + sum_i=1^j-1 n_i, and d = min D_j, D_ [...]
+
+<p>For more information on Construction X, refer to <a href="chapBib.html#biBSloane72">[SRC72]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C1 := BCHCode(127, 43);
+a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
+gap> C2 := BCHCode(127, 47);
+a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
+gap> C3 := BCHCode(127, 55);
+a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
+gap> G1 := ShallowCopy( GeneratorMat(C2) );;
+gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
+gap> C1 := GeneratorMatCode(G1, GF(2));
+a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
+gap> MinimumDistance(C1);
+43
+gap> C := [ C1, C2, C3 ];
+[ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
+  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
+  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
+gap> IsSubset(C[1], C[2]);
+true
+gap> IsSubset(C[2], C[3]);
+true
+gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
+[ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
+gap> CX := ConstructionXCode(C, A);
+a linear [148,23,53]43..74 Construction X code
+gap> History(CX);
+[ "a linear [148,23,53]43..74 Construction X code of", 
+  "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
+, a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
+[127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
+  "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
+17,8,6]3..6 even weight subcode ]" ]
+</pre></td></tr></table>
+
+<p><a id="X7B50943B8014134F" name="X7B50943B8014134F"></a></p>
+
+<h5>6.2-10 ConstructionXXCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ConstructionXXCode</code>( <var class="Arg">C1, C2, C3, A1, A2</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Consider a set of linear codes over field F of the same length, n, C_1=[n, k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1, C_3 subset C_1 and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1, k_1-k_2, e_1] and A_2=[n_2, k_1-k_3, e_2] over the same field F, there exists an [n+n_1+n_2, k_1, d] linear code C_XX over field F, where d = mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2.</p>
+
+<p>The codewords of C_XX can be partitioned into three sections ( v;|;a;|;b ) where v has length n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the following form:</p>
+
+
+<ul>
+<li><p>( v ; | ; 0 ; | ; 0 ) if v in C_4</p>
+
+</li>
+<li><p>( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4</p>
+
+</li>
+<li><p>( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4</p>
+
+</li>
+<li><p>( v ; | ; a_1 ; | ; a_2 ) otherwise</p>
+
+</li>
+</ul>
+<p>For more information on Construction XX, refer to <a href="chapBib.html#biBAlltop84">[All84]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a := PrimitiveRoot(GF(32));
+Z(2^5)
+gap> f0 := MinimalPolynomial( GF(2), a^0 );
+x_1+Z(2)^0
+gap> f1 := MinimalPolynomial( GF(2), a^1 );
+x_1^5+x_1^2+Z(2)^0
+gap> f5 := MinimalPolynomial( GF(2), a^5 );
+x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
+gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
+a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
+a linear [31,11,11]7..11 union code of
+U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
+gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
+a linear [10,5,4]2..4 shortened code
+gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
+a cyclic [6,5,2]1 dual code
+gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
+a linear [47,11,15..17]13..23 Construction XX code
+gap> MinimumDistance(CXX);
+17
+gap> History(CXX);        
+[ "a linear [47,11,17]13..23 Construction XX code of", 
+  "C1: a cyclic [31,11,11]7..11 union code", 
+  "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
+  "A1: a linear [10,5,4]2..4 shortened code", 
+  "A2: a cyclic [6,5,2]1 dual code" ]
+</pre></td></tr></table>
+
+<p><a id="X790C614985BFAE16" name="X790C614985BFAE16"></a></p>
+
+<h5>6.2-11 BZCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BZCode</code>( <var class="Arg">O, I</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Given a set of outer codes of the same length O_i = [N, K_i, D_i] over GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i = [n, k_i, d_i] over GF(q), <code class="code">BZCode</code> returns a Blokh-Zyablov multilevel concatenated code with parameter [ n x N, sum_i=1^t e_i x K_i, min_i=1,...,td_i x D_i ] over GF(q).</p>
+
+<p>Note that the set of inner codes must satisfy chain condition, i.e. I_1 = [n, k_1, d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t] where 0=k_0 < k_1 < k_2 < ... < k_t. The dimension of the inner codes must satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the ith outer code.</p>
+
+<p>For more information on Blokh-Zyablov multilevel concatenated code, refer to <a href="chapBib.html#biBBrouwer98">[Bro98]</a>.</p>
+
+<p><a id="X820327D6854A50B5" name="X820327D6854A50B5"></a></p>
+
+<h5>6.2-12 BZCodeNC</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BZCodeNC</code>( <var class="Arg">O, I</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function is the same as <code class="code">BZCode</code>, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> #
+gap> # Binary code
+gap> #
+gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
+[ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
+  a cyclic [9,4,6]4..5 MDS code over GF(8) ]
+gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
+gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
+[ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
+gap> C := BZCodeNC(O, I);
+a linear [72,38,12]0..72 Blokh Zyablov concatenated code
+gap> #
+gap> # Non binary code
+gap> #
+gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
+gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
+gap> O1 := DualCode( O3 );;
+gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
+gap> Cy := CyclicCodes(5, GF(5));;
+gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
+gap> O  := [ O1, O2, O3 ];
+[ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
+  a linear [6,2,5]3..4 extended code ]
+gap> I  := [ Cy[5], Cy[4], Cy[3] ];
+[ a cyclic [5,1,5]3..4 enumerated code over GF(5),
+  a cyclic [5,2,4]2..3 enumerated code over GF(5),
+  a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
+gap> C  := BZCodeNC( O, I );
+a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
+gap> MinimumDistance(C);
+15
+gap> History(C);
+[ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
+  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
+,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
+r GF(5) ]",
+  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
+ode, a linear [6,2,5]3..4 extended code ]" ]
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap5.html">Previous Chapter</a>    <a href="chap7.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chap7.html b/htm/chap7.html
new file mode 100644
index 0000000..c3e8696
--- /dev/null
+++ b/htm/chap7.html
@@ -0,0 +1,1951 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Chapter 7: 
+Bounds on codes, special matrices and miscellaneous functions
+</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap6.html">Previous Chapter</a>    <a href="chapBib.html">Next Chapter</a>   </div>
+
+<p><a id="X7A814D518460862E" name="X7A814D518460862E"></a></p>
+<div class="ChapSects"><a href="chap7.html#X7A814D518460862E">7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></a>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X87C753EB840C34D3">7.1 <span class="Heading">
+Distance bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8673277C7F6C04C3">7.1-1 UpperBoundSingleton</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X828095537C91FDFA">7.1-2 UpperBoundHamming</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3 UpperBoundJohnson</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A26E2537DFF4409">7.1-4 UpperBoundPlotkin</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86A5A7C67F625A40">7.1-5 UpperBoundElias</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82366C277E218130">7.1-6 UpperBoundGriesmer</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8301FA9F7C6C7445">7.1-7 IsGriesmerCode</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A5CB74485184FEE">7.1-8 UpperBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7FDF54BA81115D88">7.1-9 LowerBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CF15D2084499869">7.1-10 LowerBoundGilbertVarshamov</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8217D830871286D8">7.1-11 LowerBoundSpherePacking</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C6A58327BD6B685">7.1-12 UpperBoundMinimumDistance</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B3858B27A9E509A">7.1-13 BoundsMinimumDistance</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X817D0A647D3331EB">7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8320D1C180A1AAAD">7.2-1 BoundsCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7881E03E812140F4">7.2-2 IncreaseCoveringRadiusLowerBound</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3 ExhaustiveSearchCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85D671F4824B4B0C">7.2-4 GeneralLowerBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8638F5A67D6E50C1">7.2-5 GeneralUpperBoundCoveringRadius</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E7FBCC87D5562AB">7.2-6 LowerBoundCoveringRadiusSphereCovering</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E20C518360AB70">7.2-7 LowerBoundCoveringRadiusVanWee1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C72994A825228E7">7.2-8 LowerBoundCoveringRadiusVanWee2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F95362485759ACB">7.2-9 LowerBoundCoveringRadiusCountingExcess</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X829C14A383B5BF59">7.2-10 LowerBoundCoveringRadiusEmbedded1</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B0C81B88604C448">7.2-11 LowerBoundCoveringRadiusEmbedded2</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D27F6E27B9A0D35">7.2-12 LowerBoundCoveringRadiusInduction</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13 UpperBoundCoveringRadiusRedundancy</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X832847A17FD0D142">7.2-14 UpperBoundCoveringRadiusDelsarte</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X86F10D9E79AB8796">7.2-15 UpperBoundCoveringRadiusStrength</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8585C6A982489FC3">7.2-16 UpperBoundCoveringRadiusGriesmerLike</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82A38F5F858CF3FC">7.2-17 UpperBoundCoveringRadiusCyclicCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X806EBEC77C16E657">7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82899B64802A4BCE">7.3-1 KrawtchoukMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87AFE2C078031CE4">7.3-2 GrayMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E1E7C5287919CDB">7.3-3 SylvesterMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8014A1F181ECD8AA">7.3-4 HadamardMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X797F43607AD8660D">7.3-5 VandermondeMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B47D82485B66F1D">7.3-6 PutStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7 IsInStandardForm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A97AD477E7638DE">7.3-8 PermutedCols</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B68119F85E9EC6D">7.3-9 VerticalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8033E9A67BA155C8">7.3-10 HorizontalConversionFieldMat</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X804AAFF2867080F7">7.3-11 MOLS</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F34306B81DC2776">7.3-12 IsLatinSquare</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81B9B40B7B2D97D5">7.3-13 AreMOLS</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7AB5E5CE7FDF7132">7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8032E53078264ABB">7.4-1 CoordinateNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ED2EF368203AF47">7.4-2 CodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3 IsCoordinateAcceptable</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87039FD179AD3009">7.4-4 GeneralizedCodeNorm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80283A2F7C8101BD">7.4-5 IsNormalCode</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X8308D685809A4E2F">7.5 <span class="Heading">
+Miscellaneous functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X871286437DE7A6A4">7.5-1 CodeWeightEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84DA928083B103A0">7.5-2 CodeDistanceEnumerator</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84B2BE66780EFBF9">7.5-3 CodeMacWilliamsTransform</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7903286078F8051B">7.5-4 CodeDensity</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85303BAE7BD46D81">7.5-5 SphereContent</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7ACDC5377CD17451">7.5-6 Krawtchouk</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X827E39957A87EB51">7.5-7 PrimitiveUnityRoot</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78AEA40F7AD9D541">7.5-8 PrimitivePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A2B54EF868AA752">7.5-9 IrreduciblePolynomialsNr</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B50D3417F6FD7C6">7.5-10 MatrixRepresentationOfElement</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7805D2BB7CE4D455">7.5-11 ReciprocalPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12 CyclotomicCosets</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A4EA98D794CF410">7.5-13 WeightHistogram</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X805DF25C84585FD6">7.5-14 MultiplicityInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8072B0DA78FBE562">7.5-15 MostCommonInList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C5407EF87849857">7.5-16 RotateList</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85E526367878F72A">7.5-17 CirculantMatrix</a></span>
+</div>
+<div class="ContSect"><span class="nocss"> </span><a href="chap7.html#X7969103F7A8598F9">7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></a>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84D51EBB784E7C5D">7.6-1 MatrixTransformationOnMultivariatePolynomial </a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80433A4B792880EF">7.6-2 DegreeMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X83F44E397C56F2E0">7.6-3 DegreesMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E9021697A61A60F">7.6-4 CoefficientMultivariatePolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79E76B6F7D177E27">7.6-5 SolveLinearSystem</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80171AA687FFDC70">7.6-6 GuavaVersion</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7EBBE86D85CC90C0">7.6-7 ZechLog</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8 CoefficientToPolynomial</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8431985183B63BB7">7.6-9 DegreesMonomialTerm</a></span>
+<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X860EF39B841380A1">7.6-10 DivisorsMultivariatePolynomial</a></span>
+</div>
+</div>
+
+<h3>7. <span class="Heading">
+Bounds on codes, special matrices and miscellaneous functions
+</span></h3>
+
+<p>In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section <a href="chap7.html#X87C753EB840C34D3"><b>7.1</b></a>), functions that determine bounds on the size and covering radius of codes (Section <a href="chap7.html#X817D0A647D3331EB"><b>7.2</b></a>), functions that work with special matrices <strong class="pkg">GUAVA</strong> needs for several codes (see Section <a href="chap7.html#X806EBEC77C16E657"><b>7.3</b></a>), and constructi [...]
+
+<p><a id="X87C753EB840C34D3" name="X87C753EB840C34D3"></a></p>
+
+<h4>7.1 <span class="Heading">
+Distance bounds on codes
+</span></h4>
+
+<p>This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist.</p>
+
+<p>A second way to obtain bounds is a table. In <strong class="pkg">GUAVA</strong>, an extensive table is implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to 257, 243 and 256 for codes over GF(2), GF(3) and GF(4) respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwe [...]
+
+<p>Firstly, we describe functions that compute specific upper bounds on the code size (see <code class="func">UpperBoundSingleton</code> (<a href="chap7.html#X8673277C7F6C04C3"><b>7.1-1</b></a>), <code class="func">UpperBoundHamming</code> (<a href="chap7.html#X828095537C91FDFA"><b>7.1-2</b></a>), <code class="func">UpperBoundJohnson</code> (<a href="chap7.html#X82EBFAAB7F5BFD4A"><b>7.1-3</b></a>), <code class="func">UpperBoundPlotkin</code> (<a href="chap7.html#X7A26E2537DFF4409"><b>7.1 [...]
+
+<p>Next we describe a function that computes <strong class="pkg">GUAVA</strong>'s best upper bound on the code size (see <code class="func">UpperBound</code> (<a href="chap7.html#X7A5CB74485184FEE"><b>7.1-8</b></a>)).</p>
+
+<p>Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see <code class="func">LowerBoundMinimumDistance</code> (<a href="chap7.html#X7FDF54BA81115D88"><b>7.1-9</b></a>) and <code class="func">UpperBoundMinimumDistance</code> (<a href="chap7.html#X7C6A58327BD6B685"><b>7.1-12</b></a>)).</p>
+
+<p>Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see <code class="func">BoundsMinimumDistance</code> (<a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>)).</p>
+
+<p><a id="X8673277C7F6C04C3" name="X8673277C7F6C04C3"></a></p>
+
+<h5>7.1-1 UpperBoundSingleton</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundSingleton</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundSingleton</code> returns the Singleton bound for a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var> over a field of size <var class="Arg">q</var>. This bound is based on the shortening of codes. By shortening an (n, M, d) code d-1 times, an (n-d+1,M,1) code results, with M <= q^n-d+1 (see <code class="func">ShortenedCode</code> (<a href="chap6.html#X81CBEAFF7B9DE6EF"><b>6.1-9</b></a>)). Thus</p>
+
+<p class="pcenter">
+M \leq q^{n-d+1}.
+</p>
+
+<p>Codes that meet this bound are called <em>maximum distance separable</em> (see <code class="func">IsMDSCode</code> (<a href="chap4.html#X789380D28018EC3F"><b>4.3-7</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundSingleton(4, 3, 5);
+25
+gap> C := ReedSolomonCode(4,3);; Size(C);
+25
+gap> IsMDSCode(C);
+true 
+</pre></td></tr></table>
+
+<p><a id="X828095537C91FDFA" name="X828095537C91FDFA"></a></p>
+
+<h5>7.1-2 UpperBoundHamming</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundHamming</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Hamming bound (also known as the <em>sphere packing bound</em>) returns an upper bound on the size of a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var>, over a field of size <var class="Arg">q</var>. The Hamming bound is obtained by dividing the contents of the entire space GF(q)^n by the contents of a ball with radius lfloor(d-1) / 2rfloor. As all these balls are disjoint, they can never contain more than the whole vector space.</p>
+
+<p class="pcenter">
+M \leq {q^n \over V(n,e)},
+</p>
+
+<p>where M is the maxmimum number of codewords and V(n,e) is equal to the contents of a ball of radius e (see <code class="func">SphereContent</code> (<a href="chap7.html#X85303BAE7BD46D81"><b>7.5-5</b></a>)). This bound is useful for small values of <var class="Arg">d</var>. Codes for which equality holds are called <em>perfect</em> (see <code class="func">IsPerfectCode</code> (<a href="chap4.html#X85E3BD26856424F7"><b>4.3-6</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundHamming( 15, 3, 2 );
+2048
+gap> C := HammingCode( 4, GF(2) );
+a linear [15,11,3]1 Hamming (4,2) code over GF(2)
+gap> Size( C );
+2048 
+</pre></td></tr></table>
+
+<p><a id="X82EBFAAB7F5BFD4A" name="X82EBFAAB7F5BFD4A"></a></p>
+
+<h5>7.1-3 UpperBoundJohnson</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundJohnson</code>( <var class="Arg">n, d</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Johnson bound is an improved version of the Hamming bound (see <code class="func">UpperBoundHamming</code> (<a href="chap7.html#X828095537C91FDFA"><b>7.1-2</b></a>)). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius e around the elements of the code. The Johnson bound only works for binary codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundJohnson( 13, 5 );
+77
+gap> UpperBoundHamming( 13, 5, 2);
+89   # in this case the Johnson bound is better 
+</pre></td></tr></table>
+
+<p><a id="X7A26E2537DFF4409" name="X7A26E2537DFF4409"></a></p>
+
+<h5>7.1-4 UpperBoundPlotkin</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundPlotkin</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">UpperBoundPlotkin</code> calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in:</p>
+
+<p class="pcenter">
+M \leq {d \over {d-(1-1/q)n}},
+</p>
+
+<p>where M is the maximum number of codewords. In this case, <var class="Arg">d</var> must be larger than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundPlotkin( 15, 7, 2 );
+32
+gap> C := BCHCode( 15, 7, GF(2) );
+a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
+gap> Size(C);
+32
+gap> WeightDistribution(C);
+[ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X86A5A7C67F625A40" name="X86A5A7C67F625A40"></a></p>
+
+<h5>7.1-5 UpperBoundElias</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundElias</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Elias bound is an improvement of the Plotkin bound (see <code class="func">UpperBoundPlotkin</code> (<a href="chap7.html#X7A26E2537DFF4409"><b>7.1-4</b></a>)) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundPlotkin( 16, 3, 2 );
+12288
+gap> UpperBoundElias( 16, 3, 2 );
+10280 
+gap> UpperBoundElias( 20, 10, 3 );
+16255
+</pre></td></tr></table>
+
+<p><a id="X82366C277E218130" name="X82366C277E218130"></a></p>
+
+<h5>7.1-6 UpperBoundGriesmer</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundGriesmer</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBoundGriesmer( 13, 5, 2 );
+64
+gap> UpperBoundGriesmer( 18, 9, 2 );
+8        # the maximum number of words for a linear code is 8
+gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
+20       # this non-linear code has 20 elements 
+</pre></td></tr></table>
+
+<p><a id="X8301FA9F7C6C7445" name="X8301FA9F7C6C7445"></a></p>
+
+<h5>7.1-7 IsGriesmerCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsGriesmerCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsGriesmerCode</code> returns `true' if a linear code <var class="Arg">C</var> is a Griesmer code, and `false' otherwise. A code is called <em>Griesmer</em> if its length satisfies</p>
+
+<p class="pcenter">
+n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
+true
+gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7A5CB74485184FEE" name="X7A5CB74485184FEE"></a></p>
+
+<h5>7.1-8 UpperBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBound</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBound</code> returns the best known upper bound A(n,d) for the size of a code of length <var class="Arg">n</var>, minimum distance <var class="Arg">d</var> over a field of size <var class="Arg">q</var>. The function <code class="code">UpperBound</code> first checks for trivial cases (like d=1 or n=d), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see <code class="func">UpperBou [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> UpperBound( 10, 3, 2 );
+85
+gap> UpperBound( 25, 9, 8 );
+1211778792827540 
+</pre></td></tr></table>
+
+<p><a id="X7FDF54BA81115D88" name="X7FDF54BA81115D88"></a></p>
+
+<h5>7.1-9 LowerBoundMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundMinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this form, <code class="code">LowerBoundMinimumDistance</code> returns a lower bound for the minimum distance of code <var class="Arg">C</var>.</p>
+
+<p>This command can also be called using the syntax <code class="code">LowerBoundMinimumDistance( n, k, F )</code>. In this form, <code class="code">LowerBoundMinimumDistance</code> returns a lower bound for the minimum distance of the best known linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. It uses the mechanism explained in section <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 45, 7 );
+a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
+gap> LowerBoundMinimumDistance( C );
+7     # designed distance is lower bound for minimum distance 
+gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
+10 
+</pre></td></tr></table>
+
+<p><a id="X7CF15D2084499869" name="X7CF15D2084499869"></a></p>
+
+<h5>7.1-10 LowerBoundGilbertVarshamov</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundGilbertVarshamov</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each <var class="Arg">n</var> and <var class="Arg">d</var>, there exists a linear code having length n and minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LowerBoundGilbertVarshamov(3,2,2);
+4
+gap> LowerBoundGilbertVarshamov(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,3,2);
+1
+gap> LowerBoundMinimumDistance(3,2,2);
+2
+</pre></td></tr></table>
+
+<p><a id="X8217D830871286D8" name="X8217D830871286D8"></a></p>
+
+<h5>7.1-11 LowerBoundSpherePacking</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundSpherePacking</code>( <var class="Arg">n, d, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each <var class="Arg">n</var> and <var class="Arg">r</var>, there exists an unrestricted code at least of size q^n/ SphereContent(n,d,GF(q)) minimum distance d.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> LowerBoundSpherePacking(3,2,2);
+2
+gap> LowerBoundSpherePacking(3,3,2);
+1
+</pre></td></tr></table>
+
+<p><a id="X7C6A58327BD6B685" name="X7C6A58327BD6B685"></a></p>
+
+<h5>7.1-12 UpperBoundMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundMinimumDistance</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>In this form, <code class="code">UpperBoundMinimumDistance</code> returns an upper bound for the minimum distance of code <var class="Arg">C</var>. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>).</p>
+
+<p>This command can also be called using the syntax <code class="code">UpperBoundMinimumDistance( n, k, F )</code>. In this form, <code class="code">UpperBoundMinimumDistance</code> returns an upper bound for the minimum distance of the best known linear code of length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. It uses the mechanism explained in section <a href="chap7.html#X7B3858B27A9E509A"><b>7.1-13</b></a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := BCHCode( 45, 7 );;
+gap> UpperBoundMinimumDistance( C );
+9 
+gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
+11 
+</pre></td></tr></table>
+
+<p><a id="X7B3858B27A9E509A" name="X7B3858B27A9E509A"></a></p>
+
+<h5>7.1-13 BoundsMinimumDistance</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BoundsMinimumDistance</code>( <var class="Arg">n, k, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">BoundsMinimumDistance</code> calculates a lower and upper bound for the minimum distance of an optimal linear code with word length <var class="Arg">n</var>, dimension <var class="Arg">k</var> over field <var class="Arg">F</var>. The function returns a record with the two bounds and an explanation for each bound. The function <code class="code">Display</code> can be used to show the explanations.</p>
+
+<p>The values for the lower and upper bound are obtained from a table. <strong class="pkg">GUAVA</strong> has tables containing lower and upper bounds for q=2 (n <= 257), 3 (n <= 243), 4 (n <= 256). (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See <a href="chapBib.html#biBBr">[Bro06]</a>, <span class="URL"><a href="http://www.win.tue.nl/~aeb/voorlincod.html">http://www.win.tue.nl/~aeb/voorlincod.html</a></span> for the most recent data.) For [...]
+
+<p>The resulting record can be used in the function <code class="code">BestKnownLinearCode</code> (see <code class="func">BestKnownLinearCode</code> (<a href="chap5.html#X871508567CB34D96"><b>5.2-14</b></a>)) to construct a code with minimum distance equal to the lower bound.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
+an optimal linear [7,3,d] code over GF(2) has d=4
+------------------------------------------------------------------------------
+Lb(7,3)=4, by shortening of:
+Lb(8,4)=4, u u+v construction of C1 and C2:
+Lb(4,3)=2, dual of the repetition code
+Lb(4,1)=4, repetition code
+------------------------------------------------------------------------------
+Ub(7,3)=4, Griesmer bound
+# The lower bound is equal to the upper bound, so a code with
+# these parameters is optimal.
+gap> C := BestKnownLinearCode( bounds );; Display( C );
+a linear [7,3,4]2..3 shortened code of
+a linear [8,4,4]2 U U+V construction code of
+U: a cyclic [4,3,2]1 dual code of
+   a cyclic [4,1,4]2 repetition code over GF(2)
+V: a cyclic [4,1,4]2 repetition code over GF(2)
+</pre></td></tr></table>
+
+<p><a id="X817D0A647D3331EB" name="X817D0A647D3331EB"></a></p>
+
+<h4>7.2 <span class="Heading">
+Covering radius bounds on codes
+</span></h4>
+
+<p><a id="X8320D1C180A1AAAD" name="X8320D1C180A1AAAD"></a></p>
+
+<h5>7.2-1 BoundsCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> BoundsCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">BoundsCoveringRadius</code> returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of <var class="Arg">C</var>, the last entry the minimum of some upper bounds of <var class="Arg">C</var>.</p>
+
+<p>If the covering radius of <var class="Arg">C</var> is known, a list of length 1 is returned. <code class="code">BoundsCoveringRadius</code> makes use of the functions <code class="code">GeneralLowerBoundCoveringRadius</code> and <code class="code">GeneralUpperBoundCoveringRadius</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
+[ 3 .. 4 ]
+gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
+[ 1 ] 
+</pre></td></tr></table>
+
+<p><a id="X7881E03E812140F4" name="X7881E03E812140F4"></a></p>
+
+<h5>7.2-2 IncreaseCoveringRadiusLowerBound</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IncreaseCoveringRadiusLowerBound</code>( <var class="Arg">C[, stopdist][, startword]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IncreaseCoveringRadiusLowerBound</code> tries to increase the lower bound of the covering radius of <var class="Arg">C</var>. It does this by means of a probabilistic algorithm. This algorithm takes a random word in GF(q)^n (or <var class="Arg">startword</var> if it is specified), and, by changing random coordinates, tries to get as far from <var class="Arg">C</var> as possible. If changing a coordinate finds a word that has a larger distance to the code than the pr [...]
+
+<p>If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an <em>orphan</em>).</p>
+
+<p>If the algorithm finds a word that has distance <var class="Arg">stopdist</var> to the code, it ends and returns that word, which can be used for further investigations.</p>
+
+<p>The variable <var class="Arg">InfoCoveringRadius</var> can be set to <var class="Arg">Print</var> to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with <strong class="button">ctrl-C</strong>, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is i, then it correspon [...]
+
+<p>At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be <em>very</em> patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable <var class="Arg">CRMemSize</var> to a lower value. This might cause the algorithm to run slower, but without quitting GAP. T [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> IncreaseCoveringRadiusLowerBound(C,10);
+Number of runs: 1000  best distance so far: 3
+Number of runs: 2000  best distance so far: 3
+Number of changes: 100
+Number of runs: 3000  best distance so far: 3
+Number of runs: 4000  best distance so far: 3
+Number of runs: 5000  best distance so far: 3
+Number of runs: 6000  best distance so far: 3
+Number of runs: 7000  best distance so far: 3
+Number of changes: 200
+Number of runs: 8000  best distance so far: 3
+Number of runs: 9000  best distance so far: 3
+Number of runs: 10000  best distance so far: 3
+Number of changes: 300
+Number of runs: 11000  best distance so far: 3
+Number of runs: 12000  best distance so far: 3
+Number of runs: 13000  best distance so far: 3
+Number of changes: 400
+Number of runs: 14000  best distance so far: 3
+user interrupt at... 
+#
+# used ctrl-c to break out of execution
+#
+... called from 
+IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
+ function( arguments ) called from read-eval-loop
+Entering break read-eval-print loop ...
+you can 'quit;' to quit to outer loop, or
+you can 'return;' to continue
+brk> current;
+[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
+brk>
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X7AD9F1D27C52BC0F" name="X7AD9F1D27C52BC0F"></a></p>
+
+<h5>7.2-3 ExhaustiveSearchCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ExhaustiveSearchCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ExhaustiveSearchCoveringRadius</code> does an exhaustive search to find the covering radius of <var class="Arg">C</var>. Every time a coset leader of a coset with weight w is found, the function tries to find a coset leader of a coset with weight w+1. It does this by enumerating all words of weight w+1, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> ExhaustiveSearchCoveringRadius(C);
+Trying 3 ...
+[ 3 .. 5 ]
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X85D671F4824B4B0C" name="X85D671F4824B4B0C"></a></p>
+
+<h5>7.2-4 GeneralLowerBoundCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralLowerBoundCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralLowerBoundCoveringRadius</code> returns a lower bound on the covering radius of <var class="Arg">C</var>. It uses as many functions which names start with <code class="code">LowerBoundCoveringRadius</code> as possible to find the best known lower bound (at least that <strong class="pkg">GUAVA</strong> knows of) together with tables for the covering radius of binary linear codes with length not greater than 64.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralLowerBoundCoveringRadius(C);
+2
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X8638F5A67D6E50C1" name="X8638F5A67D6E50C1"></a></p>
+
+<h5>7.2-5 GeneralUpperBoundCoveringRadius</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralUpperBoundCoveringRadius</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralUpperBoundCoveringRadius</code> returns an upper bound on the covering radius of <var class="Arg">C</var>. It uses as many functions which names start with <code class="code">UpperBoundCoveringRadius</code> as possible to find the best known upper bound (at least that <strong class="pkg">GUAVA</strong> knows of).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> GeneralUpperBoundCoveringRadius(C);
+4
+gap> CoveringRadius(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X7E7FBCC87D5562AB" name="X7E7FBCC87D5562AB"></a></p>
+
+<h5>7.2-6 LowerBoundCoveringRadiusSphereCovering</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusSphereCovering</code>( <var class="Arg">n, M[, F], false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusSphereCovering</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and c [...]
+
+<p><var class="Arg">F</var> is the field over which the code is defined. If <var class="Arg">F</var> is omitted, it is assumed that the code is over GF(2). The bound is computed according to the sphere covering bound:</p>
+
+<p class="pcenter">
+M \cdot V_q(n,r) \geq q^n
+</p>
+
+<p>where V_q(n,r) is the size of a sphere of radius r in GF(q)^n.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
+6
+
+</pre></td></tr></table>
+
+<p><a id="X85E20C518360AB70" name="X85E20C518360AB70"></a></p>
+
+<h5>7.2-7 LowerBoundCoveringRadiusVanWee1</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusVanWee1</code>( <var class="Arg">n, M[, F], false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusVanWee1( n, r, [F,] true )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusVanWee1</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius [...]
+
+<p><var class="Arg">F</var> is the field over which the code is defined. If <var class="Arg">F</var> is omitted, it is assumed that the code is over GF(2).</p>
+
+<p>The Van Wee bound is an improvement of the sphere covering bound:</p>
+
+<p class="pcenter">
+M \cdot \left\{ V_q(n,r) -
+\frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil}
+\left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right)
+\right\} \geq q^n
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
+2
+gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
+6
+
+</pre></td></tr></table>
+
+<p><a id="X7C72994A825228E7" name="X7C72994A825228E7"></a></p>
+
+<h5>7.2-8 LowerBoundCoveringRadiusVanWee2</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusVanWee2</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called using the syntax <code class="code">LowerBoundCoveringRadiusVanWee2( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusVanWee2</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <v [...]
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right)
+V_2(n,r) + \varepsilon
+V_2(n,r-2) \right)}
+{(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)}
+\geq 2^n,
+</p>
+
+<p>where</p>
+
+<p class="pcenter">
+\varepsilon = {r+2 \choose 2} \left\lceil
+{n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil
+- {n-r+1 \choose 2}.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7F95362485759ACB" name="X7F95362485759ACB"></a></p>
+
+<h5>7.2-9 LowerBoundCoveringRadiusCountingExcess</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusCountingExcess</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusCountingExcess( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusCountingExcess</code> is <var class="Arg">false</var>, then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius  [...]
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq
+(\rho + \varepsilon) 2^n,
+</p>
+
+<p>where</p>
+
+<p class="pcenter">
+\varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)
+</p>
+
+<p>and</p>
+
+<p class="pcenter">
+\rho = \left\{
+\begin{array}{l}
+n-3+\frac{2}{n}, \ \ \  \ \ \  {\rm if}\   r = 2\\
+n-r-1  ,        \ \ \  \ \ \   {\rm if}\   r \geq 3 .
+\end{array}
+\right.
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
+0
+gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X829C14A383B5BF59" name="X829C14A383B5BF59"></a></p>
+
+<h5>7.2-10 LowerBoundCoveringRadiusEmbedded1</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusEmbedded1</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusEmbedded1( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is 'false', then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq
+2^n - A( n, 2r+1 ) {2r \choose r},
+</p>
+
+<p>where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function <code class="code">UpperBound</code> is used to compute this value.</p>
+
+<p>Sometimes <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is better than <code class="code">LowerBoundCoveringRadiusEmbedded2</code>, sometimes it is the other way around.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(10,5,GF(2));
+a  [10,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+3
+gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7B0C81B88604C448" name="X7B0C81B88604C448"></a></p>
+
+<h5>7.2-11 LowerBoundCoveringRadiusEmbedded2</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusEmbedded2</code>( <var class="Arg">n, M, false</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command can also be called with <code class="code">LowerBoundCoveringRadiusEmbedded2( n, r [,true] )</code>. If the last argument of <code class="code">LowerBoundCoveringRadiusEmbedded2</code> is 'false', then it returns a lower bound for the covering radius of a code of size <var class="Arg">M</var> and length <var class="Arg">n</var>. Otherwise, it returns a lower bound for the size of a code of length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>This bound only works for binary codes. It is based on the following inequality:</p>
+
+<p class="pcenter">
+M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq
+2^n - 2A( n, 2r+1 ) {2r \choose r},
+</p>
+
+<p>where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function <code class="code">UpperBound</code> is used to compute this value.</p>
+
+<p>Sometimes <code class="code">LowerBoundCoveringRadiusEmbedded1</code> is better than <code class="code">LowerBoundCoveringRadiusEmbedded2</code>, sometimes it is the other way around.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> Size(C);
+32
+gap> CoveringRadius(C);
+6
+gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
+2
+gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X7D27F6E27B9A0D35" name="X7D27F6E27B9A0D35"></a></p>
+
+<h5>7.2-12 LowerBoundCoveringRadiusInduction</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> LowerBoundCoveringRadiusInduction</code>( <var class="Arg">n, r</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">LowerBoundCoveringRadiusInduction</code> returns a lower bound for the size of a code with length <var class="Arg">n</var> and covering radius <var class="Arg">r</var>.</p>
+
+<p>If n = 2r+2 and r >= 1, the returned value is 4.</p>
+
+<p>If n = 2r+3 and r >= 1, the returned value is 7.</p>
+
+<p>If n = 2r+4 and r >= 4, the returned value is 8.</p>
+
+<p>Otherwise, 0 is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> LowerBoundCoveringRadiusInduction(15,6);
+7
+
+</pre></td></tr></table>
+
+<p><a id="X80F8DFAD7D67CBEC" name="X80F8DFAD7D67CBEC"></a></p>
+
+<h5>7.2-13 UpperBoundCoveringRadiusRedundancy</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusRedundancy</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusRedundancy</code> returns the redundancy of <var class="Arg">C</var> as an upper bound for the covering radius of <var class="Arg">C</var>. <var class="Arg">C</var> must be a linear code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusRedundancy(C);
+10
+
+</pre></td></tr></table>
+
+<p><a id="X832847A17FD0D142" name="X832847A17FD0D142"></a></p>
+
+<h5>7.2-14 UpperBoundCoveringRadiusDelsarte</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusDelsarte</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusDelsarte</code> returns an upper bound for the covering radius of <var class="Arg">C</var>. This upper bound is equal to the external distance of <var class="Arg">C</var>, this is the minimum distance of the dual code, if <var class="Arg">C</var> is a linear code.</p>
+
+<p>This is described in Theorem 11.3.3 of <a href="chapBib.html#biBHP03">[HP03]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusDelsarte(C);
+13
+</pre></td></tr></table>
+
+<p><a id="X86F10D9E79AB8796" name="X86F10D9E79AB8796"></a></p>
+
+<h5>7.2-15 UpperBoundCoveringRadiusStrength</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusStrength</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">UpperBoundCoveringRadiusStrength</code> returns an upper bound for the covering radius of <var class="Arg">C</var>.</p>
+
+<p>First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has <em>strength</em> 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns fracq-1qm + (n-m) (where q is the size of the field and m is the length of punctured code), otherwise it returns n. This bound works for all codes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusStrength(C);
+7
+</pre></td></tr></table>
+
+<p><a id="X8585C6A982489FC3" name="X8585C6A982489FC3"></a></p>
+
+<h5>7.2-16 UpperBoundCoveringRadiusGriesmerLike</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusGriesmerLike</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns an upper bound for the covering radius of <var class="Arg">C</var>, which must be linear, in a Griesmer-like fashion. It returns</p>
+
+<p class="pcenter">
+n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil
+</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=RandomLinearCode(15,5,GF(2));
+a  [15,5,?] randomly generated code over GF(2)
+gap> CoveringRadius(C);
+5
+gap> UpperBoundCoveringRadiusGriesmerLike(C);
+9
+
+</pre></td></tr></table>
+
+<p><a id="X82A38F5F858CF3FC" name="X82A38F5F858CF3FC"></a></p>
+
+<h5>7.2-17 UpperBoundCoveringRadiusCyclicCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> UpperBoundCoveringRadiusCyclicCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This function returns an upper bound for the covering radius of <var class="Arg">C</var>, which must be a cyclic code. It returns</p>
+
+<p class="pcenter">
+n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,
+</p>
+
+<p>where g(x) is the generator polynomial of <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> C:=CyclicCodes(15,GF(2))[3];
+a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
+gap> CoveringRadius(C);
+3
+gap> UpperBoundCoveringRadiusCyclicCode(C);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X806EBEC77C16E657" name="X806EBEC77C16E657"></a></p>
+
+<h4>7.3 <span class="Heading">
+Special matrices in <strong class="pkg">GUAVA</strong>
+</span></h4>
+
+<p>This section explains functions that work with special matrices <strong class="pkg">GUAVA</strong> needs for several codes.</p>
+
+<p>Firstly, we describe some matrix generating functions (see <code class="func">KrawtchoukMat</code> (<a href="chap7.html#X82899B64802A4BCE"><b>7.3-1</b></a>), <code class="func">GrayMat</code> (<a href="chap7.html#X87AFE2C078031CE4"><b>7.3-2</b></a>), <code class="func">SylvesterMat</code> (<a href="chap7.html#X7E1E7C5287919CDB"><b>7.3-3</b></a>), <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>) and <code class="func">MOLS</code> (<a href= [...]
+
+<p>Next we describe two functions regarding a standard form of matrices (see <code class="func">PutStandardForm</code> (<a href="chap7.html#X7B47D82485B66F1D"><b>7.3-6</b></a>) and <code class="func">IsInStandardForm</code> (<a href="chap7.html#X7D4EDA0A854EBFEF"><b>7.3-7</b></a>)).</p>
+
+<p>Then we describe functions that return a matrix after a manipulation (see <code class="func">PermutedCols</code> (<a href="chap7.html#X7A97AD477E7638DE"><b>7.3-8</b></a>), <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>) and <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>)).</p>
+
+<p>Finally, we describe functions that do some tests on matrices (see <code class="func">IsLatinSquare</code> (<a href="chap7.html#X7F34306B81DC2776"><b>7.3-12</b></a>) and <code class="func">AreMOLS</code> (<a href="chap7.html#X81B9B40B7B2D97D5"><b>7.3-13</b></a>)).</p>
+
+<p><a id="X82899B64802A4BCE" name="X82899B64802A4BCE"></a></p>
+
+<h5>7.3-1 KrawtchoukMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> KrawtchoukMat</code>( <var class="Arg">n, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">KrawtchoukMat</code> returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j) for i,j=0,...,n. K_i(j) is the Krawtchouk number (see <code class="func">Krawtchouk</code> (<a href="chap7.html#X7ACDC5377CD17451"><b>7.5-6</b></a>)). <var class="Arg">n</var> must be a positive integer and <var class="Arg">q</var> a prime power. The Krawtchouk matrix is used in the <em>MacWilliams identities</em>, defining the relation between the weight distribution of a code of len [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrintArray( KrawtchoukMat( 3, 2 ) );
+[ [   1,   1,   1,   1 ],
+  [   3,   1,  -1,  -3 ],
+  [   3,  -1,  -1,   3 ],
+  [   1,  -1,   1,  -1 ] ]
+gap> C := HammingCode( 3 );; a := WeightDistribution( C );
+[ 1, 0, 0, 7, 7, 0, 0, 1 ]
+gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
+gap> k := Dimension( C );;
+gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
+[ 1, 0, 0, 0, 7, 0, 0, 0 ]
+gap> WeightDistribution( DualCode( C ) );
+[ 1, 0, 0, 0, 7, 0, 0, 0 ] 
+</pre></td></tr></table>
+
+<p><a id="X87AFE2C078031CE4" name="X87AFE2C078031CE4"></a></p>
+
+<h5>7.3-2 GrayMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GrayMat</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GrayMat</code> returns a list of all different vectors (see GAP's <code class="code">Vectors</code> command) of length <var class="Arg">n</var> over the field <var class="Arg">F</var>, using Gray ordering. <var class="Arg">n</var> must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to <code class="code">GrayMat</code> returns a new matrix, so it is saf [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> GrayMat(3);
+[ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
+  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
+  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
+  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
+gap> G := GrayMat( 4, GF(4) );; Length(G);
+256          # the length of a GrayMat is always q^n
+gap> G[101] - G[100];
+[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 
+</pre></td></tr></table>
+
+<p><a id="X7E1E7C5287919CDB" name="X7E1E7C5287919CDB"></a></p>
+
+<h5>7.3-3 SylvesterMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SylvesterMat</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SylvesterMat</code> returns the nx n Sylvester matrix of order <var class="Arg">n</var>. This is a special case of the Hadamard matrices (see <code class="func">HadamardMat</code> (<a href="chap7.html#X8014A1F181ECD8AA"><b>7.3-4</b></a>)). For this construction, <var class="Arg">n</var> must be a power of 2. Each call to <code class="code">SylvesterMat</code> returns a new matrix, so it is safe to modify the result.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrintArray(SylvesterMat(2));
+[ [   1,   1 ],
+  [   1,  -1 ] ]
+gap> PrintArray( SylvesterMat(4) );
+[ [   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X8014A1F181ECD8AA" name="X8014A1F181ECD8AA"></a></p>
+
+<h5>7.3-4 HadamardMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HadamardMat</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HadamardMat</code> returns a Hadamard matrix of order <var class="Arg">n</var>. This is an nx n matrix with the property that the matrix multiplied by its transpose returns <var class="Arg">n</var> times the identity matrix. This is only possible for n=1, n=2 or in cases where <var class="Arg">n</var> is a multiple of 4. If the matrix does not exist or is not known (as of 1998), <code class="code">HadamardMat</code> returns an error. A large number of construction m [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> C := HadamardMat(8);; PrintArray(C);
+[ [   1,   1,   1,   1,   1,   1,   1,   1 ],
+  [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
+  [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
+  [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
+  [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
+  [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
+  [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
+  [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
+gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X797F43607AD8660D" name="X797F43607AD8660D"></a></p>
+
+<h5>7.3-5 VandermondeMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VandermondeMat</code>( <var class="Arg">X, a</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">VandermondeMat</code> returns the (a+1)x n matrix of powers x_i^j where <var class="Arg">X</var> is a list of elements of a field, X= x_1,...,x_n, and <var class="Arg">a</var> is a non-negative integer.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
+[ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
+  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
+gap> Display(M);
+ 1 2 4
+ 1 4 1
+ 1 1 1
+ 1 3 4
+</pre></td></tr></table>
+
+<p><a id="X7B47D82485B66F1D" name="X7B47D82485B66F1D"></a></p>
+
+<h5>7.3-6 PutStandardForm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PutStandardForm</code>( <var class="Arg">M[, idleft]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>We say that a kx n matrix is in <em>standard form</em> if it is equal to the block matrix (I | A), for some kx (n-k) matrix A and where I is the kx k identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. <code class="code">PutStandardForm</code> puts a matrix <var class="Arg">M</var> in standard form, and returns the permutation needed to do so. [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
+gap> PutStandardForm(M);                   # identity at the left side
+(2,3)
+gap> PrintArray(M);
+[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> PutStandardForm(M, false);            # identity at the right side
+(1,4,3)
+gap> PrintArray(M);
+[ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
+  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
+gap> C := BestKnownLinearCode( 23, 12, GF(2) );
+a linear [23,12,7]3 punctured code
+gap> G:=MutableCopyMat(GeneratorMat(C));;
+gap> PutStandardForm(G);
+()
+gap> Display(G);
+ 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
+ . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
+ . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
+ . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
+ . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
+ . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
+ . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
+ . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
+ . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
+ . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
+ . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
+ . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
+
+</pre></td></tr></table>
+
+<p><a id="X7D4EDA0A854EBFEF" name="X7D4EDA0A854EBFEF"></a></p>
+
+<h5>7.3-7 IsInStandardForm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsInStandardForm</code>( <var class="Arg">M[, idleft]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsInStandardForm</code> determines if <var class="Arg">M</var> is in standard form. <var class="Arg">idleft</var> is a boolean that indicates the position of the identity matrix in <var class="Arg">M</var>, as in <code class="code">PutStandardForm</code> (see <code class="func">PutStandardForm</code> (<a href="chap7.html#X7B47D82485B66F1D"><b>7.3-6</b></a>)). <code class="code">IsInStandardForm</code> checks if the identity matrix is at the left side of <var class=" [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsInStandardForm(IdentityMat(7, GF(2)));
+true
+gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
+true
+gap> IsInStandardForm([[1, 3, 2, 7]]);
+true
+gap> IsInStandardForm(HadamardMat(4));
+false 
+</pre></td></tr></table>
+
+<p><a id="X7A97AD477E7638DE" name="X7A97AD477E7638DE"></a></p>
+
+<h5>7.3-8 PermutedCols</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PermutedCols</code>( <var class="Arg">M, P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PermutedCols</code> returns a matrix <var class="Arg">M</var> with a permutation <var class="Arg">P</var> applied to its columns.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
+[ [  1,  2,  3,  4 ],
+  [  1,  2,  3,  4 ] ]
+gap> PrintArray(PermutedCols(M, (1,2,3)));
+[ [  3,  1,  2,  4 ],
+  [  3,  1,  2,  4 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7B68119F85E9EC6D" name="X7B68119F85E9EC6D"></a></p>
+
+<h5>7.3-9 VerticalConversionFieldMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> VerticalConversionFieldMat</code>( <var class="Arg">M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">VerticalConversionFieldMat</code> returns the matrix <var class="Arg">M</var> with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the GF(p)-vector space isomorphism</p>
+
+<p class="pcenter">
+
+[...] : GF(q)\rightarrow GF(p)^m,
+</p>
+
+<p>with q=p^m.</p>
+
+<p>If <var class="Arg">M</var> is a k by n matrix, the result is a k* m x n matrix, since each element of GF(q^m) can be represented in GF(q) using m elements.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
+[ [  0*Z(3),  0*Z(3) ],
+  [  Z(3)^0,    Z(3) ],
+  [  0*Z(3),  0*Z(3) ],
+  [    Z(3),  Z(3)^0 ] ]
+gap> DefaultField( Flat(VCFM) );
+GF(3) 
+</pre></td></tr></table>
+
+<p>A similar function is <code class="code">HorizontalConversionFieldMat</code> (see <code class="func">HorizontalConversionFieldMat</code> (<a href="chap7.html#X8033E9A67BA155C8"><b>7.3-10</b></a>)).</p>
+
+<p><a id="X8033E9A67BA155C8" name="X8033E9A67BA155C8"></a></p>
+
+<h5>7.3-10 HorizontalConversionFieldMat</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> HorizontalConversionFieldMat</code>( <var class="Arg">M, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">HorizontalConversionFieldMat</code> returns the matrix <var class="Arg">M</var> with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed horizontally in the matrix.</p>
+
+<p>If <var class="Arg">M</var> is a k x n matrix, the result is a kx mx n* m matrix. The new word length of the resulting code is equal to n* m, because each element of GF(q^m) can be represented in GF(q) using m elements. The new dimension is equal to kx m because the new matrix should be a basis for the same number of vectors as the old one.</p>
+
+<p><code class="code">ConversionFieldCode</code> uses horizontal conversion to convert a code (see <code class="func">ConversionFieldCode</code> (<a href="chap6.html#X81FE1F387DFCCB22"><b>6.1-15</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
+[ [    Z(3^2),  Z(3^2)^5 ],
+  [  Z(3^2)^5,    Z(3^2) ] ]
+gap> DefaultField( Flat(M) );
+GF(3^2)
+gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
+[ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
+  [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
+  [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
+  [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
+gap> DefaultField( Flat(HCFM) );
+GF(3) 
+</pre></td></tr></table>
+
+<p>A similar function is <code class="code">VerticalConversionFieldMat</code> (see <code class="func">VerticalConversionFieldMat</code> (<a href="chap7.html#X7B68119F85E9EC6D"><b>7.3-9</b></a>)).</p>
+
+<p><a id="X804AAFF2867080F7" name="X804AAFF2867080F7"></a></p>
+
+<h5>7.3-11 MOLS</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MOLS</code>( <var class="Arg">q[, n]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">MOLS</code> returns a list of <var class="Arg">n</var> <em>Mutually Orthogonal Latin Squares</em> (MOLS). A <em>Latin square</em> of order <var class="Arg">q</var> is a qx q matrix whose entries are from a set F_q of <var class="Arg">q</var> distinct symbols (<strong class="pkg">GUAVA</strong> uses the integers from 0 to <var class="Arg">q</var>) such that each row and each column of the matrix contains each symbol exactly once.</p>
+
+<p>A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once.</p>
+
+<p><var class="Arg">n</var> must be less than <var class="Arg">q</var>. If <var class="Arg">n</var> is omitted, two MOLS are returned. If <var class="Arg">q</var> is not a prime power, at most 2 MOLS can be created. For all values of <var class="Arg">q</var> with q > 2 and q <> 6, a list of MOLS can be constructed. However, <strong class="pkg">GUAVA</strong> does not yet construct MOLS for q= 2 mod 4. If it is not possible to construct <var class="Arg">n</var> MOLS, the function [...]
+
+<p>MOLS are used to create <var class="Arg">q</var>-ary codes (see <code class="func">MOLSCode</code> (<a href="chap5.html#X81B7EE4279398F67"><b>5.1-4</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
+[ [  0,  1,  2,  3 ],
+  [  1,  0,  3,  2 ],
+  [  2,  3,  0,  1 ],
+  [  3,  2,  1,  0 ] ]
+gap> PrintArray( M[2] );
+[ [  0,  2,  3,  1 ],
+  [  1,  3,  2,  0 ],
+  [  2,  0,  1,  3 ],
+  [  3,  1,  0,  2 ] ]
+gap> PrintArray( M[3] );
+[ [  0,  3,  1,  2 ],
+  [  1,  2,  0,  3 ],
+  [  2,  1,  3,  0 ],
+  [  3,  0,  2,  1 ] ]
+gap> MOLS( 12, 3 );
+false 
+</pre></td></tr></table>
+
+<p><a id="X7F34306B81DC2776" name="X7F34306B81DC2776"></a></p>
+
+<h5>7.3-12 IsLatinSquare</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsLatinSquare</code>( <var class="Arg">M</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsLatinSquare</code> determines if a matrix <var class="Arg">M</var> is a Latin square. For a Latin square of size nx n, each row and each column contains all the integers 1,dots,n exactly once.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsLatinSquare([[1,2],[2,1]]);
+true
+gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
+false 
+</pre></td></tr></table>
+
+<p><a id="X81B9B40B7B2D97D5" name="X81B9B40B7B2D97D5"></a></p>
+
+<h5>7.3-13 AreMOLS</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> AreMOLS</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">AreMOLS</code> determines if <var class="Arg">L</var> is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function <code class="code">MOLS</code> creates MOLS (see <code class="func">MOLS</code> (<a href="chap7.html#X804AAFF2867080F7"><b>7.3-11</b></a>)).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> M := MOLS(4,2);
+[ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
+  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
+gap> AreMOLS(M);
+true 
+</pre></td></tr></table>
+
+<p><a id="X7AB5E5CE7FDF7132" name="X7AB5E5CE7FDF7132"></a></p>
+
+<h4>7.4 <span class="Heading">
+Some functions related to the norm of a code
+</span></h4>
+
+<p>In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane <a href="chapBib.html#biBGS85">[GS85]</a>.</p>
+
+<p><a id="X8032E53078264ABB" name="X8032E53078264ABB"></a></p>
+
+<h5>7.4-1 CoordinateNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoordinateNorm</code>( <var class="Arg">C, coord</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CoordinateNorm</code> returns the norm of <var class="Arg">C</var> with respect to coordinate <var class="Arg">coord</var>. If C_a = c in C | c_coord = a, then the norm of <var class="Arg">C</var> with respect to <var class="Arg">coord</var> is defined as</p>
+
+<p class="pcenter">
+\max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),
+</p>
+
+<p>with the convention that d(x,C_a) = n if C_a is empty.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
+3 
+</pre></td></tr></table>
+
+<p><a id="X7ED2EF368203AF47" name="X7ED2EF368203AF47"></a></p>
+
+<h5>7.4-2 CodeNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeNorm</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeNorm</code> returns the norm of <var class="Arg">C</var>. The <em>norm</em> of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate <code class="code">CoordinateNorm</code> is called, and the minimum of the calculated numbers is returned.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeNorm( HammingCode( 3, GF(2) ) );
+3 
+</pre></td></tr></table>
+
+<p><a id="X7D24F8BF7F9A7BF1" name="X7D24F8BF7F9A7BF1"></a></p>
+
+<h5>7.4-3 IsCoordinateAcceptable</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsCoordinateAcceptable</code>( <var class="Arg">C, coord</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsCoordinateAcceptable</code> returns `true' if coordinate <var class="Arg">coord</var> of <var class="Arg">C</var> is acceptable. A coordinate is called <em>acceptable</em> if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
+true 
+</pre></td></tr></table>
+
+<p><a id="X87039FD179AD3009" name="X87039FD179AD3009"></a></p>
+
+<h5>7.4-4 GeneralizedCodeNorm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GeneralizedCodeNorm</code>( <var class="Arg">C, subcode1, subscode2, ..., subcodek</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">GeneralizedCodeNorm</code> returns the <var class="Arg">k</var>-norm of <var class="Arg">C</var> with respect to <var class="Arg">k</var> subcodes.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> c := RepetitionCode( 7, GF(2) );;
+gap> ham := HammingCode( 3, GF(2) );;
+gap> d := EvenWeightSubcode( ham );;
+gap> e := ConstantWeightSubcode( ham, 3 );;
+gap> GeneralizedCodeNorm( ham, c, d, e );
+4 
+</pre></td></tr></table>
+
+<p><a id="X80283A2F7C8101BD" name="X80283A2F7C8101BD"></a></p>
+
+<h5>7.4-5 IsNormalCode</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IsNormalCode</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">IsNormalCode</code> returns `true' if <var class="Arg">C</var> is normal. A code is called <em>normal</em> if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found.</p>
+
+<p>Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, <code class="code">IsNormalCode</code> uses much information from the literature (in particular, <a href="chapBib.html#biBGS85">[GS85]</a>) about normality for certain code parameters.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IsNormalCode( HammingCode( 3, GF(2) ) );
+true 
+</pre></td></tr></table>
+
+<p><a id="X8308D685809A4E2F" name="X8308D685809A4E2F"></a></p>
+
+<h4>7.5 <span class="Heading">
+Miscellaneous functions
+</span></h4>
+
+<p>In this section we describe several vector space functions <strong class="pkg">GUAVA</strong> uses for constructing codes or performing calculations with codes.</p>
+
+<p>In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes.</p>
+
+<p><a id="X871286437DE7A6A4" name="X871286437DE7A6A4"></a></p>
+
+<h5>7.5-1 CodeWeightEnumerator</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeWeightEnumerator</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeWeightEnumerator</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} A_i x^i,
+</p>
+
+<p>where A_i is the number of codewords in <var class="Arg">C</var> with weight i.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
+> [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
+x^3 + x^2 + x + 1
+gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
+x^7 + 7*x^4 + 7*x^3 + 1 
+</pre></td></tr></table>
+
+<p><a id="X84DA928083B103A0" name="X84DA928083B103A0"></a></p>
+
+<h5>7.5-2 CodeDistanceEnumerator</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeDistanceEnumerator</code>( <var class="Arg">C, w</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeDistanceEnumerator</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} B_i x^i,
+</p>
+
+<p>where B_i is the number of codewords with distance i to <var class="Arg">w</var>.</p>
+
+<p>If <var class="Arg">w</var> is a codeword, then <code class="code">CodeDistanceEnumerator</code> returns the same polynomial as <code class="code">CodeWeightEnumerator</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
+x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
+gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
+x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'
+</pre></td></tr></table>
+
+<p><a id="X84B2BE66780EFBF9" name="X84B2BE66780EFBF9"></a></p>
+
+<h5>7.5-3 CodeMacWilliamsTransform</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeMacWilliamsTransform</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeMacWilliamsTransform</code> returns a polynomial of the following form:</p>
+
+<p class="pcenter">
+f(x) = \sum_{i=0}^{n} C_i x^i,
+</p>
+
+<p>where C_i is the number of codewords with weight i in the <em>dual</em> code of <var class="Arg">C</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
+7*x^4 + 1 
+</pre></td></tr></table>
+
+<p><a id="X7903286078F8051B" name="X7903286078F8051B"></a></p>
+
+<h5>7.5-4 CodeDensity</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CodeDensity</code>( <var class="Arg">C</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CodeDensity</code> returns the <em>density</em> of <var class="Arg">C</var>. The density of a code is defined as</p>
+
+<p class="pcenter">
+\frac{M \cdot V_q(n,t)}{q^n},
+</p>
+
+<p>where M is the size of the code, V_q(n,t) is the size of a sphere of radius t in GF(q^n) (which may be computed using <code class="code">SphereContent</code>), t is the covering radius of the code and n is the length of the code.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> CodeDensity( HammingCode( 3, GF(2) ) );
+1
+gap> CodeDensity( ReedMullerCode( 1, 4 ) );
+14893/2048 
+</pre></td></tr></table>
+
+<p><a id="X85303BAE7BD46D81" name="X85303BAE7BD46D81"></a></p>
+
+<h5>7.5-5 SphereContent</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SphereContent</code>( <var class="Arg">n, t, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">SphereContent</code> returns the content of a ball of radius <var class="Arg">t</var> around an arbitrary element of the vectorspace F^n. This is the cardinality of the set of all elements of F^n that are at distance (see <code class="func">DistanceCodeword</code> (<a href="chap3.html#X7CDA1B547D55E6FB"><b>3.6-2</b></a>) less than or equal to <var class="Arg">t</var> from an element of F^n.</p>
+
+<p>In the context of codes, the function is used to determine if a code is perfect. A code is <em>perfect</em> if spheres of radius t around all codewords partition the whole ambient vector space, where <em>t</em> is the number of errors the code can correct.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> SphereContent( 15, 0, GF(2) );
+1    # Only one word with distance 0, which is the word itself
+gap> SphereContent( 11, 3, GF(4) );
+4984
+gap> C := HammingCode(5);
+a linear [31,26,3]1 Hamming (5,2) code over GF(2)
+#the minimum distance is 3, so the code can correct one error
+gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
+true 
+</pre></td></tr></table>
+
+<p><a id="X7ACDC5377CD17451" name="X7ACDC5377CD17451"></a></p>
+
+<h5>7.5-6 Krawtchouk</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> Krawtchouk</code>( <var class="Arg">k, i, n, q</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">Krawtchouk</code> returns the Krawtchouk number K_k(i). <var class="Arg">q</var> must be a prime power, <var class="Arg">n</var> must be a positive integer, <var class="Arg">k</var> must be a non-negative integer less then or equal to <var class="Arg">n</var> and <var class="Arg">i</var> can be any integer. (See <code class="func">KrawtchoukMat</code> (<a href="chap7.html#X82899B64802A4BCE"><b>7.3-1</b></a>)). This number is the value at x=i of the polynomial</p>
+
+<p class="pcenter">
+K_k^{n,q}(x)
+=\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),
+</p>
+
+<p>where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are integers. For more properties of these polynomials, see <a href="chapBib.html#biBMS83">[MS83]</a>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> Krawtchouk( 2, 0, 3, 2);
+3 
+</pre></td></tr></table>
+
+<p><a id="X827E39957A87EB51" name="X827E39957A87EB51"></a></p>
+
+<h5>7.5-7 PrimitiveUnityRoot</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PrimitiveUnityRoot</code>( <var class="Arg">F, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitiveUnityRoot</code> returns a primitive <var class="Arg">n</var>-th root of unity in an extension field of <var class="Arg">F</var>. This is a finite field element a with the property a^n=1 in <var class="Arg">F</var>, and <var class="Arg">n</var> is the smallest integer such that this equality holds.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrimitiveUnityRoot( GF(2), 15 );
+Z(2^4)
+gap> last^15;
+Z(2)^0
+gap> PrimitiveUnityRoot( GF(8), 21 );
+Z(2^6)^3 
+</pre></td></tr></table>
+
+<p><a id="X78AEA40F7AD9D541" name="X78AEA40F7AD9D541"></a></p>
+
+<h5>7.5-8 PrimitivePolynomialsNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> PrimitivePolynomialsNr</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitivePolynomialsNr</code> returns the number of irreducible polynomials over F=GF(q) of degree <var class="Arg">n</var> with (maximum) period q^n-1. (According to a theorem of S. Golomb, this is phi(p^n-1)/n.)</p>
+
+<p>See also the GAP function <code class="code">RandomPrimitivePolynomial</code>, <code class="func">RandomPrimitivePolynomial</code> (<a href="chap2.html#X7ECC593583E68A6C"><b>2.2-2</b></a>).</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> PrimitivePolynomialsNr(3,4);
+12
+
+</pre></td></tr></table>
+
+<p><a id="X7A2B54EF868AA752" name="X7A2B54EF868AA752"></a></p>
+
+<h5>7.5-9 IrreduciblePolynomialsNr</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> IrreduciblePolynomialsNr</code>( <var class="Arg">n, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">PrimitivePolynomialsNr</code> returns the number of irreducible polynomials over F=GF(q) of degree <var class="Arg">n</var>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> IrreduciblePolynomialsNr(3,4);
+20
+
+</pre></td></tr></table>
+
+<p><a id="X7B50D3417F6FD7C6" name="X7B50D3417F6FD7C6"></a></p>
+
+<h5>7.5-10 MatrixRepresentationOfElement</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixRepresentationOfElement</code>( <var class="Arg">a, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Here <var class="Arg">F</var> is either a finite extension of the ``base field'' GF(p) or of the rationals Q}, and ain F. The command <code class="code">MatrixRepresentationOfElement</code> returns a matrix representation of <var class="Arg">a</var> over the base field.</p>
+
+<p>If the element <var class="Arg">a</var> is defined over the base field then it returns the corresponding 1x 1 matrix.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> a:=Random(GF(4));
+0*Z(2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ .
+gap> a:=Random(GF(4));
+Z(2^2)
+gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
+ . 1
+ 1 1
+gap>
+
+</pre></td></tr></table>
+
+<p><a id="X7805D2BB7CE4D455" name="X7805D2BB7CE4D455"></a></p>
+
+<h5>7.5-11 ReciprocalPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ReciprocalPolynomial</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">ReciprocalPolynomial</code> returns the <em>reciprocal</em> of polynomial <var class="Arg">P</var>. This is a polynomial with coefficients of <var class="Arg">P</var> in the reverse order. So if P=a_0 + a_1 X + ... + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0 X^n.</p>
+
+<p>This command can also be called using the syntax <code class="code">ReciprocalPolynomial( P , n )</code>. In this form, the number of coefficients of <var class="Arg">P</var> is assumed to be less than or equal to n+1 (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree n+1.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> RecP := ReciprocalPolynomial( P );
+-Z(3)^0+x_1+x_1^3
+gap> ReciprocalPolynomial( RecP ) = P;
+true 
+gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
+Z(3)^0+x_1^2-x_1^3
+gap> ReciprocalPolynomial( P, 6 );
+-x_1^3+x_1^4+x_1^6
+</pre></td></tr></table>
+
+<p><a id="X7AEA9F807E6FFEFF" name="X7AEA9F807E6FFEFF"></a></p>
+
+<h5>7.5-12 CyclotomicCosets</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CyclotomicCosets</code>( <var class="Arg">q, n</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><code class="code">CyclotomicCosets</code> returns the cyclotomic cosets of q mod n. <var class="Arg">q</var> and <var class="Arg">n</var> must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A q-cyclotomic coset of s mod n is a set of the form s,sq,sq^2,...,sq^r-1, where r is the smallest positive integer such that sq^r-s is 0 mod n. In other words, each coset contains all multiplications of the coset represent [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> CyclotomicCosets( 2, 15 );
+[ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
+  [ 7, 14, 13, 11 ] ]
+gap> CyclotomicCosets( 7, 6 );
+[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 
+</pre></td></tr></table>
+
+<p><a id="X7A4EA98D794CF410" name="X7A4EA98D794CF410"></a></p>
+
+<h5>7.5-13 WeightHistogram</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> WeightHistogram</code>( <var class="Arg">C[, h]</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">WeightHistogram</code> plots a histogram of weights in code <var class="Arg">C</var>. The maximum length of a column is <var class="Arg">h</var>. Default value for <var class="Arg">h</var> is 1/3 of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> H := HammingCode(2, GF(5));
+a linear [6,4,3]1 Hamming (2,5) code over GF(5)
+gap> WeightDistribution(H);
+[ 1, 0, 0, 80, 120, 264, 160 ]
+gap> WeightHistogram(H);
+264----------------
+               *
+               *
+               *
+               *
+               *  *
+            *  *  *
+         *  *  *  *
+         *  *  *  *
++--------+--+--+--+--
+0  1  2  3  4  5  6 
+</pre></td></tr></table>
+
+<p><a id="X805DF25C84585FD6" name="X805DF25C84585FD6"></a></p>
+
+<h5>7.5-14 MultiplicityInList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MultiplicityInList</code>( <var class="Arg">L, a</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command <code class="code">Collected</code> does not quite handle this ``extreme" case.)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MultiplicityInList(L,1);
+3
+gap> MultiplicityInList(L,6);
+0
+</pre></td></tr></table>
+
+<p><a id="X8072B0DA78FBE562" name="X8072B0DA78FBE562"></a></p>
+
+<h5>7.5-15 MostCommonInList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MostCommonInList</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: a list L</p>
+
+<p>Output: an a in L which occurs at least as much as any other in L</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
+gap> MostCommonInList(L);
+1
+</pre></td></tr></table>
+
+<p><a id="X7C5407EF87849857" name="X7C5407EF87849857"></a></p>
+
+<h5>7.5-16 RotateList</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> RotateList</code>( <var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: a list L</p>
+
+<p>Output: a list L' which is the cyclic rotation of L (to the right)</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> L:=[1,2,3,4];;
+gap> RotateList(L);
+[2,3,4,1]
+</pre></td></tr></table>
+
+<p><a id="X85E526367878F72A" name="X85E526367878F72A"></a></p>
+
+<h5>7.5-17 CirculantMatrix</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CirculantMatrix</code>( <var class="Arg">k, L</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: integer k, a list L of length n</p>
+
+<p>Output: kxn matrix whose rows are cyclic rotations of the list L</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> k:=3; L:=[1,2,3,4];;
+gap> M:=CirculantMatrix(k,L);;
+gap> Display(M);
+</pre></td></tr></table>
+
+<p><a id="X7969103F7A8598F9" name="X7969103F7A8598F9"></a></p>
+
+<h4>7.6 <span class="Heading">
+Miscellaneous polynomial functions
+</span></h4>
+
+<p>In this section we describe several multivariate polynomial GAP functions <strong class="pkg">GUAVA</strong> uses for constructing codes or performing calculations with codes.</p>
+
+<p><a id="X84D51EBB784E7C5D" name="X84D51EBB784E7C5D"></a></p>
+
+<h5>7.6-1 MatrixTransformationOnMultivariatePolynomial </h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> MatrixTransformationOnMultivariatePolynomial </code>( <var class="Arg">AfR</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p><var class="Arg">A</var> is an nx n matrix with entries in a field F, <var class="Arg">R</var> is a polynomial ring of n variables, say F[x_1,...,x_n], and <var class="Arg">f</var> is a polynomial in <var class="Arg">R</var>. Returns the composition fcirc A.</p>
+
+<p><a id="X80433A4B792880EF" name="X80433A4B792880EF"></a></p>
+
+<h5>7.6-2 DegreeMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreeMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>This command takes two arguments, <var class="Arg">f</var>, a multivariate polynomial, and <var class="Arg">R</var> a polynomial ring over a field F containing <var class="Arg">f</var>, say R=F[x_1,x_2,...,x_n]. The output is simply the maximum degrees of all the monomials occurring in <var class="Arg">f</var>.</p>
+
+<p>This command can be used to compute the degree of an affine plane curve.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreeMultivariatePolynomial(poly,R2);
+3
+
+</pre></td></tr></table>
+
+<p><a id="X83F44E397C56F2E0" name="X83F44E397C56F2E0"></a></p>
+
+<h5>7.6-3 DegreesMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreesMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns a list of information about the multivariate polynomial <var class="Arg">f</var>. Nice for other programs but mostly unreadable by GAP users.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> DegreesMultivariatePolynomial(poly,R2);
+[ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
+  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
+gap>
+
+</pre></td></tr></table>
+
+<p><a id="X7E9021697A61A60F" name="X7E9021697A61A60F"></a></p>
+
+<h5>7.6-4 CoefficientMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoefficientMultivariatePolynomial</code>( <var class="Arg">f, var, power, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The command <code class="code">CoefficientMultivariatePolynomial</code> takes four arguments: a multivariant polynomial <var class="Arg">f</var>, a variable name <var class="Arg">var</var>, an integer <var class="Arg">power</var>, and a polynomial ring <var class="Arg">R</var> containing <var class="Arg">f</var>. For example, if <var class="Arg">f</var> is a multivariate polynomial in R = F[x_1,x_2,...,x_n] then <var class="Arg">var</var> must be one of the x_i. The output is the coef [...]
+
+<p>(Not sure if F needs to be a field in fact ...)</p>
+
+<p>Related to the GAP command <code class="code">PolynomialCoefficientsPolynomial</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> poly:=y^2-x*(x^2-1);;
+gap> PolynomialCoefficientsOfPolynomial(poly,x);
+[ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
+gap> PolynomialCoefficientsOfPolynomial(poly,y);
+[ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
+gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
+-x_1^3+x_1
+gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
+x_2^2
+gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
+Z(11)^0
+gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
+0*Z(11)
+gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
+-Z(11)^0
+
+</pre></td></tr></table>
+
+<p><a id="X79E76B6F7D177E27" name="X79E76B6F7D177E27"></a></p>
+
+<h5>7.6-5 SolveLinearSystem</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> SolveLinearSystem</code>( <var class="Arg">L, vars</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Input: <var class="Arg">L</var> is a list of linear forms in the variables <var class="Arg">vars</var>.</p>
+
+<p>Output: the solution of the system, if its unique.</p>
+
+<p>The procedure is straightforward: Find the associated matrix A, find the "constant vector" b, and solve A*v=b. No error checking is performed.</p>
+
+<p>Related to the GAP command <code class="code">SolutionMat( A, b )</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);;
+gap> R2:=PolynomialRing(F,2);
+PolynomialRing(..., [ x_1, x_2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);;
+gap> x:=vars[1];; y:=vars[2];;
+gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
+gap> soln:=SolveLinearSystem([f,g],[x,y]);
+[ Z(11)^3, Z(11)^2 ]
+gap> Value(f,[x,y],soln); # checking okay
+0*Z(11)
+gap> Value(g,[x,y],col); # checking okay
+0*Z(11)
+
+</pre></td></tr></table>
+
+<p><a id="X80171AA687FFDC70" name="X80171AA687FFDC70"></a></p>
+
+<h5>7.6-6 GuavaVersion</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> GuavaVersion</code>( <var class="Arg"></var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns the current version of Guava. Same as <code class="code">guava\_version()</code>.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> GuavaVersion();
+"2.7"
+
+</pre></td></tr></table>
+
+<p><a id="X7EBBE86D85CC90C0" name="X7EBBE86D85CC90C0"></a></p>
+
+<h5>7.6-7 ZechLog</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> ZechLog</code>( <var class="Arg">x, b, F</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>Returns the Zech log of x to base b, ie the i such that $x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);; l := One(F);;
+gap> ZechLog(2*l,8*l,F);
+-24
+gap> 8*l+l;(2*l)^(-24);
+Z(11)^6
+Z(11)^6
+
+</pre></td></tr></table>
+
+<p><a id="X7C8C1E6A7E3497F0" name="X7C8C1E6A7E3497F0"></a></p>
+
+<h5>7.6-8 CoefficientToPolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> CoefficientToPolynomial</code>( <var class="Arg">coeffs, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">CoefficientToPolynomial</code> returns the degree d-1 polynomial c_0+c_1x+...+c_d-1x^d-1, where <var class="Arg">coeffs</var> is a list of elements of a field, coeffs= c_0,...,c_d-1, and <var class="Arg">R</var> is a univariate polynomial ring.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> coeffs:=Z(11)^0*[1,2,3,4];
+[ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
+gap> CoefficientToPolynomial(coeffs,R1);
+Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0
+</pre></td></tr></table>
+
+<p><a id="X8431985183B63BB7" name="X8431985183B63BB7"></a></p>
+
+<h5>7.6-9 DegreesMonomialTerm</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DegreesMonomialTerm</code>( <var class="Arg">m, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">DegreesMonomialTerm</code> returns the list of degrees to which each variable in the multivariate polynomial ring <var class="Arg">R</var> occurs in the monomial <var class="Arg">m</var>, where <var class="Arg">coeffs</var> is a list of elements of a field.</p>
+
+
+<table class="example">
+<tr><td><pre>
+gap> F:=GF(11);
+GF(11)
+gap> R1:=PolynomialRing(F,["a"]);;
+gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
+gap> b:=X(F,"b",var1);
+b
+gap> var2:=Concatenation(var1,[b]);
+[ a, b ]
+gap> R2:=PolynomialRing(F,var2);
+PolynomialRing(..., [ a, b ])
+gap> c:=X(F,"c",var2);
+c
+gap> var3:=Concatenation(var2,[c]);
+[ a, b, c ]
+gap> R3:=PolynomialRing(F,var3);
+PolynomialRing(..., [ a, b, c ])
+gap> m:=b^3*c^7;
+b^3*c^7
+gap> DegreesMonomialTerm(m,R3);
+[ 0, 3, 7 ]
+</pre></td></tr></table>
+
+<p><a id="X860EF39B841380A1" name="X860EF39B841380A1"></a></p>
+
+<h5>7.6-10 DivisorsMultivariatePolynomial</h5>
+
+<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">> DivisorsMultivariatePolynomial</code>( <var class="Arg">f, R</var> )</td><td class="tdright">( function )</td></tr></table></div>
+<p>The function <code class="code">DivisorsMultivariatePolynomial</code> returns the list of polynomial divisors of <var class="Arg">f</var> in the multivariate polynomial ring <var class="Arg">R</var> with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, <a href="chapBib.html#biBGG03">[GG03]</a>, exercise 16.10) which first converts the multivariate polynomial <var class="Arg">f</var> to an associated univariate polynomi [...]
+
+
+<table class="example">
+<tr><td><pre>
+gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
+PolynomialRing(..., [ x1, x2 ])
+gap> vars:=IndeterminatesOfPolynomialRing(R2);
+[ x1, x2 ]
+gap> x2:=vars[2];
+x2
+gap> x1:=vars[1];
+x1
+gap> f:=x1^3+x2^3;;
+gap> DivisorsMultivariatePolynomial(f,R2);
+[ x1+x2, x1+x2, x1+x2 ]
+</pre></td></tr></table>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap6.html">Previous Chapter</a>    <a href="chapBib.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chapBib.html b/htm/chapBib.html
new file mode 100644
index 0000000..8e6760c
--- /dev/null
+++ b/htm/chapBib.html
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - References</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chap7.html">Previous Chapter</a>    <a href="chapInd.html">Next Chapter</a>   </div>
+
+<p><a id="X7A6F98FD85F02BFE" name="X7A6F98FD85F02BFE"></a></p>
+
+<h3>References</h3>
+
+
+<p><a id="biBAlltop84" name="biBAlltop84"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">All84</span>]   <b class='Bib_author'>Alltop, W. O.</b> <i class='Bib_title'>A method for extending binary linear codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>30</em>,
+ (<span class='Bib_year'>1984)</span>,
+ <span class='Bib_pages'>p. 871--872</span></p>
+
+
+<p><a id="biBBM03" name="biBBM03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">BMd)</span>]   <b class='Bib_author'>Bazzi, L. and Mitter, S. K.</b> <i class='Bib_title'>Some constructions of codes from group actions</i>,
+ <span class='Bib_journal'>preprint</span>,
+ (<span class='Bib_year'>March 2003 (submitted))</span></p>
+
+
+<p><a id="biBBr" name="biBBr"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Bro06</span>]   <b class='Bib_author'>Brouwer, A. E.</b> <i class='Bib_title'>Bounds on the minimum distance of linear codes</i>,
+ <span class='Bib_publisher'>On the internet at the URL:
+      http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html</span>,
+ (<span class='Bib_year'>1997-2006)</span></p>
+
+
+<p><a id="biBBrouwer98" name="biBBrouwer98"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Bro98</span>]   <b class='Bib_author'>Brouwer, A. E.</b> (<span class='Bib_editor'>Pless, V. S. and Huffman, W. C.</span>, Ed.)<i class='Bib_title'>Bounds on the Size of Linear Codes</i> in ,
+ <i class='Bib_booktitle'>Handbook of Coding Theory</i>,
+ <span class='Bib_publisher'>{Elsevier, North Holland}</span>,
+ (<span class='Bib_year'>1998)</span>,
+ <span class='Bib_pages'>p. 295--461</span></p>
+
+
+<p><a id="biBChen69" name="biBChen69"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Che69</span>]   <b class='Bib_author'>Chen, C. L.</b> <i class='Bib_title'>Some Results on Algebraically Structured Error-Correcting
+      Codes</i>,
+ <span class='Bib_school'>{University of Hawaii}</span>,
+ <span class='Bib_address'>USA</span>,
+ (<span class='Bib_year'>1969)</span></p>
+
+
+<p><a id="biBGDT91" name="biBGDT91"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GDT91</span>]   <b class='Bib_author'>Gabidulin, E., Davydov, A. and Tombak, L.</b> <i class='Bib_title'>Linear codes with covering radius 2 and other new covering
+              codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>37</em> (<span class='Bib_number'>1)</span>,
+ (<span class='Bib_year'>1991)</span>,
+ <span class='Bib_pages'>p. 219--224</span></p>
+
+
+<p><a id="biBGao03" name="biBGao03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Gao03</span>]   <b class='Bib_author'>Gao, S.</b> <i class='Bib_title'>A new algorithm for decoding Reed-Solomon codes</i>,
+ <span class='Bib_journal'>Communications, Information and Network Security 
+(V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.)</span>,
+ <span class='Bib_publisher'>Kluwer Academic Publishers</span>,
+ (<span class='Bib_year'>2003)</span>,
+ <span class='Bib_pages'>p. pp. 55-68</span></p>
+
+
+<p><a id="biBGS85" name="biBGS85"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GS85</span>]   <b class='Bib_author'>Graham, R. and Sloane, N.</b> <i class='Bib_title'>On the covering radius of codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>31</em> (<span class='Bib_number'>1)</span>,
+ (<span class='Bib_year'>1985)</span>,
+ <span class='Bib_pages'>p. 385--401</span></p>
+
+
+<p><a id="biBHan99" name="biBHan99"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Han99</span>]   <b class='Bib_author'>Hansen, J. P.</b> <i class='Bib_title'>Toric surfaces and error-correcting codes</i>,
+ <span class='Bib_journal'>Coding theory, cryptography, and related areas 
+(ed., Bachmann et al) Springer-Verlag</span>,
+ (<span class='Bib_year'>1999)</span></p>
+
+
+<p><a id="biBHHKK07" name="biBHHKK07"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">HHKK07</span>]   <b class='Bib_author'>Harada, M., Holzmann, W., Kharaghani, H. and Khorvash, M.</b> <i class='Bib_title'>Extremal Ternary Self-Dual Codes Constructed from Negacirculant
+      Matrices</i>,
+ <span class='Bib_journal'>Graphs and Combinatorics</span>,
+ <em class='Bib_volume'>23</em> (<span class='Bib_number'>4)</span>,
+ (<span class='Bib_year'>2007)</span>,
+ <span class='Bib_pages'>p. 401--417</span></p>
+
+
+<p><a id="biBHe72" name="biBHe72"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Hel72</span>]   <b class='Bib_author'>Helgert, H. J.</b> <i class='Bib_title'>Srivastava codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>18</em>,
+ (<span class='Bib_year'>1972)</span>,
+ <span class='Bib_pages'>p. 292--297</span></p>
+
+
+<p><a id="biBHP03" name="biBHP03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">HP03</span>]   <b class='Bib_author'>Huffman, W. C. and Pless, V.</b> <i class='Bib_title'>Fundamentals of error-correcting codes</i>,
+ <span class='Bib_publisher'>Cambridge Univ. Press</span>,
+ (<span class='Bib_year'>2003)</span></p>
+
+
+<p><a id="biBJo04" name="biBJo04"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Joy04</span>]   <b class='Bib_author'>Joyner, D.</b> <i class='Bib_title'>Toric codes over finite fields</i>,
+ <span class='Bib_journal'>Applicable Algebra in Engineering, 
+                      Communication and Computing</span>,
+ <em class='Bib_volume'>15</em>,
+ (<span class='Bib_year'>2004)</span>,
+ <span class='Bib_pages'>p. 63--79</span></p>
+
+
+<p><a id="biBJH04" name="biBJH04"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">JH04</span>]   <b class='Bib_author'>Justesen, J. and Hoholdt, T.</b> <i class='Bib_title'>A course in error-correcting codes</i>,
+ <span class='Bib_publisher'>European Mathematical Society</span>,
+ (<span class='Bib_year'>2004)</span></p>
+
+
+<p><a id="biBLeon82" name="biBLeon82"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo82</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>Computing automorphism groups of error-correcting codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>28</em>,
+ (<span class='Bib_year'>1982)</span>,
+ <span class='Bib_pages'>p. 496--511</span></p>
+
+
+<p><a id="biBLeon88" name="biBLeon88"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo88</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>A probabilistic algorithm for computing minimum weights of
+                   large error-correcting codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>34</em>,
+ (<span class='Bib_year'>1988)</span>,
+ <span class='Bib_pages'>p. 1354--1359</span></p>
+
+
+<p><a id="biBLeon91" name="biBLeon91"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Leo91</span>]   <b class='Bib_author'>Leon, J. S.</b> <i class='Bib_title'>Permutation group algorithms based on partitions, I: theory
+      and algorithms</i>,
+ <span class='Bib_journal'>J. Symbolic Comput.</span>,
+ <em class='Bib_volume'>12</em>,
+ (<span class='Bib_year'>1991)</span>,
+ <span class='Bib_pages'>p. 533--583</span></p>
+
+
+<p><a id="biBMS83" name="biBMS83"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">MS83</span>]   <b class='Bib_author'>MacWilliams, F. J. and Sloane, N. J. A.</b> <i class='Bib_title'>The theory of error-correcting codes</i>,
+ <span class='Bib_publisher'>Amsterdam: North-Holland</span>,
+ (<span class='Bib_year'>1983)</span></p>
+
+
+<p><a id="biBSloane72" name="biBSloane72"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">SRC72</span>]   <b class='Bib_author'>Sloane, N., Reddy, S. and Chen, C.</b> <i class='Bib_title'>New binary codes</i>,
+ <span class='Bib_journal'>IEEE Trans. Inform. Theory</span>,
+ <em class='Bib_volume'>18</em>,
+ (<span class='Bib_year'>1972)</span>,
+ <span class='Bib_pages'>p. 503--510</span></p>
+
+
+<p><a id="biBSt93" name="biBSt93"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Sti93</span>]   <b class='Bib_author'>Stichtenoth, H.</b> <i class='Bib_title'>Algebraic function fields and codes</i>,
+ <span class='Bib_publisher'>Springer-Verlag</span>,
+ (<span class='Bib_year'>1993)</span></p>
+
+
+<p><a id="biBGG03" name="biBGG03"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">GG03</span>]   <b class='Bib_author'>von zur Gathen, J. and J. Gerhard,</b> <i class='Bib_title'>Modern computer algebra</i>,
+ <span class='Bib_publisher'>Cambridge Univ. Press</span>,
+ (<span class='Bib_year'>2003)</span></p>
+
+
+<p><a id="biBZimmermann96" name="biBZimmermann96"></a></p>
+<p class='Bib_entry'>
+[<span class='Bib_key' style="color: #8e0000;">Zim96</span>]   <b class='Bib_author'>Zimmermann, K. -.H.</b> <i class='Bib_title'>Integral Hecke Modules, Integral Generalized Reed-Muller
+      Codes, and Linear Codes</i> (<span class='Bib_number'>3--96)</span>,
+ <span class='Bib_address'>Hamburg, Germany</span>,
+ (<span class='Bib_year'>1996)</span></p>
+
+<p> </p>
+
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chap7.html">Previous Chapter</a>    <a href="chapInd.html">Next Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/htm/chapInd.html b/htm/chapInd.html
new file mode 100644
index 0000000..88ce5ea
--- /dev/null
+++ b/htm/chapInd.html
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>GAP (guava) - Index</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<meta name="generator" content="GAPDoc2HTML" />
+<link rel="stylesheet" type="text/css" href="manual.css" />
+</head>
+<body>
+
+
+<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<div class="chlinkprevnexttop"> <a href="chap0.html">Top of Book</a>    <a href="chapBib.html">Previous Chapter</a>   </div>
+
+<p><a id="X83A0356F839C696F" name="X83A0356F839C696F"></a></p>
+
+<div class="index">
+<h3>Index</h3>
+
+< >  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+< >  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+<code class="func">*</code>  <a href="chap4.html#X8123456781234567">4.2-2</a><br />
+<code class="func">*</code>  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+<code class="func">+</code>  <a href="chap3.html#X7F2703417F270341">3.3-1</a><br />
+<code class="func">+</code>  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+<code class="func">+</code>  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+<code class="func">-</code>  <a href="chap3.html#X81B1391281B13912">3.3-2</a><br />
+<code class="func">=</code>  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+<code class="func">=</code>  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+A(n,d)  <a href="chap7.html#X8301FA9F7C6C7445">7.1-7</a><br />
+acceptable coordinate  <a href="chap7.html#X7ED2EF368203AF47">7.4-2</a><br />
+acceptable coordinate  <a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3</a><br />
+<code class="func">AClosestVectorComb..MatFFEVecFFECoords</code>  <a href="chap2.html#X870DE258833C5AA0">2.1-2</a><br />
+<code class="func">AClosestVectorCombinationsMatFFEVecFFE</code>  <a href="chap2.html#X82E5987E81487D18">2.1-1</a><br />
+<code class="func">ActionMoebiusTransformationOnDivisorP1 </code>  <a href="chap5.html#X7E48F9C67E7FB7B5">5.7-18</a><br />
+<code class="func">ActionMoebiusTransformationOnFunction </code>  <a href="chap5.html#X85A0419580ED0391">5.7-17</a><br />
+<code class="func">AddedElementsCode</code>  <a href="chap6.html#X784E1255874FCA8A">6.1-8</a><br />
+affine code  <a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13</a><br />
+<code class="func">AffineCurve</code>  <a href="chap5.html#X802DD9FB79A9ACA7">5.7-1</a><br />
+<code class="func">AffinePointsOnCurve</code>  <a href="chap5.html#X857EFE567C05C981">5.7-2</a><br />
+<code class="func">AlternantCode</code>  <a href="chap5.html#X851592C7811D3D2A">5.2-6</a><br />
+<code class="func">AmalgamatedDirectSumCode</code>  <a href="chap6.html#X7E17107686A845DB">6.2-7</a><br />
+<code class="func">AreMOLS</code>  <a href="chap7.html#X81B9B40B7B2D97D5">7.3-13</a><br />
+<code class="func">AsSSortedList</code>  <a href="chap4.html#X856D927378C33548">4.5-5</a><br />
+<code class="func">AugmentedCode</code>  <a href="chap6.html#X8134BE2B8478BE8A">6.1-6</a><br />
+<code class="func">AutomorphismGroup</code>  <a href="chap4.html#X87677B0787B4461A">4.4-3</a><br />
+<code class="func">BCHCode</code>  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+<code class="func">BestKnownLinearCode</code>  <a href="chap5.html#X871508567CB34D96">5.2-14</a><br />
+<code class="func">BinaryGolayCode</code>  <a href="chap5.html#X80ED89C079CD0D09">5.4-1</a><br />
+<code class="func">BitFlipDecoder</code>  <a href="chap4.html#X80E17FA27DCAB676">4.10-5</a><br />
+<code class="func">BlockwiseDirectSumCode</code>  <a href="chap6.html#X7D8981AF7DFE9814">6.2-8</a><br />
+Bose distance  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+bound, Gilbert-Varshamov lower  <a href="chap7.html#X7FDF54BA81115D88">7.1-9</a><br />
+bound, sphere packing lower  <a href="chap7.html#X7CF15D2084499869">7.1-10</a><br />
+bounds, Elias  <a href="chap7.html#X7A26E2537DFF4409">7.1-4</a><br />
+bounds, Griesmer  <a href="chap7.html#X86A5A7C67F625A40">7.1-5</a><br />
+bounds, Hamming  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+bounds, Johnson  <a href="chap7.html#X828095537C91FDFA">7.1-2</a><br />
+bounds, Plotkin  <a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3</a><br />
+bounds, Singleton  <a href="chap7.html#X87C753EB840C34D3">7.1</a><br />
+bounds, sphere packing bound  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+<code class="func">BoundsCoveringRadius</code>  <a href="chap7.html#X8320D1C180A1AAAD">7.2-1</a><br />
+<code class="func">BoundsMinimumDistance</code>  <a href="chap7.html#X7B3858B27A9E509A">7.1-13</a><br />
+<code class="func">BZCode</code>  <a href="chap6.html#X790C614985BFAE16">6.2-11</a><br />
+<code class="func">BZCodeNC</code>  <a href="chap6.html#X820327D6854A50B5">6.2-12</a><br />
+check polynomial  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+check polynomial  <a href="chap5.html#X8366CC3685F0BC85">5.5</a><br />
+<code class="func">CheckMat</code>  <a href="chap4.html#X85D4B26E7FB38D57">4.7-2</a><br />
+<code class="func">CheckMatCode</code>  <a href="chap5.html#X848D3F7B805DEB66">5.2-3</a><br />
+<code class="func">CheckMatCodeMutable</code>  <a href="chap5.html#X7CDDDFE47A10A008">5.2-2</a><br />
+<code class="func">CheckPol</code>  <a href="chap4.html#X7C45AA317BB1195F">4.7-4</a><br />
+<code class="func">CheckPolCode</code>  <a href="chap5.html#X82440B78845F7F6E">5.5-2</a><br />
+<code class="func">CirculantMatrix</code>  <a href="chap7.html#X85E526367878F72A">7.5-17</a><br />
+code  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, (n,M,d)  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, [n, k, d]r  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, AG  <a href="chap5.html#X7AE2B2CD7C647990">5.7</a><br />
+code, alternant  <a href="chap5.html#X801C88D578DA6ACA">5.2-5</a><br />
+code, Bose-Chaudhuri-Hockenghem  <a href="chap5.html#X818F0E6583E01D4B">5.5-3</a><br />
+code, conference  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+code, Cordaro-Wagner  <a href="chap5.html#X7A38EB3178961F3E">5.2-9</a><br />
+code, cyclic  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, Davydov  <a href="chap5.html#X873950F67D4A9184">5.3-2</a><br />
+code, doubly-even  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+code, element test  <a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1</a><br />
+code, elements of  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, evaluation  <a href="chap5.html#X850A28C579137220">5.6</a><br />
+code, even  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+code, Fire  <a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9</a><br />
+code, Gabidulin  <a href="chap5.html#X858721967BE44000">5.3</a><br />
+code, Golay (binary)  <a href="chap5.html#X81F6E4A785F368B0">5.4</a><br />
+code, Golay (ternary)  <a href="chap5.html#X84520C7983538806">5.4-2</a><br />
+code, Goppa (classical)  <a href="chap5.html#X851592C7811D3D2A">5.2-6</a><br />
+code, greedy  <a href="chap5.html#X816353397F25B62E">5.1-6</a><br />
+code, Hadamard  <a href="chap5.html#X81AACBDD86E89D7D">5.1-1</a><br />
+code, Hamming  <a href="chap5.html#X848D3F7B805DEB66">5.2-3</a><br />
+code, linear  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+code, maximum distance separable  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+code, Nordstrom-Robinson  <a href="chap5.html#X7D87DD6380B2CE69">5.1-5</a><br />
+code, perfect  <a href="chap4.html#X85E3BD26856424F7">4.3-6</a><br />
+code, Reed-Muller  <a href="chap5.html#X7DECB0A57C798583">5.2-4</a><br />
+code, Reed-Solomon  <a href="chap5.html#X7C6BB07C87853C00">5.5-4</a><br />
+code, self-dual  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+code, self-orthogonal  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+code, singly-even  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+code, Srivastava  <a href="chap5.html#X7EE808BB7D1E487A">5.2-7</a><br />
+code, subcode  <a href="chap4.html#X79CA175481F8105F">4.3-2</a><br />
+code, Tombak  <a href="chap5.html#X7F5BE77B7F343182">5.3-3</a><br />
+code, toric  <a href="chap5.html#X7EE68B58872D7E82">5.6-4</a><br />
+code, unrestricted  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">CodeDensity</code>  <a href="chap7.html#X7903286078F8051B">7.5-4</a><br />
+<code class="func">CodeDistanceEnumerator</code>  <a href="chap7.html#X84DA928083B103A0">7.5-2</a><br />
+<code class="func">CodeIsomorphism</code>  <a href="chap4.html#X874DED8E86BC180B">4.4-2</a><br />
+<code class="func">CodeMacWilliamsTransform</code>  <a href="chap7.html#X84B2BE66780EFBF9">7.5-3</a><br />
+<code class="func">CodeNorm</code>  <a href="chap7.html#X7ED2EF368203AF47">7.4-2</a><br />
+codes, addition  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+codes, decoding  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+codes, direct sum  <a href="chap4.html#X7F2703417F270341">4.2-1</a><br />
+codes, encoding  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+codes, product  <a href="chap4.html#X8123456781234567">4.2-2</a><br />
+<code class="func">CodeWeightEnumerator</code>  <a href="chap7.html#X871286437DE7A6A4">7.5-1</a><br />
+<code class="func">Codeword</code>  <a href="chap3.html#X7B9E353D852851AA">3.1-1</a><br />
+<code class="func">CodewordNr</code>  <a href="chap3.html#X7E7ED91C79BF3EF3">3.1-2</a><br />
+codewords, addition  <a href="chap3.html#X7F2703417F270341">3.3-1</a><br />
+codewords, cosets  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+codewords, subtraction  <a href="chap3.html#X81B1391281B13912">3.3-2</a><br />
+<code class="func">CoefficientMultivariatePolynomial</code>  <a href="chap7.html#X7E9021697A61A60F">7.6-4</a><br />
+<code class="func">CoefficientToPolynomial</code>  <a href="chap7.html#X7C8C1E6A7E3497F0">7.6-8</a><br />
+conference matrix  <a href="chap5.html#X8122BA417F705997">5.1-3</a><br />
+<code class="func">ConferenceCode</code>  <a href="chap5.html#X8122BA417F705997">5.1-3</a><br />
+<code class="func">ConstantWeightSubcode</code>  <a href="chap6.html#X873EA5EE85699832">6.1-18</a><br />
+<code class="func">ConstructionBCode</code>  <a href="chap6.html#X7E92DC9581F96594">6.1-13</a><br />
+<code class="func">ConstructionXCode</code>  <a href="chap6.html#X7C37D467791CE99B">6.2-9</a><br />
+<code class="func">ConstructionXXCode</code>  <a href="chap6.html#X7B50943B8014134F">6.2-10</a><br />
+<code class="func">ConversionFieldCode</code>  <a href="chap6.html#X81FE1F387DFCCB22">6.1-15</a><br />
+<code class="func">ConwayPolynomial</code>  <a href="chap2.html#X7C2425A786F09054">2.2-1</a><br />
+<code class="func">CoordinateNorm</code>  <a href="chap7.html#X8032E53078264ABB">7.4-1</a><br />
+<code class="func">CordaroWagnerCode</code>  <a href="chap5.html#X87F7CB8B7A8BE624">5.2-10</a><br />
+coset  <a href="chap3.html#X7F2703417F270341">3.3-3</a><br />
+<code class="func">CosetCode</code>  <a href="chap6.html#X8799F4BF81B0842B">6.1-17</a><br />
+covering code  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">CoveringRadius</code>  <a href="chap4.html#X7A195E317D2AB7CE">4.8-8</a><br />
+cyclic  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+<code class="func">CyclicCodes</code>  <a href="chap5.html#X82FA9F65854D98A6">5.5-14</a><br />
+<code class="func">CyclicMDSCode</code>  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+<code class="func">CyclotomicCosets</code>  <a href="chap7.html#X7AEA9F807E6FFEFF">7.5-12</a><br />
+<code class="func">DavydovCode</code>  <a href="chap5.html#X7F5BE77B7F343182">5.3-3</a><br />
+<code class="func">Decode</code>  <a href="chap4.html#X7A42FF7D87FC34AC">4.10-1</a><br />
+<code class="func">Decodeword</code>  <a href="chap4.html#X7D870C9387C47D9F">4.10-2</a><br />
+<code class="func">DecreaseMinimumDistanceUpperBound</code>  <a href="chap4.html#X823B9A797EE42F6D">4.8-6</a><br />
+defining polynomial  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+degree  <a href="chap5.html#X865FE28D828C1EAD">5.7-7</a><br />
+<code class="func">DegreeMultivariatePolynomial</code>  <a href="chap7.html#X80433A4B792880EF">7.6-2</a><br />
+<code class="func">DegreesMonomialTerm</code>  <a href="chap7.html#X8431985183B63BB7">7.6-9</a><br />
+<code class="func">DegreesMultivariatePolynomial</code>  <a href="chap7.html#X83F44E397C56F2E0">7.6-3</a><br />
+density of a code  <a href="chap7.html#X84B2BE66780EFBF9">7.5-3</a><br />
+<code class="func">Dimension</code>  <a href="chap4.html#X7E6926C6850E7C4E">4.5-4</a><br />
+<code class="func">DirectProductCode</code>  <a href="chap6.html#X7BFBBA5784C293C1">6.2-3</a><br />
+<code class="func">DirectSumCode</code>  <a href="chap6.html#X79E00D3A8367D65A">6.2-1</a><br />
+<code class="func">Display</code>  <a href="chap4.html#X83A5C59278E13248">4.6-3</a><br />
+<code class="func">DisplayBoundsInfo</code>  <a href="chap4.html#X7CD08C8C780543C4">4.6-4</a><br />
+distance  <a href="chap4.html#X871FD301820717A4">4.9-3</a><br />
+<code class="func">DistanceCodeword</code>  <a href="chap3.html#X7CDA1B547D55E6FB">3.6-2</a><br />
+<code class="func">DistancesDistribution</code>  <a href="chap4.html#X87AD54F87C5EE77E">4.9-4</a><br />
+<code class="func">DistancesDistributionMatFFEVecFFE</code>  <a href="chap2.html#X85135CEB86E61D49">2.1-3</a><br />
+<code class="func">DistancesDistributionVecFFEsVecFFE</code>  <a href="chap2.html#X7F2F630984A9D3D6">2.1-4</a><br />
+<code class="func">DistanceVecFFE</code>  <a href="chap2.html#X85AA5C6587559C1C">2.1-6</a><br />
+divisor  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">DivisorAddition </code>  <a href="chap5.html#X8626E2B57D01F2DC">5.7-6</a><br />
+<code class="func">DivisorAutomorphismGroupP1 </code>  <a href="chap5.html#X823386037F450B0E">5.7-20</a><br />
+<code class="func">DivisorDegree </code>  <a href="chap5.html#X865FE28D828C1EAD">5.7-7</a><br />
+<code class="func">DivisorGCD </code>  <a href="chap5.html#X857B89847A649A26">5.7-11</a><br />
+<code class="func">DivisorIsZero </code>  <a href="chap5.html#X8688C0E187B5C7DB">5.7-9</a><br />
+<code class="func">DivisorLCM </code>  <a href="chap5.html#X82231CF08073695F">5.7-12</a><br />
+<code class="func">DivisorNegate </code>  <a href="chap5.html#X789DC358819A8F54">5.7-8</a><br />
+<code class="func">DivisorOfRationalFunctionP1 </code>  <a href="chap5.html#X856DDA207EDDF256">5.7-14</a><br />
+<code class="func">DivisorOnAffineCurve</code>  <a href="chap5.html#X79742B7183051D99">5.7-5</a><br />
+<code class="func">DivisorsEqual </code>  <a href="chap5.html#X816A07997D9A7075">5.7-10</a><br />
+<code class="func">DivisorsMultivariatePolynomial</code>  <a href="chap7.html#X860EF39B841380A1">7.6-10</a><br />
+doubly-even  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+<code class="func">DualCode</code>  <a href="chap6.html#X799B12F085ACB609">6.1-14</a><br />
+<code class="func">ElementsCode</code>  <a href="chap5.html#X81AACBDD86E89D7D">5.1-1</a><br />
+encoder map  <a href="chap4.html#X8123456781234567">4.2-3</a><br />
+<code class="func">EnlargedGabidulinCode</code>  <a href="chap5.html#X873950F67D4A9184">5.3-2</a><br />
+<code class="func">EnlargedTombakCode</code>  <a href="chap5.html#X7D6583347C0D4292">5.3-5</a><br />
+equivalent codes  <a href="chap4.html#X86442DCD7A0B2146">4.4</a><br />
+<code class="func">EvaluationBivariateCode</code>  <a href="chap5.html#X8422A310854C09B0">5.7-23</a><br />
+<code class="func">EvaluationBivariateCodeNC</code>  <a href="chap5.html#X7B6C2BED8319C811">5.7-24</a><br />
+<code class="func">EvaluationCode</code>  <a href="chap5.html#X78E078567D19D433">5.6-1</a><br />
+even  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+<code class="func">EvenWeightSubcode</code>  <a href="chap6.html#X87691AB67FF5621B">6.1-3</a><br />
+<code class="func">ExhaustiveSearchCoveringRadius</code>  <a href="chap7.html#X7AD9F1D27C52BC0F">7.2-3</a><br />
+<code class="func">ExpurgatedCode</code>  <a href="chap6.html#X87E5849784BC60D2">6.1-5</a><br />
+<code class="func">ExtendedBinaryGolayCode</code>  <a href="chap5.html#X84520C7983538806">5.4-2</a><br />
+<code class="func">ExtendedCode</code>  <a href="chap6.html#X794679BE7F9EB5C1">6.1-1</a><br />
+<code class="func">ExtendedDirectSumCode</code>  <a href="chap6.html#X7A85F8AF8154D387">6.2-6</a><br />
+<code class="func">ExtendedReedSolomonCode</code>  <a href="chap5.html#X8730B90A862A3B3E">5.5-6</a><br />
+<code class="func">ExtendedTernaryGolayCode</code>  <a href="chap5.html#X81088A66816BCAE4">5.4-4</a><br />
+external distance  <a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13</a><br />
+<code class="func">FerreroDesignCode</code>  <a href="chap5.html#X865534267C8E902A">5.2-11</a><br />
+<code class="func">FireCode</code>  <a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10</a><br />
+<code class="func">FourNegacirculantSelfDualCode</code>  <a href="chap5.html#X7F40AF3B81C252DC">5.5-18</a><br />
+<code class="func">FourNegacirculantSelfDualCodeNC</code>  <a href="chap5.html#X87137A257E761291">5.5-19</a><br />
+<code class="func">GabidulinCode</code>  <a href="chap5.html#X79BE5D497CB2E59E">5.3-1</a><br />
+Gary code  <a href="chap7.html#X82899B64802A4BCE">7.3-1</a><br />
+<code class="func">GeneralizedCodeNorm</code>  <a href="chap7.html#X87039FD179AD3009">7.4-4</a><br />
+<code class="func">GeneralizedReedMullerCode</code>  <a href="chap5.html#X85B8699680B9D786">5.6-3</a><br />
+<code class="func">GeneralizedReedSolomonCode</code>  <a href="chap5.html#X810AB3DB844FFCE9">5.6-2</a><br />
+<code class="func">GeneralizedReedSolomonDecoderGao</code>  <a href="chap4.html#X7D48DE2A84474C6A">4.10-3</a><br />
+<code class="func">GeneralizedReedSolomonListDecoder</code>  <a href="chap4.html#X7CFF98D483502053">4.10-4</a><br />
+<code class="func">GeneralizedSrivastavaCode</code>  <a href="chap5.html#X7F9C0A727EE075B7">5.2-8</a><br />
+<code class="func">GeneralLowerBoundCoveringRadius</code>  <a href="chap7.html#X85D671F4824B4B0C">7.2-4</a><br />
+<code class="func">GeneralUpperBoundCoveringRadius</code>  <a href="chap7.html#X8638F5A67D6E50C1">7.2-5</a><br />
+generator polynomial  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+generator polynomial  <a href="chap5.html#X8366CC3685F0BC85">5.5</a><br />
+<code class="func">GeneratorMat</code>  <a href="chap4.html#X817224657C9829C4">4.7-1</a><br />
+<code class="func">GeneratorMatCode</code>  <a href="chap5.html#X83F400A681CFC0D6">5.2-1</a><br />
+<code class="func">GeneratorPol</code>  <a href="chap4.html#X78E33C3A843B0261">4.7-3</a><br />
+<code class="func">GeneratorPolCode</code>  <a href="chap5.html#X853D34A5796CEB73">5.5-1</a><br />
+<code class="func">GenusCurve</code>  <a href="chap5.html#X857E36ED814A40B8">5.7-3</a><br />
+GF(p)  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+GF(q)  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+<code class="func">GoppaCode</code>  <a href="chap5.html#X7EE808BB7D1E487A">5.2-7</a><br />
+<code class="func">GoppaCodeClassical</code>  <a href="chap5.html#X8777388C7885E335">5.7-22</a><br />
+<code class="func">GOrbitPoint </code>  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">GrayMat</code>  <a href="chap7.html#X87AFE2C078031CE4">7.3-2</a><br />
+greatest common divisor  <a href="chap5.html#X857B89847A649A26">5.7-11</a><br />
+<code class="func">GreedyCode</code>  <a href="chap5.html#X7880D34485C60BAF">5.1-7</a><br />
+Griesmer code  <a href="chap7.html#X82366C277E218130">7.1-6</a><br />
+<code class="func">GuavaVersion</code>  <a href="chap7.html#X80171AA687FFDC70">7.6-6</a><br />
+Hadamard matrix  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+Hadamard matrix  <a href="chap7.html#X7E1E7C5287919CDB">7.3-3</a><br />
+<code class="func">HadamardCode</code>  <a href="chap5.html#X86755AAC83A0AF4B">5.1-2</a><br />
+<code class="func">HadamardMat</code>  <a href="chap7.html#X8014A1F181ECD8AA">7.3-4</a><br />
+Hamming metric  <a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5</a><br />
+<code class="func">HammingCode</code>  <a href="chap5.html#X7DECB0A57C798583">5.2-4</a><br />
+<code class="func">HorizontalConversionFieldMat</code>  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+hull  <a href="chap6.html#X78F0B1BC81FB109C">6.2-4</a><br />
+<code class="func">in</code>  <a href="chap4.html#X87BDB89B7AAFE8AD">4.3-1</a><br />
+<code class="func">IncreaseCoveringRadiusLowerBound</code>  <a href="chap7.html#X7881E03E812140F4">7.2-2</a><br />
+information bits  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+<code class="func">InformationWord</code>  <a href="chap4.html#X8744BA5E78BCF3F9">4.2-4</a><br />
+<code class="func">InnerDistribution</code>  <a href="chap4.html#X871FD301820717A4">4.9-3</a><br />
+<code class="func">IntersectionCode</code>  <a href="chap6.html#X78F0B1BC81FB109C">6.2-4</a><br />
+<code class="func">IrreduciblePolynomialsNr</code>  <a href="chap7.html#X7A2B54EF868AA752">7.5-9</a><br />
+<code class="func">IsActionMoebiusTransformationOnDivisorDefinedP1 </code>  <a href="chap5.html#X79FD980E7B24DB9C">5.7-19</a><br />
+<code class="func">IsAffineCode</code>  <a href="chap4.html#X7AFD3844859B20BF">4.3-14</a><br />
+<code class="func">IsAlmostAffineCode</code>  <a href="chap4.html#X861D32FB81EF0D77">4.3-15</a><br />
+IsCheapConwayPolynomial  <a href="chap2.html#X7C2425A786F09054">2.2-1</a><br />
+<code class="func">IsCode</code>  <a href="chap4.html#X7F71186281DEA83A">4.3-3</a><br />
+<code class="func">IsCodeword</code>  <a href="chap3.html#X7F25479781E6E109">3.1-3</a><br />
+<code class="func">IsCoordinateAcceptable</code>  <a href="chap7.html#X7D24F8BF7F9A7BF1">7.4-3</a><br />
+<code class="func">IsCyclicCode</code>  <a href="chap4.html#X850C23D07C9A9B19">4.3-5</a><br />
+<code class="func">IsDoublyEvenCode</code>  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+<code class="func">IsEquivalent</code>  <a href="chap4.html#X843034687D9C75B0">4.4-1</a><br />
+<code class="func">IsEvenCode</code>  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+<code class="func">IsFinite</code>  <a href="chap4.html#X808A4061809A6E67">4.5-1</a><br />
+<code class="func">IsGriesmerCode</code>  <a href="chap7.html#X8301FA9F7C6C7445">7.1-7</a><br />
+<code class="func">IsInStandardForm</code>  <a href="chap7.html#X7D4EDA0A854EBFEF">7.3-7</a><br />
+<code class="func">IsLatinSquare</code>  <a href="chap7.html#X7F34306B81DC2776">7.3-12</a><br />
+<code class="func">IsLinearCode</code>  <a href="chap4.html#X7B24748A7CE8D4B9">4.3-4</a><br />
+<code class="func">IsMDSCode</code>  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+<code class="func">IsNormalCode</code>  <a href="chap7.html#X80283A2F7C8101BD">7.4-5</a><br />
+<code class="func">IsPerfectCode</code>  <a href="chap4.html#X85E3BD26856424F7">4.3-6</a><br />
+IsPrimitivePolynomial  <a href="chap2.html#X7ECC593583E68A6C">2.2-2</a><br />
+<code class="func">IsSelfComplementaryCode</code>  <a href="chap4.html#X7B6DB8CC84FCAC1C">4.3-13</a><br />
+<code class="func">IsSelfDualCode</code>  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+<code class="func">IsSelfOrthogonalCode</code>  <a href="chap4.html#X7B2A0CC481D2366F">4.3-9</a><br />
+<code class="func">IsSinglyEvenCode</code>  <a href="chap4.html#X79ACAEF5865414A0">4.3-11</a><br />
+<code class="func">IsSubset</code>  <a href="chap4.html#X79CA175481F8105F">4.3-2</a><br />
+<code class="func">Krawtchouk</code>  <a href="chap7.html#X7ACDC5377CD17451">7.5-6</a><br />
+<code class="func">KrawtchoukMat</code>  <a href="chap7.html#X82899B64802A4BCE">7.3-1</a><br />
+Latin square  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+least common multiple  <a href="chap5.html#X82231CF08073695F">5.7-12</a><br />
+<code class="func">LeftActingDomain</code>  <a href="chap4.html#X86F070E0807DC34E">4.5-3</a><br />
+length  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">LengthenedCode</code>  <a href="chap6.html#X7A5D5419846FC867">6.1-10</a><br />
+<code class="func">LexiCode</code>  <a href="chap5.html#X7C1B374583AFB923">5.1-8</a><br />
+linear code  <a href="chap3.html#X836BAA9A7EBD08B1">3.</a><br />
+<code class="func">LowerBoundCoveringRadiusCountingExcess</code>  <a href="chap7.html#X7F95362485759ACB">7.2-9</a><br />
+<code class="func">LowerBoundCoveringRadiusEmbedded1</code>  <a href="chap7.html#X829C14A383B5BF59">7.2-10</a><br />
+<code class="func">LowerBoundCoveringRadiusEmbedded2</code>  <a href="chap7.html#X7B0C81B88604C448">7.2-11</a><br />
+<code class="func">LowerBoundCoveringRadiusInduction</code>  <a href="chap7.html#X7D27F6E27B9A0D35">7.2-12</a><br />
+<code class="func">LowerBoundCoveringRadiusSphereCovering</code>  <a href="chap7.html#X7E7FBCC87D5562AB">7.2-6</a><br />
+<code class="func">LowerBoundCoveringRadiusVanWee1</code>  <a href="chap7.html#X85E20C518360AB70">7.2-7</a><br />
+<code class="func">LowerBoundCoveringRadiusVanWee2</code>  <a href="chap7.html#X7C72994A825228E7">7.2-8</a><br />
+<code class="func">LowerBoundGilbertVarshamov</code>  <a href="chap7.html#X7CF15D2084499869">7.1-10</a><br />
+<code class="func">LowerBoundMinimumDistance</code>  <a href="chap7.html#X7FDF54BA81115D88">7.1-9</a><br />
+<code class="func">LowerBoundSpherePacking</code>  <a href="chap7.html#X8217D830871286D8">7.1-11</a><br />
+MacWilliams transform  <a href="chap7.html#X84DA928083B103A0">7.5-2</a><br />
+<code class="func">MatrixRepresentationOfElement</code>  <a href="chap7.html#X7B50D3417F6FD7C6">7.5-10</a><br />
+<code class="func">MatrixRepresentationOnRiemannRochSpaceP1 </code>  <a href="chap5.html#X80EDF3D682E7EF3F">5.7-21</a><br />
+<code class="func">MatrixTransformationOnMultivariatePolynomial </code>  <a href="chap7.html#X84D51EBB784E7C5D">7.6-1</a><br />
+maximum distance separable  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+MDS  <a href="chap4.html#X789380D28018EC3F">4.3-7</a><br />
+MDS  <a href="chap5.html#X7BFEDA52835A601D">5.5-17</a><br />
+minimum distance  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">MinimumDistance</code>  <a href="chap4.html#X7B31613D8538BD29">4.8-3</a><br />
+<code class="func">MinimumDistanceLeon</code>  <a href="chap4.html#X813F226F855590EE">4.8-4</a><br />
+<code class="func">MinimumDistanceRandom</code>  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">MinimumWeight</code>  <a href="chap4.html#X84EDF67B86B4154C">4.8-5</a><br />
+<code class="func">MinimumWeightWords</code>  <a href="chap4.html#X7AEE64467FB1E0B9">4.9-1</a><br />
+<code class="func">MoebiusTransformation </code>  <a href="chap5.html#X807C52E67A440DEB">5.7-16</a><br />
+<code class="func">MOLS</code>  <a href="chap7.html#X804AAFF2867080F7">7.3-11</a><br />
+<code class="func">MOLSCode</code>  <a href="chap5.html#X81B7EE4279398F67">5.1-4</a><br />
+<code class="func">MostCommonInList</code>  <a href="chap7.html#X8072B0DA78FBE562">7.5-15</a><br />
+<code class="func">MultiplicityInList</code>  <a href="chap7.html#X805DF25C84585FD6">7.5-14</a><br />
+mutually orthogonal Latin squares  <a href="chap7.html#X8033E9A67BA155C8">7.3-10</a><br />
+<code class="func">NearestNeighborDecodewords</code>  <a href="chap4.html#X825E35757D778787">4.10-7</a><br />
+<code class="func">NearestNeighborGRSDecodewords</code>  <a href="chap4.html#X7B88DEB37F28404A">4.10-6</a><br />
+<code class="func">NordstromRobinsonCode</code>  <a href="chap5.html#X816353397F25B62E">5.1-6</a><br />
+norm of a code  <a href="chap7.html#X8032E53078264ABB">7.4-1</a><br />
+normal code  <a href="chap7.html#X87039FD179AD3009">7.4-4</a><br />
+not =  <a href="chap3.html#X8123456781234567">3.2-1</a><br />
+not =  <a href="chap4.html#X8123456781234567">4.1-1</a><br />
+<code class="func">NrCyclicCodes</code>  <a href="chap5.html#X8263CE4A790D294A">5.5-15</a><br />
+<code class="func">NullCode</code>  <a href="chap5.html#X7B4EF2017B2C61AD">5.5-12</a><br />
+<code class="func">NullWord</code>  <a href="chap3.html#X8000B6597EF0282F">3.6-1</a><br />
+<code class="func">OnePointAGCode</code>  <a href="chap5.html#X842E227E8785168E">5.7-25</a><br />
+<code class="func">OptimalityCode</code>  <a href="chap5.html#X839CFE4C7A567D4D">5.2-13</a><br />
+order of polynomial  <a href="chap5.html#X7F3B8CC8831DA0E4">5.5-10</a><br />
+<code class="func">OuterDistribution</code>  <a href="chap4.html#X8495870687195324">4.9-5</a><br />
+Parity check  <a href="chap6.html#X8271A4697FDA97B2">6.1</a><br />
+parity check matrix  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+perfect  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+perfect code  <a href="chap7.html#X7903286078F8051B">7.5-4</a><br />
+permutation equivalent codes  <a href="chap4.html#X86442DCD7A0B2146">4.4</a><br />
+PermutationAutomorphismGroup  <a href="chap4.html#X87677B0787B4461A">4.4-3</a><br />
+<code class="func">PermutationAutomorphismGroup</code>  <a href="chap4.html#X79F3261F86C29F6D">4.4-4</a><br />
+<code class="func">PermutationDecode</code>  <a href="chap4.html#X83231E717CCB0247">4.10-11</a><br />
+<code class="func">PermutationDecodeNC</code>  <a href="chap4.html#X85B692177E2A745D">4.10-12</a><br />
+<code class="func">PermutedCode</code>  <a href="chap6.html#X79577EB27BE8524B">6.1-4</a><br />
+<code class="func">PermutedCols</code>  <a href="chap7.html#X7A97AD477E7638DE">7.3-8</a><br />
+<code class="func">PiecewiseConstantCode</code>  <a href="chap6.html#X7EF49A257D6DB53B">6.1-20</a><br />
+point  <a href="chap5.html#X802DD9FB79A9ACA7">5.7-1</a><br />
+<code class="func">PolyCodeword</code>  <a href="chap3.html#X822465E884D0F484">3.4-2</a><br />
+primitive element  <a href="chap2.html#X87C3D1B984960984">2.2</a><br />
+<code class="func">PrimitivePolynomialsNr</code>  <a href="chap7.html#X78AEA40F7AD9D541">7.5-8</a><br />
+<code class="func">PrimitiveUnityRoot</code>  <a href="chap7.html#X827E39957A87EB51">7.5-7</a><br />
+<code class="func">Print</code>  <a href="chap4.html#X7AFA64D97A1F39A3">4.6-1</a><br />
+<code class="func">PuncturedCode</code>  <a href="chap6.html#X7E6E4DDA79574FDB">6.1-2</a><br />
+<code class="func">PutStandardForm</code>  <a href="chap7.html#X7B47D82485B66F1D">7.3-6</a><br />
+<code class="func">QQRCode</code>  <a href="chap5.html#X7F4C3AD2795A8D7A">5.5-9</a><br />
+<code class="func">QQRCodeNC</code>  <a href="chap5.html#X8764ABCF854C695E">5.5-8</a><br />
+<code class="func">QRCode</code>  <a href="chap5.html#X825F42F68179D2AB">5.5-7</a><br />
+<code class="func">QuasiCyclicCode</code>  <a href="chap5.html#X79826B16785E8BD3">5.5-16</a><br />
+<code class="func">RandomCode</code>  <a href="chap5.html#X7D87DD6380B2CE69">5.1-5</a><br />
+<code class="func">RandomLinearCode</code>  <a href="chap5.html#X7BCA10CE8660357F">5.2-12</a><br />
+<code class="func">RandomPrimitivePolynomial</code>  <a href="chap2.html#X7ECC593583E68A6C">2.2-2</a><br />
+reciprocal polynomial  <a href="chap7.html#X7B50D3417F6FD7C6">7.5-10</a><br />
+<code class="func">ReciprocalPolynomial</code>  <a href="chap7.html#X7805D2BB7CE4D455">7.5-11</a><br />
+<code class="func">Redundancy</code>  <a href="chap4.html#X7E33FD56792DBF3D">4.8-2</a><br />
+<code class="func">ReedMullerCode</code>  <a href="chap5.html#X801C88D578DA6ACA">5.2-5</a><br />
+<code class="func">ReedSolomonCode</code>  <a href="chap5.html#X838F3CB3872CEF95">5.5-5</a><br />
+<code class="func">RemovedElementsCode</code>  <a href="chap6.html#X7B0A6E1F82686B43">6.1-7</a><br />
+<code class="func">RepetitionCode</code>  <a href="chap5.html#X83C5F8FE7827EAA7">5.5-13</a><br />
+<code class="func">ResidueCode</code>  <a href="chap6.html#X809376187C1525AA">6.1-12</a><br />
+<code class="func">RiemannRochSpaceBasisFunctionP1 </code>  <a href="chap5.html#X79C878697F99A10F">5.7-13</a><br />
+<code class="func">RiemannRochSpaceBasisP1 </code>  <a href="chap5.html#X878970A17E580224">5.7-15</a><br />
+<code class="func">RootsCode</code>  <a href="chap5.html#X818F0E6583E01D4B">5.5-3</a><br />
+<code class="func">RootsOfCode</code>  <a href="chap4.html#X7F4CB9DB7CD97178">4.7-5</a><br />
+<code class="func">RotateList</code>  <a href="chap7.html#X7C5407EF87849857">7.5-16</a><br />
+self complementary code  <a href="chap4.html#X7CE150ED7C3DC455">4.3-12</a><br />
+self-dual  <a href="chap5.html#X7F40AF3B81C252DC">5.5-18</a><br />
+self-dual  <a href="chap6.html#X799B12F085ACB609">6.1-14</a><br />
+self-orthogonal  <a href="chap4.html#X80166D8D837FEB58">4.3-8</a><br />
+<code class="func">SetCoveringRadius</code>  <a href="chap4.html#X81004B007EC5DF58">4.8-9</a><br />
+<code class="func">ShortenedCode</code>  <a href="chap6.html#X81CBEAFF7B9DE6EF">6.1-9</a><br />
+singly-even  <a href="chap4.html#X8358D43981EBE970">4.3-10</a><br />
+size  <a href="chap4.html#X85FDDF0B7B7D87FB">4.</a><br />
+<code class="func">Size</code>  <a href="chap4.html#X858ADA3B7A684421">4.5-2</a><br />
+<code class="func">SolveLinearSystem</code>  <a href="chap7.html#X79E76B6F7D177E27">7.6-5</a><br />
+<code class="func">SphereContent</code>  <a href="chap7.html#X85303BAE7BD46D81">7.5-5</a><br />
+<code class="func">SrivastavaCode</code>  <a href="chap5.html#X7A38EB3178961F3E">5.2-9</a><br />
+standard form  <a href="chap7.html#X797F43607AD8660D">7.3-5</a><br />
+<code class="func">StandardArray</code>  <a href="chap4.html#X8642D0BD789DA9B5">4.10-10</a><br />
+<code class="func">StandardFormCode</code>  <a href="chap6.html#X7AA203A380BC4C79">6.1-19</a><br />
+strength  <a href="chap7.html#X86F10D9E79AB8796">7.2-15</a><br />
+<code class="func">String</code>  <a href="chap4.html#X81FB5BE27903EC32">4.6-2</a><br />
+<code class="func">SubCode</code>  <a href="chap6.html#X7982D699803ECD0F">6.1-11</a><br />
+<code class="func">Support</code>  <a href="chap3.html#X7B689C0284AC4296">3.6-3</a><br />
+support  <a href="chap5.html#X8572A3037DA66F88">5.7-4</a><br />
+<code class="func">SylvesterMat</code>  <a href="chap7.html#X7E1E7C5287919CDB">7.3-3</a><br />
+<code class="func">Syndrome</code>  <a href="chap4.html#X7D02E0FE8735D3E6">4.10-8</a><br />
+syndrome table  <a href="chap4.html#X7B9E71987E4294A7">4.10-9</a><br />
+<code class="func">SyndromeTable</code>  <a href="chap4.html#X7B9E71987E4294A7">4.10-9</a><br />
+t(n,k)  <a href="chap4.html#X7A679B0A7816B030">4.8-7</a><br />
+<code class="func">TernaryGolayCode</code>  <a href="chap5.html#X7E0CCCD7866ADB94">5.4-3</a><br />
+<code class="func">TombakCode</code>  <a href="chap5.html#X845B4DBE83288D2D">5.3-4</a><br />
+<code class="func">ToricCode</code>  <a href="chap5.html#X7B24BE418010F596">5.6-5</a><br />
+<code class="func">ToricPoints</code>  <a href="chap5.html#X7EE68B58872D7E82">5.6-4</a><br />
+<code class="func">TraceCode</code>  <a href="chap6.html#X82D18907800FE3D9">6.1-16</a><br />
+<code class="func">TreatAsPoly</code>  <a href="chap3.html#X7A6828148490BD2E">3.5-2</a><br />
+<code class="func">TreatAsVector</code>  <a href="chap3.html#X7E3E174B7954AA6B">3.5-1</a><br />
+<code class="func">UnionCode</code>  <a href="chap6.html#X8228A1F57A29B8F4">6.2-5</a><br />
+<code class="func">UpperBound</code>  <a href="chap7.html#X7A5CB74485184FEE">7.1-8</a><br />
+<code class="func">UpperBoundCoveringRadiusCyclicCode</code>  <a href="chap7.html#X82A38F5F858CF3FC">7.2-17</a><br />
+<code class="func">UpperBoundCoveringRadiusDelsarte</code>  <a href="chap7.html#X832847A17FD0D142">7.2-14</a><br />
+<code class="func">UpperBoundCoveringRadiusGriesmerLike</code>  <a href="chap7.html#X8585C6A982489FC3">7.2-16</a><br />
+<code class="func">UpperBoundCoveringRadiusRedundancy</code>  <a href="chap7.html#X80F8DFAD7D67CBEC">7.2-13</a><br />
+<code class="func">UpperBoundCoveringRadiusStrength</code>  <a href="chap7.html#X86F10D9E79AB8796">7.2-15</a><br />
+<code class="func">UpperBoundElias</code>  <a href="chap7.html#X86A5A7C67F625A40">7.1-5</a><br />
+<code class="func">UpperBoundGriesmer</code>  <a href="chap7.html#X82366C277E218130">7.1-6</a><br />
+<code class="func">UpperBoundHamming</code>  <a href="chap7.html#X828095537C91FDFA">7.1-2</a><br />
+<code class="func">UpperBoundJohnson</code>  <a href="chap7.html#X82EBFAAB7F5BFD4A">7.1-3</a><br />
+<code class="func">UpperBoundMinimumDistance</code>  <a href="chap7.html#X7C6A58327BD6B685">7.1-12</a><br />
+<code class="func">UpperBoundPlotkin</code>  <a href="chap7.html#X7A26E2537DFF4409">7.1-4</a><br />
+<code class="func">UpperBoundSingleton</code>  <a href="chap7.html#X8673277C7F6C04C3">7.1-1</a><br />
+<code class="func">UUVCode</code>  <a href="chap6.html#X86E9D6DE7F1A07E6">6.2-2</a><br />
+<code class="func">VandermondeMat</code>  <a href="chap7.html#X797F43607AD8660D">7.3-5</a><br />
+<code class="func">VectorCodeword</code>  <a href="chap3.html#X87C8B0B178496F6A">3.4-1</a><br />
+<code class="func">VerticalConversionFieldMat</code>  <a href="chap7.html#X7B68119F85E9EC6D">7.3-9</a><br />
+weight enumerator polynomial  <a href="chap7.html#X8308D685809A4E2F">7.5</a><br />
+<code class="func">WeightCodeword</code>  <a href="chap3.html#X7AD61C237D8D3849">3.6-4</a><br />
+<code class="func">WeightDistribution</code>  <a href="chap4.html#X8728BCC9842A6E5D">4.9-2</a><br />
+<code class="func">WeightHistogram</code>  <a href="chap7.html#X7A4EA98D794CF410">7.5-13</a><br />
+<code class="func">WeightVecFFE</code>  <a href="chap2.html#X7C9F4D657F9BA5A1">2.1-5</a><br />
+<code class="func">WholeSpaceCode</code>  <a href="chap5.html#X7BC245E37EB7B23F">5.5-11</a><br />
+<code class="func">WordLength</code>  <a href="chap4.html#X7A36C3C67B0062E8">4.8-1</a><br />
+<code class="func">ZechLog</code>  <a href="chap7.html#X7EBBE86D85CC90C0">7.6-7</a><br />
+<p> </p>
+</div>
+
+<div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a>    <a href="chapBib.html">Previous Chapter</a>   </div>
+
+
+<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>
+
+<hr />
+<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
+</body>
+</html>
diff --git a/init.g b/init.g
new file mode 100644
index 0000000..33cfc1e
--- /dev/null
+++ b/init.g
@@ -0,0 +1,67 @@
+#############################################################################
+##
+#A  init.g                  GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+#A                                                                 Lea Ruscio
+#A                                                               David Joyner
+#A                                                                  CJ, Tjhai
+##
+#H  @(#)$Id: init.g,v 2.0 2003/02/27 22:45:16 gap Exp $
+## added read curves.gd 5-2005
+## added existence check for minimum-weight 
+##
+
+##
+##  Announce the package version and test for the existence of the binary.
+##
+DeclarePackage( "guava", "3.3",
+  function()
+    local path;
+
+    if not CompareVersionNumbers( VERSION, "4.4.5" ) then
+        Info( InfoWarning, 1,
+              "Package ``GUAVA'': requires at least GAP 4.4.5" );
+        return fail;
+    fi;
+
+    # Test for existence of the compiled binary
+    path := DirectoriesPackagePrograms( "guava" );
+
+    if ForAny( ["desauto", "leonconv", "wtdist", "minimum-weight"], 
+               f -> Filename( path, f ) = fail ) then
+        Info( InfoWarning, 1,
+              "Package ``GUAVA'': the C code programs are not compiled." );
+        Info( InfoWarning, 1,
+              "Some GUAVA functions, e.g. `ConstantWeightSubcode' and MinimumWeight, ",
+              "will be unavailable. ");
+        Info( InfoWarning, 1,
+              "See ?Installing GUAVA" );
+    fi;
+
+    return true;
+  end );
+
+DeclarePackageAutoDocumentation( "GUAVA", "doc", "GUAVA",
+                                 "GUAVA Coding Theory Package" );
+
+ReadPkg("guava", "lib/util2.gd"); 
+ReadPkg("guava", "lib/codeword.gd");   
+ReadPkg("guava", "lib/codegen.gd"); 
+ReadPkg("guava", "lib/matrices.gd");
+ReadPkg("guava", "lib/codeman.gd"); 
+ReadPkg("guava", "lib/nordrob.gd"); 
+ReadPkg("guava", "lib/util.gd"); 
+ReadPkg("guava", "lib/curves.gd"); 
+ReadPkg("guava", "lib/codeops.gd"); 
+ReadPkg("guava", "lib/bounds.gd"); 
+ReadPkg("guava", "lib/codefun.gd"); 
+ReadPkg("guava", "lib/decoders.gd"); 
+ReadPkg("guava", "lib/codecr.gd");
+ReadPkg("guava", "lib/codecstr.gd");
+ReadPkg("guava", "lib/codemisc.gd");
+ReadPkg("guava", "lib/codenorm.gd");
+ReadPkg("guava", "lib/tblgener.gd"); 
+ReadPkg("guava", "lib/toric.gd"); 
+
diff --git a/lib/bounds.gd b/lib/bounds.gd
new file mode 100644
index 0000000..47320c7
--- /dev/null
+++ b/lib/bounds.gd
@@ -0,0 +1,116 @@
+#############################################################################
+##
+#A  bounds.gd               GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for calculating with bounds
+##
+#H  @(#)$Id: bounds.gd,v 1.99 09/25/2004 gap Exp $
+##
+## added LowerBoundGilbertVarshamov, LowerBoundSpherePacking
+##
+Revision.("guava/lib/bounds_gd") :=
+    "@(#)$Id: bounds.gd,v 1.99 09/25/2004 gap Exp $";
+
+#############################################################################
+##
+#F  LowerBoundGilbertVarshamov( <n>, <d>, <q> )  . . .Gilbert-Varshamov bound
+##
+## added 9-2004 by wdj
+DeclareOperation("LowerBoundGilbertVarshamov", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  LowerBoundSpherePacking( <n>, <r>, <q> )  . . . sphere packing lower bound
+##                                                 for unrestricted codes
+##
+## added 11-2004 by wdj
+DeclareOperation("LowerBoundSpherePacking", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  UpperBoundHamming( <n>, <d>, <q> )  . . . . . . . . . . . . Hamming bound
+##
+DeclareOperation("UpperBoundHamming", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  UpperBoundSingleton( <n>, <d>, <q> )  . . . . . . . . . . Singleton bound
+##
+DeclareOperation("UpperBoundSingleton", [IsInt, IsInt, IsInt]);  
+
+#############################################################################
+##
+#F  UpperBoundPlotkin( <n>, <d>, <q> )  . . . . . . . . . . . . Plotkin bound
+##
+DeclareOperation("UpperBoundPlotkin", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  UpperBoundGriesmer( <n>, <d>, <q> ) . . . . . . . . . . .  Griesmer bound
+##
+DeclareOperation("UpperBoundGriesmer", [IsInt, IsInt, IsInt]);  
+
+#############################################################################
+##
+#F  UpperBoundElias( <n>, <d>, <q> )  . . . . . . . . . . . . . . Elias bound
+##
+DeclareOperation("UpperBoundElias", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  UpperBoundJohnson( <n>, <d> ) . . . . . . . . . . Johnson bound for <q>=2
+##
+DeclareOperation("UpperBoundJohnson", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  UpperBound( <n>, <d> [, <F>] )  . . . .  upper bound for minimum distance
+##
+##  calculates upperbound for a code C of word length n, minimum distance at
+##  least d over an alphabet Q of size q, using the minimum of the Hamming,
+##  Plotkin and Singleton bound.
+##
+DeclareOperation("UpperBound", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  IsPerfectCode( <C> )  . . . . . .  determines whether C is a perfect code
+##
+DeclareProperty("IsPerfectCode", IsCode); 
+
+#############################################################################
+##
+#F  IsMDSCode( <C> )  . . .  checks if C is a Maximum Distance Separable Code
+##
+DeclareProperty("IsMDSCode", IsCode); 
+
+#############################################################################
+##
+#F  OptimalityCode( <C> ) . . . . . . . . . .  estimate for optimality of <C>
+##
+##  OptimalityCode(C) returns the difference between the smallest known upper-
+##  bound and the actual size of the code. Note that the value of the
+##  function UpperBound is not allways equal to the actual upperbound A(n,d)
+##  thus the result may not be equal to 0 for all optimal codes!
+##
+DeclareOperation("OptimalityCode", [IsCode]); 
+
+#############################################################################
+##
+#F  OptimalityLinearCode( <C> ) .  estimate for optimality of linear code <C>
+##
+##  OptimalityLinearCode(C) returns the difference between the smallest known
+##  upperbound on the size of a linear code and the actual size.
+##
+DeclareOperation("OptimalityLinearCode", [IsCode]); 
+
+#############################################################################
+##
+#F  BoundsMinimumDistance( <n>, <k>, <F> )  . .  gets data from bounds tables
+##
+##  LowerBoundMinimumDistance uses (n, k, q, true)
+##  LowerBoundMinimumDistance uses (n, k, q, false) 
+DeclareGlobalFunction("BoundsMinimumDistance"); 
+
diff --git a/lib/bounds.gi b/lib/bounds.gi
new file mode 100644
index 0000000..424cafd
--- /dev/null
+++ b/lib/bounds.gi
@@ -0,0 +1,792 @@
+#############################################################################
+##
+#A  bounds.gi               GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for calculating with bounds
+##
+#H  @(#)$Id: bounds.gi,v 1.99 09/25/2004 gap Exp $
+##
+Revision.("guava/lib/bounds_gi") :=
+    "@(#)$Id: bounds.gi,v 1.99 09/25/2004 gap Exp $";
+
+#############################################################################
+##
+#F  LowerBoundGilbertVarshamov( <n>, <r>, <q> )  . . . Gilbert-Varshamov 
+##                                                 lower bound for linear codes
+##
+## added 9-2004 by wdj
+InstallMethod(LowerBoundGilbertVarshamov, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function(n, d, q) 
+    return Int((q^(n-1))/(SphereContent(n-1,d-2,GF(q))));
+end);
+
+#############################################################################
+##
+#F  LowerBoundSpherePacking( <n>, <r>, <q> )  . . . sphere packing lower bound
+##                                                 for unrestricted codes
+##
+## added 11-2004 by wdj
+InstallMethod(LowerBoundSpherePacking, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function(n, d, q) 
+    return Int((q^(n))/(SphereContent(n,d-1,GF(q))));
+end);
+
+#############################################################################
+##
+#F  UpperBoundHamming( <n>, <d>, <q> )  . . . . . . . . . . . . Hamming bound
+##
+InstallMethod(UpperBoundHamming, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function(n, d, q) 
+    return Int((q^n)/(SphereContent(n,QuoInt(d-1,2),q)));
+end);
+
+#############################################################################
+##
+#F  UpperBoundSingleton( <n>, <d>, <q> )  . . . . . . . . . . Singleton bound
+##
+InstallMethod(UpperBoundSingleton, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function (n,d,q)
+    return q^(n - d + 1);
+end);
+
+#############################################################################
+##
+#F  UpperBoundPlotkin( <n>, <d>, <q> )  . . . . . . . . . . . . Plotkin bound
+##
+InstallMethod(UpperBoundPlotkin, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function (n,d,q)
+    local t, fact;
+    t := 1 - 1/q;
+    if (q=2) and (n = 2*d) and (d mod 2 = 0) then
+        return 4*d;
+    elif (q=2) and (n = 2*d + 1) and (d mod 2 = 1) then
+        return 4*d + 4;
+    elif d >= t*n + 1 then
+        return Int(d/( d - t*n));
+    elif d < t*n + 1 then
+        fact := (d-1) / t;
+        if not IsInt(fact) then
+            fact := Int(fact) + 1;
+        fi;
+        return Int(d/( d - t * fact)) * q^(n - fact);
+    fi;
+end);
+
+#############################################################################
+##
+#F  UpperBoundGriesmer( <n>, <d>, <q> ) . . . . . . . . . . .  Griesmer bound
+##
+InstallMethod(UpperBoundGriesmer, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function (n,d,q)
+    local s, den, k, add;
+    den := 1;
+    s := 0;
+    k := 0;
+    add := 0;
+    while s <= n do
+        if add <> 1 then
+            add := QuoInt(d, den) + SignInt(d mod den);
+        fi;
+        s := s + add;
+        den := den * q;
+        k := k + 1;
+    od;
+    return q^(k-1);
+end);
+
+#############################################################################
+##
+#F  UpperBoundElias( <n>, <d>, <q> )  . . . . . . . . . . . . . . Elias bound
+##
+## bug found + corrected 2-2004
+## code added 8-2004
+##
+InstallMethod(UpperBoundElias, "n, d, q", true, [IsInt, IsInt, IsInt], 0, 
+function (n,d,q)
+    local r, i, I, w, bnd, ff, get_list;
+    ff:=function(n,d,w,q)
+          local r;
+	  r:=1-1/q;
+	  return r*n*d*q^n/((w^2-2*r*n*w+r*n*d)*SphereContent(n,w,q));
+    end; 
+    get_list:=function(n,d,q)
+     local r,i,I;
+      I:=[];
+       r:=1-1/q;
+        for i in [1..Int(r*n)] do
+	  if IsPosRat(i^2-2*r*n*i+r*n*d) then Append(I,[i]); fi;
+	   od;
+	    return I;
+    end;
+    I:=get_list(n,d,q);
+    bnd:= Minimum(List(I, w -> ff(n,d,w,q)));
+    return Int(bnd);
+end);
+
+#############################################################################
+##
+#F  UpperBoundJohnson( <n>, <d> ) . . . . . . . . . . Johnson bound for <q>=2
+##
+InstallMethod(UpperBoundJohnson, "n, d", true, [IsInt, IsInt], 0, 
+function (n,d)
+    local UBConsWgt, e, num, den;
+    UBConsWgt := function (n1,d1)
+        local fact, e, res, t;
+        e := Int((d1-1) / 2);
+        res := 1;
+        for t in [0..e] do
+            res := Int(res * (n1 - (e-t)) / ( d1 - (e-t)));
+        od;
+        return res;
+    end;
+    e := Int((d-1) / 2);
+    num := Binomial(n,e+1) - Binomial(d,e)*UBConsWgt(n,d);
+    den := Int(num / Int(n / (e+1)));
+    return Int(2^n / (den + SphereContent(n,e,2)));
+end);
+
+#############################################################################
+##
+#F  UpperBound( <n>, <d> [, <F>] )  . . . .  upper bound for minimum distance
+##
+##  calculates upperbound for a code C of word length n, minimum distance at
+##  least d over an alphabet Q of size q, using the minimum of the Hamming,
+##  Plotkin and Singleton bound.
+##
+InstallMethod(UpperBound, "n, d, fieldsize", true, [IsInt, IsInt, IsInt], 0, 
+function(n, d, q) 
+    local MinBound, l;
+
+    MinBound := function (n1,d1,q1)
+        local mn1;
+        mn1 := Minimum (UpperBoundPlotkin(n1,d1,q1),
+                       UpperBoundSingleton(n1,d1,q1),
+                       UpperBoundElias(n1,d1,q1));
+        if q1 = 2 then
+            return Minimum(mn1, UpperBoundJohnson(n1,d1));
+        else
+            return Minimum(mn1, UpperBoundHamming(n1,d1,q1));
+        fi;
+    end;
+
+    if n < d then
+        return 0;
+    elif n = d then
+        return q;
+    elif d = 1 then
+        return q^n;
+    fi;
+    if (q=2) then
+        if d mod 2 = 0 then
+            return Minimum(MinBound(n,d,q), MinBound(n-1,d-1,q));
+        else
+            return Minimum(MinBound(n,d,q), MinBound(n+1,d+1,q));
+        fi;
+    else
+        return MinBound(n,d,q);
+    fi;
+end);
+
+InstallOtherMethod(UpperBound, "n, d, field", true, [IsInt, IsInt, IsField], 0, 
+function(n, d, F) 
+	return UpperBound(n, d, Size(F)); 
+end); 
+
+InstallOtherMethod(UpperBound, "n, d", true, [IsInt, IsInt], 0, 
+function(n, d) 
+	return UpperBound(n, d, 2); 
+end); 
+
+
+#############################################################################
+##
+#F  IsPerfectCode( <C> )  . . . . . .  determines whether C is a perfect code
+##
+InstallMethod(IsPerfectCode, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C) 
+    local n, q, dist, d, t, isperfect, IsTrivialPerfect, ArePerfectParameters;
+
+    IsTrivialPerfect := function(C)
+        # Checks if C has only one or zero codewords, or is the whole
+        # space, or is a repetition code of odd length over GF(2).
+        # These are 'trivial' perfect codes.
+        return ((Size(C) <= 1) or 
+                (Size(C) = Size(LeftActingDomain(C))^WordLength(C)) or
+                ((LeftActingDomain(C) = GF(2)) and (Size(C) = 2) and
+                 ((WordLength(C) mod 2) <> 0) and (IsCyclicCode(C))));
+    end;
+
+    ArePerfectParameters := function(q, n, M, dvec) 
+        local k, r;
+        # Can the parameters be of a perfect code? If they don't belong
+        # to a trivial perfect code, they should be the same as a Golay
+        # or Hamming code.
+        k := LogInt(M, q);
+        if M <> q^k then 
+            return false; #nothing wrong here
+        elif (q = 2) and (n = 23) then
+            return (k = 12) and (7 in [dvec[1]..dvec[2]]);
+        elif (q = 3) and (n = 11) then
+            return (k = 6) and (5 in [dvec[1]..dvec[2]]);
+        else
+            r := n-k;
+            return (n = ((q^r-1)/(q-1))) and 
+                   (3 in [dvec[1]..dvec[2]]);
+        fi;
+    end;
+
+    n := WordLength(C);
+    q := Size(LeftActingDomain(C));
+    dist := [LowerBoundMinimumDistance(C), UpperBoundMinimumDistance(C)];
+    if IsTrivialPerfect(C) then
+        if (Size(C) > 1) then
+            SetCoveringRadius(C, Int(MinimumDistance(C)/2));
+        else
+            SetCoveringRadius(C, n);
+        fi; 
+		return true; 
+    elif not ArePerfectParameters(q, n, Size(C), dist) then
+        return false;
+    else
+        t := List(dist, d->QuoInt(d-1, 2));
+        if t[1] = t[2] then 
+            d := t[1]*2 +1;
+        else
+            d := MinimumDistance(C);
+        fi;
+        isperfect := (d mod 2 = 1) and 
+                     ArePerfectParameters(q, n, Size(C), [d,d]);
+        if isperfect then
+            C!.lowerBoundMinimumDistance := d;
+            C!.upperBoundMinimumDistance := d;
+            SetCoveringRadius(C, Int(d/2));
+        fi;
+    	return isperfect; 
+	fi;
+end);
+
+#############################################################################
+##
+#F  IsMDSCode( <C> )  . . .  checks if C is a Maximum Distance Separable Code
+##
+InstallMethod(IsMDSCode, "method for unrestricted code", true, [IsCode], 0, 
+function(C)
+    local wd, w, n, d, q;
+    q:= Size(LeftActingDomain(C));
+    n:= WordLength(C);
+    d:= MinimumDistance(C);
+    if d = n - LogInt(Size(C),q) + 1 then
+        if not HasWeightDistribution(C) then
+            wd := List([0..n], i -> 0);
+            wd[1] := 1;
+            for w in [d..n] do
+                # The weight distribution of MDS codes is exactly known
+                wd[w+1] := Binomial(n,w)*Sum(List([0..w-d],j -> 
+                                   (-1)^j * Binomial(w,j) *(q^(w-d+1-j)-1)));
+            od;
+            SetWeightDistribution(C, wd);
+        fi;
+        return true;
+    else
+        return false; #this is great!
+    fi;
+end);
+
+#############################################################################
+##
+#F  OptimalityCode( <C> ) . . . . . . . . . .  estimate for optimality of <C>
+##
+##  OptimalityCode(C) returns the difference between the smallest known upper-
+##  bound and the actual size of the code. Note that the value of the
+##  function UpperBound is not allways equal to the actual upperbound A(n,d)
+##  thus the result may not be equal to 0 for all optimal codes!
+##
+InstallMethod(OptimalityCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    return UpperBound(WordLength(C), MinimumDistance(C), 
+						Size(LeftActingDomain(C))) - 
+			Size(C);
+end);
+
+#############################################################################
+##
+#F  OptimalityLinearCode( <C> ) .  estimate for optimality of linear code <C>
+##
+##  OptimalityLinearCode(C) returns the difference between the smallest known
+##  upperbound on the size of a linear code and the actual size.
+##
+
+InstallMethod(OptimalityLinearCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function(C) 
+	local q, ub; 
+	if not IsLinearCode(C) then 
+		Print("Warning: OptimalityLinearCode called with non-linear ", 
+		      "code as argument\n"); 
+		##LR do we want to raise an error here? 
+	fi; 
+    q := Size(LeftActingDomain(C));
+    ub := Minimum(UpperBound(WordLength(C), MinimumDistance(C), q),
+                  UpperBoundGriesmer(WordLength(C), MinimumDistance(C), q));
+    return q^LogInt(ub,q) - Size(C);
+end);
+
+
+#############################################################################
+##
+#F  BoundsMinimumDistance( <n>, <k>, <F> )  . .  gets data from bounds tables
+##
+##  LowerBoundMinimumDistance uses (n, k, q, true)
+##  UpperBoundMinimumDistance uses (n, k, q, false)
+
+InstallGlobalFunction(BoundsMinimumDistance, 
+function(arg)
+    local n, k, q, RecurseBound, res, InfoLine, GLOBAL_ALERT,
+          DoTheTrick, kind, obj;
+
+    InfoLine := function(n, k, d, S, spaces, prefix)
+        local K, res;
+        if kind = 1 then
+            K := "L";
+        else
+            K := "U";
+        fi;
+        return String(Flat([ K, "b(", String(n), ","
+                       , String(k), ")=", String(d), ", ", S ]));
+    end;
+
+    DoTheTrick := function( obj, man, str)
+        if IsBound(obj.lastman) and obj.lastman = man then
+            obj.expl[Length(obj.expl)] := str;
+        else
+            Add(obj.expl, str);
+        fi;
+        obj.lastman := man;
+        return obj;
+    end;
+#F              RecurseBound
+    RecurseBound := function(n, k, spaces, prefix)
+        local i, obj, obj2, obj3, d1, d2, d3;
+        if k = 0 then  # Nullcode
+            return rec(d := n, expl := [InfoLine(n, k, n,
+                           "null code", spaces, prefix) ], cons :=
+                       [NullCode, [n, q]]);
+        elif k = 1 then  # RepetitionCode
+            return rec(d := n, expl := [InfoLine(n, k, n,
+                           "repetition code", spaces, prefix) ],
+                       cons := [RepetitionCode, [n, q]]);
+        elif k = 2 and q = 2 then  # Cordaro-Wagner code
+            obj := rec( d :=2*Int((n+1)/3) - Int(n mod 3 / 2) );
+            obj.expl :=  [InfoLine(n, k, obj.d, "Cordaro-Wagner code", spaces,
+                                 prefix)];
+            obj.cons := [CordaroWagnerCode,[n]];
+            return obj;
+        elif k = n-1 then  # Dual of the repetition code
+            return rec( d :=2, 
+                        expl := [InfoLine(n, k, 2,
+                           "dual of the repetition code", spaces, prefix) ],
+                        cons := [DualCode,[[RepetitionCode, [n, q]]]]);
+        elif k = n then  # Whole space code
+            return rec( d :=1,
+                        expl := [InfoLine(n, k, 1, Concatenation(
+                           "entire space GF(", String(q), ")^",
+                                   String(n)), spaces, prefix) ],
+                        cons := [WholeSpaceCode, [n, q]]);
+        elif not IsBound(GUAVA_BOUNDS_TABLE[kind][q][n][k]) then
+            if kind = 1 then  # trivial for lower bounds
+                obj := rec(d :=2, 
+                           expl := [InfoLine(n, k, 2,
+                                   "expurgated dual of repetition code",
+                                   spaces, prefix) ],
+                           cons := [DualCode,[[RepetitionCode, [n, q]]]]);
+                for i in [ k .. n - 2 ] do
+                    obj.cons := [ExpurgatedCode,[obj.cons]];
+                od;
+                return obj;
+#            else  # Griesmer for upper bounds
+#                obj := rec( d := 2);
+#                while Sum([0..k-1], i -> 
+#                        QuoInt(obj.d, q^i) + SignInt(obj.d mod q^i)) <= n do
+#                    obj.d := obj.d + 1;
+#                od;
+#                obj.d := obj.d - 1;
+#                obj.expl := [InfoLine(n, k, obj.d, "Griesmer bound", spaces,
+#                                    prefix)];
+#                return obj;
+# begin CJ, 27 April 2006
+             else  # upper-bounds
+				 obj := rec(d := 2);
+                 if (k = 1 or n = k) then		# this is trivial
+                     if (n = k) then obj.d := 1;
+					 else obj.d := n;
+                     fi;
+				     obj.expl := [InfoLine(n, k, obj.d, "trivial", spaces, prefix)];
+                 else							# Singleton bound
+					 if (IsEvenInt(q) and n = q+2) then
+                        if (k = q-1) then obj.d := 4;
+                        else Error("Invalid Singleton bound");
+                        fi;
+                     elif (IsPrimeInt(q) and n = q+1) then
+                        obj.d := q - k + 2;
+                     else 
+                        obj.d := n - k + 1;
+                     fi;
+                     obj.expl := [InfoLine(n, k, obj.d, "by the Singleton bound", spaces, prefix)];
+                 fi;
+				 return obj;
+# end CJ
+             fi;
+                       #Look up construction in table
+        elif IsInt(GUAVA_BOUNDS_TABLE[kind][q][n][k]) then
+            i := GUAVA_BOUNDS_TABLE[kind][q][n][k];
+            if i = 1 then  # Shortening
+                obj := RecurseBound(n+1, k+1, spaces, "");
+                if IsBound(obj.lastman) and obj.lastman = 1 then
+                    Add(obj.cons[2][2], Length(obj.cons[2][2])+1);
+                else
+                    obj.cons := [ShortenedCode, [ obj.cons, [1] ]];
+                fi;
+                return DoTheTrick( obj, 1, InfoLine(n, k, obj.d,
+                               "by shortening of:", spaces, prefix) );
+            elif i = 2 then  # Puncturing
+                obj := RecurseBound(n+1, k, spaces, "");
+                obj.d := obj.d - 1;
+                if IsBound(obj.lastman) and obj.lastman = 2 then
+                    Add(obj.cons[2][2], Length(obj.cons[2][2])+1);
+                else
+                    obj.cons := [ PuncturedCode, [ obj.cons, [1] ]];
+                fi;
+                return DoTheTrick( obj, 2, InfoLine(n, k, obj.d,
+                               "by puncturing of:", spaces, prefix) );
+            elif i = 3 then  # Extending
+                obj := RecurseBound(n-1, k, spaces, "");
+                if q = 2 and IsOddInt(obj.d) then
+                    obj.d := obj.d + 1;
+                fi;
+                if IsBound(obj.lastman) and obj.lastman = 3 then
+                    obj.cons[2][2] := obj.cons[2][2] + 1;
+                else
+                    obj.cons := [ ExtendedCode, [ obj.cons, 1 ]];
+                fi;
+                return DoTheTrick( obj, 3, InfoLine(n, k, obj.d,
+                               "by extending:", spaces, prefix) );
+# begin CJ 25 April 2006
+			elif i = 20 then  # Taking subcode
+				obj := RecurseBound(n, k+1, spaces, "");
+				obj.cons := [ SubCode, [ obj.cons ]];
+				return DoTheTrick( obj, 20, InfoLine(n, k, obj.d,
+								"by taking subcode of:", spaces, prefix) );
+# end CJ
+            # Methods for upper bounds:
+            elif i = 11 then  # Shortening
+                obj := RecurseBound(n-1, k-1, spaces, "");
+                return DoTheTrick( obj, 11, InfoLine(n, k, obj.d,
+#                               "otherwise shortening would contradict:",
+                               "by considering shortening to:",
+                               spaces, prefix) );
+            elif i = 12 then  # Puncturing
+                obj := RecurseBound(n-1, k, spaces, "");
+                obj.d := obj.d + 1;
+                return DoTheTrick( obj, 12, InfoLine(n, k, obj.d,
+#                               "otherwise puncturing would contradict:",
+                               "by considering puncturing to:",
+                               spaces, prefix) );
+            elif i = 13 then  #Extending
+                obj := RecurseBound(n+1, k, spaces, "");
+                if q=2 and IsOddInt(obj.d) then
+                    obj.d := obj.d - 1;
+                fi;
+                return DoTheTrick( obj, 13, InfoLine(n, k, obj.d,
+                               "otherwise extending would contradict:",
+                               spaces, prefix) );
+            else
+                Error("invalid table entry; table is corrupted");
+            fi;
+        else
+            i := GUAVA_BOUNDS_TABLE[kind][q][n][k];
+            if i[1] = 0 then  # Code from library
+                if IsBound( GUAVA_REF_LIST.(i[3]) ) then
+                    res.references.(i[3]) := GUAVA_REF_LIST.(i[3]);
+                else
+                    res.references.(i[3]) := GUAVA_REF_LIST.ask;
+                fi;
+                obj := rec( d := i[2], expl := [InfoLine(n, k, i[2],
+                               Concatenation("reference: ", i[3]),
+                               spaces, prefix)], cons := false );
+                if kind = 1 and not GLOBAL_ALERT then
+                    GUAVA_TEMP_VAR := [n, k];
+                    ReadPkg( "guava",  
+                            Concatenation( "tbl/codes", String(q), ".g" ) );
+                    if GUAVA_TEMP_VAR = false then
+                        GLOBAL_ALERT := true;
+                    fi;
+                    obj.cons := GUAVA_TEMP_VAR;
+                fi;
+                return obj;
+            elif i[1] = 4 then  # Construction B
+                obj := RecurseBound(n+i[2],k+i[2]-1, spaces, "");
+                obj.cons := [ConstructionBCode, [obj.cons]];
+#                Add(obj.expl, InfoLine(n, k, obj.d, Concatenation(
+#                                    "by contruction B (deleting ",String(i[2]),
+#                                    " coordinates of a word in the dual)"),
+#                                    spaces, prefix) );
+                Add(obj.expl, InfoLine(n, k, obj.d, Concatenation(
+                                    "by applying contruction B to a [",
+                                    String(n+i[2]), ",", String(k+i[2]-1), ",",
+                                    String(obj.d), "] code"), spaces, prefix) );
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 5 then  # u | u+v construction
+                obj := RecurseBound(n/2, i[2], spaces + 4, "C1: ");
+                obj2 :=RecurseBound(n/2, k-i[2], spaces + 4, "C2: ");
+				d1 := obj.d;
+                obj.cons := [UUVCode,[obj.cons, obj2.cons]];
+                obj.d := Minimum( 2 * obj.d, obj2.d );
+                obj.expl := Concatenation(obj2.expl, obj.expl);
+                Add(obj.expl, InfoLine(n, k, obj.d, 
+						Concatenation("by the u|u+v construction applied to C1 [",
+						String(n/2), ",", String(i[2]), ",",
+                        String(d1), "] and C2 [", String(n/2),
+                        ",", String(k-i[2]), ",", String(obj2.d), "]: "),
+                        spaces, prefix) );
+#                        "u|u+v construction of C1 and C2:", spaces, prefix));
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 22 and q > 2 then  # u | u+av | u+v+w construction, for GF(q) where q > 2
+                obj := RecurseBound(n/3, i[2], spaces + 4, "C1: "); d1 := obj.d;
+                obj2 :=RecurseBound(n/3, i[3], spaces + 4, "C2: "); d2 := obj2.d;
+                obj3 :=RecurseBound(n/3, k-i[2]-i[3], spaces + 4, "C2: "); d3 := obj3.d;
+                obj.cons := false;	# [UUAVUVWCode,[obj.cons, obj2.cons, obj3.cons]];
+                obj.d := n;
+                if (i[2] > 0) then obj.d := Minimum( obj.d, 3*d1 ); fi;
+                if (i[3] > 0) then obj.d := Minimum( obj.d, 2*d2 ); fi;
+                if (k-(i[2]+i[3]) > 0) then obj.d := Minimum( obj.d, d3 ); fi;
+                obj.expl := Concatenation(obj3.expl, obj2.expl, obj.expl);
+                Add(obj.expl, InfoLine(n, k, obj.d, 
+						Concatenation("by the u|u+av|u+v+w construction applied to C1 [",
+						String(n/3), ",", String(i[2]), ",",
+                        String(d1), "] and C2 [", String(n/3),
+                        ",", String(i[3]), ",", String(d2), "] and C3 [",
+                        String(n/3), ",", String(k-i[2]-i[3]), ",",
+                        String(d3), "]: "), spaces, prefix) );
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 6 then  # Concatenation
+                obj  := RecurseBound(n-i[2], k, spaces + 4, "C1: ");
+                obj2 := RecurseBound(i[2],   k, spaces + 4, "C2: ");
+                d1 := obj.d;
+                obj.cons := [ConcatenationCode,[obj.cons, obj2.cons]];
+                obj.d := obj.d + obj2.d;
+                obj.expl := Concatenation(obj2.expl, obj.expl);
+                Add(obj.expl, InfoLine(n, k, obj.d, 
+						Concatenation("by concatenation of C1 [",
+						String(n-i[2]), ",", String(k), ",",
+                        String(d1), "] and C2 [", String(i[2]), ",",
+                        String(k), ",", String(obj2.d), "]: "),
+                        spaces, prefix) );
+#                        "concatenation of C1 and C2:", spaces, prefix));
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 7 then  # ResidueCode
+# begin CJ 27 April 2006
+# The current Brouwer's table contains some 'MYSTERY' codes, these codes are
+# resulted from Construction A.
+				if ((q = 2 and i[2] > 257) or (q = 3 and i[2] > 243) or (q = 4 and i[2] > 256)) then
+                	d1 := QuoInt((i[2]-n), q) + SignInt((i[2]-n) mod q);
+                	obj := rec( d := d1, expl := [InfoLine(n, k, d1,
+                               Concatenation("by construction A (taking residue) of a [",
+                               String(i[2]), ",", String(k+1), ",", String(i[2]-n), "]",
+                               " MYSTERY code, contact A.E. Brouwer (aeb at cwi.nl)"),
+                               spaces, prefix)], cons := false );
+					Unbind(obj.lastman);
+					return obj;
+				fi;
+# end CJ
+                obj := RecurseBound(i[2], k+1, spaces, "");
+                obj.d := QuoInt(obj.d, q) + SignInt(obj.d mod q);
+                Add(obj.expl, InfoLine(n, k, obj.d, "by construction A (taking residue) of:",
+                                    spaces, prefix) );
+                obj.cons := [ResidueCode, [obj.cons]];
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 14 then  # Construction B
+                obj := RecurseBound(n-i[2], k-i[2]+1, spaces, "");
+                Add(obj.expl, InfoLine(n, k, obj.d,
+#                        "otherwise construction B would contradict:", spaces,
+                        "by construction B applied to:", spaces,
+                        prefix) );
+                Unbind(obj.lastman);
+                return obj;
+# begin CJ, 25 April 2006
+            elif i[1] = 15 then	# the Griesmer bound (non recursive)
+                obj := rec( d:=i[2], expl := [InfoLine(n, k, i[2],
+                            "by the Griesmer bound", spaces, prefix)], cons:=false );
+                Unbind(obj.lastman);
+                return obj;
+            elif i[1] = 16 then # one-step Griesmer bound
+                obj := RecurseBound(n-(i[2]+1), k-1, spaces, "");
+				obj.d := i[2];
+                Add(obj.expl, InfoLine(n, k, obj.d,
+                        "by a one-step Griesmer bound from:", spaces, prefix) );
+                Unbind(obj.lastman);
+                return obj;
+			elif i[1] = 21 then	# Construction B2
+				obj := RecurseBound(n+i[2], k+i[2]-(2*i[3])-1, spaces, "");
+				obj.cons := [ConstructionB2Code, [obj.cons]];
+				obj.d := obj.d - (2*i[3]); 
+				Add(obj.expl, InfoLine(n, k, obj.d, Concatenation(
+					"by applying construction B2 to a [", String(n+i[2]), ",",
+					String(k+i[2]-(2*i[3])-1), ",", String(obj.d+(2*i[3])),
+					"] code"), spaces, prefix) );
+				Unbind(obj.lastman);
+				return obj;
+#end CJ
+            else
+                Error("invalid table entry; table is corrupted");
+            fi;
+        fi;
+    end;
+#F              Function body
+    
+	
+	if Length(arg) < 2 or Length(arg) > 4 then
+        Error("usage: OptimalLinearCode( <n>, <k> [, <F>] )");
+    fi;
+    n := arg[1];
+    k := arg[2];
+    q := 2;
+    if Length(arg) > 2 then
+        if IsInt(arg[3]) then
+            q := arg[3];
+        else
+            q := Size(arg[3]);
+        fi;
+    fi;
+    if k > n then
+        Error("k must be less than or equal to n");
+    fi;
+    # Check that right tables are present
+    if not IsBound(GUAVA_REF_LIST) or Length(RecNames(GUAVA_REF_LIST))=0 then
+        ReadPkg( "guava", "tbl/refs.g" );
+    fi;
+    res := rec(n := n,
+               k := k,
+               q := q,
+               references := rec(),
+               construction := false); 
+    if not ( IsBound(GUAVA_BOUNDS_TABLE[1][q]) and
+             IsBound(GUAVA_BOUNDS_TABLE[2][q]) ) and
+       q > 4 then
+        # Left the following lines out and replaced them with the previous,
+        # and the else-part of this if, because using READ in
+        # this way does not work in GAP 3.5.
+        # (the behaviour of LOADED_PACKAGES has changed)
+#       not READ(Concatenation(LOADED_PACKAGES.guava, "tbl/bdtable",
+#               String(q),".g")) then       
+        res.lowerBound := 1;
+        res.upperBound := n - k + 1;
+        return res;
+#        Error("boundstable for q = ", q, " is not implemented.");
+    else
+        ReadPkg( "guava", Concatenation( "tbl/bdtable", String(q), ".g" ) );
+    fi;
+    if n > Length(GUAVA_BOUNDS_TABLE[1][q]) then
+        # no error should be returned here, otherwise Upper and
+        # LowerBoundMinimumDistance would not work. The upper bound
+        # could easely be sharpened by the Griesmer bound and
+        # if n - k > Sz then
+        #     upperbound >= n - k + 1;
+        # else
+        #     upperbound <= Ub[ Sz ][ k - n + Sz ]
+        # fi;
+        # lowerbound >= Lb[ Sz ][Minimum(Sz, k)]
+
+        res.lowerBound := 1;
+        res.upperBound := n - k + 1;
+        return res;
+#        Error("no data for n > ", Length(GUAVA_BOUNDS_TABLE[1][q]));
+    fi;
+    if Length(arg) < 4 or arg[4] then
+        kind := 1;
+        GLOBAL_ALERT := (Length(arg) = 4);
+        obj := RecurseBound( n, k, 0, "");
+        if not GLOBAL_ALERT then
+            res.construction := obj.cons;
+        fi;
+        res.lowerBound := obj.d;
+        res.lowerBoundExplanation := Reversed( obj.expl );
+    fi;
+    if Length(arg) < 4 or not arg[4] then
+        kind := 2;
+        obj := RecurseBound( n, k, 0, "");
+        res.upperBound := obj.d;
+        res.upperBoundExplanation := Reversed( obj.expl );
+    fi;
+    return res;
+end);
+ 
+ 
+#############################################################################
+##
+#F  StringFromBoundsInfo . . . . . . .  functions for bounds record
+##  PrintBoundsInfo  . . . . . . . . .  
+##  DisplayBoundsInfo  . . . . . . . .  
+## 
+
+##  These functions are not automatically called.  The user must 
+##  specifically call them if desired.  They are intended for use 
+##  with the Bounds Info record returned by the BoundsMinimumDistance 
+##  function only.  They replace the BoundsOps functions of the GAP3 
+##  version of GUAVA and provide a way to neatly print and display 
+##  the information returned by BoundsMinimumDistance.  
+##  Ex: PrintBoundsInfo(BoundsMinimumDistance(13,5,3)); 
+## 
+
+StringFromBoundsInfo := function(R)
+    local line;
+    line := Concatenation("an optimal linear [", String(R.n), ",",
+                    String(R.k), ",d] code over GF(", String(R.q), ") has d");
+    if R.upperBound <> R.lowerBound then
+        Append(line,Concatenation(" in [", String(R.lowerBound),"..",
+                String(R.upperBound),"]"));
+    else
+        Append(line,Concatenation("=",String(R.lowerBound)));
+    fi;
+    return line;
+end;
+
+PrintBoundsInfo := function(R)
+    Print(StringFromBoundsInfo(R), "\n");
+end;
+
+DisplayBoundsInfo := function(R)
+    local i, ref;
+    PrintBoundsInfo(R);
+    if IsBound(R.lowerBoundExplanation) then
+        for i in [1..SizeScreen()[1]-2] do Print( "-" ); od; Print( "\n" );
+        for i in R.lowerBoundExplanation do
+            Print(i, "\n");
+        od;
+    fi;
+    if IsBound(R.upperBoundExplanation) then
+        for i in [1..SizeScreen()[1]-2] do Print( "-" ); od; Print( "\n" );
+        for i in R.upperBoundExplanation do
+            Print(i, "\n");
+        od;
+    fi;
+    if IsBound(R.references) and Length(RecNames(R.references)) > 0 then
+        for i in [1..SizeScreen()[1]-2] do  Print( "-" ); od; Print( "\n" );
+        for i in RecNames(R.references) do
+            Print("Reference ", i, ":\n");
+            for ref in R.references.(i) do
+                Print(ref, "\n");
+            od;
+        od;
+    fi;
+end;
+
+
diff --git a/lib/codecr.gd b/lib/codecr.gd
new file mode 100644
index 0000000..557a0e5
--- /dev/null
+++ b/lib/codecr.gd
@@ -0,0 +1,182 @@
+#############################################################################
+##
+#A  codecr.gd               GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains functions for calculating with code covering radii
+##
+#H  @(#)$Id: codecr.gd,v 1.3 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codecr_gd") :=
+    "@(#)$Id: codecr.gd,v 1.3 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CoveringRadius( <code> )
+##
+##  Return the covering radius of <code>
+##  In case a special algorithm for this code exist, call
+##  it first.
+##
+##  Not useful for large codes.
+##
+##  That's why I changed it, see the manual for more details
+##  -- eric minkes.
+##
+DeclareAttribute("CoveringRadius", IsCode); 
+
+########################################################################
+##
+#F  SpecialCoveringRadius( <code> )
+##
+##  Special function to calculate the covering radius of a code 
+##  None implemented yet. 
+##
+DeclareAttribute("SpecialCoveringRadius", IsCode); 
+
+########################################################################
+##
+#F  BoundsCoveringRadius( <code> )
+##
+##  Find a lower and an upper bound for the covering radius of code.
+##
+DeclareOperation("BoundsCoveringRadius", [IsCode]); 
+
+########################################################################
+##
+#F  SetBoundsCoveringRadius( <code>, <cr> )
+##  SetBoundsCoveringRadius( <code>, <interval> )
+##
+##  Enable the user to set the covering radius (or bounds) him/herself.
+##  Was SetCoveringRadius in GAP3 version of GUAVA. 
+## 
+DeclareOperation("SetBoundsCoveringRadius", [IsCode, IsVector]);  
+
+########################################################################
+##
+#F  IncreaseCoveringRadiusLowerBound(
+##      <code> [, <stopdistance> ] [, <startword> ] )
+##
+DeclareOperation("IncreaseCoveringRadiusLowerBound", 
+					[IsCode, IsInt, IsVector]); 
+
+########################################################################
+##
+#F  ExhaustiveSearchCoveringRadius( <code> )
+##
+##  Try to compute the covering radius. Don't compute all coset
+##  leaders, but increment the lower bound as soon as a coset leader
+##  is found.
+##
+DeclareOperation("ExhaustiveSearchCoveringRadius", [IsCode, IsBool]); 
+
+########################################################################
+##
+#F  CoveringRadiusLowerBoundTable
+##
+
+
+########################################################################
+##
+#F  GeneralLowerBoundCoveringRadius( <n>, <size> [, <F> ] )
+##  GeneralLowerBoundCoveringRadius( <code> )
+##
+DeclareOperation("GeneralLowerBoundCoveringRadius", [IsCode]); 
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusSphereCovering( <n>, <r> [, <F> ] [, true ] )
+##
+DeclareOperation("LowerBoundCoveringRadiusSphereCovering", 
+						[IsInt, IsInt, IsInt, IsBool]); 
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusVanWee1( ... )
+##
+DeclareOperation("LowerBoundCoveringRadiusVanWee1", 
+						[IsInt, IsInt, IsInt, IsBool]); 
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusVanWee2( <n>, <r> ) Counting Excess bound
+##
+DeclareOperation("LowerBoundCoveringRadiusVanWee2", 
+						[IsInt, IsInt, IsBool]); 
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusCountingExcess( <n>, <r> )
+##
+DeclareOperation("LowerBoundCoveringRadiusCountingExcess", 
+						[IsInt, IsInt, IsBool]); 
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusEmbedded1( <n>, <r> [, <givesize> ] )
+##
+DeclareOperation("LowerBoundCoveringRadiusEmbedded1", 
+						[IsInt, IsInt, IsInt, IsBool]); 
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusEmbedded2( <n>, <r> [, <givesize> ] )
+##
+DeclareOperation("LowerBoundCoveringRadiusEmbedded2", 
+						[IsInt, IsInt, IsInt, IsBool]); 
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusInduction( <n>, <r> ) Induction bound
+##
+DeclareOperation("LowerBoundCoveringRadiusInduction", [IsInt, IsInt]);  
+
+########################################################################
+##
+#F  GeneralUpperBoundCoveringRadius( <code> )
+##
+DeclareOperation("GeneralUpperBoundCoveringRadius", [IsCode]); 
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusRedundancy( <code> )
+##
+##  Return the redundancy of the code as an upper bound for
+##  the covering radius.
+##
+##  Only for linear codes.
+##
+DeclareOperation("UpperBoundCoveringRadiusRedundancy", [IsCode]); 
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusDelsarte( <code> )
+##
+DeclareOperation("UpperBoundCoveringRadiusDelsarte", [IsCode]); 
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusStrength( <code> )
+##
+##  Return (q-1)n/q as an upper bound for <code>, if it
+##  has strength 1 (i.e. every coordinate contains each element
+##  of the field the same number of times).
+##
+DeclareOperation("UpperBoundCoveringRadiusStrength", [IsCode]); 
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusGriesmerLike( <code> )
+##
+DeclareOperation("UpperBoundCoveringRadiusGriesmerLike", [IsCode]);  
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusCyclicCode( <code> )
+##
+DeclareOperation("UpperBoundCoveringRadiusCyclicCode", [IsCode]);  
+
+
+
diff --git a/lib/codecr.gi b/lib/codecr.gi
new file mode 100644
index 0000000..cb75865
--- /dev/null
+++ b/lib/codecr.gi
@@ -0,0 +1,2015 @@
+#############################################################################
+##
+#A  codecr.gi               GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains functions for calculating with code covering radii
+##
+#H  @(#)$Id: codecr.gi,v 1.6 2003/02/12 03:49:16 gap Exp $
+##
+## changes 10-2004:
+## 1. CalculateLinearCodeCoveringRadius changed to a slightly faster
+##    algorithm.
+## 2. minor bug fix for ExhaustiveSearchCoveringRadius
+## 2. minor bug fix for IncreaseCoveringRadiusLowerBound
+##
+Revision.("guava/lib/codecr_gi") :=
+    "@(#)$Id: codecr.gi,v 1.6 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CoveringRadius( <code> )
+##
+##  Return the covering radius of <code>
+##  In case a special algorithm for this code exist, call
+##  it first.
+##
+##  Not useful for large codes.
+##
+##  That's why I changed it, see the manual for more details
+##  -- eric minkes.
+##
+
+
+## Calculation is done in this function, instead of in the method, so that
+## users can override the redundancy restriction if desired.  Note that
+## this does not check the trivial cases checked in the method,
+
+CalculateLinearCodeCoveringRadius := function( code )
+  local H, wts,CLs,i,rho;
+  if Redundancy(code) = 0 then
+		return 0;
+	else
+#
+#return Maximum( List( SyndromeTable( code ), i -> Weight( i[ 1 ] ) ) );
+# (old version had line above in place of next 5)
+    H:=CheckMat(code);
+    CLs:=CosetLeadersMatFFE(H,LeftActingDomain(code));
+    wts:=List([1..Length(CLs)],i->WeightVecFFE(CLs[i]));
+    rho:=Maximum(wts);
+    return rho;
+  fi;
+end;
+
+InstallMethod(CoveringRadius, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function( code )
+    # call the special algorithm for this code, if it exists
+    if HasSpecialCoveringRadius( code ) then 
+        code!.boundsCoveringRadius :=
+          SpecialCoveringRadius( code ) ( code );  
+    fi;
+    
+    if Length( BoundsCoveringRadius( code ) ) = 1 then
+        return code!.boundsCoveringRadius[ 1 ];
+    else
+		if Redundancy( code ) < 20 then
+			code!.boundsCoveringRadius :=
+			  [ CalculateLinearCodeCoveringRadius( code ) ];
+		else
+			##LR - this sets CR to an interval 
+			InfoCoveringRadius(
+			  "CoveringRadius: warning, the covering radius of \n",
+			  "this code cannot be computed straightforward. \n",
+			  "Try to use IncreaseCoveringRadiusLowerBound( <code> ).\n",
+			  "(see the manual for more details).\n",
+			  "The covering radius of <code> lies in the interval:\n" );
+			return BoundsCoveringRadius( code );
+		fi;
+    fi;
+    return code!.boundsCoveringRadius[ 1 ];
+end);
+
+# For small codes in large spaces, this may take a very long time 
+InstallMethod(CoveringRadius, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function( code ) 
+    local Code, vector, d, curmax, n, q, one, count, size, t, i, j,
+			zero, large, gen; 
+	if IsLinearCode( code ) then 
+		return CoveringRadius( code ); 
+	elif Length(code!.boundsCoveringRadius) = 1 then 
+		return code!.boundsCoveringRadius[1]; 
+	elif HasSpecialCoveringRadius( code ) then 
+		code!.boundsCoveringRadius := SpecialCoveringRadius( code ) ( code );  
+	else 
+		q := Size(LeftActingDomain(code));
+		n := WordLength(code);
+		size := Size(code);
+		one := One(LeftActingDomain(code));  
+		zero := Zero(LeftActingDomain(code)); 
+		Code := VectorCodeword(AsSSortedList(code)); 
+		vector := List([1..n], i-> zero); 
+		large := one; 
+		gen := Z(q); 
+
+		curmax := n;
+		for t in Code do
+			d := DistanceVecFFE(t, vector);
+			if d < curmax then
+				curmax := d;
+			fi;
+		od;
+		for count in [2..q^n] do
+			t := n;
+			while vector[t] = large do
+				vector[t] := zero;
+				t := t - 1;
+			od;
+			if vector[t] = zero then 
+				vector[t] := gen; 
+			else 
+				vector[t] := vector[t] * gen; 
+			fi; 
+			t := 1;
+			repeat
+				d := DistanceVecFFE(Code[t], vector);
+				t := t + 1;
+			until d <= curmax or t > size;
+			if d > curmax then
+				curmax := n;
+				for t in Code do
+					d := DistanceVecFFE(t, vector);
+					if d < curmax then
+						curmax := d;
+					fi;
+				od;
+			fi;
+		od;
+		code!.boundsCoveringRadius := [curmax];
+	fi; 
+	return code!.boundsCoveringRadius[1]; 
+end);
+
+
+########################################################################
+##
+#F  BoundsCoveringRadius( <code> )
+##
+##  Find a lower and an upper bound for the covering radius of code.
+##
+
+InstallMethod(BoundsCoveringRadius, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(code) 
+	local bcr;
+	if HasCoveringRadius(code) then 
+		code!.boundsCoveringRadius := [CoveringRadius(code)]; 
+	elif not IsBound(code!.boundsCoveringRadius) then 
+		bcr := [GeneralLowerBoundCoveringRadius(code) .. 
+				GeneralUpperBoundCoveringRadius(code)]; 
+		if Length(bcr) = 0 then 
+			code!.boundsCoveringRadius := [0,WordLength(code)]; 
+		else 
+			code!.boundsCoveringRadius := bcr; 
+		fi;
+	fi; 
+	return code!.boundsCoveringRadius; 
+end); 
+
+
+########################################################################
+##
+#F  SetBoundsCoveringRadius( <code>, <cr> )
+##  SetBoundsCoveringRadius( <code>, <interval> )
+##
+##  Enable the user to set the covering radius (or bounds) him/herself.
+##  Used to be SetCoveringRadius, before GAP4.  
+
+InstallOtherMethod(SetBoundsCoveringRadius, 
+	"method for unrestricted code, integer", 
+	true, [IsCode, IsInt], 0, 
+function(code, cr) 
+	SetCoveringRadius(code, cr); 
+	code!.boundsCoveringRadius := [cr]; 
+end); 
+
+InstallMethod(SetBoundsCoveringRadius, 
+	"method for unrestricted code, interval",  
+	true, [IsCode, IsVector], 0, 
+function(code, cr) 
+	code!.boundsCoveringRadius := IntersectionSet(
+			BoundsCoveringRadius( code ), cr );
+	if Length( code!.boundsCoveringRadius ) = 0 then
+		code!.boundsCoveringRadius := cr;
+	fi;
+	IsRange( code!.boundsCoveringRadius );
+	if Length(code!.boundsCoveringRadius) = 1 then 
+		SetCoveringRadius(code, code!.boundsCoveringRadius[1]); 
+	fi; 
+end); 
+
+
+########################################################################
+##
+#F  IncreaseCoveringRadiusLowerBound(
+##      <code> [, <stopdistance> ] [, <startword> ] )
+##
+## small bug fix 10-2004
+##
+InstallMethod(IncreaseCoveringRadiusLowerBound, 
+	"method for unrestricted code, stop distance, start vector", 
+	true, [IsCode, IsInt, IsVector], 0, 
+function ( code, stopdistance, startvector )
+    
+    local 
+          n,                 # length of the code
+          k,                 # dimension of the code
+          genmat,            # generator matrix of the code
+          field,             # field of the code
+          q,                 # the size of field
+          fieldels,          # elements of field
+          fieldzero,         # zero element of field
+          nonzeroels,        # non-zero elements of field
+          boundscr,          # current bounds on the covering radius
+          lb,                # current achieved lower bound
+          current,           # the element of field^n that we are
+                             # currently checking
+          cwcurrent,         # current in Codeword form
+          distcurrenttocode, # the distance of current to the code
+          currentchanged,    # did we change current during the loop ?
+          counterchanged,    # number of changes we have made so far
+          countertotal,      # number of iterations we have made so far
+          h, i, j,           # indexes to make the first slice
+          slice,             # the number of the current slice
+          numberofslices,    # the elements of the code are handled in 
+                             # slices of 2^10 elements
+          slicedim,          # the dimension of a slice
+          slicesize,         # the size of a slice ( q^slicedim )
+          index,             # to enumerate the codewords, the
+                             # correct generator must be added
+                             # index contains the generator number
+          satisfied,         # are we satisfied with the results ?
+          words,             # a list of codewords in the current slice
+          wordslist0,        # a list of codewords with distance
+                             # distcurrentocode + 0 from current
+          wordslist1,        # a list of codewords with distance
+                             # distcurrentocode + 1 from current
+          word,              # a index for wordslist*
+          coord,             # the coordinate where current will
+                             # be changed
+          staychance,        # chance that we stay at the same distance
+          downchance,        # chance that we move closer to the code
+          bestdist,          # best distance reached so far
+          bestword,          # the corresponding word
+          newelement,        # the new element for current[ coord ]
+          newdist;           # the new distance of the changed current
+                             # to the code
+
+    # extract some code parameters
+    n := WordLength( code );
+    if IsLinearCode( code ) then
+        k := Dimension( code );
+    fi;
+    
+    field := LeftActingDomain( code );
+    q := Size( field );
+    
+    # if we cannot compute the minimum distance of the code,
+    # this algorithm will not be of much help either.
+    # <lb> is a safe place to start searching
+    lb := IntFloor( MinimumDistance( code ) / 2 );
+    
+    boundscr := BoundsCoveringRadius( code );
+    if lb > boundscr[ 1 ] then
+        code!.boundsCoveringRadius := Filtered( boundscr, n -> lb <= n );
+        IsRange( code!.boundsCoveringRadius );
+        boundscr := code!.boundsCoveringRadius;
+    fi;
+    
+    if Length( boundscr ) = 1 then
+        # if there is nothing to compute, 
+        # then just return the covering radius
+        return boundscr[ 1 ];     
+    fi;
+    
+    # starting vector 
+#
+	current := ShallowCopy(VectorCodeword( Codeword( startvector ) ));
+# (old version has above in place of below)
+#	current := Codeword( startvector );
+	distcurrenttocode := MinimumDistance( code, Codeword( current) );
+    bestdist := distcurrenttocode;
+    bestword := ShallowCopy( current );
+    
+    # initialise some parameters and useful variables
+    fieldels := AsSSortedList( field );
+    fieldzero := Zero(field);  
+    nonzeroels := Difference( fieldels, [ fieldzero ] );
+    
+    if IsLinearCode( code ) then
+        genmat := GeneratorMat( code );
+        # try to make the size of a group codewords to be about
+        # CRMemSize
+        slicedim := LogInt( CRMemSize, q );
+        numberofslices := Maximum( 1, q^( k-slicedim ) );
+        slicesize := q^slicedim;
+    fi;
+    
+    satisfied := false;
+    currentchanged := true;
+    counterchanged := 0;
+    countertotal := 0;
+    staychance := 10; # maybe make arguments of these
+    downchance := 1;
+    
+    # the words array contains all codewords generated by
+    # genmat[ 1 ] ... genmat[ slicedim ] ( or genmat[ k ], if
+    # slicedim > k )
+    
+    if IsLinearCode( code ) then
+        words := [ NullVector( n, field ) ];
+        for i in [ 1 .. Minimum( slicedim, k ) ] do
+            for j in [ 1 .. q^( i-1 ) ] do
+                for h in [ 1 .. q-1 ] do
+                    Add( words, words[ j ] + genmat[ i ] * nonzeroels[ h ] );
+                od;
+            od;
+        od;
+    else
+        # if the code is non-linear, the
+        # elements field is obligatory,
+        # so it fits in memory.
+        # no need for all the hassle as in the linear case,
+        # but the disadvantage is that we can't handle
+        # large non-linear codes.
+        # but then again, GUAVA can't handle these anyway.
+        words := VectorCodeword( AsSSortedList( code ) );
+    fi;
+
+    # start algorithm, stop when we are satisfied with the results
+    # (either we have a coset leader of weigth <stopweigth>,
+    # or lb = ub)
+    while not satisfied do
+        countertotal := countertotal + 1;
+        if countertotal mod 1000 = 0 then
+            InfoCoveringRadius( "Number of runs: ",
+                    countertotal, 
+                    "  best distance so far: ", bestdist, "\n" );
+        fi;
+        if currentchanged then
+            # current word has changed, generate three lists of
+            # codewords that have distance distcurrenttocode,
+            # distcurrenttocode + 1 and distcurrenttocode + 2
+            
+            cwcurrent := Codeword( current );
+            
+            if distcurrenttocode > bestdist then
+                bestdist := distcurrenttocode;
+                bestword := ShallowCopy( current );
+                InfoCoveringRadius( 
+                        "New best distance: ", bestdist, "\n" );
+            fi;
+                
+            wordslist0 := [];
+            wordslist1 := [];
+
+            if IsLinearCode( code ) then
+                for slice in [ 0 .. numberofslices-1 ] do
+                    if slice > 0 then
+                        i := k - slicedim - 1;
+                        while EuclideanRemainder( slice, q^i ) <> 0 do
+                            i := i - 1;
+                        od;
+                        index := slicedim + i + 1;
+                        words := List( words, x -> x + genmat[ index ] );
+                    fi;
+                    
+                    Append( wordslist0, 
+                            Filtered( words, x -> 
+                                    DistanceVecFFE( x, current ) 
+                                    = distcurrenttocode ) );
+                    Append( wordslist1,
+                            Filtered( words, x ->
+                                    DistanceVecFFE( x, current ) 
+                                    = distcurrenttocode + 1 ) );
+                    
+                od;
+            else
+                wordslist0 := Filtered( words, x->
+                                      DistanceVecFFE( x, current )
+                                      = distcurrenttocode );
+                wordslist1 := Filtered( words, x->
+                                      DistanceVecFFE( x, current )
+                                      = distcurrenttocode + 1 );
+            fi;
+            
+            currentchanged := false;
+            counterchanged := counterchanged + 1;
+            if EuclideanRemainder( counterchanged, 100 ) = 0 then
+                InfoCoveringRadius( "Number of changes: ", 
+                        counterchanged, "\n" );
+            fi;
+        fi;
+
+        # pick a coordinate
+        # the algorithm will look what happens if we change this coordinate
+        coord := Random( [ 1 .. n ] );
+        
+        # the possible new element for this coordinate
+        # is picked at random from the field elements
+        newelement := Random( Difference( fieldels,
+                              [ current[ coord ] ] ) );
+        
+        # check the new word against the codewords that are
+        # at distance distcurrenttocode + 0 from current
+        # the result can be: 
+        #   1) the distance to all words in wordslist0 is 
+        #      one more than distcurrenttocode 
+        #      (this is the situation that we hope for)
+        #   2) there is at least one word in wordslist0 that
+        #      has distance distcurrenttocode - 1 to the
+        #      new current
+        #   3) if the field is not GF(2):
+        #      there is a word in wordslist0 that stays
+        #      at the same distance
+        newdist := distcurrenttocode + 1;
+        for word in wordslist0 do
+            if word[ coord ] <> current[ coord ] then
+                if word[ coord ] = newelement then
+                    newdist := distcurrenttocode - 1;
+                else
+                    newdist := distcurrenttocode;
+                fi;
+            fi;
+        od;
+        
+        # only check against other words if the previous tests
+        # did not fail
+        if newdist > distcurrenttocode then
+            
+            # check the new word against the codewords that are at 
+            # distance distcurrenttocode + 1 from current
+            # again, two results are possible
+            #   1) all words in wordslist1 are at distance 
+            #      distcurrenttocode + 1 or + 2 (this is good)
+            #   2) there is a word in wordslist1 that now has
+            #      distance distcurrenttocode to current
+            #      this means we did not find an improvement
+            
+            for word in wordslist1 do
+                if word[ coord ] = newelement then
+                    newdist := distcurrenttocode;
+                fi;
+            od;
+        fi;
+        
+        if newdist > distcurrenttocode then
+            # we found a new coset leader with larger weight
+            
+            # now change current 
+            current[ coord ] := newelement;
+            currentchanged := true;
+            distcurrenttocode := newdist;
+            
+            # also check whether the covering radius lower bound
+            # can be increased, this is what the whole
+            # algorithm is about !
+            
+            if distcurrenttocode > boundscr[ 1 ] then
+                
+                # write directly to the code to make the change
+                # permanent, even if the user interrupted us
+                code!.boundsCoveringRadius :=
+                  Filtered( boundscr, x -> x >= distcurrenttocode );
+                # make it a range together if possible
+                IsRange( code!.boundsCoveringRadius );
+                boundscr := code!.boundsCoveringRadius;
+
+                # maybe we have reached the upper bound
+                # then we can stop altogether !
+                if Length( boundscr ) = 1 then
+                    satisfied := true;
+                fi;
+            fi;
+        elif newdist = distcurrenttocode then
+            # the change to the word did not change the
+            # distance to the code
+            if Random( [ 1 .. 100 ] ) <= staychance then
+                current[ coord ] := newelement;
+                currentchanged := true;
+            fi;
+        else
+            # make it a 1 in 100 chance to get closer anyway
+            # because we do not want to get stuck in a
+            # suboptimal coset
+            if Random( [ 1 .. 100 ] ) <= downchance then
+                current[ coord ] := newelement;
+                currentchanged := true;
+                distcurrenttocode := newdist;
+            fi;
+        fi;
+        
+        # maybe the distance of current to the code 
+        # is high enough for the user
+        # then we should stop
+        if distcurrenttocode = stopdistance then
+            satisfied := true;
+        fi;
+    od;
+    
+    # return the new covering radius bounds, and a coset leader
+    # that has weight equal to the lower bound
+    return rec( boundsCoveringRadius := code!.boundsCoveringRadius,
+                cosetLeader := Codeword( current ) );
+end);
+
+InstallOtherMethod(IncreaseCoveringRadiusLowerBound, 
+	"method for unrestricted code, starting vector", 
+	true, [IsCode, IsVector], 0, 
+function( code, startvector ) 
+	# stopdistance = -1 is the default: never stop, unless the lower 
+	# bound meets the upper bound 
+	return IncreaseCoveringRadiusLowerBound( code, -1, startvector ); 
+end); 
+
+InstallOtherMethod(IncreaseCoveringRadiusLowerBound, 
+	"method for unrestricted code, stopdistance", 
+	true, [IsCode, IsInt], 0, 
+function( code, stopdistance ) 
+	local lb, current, distcurrenttocode;
+		
+    lb := IntFloor( MinimumDistance( code ) / 2 );
+    current := RandomVector( WordLength( code ),
+							 Random( [0..WordLength( code )] ),
+							 LeftActingDomain( code ));
+	distcurrenttocode := MinimumDistance( code,  Codeword(current) );
+	while distcurrenttocode < lb do
+		current := RandomVector( WordLength( code ),
+								 Random( [0..WordLength( code )] ),
+								 LeftActingDomain( code ));
+		distcurrenttocode := MinimumDistance( code,  Codeword(current) );
+	od;
+					
+	return IncreaseCoveringRadiusLowerBound( code, -1, current); 
+end); 
+
+
+InstallOtherMethod(IncreaseCoveringRadiusLowerBound, 
+	"method for unrestricted code", true, [IsCode], 0, 
+function( code ) 
+	local lb, current, distcurrenttocode; 
+	
+	lb := IntFloor( MinimumDistance( code ) / 2 );	
+	current := RandomVector( WordLength( code ), 
+							 Random( [0..WordLength( code )] ), 
+							 LeftActingDomain( code )); 
+#	distcurrenttocode := MinimumDistance( code, current );
+#  (old version had above line)
+	distcurrenttocode := MinimumDistance( code, Codeword(current) );
+	while distcurrenttocode < lb do
+		current := RandomVector( WordLength( code ), 
+								 Random( [0..WordLength( code )] ), 
+								 LeftActingDomain( code ));
+		distcurrenttocode := MinimumDistance( code, Codeword(current) );
+	od;
+
+	return IncreaseCoveringRadiusLowerBound( code, -1, current);  
+end); 
+
+
+########################################################################
+##
+#F  ExhaustiveSearchCoveringRadius( <code> )
+##
+##  Try to compute the covering radius. Don't compute all coset
+##  leaders, but increment the lower bound as soon as a coset leader
+##  is found.
+##
+
+InstallMethod(ExhaustiveSearchCoveringRadius, 
+	"unrestricted code, boolean stopsoon", 
+	true, [IsCode,IsBool], 0, 
+function(C, stopsoon) 
+	if IsLinearCode(C) then 
+		return ExhaustiveSearchCoveringRadius(C, stopsoon); 
+	else 
+		Error("ExhaustiveSearchCoveringRadius: <code> must be a linear code"); 
+	fi; 
+end); 
+
+InstallMethod(ExhaustiveSearchCoveringRadius, "linear code, boolean stopsoon", 
+	true, [IsLinearCode, IsBool], 0, 
+function(code, stopsoon) 
+
+    local k, n, i, j, lastone, zerofound, IsCosetLeader,
+          lb, we, wd, vc, cont, codewords,
+          leaderfound, allexamined, supp, elmsC, elms, len, one, zero,
+          boundscr;
+    
+    IsCosetLeader := function( codewords, len, word, wt, one )
+        local i, check, cw, wcw, j;
+        check := true;
+        i := 1;
+        while i <= len and check do
+            cw := codewords[ i ] + word;
+            wcw := 0;
+            for j in [ 1 .. Length( cw ) ] do
+                if cw[ j ] = one then
+                    wcw := wcw + 1;
+                fi;
+            od;
+            if wcw < wt then
+                check := false;
+            fi;
+            i := i + 1;
+        od;
+        return check;
+    end;
+
+    if Size( LeftActingDomain( code ) ) <> 2 then
+        Error( "CoveringRadiusSearch: <code> must be a binary code" );
+    fi;
+
+    boundscr := BoundsCoveringRadius( code );
+    if Length( boundscr ) = 1 then
+        return boundscr[ 1 ];
+    fi;
+    
+    lb := boundscr[ 1 ];
+    n := WordLength( code );
+    wd := WeightDistribution( code );
+    elms := [];
+    for i in [ 0 .. n ] do
+        if wd[ i + 1 ] > 0 then
+            elms[ i + 1 ] := ShallowCopy(AsSSortedList( 
+                                     ConstantWeightSubcode( code, i ) ));
+        fi;
+    od;
+    
+    for i in [ 1 .. n+1 ] do
+        if IsBound( elms[ i ] ) then
+            for j in [ 1 .. Length( elms[ i ] ) ] do
+                elms[ i ][ j ] := VectorCodeword( elms[ i ][ j ] );
+#mutable error on:
+# C:=RandomLinearCode(10,5,GF(2));
+# ExhaustiveSearchCoveringRadius(C,true);
+            od;
+        fi;
+    od;
+
+    # try to find a coset leader with weight > lb
+    # if found, increase lb
+    one := One(GF(2));
+    zero := Zero(GF(2));
+    cont := true;
+    while cont do
+        k := BoundsCoveringRadius(code)[ 1 ] + 1;
+        InfoCoveringRadius( "Trying ", k, " ...\n" );
+        codewords := [ NullVector(n, GF(2) ) ];
+        for i in [ 1 .. Minimum( n, 2 * k - 1) ] do
+            if wd[ i + 1 ] <> 0 then
+                Append( codewords, elms[ i + 1 ] );
+            fi;
+        od;
+        len := Length( codewords );
+
+        vc := NullVector( n, GF(2) );
+        for i in [ 1 .. k ] do
+            vc[ i ] := one;
+        od;
+        lastone := k;
+        allexamined := false;
+        leaderfound := false;
+
+        while not leaderfound and not allexamined do
+            if not IsCosetLeader( codewords, len, vc, k, one ) then
+                if lastone = n then
+                    zerofound := false;
+                    i := lastone - 1;
+                    while i > n - k and vc[ i ] = one do
+                        i := i - 1;
+                    od;
+                    if i = n - k then 
+                        allexamined := true;
+                    else
+                        j := i;
+                        i := i + 1;
+                        while vc[ j ] = zero do
+                            j := j - 1;
+                        od;
+                        vc[ j ] := zero;
+                        vc[ j + 1 ] := one;
+                        j := j + 2;
+                        if i <> j then
+                            while i <= lastone do
+                                vc[ j ] := one;
+                                vc[ i ] := zero;
+                                i := i + 1;
+                                j := j + 1;
+                            od;
+                            lastone := j - 1;
+                        else
+                            lastone := n;
+                        fi;
+                    fi;
+                else
+                    vc[ lastone ] := zero;
+                    lastone := lastone + 1;
+                    vc[ lastone ] := one;
+                fi;
+            else
+                leaderfound := true;
+            fi;
+        od;
+
+        if leaderfound then
+            code!.boundsCoveringRadius :=   
+              Filtered( code!.boundsCoveringRadius, x -> x >= k );
+            if stopsoon then
+                cont := false;
+            fi;
+        else
+            code!.boundsCoveringRadius :=
+              [ code!.boundsCoveringRadius[ 1 ] ];
+            cont := false;
+        fi;
+    od;
+    
+    IsRange( code!.boundsCoveringRadius );
+    return( code!.boundsCoveringRadius );
+end);
+
+InstallOtherMethod(ExhaustiveSearchCoveringRadius, "unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	return ExhaustiveSearchCoveringRadius(C, true); 
+end); 
+
+
+########################################################################
+##
+#F  CoveringRadiusLowerBoundTable
+##
+
+CoveringRadiusLowerBoundTable := [
+    [ 3, 2, , , , , , , , ,                     # n = 13
+       ,  , , , , , , , , ,
+       ,  , , , , , , , , ,
+       ,  , , , , , , , , ,
+       ,  , , , , , , , ],
+    [ 3, 3, , , , , , , , ,                     # n = 14
+       ,  , , , , , , , , ,
+       ,  , , , , , , , , ,
+       ,  , , , , , , , , ,
+       ,  , , , , , , , ],
+    [ 4, 3, 3, , , , , , , ,                    # n = 15
+       ,  ,  , , , , , , , ,
+       ,  ,  , , , , , , , ,
+       ,  ,  , , , , , , , ,
+       ,  ,  , , , , , , ],
+    [ 4, 4, 3, 3, , , , , , ,                   # n = 16
+       ,  ,  ,  , , , , , , ,
+       ,  ,  ,  , , , , , , ,
+       ,  ,  ,  , , , , , , ,
+       ,  ,  ,  , , , , , ],
+    [ 4, 4, 3, 3, 3, , , , , ,                  # n = 17
+       ,  ,  ,  ,  , , , , , ,
+       ,  ,  ,  ,  , , , , , ,
+       ,  ,  ,  ,  , , , , , ,
+       ,  ,  ,  ,  , , , , ],
+    [ 5, 4, 4, 3, 3, 3, , , , ,                 # n = 18
+       ,  ,  ,  ,  ,  , , , , ,
+       ,  ,  ,  ,  ,  , , , , ,
+       ,  ,  ,  ,  ,  , , , , ,
+       ,  ,  ,  ,  ,  , , , ],
+    [ 5, 4, 4, 4, 3, 3, 2, , , ,                # n = 19
+       ,  ,  ,  ,  ,  ,  , , , ,
+       ,  ,  ,  ,  ,  ,  , , , ,
+       ,  ,  ,  ,  ,  ,  , , , ,
+       ,  ,  ,  ,  ,  ,  , , ],
+    [ 6, 5, 4, 4, 4, 3, 3, 2, , ,               # n = 20
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , ],
+    [ 6, 5, 5, 4, 4, 3, 3, 3, , ,               # n = 21
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , , ,
+       ,  ,  ,  ,  ,  ,  ,  , ],
+    [ 6, 6, 5, 5, 4, 4, 3, 3, 3, ,              # n = 22
+       ,  ,  ,  ,  ,  ,  ,  ,  , ,
+       ,  ,  ,  ,  ,  ,  ,  ,  , ,
+       ,  ,  ,  ,  ,  ,  ,  ,  , ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 7, 6, 5, 5, 4, 4, 3, 3, 3, 3,             # n = 23
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 7, 6, 6, 5, 5, 4, 4, 3, 3, 3,             # n = 24
+      3,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 7, 7, 6, 6, 5, 5, 4, 4, 3, 3,             # n = 25
+      3, 2,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 8, 7, 7, 6, 6, 5, 5, 4, 4, 3,             # n = 26
+      3, 3, 2,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 8, 8, 7, 6, 6, 5, 5, 4, 4, 4,             # n = 27
+      3, 3, 3, 2,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 9, 8, 7, 7, 6, 6, 5, 5, 4, 4,             # n = 28
+      4, 3, 3, 3, 2,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 9, 8, 8, 7, 7, 6, 6, 5, 5, 4,             # n = 29
+      4, 4, 3, 3, 3, 2,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 9, 9, 8, 7, 7, 6, 6, 5, 5, 5,             # n = 30
+      4, 4, 4, 3, 3, 3,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+       ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 10, 9, 8, 8, 7, 7, 6, 6, 5, 5,            # n = 31
+       5, 4, 4, 3, 3, 3, 3,  ,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 10, 9, 9, 8, 8, 7, 7, 6, 6, 5,            # n = 32
+       5, 4, 4, 4, 3, 3, 3, 3,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,  ,  ,  ,  ,  ,  ,  ,  ],
+    [ 11, 10, 9, 9, 8, 7, 7, 6, 6, 6,           # n = 33
+       5,  5, 4, 4, 4, 3, 3, 3, 3,  ,
+        ,   ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,  ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,  ,  ,  ,  ,  ,  ,  ],
+    [ 11, 10, 10, 9, 8, 8, 7, 7, 6, 6,          # n = 34
+       5,  5,  5, 4, 4, 4, 3, 3, 3, 2,
+        ,   ,   ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,  ,  ,  ,  ,  ,  ],
+    [ 11, 11, 10, 9, 9, 8, 8, 7, 7, 6,          # n = 35
+       6,  5,  5, 5, 4, 4, 4, 3, 3, 3,
+       2,   ,   ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,  ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,  ,  ,  ,  ,  ,  ],
+    [ 12, 11, 10, 10, 9, 9, 8, 8, 7, 7,         # n = 36
+       6,  6,  5,  5, 5, 4, 4, 4, 3, 3,
+       3,  2,   ,   ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,  ,  ,  ,  ,  ],
+    [ 12, 11, 11, 10, 9, 9, 8, 8, 7, 7,         # n = 37
+       6,  6,  6,  5, 5, 4, 4, 4, 4, 3,
+       3,  3,  2,   ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,  ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,  ,  ,  ,  ,  ],
+    [ 13, 12, 11, 10, 10, 9, 9, 8, 8, 7,        # n = 38
+       7,  6,  6,  6,  5, 5, 4, 4, 4, 3,
+       3,  3,  3,  2,   ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,  ,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,  ,  ,  ,  ],
+    [ 13, 12, 12, 11, 10, 10, 9, 9, 8, 8,       # n = 39
+       7,  7,  6,  6,  5,  5, 5, 4, 4, 4,
+       3,  3,  3,  3,  2,   ,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,  ,  ,  ],
+    [ 14, 13, 12, 11, 11, 10, 9, 9, 8, 8,       # n = 40
+       7,  7,  7,  6,  6,  5, 5, 5, 4, 4,
+       4,  3,  3,  3,  3,  2,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,  ,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,  ,  ,  ],
+    [ 14, 13, 12, 12, 11, 10, 10, 9, 9, 8,      # n = 41
+       8,  7,  7,  6,  6,  6,  5, 5, 5, 4,
+       4,  4,  3,  3,  3,  3,  2,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,   ,  ,  ,  ,
+        ,   ,   ,   ,   ,   ,   ,  ,  ],
+    [ 14, 14, 13, 12, 11, 11, 10, 10, 9, 9,     # n = 42
+       8,  8,  7,  7,  6,  6,  6,  5, 5, 5,
+       4,  4,  4,  3,  3,  3,  3,  2,  ,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,  ,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,  ],
+    [ 15, 14, 13, 12, 12, 11, 10, 10, 9, 9,     # n = 43
+       8,  8,  7,  7,  7,  6,  6,  6, 5, 5,
+       5,  4,  4,  4,  3,  3,  3,  3, 2,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,  ,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,  ],
+    [ 15, 14, 14, 13, 12, 11, 11, 10, 10, 9,    # n = 44
+       9,  8,  8,  7,  7,  7,  6,  6,  5, 5,
+       5,  4,  4,  4,  4,  3,  3,  3,  3,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ,  ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 16, 15, 14, 13, 12, 12, 11, 11, 10, 10,   # n = 45
+       9,  9,  8,  8,  7,  7,  7,  6,  6,  5,
+       5,  5,  4,  4,  4,  4,  3,  3,  3,  3,
+        ,   ,   ,   ,   ,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 16, 15, 14, 14, 13, 12, 12, 11, 11, 10,   # n = 46
+       9,  9,  8,  8,  8,  7,  7,  6,  6,  6,
+       5,  5,  5,  4,  4,  4,  4,  3,  3,  3,
+       3,   ,   ,   ,   ,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 16, 16, 15, 14, 13, 13, 12, 11, 11, 10,   # n = 47
+      10,  9,  9,  8,  8,  8,  7,  7,  6,  6,
+       6,  5,  5,  5,  4,  4,  4,  3,  3,  3,
+       3,  2,   ,   ,   ,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 17, 16, 15, 14, 14, 13, 12, 12, 11, 11,   # n = 48
+      10, 10,  9,  9,  8,  8,  7,  7,  7,  6,
+       6,  6,  5,  5,  5,  4,  4,  4,  3,  3,
+       3,  3,  2,   ,   ,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 17, 16, 16, 15, 14, 13, 13, 12, 12, 11,   # n = 49
+      11, 10,  9,  9,  9,  8,  8,  7,  7,  7,
+       6,  6,  6,  5,  5,  5,  4,  4,  4,  3,
+       3,  3,  3,  2,   ,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 18, 17, 16, 15, 14, 14, 13, 13, 12, 11,   # n = 50
+      11, 10, 10,  9,  9,  8,  8,  8,  7,  7,
+       7,  6,  6,  6,  5,  5,  5,  4,  4,  4,
+       3,  3,  3,  3,  2,   ,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 18, 17, 16, 16, 15, 14, 13, 13, 12, 12,   # n = 51
+      11, 11, 10, 10,  9,  9,  8,  8,  8,  7,
+       7,  6,  6,  6,  5,  5,  5,  5,  4,  4,
+       4,  3,  3,  3,  3,  2,   ,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 19, 18, 17, 16, 15, 15, 14, 13, 13, 12,   # n = 52
+      12, 11, 11, 10, 10,  9,  9,  8,  8,  8,
+       7,  7,  6,  6,  6,  5,  5,  5,  5,  4,
+       4,  4,  3,  3,  3,  3,  2,   ,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 19, 18, 17, 16, 16, 15, 14, 14, 13, 12,   # n = 53
+      12, 11, 11, 10, 10,  9,  9,  9,  8,  8,
+       7,  7,  7,  6,  6,  6,  5,  5,  5,  4,
+       4,  4,  4,  3,  3,  3,  3,  2,   ,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 19, 18, 18, 17, 16, 15, 15, 14, 13, 13,   # n = 54
+      12, 12, 11, 11, 10, 10,  9,  9,  9,  8,
+       8,  7,  7,  7,  6,  6,  6,  5,  5,  5,
+       4,  4,  4,  4,  3,  3,  3,  3,  2,   ,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 20, 19, 18, 17, 16, 16, 15, 14, 14, 13,   # n = 55
+      13, 12, 12, 11, 11, 10, 10,  9,  9,  8,
+       8,  8,  7,  7,  7,  6,  6,  6,  5,  5,
+       5,  4,  4,  4,  4,  3,  3,  3,  3,  2,
+        ,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 20, 19, 18, 18, 17, 16, 15, 15, 14, 14,   # n = 56
+      13, 12, 12, 11, 11, 10, 10, 10,  9,  9,
+       8,  8,  8,  7,  7,  7,  6,  6,  6,  5,
+       5,  5,  4,  4,  4,  4,  3,  3,  3,  3,
+       2,   ,   ,   ,   ,   ,   ,   ,   ],
+    [ 21, 20, 19, 18, 17, 16, 16, 15, 14, 14,   # n = 57
+      13, 13, 12, 12, 11, 11, 10, 10,  9,  9,
+       9,  8,  8,  7,  7,  7,  6,  6,  6,  5,
+       5,  5,  5,  4,  4,  4,  4,  3,  3,  3,
+       3,  2,   ,   ,   ,   ,   ,   ,   ],
+    [ 21, 20, 19, 18, 18, 17, 16, 15, 15, 14,   # n = 58
+      14, 13, 13, 12, 12, 11, 11, 10, 10,  9,
+       9,  9,  8,  8,  7,  7,  7,  6,  6,  6,
+       5,  5,  5,  5,  4,  4,  4,  4,  3,  3,
+       3,  3,  2,   ,   ,   ,   ,   ,   ],
+    [ 22, 21, 20, 19, 18, 17, 17, 16, 15, 15,   # n = 59
+      14, 14, 13, 12, 12, 11, 11, 11, 10, 10,
+       9,  9,  8,  8,  8,  7,  7,  7,  6,  6,
+       6,  5,  5,  5,  5,  4,  4,  4,  4,  3,
+       3,  3,  3,  2,   ,   ,   ,   ,   ],
+    [ 22, 21, 20, 19, 18, 18, 17, 16, 16, 15,   # n = 60
+      14, 14, 13, 13, 12, 12, 11, 11, 10, 10,
+      10,  9,  9,  8,  8,  8,  7,  7,  7,  6,
+       6,  6,  5,  5,  5,  5,  4,  4,  4,  3,
+       3,  3,  3,  3,  2,   ,   ,   ,   ],
+    [ 23, 21, 20, 20, 19, 18, 17, 17, 16, 15,   # n = 61
+      15, 14, 14, 13, 13, 12, 12, 11, 11, 10,
+      10, 10,  9,  9,  8,  8,  8,  7,  7,  7,
+       6,  6,  6,  5,  5,  5,  5,  4,  4,  4,
+       3,  3,  3,  3,  3,  2,   ,   ,   ],
+    [ 23, 22, 21, 20, 19, 18, 18, 17, 16, 16,   # n = 62
+      15, 15, 14, 14, 13, 12, 12, 12, 11, 11,
+      10, 10,  9,  9,  9,  8,  8,  8,  7,  7,
+       7,  6,  6,  6,  5,  5,  5,  4,  4,  4,
+       4,  3,  3,  3,  3,  3,  2,   ,   ],
+    [ 23, 22, 21, 20, 20, 19, 18, 17, 17, 16,   # n = 63
+      16, 15, 14, 14, 13, 13, 12, 12, 11, 11,
+      11, 10, 10,  9,  9,  9,  8,  8,  7,  7,
+       7,  6,  6,  6,  6,  5,  5,  5,  4,  4,
+       4,  4,  3,  3,  3,  3,  3,  2,   ],
+    [ 24, 23, 22, 21, 20, 19, 18, 18, 17, 16,   # n = 64
+      16, 15, 15, 14, 14, 13, 13, 12, 12, 11,
+      11, 10, 10, 10,  9,  9,  8,  8,  8,  7,
+       7,  7,  6,  6,  6,  6,  5,  5,  5,  4,
+       4,  4,  4,  3,  3,  3,  3,  3,  2 ]
+];
+
+########################################################################
+##
+#F  GeneralLowerBoundCoveringRadius( <n>, <size> [, <F> ] )
+##  GeneralLowerBoundCoveringRadius( <code> )
+##
+
+InstallMethod(GeneralLowerBoundCoveringRadius, "unrestricted code", true, 
+	[IsCode], 0, 
+function(code)  
+	local n, size, field, listofbounds, max;
+	if IsLinearCode(code) then 
+		return GeneralLowerBoundCoveringRadius(code);  
+	fi; 
+	n := WordLength( code );
+	size := Size( code );
+	field := LeftActingDomain( code );
+	listofbounds := [
+	  LowerBoundCoveringRadiusSphereCovering( n, size, field, false ),
+	];
+	if field = GF(2) then
+		Append( listofbounds, [
+		  LowerBoundCoveringRadiusVanWee1( n, size, field, false ),
+		  LowerBoundCoveringRadiusVanWee2( n, size, false ),
+		  LowerBoundCoveringRadiusCountingExcess( n, size, false )
+		] );
+		if n <= 200 then
+			Append( listofbounds, [
+			  LowerBoundCoveringRadiusEmbedded1( n, size, field, false ),
+				  LowerBoundCoveringRadiusEmbedded2( n, size, field, false )
+				] );
+		fi;
+	fi; 
+	max := Maximum( listofbounds ); 
+
+	if IsBound(code!.boundsCoveringRadius) then 
+		return Maximum ([ max, code!.boundsCoveringRadius[1] ]); 
+	else 
+		return max;
+	fi; 
+end); 
+
+
+InstallMethod(GeneralLowerBoundCoveringRadius, "linear code", true, 
+	[IsLinearCode], 0, 
+function (code) 
+	local n, size, field, k, listofbounds, return_value; 
+	n := WordLength(code); 
+	size := Size(code); 
+	field := LeftActingDomain(code); 
+	listofbounds := [  
+	  LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), 
+	]; 
+	return_value := -99;  # Allows to check whether next set of if 
+						  # statements actually assign a value 
+	if field = GF(2) then
+		k := Dimension( code );
+		# small codimensions (n-k)
+		if k = n then
+			return_value :=  0;
+		elif k = n - 1 then
+			return_value :=  1;
+		elif k = n - 2 then
+			return_value :=  1;
+		elif k = n - 3 and n >= 7 then
+			return_value :=  1;
+		elif k = n - 4 and n >= 5 then
+			if n >= 15 then
+				return_value :=  1;
+			else
+				return_value :=  2;
+			fi;
+		elif k = n - 5 and n >= 9 then
+			if n >= 31 then
+				return_value :=  1;
+			else
+				return_value :=  2;
+			fi;
+		elif k = n - 6 then
+			if n >= 63 then
+				return_value :=  1;
+			elif n >= 14 then
+				return_value :=  2;
+			elif n = 12 then
+				return_value :=  3;
+			fi;
+		elif k = n - 7 and n >= 21 and n <= 64 then
+			return_value :=  2;
+		elif k = n - 8 and n >= 30 and n <= 64 then
+			return_value :=  2;
+		elif k = n - 9 and n >= 44 and n <= 64 then
+			return_value :=  2;
+		elif k = 1 then
+			return_value :=  IntFloor( n/2 );
+		elif k = 2 then
+			return_value :=  IntFloor( (n-1)/2 );
+		elif k = 3 then
+			return_value :=  IntFloor( (n-2)/2 );
+		elif k = 4 then
+			return_value :=  IntFloor( (n-4)/2 );
+		elif k = 5 then
+			return_value :=  IntFloor( (n-5)/2 );
+		fi;
+
+
+		# use the table of Cohen, Litsyn, Lobstein and Mattson
+		if return_value < 0 and n >= 13 and n <= 64 and k>=6 and k<= 64 then
+			if IsBound( 
+				 CoveringRadiusLowerBoundTable[ n - 12 ][ k - 5 ] ) then
+				return_value :=  
+							CoveringRadiusLowerBoundTable[ n - 12 ][ k - 5 ]; 
+			fi;
+		fi;
+	
+		if return_value < 0 then 
+			# not in the table. use the bounds
+			listofbounds := [
+			  LowerBoundCoveringRadiusSphereCovering( n, size, field, false ),
+			  LowerBoundCoveringRadiusVanWee1( n, size, field, false ),
+			  LowerBoundCoveringRadiusVanWee2( n, size, false ),
+			  LowerBoundCoveringRadiusCountingExcess( n, size, false )
+			];
+			if n <= 200 then
+				Append( listofbounds, [
+				  LowerBoundCoveringRadiusEmbedded1( n, size, field, false ),
+				  LowerBoundCoveringRadiusEmbedded2( n, size, field, false ),
+				] );        
+			fi;
+			return_value := Maximum( listofbounds );
+		fi; 
+	else  # field is not GF(2)
+		listofbounds := [
+		  LowerBoundCoveringRadiusSphereCovering( n, size, field, false ),
+		];
+		return_value := Maximum( listofbounds );
+	fi;
+
+	if IsBound(code!.boundsCoveringRadius) then 
+		return Maximum([return_value, code!.boundsCoveringRadius[1]]); 
+	else 
+		return return_value; 
+	fi; 
+
+end);
+
+InstallOtherMethod(GeneralLowerBoundCoveringRadius, "n, k, field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, size, field) 
+	local listofbounds;  
+	if n < 1 or size < 1 then 
+		Error("GeneralLBCR: <n> and <size> must be positive"); 
+	fi; 
+	listofbounds := [
+	  LowerBoundCoveringRadiusSphereCovering( n, size, field, false ),
+	  LowerBoundCoveringRadiusVanWee1( n, size, field, false ),
+	  LowerBoundCoveringRadiusEmbedded1( n, size, field, false ),
+	  LowerBoundCoveringRadiusEmbedded2( n, size, field, false )
+	];
+	if field = GF(2) then
+		Append( listofbounds, [
+		  LowerBoundCoveringRadiusVanWee2( n, size, false ),
+		  LowerBoundCoveringRadiusCountingExcess( n, size, false )
+		] );
+	fi;
+	return Maximum( listofbounds );
+end);
+   
+InstallOtherMethod(GeneralLowerBoundCoveringRadius, "n, size", true, 
+	[IsInt, IsInt], 0, 
+function(n, size) 
+	return GeneralLowerBoundCoveringRadius(n, size, GF(2)); 
+end); 
+
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusSphereCovering( <n>, <r> [, <F> ] [, true ] )
+##
+
+InstallMethod(LowerBoundCoveringRadiusSphereCovering, 
+	"n, r, fieldsize, usage", 
+	true, [IsInt, IsInt, IsInt, IsBool], 0, 
+function(n, r, q, usage) 
+	local m, lb, ub, tmpcr, tmpsize, t;  
+	if n <= 0 then 
+		Error("LBCRSphereCovering: <n> must be positive"); 
+	fi; 
+    
+	if usage = false then
+        # last argument is false, try to find a lower bound for
+        # the covering radius, given length and size of the code, and field 
+        
+        m := r;
+        if m <= 0 or m > q^n then
+            Error( "LBCRSphereCovering: <m> must be > 0 and <= q^n" );
+        fi;
+        
+        # everything is set up. now compute the bound
+        
+        lb := 0;
+        ub := n;
+        while lb <> ub do
+            tmpcr := IntFloor( ( lb + ub ) / 2 );
+            tmpsize := IntCeiling( q^n / SphereContent( n, tmpcr, q ) );
+            if tmpsize > m then
+                lb := tmpcr + 1;
+            else
+                ub := tmpcr;
+            fi;
+        od;
+        return ub;
+    else
+        # the last argument is not false
+        # now it is assumed that the first argument is the length
+        # of the code and the second argument is the covering radius
+        # of the code. a lower bound for the minimal size of the
+        # code is returned
+        
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCRSphereCovering: <t> must be >= 0 and <= <n>" );
+        fi;
+            
+        return IntCeiling( q^n / SphereContent( n, t, q ) );
+    fi;
+end);
+        
+InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, 
+	"n, r, field, usage", true, 
+	[IsInt, IsInt, IsField, IsBool], 0, 
+function(n, r, F, usage) 
+	if not IsFinite(F) then 
+		Error("LBCRSphereCovering: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusSphereCovering(n, r, Size(F), usage); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, 
+	"n, r, fieldsize", true, [IsInt, IsInt, IsInt], 0, 
+function(n, r, q) 
+	return LowerBoundCoveringRadiusSphereCovering(n, r, q, true); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, 
+	"n, r, field", true, [IsInt, IsInt, IsField], 0, 
+function(n, r, F) 
+	if not IsFinite(F) then 
+		Error("LBCRSphereCovering: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusSphereCovering(n, r, Size(F), true); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, 
+	"n, r, usage", true, [IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+	return LowerBoundCoveringRadiusSphereCovering(n, r, 2, usage);  
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r", true, 
+	[IsInt, IsInt], 0, 
+function(n, r)  
+	return LowerBoundCoveringRadiusSphereCovering(n, r, 2, true); 
+end); 
+
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusVanWee1( ... )
+##
+
+InstallMethod(LowerBoundCoveringRadiusVanWee1, 
+	"n, r, fieldsize, usage", true, [IsInt, IsInt, IsInt, IsBool], 0, 
+function(n, r, q, usage) 
+    local m, lb, ub, tmpcr, tmpsize, t, tmp;
+   	if n <= 0 then 
+		Error("LBCRVanWee1: <n> must be positive"); 
+	fi; 
+    if usage = false then
+        # last argument is false, try to find a lower bound for
+        # the covering radius, given length and size of the code, and field 
+
+        m := r;
+        if m <= 0 or m > q^n then
+            Error( "LBCRVanWee1: <m> must be > 0 and <= q^n" );
+        fi;
+        
+        # everything is set up. now compute the bound
+        
+        lb := 0;
+        ub := n;
+        while lb <> ub do
+            tmpcr := IntFloor( (ub+lb) / 2 );
+            tmpsize := LowerBoundCoveringRadiusVanWee1( n, tmpcr, q );
+            if tmpsize > m then
+                lb := tmpcr + 1;
+            else
+                ub := tmpcr;
+            fi;
+        od;
+        return ub;
+    else
+        # the last argument is not false
+        # now it is assumed that the first argument is the length
+        # of the code and the second argument is the covering radius
+        # of the code. a lower bound for the minimal size of the
+        # code is returned
+   
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCRVanWee1: <t> must be >= 0 and <= <n>" );
+        fi;
+        if t = n then
+            return 1;
+        fi;
+        
+        tmp := (Binomial(n,t))/(IntCeiling((n-t)/(t+1)));
+        tmp := tmp * (IntCeiling((t+1)/(t+1)) - (t+1)/(t+1));
+        tmp := SphereContent( n, t, q ) - tmp;
+        return IntCeiling( q^n / tmp );
+    fi;
+end);
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, 
+	"n, r, field, usage", true, [IsInt, IsInt, IsField, IsBool], 0, 
+function(n, r, F, usage) 
+	if not IsFinite(F) then 
+		Error("LBCRVanWee1: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusVanWee1(n, r, Size(F), usage); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n,r,fieldsize", 
+	true, [IsInt, IsInt, IsInt], 0, 
+function(n, r, q) 
+	return LowerBoundCoveringRadiusVanWee1(n, r, q, true); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n, r, field", 
+	true, [IsInt, IsInt, IsField], 0, 
+function(n, r, F) 
+	if not IsFinite(F) then 
+		Error("LBCRVanWee1: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusVanWee1(n, r, Size(F), true); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, 
+	"n, r, usage", true, [IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+	return LowerBoundCoveringRadiusVanWee1(n, r, 2, usage); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, 
+	"n, r", true, [IsInt, IsInt], 0, 
+function(n, r) 
+	return LowerBoundCoveringRadiusVanWee1(n, r, 2, true); 
+end); 
+
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusVanWee2( <n>, <r> ) Counting Excess bound
+##
+
+InstallMethod(LowerBoundCoveringRadiusVanWee2, 
+	"code length, code size or covering radius, usage", 
+	true, [IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+    local m, lb, ub, tmpcr, eps, tmpsize, t, tmpb1, tmpb2;
+    
+    if n<=0 then
+        Error( "LBCRVanWee2: <n> must be positive" );
+    fi;
+    
+    if usage = false then
+        m := r;
+        if m <= 0 or m > 2^n then
+            Error( "LBCRVanWee2: <m> must be > 0 and <= 2^n" );
+        fi;
+        lb := 0;
+        ub := IntFloor( n/2 );
+        while lb <> ub do
+            tmpcr := IntFloor( ( ub + lb ) / 2 );
+            tmpb1 := (tmpcr+2)*(tmpcr+1)/2; # Binomial(tmpcr+2,2)
+            tmpb2 := (n-tmpcr+1)*(n-tmpcr)/2; # Binomial(n-tmpcr+1,2)
+            eps := tmpb1 * IntCeiling( tmpb2/tmpb1 ) - tmpb2;
+            tmpsize := 2^n * ( SphereContent( n, 2, 2 ) + eps
+                               - 1/2*( tmpcr + 2 )*( tmpcr - 1 ) );
+            tmpsize := tmpsize / ( SphereContent( n, tmpcr, 2 ) * 
+                               ( SphereContent( n, 2, 2 ) 
+                                 - 1/2*( tmpcr + 2 )*( tmpcr - 1 ) )
+                               + eps * SphereContent( n, tmpcr - 2 ) );
+            if tmpsize > m then
+                lb := tmpcr + 1;
+            else
+                ub := tmpcr;
+            fi;
+        od;
+        return ub;
+    else
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCRVanWee2: <t> must be >= 0 and <= <n>" );
+        fi;
+        if 2 * t > n then
+            return 0;
+        fi;
+        tmpb1 := (t+2)*(t+1)/2;
+        tmpb2 := (n-t+1)*(n-t)/2;
+        eps := tmpb1 * IntCeiling( tmpb2/tmpb1 ) - tmpb2;
+        tmpsize := 2^n * ( SphereContent( n, 2, 2 ) + eps
+                           - 1/2*( t + 2 )*( t - 1 ) );
+        tmpsize := tmpsize / ( SphereContent( n, t, 2 ) 
+                           * ( SphereContent( n, 2, 2 ) 
+                               - 1/2*( t + 2 )*( t - 1 ) ) 
+                           + eps * SphereContent( n, t-2, 2 ) );
+        return IntCeiling(tmpsize);
+    fi;
+end);
+
+InstallOtherMethod(LowerBoundCoveringRadiusVanWee2, 
+	"code length, code covering radius", 
+	true, [IsInt, IsInt], 0, 
+function(n, r) 
+	return LowerBoundCoveringRadiusVanWee2(n, r, true); 
+end); 
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusCountingExcess( <n>, <r> )
+## 
+
+InstallMethod(LowerBoundCoveringRadiusCountingExcess, 
+	"code length, code size or covering radius, usage", true, 
+	[IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+    local m, lb, ub, tmpcr, tmpsize, t, rho, eps;
+    
+    if n<=0 then
+        Error( "LBCRCountingExcess: <n> must be positive" );
+    fi;
+    
+    if usage = false then
+        m := r;
+        if m<=0 or m > 2^n then
+            Error( "LBCRCountingExcess: <m> must be > 0 and <= 2^n" );
+        fi;
+        
+        lb := 0;
+        ub := IntFloor( ( n-1 ) / 2 );
+        while lb <> ub do
+            tmpcr := IntFloor( ( ub + lb ) / 2 );
+            tmpsize := LowerBoundCoveringRadiusCountingExcess(
+                               n, tmpcr, true );
+            if tmpsize > m then
+                lb := tmpcr + 1;
+            else
+                ub := tmpcr;
+            fi;
+        od;
+        return ub;
+    else
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCRCountingExcess: <t> must be >=0 and <= <n>" );
+        fi;
+        
+        if t < 2 or 2 * t + 1 > n then
+            return 0;
+        fi;
+        if t = 2 then
+            rho := n - 3 + 2/n;
+        else
+            rho := n - t - 1;
+        fi;
+        eps := ( t+1 ) * IntCeiling( ( n+1 ) / ( t+1 ) ) - ( n+1 );
+        if eps > t then 
+            return 0;
+        fi;
+        tmpsize := 2^n * ( rho + eps );
+        tmpsize := tmpsize / ( rho * SphereContent( n, t ) 
+                           + eps * SphereContent( n, t-1 ) );
+        
+        return IntCeiling( tmpsize );
+    fi;
+end);
+
+InstallOtherMethod(LowerBoundCoveringRadiusCountingExcess, 
+	"code length, code covering radius", true, 
+	[IsInt, IsInt], 0, 
+function(n, r) 
+	return LowerBoundCoveringRadiusCountingExcess(n, r, true); 
+end); 
+
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusEmbedded1( <n>, <r> [, <givesize> ] )
+##
+
+InstallMethod(LowerBoundCoveringRadiusEmbedded1, 
+	"code length, code size or covering radius, field size, usage", 
+	true, [IsInt, IsInt, IsInt, IsBool], 0, 
+function(n, r, q, usage)
+    local m, lb, ub, tmpcr, tmpsize, t, upperb;
+   	if n <= 0 then 
+		Error("LBCREmbedded1: <n> must be positive"); 
+	fi; 
+
+    if usage = false then
+        # last argument is false, try to find a lower bound for
+        # the covering radius, given length and size of the code, and field 
+
+        m := r;
+        if m <= 0 or m > q^n then
+            Error( "LBCREmbedded1: <m> must be > 0 and <= q^n" );
+        fi;
+        
+        # everything is set up. now compute the bound
+        
+        if m = q^n then
+            return 0;
+        fi;
+        if n = 1 then
+            return 0;
+        fi;
+        
+        lb := 1;   
+        ub := n;
+        while lb <> ub do
+            tmpcr := IntFloor( (ub+lb) / 2 );
+            tmpsize := SphereContent( n, tmpcr, q )
+                       - Binomial( 2*tmpcr, tmpcr ); 
+            if tmpsize = 0 then
+                lb := lb + 1;
+            elif tmpsize < 0 then
+                ub := tmpcr;
+            else
+                if 2*tmpcr+1 > n then
+                    upperb := 1;
+                else
+                    upperb := UpperBound( n, 2*tmpcr+1, q );
+                fi;
+                tmpsize := IntCeiling( ( q^n - upperb
+                                   * Binomial( 2 * tmpcr, tmpcr ) )
+                                   / tmpsize );
+                if tmpsize > m then
+                    lb := tmpcr + 1;
+                else
+                    ub := tmpcr;
+                fi;
+            fi;
+        od;
+        return ub;
+    else
+        # the last argument is not false
+        # now it is assumed that the first argument is the length
+        # of the code and the second argument is the covering radius
+        # of the code. a lower bound for the minimal size of the
+        # code is returned
+        
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCREmbedded1: <t> must be >= 0 and <= <n>" );
+        fi;
+        
+        tmpsize := SphereContent( n, t, q ) - Binomial( 2*t, t );
+        if tmpsize <= 0 then
+            return 0;
+        else
+            if 2 * t + 1 > n then
+                upperb := 1;
+            else
+                upperb := UpperBound( n, 2*t+1, q );
+            fi;
+            return IntCeiling( ( q^n - upperb
+              * Binomial( 2*t, t ) ) / tmpsize );
+        fi;
+    fi;
+end);
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, 
+	"code length, code size or covering radius, field, usage", 
+	true, [IsInt, IsInt, IsField, IsBool], 0, 
+function(n, r, F, usage) 
+	if not IsFinite(F) then 
+		Error("LBCREmbedded1: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusEmbedded1(n, r, Size(F), usage); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1,  
+	"code length, code size or covering radius, usage", 
+	true, [IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+	return LowerBoundCoveringRadiusEmbedded1(n, r, 2, usage); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, 
+	"code length, code covering radius, field size", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, r, q) 
+	return LowerBoundCoveringRadiusEmbedded1(n, r, q, true); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, 
+	"code length, code covering radius, field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, r, F) 
+	if not IsFinite(F) then 
+		Error("LBCREmbedded1: <F> must be a finite field");  
+	else 
+		return LowerBoundCoveringRadiusEmbedded1(n, r, Size(F), true); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, 
+	"code length, code covering radius", true, [IsInt, IsInt], 0, 
+function(n, r) 
+	return LowerBoundCoveringRadiusEmbedded1(n, r, 2, true); 
+end); 
+
+
+########################################################################
+##
+#F  LowerBoundCoveringRadiusEmbedded2( <n>, <r> [, <givesize> ] )
+##
+
+InstallMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code size or covering radius, field size, usage", 
+	true, [IsInt, IsInt, IsInt, IsBool], 0, 
+function(n, r, q, usage) 
+    local m, lb, ub, tmpcr, tmpsize, t, upperb;
+   	if n <= 0 then 
+		Error("LBCREmbedded2: <n> must be positive"); 
+	fi; 
+
+    if usage = false then
+        # last argument is false, try to find a lower bound for
+        # the covering radius, given length and size of the code, and field 
+        
+        m := r;
+        if m <= 0 or m > q^n then
+            Error( "LBCREmbedded2: <m> must be > 0 and <= q^n" );
+        fi;
+        
+        # everything is set up. now compute the bound
+        
+        if m = q^n then
+            return 0;
+        fi;
+        if n = 1 or n = 2 then
+            return 0;
+        fi;
+        
+        lb := 1;   
+        ub := n;
+        while lb <> ub do
+            
+            tmpcr := IntFloor( (ub+lb) / 2 );
+            tmpsize := SphereContent( n, tmpcr, q )
+                       - 3/2 * Binomial( 2*tmpcr, tmpcr ); 
+            if tmpsize = -1/2 then
+                lb := lb + 1;
+            elif tmpsize <= 0 then
+                ub := tmpcr;
+            else
+                if 2*tmpcr+1 > n then
+                    upperb := 1;
+                else
+                    upperb := UpperBound( n, 2*tmpcr+1, q );
+                fi;
+                tmpsize := IntCeiling( ( q^n - 2 * upperb
+                                   * Binomial( 2*tmpcr, tmpcr ) )
+                                   / tmpsize );
+                if tmpsize > m then
+                    lb := tmpcr + 1;
+                else
+                    ub := tmpcr;
+                fi;
+            fi;
+        od;
+        return ub;
+    else
+        # the last argument is not false
+        # now it is assumed that the first argument is the length
+        # of the code and the second argument is the covering radius
+        # of the code. a lower bound for the minimal size of the
+        # code is returned
+        
+        t := r;
+        if t < 0 or t > n then
+            Error( "LBCREmbedded2: <t> must be >= 0 and <= <n>" );
+        fi;
+        
+        tmpsize := SphereContent( n, t, q ) - 3/2*Binomial( 2*t, t );
+        if tmpsize <= 0 then
+            return 0;
+        else
+            if 2*t+1 > n then
+                upperb := 1;
+            else
+                upperb := UpperBound( n, 2*t+1, q );
+            fi;
+            
+            return IntCeiling( ( q^n - 2*upperb
+                           * Binomial( 2*t, t ) ) / tmpsize );
+        fi;
+    fi;
+end);
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code size or covering radius, field, usage", 
+	true, [IsInt, IsInt, IsField, IsBool], 0, 
+function(n, r, F, usage) 
+	if not IsFinite(F) then 
+		Error("LBCREmbedded2: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusEmbedded2(n, r, Size(F), usage); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code size or covering radius, usage", 
+	true, [IsInt, IsInt, IsBool], 0, 
+function(n, r, usage) 
+	return LowerBoundCoveringRadiusEmbedded2(n, r, 2, usage);  
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code covering radius, field size", 
+	true, [IsInt, IsInt, IsInt], 0, 
+function(n, r, q) 
+	return LowerBoundCoveringRadiusEmbedded2(n, r, q, true); 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code covering radius, field", 
+	true, [IsInt, IsInt, IsField], 0, 
+function(n, r, F) 
+	if not IsFinite(F) then 
+		Error("LBCREmbedded2: <F> must be a finite field"); 
+	else 
+		return LowerBoundCoveringRadiusEmbedded2(n, r, Size(F), true); 
+	fi; 
+end); 
+
+InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, 
+	"code length, code covering radius", 
+	true, [IsInt, IsInt], 0, 
+function(n, r) 
+	return LowerBoundCoveringRadiusEmbedded2(n, r, 2, true); 
+end); 
+
+
+#############################################################################
+##
+#F  LowerBoundCoveringRadiusInduction( <n>, <r> ) Induction bound
+##
+
+InstallMethod(LowerBoundCoveringRadiusInduction, 
+	"method for two integers", true, [IsInt, IsInt], 0, 
+function(n, t) 
+    if n <= 0 then 
+        Error( "LBCRInduction: <n> must be positive" );
+    fi;
+    if t < 0 or t > n then
+        Error( "LBCRInduction: <t> must be >= 0 and <= <n>" );
+    fi;
+    
+    if n = 2 * t + 2 and t >= 1 then
+        return 4;
+    elif n = 2 * t + 3 and t >= 1 then
+        return 7;
+    elif n = 2 * t + 4 and t >= 4 then
+        return 8;
+    else
+        return 0;
+    fi;
+    
+end);
+
+        
+########################################################################
+##
+#F  GeneralUpperBoundCoveringRadius( <code> )
+##
+InstallMethod(GeneralUpperBoundCoveringRadius, "unrestricted code", true, 
+	[IsCode], 0, 
+function(code) 
+    local listofbounds;
+
+    listofbounds := [ UpperBoundCoveringRadiusStrength( code ) ];
+    if WordLength( code ) <= 100 then
+        Append( listofbounds, [
+          UpperBoundCoveringRadiusDelsarte( code )
+                ] );
+    fi;
+    if IsLinearCode( code ) then
+        Append( listofbounds, [
+          UpperBoundCoveringRadiusRedundancy( code ),
+        ] );
+        if LeftActingDomain( code ) = GF(2) then
+            if ( IsBound( code!.lowerBoundMinimumDistance ) and
+                 IsBound( code!.upperBoundMinimumDistance ) ) and
+               LowerBoundMinimumDistance( code ) = 
+                 UpperBoundMinimumDistance (code ) 
+               then
+                Append( listofbounds, [
+                        UpperBoundCoveringRadiusGriesmerLike( code )
+                        ] );
+            fi;
+        fi;
+    fi;
+    if IsCyclicCode( code ) and LeftActingDomain( code ) = GF(2) then
+        Append( listofbounds, [
+          UpperBoundCoveringRadiusCyclicCode( code )
+        ] );
+    fi;
+    if IsBound( code!.boundsCoveringRadius ) then  
+        Add( listofbounds, Maximum( code!.boundsCoveringRadius ) );
+    fi;
+    return Minimum( listofbounds );
+end);
+
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusRedundancy( <code> )
+##
+##  Return the redundancy of the code as an upper bound for
+##  the covering radius.
+##
+##  Only for linear codes.
+##
+
+InstallMethod(UpperBoundCoveringRadiusRedundancy, "unrestricted code", true, 
+	[IsCode], 0, 
+function( code ) 
+	if IsLinearCode( code ) then 
+		return UpperBoundCoveringRadiusRedundancy( code ); 
+	else 
+		Error("UBCRRedundancy: <code> must be a linear code"); 
+	fi; 
+end); 
+
+InstallMethod(UpperBoundCoveringRadiusRedundancy, "linear code", true, 
+	[IsLinearCode], 0, 
+function( code) 
+	return Redundancy(code); 
+end); 
+
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusDelsarte( <code> )
+##
+
+InstallMethod(UpperBoundCoveringRadiusDelsarte, "method for unrestricted codes", true, [IsCode], 0, 
+function(code) 
+	local p; 
+	p := CodeMacWilliamsTransform(code); 
+	p := CoefficientsOfLaurentPolynomial(p); 
+	p := ShiftedCoeffs(p[1], p[2]); 
+	return WeightVector(p) - 1; 
+end); 
+
+InstallMethod(UpperBoundCoveringRadiusDelsarte, "method for linear codes", 
+	true, [IsLinearCode], 0, 
+function(code) 
+	local dual, wddual;  
+	if not IsBound(code!.boundsCoveringRadius) then
+		# avoid recursion
+		code!.boundsCoveringRadius := [ 0 .. WordLength( code ) ];
+	fi;
+	dual := DualCode( code );
+	wddual := WeightDistribution( dual );
+	return WeightVector( wddual ) - 1;
+end); 
+
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusStrength( <code> )
+##
+##  Return (q-1)n/q as an upper bound for <code>, if it
+##  has strength 1 (i.e. every coordinate contains each element
+##  of the field the same number of times).
+##
+
+InstallMethod(UpperBoundCoveringRadiusStrength, "method for unrestricted codes", 	true, [IsCode], 0, 
+function(code) 
+	local q, n, stris1, i, j, els, fieldels, coordlist, number, zerocols; 
+	if IsLinearCode(code) then 
+		return UpperBoundCoveringRadiusStrength(code); 
+	fi; 
+	q := Size( LeftActingDomain( code ) );
+    n := WordLength( code );
+	stris1 := true;
+	i := 1;
+	els := VectorCodeword( AsSSortedList( code ) );
+	if not ( Length( els ) in List( [ 1 .. n ], x -> q^x ) ) then
+		stris1 := false;
+	fi;
+	fieldels := AsSSortedList(LeftActingDomain( code ) );
+	zerocols := 0;
+	while stris1 and i <= n do
+		coordlist := List( els, x -> x[ i ] );
+		for j in fieldels do
+			number := Length( Filtered( coordlist, x -> x = j ) );
+			if number = Length( els ) then
+				zerocols := zerocols + 1;
+			elif number <> Length( els ) / q then
+				stris1 := false;
+			fi;
+		od;
+		i := i + 1;
+	od;
+	if stris1 then
+		return IntFloor((q-1)*(n-zerocols)/q)+zerocols;
+	else
+		return n;
+	fi;
+end);
+
+InstallMethod(UpperBoundCoveringRadiusStrength, "method for linear code", 
+	true, [IsLinearCode], 0, 
+function(code) 
+	local q, zerocols, i, j, genmat, n, k, zero, onlyzeroes;
+	if Dimension(code) = 0 then 
+		return WordLength(code); 
+	fi; 
+	q := Size(LeftActingDomain(code)); 
+	genmat := GeneratorMat( code );
+	n := WordLength( code );
+	k := Dimension( code );
+	zerocols := 0;
+	zero := Zero(LeftActingDomain(code));
+	for i in [ 1 .. n ] do
+		onlyzeroes := true;
+		j := 1;
+		while onlyzeroes and j <= k do
+			onlyzeroes := ( genmat[ j ][ i ] = zero );
+			j := j + 1;
+		od;
+		if onlyzeroes then
+			zerocols := zerocols + 1;
+		fi;
+	od;
+
+	return IntFloor((q-1)*(n-zerocols)/q) + zerocols;
+end);
+
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusGriesmerLike( <code> )
+##
+
+InstallMethod(UpperBoundCoveringRadiusGriesmerLike, "unrestrictred code", 
+	true, [IsCode], 0, 
+function( code ) 
+	if IsLinearCode( code ) then 
+		return UpperBoundCoveringRadiusGriesmerLike(code); 
+	else 
+		Error("UBCRGriesmerLike: <code> must be a linear code"); 
+	fi; 
+end); 
+
+InstallMethod(UpperBoundCoveringRadiusGriesmerLike, "linear codes", true, 
+	[IsLinearCode], 0, 
+function(code) 
+    local q;
+    q := Size( LeftActingDomain( code ) );
+    return WordLength( code ) - Sum( [ 1 .. Dimension( code ) ],
+                   x -> IntCeiling( MinimumDistance( code ) / q^x ) );
+end);
+
+
+########################################################################
+##
+#F  UpperBoundCoveringRadiusCyclicCode( <code> )
+##
+
+InstallMethod(UpperBoundCoveringRadiusCyclicCode, "unrestricted code", 
+	true, [IsCode], 0, 
+function( code ) 
+	if IsCyclicCode( code ) then  
+		return UpperBoundCoveringRadiusCyclicCode( code ); 
+	else 
+		Error("UBCRCyclicCode: <code> must be a cyclic code"); 
+	fi; 
+end); 
+
+InstallMethod(UpperBoundCoveringRadiusCyclicCode, "cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(code) 
+    return WordLength( code ) - Dimension( code ) + 1 -
+           IntCeiling( Weight( Codeword( GeneratorPol( code ) ) ) / 2 );
+end);
+
+
diff --git a/lib/codecstr.gd b/lib/codecstr.gd
new file mode 100644
index 0000000..e1472b5
--- /dev/null
+++ b/lib/codecstr.gd
@@ -0,0 +1,113 @@
+#############################################################################
+##
+#A  codecstr.gd             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+#A                                                               David Joyner
+##
+##  This file contains functions for constructing codes
+##
+#H  @(#)$Id: codecstr.gd,v 1.2 2003/02/12 03:36:54 gap Exp $
+##
+Revision.("guava/lib/codecstr_gd") :=
+    "@(#)$Id: codecstr.gd,v 1.2 2003/02/12 03:36:54 gap Exp $";
+
+########################################################################
+##
+#F  AmalgamatedDirectSumCode( <C>, <D>, [, <check> ] )
+##
+##  Return the amalgamated direct sum code of C en D.
+##  
+##  This construction is derived from the direct sum construction,
+##  but it saves one coordinate over the direct sum.
+##  
+##  The amalgamated direct sum construction goes as follows:
+##
+##  Put the generator matrices G and H of C respectively D
+##  in standard form as follows:
+##     
+##     G => [ G' | I ]     and    H => [ I | H' ]
+##
+##  The generator matrix of the new code then has the following form:
+##     
+##      [          1 0 ... 0   0 | 0 0 ............ 0 ]
+##      [          0 1 ... 0   0 | 0 0 ............ 0 ] 
+##      [          .........   . | .................. ] 
+##      [   G'     0 0 ... 1   0 | 0 0 ............ 0 ]
+##      [                    |---------------|--------]
+##      [          0 0 ... 0 | 1 | 0 ... 0 0          ]
+##      [--------|-----------|---|                    ]
+##      [ 0 0 ............ 0 | 0   1 ... 0 0    H'    ]
+##      [ .................. | 0   .........          ]
+##      [ 0 0 ............ 0 | 0   0 ... 1 0          ]
+##      [ 0 0 ............ 0 | 0   0 ... 0 1          ]
+##
+##  The codes resulting from [ G' | I ] and [ I | H' ] must
+##  be acceptable in the last resp. the first coordinate.
+##  Checking whether this is true takes a lot of time, however,
+##  and is only performed when the boolean variable check is true.
+##
+DeclareOperation("AmalgamatedDirectSumCode", 
+							[IsCode, IsCode, IsBool]);  
+
+########################################################################
+##
+#F  BlockwiseDirectSumCode( <C1>, <L1>, <C2>, <L2> )
+##
+##  Return the blockwise direct sum of C1 and C2 with respect to 
+##  the cosets defined by the codewords in L1 and L2.
+##
+DeclareOperation("BlockwiseDirectSumCode", 
+							[IsCode, IsList, IsCode, IsList]); 
+
+########################################################################
+##
+#F  ExtendedDirectSumCode( <L>, <B>, m )
+##
+##  The construction as described in the article of Graham and Sloane,
+##  section V.
+##  ("On the Covering Radius of Codes", R.L. Graham and N.J.A. Sloane,
+##    IEEE Information Theory, 1985 pp 385-401)
+##
+DeclareOperation("ExtendedDirectSumCode", 
+							[IsCode, IsCode, IsInt]); 
+
+########################################################################
+##
+#F  PiecewiseConstantCode( <partition>, <constraints> [, <field> ] )
+##
+DeclareGlobalFunction("PiecewiseConstantCode"); 
+
+########################################################################
+##
+#F  GabidulinCode( );
+##
+DeclareOperation("GabidulinCode", [IsInt, IsFFE, IsFFE, IsBool]); 
+    
+########################################################################
+##
+#F  EnlargedGabidulinCode( );
+##
+DeclareOperation("EnlargedGabidulinCode", 
+							[IsInt, IsFFE, IsFFE, IsFFE]);    	
+
+########################################################################
+##
+#F  DavydovCode( );
+##
+DeclareOperation("DavydovCode", [IsInt, IsInt, IsFFE, IsFFE]); 
+
+########################################################################
+##
+#F  TombakCode( );
+##
+DeclareGlobalFunction("TombakCode");  
+    
+########################################################################
+##
+#F  EnlargedTombakCode( );
+##
+DeclareGlobalFunction("EnlargedTombakCode"); 
+
+
diff --git a/lib/codecstr.gi b/lib/codecstr.gi
new file mode 100644
index 0000000..d03ab52
--- /dev/null
+++ b/lib/codecstr.gi
@@ -0,0 +1,1136 @@
+#############################################################################
+##
+#A  codecstr.gi             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+#A                                                               David Joyner
+##
+##  This file contains functions for constructing codes
+##
+#H  @(#)$Id: codecstr.gi,v 1.6 2003/02/14 02:26:04 gap Exp $
+##
+Revision.("guava/lib/codecstr_gi") :=
+    "@(#)$Id: codecstr.gi,v 1.6 2003/02/14 02:26:04 gap Exp $";
+
+########################################################################
+##
+#F  AmalgamatedDirectSumCode( <C>, <D>, [, <check> ] )
+##
+##  Return the amalgamated direct sum code of C en D.
+##  
+##  This construction is derived from the direct sum construction,
+##  but it saves one coordinate over the direct sum.
+##  
+##  The amalgamated direct sum construction goes as follows:
+##
+##  Put the generator matrices G and H of C respectively D
+##  in standard form as follows:
+##     
+##     G => [ G' | I ]     and    H => [ I | H' ]
+##
+##  The generator matrix of the new code then has the following form:
+##     
+##      [          1 0 ... 0   0 | 0 0 ............ 0 ]
+##      [          0 1 ... 0   0 | 0 0 ............ 0 ] 
+##      [          .........   . | .................. ] 
+##      [   G'     0 0 ... 1   0 | 0 0 ............ 0 ]
+##      [                    |---------------|--------]
+##      [          0 0 ... 0 | 1 | 0 ... 0 0          ]
+##      [--------|-----------|---|                    ]
+##      [ 0 0 ............ 0 | 0   1 ... 0 0    H'    ]
+##      [ .................. | 0   .........          ]
+##      [ 0 0 ............ 0 | 0   0 ... 1 0          ]
+##      [ 0 0 ............ 0 | 0   0 ... 0 1          ]
+##
+##  The codes resulting from [ G' | I ] and [ I | H' ] must
+##  be acceptable in the last resp. the first coordinate.
+##  Checking whether this is true takes a lot of time, however,
+##  and is only performed when the boolean variable check is true.
+##
+
+InstallMethod(AmalgamatedDirectSumCode, "method for linear codes, boolean check", 
+	true, [IsLinearCode, IsLinearCode, IsBool], 0, 
+function(C, D, check) 
+	local G, H, Cstandard, Dstandard, NewG, NewH, Nulmat, NewC, i; 
+
+    # check the arguments
+    if LeftActingDomain( C ) <> LeftActingDomain( D ) then
+        Error( "AmalgamatedDirectSumCode: <C> and <D> must be codes ",
+                "over the same field" );
+    fi;
+
+	G := ShallowCopy( GeneratorMat( C ) );
+	H := ShallowCopy( GeneratorMat( D ) );
+	# standard form: G => [ G' | I ]
+	PutStandardForm( G, false );
+	# standard form: H => [ I | H' ]
+	PutStandardForm( H, true );
+
+	# check whether the construction is allowed;
+	# this is (at this time) a lot of work
+	# maybe it will disappear later
+	if check then
+		Cstandard := GeneratorMatCode( G, LeftActingDomain( C ) );
+		Dstandard := GeneratorMatCode( H, LeftActingDomain( C ) );
+		# is the last coordinate of the standardcode C' acceptable ?
+		if not IsCoordinateAcceptable( Cstandard, WordLength( Cstandard ) ) then
+			Error( "AmalgamatedDirectSumCode: Standard form of <C> is not ",
+				   "acceptable in the last coordinate.");
+		fi;
+		# is the last coordinate of the standardcode D' acceptable ?
+		if not IsCoordinateAcceptable( Dstandard, 1 ) then
+			Error( "AmalgamatedDirectSumCode: Standard form of <D> is not ",
+				   "acceptable in first coordinate.");
+		fi;
+	fi;
+
+	NewG := G;
+	# build upper part of the new generator matrix
+	# append n_D - 1 zeroes to all rows of G'
+	for i in NewG do
+		Append( i, List( [ 1..WordLength( D ) - 1 ], 
+				x -> Zero(LeftActingDomain(C) ) ) );
+	od;
+	# concatenate the last row of G' and the first row of H'
+	for i in [ 2 .. WordLength( D ) ] do
+		NewG[ Dimension( C ) ][ WordLength( C ) + i - 1 ] :=
+		  H[ 1 ][ i ];
+	od;
+	# throw away the first row of H' (it is already appended)
+	NewH := List( [ 2..Length( H ) ], x -> H[ x ] );
+	# throw away the first column of H' (it is (1, 0, ..., 0),
+	# the one is already present in the new generator matrix)
+	NewH := List( [ 1..Length( NewH ) ], x -> List(
+				 [ 2 .. WordLength( D ) ], y -> NewH[ x ][ y ] ) );
+	# fill the lower left part with zeroes
+	Nulmat := List( [ 1 .. Dimension( D ) - 1 ],
+					x -> NullVector( WordLength( C ) , LeftActingDomain(C) ) );
+	# and put the rest of H' in the lower right corner
+	for i in [ 1 .. Length( Nulmat ) ] do
+		Append( Nulmat[ i ], NewH[ i ] );
+	od;
+	# paste the lower and the upper part
+	Append( NewG, Nulmat );
+
+	# construct the new code with the new generator matrix
+	NewC := GeneratorMatCode( NewG, "amalgamated direct sum code",
+								LeftActingDomain( C ) );
+	# write history
+	NewC!.history := MergeHistories( History( C ), History( D ) );
+
+	# the new covering radius is at most the sum of the
+	# two old covering radii, if the old codes are normal
+	if HasIsNormalCode( C )
+		   and HasIsNormalCode( D )
+		   and IsNormalCode( C )
+		   and IsNormalCode( D ) then
+		if IsBound( C!.boundsCoveringRadius )
+			   and IsBound( D!.boundsCoveringRadius ) then
+			NewC!.boundsCoveringRadius := [
+			  GeneralLowerBoundCoveringRadius( NewC )
+			  .. Maximum( C!.boundsCoveringRadius )
+				 + Maximum( D!.boundsCoveringRadius ) ];
+		fi;
+	fi;
+	return NewC;
+end);
+
+InstallMethod(AmalgamatedDirectSumCode, "two unrestricted codes, boolean check", 
+	true, [IsCode, IsCode, IsBool], 0, 
+function(C, D, check) 
+	local elsC, elsD, i, NewC,
+		  newels;
+
+	if LeftActingDomain(C) <> LeftActingDomain(D) then 
+		Error("<C> and <D> must be codes over the same field"); 
+	elif IsLinearCode(C) and IsLinearCode(D) then 
+		# this is much faster, because it only uses 
+		# the generator matrices 
+		return AmalgamatedDirectSumCode(C, D, check); 
+	fi; 
+
+	# check whether the construction is allowed;
+	# this is (at this time) a lot of work
+	# maybe it will disappear later
+	if check then
+		# is the last coordinate of C acceptable ?
+		if not IsCoordinateAcceptable( C, WordLength( C ) ) then
+			Error( "AmalgamatedDirectSumCode: <C> is not ",
+				   "acceptable in the last coordinate.");
+		fi;
+		# is the first coordinate of D acceptable ?
+		if not IsCoordinateAcceptable( D, 1 ) then
+			Error( "AmalgamatedDirectSumCode: <D> is not ",
+				   "acceptable in first coordinate.");
+		fi;
+	fi;
+
+	# find the elements of the new code
+	newels := [];
+	for i in AsSSortedList( LeftActingDomain( C ) ) do
+		elsC := VectorCodeword( AsSSortedList(
+		  CoordinateSubCode( C, WordLength( C ), i ) ) );
+		elsD := VectorCodeword( AsSSortedList(
+		  CoordinateSubCode( D, 1, i ) ) );
+		if Length( elsC ) > 0 and
+		   Length( elsD ) > 0 then
+			elsD := List( elsD,
+			  x -> x{ [ 2 .. WordLength( D ) ] } );
+			for i in elsC do
+				Append( newels, List( elsD,
+				  x -> Concatenation( i, x ) ) );
+			od;
+		fi;
+	od;
+
+	if Length( newels ) = 0 then
+		Error( "AmalgamatedDirectSumCode: there are no ",
+			   "codewords satisfying the conditions" );
+	fi;
+	NewC := ElementsCode( newels, "amalgamated direct sum code",
+	  LeftActingDomain( C ) );
+
+	# write history
+	NewC!.history := MergeHistories( History( C ), History( D ) );
+
+	# the new covering radius is at most the sum of the
+	# two old covering radii, if the old codes are normal
+	if HasIsNormalCode( C ) 
+		   and HasIsNormalCode( D )
+		   and IsNormalCode( C )
+		   and IsNormalCode( D ) then
+		if IsBound( C!.boundsCoveringRadius )
+			   and IsBound( D!.boundsCoveringRadius ) then
+			NewC!.boundsCoveringRadius := [
+			  GeneralLowerBoundCoveringRadius( NewC )
+			  .. Maximum( C!.boundsCoveringRadius )
+				 + Maximum( C!.boundsCoveringRadius ) ];
+		fi;
+	fi;
+	return NewC;
+end);
+
+InstallOtherMethod(AmalgamatedDirectSumCode, "method for two unrestricted codes", 
+	true, [IsCode, IsCode], 0, 
+function(C, D) 
+	return AmalgamatedDirectSumCode(C, D, false); 
+end); 
+
+
+########################################################################
+##
+#F  BlockwiseDirectSumCode( <C1>, <L1>, <C2>, <L2> )
+##
+##  Return the blockwise direct sum of C1 and C2 with respect to 
+##  the cosets defined by the codewords in L1 and L2.
+##
+InstallMethod(BlockwiseDirectSumCode, 
+	"method for unrestricted codes and lists of codes or of codewords", 
+	true, [IsCode, IsList, IsCode, IsList], 0, 
+function(C1, L1, C2, L2) 
+    
+    local k, CosetCodeBlockwiseDirectSumCode,
+          SubCodeBlockwiseDirectSumCode, unioncode1, unioncode2, i;
+
+    # check the arguments
+    if LeftActingDomain( C1 ) <> LeftActingDomain( C2 ) then
+        Error( "BlockwiseDirectSumCode: the fields of <C1> and <C2>",
+               "must be the same" );
+    fi;
+    if Length( L1 ) <> Length( L2 ) then
+        Error( "BlockwiseDirectSumCode: <L1> and <L2>",
+               "must have equal lengths" );
+    fi;
+    k := Length( L1 );
+    if k = 0 then
+        Error( "BlockwiseDirectSumCode: the lists are empty" );
+    fi;
+    
+    CosetCodeBlockwiseDirectSumCode := function( C1, L1, C2, L2 )
+
+        local newels, i, k, subcode1, subcode2, newcode, sum;
+
+        k := Length( L1 );
+        # make the elements of the new code
+        newels := [];
+        for i in [ 1 .. k ] do
+            # build subcode 1, using the GUAVA-function CosetCode,
+            # which adds the word L1[i] to all codewords of C1
+            subcode1 := CosetCode( C1, L1[ i ] );
+            subcode2 := CosetCode( C2, L2[ i ] );
+            # now build the the direct sum of the two subcodes
+            sum := DirectSumCode( subcode1, subcode2 );
+            # add the elements of the direct sum-code to
+            # the elements we already found
+            # in the previous steps
+            newels := Union( newels, AsSSortedList( sum ) );
+        od;
+        # finally build the new code with the computed elements
+        newcode := ElementsCode( newels, "blockwise direct sum code",
+                           LeftActingDomain( C1 ) );
+        # write history
+        newcode!.history := MergeHistories( History( C1 ), History( C2 ) );
+        return newcode;
+    end;
+
+    SubCodeBlockwiseDirectSumCode := function( C1, L1, C2, L2 )
+
+        local unioncode, newels, newcode;
+
+        newels := AsSSortedList( DirectSumCode( L1[ 1 ], L2[ 1 ] ) );
+        for i in [ 2 .. Length( L1 ) ] do
+            newels := Union( newels, AsSSortedList(
+              DirectSumCode( L1[ i ], L2[ i ] ) ) );
+        od;
+        newcode := ElementsCode( newels, "blockwise direct sum code",
+          LeftActingDomain( C1 ) );
+        newcode!.history := MergeHistories(
+          History( C1 ), History( C2 ) );
+        return newcode;
+    end;
+
+    if IsCode( L1[ 1 ] ) and IsCode( L2[ 1 ] ) then
+        unioncode1 := L1[ 1 ];
+        unioncode2 := L2[ 1 ];
+        for i in [ 2 .. k ] do
+
+            if not IsCode( L1[ i ] ) or not IsCode( L2[ i ] ) then
+                Error( "BlockwiseDirectSumCode: not all elements of ",
+                       "the lists are codes" );
+            fi;
+            unioncode1 := AddedElementsCode( unioncode1,
+              AsSSortedList( L1[ i ] ) );
+            unioncode2 := AddedElementsCode( unioncode2,
+              AsSSortedList( L2[ i ] ) );
+            if unioncode1 <> C1 then
+                Error( "BlockwiseDirectSumCode: <C1> must be the ",
+                       "union of the codes in <L1>" );
+            fi;
+            if unioncode2 <> C2 then
+                Error( "BlockwiseDirectSumCode: <C2> must be the ",
+                       "union of the codes in <L2>" );
+            fi;
+        od;
+        return SubCodeBlockwiseDirectSumCode( C1, L1, C2, L2 );
+    else
+        L1 := Codeword( L1 );
+        L2 := Codeword( L2 );
+        return CosetCodeBlockwiseDirectSumCode( C1, L1, C2, L2 );
+    fi;
+end);
+
+
+########################################################################
+##
+#F  ExtendedDirectSumCode( <L>, <B>, m )
+##
+##  The construction as described in the article of Graham and Sloane,
+##  section V.
+##  ("On the Covering Radius of Codes", R.L. Graham and N.J.A. Sloane,
+##    IEEE Information Theory, 1985 pp 385-401)
+##
+
+InstallMethod(ExtendedDirectSumCode, "method for linear codes, m", 
+	true, [IsLinearCode, IsLinearCode, IsInt], 0, 
+function(L, B, m) 
+	local m0, GL, GB, NewG, i, j, G, firstzeros, lastzeros, newcode;
+    
+	# check the arguments
+    if WordLength( L ) <> WordLength( B ) then
+        Error( "L and B must have the same length" );
+    elif m < 1 then
+        Error( "m must be a positive integer" );
+    fi;
+
+	# if L is a subset of B, then
+	# skip the last mth copy of L
+	# (it doesn't add anything new to the code )
+	if L in B and m > 1 then
+		m0 := m - 1;
+	else
+		m0 := m;
+	fi;
+
+	GL := ShallowCopy( GeneratorMat( L ) );
+	GB := ShallowCopy( GeneratorMat( B ) );
+	# the new generator matrix, fill with zeros first
+	NewG := List( [ 1 .. Dimension( L ) * m0 + Dimension( B ) ],
+				  x -> NullWord( WordLength( L ) * m ) );
+	# first m0 * Dimension(L) rows,
+	# form: [ GL 0  ... 0  ]
+	#       [ 0  GL ... 0  ]
+	#       [ ...........  ]
+	#       [ 0  0      GL ] (this row is omitted if L in B)
+	for i in [ 1 .. m0 ] do
+		# construct rows (i-1)*Dimension(L) till i*Dimension(L)-1
+		firstzeros := NullVector( ( i-1 ) * WordLength( L ), 
+									LeftActingDomain( L ) );
+		lastzeros := NullVector( ( m-i ) * WordLength( L ), 
+									LeftActingDomain( L ) );
+		for j in [ 1..Dimension( L ) ] do
+			NewG[ j + ( i-1 ) * Dimension( L ) ] :=
+			  Concatenation( firstzeros, GL[j], lastzeros );
+		od;
+	od;
+	# last row of new generator matrix
+	# [ GB GB GB GB ... GB ]
+	for i in [ 1..Dimension( B ) ] do
+		NewG[ i + m * Dimension( L ) ] :=
+		  Concatenation( List( [ 1..m ], x->GB[ i ] ) );
+	od;
+	newcode := GeneratorMatCode( NewG,
+					   Concatenation( String( m ),
+							   "-fold extended direct sum code" ),
+					   LeftActingDomain( L ) );
+	newcode!.history := MergeHistories( History( L ), History( B ) );
+
+	return newcode;
+end);
+
+InstallMethod(ExtendedDirectSumCode, "method for unrestricted codes, m", 
+	true, [IsCode, IsCode, IsInt], 0, 
+function(L, B, m) 
+	local SumCode, i, j, el, newcode, lastels;
+
+    if WordLength( L ) <> WordLength( B ) then
+		Error( "L and B must have the same length" );
+	elif m < 1 then
+		Error( "m must be a positive integer" );
+	elif IsLinearCode(L) and IsLinearCode( B ) then 
+		# this is much faster because it only uses the generator matrices 
+		return ExtendedDirectSumCode(L, B, m); 
+	fi; 
+
+	SumCode := L;
+	for i in [ 2 .. m ] do
+		SumCode := DirectSumCode( SumCode, L );
+	od;
+	lastels := [];
+	for i in VectorCodeword( AsSSortedList( B ) ) do
+		el := ShallowCopy( i );
+		for j in [ 2 .. m ] do
+			el := Concatenation( el, i );
+		od;
+		Append( lastels, el );
+	od;
+	newcode := AddedElementsCode( SumCode, lastels );
+	newcode!.history := MergeHistories( History( L ), History( B ) );
+	newcode!.name := Concatenation( String( m ),
+	  "-fold extended direct sum code" );
+
+	return newcode;
+end);
+
+
+########################################################################
+##
+#F  PiecewiseConstantCode( <partition>, <constraints> [, <field> ] )
+##
+
+InstallGlobalFunction(PiecewiseConstantCode, 
+function ( arg )
+    
+    local n, partition, constraints, field, i, j, 
+          elements, constr, position, newels, addels, 
+          ConstantWeightElements, el, sumels;
+    
+    # check the arguments
+    if Length( arg ) < 2 or Length( arg ) > 3 then
+        Error( "usage: PiecewiseConstantCode( <partition>, ",
+               "<constraints> [, <field> ] )" );
+    fi;
+    if Length( arg ) = 3 then
+        field := arg[ 3 ];
+        if not IsField( field ) then
+            if not IsInt( field ) then
+                Error( "PiecewiseConstantCode: <field> must be a field" );
+            else
+                field := GF( field );
+            fi;
+        fi;
+    else
+        field := GF( 2 );
+    fi;
+    
+    # find out the partition
+    partition := arg[ 1 ];
+    # allow for an integer as "partition"
+    if not IsList( partition ) then
+        partition := [ partition ];
+    fi;
+    for i in partition do
+        if not IsInt( i ) then
+            Error( "PiecewiseConstantCode: <partition> must be ",
+                   "a list of integers" );
+        fi;
+        if i <= 0 then
+            Error( "PiecewiseConstantCode: <partition> must be ",
+                   "a list of positive integers" );
+        fi;
+    od;
+    n := Sum( partition );
+    
+    # check the constraints
+    constraints := arg[ 2 ];
+    if not IsList( constraints ) then
+        constraints := [ constraints ];
+    fi;
+    for i in [ 1 .. Length( constraints ) ] do
+        if not IsList( constraints[ i ] ) then 
+            constraints[ i ]:= [ constraints[ i ] ];
+        fi;
+        if Length( constraints[ i ] ) <> Length( partition ) then
+            Error( "PiecewiseConstantCode: the length of constraint ", i,
+                   " is not equal to the length of <partition>" );
+        fi;
+        for j in [ 1 .. Length( constraints[ i ] ) ] do
+            if not IsInt( constraints[ i ][ j ] ) then
+                Error( "PiecewiseConstantCode: entry ", j,
+                       " of constraint ", i,
+                       " is not an integer" );
+            fi;
+            if constraints[ i ][ j ] < 0 
+               or constraints[ i ][ j ] > partition[ j ] then
+                Error( "PiecewiseConstantCode: entry ", j,
+                       " of constraint ", i,
+                       " must >= 0 and <= ", partition[ j ] );
+            fi;
+        od;
+    od;
+    
+    ConstantWeightElements := function( place, weight )
+        local els, i, numberofzeros, zerovector;
+        if weight = 0 then
+            return [ NullVector( n, field ) ];
+        fi;
+        els := ShallowCopy( VectorCodeword( AsSSortedList( 
+                       ConstantWeightSubcode( WholeSpaceCode( 
+                               partition[ place ], field ), weight ) ) ) );
+        # add zeros to the front
+        if place <> 1 then
+            numberofzeros := Sum( partition{ [ 1 .. place - 1 ] } );
+            zerovector := NullVector( numberofzeros, field );
+            for i in [ 1 .. Length( els ) ] do
+                els[ i ] := Flat( [ zerovector, els[ i ] ] );
+            od;
+        fi;
+        if place <> Length( partition ) then
+            numberofzeros := Sum( partition{ [ place + 1 
+                                     .. Length( partition ) ] } );
+            zerovector := NullVector( numberofzeros, field );
+            for i in [ 1 .. Length( els ) ] do
+                els[ i ] := Flat( [ els[ i ], zerovector ] );
+            od;
+        fi;
+        return els;
+    end;
+    
+    # make the new code
+    elements := [ ];
+    for constr in constraints do
+        newels := [ ];
+        for i in [ 1 .. Length( partition ) ] do
+            addels := ConstantWeightElements( i, constr[ i ] );
+            if Length( newels ) > 0 then
+                sumels := [ ];
+                for el in addels do
+                    Append( sumels, List( newels, x -> x + el ) );
+                od;
+                newels := ShallowCopy( sumels );
+            else
+                newels := ShallowCopy( addels );
+            fi;
+        od;
+        Append( elements, newels );
+    od;
+    return ElementsCode( elements, "piecewise constant code", field );
+end);
+
+
+########################################################################
+##
+#F  GabidulinCode( );
+##
+
+##  Use of the Boolean check is an unadvertised feature.  
+##  It gives the EnlargedGabidulinCode a back door past the 
+##  restriction on m.  Unfortunately, the cleanest way I 
+##  could think of to translate it to GAP4 is to have  
+##  this as the "official" method and have an Other  
+##  method that adds a boolean true to the advertised syntax. 
+
+InstallMethod(GabidulinCode, "method for internal use!", true, 
+	[IsInt, IsFFE, IsFFE, IsBool], 0, 
+function(m, w1, w2, check) 
+    
+    local checkmat, nmat, els, i, j, w3,
+          fieldels, binels, newels, binnewels, size, one, newcode;
+    
+    if check <> false and m < 4 then
+        Error( "GabidulinCode: <m> must be at least 4" );
+    fi;
+    
+    w3 := w1 + w2;
+            
+    checkmat := MutableNullMat( 5 * 2^(m-2) - 1, 2 * m - 1, GF( 2 ) );
+    
+    size := 2^(m-2);
+    
+    fieldels := SortedGaloisFieldElements( size );
+# similar to AsSSortedList( field ) - same in prime field case - but
+# returns *all* elements in the form Z(size)^i, rather than 
+# simplified to Z(p^d)^j if i divides size-1
+    binels := BinaryRepresentation( fieldels, m-2 );
+# requires that all elements are in the form Z(size)^i
+    one := Z(2)^0;
+    
+    # make matrix N
+    
+    for i in [ 1 .. size - 1 ] do
+        for j in [ 1 .. m-2 ] do
+            checkmat[ i ][ j + 1 ] := binels[ i + 1 ][ j ];
+        od;
+    od;
+    
+    # make matrix D
+    
+    for i in [ 1 .. size ] do
+        checkmat[ size - 1 + i ][ 1 ] := one;
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ size - 1 + i ][ j + 1 ] := binels[ i ][ j ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for j in [ 2 .. size ] do
+            newels[ j ] := w1/fieldels[ j ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-2 );
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ];
+        od;
+    od;
+    
+    # make matrix Q
+    
+    for i in [ 1 .. size ] do
+        checkmat[ 2 * size - 1 + i ][ 1 ] := one;
+        checkmat[ 2 * size - 1 + i ][ 2 * m - 1 ] := one;
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ 2 * size - 1 + i ][ j + 1 ] := binels[ i ][ j ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for j in [ 2 .. size ] do
+            newels[ j ] := w2/fieldels[ j ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-2 );
+        
+        for j in [ 1 .. m - 2 ] do 
+            checkmat[ 2 * size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ];
+        od;
+    od;
+    
+    # make matrix M
+    
+    for i in [ 1 .. size ] do
+        checkmat[ 3 * size - 1 + i ][ 1 ] := one;
+        checkmat[ 3 * size - 1 + i ][ 2 * m - 2 ] := one;
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ 3 * size - 1 + i ][ j + 1 ] := binels[ i ][ j ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for j in [ 2 .. size ] do
+            newels[ j ] := w3/fieldels[ j ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-2 );
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ 3 * size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ];
+        od;
+    od;
+    
+    # make matrix G
+    
+    for i in [ 1 .. size ] do
+        checkmat[ 4 * size - 1 + i ][ 1 ] := one;
+        checkmat[ 4 * size - 1 + i ][ 2 * m - 2 ] := one;        
+        checkmat[ 4 * size - 1 + i ][ 2 * m - 1 ] := one;    
+        
+        for j in [ 1 .. m - 2 ] do
+            checkmat[ 4 * size - 1 + i ][ m - 1 + j ] := binels[ i ][ j ];
+        od;
+    od;
+    
+    checkmat := TransposedMat( checkmat );
+    
+    newcode := CheckMatCode( checkmat, 
+                       Concatenation( "Gabidulin code (m=",String(m),")" ),
+                       GF(2) );
+    
+#    newcode.wordLength := 5 * size - 1;
+#    newcode.dimension := 2 * m - 1;
+    newcode!.lowerBoundMinimumDistance := 3;
+    newcode!.upperBoundMinimumDistance := 3;
+    SetMinimumDistance(newcode, 3); 
+	newcode!.boundsCoveringRadius := [ 2 ];
+    SetCoveringRadius(newcode, 2); 
+
+    return( newcode );    
+end);
+
+## This is the advertised syntax, see note above. 
+InstallOtherMethod(GabidulinCode, "m, w1, w2", true, 
+	[IsInt, IsFFE, IsFFE], 0, 
+function(m, w1, w2) 
+	return GabidulinCode(m, w1, w2, true); 
+end); 
+
+
+########################################################################
+##
+#F  EnlargedGabidulinCode( );
+##
+
+InstallMethod(EnlargedGabidulinCode, "m, w1, w2, e", true, 
+	[IsInt, IsFFE, IsFFE, IsFFE], 0, 
+function(m, w1, w2, el) 
+    
+    local checkmat, nmat, els, i, j, k, w3,
+          fieldels, binels, newels, binnewels, 
+		  size, one, newcode, bmat, binel;
+    
+    if m < 4 then
+        Error( "EnlargedGabidulinCode: <m> must be at least 4" );
+    fi;
+    
+    w3 := w1 + w2;
+            
+    checkmat := MutableNullMat( 7 * 2^(m-2) - 2, 2 * m, GF( 2 ) );
+    
+    size := 2^(m-1);
+    
+    fieldels := SortedGaloisFieldElements( GF( size ) );
+    binels := BinaryRepresentation( fieldels, m-1 );
+    
+    one := Z(2)^0;
+    
+    # make matrix Z
+    
+    bmat := TransposedMat( ShallowCopy( CheckMat( 
+                    GabidulinCode( m, w1, w2, false ) ) ) );
+
+    for i in [ 1 .. Length( bmat ) - 1 ] do
+        k := i;
+        if k > 2^(m-2) - 1 then
+            k := k + 1;
+        fi;
+        for j in [ 1 .. Length( bmat[ 1 ] ) ] do
+            checkmat[ i ][ j + 1 ] := bmat[ k ][ j ];
+        od;
+    od;
+    
+    # make matrix Y
+    
+    binel := BinaryRepresentation( el, m );
+    
+    for i in [ 1 .. size ] do
+        checkmat[ Length( bmat ) - 1 + i ][ 1 ] := one;
+        for j in [ 1 .. m-1 ] do
+            checkmat[ Length( bmat ) - 1 + i ][ j + 1 ] := binels[ i ][ j ];
+        od;
+        for j in [ 1 .. m ] do
+            checkmat[ Length( bmat ) - 1 + i ][ m + j ] := binel[ j ];
+        od;
+    od;
+        
+    checkmat := TransposedMat( checkmat );
+    newcode := CheckMatCode( checkmat, 
+                       Concatenation( "enlarged Gabidulin code (m="
+                               ,String(m),")" ),
+                       GF(2) );
+
+    newcode!.lowerBoundMinimumDistance := 3;
+    newcode!.upperBoundMinimumDistance := 3;
+    SetMinimumDistance(newcode, 3); 
+	newcode!.boundsCoveringRadius := [ 2 ];
+    SetCoveringRadius(newcode, 2); 
+
+    return( newcode );    
+end);
+
+
+########################################################################
+##
+#F  DavydovCode( );
+##
+
+InstallMethod(DavydovCode, "redundancy, v, ei, ej", true, 
+	[IsInt, IsInt, IsFFE, IsFFE], 0, 
+function(r, v, i, j) 
+    
+    local checkmat, binel2, fieldels, binels, 
+          k, l, field1el, field2el, binel1, newcode;
+    
+    if r < 4 then
+        Error( "DavydovCode: <m> must be at least 5" );
+    fi;
+    
+    # 0 < i < 2^v ??
+    # 0 < j < 2^(r-v) ??
+
+    checkmat := MutableNullMat( 2^v + 2^(r-v) - 3, r, GF( 2 ) );
+    
+    field1el := i;
+    binel1 := BinaryRepresentation( field1el, v );
+    field2el := j;
+    binel2 := BinaryRepresentation( field2el, r - v );
+
+    
+    # make matrix K
+    
+    fieldels := SortedGaloisFieldElements( GF( 2^v ) ); # remove 0
+    SubtractSet( fieldels, [ fieldels[ 1 ], i ] );
+    binels := BinaryRepresentation( fieldels, v );
+    
+    
+    for k in [ 1 .. 2^v - 2 ] do
+        for l in [ 1 .. v ] do
+            checkmat[ k ][ l ] := binels[ k ][ l ];
+        od;
+        for l in [ 1 .. r-v ] do
+            checkmat[ k ][ v + l ] := binel2[ l ];
+        od;
+    od;
+    
+    # make matrix (column) A
+    
+    for l in [ 1 .. v ] do
+        checkmat[ 2^v - 1 ][ l ] := binel1[ l ];
+    od;
+    for l in [ 1 .. r-v ] do
+        checkmat[ 2^v - 1 ][ v + l ] := binel2[ l ];
+    od;
+    
+    # make matrix S
+    
+    fieldels := SortedGaloisFieldElements( GF( 2^(r-v) ) );
+    SubtractSet( fieldels, [ fieldels[ 1 ], j ] );
+    binels := BinaryRepresentation( fieldels, r - v );
+    
+    for k in [ 1 .. 2^(r-v) - 2 ] do
+        for l in [ 1 .. v ] do
+            checkmat[ 2^v - 1 + k ][ l ] := binel1[ l ];
+        od;
+        for l in [ 1 .. r-v ] do
+            checkmat[ 2^v - 1 + k ][ v + l ] := binels[ k ][ l ];
+        od;
+    od;
+    
+    
+    checkmat := TransposedMat( checkmat );
+    
+    newcode := CheckMatCode( checkmat, 
+                       Concatenation( "Davydov code (r=",String(r),
+                               ", v=", String(v), ")" ),
+                       GF(2) );
+    
+#    newcode.wordLength := 5 * size - 1;
+#    newcode.dimension := newcode.wordLength - (2 * m);
+    newcode!.lowerBoundMinimumDistance := 4;
+    newcode!.upperBoundMinimumDistance := 4;
+    SetMinimumDistance(newcode, 4); 
+	newcode!.boundsCoveringRadius := [ 2 ];
+    SetCoveringRadius(newcode, 2); 
+
+    return( newcode );    
+end);
+
+
+########################################################################
+##
+#F  TombakCode( );
+##
+
+InstallGlobalFunction(TombakCode, 
+function ( arg )
+    
+    local checkmat, one, m, i, beta, gamma, delta, w1, w2, w3, newcode,
+          k, size, fieldels, binels, binel, l, sortlist, sortedlist, 
+          newels, binnewels, theta, newsize, betabin, gammbin, gammabin, 
+		  deltabin, w1bin, w2bin, w3bin;
+    
+    m := arg[ 1 ];
+    if arg[ Length( arg ) ] <> false and m < 5 then
+        Error( "TombakCode: <m> must be at least 5" );
+    fi;
+    
+    beta := arg[ 3 ];
+    gamma := arg[ 4 ];
+    delta := beta + gamma;
+    
+    betabin := BinaryRepresentation( beta, m-1 );
+    gammabin := BinaryRepresentation( gamma, m-1 );
+    deltabin := betabin + gammabin;
+    
+    w1 := arg[ 5 ];
+    w2 := arg[ 6 ];
+    w3 := w1 + w2;
+    
+    w1bin := BinaryRepresentation( w1, m-3 );
+    w2bin := BinaryRepresentation( w2, m-3 );
+    w3bin := w1bin + w2bin;
+    
+    i := arg[ 2 ];
+
+    checkmat := MutableNullMat( 15 * 2^(m-3) - 3, 2*m, GF( 2 ) );
+    
+    one := Z(2)^0;
+           
+    # make matrix C
+    
+    size := 2^(m-3);
+    
+    fieldels := SortedGaloisFieldElements( size );
+    binels := BinaryRepresentation( fieldels, m-3 );
+    
+    binel := betabin;
+    
+    for k in [ 1 .. size - 1 ] do
+        for l in [ 1 .. m - 3 ] do
+            checkmat[ k ][ 3 + l ] := binels[ k + 1 ][ l ];
+        od;
+        for l in [ 1 .. m - 1 ] do
+            checkmat[ k ][ m + l ] := binel[ l ];
+        od;
+        checkmat[ k ][ 2 * m ] := one;
+    od;
+    
+    # make matrix V
+    
+    binel := gammabin;
+    
+    for k in [ 1 .. 2^(m-3) ] do
+        checkmat[ size - 1 + k ][ 2 ] := one;
+        for l in [ 1 .. m - 3 ] do
+            checkmat[ size - 1 + k ][ 3 + l ] := binels[ k ][ l ];
+        od;
+        for l in [ 1 .. m - 1 ] do
+            checkmat[ size - 1 + k ][ m + l ] := binel[ l ];
+        od;
+        checkmat[ size - 1 + k ][ 2 * m ] := one;
+    od;
+    
+    # make matrix X
+    
+    binel := deltabin;
+    
+    for k in [ 1 .. size ] do
+        checkmat[ 2 * size - 1 + k ][ 2 ] := one;
+        checkmat[ 2 * size - 1 + k ][ 3 ] := one;
+        for l in [ 1 .. m - 3 ] do
+            checkmat[ 2 * size - 1 + k ][ 3 + l ] := binels[ k ][ l ];
+        od;
+        for l in [ 1 .. m - 1 ] do
+            checkmat[ 2 * size - 1 + k ][ m + l ] := binel[ l ];
+        od;
+    od;
+    
+    # make sub-matrix Theta
+    theta := MutableNullMat( 4*size - 1, 2 * (m-3) + 2, GF( 2 ) );
+    
+    for k in [ 1 .. size - 1 ] do
+        for l in [ 1 .. m-3 ] do
+            theta[ k ][ l ] := binels[ k + 1 ][ l ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for l in [ 2 .. size ] do 
+            newels[ l ] := w1/fieldels[ l ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-3 );
+        
+        for l in [ 1 .. m-3 ] do
+            theta[ k ][ m-3 + l ] := binnewels[ k + 1 ][ l ];
+        od;
+    od;
+    
+    for k in [ 1 .. size ] do
+        for l in [ 1 .. m-3 ] do
+            theta[ size - 1 + k ][ l ] := binels[ k ][ l ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for l in [ 2 .. size ] do
+            newels[ l ] := w2/fieldels[ l ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-3 );
+        
+        for l in [ 1 .. m-3 ] do
+            theta[ size - 1 + k ][ m-3 + l ] := binnewels[ k ][ l ];
+        od;
+        theta[ size - 1 + k ][ 2*(m-3) + 2 ] := one;
+    od;
+    
+    for k in [ 1 .. size ] do
+        for l in [ 1 .. m-3 ] do
+            theta[ 2 * size - 1 + k ][ l ] := binels[ k ][ l ];
+        od;
+        
+        newels := ShallowCopy( fieldels );
+        for l in [ 2 .. size ] do
+            newels[ l ] := w3/fieldels[ l ];
+        od;
+        binnewels := BinaryRepresentation( newels, m-3 );
+        
+        for l in [ 1 .. m-3 ] do
+            theta[ 2 * size - 1 + k ][ m-3 + l ] := binnewels[ k ][ l ];
+        od;
+        theta[ 2 * size - 1 + k ][ 2*(m-3) + 1 ] := one;
+    od;
+    
+    for k in [ 1 .. size ] do
+        for l in [ 1 .. m-3 ] do
+            theta[ 3*size - 1 + k ][ m-3 + l ] := binels[ k ][ l ];
+        od;
+        
+        theta[ 3 * size - 1 + k ][ 2*(m-3) + 1 ] := one;
+        theta[ 3 * size - 1 + k ][ 2*(m-3) + 2 ] := one;
+    od;
+    
+    # make matrix Phi
+    
+    for k in [ 1 .. 4*size - 1 ] do
+        checkmat[ 3*size - 1 + k ][ 3 ] := one;
+        for l in [ 1 .. 2*m - 4 ] do
+            checkmat[ 3*size - 1 + k ][ 3 + l ] := theta[ k ][ l ];
+        od;
+    od;
+    
+    # make matrix Lambda
+    
+    binel := betabin;
+    
+    for k in [ 1 .. 4*size - 1 ] do
+        checkmat[ 7 * size - 2 + k ][ 3 ] := one;
+        for l in [ 1 .. m - 3 ] do
+            checkmat[ 7 * size - 2 + k ][ 3 + l ] := theta[ k ][ l ];
+        od;
+        for l in [ 1 .. m - 1 ] do 
+			#changed index to m + l from m-1+3+l to keep length correct
+            checkmat[ 7 * size - 2 + k ][ m + l ] := 
+              theta[ k ][ m-3 + l ] + binel[ l ];
+        od;
+        checkmat[ 7 * size - 2 + k ][ 2*m ] := one;
+    od;
+    
+    # make matrix Y
+    
+    newsize := 2^(m-1);
+    fieldels := SortedGaloisFieldElements( newsize );
+    binels := BinaryRepresentation( fieldels, m-1 );
+    
+    binel := BinaryRepresentation( i, m );
+    
+    for k in [ 1 .. newsize ] do
+        checkmat[ 11*size - 3 + k ][ 1 ] := one;
+        for l in [ 1 .. m-1 ] do
+            checkmat[ 11*size - 3 + k ][ 1 + l ] := binels[ k ][ l ];
+        od;
+        for l in [ 1 .. m ] do
+            checkmat[ 11*size - 3 + k ][ m + l ] := binel[ l ];
+        od;
+    od;
+   
+    checkmat := TransposedMat( checkmat );
+    
+    newcode := CheckMatCode( checkmat, 
+                       Concatenation( "Tombak code (m=",String(m),")" ),
+                       GF(2) );
+    
+#    newcode.wordLength := 5 * size - 1;
+#    newcode.dimension := newcode.wordLength - (2 * m);
+    newcode!.lowerBoundMinimumDistance := 4;
+    newcode!.upperBoundMinimumDistance := 4;
+    SetMinimumDistance(newcode, 4); 
+	newcode!.boundsCoveringRadius := [ 2 ];
+   	SetCoveringRadius(newcode, 2); 
+
+    return( newcode );    
+end);
+
+
+########################################################################
+##
+#F  EnlargedTombakCode( );
+##
+
+# Must be a GlobalFunctton because GAP doesn't support methods with 7 
+# arguments. 
+InstallGlobalFunction(EnlargedTombakCode, 
+function(m, i, beta, gamma, w1, w2, u) 
+    
+	local checkmat, fieldels, binels, size, one, 
+		  newcode, bmat, binel, k, l; 
+    
+    if m < 6 then
+        Error( "EnlargedTombakCode: <m> must be at least 6" );
+    fi;
+    
+    checkmat := MutableNullMat( 23 * 2^(m-4) - 3, 2 * m - 1, GF( 2 ) );
+    
+    size := 2^(m-1);
+    
+    fieldels := SortedGaloisFieldElements( GF( size ) );
+    binels := BinaryRepresentation( fieldels, m-1 );
+    
+    one := Z(2)^0;
+    
+    # make matrix pi
+    
+    bmat := TransposedMat( ShallowCopy( CheckMat( 
+                    TombakCode( m-1, i, beta, gamma, w1, w2, false ) ) ) );
+
+    for k in [ 1 .. Length( bmat ) ] do
+        for l in [ 1 .. Length( bmat[ 1 ] ) ] do
+            checkmat[ k ][ l + 1 ] := bmat[ k ][ l ];
+        od;
+    od;
+    
+    # make matrix J
+    
+    binel := BinaryRepresentation( u, m-1 );
+    
+    for k in [ 1 .. size ] do
+        checkmat[ Length( bmat ) + k ][ 1 ] := one;
+        for l in [ 1 .. m-1 ] do
+            checkmat[ Length( bmat ) + k ][ 1 + l ] := binel[ l ];
+        od;
+        for l in [ 1 .. m-1 ] do
+            checkmat[ Length( bmat ) + k ][ m + l ] := binels[ k ][ l ];
+        od;
+    od;
+        
+    checkmat := TransposedMat( checkmat );
+    
+    newcode := CheckMatCode( checkmat, 
+                       Concatenation( "enlarged Tombak code (m="
+                               ,String(m),")" ),
+                       GF(2) );
+    
+#    newcode.wordLength := 5 * size - 1;
+#    newcode.dimension := newcode.wordLength - (2 * m);
+    newcode!.lowerBoundMinimumDistance := 4;
+    newcode!.upperBoundMinimumDistance := 4;
+    SetMinimumDistance(newcode, 4); 
+	newcode!.boundsCoveringRadius := [ 2 ];
+    SetCoveringRadius(newcode, 2); 
+
+    return( newcode );    
+end);
+        
diff --git a/lib/codefun.gd b/lib/codefun.gd
new file mode 100644
index 0000000..680148d
--- /dev/null
+++ b/lib/codefun.gd
@@ -0,0 +1,38 @@
+#############################################################################
+##
+#A  codefun.gd               GUAVA                              Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains non-dispatched functions to get info of codes
+##
+#H  @(#)$Id: codefun.gd,v 1.3 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codefun_gd") :=
+    "@(#)$Id: codefun.gd,v 1.3 2003/02/12 03:49:16 gap Exp $";
+
+#############################################################################
+##
+#F  GuavaToLeon( <C>, <file> )  .  converts a code to a form Leon can read it
+##
+##  converts a code in Guava format to a library in a format that is readable
+##  by Leon's programs.
+##
+DeclareOperation("GuavaToLeon", [IsCode, IsString]); 
+
+#############################################################################
+##
+#F  WeightHistogram ( <C> [, <height>] )  . . . . .  plots the weights of <C>
+##
+##  The maximum length of the columns is <height>. Default height is one
+##  third of the screen size.
+##
+DeclareOperation("WeightHistogram", [IsCode, IsInt]); 
+
+#############################################################################
+##
+#F  MergeHistories( <C>, <S> [, <C1> .. <Cn> ] ) . . . . . .  list of strings
+##
+##
+DeclareGlobalFunction("MergeHistories"); 
+
diff --git a/lib/codefun.gi b/lib/codefun.gi
new file mode 100644
index 0000000..018adba
--- /dev/null
+++ b/lib/codefun.gi
@@ -0,0 +1,167 @@
+#############################################################################
+##
+#A  codefun.gi               GUAVA                              Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains non-dispatched functions to get info of codes
+##
+#H  @(#)$Id: codefun.gi,v 1.2 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codefun_gi") :=
+    "@(#)$Id: codefun.gi,v 1.2 2003/02/12 03:49:16 gap Exp $";
+
+#############################################################################
+##
+#F  GuavaToLeon( <C>, <file> )  .  converts a code to a form Leon can read it
+##
+##  converts a code in Guava format to a library in a format that is readable
+##  by Leon's programs.
+##
+
+InstallMethod(GuavaToLeon, "method for unrestricted code, filename", 
+	true, [IsCode, IsString], 0, 
+function (C, file)
+    local w, vector, G, coord, n, k, TheMat, IR1SAVE, IR2SAVE;
+    G := GeneratorMat(C);
+    k := Dimension(C);
+    n := WordLength(C);
+    PrintTo(file, "LIBRARY code;\n");
+    
+    # using "String" here causes problems when this function
+    # is run before the string library is loaded *and* InfoRead1
+    # and/or InfoRead2 is set to "Print".
+
+	##LR - is this still needed? 
+    # ugly hack: temporarily disable InfoRead1 and InfoRead2
+    
+    IR1SAVE := InfoRead1; InfoRead1 := Ignore;
+    IR2SAVE := InfoRead2; InfoRead2 := Ignore;
+    
+    AppendTo(file,"code=seq(",String(Size(LeftActingDomain(C))),",",String(k),
+            ",",String(n),",seq(\n");
+    
+    InfoRead1 := IR1SAVE;
+    InfoRead2 := IR2SAVE;
+    
+    # end of ugly hack.
+    
+    for vector in [1..k] do
+        for coord in [1..n-1] do
+            AppendTo(file,IntFFE(G[vector][coord]),",");
+        od;
+        AppendTo(file, IntFFE(G[vector][n]));
+        if vector < k then
+            AppendTo(file,",\n");
+        fi;
+    od;
+    AppendTo(file, "\n));\nFINISH;");
+end);
+  
+  
+#############################################################################
+##
+#F  WeightHistogram ( <C> [, <height>] )  . . . . .  plots the weights of <C>
+##
+##  The maximum length of the columns is <height>. Default height is one
+##  third of the screen size.
+##
+InstallMethod(WeightHistogram, 
+	"method for unrestricted code and screen height", 
+	true, [IsCode, IsInt], 0, 
+function(C, height)
+    local wd, max, data, i, j, n, spaces, nr, Scr, char;
+    Scr := SizeScreen();
+    char := "*";
+    n := WordLength(C);
+    if n+2 >= Scr[1] then
+        Error("histogram does not fit on screen");
+    elif n+2 > Int(Scr[1] / 2) then
+        spaces := "";
+        nr := 0;
+    elif n+2 > Int(Scr[1] / 4) then
+        spaces := " ";
+        nr := 1;
+    else
+        spaces := "  ";
+        nr := 2;
+    fi;
+    wd := WeightDistribution(C);
+    max := Maximum(wd);
+    if max < height then
+        height := max;
+    fi;
+    data := List(wd, w -> Int(w/max*height));
+    Print(max);
+    for i in [0..n*(nr+1)-Length(String(max))] do
+        Print("-");
+    od;
+    Print("\n");
+    for i in height - [0..height-1] do
+        for j in data do
+            if j >= i then
+                Print(Concatenation(char,spaces));
+            else
+                Print(Concatenation(" ",spaces));
+            fi;
+        od;
+        Print("\n");
+    od;
+    for i in [0..n] do
+        if wd[i+1] = 0 then
+            Print("-");
+        else
+            Print("+");
+        fi;
+        for j in [2..nr+1] do
+            Print("-");
+        od;
+        #Print("-");
+    od;
+    Print("\n");
+    for i in [0..n] do
+        Print(i mod 10,spaces);
+    od;
+    Print("\n ",spaces);
+    for i in [1..n] do
+        if i mod 10 = 0 then
+            Print(Int(i / 10),spaces);
+        else
+            Print(" ",spaces);
+        fi;
+    od;
+    Print("\n");
+end);
+
+InstallOtherMethod(WeightHistogram, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	local Scr; 
+	Scr := SizeScreen(); 
+	WeightHistogram(C, Int(Scr[2]/3));  
+end); 
+
+
+#############################################################################
+##
+#F  MergeHistories( <C>, <S> [, <C1> .. <Cn> ] ) . . . . . .  list of strings
+##
+##
+
+InstallGlobalFunction(MergeHistories, 
+function(arg)  
+    local i, his, names;
+    if Length( arg ) > 1 then
+        names := "UVWXYZ";
+        his := [];
+        for i in [1..Length(arg)] do
+            Add(his, Concatenation( [ names[i] ], ": ", arg[i][1]) );
+            Append( his, List( arg[i]{[2..Length(arg[i])]}, line -> 
+                    Concatenation("   ", line ) ) );
+        od;
+        return his;
+    else
+        Error("usage: MergeHistories( <C1> , <C2> [, <C3> .. <Cn> ] )");
+    fi;
+end);
+
diff --git a/lib/codegen.gd b/lib/codegen.gd
new file mode 100644
index 0000000..964e903
--- /dev/null
+++ b/lib/codegen.gd
@@ -0,0 +1,407 @@
+#############################################################################
+##
+#A  codegen.gd              GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains info/functions for generating codes
+##
+#H  @(#)$Id: codegen.gd,v 1.3 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codegen_gd") :=
+    "@(#)$Id: codegen.gd,v 1.3 2003/02/12 03:49:16 gap Exp $";
+
+#############################################################################
+##
+#F  IsCode( <v> ) . . . . . . . . . . . . . . . . . . . . . .  code category
+##
+DeclareCategory("IsCode", IsListOrCollection);
+
+#############################################################################
+##
+#F  ElementsCode( <L> [, <name> ], <F> )  . . . . . . code from list of words
+##
+DeclareOperation("ElementsCode", [IsList,IsString,IsField]);
+
+#############################################################################
+##
+#F  RandomCode( <n>, <M> [, <F>] )  . . . . . . . .  random unrestricted code
+##
+DeclareOperation("RandomCode", [IsInt, IsInt, IsField]);
+
+#############################################################################
+##
+#F  HadamardCode( <H | n> [, <t>] ) . Hadamard code of <t>'th kind, order <n>
+##
+DeclareOperation("HadamardCode", [IsMatrix, IsInt]); 
+
+#############################################################################
+##
+#F  ConferenceCode( <n | M> ) . . . . . . . . . . code from conference matrix
+##
+DeclareOperation("ConferenceCode", [IsMatrix]); 
+
+#############################################################################
+##
+#F  MOLSCode( [ <n>, ] <q> )  . . . . . . . . . . . . . . . .  code from MOLS
+##
+##  MOLSCode([n, ] q) returns a (n, q^2, n-1) code over GF(q)
+##  by creating n-2 mutually orthogonal latin squares of size q.
+##  If n is omitted, a wordlength of 4 will be set.
+##  If there are no n-2 MOLS known, the code will return an error
+##
+DeclareOperation("MOLSCode", [IsInt, IsInt]);  
+
+#############################################################################
+##
+#F  QuadraticCosetCode( <Q> ) . . . . . . . . . .  coset of RM(1,m) in R(2,m)
+##
+##  QuadraticCosetCode(Q) returns a coset of the ReedMullerCode of
+##  order 1 (R(1,m)) in R(2,m) where m is the size of square matrix Q.
+##  Q is the upper triangular matrix that defines the quadratic part of
+##  the boolean functions that are in the coset.
+##
+#QuadraticCosetCode := function(arg)
+
+#############################################################################
+##
+#F  GeneratorMatCode( <G> [, <name> ], <F> )  . .  code from generator matrix
+##
+DeclareOperation("GeneratorMatCode", [IsMatrix, IsString, IsField]);  
+
+#############################################################################
+##
+#F  GeneratorMatCodeNC( <G> [, <name> ], <F> )  . .  code from generator matrix
+## 
+## same as GeneratorMatCode but does not compute upper + lower bounds
+##  for the minimum distance or covering radius
+DeclareOperation("GeneratorMatCodeNC", [IsMatrix, IsField]);  
+
+#############################################################################
+##
+#F  CheckMatCodeMutable( <H> [, <name> ], <F> )  . . . . . .  code from check matrix
+##
+DeclareOperation("CheckMatCodeMutable", [IsMatrix, IsString, IsField]); 
+
+#############################################################################
+##
+#F  CheckMatCode( <H> [, <name> ], <F> )  . . . . . .  code from check matrix
+##
+DeclareOperation("CheckMatCode", [IsMatrix, IsString, IsField]); 
+
+#############################################################################
+##
+#F  RandomLinearCode( <n>, <k> [, <F>] )  . . . . . . . .  random linear code
+##
+DeclareOperation("RandomLinearCode", [IsInt, IsInt, IsField]); 
+
+#############################################################################
+##
+#F  HammingCode( <r> [, <F>] )  . . . . . . . . . . . . . . . .  Hamming code
+##
+DeclareOperation("HammingCode", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  SimplexCode( <r>, <F> ) .  The SimplexCode is the Dual of the HammingCode
+##
+DeclareOperation("SimplexCode", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  ReedMullerCode( <r>, <k> )  . . . . . . . . . . . . . .  Reed-Muller code
+##
+##  ReedMullerCode(r, k) creates a binary Reed-Muller code of dimension k,
+##  order r; 0 <= r <= k
+##
+DeclareOperation("ReedMullerCode", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  LexiCode( <M | n>, <d>, <F> )  . . . . .  Greedy code with standard basis
+##
+DeclareOperation("LexiCode", [IsMatrix,IsInt,IsField]); 
+
+#############################################################################
+##
+#F  GreedyCode( <M>, <d> [, <F>] )  . . . . Greedy code from list of elements
+##
+DeclareOperation("GreedyCode", [IsMatrix,IsInt,IsField]);
+
+#############################################################################
+##
+#F  AlternantCode( <r>, <Y> [, <alpha>], <F> )  . . . . . . .  Alternant code
+##
+DeclareOperation("AlternantCode", [IsInt, IsList, IsList, IsField]);  
+
+#############################################################################
+##
+#F  GoppaCode( <G>, <L | n> ) . . . . . . . . . . . . . . . . . .  Goppa code
+##
+DeclareGlobalFunction("GoppaCode"); 
+
+#############################################################################
+##
+#F  CordaroWagnerCode( <n> )  . . . . . . . . . . . . . . Cordaro-Wagner code
+##
+DeclareOperation("CordaroWagnerCode", [IsInt]); 
+
+#############################################################################
+##
+#F  GeneralizedSrivastavaCode( <a>, <w>, <z> [, <t>] [, <F>] )  . . . . . .  
+##
+DeclareOperation("GeneralizedSrivastavaCode",[IsList, IsList, IsList, IsInt, IsField]); 
+
+#############################################################################
+##
+#F  SrivastavaCode( <a>, <w> [, <mu>] [, <F>] ) . . . . . . . Srivastava code
+##
+DeclareOperation("SrivastavaCode",[IsList, IsList, IsInt, IsField]);
+
+#############################################################################
+##
+#F  ExtendedBinaryGolayCode( )  . . . . . . . . .  extended binary Golay code
+##
+DeclareOperation("ExtendedBinaryGolayCode", []); 
+
+#############################################################################
+##
+#F  ExtendedTernaryGolayCode( ) . . . . . . . . . extended ternary Golay code
+##
+DeclareOperation("ExtendedTernaryGolayCode", []); 
+
+#############################################################################
+##
+#F  BestKnownLinearCode( <n>, <k> [, <F>] ) .  returns best known linear code
+#F  BestKnownLinearCode( <rec> )
+##
+DeclareOperation("BestKnownLinearCode", [IsRecord]); 
+
+#############################################################################
+##
+#F  GeneratorPolCode( <G>, <n> [, <name> ], <F> ) .  code from generator poly
+##
+DeclareOperation("GeneratorPolCode", 
+	[IsUnivariatePolynomial, IsInt, IsString, IsField]);  
+
+#############################################################################
+##
+#F  CheckPolCode( <H>, <n> [, <name> ], <F> ) . .  code from check polynomial
+##
+DeclareOperation("CheckPolCode", 
+	[IsUnivariatePolynomial, IsInt, IsString, IsField]);  
+
+#############################################################################
+##
+#F  RepetitionCode( <n> [, <F>] ) . . . . . . . repetition code of length <n>
+##
+DeclareOperation("RepetitionCode", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  WholeSpaceCode( <n> [, <F>] ) . . . . . . . . . . returns <F>^<n> as code
+##
+DeclareOperation("WholeSpaceCode", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  CyclicCodes( <n> )  . .  returns a list of all cyclic codes of length <n>
+##
+DeclareOperation("CyclicCodes", [IsInt,IsField]); 
+
+#############################################################################
+##
+#F  NrCyclicCodes( <n>, <F>)  . . .  number of cyclic codes of length <n>
+##
+DeclareOperation("NrCyclicCodes", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  BCHCode( <n> [, <b>], <delta> [, <F>] ) . . . . . . . . . . . .  BCH code
+##
+DeclareOperation("BCHCode", [IsInt, IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  ReedSolomonCode( <n>, <d> ) . . . . . . . . . . . . . . Reed-Solomon code
+##
+##  ReedSolomonCode (n, d) returns a primitive narrow sense BCH code with
+##  wordlength n, over alphabet q = n+1, designed distance d
+DeclareOperation("ReedSolomonCode", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  Extended ReedSolomonCode( <n>, <d> ) . . . . . Extended Reed-Solomon code
+##
+##  ExtendedReedSolomonCode (n, d) returns a Reed Solomon code extended by
+##  an overall parity-check symbol. Note that wordlength n = q, d is the
+##  designed distance.
+DeclareOperation("ExtendedReedSolomonCode", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  RootsCode( <n>, <list> )  . . . code constructed from roots of polynomial
+##
+##  RootsCode (n, rootlist) or RootsCode (n, <powerlist>, F) returns the
+##  code with generator polynomial equal to the least common multiplier of
+##  the minimal polynomials of the n'th roots of unity in the list.
+##  The code has wordlength n
+##
+DeclareOperation("RootsCode", [IsInt, IsList, IsField]); 
+
+#############################################################################
+##
+#F  QRCode( <n> [, <F>] ) . . . . . . . . . . . . . .  quadratic residue code
+##
+DeclareOperation("QRCode", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  QQRCode( <n> [, <F>] ) . . . . . . . . binary quasi-quadratic residue code
+##
+## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of 
+##  codes from group actions" preprint March 2003 (submitted to IEEE IT)
+##
+DeclareOperation("QQRCode", [IsInt]); 
+
+#############################################################################
+##
+#F  QQRCodeNC( <n> [, <F>] ) . . . . . . . . binary quasi-quadratic residue code
+##
+## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of 
+##  codes from group actions" preprint March 2003 (submitted to IEEE IT)
+## Uses GeneratorMatCodeNC
+##
+DeclareOperation("QQRCodeNC", [IsInt]); 
+
+#############################################################################
+##
+#F  NullCode( <n> [, <F>] ) . . . . . . . . . . .  code consiting only of <0>
+##
+DeclareOperation("NullCode", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  FireCode( <G>, <b> )  . . . . . . . . . . . . . . . . . . . . . Fire code
+##
+##  FireCode (G, b) constructs the Fire code that is capable of correcting any
+##  single error burst of length b or less.
+##  G is a primitive polynomial of degree m
+##
+DeclareOperation("FireCode", [IsUnivariatePolynomial, IsInt]); 
+
+#############################################################################
+##
+#F  BinaryGolayCode( )  . . . . . . . . . . . . . . . . . . binary Golay code
+##
+DeclareOperation("BinaryGolayCode", []); 
+
+#############################################################################
+##
+#F  TernaryGolayCode( ) . . . . . . . . . . . . . . . . .  ternary Golay code
+##
+DeclareOperation("TernaryGolayCode", []); 
+
+#############################################################################
+##
+#F  EvaluationCode( <P>, <L>, <R> )
+##
+##   P is a list of n points in F^r
+##   L is a list of rational functions in r variables
+##   EvaluationCode returns the image of the evaluation map f->[f(P1),...,f(Pn)],
+##   as f ranges over the vector space of functions spanned by L.
+##   The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where
+##   f is in L and P={P1,..,Pn}
+##
+DeclareOperation("EvaluationCode",[IsList, IsList, IsRing]);
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonCode( <P>, <k>, <R> )
+##
+##   P is a list of n points in F
+##   k is an integer
+##   GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)],
+##   as f ranges over the vector space of polynomials in 1 variable
+##   of degree < k in the ring R. 
+##   The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where
+##   f = x^j, j<k, and P={P1,..,Pn}
+##
+DeclareOperation("GeneralizedReedSolomonCode",[IsList, IsInt, IsRing]);
+
+#############################################################################
+##
+#F  OnePointAGCode( <crv>, <pts>, <m>, <R> )
+##
+## R = F[x,y] is a polynomial ring over a finite field F
+## crv is a polynomial in R representing a plane curve
+## pts is a list of points on the curve
+## Computes the AG codes associated to the RR space
+## L(m*infinity) using Proposition VI.4.1 in Stichtenoth
+##
+##
+DeclareOperation("OnePointAGCode",[IsPolynomial,IsList, IsInt, IsRing]);
+
+
+#############################################################################
+##
+#F  FerreroDesignCode( <P>, <m> ) ... code from a Ferrero design
+##
+##
+#DeclareOperation("FerreroDesignCode",[IsList, IsInt]);
+
+#############################################################################
+##
+#F  QuasiCyclicCode( <G>, <s>, <F> ) . . . . . . . . . . . quasi cyclic code
+##
+##  QuasiCyclicCode ( <G>, <s>, <F> ) generates a rate 1/m quasi-cyclic
+##  codes. Note that <G> is a list of univariate polynomial and m is the
+##  cardinality of this list. The integer s is the size of the circulant
+##  and the associated field is <F>.
+##
+DeclareOperation("QuasiCyclicCode", [IsList, IsInt, IsField]);
+
+#####################################################################
+##
+#F CyclicMDSCode( <q>, <m>, <k> ) . . . . . . . . . cyclic MDS code
+##
+## Construct a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m)
+##
+DeclareOperation("CyclicMDSCode", [IsInt, IsInt, IsInt]);
+
+#######################################################################
+##
+#F FourNegacirculantSelfDualCode( <ax>, <bx>, <k> ) . . self-dual code
+##
+## Construct a [2*k, k, d] self-dual code over F using Harada's
+## construction. See:
+##
+##    1. M. Harada and T. Nishimura, "An extremal singly even self
+##       dual code of length 88", Advances in Mathematics of
+##       Communications, vol 1, no. 2, pp. 261--267, 2007
+##
+##    2. M. Harada, W. Holzmann, H. Kharaghani and M. Khorvash,
+##       "Extremal ternary self-dual codes constructed from
+##       negacirculant matrices", Graph and Combinatorics, vol 23,
+##       pp. 401--417, 2007
+##
+##    3. M. Harada, "An extremal doubly even self-dual code of
+##       length 112", preprint
+##
+## The generator matrix of the code has the following form:
+##
+##        -                   -
+##        |       :  A  :  B  |
+##    G = |   I   :-----:-----|
+##        |       : B^T : A^T |
+##        -                   -   
+##
+## Note that the matrices A, B, A^T and B^T are k/2 * k/2
+## negacirculant matrices.
+##
+DeclareOperation("FourNegacirculantSelfDualCode", 
+	[IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt]);
+
+DeclareOperation("FourNegacirculantSelfDualCodeNC", 
+	[IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt]);
+
diff --git a/lib/codegen.gi b/lib/codegen.gi
new file mode 100644
index 0000000..f2ba9db
--- /dev/null
+++ b/lib/codegen.gi
@@ -0,0 +1,2731 @@
+#############################################################################
+##
+#A  codegen.gi              GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##                                                          &David Joyner
+##
+##  This file contains info/functions for generating codes
+##
+#H  @(#)$Id: codegen.gi,v 1.99 2004/09/22 03:49:16 gap Exp $
+##
+##  BCHCode modified 9-2004
+##  added 11-2004:
+##  comment in GoppaCode 
+##  GeneralizedReedSolomonCode and record fields
+##      points, degree, ring, 
+##  (added SpecialDecoder field later: SetSpecialDecoder(C, GRSDecoder);)   
+##  EvaluationCode and record fields
+##      points, basis, ring, 
+##  OnePointAGCode and record fields
+##      points, curve, multiplicity, ring
+##  weighted option for GeneralizedReedSolomonCode and record fields
+##      points, degree, ring, weights
+##  minor bug in EvaluationCode fixed 11-26-2004
+##  GeneratorMatCodeNC added 12-18-2004 (after release of guava 2.0)
+##  added 5-10-2005:  SetSpecialDecoder(C, CyclicDecoder);  to 
+##    the cyclic codes which are not BCH codes
+##    in codegen.gi, line 2066, replace C.GeneratorMat 
+##      by C.EvaluationMat
+##  added 5-13-2005: QQRCode
+##  added 11-27-2005: CheckMatCodeMutable with *mutable* 
+##              generator and check matrices
+##  added 1-10-2006: QQRCodeNC  Greg Coy and David Joyner 
+##  added 1-2006: FerreroDesignCode, written with Peter Mayr
+##  added 12-2007 (CJ): ExtendedReedSolomonCode, QuasiCyclicCode,
+##    CyclicMDSCode, FourNegacirculantSelfDualCode functions.
+##
+Revision.("guava/lib/codegen_gi") :=
+    "@(#)$Id: codegen.gi,v 1.99 2004/09/22 03:49:16 gap Exp $";
+
+DeclareRepresentation( "IsCodeDefaultRep", 
+               IsAttributeStoringRep and IsComponentObjectRep and IsCode,
+               ["name", "history", "lowerBoundMinimumDistance",
+                "upperBoundMinimumDistance", "boundsCoveringRadius"]);
+
+DeclareHandlingByNiceBasis( "IsLinearCodeRep", "for linear codes" );
+
+InstallTrueMethod( IsCodeDefaultRep, IsLinearCodeRep );
+InstallTrueMethod( IsLinearCode, IsLinearCodeRep );
+
+#T The following is of course a hack, as is much of the
+#T ``pretend as if you were a vector space'' stuff.
+#T (`IsLinearCode' changes harmless codes into vector spaces;
+#T `AsLinearCode' would be clean, but now it is too late ...)
+InstallTrueMethod( IsFreeLeftModule, IsLinearCodeRep );
+
+### functions to work with NiceBasis functionality for Linear Codes.  
+InstallHandlingByNiceBasis( "IsLinearCodeRep", rec(
+    detect:= function( R, gens, V, zero )
+      return IsCodewordCollection( V );
+      end,
+
+    NiceFreeLeftModuleInfo:= ReturnFalse,
+
+    NiceVector:= function( C, w ) 
+      return VectorCodeword( w );
+      end,
+
+    UglyVector:= function( C, v ) 
+      return Codeword( v, Length( v ), LeftActingDomain( C ) ); 
+    end ) );
+
+
+#############################################################################
+##
+#F  ElementsCode( <L> [, <name> ], <F> )  . . . . . . code from list of words
+##
+
+InstallMethod(ElementsCode, "list,name,Field", true, 
+	[IsList,IsString,IsField], 0, 
+function(L, name, F)
+	local test, C;
+	L := Codeword(L, F);
+	test := WordLength(L[1]);
+	if ForAny(L, i->WordLength(i) <> test) then 
+		Error("All elements must have the same length");
+	fi;
+	test := FamilyObj(L[1]);
+	if ForAny(L, i->FamilyObj(i) <> test) then 
+		Error ("All elements must have the same family");
+	fi;
+	L := Set(L);
+	C := Objectify(NewType(CollectionsFamily(test), IsCodeDefaultRep), rec());
+	SetLeftActingDomain(C, F);
+	SetAsSSortedList(C, L);
+	C!.name := name; 
+	return C;
+end);
+
+InstallOtherMethod(ElementsCode, "list,Field", true, [IsList, IsField], 0, 
+function(L,F)
+	return ElementsCode(L, "user defined unrestricted code", F);
+end);
+
+InstallOtherMethod(ElementsCode, "list,name,fieldsize", true, 
+	[IsList, IsString, IsInt], 0, 
+function(L, name, q)
+	return ElementsCode(L, name, GF(q)); 
+end);
+
+InstallOtherMethod(ElementsCode, "list,size of field", true, [IsList,IsInt], 0, 
+function(L, q)
+	return ElementsCode(L, "user defined unrestricted code", GF(q));
+end);
+
+##Create a linear code from a list of Codeword generators 
+LinearCodeByGenerators := function(F, gens)
+
+    local V;
+    V:= Objectify( NewType( FamilyObj( gens ),
+                            IsLeftModule and 
+			    IsLinearCodeRep ),
+                   rec() );
+    SetLeftActingDomain( V, F );
+    SetGeneratorsOfLeftModule( V, AsList( gens ) );
+	SetIsLinearCode(V, true); 
+	SetWordLength(V, WordLength(gens[1]));  
+	return V;
+
+end;
+
+
+#############################################################################
+##
+#F  RandomCode( <n>, <M> [, <F>] )  . . . . . . . .  random unrestricted code
+##
+InstallMethod(RandomCode, "wordlength,codesize,field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, M, F) 
+	local L;
+	if Size(F)^n < M then 
+		Error(Size(F),"^",n," < ",M); 
+	fi;
+	L := [];
+	while Length(L) < M do 
+		AddSet(L, List([1..n], i -> Random(F)));  
+	od;
+	return ElementsCode(L, "random unrestricted code", F); 
+end);
+
+InstallOtherMethod(RandomCode, "wordlength,codesize", true, [IsInt, IsInt], 0, 
+function(n, M) 
+	return RandomCode(n, M, GF(2));
+end);
+
+InstallOtherMethod(RandomCode, "wordlength,codesize,fieldsize", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, M, q)
+	return RandomCode(n, M, GF(q));
+end);
+
+
+#############################################################################
+##
+#F  HadamardCode( <H | n> [, <t>] ) . Hadamard code of <t>'th kind, order <n>
+## 
+
+InstallMethod(HadamardCode, "matrix, kind (int)", true, [IsMatrix, IsInt], 0, 
+function(H, t) 
+	local n, vec, C; 
+	n := Length(H); 
+	if H * TransposedMat(H) <> n * IdentityMat(n,n) then 
+		Error("The matrix is not a Hadamard matrix");
+	fi; 
+	H := (H-1)/(-2); 
+	if t = 1 then 
+		H := TransposedMat(TransposedMat(H){[2..n]});
+		C := ElementsCode(H, Concatenation("Hadamard code of order ",
+		                  String(n)), GF(2) );
+		C!.lowerBoundMinimumDistance := n/2;  
+		C!.upperBoundMinimumDistance := n/2;
+		vec := NullVector(n);
+		# this was ... := NullVector(n+1);
+		# but this seems to be wrong -- Eric Minkes
+		vec[1] := 1;
+	    vec[n/2+1] := Size(C) - 1; 
+		SetInnerDistribution(C, vec); 
+	elif t  = 2 then 
+	    H := ShallowCopy( TransposedMat(TransposedMat(H){[2..n]}) );
+	    Append(H, 1 - H);
+	    C := ElementsCode(H, Concatenation("Hadamard code of order ",
+					                      String(n)), GF(2) );
+		C!.lowerBoundMinimumDistance := n/2 - 1;  
+		C!.upperBoundMinimumDistance := n/2 - 1;
+		vec := NullVector(n);
+	    vec[1] := 1;
+	    vec[n] := 1;
+	    # this was ... [n+1]...
+	    # but this seems to be wrong -- Eric Minkes
+	    vec[n/2] := Size(C)/2 - 1;
+	    vec[n/2+1] := Size(C)/2 - 1;
+		SetInnerDistribution(C, vec); 
+	else
+        Append(H, 1 - H);
+        C := ElementsCode( H, Concatenation("Hadamard code of order ",
+		                       String(n)), GF(2) );
+        C!.lowerBoundMinimumDistance := n/2;
+		C!.upperBoundMinimumDistance := n/2;
+		vec := NullVector(n);
+		vec[1] := 1;
+		vec[n+1] := 1;
+		vec[n/2+1] := Size(C) - 2;
+		SetInnerDistribution(C, vec);  
+	fi;
+    return(C);
+end); 
+
+InstallOtherMethod(HadamardCode, "order, kind (int)", true, [IsInt, IsInt], 0, 
+function(n, t) 
+	return HadamardCode(HadamardMat(n), t);
+end); 
+
+InstallOtherMethod(HadamardCode, "matrix", true, [IsMatrix], 0, 
+function(H) 
+	return HadamardCode(H, 3);
+end); 
+
+InstallOtherMethod(HadamardCode, "order", true, [IsInt], 0, 
+function(n) 
+	return HadamardCode(HadamardMat(n), 3);
+end);
+
+InstallOtherMethod(HadamardCode, "matrix, kind (string)", true, 
+	[IsMatrix, IsString], 0, 
+function(H, t) 
+	if t in ["a", "A", "1"] then 
+		return HadamardCode(H, 1); 
+	elif t in ["b", "B", "2"] then 
+		return HadamardCode(H, 2); 
+	else 
+		return HadamardCode(H, 3); 
+	fi; 
+end); 
+
+InstallOtherMethod(HadamardCode, "order, kind (string)", true, 
+	[IsInt, IsString], 0, 
+function(n, t) 
+	if t in ["a", "A", "1"] then
+        return HadamardCode(HadamardMat(n), 1);
+	elif t in ["b", "B", "2"] then
+		return HadamardCode(HadamardMat(n), 2);
+	else
+		return HadamardCode(HadamardMat(n), 3);
+	fi;
+end); 
+
+#############################################################################
+##
+#F  ConferenceCode( <n | M> ) . . . . . . . . . . code from conference matrix
+##
+
+InstallMethod(ConferenceCode, "matrix", true, [IsMatrix], 0, 
+function(S)
+	local n, I, J, F, els, w, wd, C;   
+	n := Length(S);
+	if S*TransposedMat(S) <> (n-1)*IdentityMat(n) or
+	   TransposedMat(S) <> S then
+	   Error("argument must be a symmetric conference matrix");
+	fi;
+	# Normalize S by multiplying rows and columns:
+	for I in [2..n] do
+		if S[I][1] <> 1 then
+			for J in [1..n] do
+				S[I][J] := S[I][J] * -1;
+			od;
+		fi;
+	od;
+	for J in [2..n] do
+		if S[1][J] <> 1 then
+			for I in [1..n] do
+				S[I][J] := S[I][J] * -1;
+			od;
+		fi;
+	od;
+	# Strip first row and first column:
+	S := List([2..n], i-> S[i]{[2..n]});
+	n := n - 1;
+	
+	F := GF(2);
+	els := [NullWord(n, F)];
+        I := IdentityMat(n);
+	J := NullMat(n,n) + 1;
+	Append(els, Codeword(1/2 * (S+I+J), F));
+	Append(els, Codeword(1/2 * (-S+I+J), F));
+	Add( els, Codeword( List([1..n], x -> One(F) ), n, One(F) ) );
+	C := ElementsCode( els, "conference code", F);
+	w := Weight(AsSSortedList(C)[2]);
+	wd := List([1..n+1], x -> 0);
+	wd[1] := 1; wd[n+1] := 1;
+	wd[w+1] := Size(C) - 2;
+	SetWeightDistribution(C, wd);  
+	C!.lowerBoundMinimumDistance := (n-1)/2;
+	C!.upperBoundMinimumDistance := (n-1)/2;
+	return C;
+end);
+
+InstallOtherMethod(ConferenceCode, "integer", true, [IsInt], 0, 
+function(n) 
+	local LegendreSym, zero, QRes, E, I, S, F, els, J, w, wd, C;   
+
+	LegendreSym := function(i)
+		if i = zero then 
+			return 0;
+		elif i in QRes then 
+			return 1;
+		else
+			return -1; 
+		fi;
+	end;
+
+	if (not IsPrimePowerInt(n)) or (n mod 4 <> 1) then 
+		Error ("n must be a primepower and n mod 4 = 1");
+	fi;
+	E := AsSSortedList(GF(n));
+	zero := E[1];   
+	QRes := [];
+	for I in E do 
+		AddSet(QRes, I^2);
+	od;
+	S := List(E, i->List(E, j->LegendreSym(j-i)));
+
+	
+        F := GF(2);
+	els := [NullWord(n, F)];
+        I := IdentityMat(n);
+	J := NullMat(n,n) + 1;
+	Append(els, Codeword(1/2 * (S+I+J), F));
+	Append(els, Codeword(1/2 * (-S+I+J), F));
+	Add(   els, Codeword( List([1..n], x -> One(F) ), n, One(F) ) );
+	C := ElementsCode( els, "conference code", F);
+	w := Weight(AsSSortedList(C)[2]);
+	wd := List([1..n+1], x -> 0);
+	wd[1] := 1; wd[n+1] := 1;
+	wd[w+1] := Size(C) - 2;
+	SetWeightDistribution(C, wd);  
+	C!.lowerBoundMinimumDistance := (n-1)/2;
+	C!.upperBoundMinimumDistance := (n-1)/2;
+	return C;
+end);
+
+
+#############################################################################
+##
+#F  MOLSCode( [ <n>, ] <q> )  . . . . . . . . . . . . . . . .  code from MOLS
+##
+##  MOLSCode([n, ] q) returns a (n, q^2, n-1) code over GF(q)
+##  by creating n-2 mutually orthogonal latin squares of size q.
+##  If n is omitted, a wordlength of 4 will be set.
+##  If there are no n-2 MOLS known, the code will return an error
+##
+
+InstallMethod(MOLSCode, "wordlength,size of field", true, [IsInt, IsInt], 0, 
+function(n,q) 
+	local M, els, i, j, k, wd, C;  
+	M := MOLS(q, n-2); 
+	if M = false then 
+		Error("No ", n-2, " MOLS of order ", q, " are known"); 
+	else  
+		els := [];  
+		for i in [1..q] do  
+			for j in [1..q] do  
+				els[(i-1)*q+j] := [];
+				els[(i-1)*q+j][1] := i-1;  
+				els[(i-1)*q+j][2]:= j-1;  
+				for k in [3..n] do 
+					els[(i-1)*q+j][k]:= M[k-2][i][j]; 
+				od;
+			od;
+		od;
+		C := ElementsCode( els, Concatenation("code generated by ",
+	                     String(n-2), " MOLS of order ", String(q)), GF(q) );
+        C!.lowerBoundMinimumDistance := n - 1;  
+        C!.upperBoundMinimumDistance := n - 1;
+        wd := List( [1..n+1], x -> 0 );
+	    wd[1] := 1;
+        wd[n] := (q-1) * n;
+        wd[n+1] := (q-1) * (q + 1 - n);
+        SetWeightDistribution(C, wd);  
+		return C;
+    fi;
+end); 
+
+InstallOtherMethod(MOLSCode, "wordlength,field", true, [IsInt, IsField], 0, 
+function(n, F) 
+	return MOLSCode(n, Size(F)); 
+end); 
+
+InstallOtherMethod(MOLSCode, "fieldsize", true, [IsInt], 0, 
+function(q) 
+	return MOLSCode(4, q); 
+end); 
+
+InstallOtherMethod(MOLSCode, "field", true, [IsField], 0, 
+function(F) 
+	return MOLSCode(4, Size(F)); 
+end); 
+
+
+## Was commented out in gap 3.4.4 Guava version.    
+
+#############################################################################
+##
+#F  QuadraticCosetCode( <Q> ) . . . . . . . . . .  coset of RM(1,m) in R(2,m)
+##
+##  QuadraticCosetCode(Q) returns a coset of the ReedMullerCode of
+##  order 1 (R(1,m)) in R(2,m) where m is the size of square matrix Q.
+##  Q is the upper triangular matrix that defines the quadratic part of
+##  the boolean functions that are in the coset.
+##
+#QuadraticCosetCode := function(arg)
+#    local Q, m, V, R, RM1, k, f, C, h, wd;
+#    if Length(arg) = 1 and IsMat(arg[1]) then
+#        Q := arg[1];
+#    else
+#        Error("usage: QuadraticCosetCode( <mat> )");
+#    fi;
+#    m := Length(Q);
+#    V := Tuples(Elements(GF(2)), m);
+#    R := V*Q*TransposedMat(V);
+#    f := List([1..2^m], i->R[i][i]);
+#    RM1 := Concatenation(NullMat(1,2^m,GF(2))+GF(2).one, 
+#                   TransposedMat(Tuples(Elements(GF(2)), m)));
+#    k := Length(RM1);
+#    C := rec(
+#             isDomain := true,    
+#             isCode := true,     
+#             operations := CodeOps,             
+#             baseField := GF(2),  
+#             wordLength := 2^m,   
+#    elements := Codeword(List(Tuples(Elements(GF(2)), k) * RM1, t-> t+f)),
+#             lowerBoundMinimumDistance := 2^(m-1),
+#             upperBoundMinimumDistance := 2^(m-1)
+#            );
+#    h := RankMat(Q + TransposedMat(Q))/2;
+#    wd := NullMat(1, 2^m+1)[1];
+#    wd[2^(m-1) - 2^(m-h-1) + 1] := 2^(2*h);
+#    wd[2^(m-1) + 1] := 2^(m+1) - 2^(2*h + 1);
+#    wd[2^(m-1) + 2^(m-h-1) + 1] := 2^(2*h);
+#    C.weightDistribution := wd;   
+#    C.name := "quadratic coset code";   
+#    return C;
+#end;
+
+
+#############################################################################
+##
+#F  GeneratorMatCode( <G> [, <name> ], <F> )  . .  code from generator matrix
+##
+
+InstallMethod(GeneratorMatCode, "generator matrix, name, field", true, 
+	[IsMatrix, IsString, IsField], 0, 
+function(G, name, F)
+	local C;  
+	if (Length(G) = 0) or (Length(G[1]) = 0) then 
+		Error("Use NullCode to generate a code with dimension 0"); 
+	fi;
+	G:=G*One(F);
+	G := BaseMat(G); 
+	C := LinearCodeByGenerators(F, Codeword(G,F)); 
+	SetGeneratorMat(C, G); 
+	SetWordLength(C, Length(G[1])); 
+	C!.name := name; 
+	return C;
+end);
+
+InstallOtherMethod(GeneratorMatCode, "generator matrix, field", true, 
+	[IsMatrix, IsField], 0, 
+function(G, F) 
+	return GeneratorMatCode(G, "code defined by generator matrix", F); 
+end); 
+
+InstallOtherMethod(GeneratorMatCode, "generator matrix, name, size of field", 
+	true, [IsMatrix, IsString, IsInt], 0, 
+function(G, name, q) 
+	return GeneratorMatCode(G, name, GF(q)); 
+end);
+
+InstallOtherMethod(GeneratorMatCode, "generator matrix, size of field", true, 
+	[IsMatrix, IsInt], 0, 
+function(G, q) 
+	return GeneratorMatCode(G, "code defined by generator matrix", GF(q)); 
+end); 
+
+#############################################################################
+##
+#F  GeneratorMatCodeNC( <G> , <F> )  . .  code from generator matrix
+## 
+## same as GeneratorMatCode but does not compute upper + lower bounds
+##  for the minimum distance or covering radius
+##  
+
+InstallMethod(GeneratorMatCodeNC, "generator matrix, field", true, 
+	[IsMatrix, IsField], 0, 
+function(G, F) 
+	return GeneratorMatCode(G, "code defined by generator matrix, NC", F); 
+end); 
+
+
+
+#############################################################################
+##
+#F  CheckMatCodeMutable( <H> [, <name> ], <F> )  . . code from check matrix
+##                                               The generator matrix is mutable
+##
+
+InstallMethod(CheckMatCodeMutable, "check matrix, name, field", true, 
+	[IsMatrix, IsString, IsField], 0, 
+function(H, name, F) 
+	local G, H2, C, dimC;  
+	if (Length(H) = 0)  or (Length(H[1]) = 0) then 
+		Error("use WholeSpaceCode to generate a code with redundancy 0"); 
+	fi; 
+	H := VectorCodeword(Codeword(H, F)); 
+	H2 := BaseMat(H); 
+	if Length(H2) < Length(H) then 
+		H := H2; 
+	fi; 
+
+	# Get generator matrix from H 
+	if IsInStandardForm(H, false) then 
+		dimC := Length(H[1]) - Length(H); 
+		if dimC = 0 then 
+			G := []; 
+		else 
+			G := TransposedMat(Concatenation(IdentityMat( dimC, F ),  
+							List(-H, x->x{[1..dimC]}))); 
+		fi; 
+	else 
+		G := NullspaceMat(TransposedMat(H)); 
+	fi; 
+	if Length(G) = 0 then  # Call NullCode. Length(H=I) = n-k, in this case. 
+						   # Length(G) = k = 0 => n = Length(H).  
+		C := NullCode(Length(H), F); 
+		C!.name := name; 	
+		return C; 
+	fi; 
+
+	C := LinearCodeByGenerators(F,Codeword(G, F)); 
+	SetGeneratorMat(C, ShallowCopy(G)); 
+	SetCheckMat(C, ShallowCopy(H)); 
+	SetWordLength(C, Length(G[1])); 
+	C!.name := name; 
+	return C; 
+end); 
+
+InstallOtherMethod(CheckMatCodeMutable, "check matrix, field", 
+true, [IsMatrix, IsField], 0, 
+function(H, F) 
+	return CheckMatCode(H, "code defined by check matrix", F); 
+end); 
+
+InstallOtherMethod(CheckMatCodeMutable, "check matrix, name, size of field", true, [IsMatrix, IsString, IsInt], 0, 
+function(H, name, q) 
+	return CheckMatCode(H, name, GF(q)); 
+end);
+
+InstallOtherMethod(CheckMatCodeMutable, "check matrix, size of field", 
+true, [IsMatrix, IsInt], 0, 
+function(H, q) 
+	return CheckMatCodeMutable(H, "code defined by check matrix", GF(q)); 
+end); 
+
+
+
+#############################################################################
+##
+#F  CheckMatCode( <H> [, <name> ], <F> )  . . . . . .  code from check matrix
+##
+
+InstallMethod(CheckMatCode, "check matrix, name, field", true, 
+	[IsMatrix, IsString, IsField], 0, 
+function(H, name, F) 
+	local G, H2, C, dimC;  
+	if (Length(H) = 0)  or (Length(H[1]) = 0) then 
+		Error("use WholeSpaceCode to generate a code with redundancy 0"); 
+	fi; 
+	H := VectorCodeword(Codeword(H, F)); 
+	H2 := BaseMat(H); 
+	if Length(H2) < Length(H) then 
+		H := H2; 
+	fi; 
+
+	# Get generator matrix from H 
+	if IsInStandardForm(H, false) then 
+		dimC := Length(H[1]) - Length(H); 
+		if dimC = 0 then 
+			G := []; 
+		else 
+			G := TransposedMat(Concatenation(IdentityMat( dimC, F ),  
+							List(-H, x->x{[1..dimC]}))); 
+		fi; 
+	else 
+		G := NullspaceMat(TransposedMat(H)); 
+	fi; 
+	if Length(G) = 0 then  # Call NullCode. Length(H=I) = n-k, in this case. 
+						   # Length(G) = k = 0 => n = Length(H).  
+		C := NullCode(Length(H), F); 
+		C!.name := name; 	
+		return C; 
+	fi; 
+
+	C := LinearCodeByGenerators(F,Codeword(G, F)); 
+	SetGeneratorMat(C, G); 
+	SetCheckMat(C, H); 
+	SetWordLength(C, Length(G[1])); 
+	C!.name := name; 
+	return C; 
+end); 
+
+InstallOtherMethod(CheckMatCode, "check matrix, field", true, 
+	[IsMatrix, IsField], 0, 
+function(H, F) 
+	return CheckMatCode(H, "code defined by check matrix", F); 
+end); 
+
+InstallOtherMethod(CheckMatCode, "check matrix, name, size of field", true, 
+	[IsMatrix, IsString, IsInt], 0, 
+function(H, name, q) 
+	return CheckMatCode(H, name, GF(q)); 
+end);
+
+InstallOtherMethod(CheckMatCode, "check matrix, size of field", true, 
+	[IsMatrix, IsInt], 0, 
+function(H, q) 
+	return CheckMatCode(H, "code defined by check matrix", GF(q)); 
+end); 
+
+
+#############################################################################
+##
+#F  RandomLinearCode( <n>, <k> [, <F>] )  . . . . . . . .  random linear code
+##
+
+InstallMethod(RandomLinearCode, "n,k,field", true, [IsInt, IsInt, IsField], 0, 
+function(n, k, F) 
+    if k = 0 then
+        return NullCode( n, F );
+    else
+        return GeneratorMatCode(PermutedCols(List(IdentityMat(k,F), i ->
+                   Concatenation(i,List([k+1..n],j->Random(F)))),
+                   Random(SymmetricGroup(n))), "random linear code", F);
+    fi;
+end);
+
+InstallOtherMethod(RandomLinearCode, "n,k,size of field", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, k, q) 
+	return RandomLinearCode(n, k, GF(q)); 
+end); 
+
+InstallOtherMethod(RandomLinearCode, "n,k", true, [IsInt, IsInt], 0, 
+function(n, k) 
+	return RandomLinearCode(n, k, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  HammingCode( <r> [, <F>] )  . . . . . . . . . . . . . . . .  Hamming code
+##
+
+InstallMethod(HammingCode, "r,F", true, [IsInt, IsField], 0, 
+function(r, F) 
+    local q, H, H2, C, i, j, n, TupAllow, wd;
+
+    TupAllow := function(W)
+        local l;
+        l := 1;
+        while (W[l] = Zero(F)) and l < Length(W) do
+            l := l + 1;
+        od;
+        return (W[l] = One(F));
+    end;
+
+    q := Size(F);
+    if not IsPrimePowerInt(q) then
+        Error("q must be prime power");
+    fi;
+    H := Tuples(AsSSortedList(F), r);
+    H2 := [];
+    j := 1;
+    for i in [1..Length(H)] do
+        if TupAllow(H[i]) then
+            H2[j] := H[i];
+            j := j + 1;
+        fi;
+    od;
+    n := (q^r-1)/(q-1);
+    C := CheckMatCode(TransposedMat(H2), Concatenation("Hamming (", String(r),
+                 ",", String(q), ") code"), F);
+    C!.lowerBoundMinimumDistance := 3;   
+    C!.upperBoundMinimumDistance := 3;
+    C!.boundsCoveringRadius := [ 1 ];
+    SetIsPerfectCode(C, true);   
+    SetIsSelfDualCode(C, false);
+    SetSpecialDecoder(C, HammingDecoder);   
+    if q = 2 then
+        SetIsNormalCode(C, true);   
+        wd := [1, 0];
+        for i in [2..n] do
+            Add(wd, 1/i * (Binomial(n, i-1) - wd[i] - (n-i+2)*wd[i-1]));
+        od;
+        SetWeightDistribution(C, wd);   
+    fi;
+    return C;
+end);
+
+InstallOtherMethod(HammingCode, "r,size of field", true, [IsInt, IsInt], 0, 
+function(r, q) 
+	return HammingCode(r, GF(q)); 
+end); 
+
+InstallOtherMethod(HammingCode, "r", true, [IsInt], 0, 
+function(r) 
+	return HammingCode(r, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  SimplexCode( <r>, <F> ) .  The SimplexCode is the Dual of the HammingCode
+##
+
+InstallMethod(SimplexCode, "redundancy, field", true, [IsInt, IsField], 0, 
+function(r, F) 
+    local C;
+    C := DualCode( HammingCode(r,F) );
+    C!.name := "simplex code";   
+    if F = GF(2) then
+        SetIsNormalCode(C, true);   
+        C!.boundsCoveringRadius := [ 2^(r-1) - 1 ];   
+    fi;
+    return C;
+end);
+
+InstallOtherMethod(SimplexCode, "redundancy, fieldsize", true,[IsInt,IsInt],0, 
+function(r, q)
+	return SimplexCode(r, GF(q));
+end); 
+
+InstallOtherMethod(SimplexCode, "redundancy", true, [IsInt], 0, 
+function(r) 
+	return SimplexCode(r, GF(2));
+end); 
+
+
+#############################################################################
+##
+#F  ReedMullerCode( <r>, <k> )  . . . . . . . . . . . . . .  Reed-Muller code
+##
+##  ReedMullerCode(r, k) creates a binary Reed-Muller code of dimension k,
+##  order r; 0 <= r <= k
+##
+
+InstallMethod(ReedMullerCode, "dimension, order", true, [IsInt,IsInt], 0, 
+function(r,k) 
+    local mat,c,src,dest,index,num,dim,C,wd, h,t,A, bcr;
+
+    if r > k then 
+        return ReedMullerCode(k, r); #for compatibility with older versions
+                                     #of guava, It used to be
+                                     #ReedMullerCode(k, r);
+    fi;
+    mat := [ [] ];
+    num := 2^k;
+    dim := Sum(List([0..r], x->Binomial(k,x)));
+    for t in [1..num] do
+        mat[1][t] := Z(2)^0;
+    od;
+    if r > 0 then
+        Append(mat, TransposedMat(Tuples ([0*Z(2), Z(2)^0], k)));
+        for t in [2..r] do
+            for index in Combinations([1..k], t) do
+                dest := List([1..2^k], i->Product(index, j->mat[j+1][i]));
+                Append(mat, [dest]);
+            od;
+        od;
+    fi;
+    C := GeneratorMatCode( mat, Concatenation("Reed-Muller (", String(r), ",", 
+            String(k), ") code"), GF(2) );
+    C!.lowerBoundMinimumDistance := 2^(k-r);   
+    C!.upperBoundMinimumDistance := 2^(k-r);    
+    SetIsPerfectCode(C, false);   
+    SetIsSelfDualCode(C, (2*r = k-1));   
+    if r = 0 then
+        wd := List([1..num + 1], x -> 0);
+        wd[1] := 1;
+        wd[num+1] := 1;
+        SetWeightDistribution(C, wd);   
+    elif r = 1 then
+        wd := List([1..num + 1], x -> 0);
+        wd[1] := 1;
+        wd[num + 1] := 1;
+        wd[num / 2 + 1] := Size(C) - 2;
+        SetWeightDistribution(C, wd);
+    elif r = 2 then
+        wd := List([1..num + 1], x -> 0);
+        wd[1] := 1;
+        wd[num + 1] := 1;
+        for h in [1..QuoInt(k,2)] do
+            A := 2^(h*(h+1));
+            for t in [0..2*h-1] do
+                A := A*(2^(k-t)-1);
+            od;
+            for t in [1..h] do
+                A := A/(2^(2*t)-1);
+            od;
+            wd[2^(k-1)+2^(k-1-h)+1] := A;
+            wd[2^(k-1)-2^(k-1-h)+1] := A;
+        od;
+        wd[2^(k-1)+1] := Size(C)-Sum(wd);
+        SetWeightDistribution(C, wd);
+    fi;
+
+    bcr := BoundsCoveringRadius( C );
+    
+    if 0 <= r and r <= k-3 then
+        if IsEvenInt( r ) then
+            C!.boundsCoveringRadius :=  
+              [ Maximum( 2^(k-r-3)*(r+4), bcr[1] )
+                .. Maximum( bcr ) ];
+        else
+            C!.boundsCoveringRadius := 
+              [ Maximum( 2^(k-r-3)*(r+5), bcr[ 1 ] )
+                .. Maximum( bcr ) ];
+        fi;
+    fi;
+
+    if r = k then
+        SetCoveringRadius(C, 0);
+    	C!.boundsCoveringRadius := [ 0 ]; 
+	elif r = k - 1 then
+        SetCoveringRadius(C, 1); 
+		C!.boundsCoveringRadius := [ 1 ]; 
+    elif r = k - 2 then
+        SetCoveringRadius(C, 2); 
+		C!.boundsCoveringRadius := [ 2 ];  
+    elif r = k - 3 then
+        if IsEvenInt( k ) then
+            SetCoveringRadius(C, k + 2 );
+        	C!.boundsCoveringRadius := [ k + 2 ]; 
+		else
+            SetCoveringRadius(C,  k + 1 ); 
+			C!.boundsCoveringRadius := [ k + 1 ]; 
+        fi;
+    elif r = 0 then
+        SetCoveringRadius(C,  2^(k-1) ); 
+		C!.boundsCoveringRadius := [ 2^(k-1) ]; 
+    elif r = 1 then
+        if IsEvenInt( k ) then
+            SetCoveringRadius(C,  2^(k-1) - 2^(k/2-1) ); 
+			C!.boundsCoveringRadius := [ 2^(k-1) - 2^(k/2-1) ]; 
+        elif k = 5 then
+            SetCoveringRadius(C,  12 ); 
+			C!.boundsCoveringRadius := [ 12 ]; 
+        elif k = 7 then 
+            SetCoveringRadius(C,  56 ); 
+			C!.boundsCoveringRadius := [ 56 ]; 
+        elif k >= 15 then
+            C!.boundsCoveringRadius := [ 2^(k-1) - 2^((k+1)/2)*27/64 
+                                        .. 2^(k-1) - 2^( QuoInt(k,2)-1 ) ];
+        else
+            C!.boundsCoveringRadius := [ 2^(k-1) - 2^((k+1)/2)/2
+                                        .. 2^(k-1) - 2^( QuoInt(k,2)-1 ) ];
+        fi;
+    elif r = 2 then
+        if k = 6 then
+            SetCoveringRadius(C,  18 ); 
+			C!.boundsCoveringRadius := [ 18 ]; 
+        elif k = 7 then 
+            C!.boundsCoveringRadius := [ 40 .. 44 ];
+        elif k = 8 then
+            C!.boundsCoveringRadius := [ 84
+              .. Maximum( bcr ) ];
+        fi;
+    elif r = 3 then
+        if k = 7 then
+            C!.boundsCoveringRadius := [ 20 .. 23 ];
+        fi;
+    elif r = 4 then
+        if k = 8 then
+            C!.boundsCoveringRadius := [ 22
+              .. Maximum( bcr ) ];
+        fi;
+    fi;
+
+    if r = 1 and
+       ( IsEvenInt( k ) or k = 3 or k = 5 or k = 7 ) then
+        SetIsNormalCode(C, true);  
+    fi;
+    
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  LexiCode( <M | n>, <d>, <F> )  . . . . .  Greedy code with standard basis
+##
+
+InstallMethod(LexiCode, "basis,distance,field", true, 
+	[IsMatrix, IsInt, IsField], 0, 
+function(M, d, F) 
+	local base, n, k, one, zero, elms, Sz, vec, word, i, dist, carry, pos, C;   
+	base := VectorCodeword(Codeword(M, F)); 
+	n := Length(base[1]); 
+	k := Length(base); 
+	one := One(F); 
+	zero := Zero(F); 
+	elms := [];  
+	Sz := 0;  
+	vec := NullVector(k,F);  
+	repeat 
+		word := vec * base; 
+		i := 1; 
+		dist := d; 
+		while (dist>=d) and (i <= Sz) do   
+            dist := DistanceVecFFE(word, elms[i]);
+			i := i + 1;
+			od;
+			if dist >= d then
+				Add(elms,ShallowCopy(word));
+				Sz := Sz + 1;
+			fi;
+			# generate the (lexicographical) next word in F^k
+			carry := true;
+			pos := k;
+			while carry and (pos > 0) do
+			if vec[pos] = zero then
+				carry := false;
+				vec[pos] := one;
+			else
+				vec[pos] := PrimitiveRoot(F)^(LogFFE(vec[pos],PrimitiveRoot(F))+1);
+				if vec[pos] = one then
+					vec[pos] := zero;
+				else
+					carry := false;
+				fi;
+			fi;
+			pos := pos - 1;
+		od;
+	until carry;
+	if Size(F) = 2 then  # or even (2^(2^LogInt(LogInt(q,2),2)) = q) ?
+        C := GeneratorMatCode(elms, "lexicode", F);
+    else
+        C := ElementsCode(elms, "lexicode", F);
+    fi;
+    C!.lowerBoundMinimumDistance := d;  
+    return C;
+end);
+
+InstallOtherMethod(LexiCode, "basis,distance,size of field", true, 
+	[IsMatrix, IsInt, IsInt], 0, 
+function(M, d, q) 
+	return LexiCode(M, d, GF(q));
+end); 
+
+InstallOtherMethod(LexiCode, "wordlength,distance,field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, d, F)
+	return LexiCode(IdentityMat(n,F), d, F); 
+end); 
+
+InstallOtherMethod(LexiCode, "wordlength,distance,size of field", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, d, q) 
+	return LexiCode(IdentityMat(n, GF(q)), d, GF(q)); 
+end);
+
+
+#############################################################################
+##
+#F  GreedyCode( <M>, <d> [, <F>] )  . . . . Greedy code from list of elements
+##
+
+InstallMethod(GreedyCode, "matrix,design distance,Field", true, 
+	[IsMatrix, IsInt, IsField], 0, 
+function(M,d,F) 
+	local space, n, word, elms, Sz, i, dist, C;
+	space := VectorCodeword(Codeword(M,F)); 
+	n := Length(space[1]);
+	elms := [space[1]]; 
+	Sz := 1;
+	for word in space do 
+		i := 1; 
+		repeat 
+			dist := DistanceVecFFE(word, elms[i]); 
+			i := i + 1;
+		until dist < d or i > Sz;
+		if dist >= d then 
+			Add(elms, word);
+			Sz := Sz + 1; 
+		fi;
+	od;
+	C := ElementsCode(elms, "Greedy code, user defined basis", F);
+	C!.lowerBoundMinimumDistance := d;
+	return C; 
+end);
+
+InstallOtherMethod(GreedyCode, "matrix,design distance,size of field", true, 
+	[IsMatrix, IsInt, IsInt], 0, 
+function(M,d,q) 
+	return GreedyCode(M,d,GF(q));
+end);
+
+InstallOtherMethod(GreedyCode, "matrix,design distance", true, 
+	[IsMatrix,IsInt], 0, 
+function(M,d) 
+	return GreedyCode(M,d,DefaultField(Flat(M)));
+end);
+
+
+#############################################################################
+##
+#F  AlternantCode( <r>, <Y> [, <alpha>], <F> )  . . . . . . .  Alternant code
+##
+
+InstallMethod(AlternantCode, "redundancy, Y, alpha, field", true, 
+	[IsInt, IsList, IsList, IsField], 0, 
+function(r, Y, els, F) 
+    local C, n, q, i, temp;
+    n := Length(Y);
+	els := Set(VectorCodeword(Codeword(els, F)));
+	Y := VectorCodeword(Codeword(Y, F) );
+    
+	if ForAny(Y, i-> i = Zero(F)) then
+        Error("Y contains zero");
+    elif Length(els) <> Length(Y) then
+        Error("<Y> and <alpha> have inequal length or <alpha> is not distinct");
+    fi;
+    q := Characteristic(F);
+    temp := MutableNullMat(n, n, F);
+    for i in [1..n] do
+        temp[i][i] := Y[i];
+    od;
+    Y := temp;
+    C := CheckMatCode( BaseMat(VerticalConversionFieldMat( List([0..r-1], 
+                 i -> List([1..n], j-> els[j]^i)) * Y)), "alternant code", F );
+    C!.lowerBoundMinimumDistance := r + 1;   
+    return C;
+end);
+
+InstallOtherMethod(AlternantCode, "redundancy, Y, alpha, fieldsize", true, 
+	[IsInt, IsList, IsList, IsInt], 0, 
+function(r, Y, a, q) 
+	return AlternantCode(r, Y, a, GF(q)); 
+end); 
+
+InstallOtherMethod(AlternantCode, "redundancy, Y, field", true, 
+	[IsInt, IsList, IsField], 0, 
+function(r, Y, F) 
+	return AlternantCode(r, Y, AsSSortedList(F){[2..Length(Y)+1]}, F); 
+end); 
+
+InstallOtherMethod(AlternantCode, "redundancy, Y, fieldsize", true, 
+	[IsInt, IsList, IsInt], 0, 
+function(r, Y, q) 
+	return AlternantCode(r, Y, AsSSortedList(GF(q)){[2..Length(Y)+1]}, GF(q));  
+end); 
+
+
+#############################################################################
+##
+#F  GoppaCode( <G>, <L | n> ) . . . . . . . . . . . . . . classical Goppa code
+##
+
+InstallGlobalFunction(GoppaCode,  
+function(arg)  
+    local C, GP, F, L, n, q, m, r, zero, temp;
+
+    GP := PolyCodeword(Codeword(arg[1]));
+    F := CoefficientsRing(DefaultRing(GP));  
+    q := Characteristic(F);  
+    m := Dimension(F);  
+    F := GF(q);
+    zero := Zero(F);  
+    r := DegreeOfLaurentPolynomial(GP);
+
+    # find m
+    if IsInt(arg[2]) then
+        n := arg[2];
+        m := Maximum(m, LogInt(n,q));
+        repeat
+            L := Filtered(AsSSortedList(GF(q^m)),i -> Value(GP,i) <> zero);
+            m := m + 1;
+        until Length(L) >= n;
+        m := m - 1;
+        L := L{[1..n]};
+    else
+        L := arg[2];
+        n := Length(L);
+        m := Maximum(m, Dimension(DefaultField(L)));
+    fi;
+    C := CheckMatCode( BaseMat(VerticalConversionFieldMat( List([0..r-1],
+                 i-> List(L, j-> (j)^i / Value(GP, j) )) )), "classical Goppa code", F);
+
+    # Make the code
+    temp := Factors(GP);
+    if (q = 2) and (Length(temp) = Length(Set(temp))) then
+    # second condition checks if the roots of G are distinct
+        C!.lowerBoundMinimumDistance := Minimum(n, 2*r + 1);   
+    else
+        C!.lowerBoundMinimumDistance := Minimum(n, r + 1);
+    fi;
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  CordaroWagnerCode( <n> )  . . . . . . . . . . . . . . Cordaro-Wagner code
+##
+
+InstallMethod(CordaroWagnerCode, "length", true, [IsInt], 0, 
+function(n) 
+    local r, C, zero, one, F, d, wd;
+	if n < 2 then
+		Error("n must be 2 or more");
+	fi;
+    r := Int((n+1)/3);
+    d := (2 * r - Int( (n mod 3) / 2) );
+    F := GF(2);
+    zero := Zero(F);  
+    one := One(F);  
+    C := GeneratorMatCode( [Concatenation(List([1..r],i -> zero),
+                     List([r+1..n],i -> one)),
+                     Concatenation(List([r+1..n],i -> one), List([1..r],
+                             i -> zero))], "Cordaro-Wagner code", F );
+    C!.lowerBoundMinimumDistance := d;   
+    C!.upperBoundMinimumDistance := d;
+    wd := List([1..n+1], i-> 0);
+    wd[1] := 1;
+    wd[2*r+1] := 1;
+    wd[n-r+1] := wd[n-r+1] + 2;
+    SetWeightDistribution(C, wd);  
+	return C;
+end);
+
+
+#############################################################################
+##
+#F  GeneralizedSrivastavaCode( <a>, <w>, <z> [, <t>] [, <F>] )  . . . . . .  
+## 
+
+InstallMethod(GeneralizedSrivastavaCode, "a,w,z,t,F", true, 
+	[IsList, IsList, IsList, IsInt, IsField], 0, 
+function(a,w,z,t,F) 
+    local C, n, s, i, H;
+	a := VectorCodeword(Codeword(a, F));
+	w := VectorCodeword(Codeword(w, F));
+	z := VectorCodeword(Codeword(z, F));
+    n := Length(a);
+    s := Length(w);
+    if Length(Set(Concatenation(a,w))) <> n + s then
+        Error("<alpha> and w are not distinct");
+    fi;
+    if ForAny(z,i -> i = Zero(F)) then
+        Error("<z> must be nonzero");
+    fi;
+
+    H := [];
+    for i in List([1..s], index -> List([1..t], vert -> List([1..n],
+            hor -> z[hor]/(a[hor] - w[index])^vert))) do
+        Append(H, i);
+    od;
+    C := CheckMatCode( BaseMat(VerticalConversionFieldMat(H)),
+                 "generalized Srivastava code", GF(Characteristic(F)) );
+    C!.lowerBoundMinimumDistance := s + 1;   
+    return C;
+end);
+
+InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,t,q", true, 
+	[IsList, IsList, IsList, IsInt, IsInt], 0, 
+function(a, w, z, t, q) 
+	return GeneralizedSrivastavaCode(a, w, z, t, GF(q)); 
+end); 
+
+InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,t", true, 
+	[IsList, IsList, IsList, IsInt], 0, 
+function(a, w, z, t) 
+	return GeneralizedSrivastavaCode(a, w, z, t, 
+				DefaultField(Concatenation(a,w,z))); 
+end); 
+
+InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,F", true, 
+	[IsList, IsList, IsList, IsField], 0, 
+function(a, w, z, F) 
+	return GeneralizedSrivastavaCode(a, w, z, 1, F); 
+end); 
+
+InstallOtherMethod(GeneralizedSrivastavaCode, "a, w, z", true, 
+	[IsList, IsList, IsList], 0, 
+function(a, w, z) 
+	return GeneralizedSrivastavaCode(a, w, z, 1, 
+				DefaultField(Concatenation(a, w, z))); 
+end); 
+
+
+#############################################################################
+##
+#F  SrivastavaCode( <a>, <w> [, <mu>] [, <F>] ) . . . . . . . Srivastava code
+##
+
+InstallMethod(SrivastavaCode, "a,w,mu,F", true, 
+	[IsList,IsList,IsInt, IsField], 0, 
+function(a, w, mu, F) 
+    local C, n, s, i, zero, TheMat;
+	a := VectorCodeword(Codeword(a, F));
+	w := VectorCodeword(Codeword(w, F));
+    n := Length(a);
+    s := Length(w);
+    if Length(Set(Concatenation(a,w))) <> n + s then
+        Error("the elements of <alpha> and w are not distinct");
+    fi;
+    zero := Zero(F);  
+    for i in [1.. n] do
+        if a[i]^mu = zero then
+            Error("z[",i,"] = ",a[i],"^",mu," = ",zero);
+        fi;
+    od;
+    TheMat := List([1..s], j -> List([1..n], i -> a[i]^mu/(a[i] - w[j]) ));
+    C := CheckMatCode( BaseMat(VerticalConversionFieldMat(TheMat)),
+                 "Srivastava code", GF(Characteristic(F)) );
+    C!.lowerBoundMinimumDistance := s + 1;   
+    return C;
+end);
+
+InstallOtherMethod(SrivastavaCode, "a,w,mu,q", true, 
+	[IsList,IsList,IsInt,IsInt], 0, 
+function(a, w, mu, q) 
+	return SrivastavaCode(a, w, mu, GF(q)); 
+end); 
+
+InstallOtherMethod(SrivastavaCode, "a,w,mu", true, 
+	[IsList,IsList,IsInt], 0, 
+function(a, w, mu) 
+	return SrivastavaCode(a, w, mu, DefaultField(Concatenation(a,w))); 
+end); 
+
+InstallOtherMethod(SrivastavaCode, "a,w,F", true, 
+	[IsList,IsList,IsField], 0, 
+function(a, w, F) 
+	return SrivastavaCode(a, w, 1, F); 
+end); 
+
+InstallOtherMethod(SrivastavaCode, "a,w", true, [IsList,IsList], 0, 
+function(a, w) 
+	return SrivastavaCode(a, w, 1, DefaultField(Concatenation(a,w))); 
+end); 
+
+
+#############################################################################
+##
+#F  ExtendedBinaryGolayCode( )  . . . . . . . . .  extended binary Golay code
+##
+InstallMethod(ExtendedBinaryGolayCode, "only method", true, [], 0, 
+function()
+    local C;
+    C := ExtendedCode(BinaryGolayCode());
+    C!.name := "extended binary Golay code";   
+    Unbind( C!.history );    
+    SetIsCyclicCode(C, false); 
+    SetIsPerfectCode(C, false); 
+    SetIsSelfDualCode(C, true); 
+    C!.boundsCoveringRadius := [ 4 ];   
+    SetIsNormalCode(C, true); 
+    SetWeightDistribution(C,    
+      [1,0,0,0,0,0,0,0,759,0,0,0,2576,0,0,0,759,0,0,0,0,0,0,0,1]);
+    #SetAutomorphismGroup(C, M24); 
+    C!.lowerBoundMinimumDistance := 8; 
+    C!.upperBoundMinimumDistance := 8; 
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  ExtendedTernaryGolayCode( ) . . . . . . . . . extended ternary Golay code
+## 
+InstallMethod(ExtendedTernaryGolayCode, "only method", true, [], 0, 
+function() 
+    local C;
+    C := ExtendedCode(TernaryGolayCode());
+    SetIsCyclicCode(C, false);   
+    SetIsPerfectCode(C, false);
+    SetIsSelfDualCode(C, true);
+    C!.boundsCoveringRadius := [ 3 ];   
+    SetIsNormalCode(C, true);
+    C!.name := "extended ternary Golay code";   
+    Unbind( C!.history );    
+    SetWeightDistribution(C, [1,0,0,0,0,0,264,0,0,440,0,0,24]); 
+    #SetAutomorphismGroup(C, M12);
+    C!.lowerBoundMinimumDistance := 6;
+    C!.upperBoundMinimumDistance := 6;
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  BestKnownLinearCode( <n>, <k> [, <F>] ) .  returns best known linear code
+#F  BestKnownLinearCode( <rec> )
+##
+##  L describs how to create a code. L is a list with two elements:
+##  L[1] is a function and L[2] is a list of arguments for L[1].
+##  One or more of the argumenst of L[2] may again be such descriptions and
+##  L[2] can be an empty list.
+##  The field .construction contains such a list or false if the code is not
+##  yet in the apropiatelibrary file (/tbl/codeq.g)
+##
+
+InstallMethod(BestKnownLinearCode, "method for bounds/construction record", 
+	true, [IsRecord], 0, 
+function(bds) 
+    local MakeCode, C;
+
+    # L describs how to create a code. L is a list with two elements:
+    # L[1] is a function and L[2] is a list of arguments for L[1].
+    # One or more of the argumenst of L[2] may again be such descriptions and
+    # L[2] can be an empty list.
+    MakeCode := function(L)
+        #beware: this is the most beautiful function in GUAVA (according to J)
+        if IsList(L) and IsBound(L[1]) and IsFunction(L[1]) then
+            return CallFuncList( L[1], List( L[2], i -> MakeCode(i) ) );
+        else
+            return L;
+        fi;
+    end;
+    
+	if not IsBound(bds.construction) then
+		bds := BoundsMinimumDistance(bds.n, bds.k, bds.q); 
+	fi;
+    if bds.construction = false then 
+        Error("code not yet in library");
+    else
+        C := MakeCode(bds.construction);
+        if LowerBoundMinimumDistance(C) > bds.lowerBound then
+            Print("New table entry found!\n");
+        fi;
+        C!.lowerBoundMinimumDistance := Maximum(bds.lowerBound,
+                                               LowerBoundMinimumDistance(C));
+        C!.upperBoundMinimumDistance := Minimum(bds.upperBound,
+                                               UpperBoundMinimumDistance(C));
+        return C;
+    fi;
+end);
+
+InstallOtherMethod(BestKnownLinearCode, "n, k, q", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, k, q) 
+	local r; 
+	r := BoundsMinimumDistance(n, k, q); 
+	return BestKnownLinearCode(r); 
+end); 
+
+InstallOtherMethod(BestKnownLinearCode, "n, k, F", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, k, F) 
+	local r; 
+	r := BoundsMinimumDistance(n, k, Size(F)); 
+	return BestKnownLinearCode(r); 
+end); 
+
+InstallOtherMethod(BestKnownLinearCode, "n, k", true, 
+	[IsInt, IsInt], 0, 
+function(n, k) 
+	local r; 
+	r := BoundsMinimumDistance(n, k); 
+	return BestKnownLinearCode(r); 
+end); 
+
+
+
+## Helper functions for cyclic code creation 
+GeneratorMatrixFromPoly := function(p,n) 
+	local coeffs, j, res, r, zero; 
+	coeffs := CoefficientsOfLaurentPolynomial(p);  
+	coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); 
+	r := DegreeOfLaurentPolynomial(p); 
+	zero := Zero(Field(coeffs)); 
+	res := [];
+	res[1] := []; 
+	# first row 
+	Append(res[1], coeffs); 
+	Append(res[1], List([r+2..n], i->zero)); 
+	# 2..last-1 
+	if n-r > 2 then 
+		for j in [2..(n-r-1)] do 
+			res[j] := [];  
+			Append(res[j], List([1..j-1], i->zero)); 
+			Append(res[j], coeffs);  
+			Append(res[j], List([r+1+j..n], i->zero)); 
+		od;
+	fi;
+	# last row 
+	if n-r > 1 then 
+		res[n-r] := []; 
+		Append(res[n-r], List([1..n-r-1], i->zero)); 
+		Append(res[n-r], coeffs); 
+	fi;	
+	return res;
+end; 
+
+
+CyclicCodeByGenerator := function(F, n, G) 
+	local C, GM;  
+	## for now, using linear code representation.  
+	## Get generator matrix and call linear code creation function 
+	## Note input is a codeword, for consistency.  
+	## Further note GenMatFromPoly doesn't handle NullPoly case well, 
+	## so calling NullMat instead.  Once using poly rep, this should be 
+	## unnecessary.  
+	## And GMFP doesn't handle p = x^n-1 case. 
+
+	if (G = NullWord(n,F)) or 
+	   (VectorCodeword(G) = []) or 
+	   (G = Codeword(Indeterminate(F)^n-One(F), F)) then 
+		GM := NullMat(1,n,F);   
+	else 
+		GM := GeneratorMatrixFromPoly(PolyCodeword(G), n); 
+	fi;
+	C := LinearCodeByGenerators(F, Codeword(GM, F)); 
+	SetGeneratorMat(C, GM);  
+	SetIsCyclicCode(C, true); 
+        SetSpecialDecoder(C, CyclicDecoder);   
+	return C; 
+end; 
+
+
+#############################################################################
+##
+#F  GeneratorPolCode( <G>, <n> [, <name> ], <F> ) .  code from generator poly
+##
+
+InstallMethod(GeneratorPolCode, "Poly, wordlength,name,field", true, 
+	[IsUnivariatePolynomial, IsInt, IsString, IsField], 0, 
+function(G, n, name, F) 
+    local R;
+    G := PolyCodeword( Codeword(G, F) );
+	if not IsZero(G) then  
+		G := Gcd(G,(Indeterminate(F)^n-One(F)));
+	fi; 
+	R := CyclicCodeByGenerator(F, n, Codeword(G, F));  
+	SetGeneratorPol(R, G);   
+	R!.name := name;   
+    return R;
+end);
+
+InstallOtherMethod(GeneratorPolCode, "Poly,wordlength,field", true, 
+	[IsUnivariatePolynomial, IsInt, IsField], 0, 
+function(G, n, F) 
+	return GeneratorPolCode(G,n,"code defined by generator polynomial", F); 
+end); 
+
+InstallOtherMethod(GeneratorPolCode, "Poly,wordlength,name,fieldsize", true, 
+	[IsUnivariatePolynomial, IsInt, IsString, IsInt], 0, 
+function(G, n, name, q) 
+	return GeneratorPolCode(G, n, name, GF(q)); 
+end); 
+
+InstallOtherMethod(GeneratorPolCode, "Poly, wordlength, fieldsize", true, 
+	[IsUnivariatePolynomial, IsInt, IsInt], 0, 
+function(G, n, q) 
+	return GeneratorPolCode(G, n, "code defined by generator polynomial", 
+							GF(q)); 
+end); 
+
+
+#############################################################################
+##
+#F  CheckPolCode( <H>, <n> [, <name> ], <F> ) . .  code from check polynomial
+##
+
+InstallMethod(CheckPolCode, "check poly, wordlength, name, field", true, 
+	[IsUnivariatePolynomial, IsInt, IsString, IsField], 0, 
+function(H, n, name, F) 
+    local R,G;
+    H := PolyCodeword( Codeword(H, F) );
+    H := Gcd(H, (Indeterminate(F)^n-One(F)));
+	# Get generator pol 
+	G := EuclideanQuotient((Indeterminate(F)^n-One(F)), H);
+
+	R := CyclicCodeByGenerator(F, n, Codeword(G,F));  
+	SetCheckPol(R, H);  
+	SetGeneratorPol(R, G);  
+	R!.name := name;  
+    return R;
+end);
+
+InstallOtherMethod(CheckPolCode, "check poly, wordlength, field", true, 
+	[IsUnivariatePolynomial, IsInt, IsField], 0, 
+function(H, n, F) 
+	return CheckPolCode(H, n, "code defined by check polynomial", F); 
+end); 
+
+InstallOtherMethod(CheckPolCode, "check poly, wordlength, name, fieldsize", 
+	true, [IsUnivariatePolynomial, IsInt, IsString, IsInt], 0, 
+function(H, n, name, q) 
+	return CheckPolCode(H, n, name, GF(q)); 
+end); 
+
+InstallOtherMethod(CheckPolCode, "check poly, wordlength, fieldsize", true, 
+	[IsUnivariatePolynomial, IsInt, IsInt], 0, 
+function(H, n, q) 
+	return CheckPolCode(H, n, "code defined by check polynomial", GF(q)); 
+end); 
+
+
+#############################################################################
+##
+#F  RepetitionCode( <n> [, <F>] ) . . . . . . . repetition code of length <n>
+##
+
+InstallMethod( RepetitionCode, "wordlength, Field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    local C, q, wd, p;
+    q :=Size(F);
+    p := LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(F)),  
+					List([1..n], t->One(F)), 0);  
+	C := GeneratorPolCode(p, n, "repetition code", F);  
+    C!.lowerBoundMinimumDistance := n;   
+    C!.upperBoundMinimumDistance := n;
+    if n = 2 and q = 2 then
+        SetIsSelfDualCode(C, true);   
+    else
+        SetIsSelfDualCode(C, false);
+    fi;
+    wd := NullVector(n+1);   
+    wd[1] := 1;
+    wd[n+1] := q-1;
+    SetWeightDistribution(C, wd); 
+	if n < 260 then
+        SetAutomorphismGroup(C, SymmetricGroup(n));
+    fi;
+    if F = GF(2) then
+        SetIsNormalCode(C, true);   
+    fi;
+    if (n mod 2 = 0) or (F <> GF(2)) then
+        SetIsPerfectCode(C, false);   
+   		C!.boundsCoveringRadius := [ Minimum(n-1,QuoInt((q-1)*n,q)) ]; 	
+	else
+        C!.boundsCoveringRadius := [ QuoInt(n,2) ];   
+        SetIsPerfectCode(C, true);   
+    fi;
+    return C;
+end);
+
+InstallOtherMethod(RepetitionCode, "wordlength, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(n, q) 
+	return RepetitionCode(n, GF(q)); 
+end); 
+
+InstallOtherMethod(RepetitionCode, "wordlength", true, [IsInt], 0, 
+function(n) 
+	return RepetitionCode(n, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  WholeSpaceCode( <n> [, <F>] ) . . . . . . . . . . returns <F>^<n> as code
+##
+
+InstallMethod(WholeSpaceCode, "wordlength, Field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    local C, index, q;
+    C := GeneratorPolCode( Indeterminate(F)^0, n, "whole space code", F);
+    C!.lowerBoundMinimumDistance := 1;   
+    C!.upperBoundMinimumDistance := 1;
+    SetAutomorphismGroup(C, SymmetricGroup(n));
+    C!.boundsCoveringRadius := [ 0 ];
+    if F = GF(2) then
+        SetIsNormalCode(C, true);  
+    fi;
+    SetIsPerfectCode(C, true);
+    SetIsSelfDualCode(C, false);
+    q := Size(F) - 1;
+    SetWeightDistribution(C, List([0..n], i-> q^i*Binomial(n, i)) );   
+    return C;
+end);
+
+InstallOtherMethod(WholeSpaceCode, "wordlength, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(n, q) 
+	return WholeSpaceCode(n, GF(q)); 
+end); 
+
+InstallOtherMethod(WholeSpaceCode, "wordlength", true, [IsInt], 0, 
+function(n) 
+	return WholeSpaceCode(n, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  CyclicCodes( <n> )  . .  returns a list of all cyclic codes of length <n>
+##
+
+InstallMethod(CyclicCodes, "wordlength, Field", true, 
+	[IsInt, IsField], 0, 
+function(n, F) 
+	local f, Pl; 
+	f := Factors(Indeterminate(F) ^ n - One(F)); 
+	Pl := List(Combinations(f), c->Product(c)*Indeterminate(F)^0); 
+	return List(Pl, p->GeneratorPolCode(p, n, "enumerated code", F)); 
+end); 
+
+InstallOtherMethod(CyclicCodes, "wordlength, k, Field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, k, F) 
+	local r, f, Pl, codes; 
+	r := n - k; 
+    f := Factors(Indeterminate(F)^n-One(F));
+	Pl := [];
+
+	codes := function(f, g)
+	   local i, tempf;
+	   if Degree(g) < r then
+		   i := 1;
+		   while i <= Length(f) and Degree(g)+Degree(f[i][1]) <= r do
+			   if f[i][2] = 1 then
+				   tempf := f{[ i+1 .. Length(f) ]};
+			   else
+				   tempf := ShallowCopy( f );
+				   tempf[i][2] := f[i][2] - 1;
+			   fi;
+			   codes( tempf, g * f[i][1] );
+			   i := i + 1;
+		   od;
+	   elif Degree(g) = r then
+		   Add( Pl, g );
+	   fi;
+	end;
+
+	codes( Collected( f ), Indeterminate(F)^0 );
+    return List(Pl, p->GeneratorPolCode(p,n,"enumerated code",F));
+end);
+
+InstallOtherMethod(CyclicCodes, "wordlength, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(n, q) 
+	return CyclicCodes(n, GF(q)); 
+end); 
+
+InstallOtherMethod(CyclicCodes, "wordlength, k, fieldsize", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, k, q) 
+	return CyclicCodes(n, k, GF(q)); 
+end); 
+
+
+#############################################################################
+##
+#F  NrCyclicCodes( <n>, <F>)  . . .  number of cyclic codes of length <n>
+##
+
+InstallMethod(NrCyclicCodes, "wordlength, Field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    return NrCombinations(Factors(Indeterminate(F)^n-One(F)));
+end);
+
+InstallOtherMethod(NrCyclicCodes, "wordlength, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(n, q) 
+	return NrCyclicCodes(n, GF(q)); 
+end); 
+
+
+#############################################################################
+##
+#F  BCHCode( <n> [, <b>], <delta> [, <F>] ) . . . . . . . . . . . .  BCH code
+##
+##  BCHCode (n [, b ], delta [, F]) returns the BCH code over F with
+##  wordlength n, designedDistance delta, constructed from powers
+##  x^b, x^(b+1), ..., x^(b+delta-2), where x is a primitive n'th power root
+##  of unity; b = 1 by default; the function returns a narrow sense BCH code
+##  Gcd(n,q) = 1 and 2<=delta<=n-b+1
+
+InstallMethod(BCHCode, "wordlength, start, designed distance, fieldsize", true, 
+	[IsInt, IsInt, IsInt, IsInt], 0, 
+function(n, start, del, q) 
+    local stop, m, b, C, test, Cyclo, PowerSet, t,
+          zero, desdist, G, superfl, i, BCHTable;  
+
+    BCHTable := [ [31,11,11], [63,36,11], [63,30,13], [127,92,11],
+                  [127,85,13], [255,223,9], [255,215,11], [255,207,13],
+                  [255,187,19], [255,171,23], [255,155,27], [255,99,47],
+                  [255,79,55], [255,29,95], [255,21,111] ];
+########### increase size of table? - wdj
+	stop := start + del - 2;
+    if Gcd(n,q) <> 1 then
+        Error ("n and q must be relative primes");
+    fi;
+    zero := Zero(GF(q));  
+    m := OrderMod(q,n);
+    b := PrimitiveUnityRoot(q,n);
+    PowerSet := [start..stop];
+    G := Indeterminate(GF(q))^0;
+    while Length(PowerSet) > 0 do
+        test := PowerSet[1] mod n; ############### changed 8-1-2004
+        G := G * MinimalPolynomial(GF(q), b^test);
+        t := (q*test) mod n;
+        while t <> (test mod n) do ############### changed 7-31-2004
+            RemoveSet(PowerSet, t);
+            t := (q*t) mod n;
+        od;
+        RemoveSet(PowerSet, test);
+    od;
+######################################
+###### This loop computes the product of the 
+###### min polys of the elements when it should only
+###### compute the lcm of them 
+###### Why not use cyclotomic codests and roots of code?
+######################################
+    C := GeneratorPolCode(G, n, GF(q));
+########### this removes extra powers by taking the gcd with x^n-1
+    SetSpecialDecoder(C, BCHDecoder);   
+########### this overwrites     SetSpecialDecoder(C, CyclicDecoder);   
+    # Calculate Bose distance:
+    Cyclo := CyclotomicCosets(q,n);
+######## why not do this in the above loop?
+    PowerSet := [];
+    for t in [start..stop] do
+        for test in [1..Length(Cyclo)] do
+            if (t mod n) in Cyclo[test] then ##### added 8-1-2004
+                AddSet(PowerSet, Cyclo[test]);
+            fi;
+        od;
+    od;
+    PowerSet := Flat(PowerSet);
+    while stop + 1 in PowerSet do
+    	stop := stop + 1;
+    od;
+    while start - 1 in PowerSet do
+    	start := start - 1;
+    od;
+    desdist := stop - start + 2;
+    if desdist > n then
+        Error("invalid designed distance");
+    fi;
+    # In some cases the true minimumdistance is known:
+    SetDesignedDistance(C, desdist);       
+    C!.lowerBoundMinimumDistance := desdist; 
+    if (q=2) and (n mod desdist = 0) and (start = 1) then
+        C!.upperBoundMinimumDistance := desdist;  
+    elif q=2 and desdist mod 2 = 0 and (n=2^m - 1) and (start=1) and
+      (Sum(List([0..QuoInt(desdist-1, 2) + 1], i -> Binomial(n, i))) >
+       (n + 1) ^ QuoInt(desdist-1, 2)) then
+        C!.upperBoundMinimumDistance := desdist;  
+    elif (n = q^m - 1) and (desdist = q^OrderMod(q,desdist) - 1)
+      and (start=1) then
+        C!.upperBoundMinimumDistance := desdist;  
+    fi;
+    # Look up this code in the table
+########## table only for q=2^r, add this to if statement 
+########## to speed this up ?? - wdj
+    if start=1 then
+        for i in BCHTable do
+            if i[1] = n and i[2] = Dimension(C) then
+                C!.lowerBoundMinimumDistance := i[3];
+                C!.upperBoundMinimumDistance := i[3];
+            fi;
+        od;
+    fi;
+    # Calculate minimum of q*desdist - 1 for primitive n.s. BCH code
+    if q^m - 1 = n and start = 1 then
+        PowerSet := [start..stop];
+        superfl := true;
+        i := PowerSet[Length(PowerSet)] * q mod n;
+        while superfl do
+            while i <> PowerSet[Length(PowerSet)] and not i in PowerSet do
+                i := i * q mod n;
+            od;
+            if i = PowerSet[Length(PowerSet)] then
+                superfl := false;
+            else
+                PowerSet := PowerSet{[1..Length(PowerSet)-1]};
+                i := PowerSet[Length(PowerSet)] * q mod n;
+            fi;
+        od;
+        C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C),
+                        q * (Length(PowerSet) + 1) - 1);
+    fi;
+	C!.name := Concatenation("BCH code, delta=",
+                      String(desdist), ", b=", String(start));
+    return C;
+end);
+
+InstallOtherMethod(BCHCode, "wordlength, start, designed distance, Field", 
+	true, [IsInt, IsInt, IsInt, IsField], 0, 
+function(n, b, del, F) 
+	return BCHCode(n, b, del, Size(F)); 
+end); 
+
+InstallOtherMethod(BCHCode, "wordlength, designed distance", true, 
+	[IsInt, IsInt], 0, 
+function(n, del) 
+	return BCHCode(n, 1, del, 2); 
+end); 
+
+InstallOtherMethod(BCHCode, "wordlength, start, designed distance", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, b, del) 
+	return BCHCode(n, b, del, 2); 
+end); 
+
+InstallOtherMethod(BCHCode, "wordlength, designed distance, field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, del, F) 
+	return BCHCode(n, 1, del, Size(F)); 
+end); 
+
+
+#############################################################################
+##
+#F  ReedSolomonCode( <n>, <d> ) . . . . . . . . . . . . . . Reed-Solomon code
+##
+##  ReedSolomonCode (n, d) returns a primitive narrow sense BCH code with
+##  wordlength n, over alphabet q = n+1, designed distance d
+
+InstallMethod(ReedSolomonCode, "wordlength, designed distance", true, 
+	[IsInt, IsInt], 0, 
+function(n, d) 
+    local C,b,q,wd,w;  
+    q := n+1;
+    if not IsPrimePowerInt(q) then
+        Error("q = n+1 must be a prime power");
+    fi;
+    b := Z(q);
+    
+    C := GeneratorPolCode(Product([1..d-1], i-> (Indeterminate(GF(q))-b^i)), n,
+                 "Reed-Solomon code", GF(q) );
+    SetRootsOfCode(C, List([1..d-1], i->b^i));    
+    C!.lowerBoundMinimumDistance := d;
+    C!.upperBoundMinimumDistance := d;
+    SetDesignedDistance(C, d);
+    SetSpecialDecoder(C, BCHDecoder);
+    IsMDSCode(C);	    # Calculate weightDistribution field  
+    return C;
+end);
+
+InstallMethod(ExtendedReedSolomonCode, "wordlength, designed distance", true,
+	[IsInt, IsInt], 0,
+function(n, d)
+	local i, j, s, C, G, Ce;
+	C := ReedSolomonCode(n-1, d-1);
+	G := MutableCopyMat( GeneratorMat(C) );
+	TriangulizeMat(G);
+	for i in [1..Size(G)] do;
+		s := 0;
+		for j in [1..Size(G[i])] do;
+			s := s + G[i][j];
+		od;
+		Append(G[i], [-s]);
+	od;
+	Ce := GeneratorMatCodeNC(G, LeftActingDomain(C));
+	Ce!.name := "extended Reed Solomon code";
+    Ce!.lowerBoundMinimumDistance := d;
+    Ce!.upperBoundMinimumDistance := d;
+	IsMDSCode(Ce);
+	return Ce;
+end);
+
+#############################################################################
+##
+#F  RootsCode( <n>, <list> )  . . . code constructed from roots of polynomial
+##
+##  RootsCode (n, rootlist) or RootsCode (n, <powerlist>, F) returns the
+##  code with generator polynomial equal to the least common multiplier of
+##  the minimal polynomials of the n'th roots of unity in the list.
+##  The code has wordlength n
+##
+## rewritten 9-2004
+####################################
+
+InstallMethod(RootsCode, "method for n, rootlist", true, [IsInt, IsList, IsField], 0, 
+function(n, L, F) 
+    local g, C, num, power, q, z, i, j, rootslist, powerlist, max, cc, CC, CCz;
+    L := Set(L);
+    q := Size(Field(L));
+    z := Z(q);
+g:=One(F);
+    if List(L, i->i^n) <> NullVector(Length(L), F) + z^0 then
+		Error("powers must all be n'th roots of unity");
+    fi;
+CC:=CyclotomicCosets(q,q-1);
+CCz:=List([1..Length(CC)],i->List(CC[i],j->z^j));
+##  this is the set of cyclotomic cosets, represented
+##  as powers of a primitive element z
+    powerlist := [];
+for i in [1..Length(L)] do
+ for cc in CCz do
+   if L[i] in cc then
+        Append(powerlist,[cc]);
+   fi;
+ od;
+od;
+########### add a cyclotomic coset into powerlist
+########### if there is an element of L in that coset
+g:=Product([1..Length(powerlist)],i->MinimalPolynomial(F,powerlist[i][1]));
+C:=GeneratorPolCode(g,n,"code defined by roots",F);
+SetRootsOfCode(C,powerlist);
+    rootslist := [];
+# Find the largest number of successive powers for BCH bound
+    max := 1;
+    i := 1;
+    num := Length(powerlist);
+    for z in [2..num] do
+        if powerlist[z] <> powerlist[i] + z-i then
+            max := Maximum(max, z - i);
+            i := z;
+        fi;
+    od;
+    C!.lowerBoundMinimumDistance := Maximum(max, num+1 - i) + 1;
+    SetRootsOfCode(C, rootslist);   
+return C;
+end); 
+
+InstallOtherMethod(RootsCode, "method for n, powerlist, fieldsize", true, 
+	[IsInt, IsList, IsInt], 0, 
+function(n, L, q) 
+	local z; 
+	z := PrimitiveUnityRoot(q,n);
+	L := Set(List(L, i->z^i)); 
+	return RootsCode(n, L, GF(q)); 
+end); 
+
+################# wrong!! 
+#InstallOtherMethod(RootsCode, "method for n, powerlist, field", true, 
+#	[IsInt, IsList, IsField], 0, 
+#function(n, L, F) 
+#	return RootsCode(n, L, Size(F));  
+#end); 
+
+########### correction 8-1-2004
+InstallOtherMethod(RootsCode, "method for n, powerlist, field", true, 
+	[IsInt, IsList], 0, 
+function(n, L) 
+local q,z,F;
+	L := Set(L);
+	q := Characteristic(Field(L));
+#	z := Z(Size(Field(L)));  
+#	F := GF(q);
+	return RootsCode(n, L, q);  
+end); 
+
+#############################################################################
+##
+#F  QRCode( <n> [, <F>] ) . . . . . . . . . . . . . .  quadratic residue code
+##
+
+InstallMethod(QRCode, "modulus, fieldsize", true, [IsInt, IsInt], 0, 
+function(n, q) 
+    local m, b, Q, N, t, g, lower, upper, C, F, coeffs;
+    if Jacobi(q,n) <> 1 then
+        Error("q must be a quadratic residue modulo n");
+    elif not IsPrimeInt(n) then
+        Error("n must be a prime");
+    elif not IsPrimeInt(q) then
+        Error("q must be a prime");
+    fi;
+    m := OrderMod(q,n);
+    F := GF(q^m);
+    b := PrimitiveUnityRoot(q,n);
+    Q := [];
+    N := [1..n];
+    for t in [1..n-1] do
+        AddSet(Q, t^2 mod n);
+    od;
+    for t in Q do
+        RemoveSet(N, t);
+    od;
+    g := Product(Q, 
+      i -> LaurentPolynomialByCoefficients(ElementsFamily(FamilyObj(F)), 
+							[-b^i, b^0], 0)  );
+    coeffs := CoefficientsOfLaurentPolynomial(g); 
+	coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); 
+	C := GeneratorPolCode( LaurentPolynomialByCoefficients( 
+					ElementsFamily(FamilyObj(GF(q))), coeffs, 0),  
+                n, "quadratic residue code", GF(q) );
+    if RootInt(n)^2 = n then
+        lower := RootInt(n);
+    else
+        lower := RootInt(n)+1;
+    fi;
+    if n mod 4 = 3 then
+        while lower^2-lower+1 < n do
+            lower := lower + 1;
+        od;
+    fi;
+    if (n mod 8 = 7) and (q = 2) then
+        while lower mod 4 <> 3 do
+            lower := lower + 1;
+        od;
+    fi;
+    upper := Weight(Codeword(coeffs));
+    C!.lowerBoundMinimumDistance := lower;   
+    C!.upperBoundMinimumDistance := upper;
+    return C;
+end);
+
+InstallOtherMethod(QRCode, "modulus, field", true, [IsInt, IsField], 0, 
+function(n, F) 
+	return QRCode(n, Size(F)); 
+end); 
+
+InstallOtherMethod(QRCode, "modulus", true, [IsInt], 0, 
+function(n) 
+	return QRCode(n, 2); 
+end); 
+
+#############################################################################
+##
+#F  QQRCode( <n> [, <F>] ) . . . . . . . . binary quasi-quadratic residue code
+##
+## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of 
+##  codes from group actions" preprint March 2003 (submitted to IEEE IT)
+##
+
+InstallMethod(QQRCode, "Modulus", true, [IsInt], 0, 
+function(p)
+local G0,G,Q,N,QN,i,C,F,QuadraticResidueSupports,NonQuadraticResidueSupports;
+
+# start local functions:
+QuadraticResidueSupports:=function(p)
+ local L,i;
+ L:=List([1..(p-1)],i->1+Legendre(i,p))/2;
+ return L;
+ end;
+ NonQuadraticResidueSupports:=function(p)
+ local L,i;
+ L:=List([1..(p-1)],i->1-Legendre(i,p))/2;
+ return L;
+ end;
+# end local functions
+
+ F:=GF(2);
+ Q:=[Zero(F)]; 
+ Q:=One(F)*Concatenation(Q,QuadraticResidueSupports(p));
+ N:=[Zero(F)]; 
+ N:=One(F)*Concatenation(N,NonQuadraticResidueSupports(p));
+ QN:=Concatenation(Q,N);
+ G:=BlockMatrix([[1,1,CirculantMatrix(p,Q)],[1,2,CirculantMatrix(p,N)]],1,2);
+ if p mod 4 = 1 then
+	 G0:=List([1..(p-1)],i->G[i]);
+ else
+	G0:=G;
+ fi;
+ C:=GeneratorMatCode(G0,F);
+ C!.DoublyCirculant:=G0;
+ C!.GeneratorMat:=G0;
+ return C;
+end);
+
+#############################################################################
+##
+#F  QQRCodeNC( <n> [, <F>] ) . . . . . . . . binary quasi-quadratic residue code
+##
+## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of 
+##  codes from group actions" preprint March 2003 (submitted to IEEE IT)
+##
+
+InstallMethod(QQRCodeNC, "Modulus", true, [IsInt], 0, 
+function(p)
+local G,G0,Q,N,QN,i,C,F,QuadraticResidueSupports,NonQuadraticResidueSupports;
+
+# start local functions:
+QuadraticResidueSupports:=function(p)
+ local L,i;
+ L:=List([1..(p-1)],i->1+Legendre(i,p))/2;
+ return L;
+ end;
+ NonQuadraticResidueSupports:=function(p)
+ local L,i;
+ L:=List([1..(p-1)],i->1-Legendre(i,p))/2;
+ return L;
+ end;
+# end local functions
+
+ F:=GF(2);
+ Q:=[Zero(F)];
+ #Q:=[]; 
+ Q:=One(F)*Concatenation(Q,QuadraticResidueSupports(p));
+ N:=[Zero(F)];
+ #N:=[]; 
+ N:=One(F)*Concatenation(N,NonQuadraticResidueSupports(p));
+ #QN:=Concatenation(Q,N);
+ G:=BlockMatrix([[1,1,CirculantMatrix(p,N)],[1,2,CirculantMatrix(p,Q)]],1,2);
+ if p mod 4 = 1 then
+	 G0:=List([1..(p-1)],i->G[i]);
+ else
+	G0:=G;
+ fi;
+ C:=GeneratorMatCodeNC(G0,F);
+ C!.DoublyCirculant:=G0;
+ C!.GeneratorMat:=G0;
+ return C;
+end);
+
+#############################################################################
+##
+#F  NullCode( <n> [, <F>] ) . . . . . . . . . . . code consisting only of <0>
+##
+
+InstallMethod(NullCode, "wordlength, field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    local C;
+    C := ElementsCode([NullWord(n,F)], "nullcode", F);
+    C!.lowerBoundMinimumDistance := n;   
+    C!.upperBoundMinimumDistance := n; 
+	SetMinimumDistance(C, n); 
+    SetWeightDistribution(C, Concatenation([1], NullVector(n)));
+    SetAutomorphismGroup(C, SymmetricGroup(n));
+    C!.boundsCoveringRadius := [ n ];
+    SetCoveringRadius(C, n); 
+	IsCyclicCode(C);   # will set all basic linear and cyclic code info 
+	return C;
+end);
+
+InstallOtherMethod(NullCode, "wordlength, fieldsize", true, [IsInt, IsInt], 0, 
+function(n, q) 
+	return NullCode(n, GF(q)); 
+end);
+
+InstallOtherMethod(NullCode, "wordlength", true, [IsInt], 0, 
+function(n) 
+	return NullCode(n, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  FireCode( <G>, <b> )  . . . . . . . . . . . . . . . . . . . . . Fire code
+##
+##  FireCode (G, b) constructs the Fire code that is capable of correcting any
+##  single error burst of length b or less.
+##  G is a primitive polynomial of degree m
+##
+
+InstallMethod(FireCode, "poly, burstlength", true, 
+	[IsUnivariatePolynomial, IsInt], 0, 
+function(G, b) 
+    local m, C, n;
+	G := PolyCodeword(Codeword(G));
+    if CoefficientsRing(DefaultRing(G)) <> GF(2) then 
+        Error("polynomial must be over GF(2)");
+    fi;
+    if Length(Factors(G)) <> 1 then
+        Error("polynomial G must be primitive");
+    fi;
+    m := DegreeOfLaurentPolynomial(G);
+    n := Lcm(2^m-1,2*b-1);
+    C := GeneratorPolCode( G*(Indeterminate(GF(2))^(2*b-1) + One(GF(2))), n,
+                 Concatenation(String(b), " burst error correcting fire code"),
+                 GF(2) );
+    return C;
+end);
+
+#############################################################################
+##
+#F  BinaryGolayCode( )  . . . . . . . . . . . . . . . . . . binary Golay code
+##
+InstallMethod(BinaryGolayCode, "only method", true, [], 0, 
+function() 
+	local p,C;  
+	p := LaurentPolynomialByCoefficients(
+					ElementsFamily(FamilyObj(GF(2))), 
+					Z(2)^0*[1,0,1,0,1,1,1,0,0,0,1,1], 0); 
+	C := CyclicCodeByGenerator(GF(2), 23, Codeword(p));  
+	SetGeneratorPol(C, p);  
+	SetDimension(C, 12); 
+    SetRedundancy(C, 11); 
+    SetSize(C, 2^12); 
+    C!.name := "binary Golay code";
+    C!.lowerBoundMinimumDistance := 7; 
+    C!.upperBoundMinimumDistance := 7; 
+    SetWeightDistribution(C,  
+        [1,0,0,0,0,0,0,253,506,0,0,1288,1288,0,0,506,253,0,0,0,0,0,0,1]);  
+    C!.boundsCoveringRadius := [ 3 ]; 
+    SetIsNormalCode(C, true);  
+    SetIsPerfectCode(C, true); 
+	return C; 
+end);
+
+
+#############################################################################
+##
+#F  TernaryGolayCode( ) . . . . . . . . . . . . . . . . .  ternary Golay code
+##
+InstallMethod(TernaryGolayCode, "only method", true, [], 0, 
+function() 
+   	local p, C;  
+	p := LaurentPolynomialByCoefficients(ElementsFamily(FamilyObj(GF(3))),
+				Z(3)^0*[2,0,1,2,1,1], 0);
+	C := CyclicCodeByGenerator(GF(3), 11, Codeword(p)); 	
+	C!.name := "ternary Golay code"; 
+	SetGeneratorPol(C, p); 
+	SetRedundancy(C, 5); 
+	SetDimension(C, 6); 
+	SetSize(C, 3^6); 
+	C!.lowerBoundMinimumDistance := 5; 
+	C!.upperBoundMinimumDistance := 5; 
+	SetWeightDistribution(C, [1,0,0,0,0,132,132,0,330,110,0,24]); 
+    SetIsNormalCode(C, true); 
+    SetIsPerfectCode(C, true);  
+	return C; 
+end);
+
+
+#############################################################################
+##
+#F   EvaluationCode( <P>, <L>, <R> )
+##
+##   P is a list of n points in F^r
+##   L is a list of rational functions in r variables
+##   EvaluationCode returns the image of the evaluation map f->[f(P1),...,f(Pn)],
+##   as f ranges over the vector space of functions spanned by L.
+##   The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where
+##   f is in L and P={P1,..,Pn}
+##
+InstallMethod(EvaluationCode,"points, basis functions, multivariate poly ring", true, 
+[IsList, IsList, IsRing], 0, 
+function(P,L,R)
+ local i, G, n, C, j, k, varsn,varsd, vars, F, ValueExtended;
+#######################
+  ValueExtended:=function(f,vars,pt)
+   local df, nf;
+   df:=DenominatorOfRationalFunction(f*vars[1]^0);
+   nf:=NumeratorOfRationalFunction(f*vars[1]^0);
+   #if (varsn=[] and varsd=[]) then return f; fi;
+  return Value(nf,vars,pt)*Value(df,vars,pt)^(-1);
+  end;
+#######################
+ vars:=IndeterminatesOfPolynomialRing(R);
+ F:=CoefficientsRing(R);
+ n:=Length(P);
+ k:=Length(L);
+ G:=ShallowCopy(NullMat(k,n,F));
+ for i in [1..k] do
+  for j in [1..n] do
+       G[i][j]:=ValueExtended(L[i],vars,P[j]);
+  od;
+ od;
+ C:=GeneratorMatCode(G," evaluation code",F);
+ C!.EvaluationMat:=ShallowCopy(G);
+ C!.basis:=L;
+ C!.points:=P;
+ C!.ring:=R;
+ return C;
+end);
+
+#############################################################################
+##
+#F    GeneralizedReedSolomonCode( <P>, <k>, <R> )
+##
+##   P is a list of n points in F
+##   k is an integer
+##   GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)],
+##   as f ranges over the vector space of polynomials in 1 variable
+##   of degree < k in the ring R. 
+##   The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where
+##   f = x^j, j<k, and P={P1,..,Pn}
+##
+InstallMethod(GeneralizedReedSolomonCode,"points, basis functions, univariate poly ring", true, 
+[IsList, IsInt, IsRing], 0, 
+function(P,k,R)
+local p, L, vars, i, F, f, x, C, R0, P0, G, j, n;
+ n:=Length(P);
+ F:=CoefficientsRing(R); 
+ G:=NullMat(k,n,F);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1];
+ L:=List([0..(k-1)],i->(x^i));
+ for i in [1..k] do
+  for j in [1..n] do
+       G[i][j]:=Value(L[i],vars,[P[j]]);
+  od;
+ od;
+ C:=GeneratorMatCode(G," generalized Reed-Solomon code",F);
+ C!.GeneratorMat:=ShallowCopy(G);
+ C!.degree:=k;
+ C!.points:=P;
+ C!.ring:=R;
+ SetSpecialDecoder(C, GeneralizedReedSolomonDecoder);   
+ return C;
+end);
+
+#############################################################################
+##
+#F    GeneralizedReedSolomonCode( <P>, <k>, <R> , <wts> )
+##
+##   P is a list of n points in F
+##   k is an integer
+##   GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)],
+##   as f ranges over the vector space of polynomials in 1 variable
+##   of degree < k in the ring R. 
+##   The output is the code whose generator matrix has rows (w1*f(P1),...,wn*f(Pn)) where
+##   f = x^j, j<k, P={P1,..,Pn}, wts=[w1,...,wn] \in F^n
+##
+InstallOtherMethod(GeneralizedReedSolomonCode,"points, basis functions, univariate poly ring", true, 
+[IsList, IsInt, IsRing, IsList], 0, 
+function(P,k,R,wts)
+local p, L, vars, i, F, f, x, C, R0, P0, G, j, n;
+ n:=Length(P);
+ F:=CoefficientsRing(R); 
+ G:=NullMat(k,n,F);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1];
+ L:=List([0..(k-1)],i->(x^i));
+ for i in [1..k] do
+  for j in [1..n] do
+       G[i][j]:=wts[j]*Value(L[i],vars,[P[j]]);
+  od;
+ od;
+ C:=GeneratorMatCode(G," weighted generalized Reed-Solomon code",F);
+ C!.GeneratorMat:=ShallowCopy(G);
+ C!.degree:=k;
+ C!.points:=P;
+ C!.weights:=wts;
+ C!.ring:=R;
+#SetSpecialDecoder(C, GeneralizedReedSolomonDecoder);   
+ return C;
+end);
+
+#############################################################################
+##
+#F    OnePointAGCode( <crv>, <pts>, <m>, <R> )
+##
+## R = F[x,y] is a polynomial ring over a finite field F
+## crv is a polynomial in R representing a plane curve
+## pts is a list of points on the curve
+## Computes the AG codes associated to the RR space
+## L(m*infinity) using Proposition VI.4.1 in Stichtenoth
+##
+InstallMethod(OnePointAGCode,
+"polynomial defining planar curve, points, multiplicity, univariate poly ring", 
+true, [IsPolynomial, IsList, IsInt, IsRing], 0, 
+function(crv,pts,m,R)
+ local F,f,indets,pt,i,j,G,C,degx,degy,basisLD,xx,yy,allpts;
+ indets := IndeterminatesOfPolynomialRing(R);
+ xx:=indets[1]; yy:=indets[2];
+ F:=CoefficientsRing(R);
+ allpts:=AffinePointsOnCurve(crv,R,F);
+ if not(IsSubset(allpts,pts)) then
+   Error("The points given must be on the curve\n");
+ fi;
+ degx:=DegreeIndeterminate(crv,xx);
+ degy:=DegreeIndeterminate(crv,yy);
+ basisLD:=[];
+ for i in [0..(degx-1)] do
+  for j in [0..m] do
+   if degx*j+degy*i<m+1 then
+    basisLD:=Concatenation([xx^i*yy^j],basisLD);
+   fi;
+  od;
+ od;
+ G:=List(pts,pt->List(basisLD,f->Value(f,indets,pt)));
+ C:=GeneratorMatCode(TransposedMat(G)," one-point AG code",F);
+ C!.GeneratorMat:=ShallowCopy(TransposedMat(G));
+ C!.multiplicity:=m;
+ C!.points:=pts;
+ C!.curve:=crv;
+ C!.ring:=R;
+ return C;
+end);
+
+#############################################################################
+##
+#F    FerreroDesignCode( <P>, <m> )  ... code from a Ferrero design
+##
+##
+#InstallMethod(FerreroDesignCode,
+#"binary linear code constructed using a Ferrero design", 
+#true, [IsList, IsInt], 0, 
+#function( P,m)
+# **Requires the GAP package SONATA**
+# Constructs binary linear code arising from the incdence
+# matrix of a design associated to a "Ferrero pair" arising
+# from a fixed-point-free (fpf) automorphism groups and Frobenius group.
+# The designs that we are looking at (from a Frobenius kernel
+# of order v and a Frobenius complement of order k) have
+# v*(v-1)/k distinct blocks and they are all of size k.
+# Moreover each of the v points occurs in exactly v-1distinct
+# blocks. Hence the rows and the columns of the incidence
+# matrix M of the design are always of constant weight.
+# Take a Frobenius (G,+) group with kernel K and complement H.
+# Consider the design D with point set K and block set
+# { a^H + b | a, b in K, a <> 0 }.
+# Here a^H denotes the orbit of a under conjugation by elements
+# of H. Every planar near-ring design of type "*" can be obtained
+# in this way from groups. A group K together with a group of
+# automorphism H of K such that the semidirect product KH is a
+# Frobenius group with complement H is called a Ferrero pair (K, H)
+# in SONATA. 
+#
+# INPUT: P is a list of prime powers describing an abelian group G
+#        m > 0 is an integer such that G admits a cyclic fpf 
+#        automorphism group of size m 
+# This means that for all q = p^k in P, OrderMod( p, m ) must divide q 
+# (see the SONATA documentation for FpfAutomorphismGroupsCyclic).
+# OUTPUT: The binary linear code whose generator matrix is the
+#         incidence matrix of a design associated to a "Ferrero pair" arising
+#         from the fixed-point-free (fpf) automorphism group of G.
+# The pair (H,K) is called a Ferraro pair and the semidirect product KH is a
+# Frobenius group with complement H.
+# AUTHORS: Peter Mayr and David Joyner
+#local C, f, H, K, M, D;
+# LoadPackage("sonata");
+# f := FpfAutomorphismGroupsCyclic( P, m );
+# K := f[2]; 
+# H := Group( f[1][1] );
+# D := DesignFromFerreroPair( K, H, "*" );
+# M := IncidenceMat( D );
+# C:=GeneratorMatCode(M*Z(2), GF(2));
+#return C;
+#end);
+
+#Having trouble getting GUAVA to load without errors if
+#SONATA is not installed. Uncomment this and reload if you 
+#have SONATA.
+#FerreroDesignCode:=function( P,m)
+#local C, f, H, K, M, D;
+# LoadPackage("sonata");
+# f := FpfAutomorphismGroupsCyclic( P, m );
+# K := f[2]; 
+# H := Group( f[1][1] );
+# D := DesignFromFerreroPair( K, H, "*" );
+# M := IncidenceMat( D );
+# C:=GeneratorMatCode(M*Z(2), GF(2));
+#return C;
+#end;
+
+#############################################################################
+##
+#F  QuasiCyclicCode( <G>, <s>, <F> ) . . . . . . . . . . . quasi cyclic code
+##
+##  QuasiCyclicCode ( <G>, <s>, <F> ) generates a rate 1/m quasi-cyclic
+##  codes. Note that <G> is a list of univariate polynomial and m is the
+##  cardinality of this list. The integer s is the size of the circulant
+##  and it is not necessarily equal to the code dimension, i.e. k <= s.
+##  The associated field is <F>.
+##
+InstallMethod(QuasiCyclicCode, "linear quasi-cyclic code", true,
+	[IsList, IsInt, IsField], 0,
+function( L1, s, F )
+	#
+	# A rate 1/m quasi-cyclic code contains m circulant matrices, each of
+	# the same size, and in this case they are all s x s circulant matrices.
+	# Each circulant can be specified by a univariate polynomial.
+	#
+	local i, m, v, M, C;
+
+	# Determine the cardinality of the list L1
+	m:=Size(L1);
+	if (m < 2) then
+		Error("The cardinality of <G> must be at least 2\n");
+	fi;
+
+	# Make sure that all the list elements are univariate polynomials
+	for i in [1..m] do;
+		if (IsUnivariatePolynomial(L1[i]) = false) then
+			Error("All list elements must be univariate polynomials\n");
+		fi;
+		if (Degree(L1[i]) >= s) then
+			Error("The degree of the polynomial must be less than s\n");
+		fi;
+	od;
+
+	# Convert each univariate polynomial into a circulant matrix and
+	# concatenate them to generate a generator matrix
+	M:=[];
+	for i in [1..m] do;
+		v:=ShallowCopy( CoefficientsOfUnivariatePolynomial(L1[i]) );
+		Append( v, List([1..(s - (Degree(L1[i])+1))], i->Zero(F)) );
+		M:=Concatenation( M, CirculantMatrix(s, v) );
+	od;
+	C := GeneratorMatCode( TransposedMat(M), F );
+	C!.name := "quasi-cyclic code";
+	return C;
+end);
+
+InstallOtherMethod(QuasiCyclicCode, "binary linear quasi-cyclic code",
+	true, [IsList, IsInt], 0,
+function( L1, s )
+
+	local i, j, m, a, t, v, L2, LUT;
+
+	LUT:=[ "000", "001", "010", "011", "100", "101", "110", "111" ];
+
+	# Determine the cardinality of the list L1
+	m := Size(L1);
+	if (m < 2) then
+		Error("The cardinality of <G> must be at least 2\n");
+	fi;
+
+	L2 := [];
+	for i in [1..m] do;
+		if (IsInt(L1[i]) = false) then
+			Error("All list elements must be in octal\n");
+		fi;
+		a := String(L1[i]);
+		v := [];
+		for j in [1..Length(a)] do;
+			t := INT_CHAR(a[j]) - 48;	# Conversion of ASCII character to integer
+			if (t > 7) then
+				Error("All list elements must be in octal\n");
+			fi;
+			Append(v, LUT[t+1]);
+		od;
+		Append(L2, [ReciprocalPolynomial(PolyCodeword(Codeword(v)))]);
+	od;
+
+	return QuasiCyclicCode( L2, s, GF(2) );
+end);
+
+#####################################################################
+##
+#F CyclicMDSCode( <q>, <m>, <k> ) . . . . . . . . . cyclic MDS code
+##
+## Construct a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m)
+##
+InstallMethod(CyclicMDSCode, "method for linear code", true,
+	[IsInt, IsInt, IsInt], 0,
+function(q, m, k)
+	local i, j, l, x, a, r, g, G, F, CS, C, dmin;
+	
+	if (k < 1) or (k > q^m + 1) then
+		Error("Incorrect parameter, 1 <= k <= q^m+1.\n");
+	fi;
+	if IsEvenInt(k) and IsOddInt(q^m) then
+		Error("Cannot construct such code, k must be odd for odd field size.\n");
+	fi;
+
+	F    := GF(q^m);
+    x    := Indeterminate(F, "x");
+    a    := PrimitiveUnityRoot(F, q^m+1);   # Primitive (q^m + 1)-st root of unity
+    CS   := CyclotomicCosets(q^m, q^m + 1);
+	dmin := q^m - k + 2;
+	
+	# R. Roth's book (Prob. 8.15, pp. 262)
+    # If q^m is odd, there exists [q^m + 1, k, q^m - k + 2] cyclic MDS codes for
+    # odd values of k in the range 1 <= k <= q^m. This is because the cyclotomic
+    # cosets of q^m mod q^m + 1 are
+    #    { 0, [1,q^m], [2,q^m-2], ..., [(q^m-1)/2, (q^m+3)/2], (q^m+1)/2 }.
+    # There are two single elements in the above cosets, { 0 } and { (q^m+1)/2 }.
+    # If k is odd, dmin = q^m - k + 2 is even and delta = dmin-1 is odd (BCH bound).
+    # This can be easily obtained by including either { 0 } or { (q^m+1)/2 }.
+    # On the other hand, if k is even, dmin is odd and delta is even. With reference
+    # to the above cyclotomic cosets, we cannot have exactly delta consecutive integers.
+    # (Does this definitely mean this kind of code cannot be constructed??)
+    #
+    # If q^m is even, there exists [q^m + 1, k, q^m - k + 2] cyclic MDS codes for
+    # any value of k in the range 1 <= k <= q^m+1. This is because the cyclotomic
+    # cosets of q^m mod q^m + 1 are
+    #    { 0, [1,q^m], [2,q^m-2], ..., [q^m/2, 1 + q^m/2] }.
+    # Consequently, we can easily construct a set of odd or even consecutive integers
+    # using the cyclotomic cosets above.
+
+	if IsEvenInt(k) then
+		g := (x + a^0);
+		r := [ a^0 ];
+		for i in [1..((dmin-2)/2)] do;
+			g := g * (x + a^(CS[i+1][1])) * (x + a^(CS[i+1][2]));
+			r := Concatenation(r, [ a^(CS[i+1][1]), a^(CS[i+1][2]) ]);
+		od;
+	else
+		if IsOddInt(q^m) then
+			g := (x + a^(CS[Size(CS)][1]));
+			r := [ a^(CS[Size(CS)][1]) ];
+			j := Size(CS)-1;
+			l := (dmin-2)/2;
+		else
+			g := 1;
+			r := [];
+			j := Size(CS);
+			l := (dmin-1)/2;
+		fi;
+		for i in [0..l-1] do;
+			g := g * (x + a^(CS[j-i][1])) * (x + a^(CS[j-i][2]));
+			r := Concatenation(r, [ a^(CS[j-i][1]), a^(CS[j-i][2]) ]);
+		od;
+	fi;
+
+	G := GeneratorMatrixFromPoly(g, q^m + 1);
+	C := GeneratorMatCodeNC(G, F);
+	
+	C!.name := "MDS code";
+	
+	# We know these bounds as it is an MDS code
+	C!.lowerBoundMinimumDistance := dmin;
+	C!.upperBoundMinimumDistance := dmin;
+	
+	# Tell it that it is a cyclic code
+	SetIsCyclicCode(C, true);
+	SetGeneratorPol(C, g);
+
+	# Also tell it that it is an MDS code
+	IsMDSCode(C);	
+	
+	return C;
+end);
+
+#######################################################################
+##
+#F FourNegacirculantSelfDualCode( <ax>, <bx>, <k> ) . . self-dual code
+##
+## Construct a [2*k, k, d] self-dual code over F using Harada's
+## construction. See:
+##
+##    1. M. Harada and T. Nishimura, "An extremal singly even self
+##       dual code of length 88", Advances in Mathematics of
+##       Communications, vol 1, no. 2, pp. 261--267, 2007
+##
+##    2. M. Harada, W. Holzmann, H. Kharaghani and M. Khorvash,
+##       "Extremal ternary self-dual codes constructed from
+##       negacirculant matrices", Graph and Combinatorics, vol 23,
+##       pp. 401--417, 2007
+##
+##    3. M. Harada, "An extremal doubly even self-dual code of
+##       length 112", preprint
+##
+## The generator matrix of the code has the following form:
+##
+##        -                   -
+##        |       :   A  :  B  |
+##    G = |   I   :------:-----|
+##        |       : -B^T : A^T |
+##        -                   -   
+##
+## Note that the matrices A, B, A^T and B^T are k/2 * k/2
+## negacirculant matrices.
+##
+__G_FourNegacirculantSelfDualCode := function(ax, bx, k)
+	local i, v, m, x, FA, FB, A, AT, B, BT, G;
+
+	if IsOddInt(k) then
+		Error("k must be an even integer\n");
+	fi;
+
+	m := k/2;
+	
+	# Determine field size
+	FA := Field(VectorCodeword(Codeword(ax)));
+	FB := Field(VectorCodeword(Codeword(bx)));
+    if FA <> FB then
+		Error("Polynomials a(x) and b(x) must have elements from the same field\n");
+	fi;
+
+	x := Indeterminate(FA);
+
+	v := MutableCopyMat( CoefficientsOfUnivariatePolynomial(ax) );
+    Append( v, List([1..(m - (Degree(ax)+1))], i->Zero(FA)) );
+	A := NegacirculantMatrix(m, v*One(FA));
+	AT:= TransposedMat(A);
+
+	v := MutableCopyMat( CoefficientsOfUnivariatePolynomial(bx) );
+    Append( v, List([1..(m - (Degree(bx)+1))], i->Zero(FA)) );
+	B := NegacirculantMatrix(m, v*One(FA));
+	BT:= TransposedMat(-B);
+
+	G := IdentityMat(k, One(FA));
+   
+	# [ A | B ]
+	for i in [1..m] do;
+		Append(G[i], A[i]); 
+		Append(G[i], B[i]);
+	od;
+
+	# [ B^T | A^T ]
+	for i in [1..m] do;
+		Append(G[m+i], BT[i]); 
+		Append(G[m+i], AT[i]);
+	od;
+	
+	return G;
+end;
+
+InstallMethod(FourNegacirculantSelfDualCode, "method for binary linear code", true,
+	[IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt], 0,
+function(ax, bx, k)
+	local G, C, F;
+
+	# Obtain the generator matrix
+	G := __G_FourNegacirculantSelfDualCode(ax, bx, k);
+	F := Field(VectorCodeword(Codeword(ax)));
+	
+	C := GeneratorMatCode(G, "four-negacirculant self-dual code", F);
+	C!.GeneratorMat := ShallowCopy(G);
+
+	if (IsSelfDualCode(C) = false) then
+		Error("Polynomials a(x) and b(x) do not produce a self-dual code\n");
+	fi;
+
+	return C;
+end);
+
+# Faster version - no minimum distance and covering radius estimation
+InstallMethod(FourNegacirculantSelfDualCodeNC, "method for binary linear code", true,
+	[IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt], 0,
+function(ax, bx, k)
+	local G, C, F;
+
+	# Obtain the generator matrix
+	G := __G_FourNegacirculantSelfDualCode(ax, bx, k);
+	F := Field(VectorCodeword(Codeword(ax)));
+	
+	C := GeneratorMatCodeNC(G, F);
+	C!.name := "four-negacirculant self-dual code";
+	C!.GeneratorMat := ShallowCopy(G);
+    C!.lowerBoundMinimumDistance := 1;   
+    C!.upperBoundMinimumDistance := k+1;
+    C!.boundsCoveringRadius := [ 0, WordLength(C) ];
+
+	if (IsSelfDualCode(C) = false) then
+		Error("Polynomials a(x) and b(x) do not produce a self-dual code\n");
+	fi;
+	
+	return C;
+end);
+
diff --git a/lib/codeman.gd b/lib/codeman.gd
new file mode 100644
index 0000000..abddd82
--- /dev/null
+++ b/lib/codeman.gd
@@ -0,0 +1,235 @@
+#############################################################################
+##
+#A  codeman.gd              GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for manipulating codes
+##
+#H  @(#)$Id: codeman.gd,v 1.3 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codeman_gd") :=
+    "@(#)$Id: codeman.gd,v 1.3 2003/02/12 03:49:16 gap Exp $";
+
+#############################################################################
+##
+#F  DualCode( <C> ) . . . . . . . . . . . . . . . . . . . .  dual code of <C>
+##
+DeclareOperation("DualCode", [IsCode]); 
+
+#############################################################################
+##
+#F  AugmentedCode( <C> [, <L>] )  . . .  add words to generator matrix of <C>
+##
+DeclareOperation("AugmentedCode", [IsCode, IsObject]); 
+
+#############################################################################
+##
+#F  EvenWeightSubcode( <C> )  . . .  code of all even-weight codewords of <C>
+##
+DeclareOperation("EvenWeightSubcode", [IsCode]); 
+
+#############################################################################
+##
+#F  ConstantWeightSubcode( <C> [, <w>] )  .  all words of <C> with weight <w>
+##
+DeclareOperation("ConstantWeightSubcode", [IsCode, IsInt]);  
+
+#############################################################################
+##
+#F  ExtendedCode( <C> [, <i>] ) . . . . . code with added parity check symbol
+##
+DeclareOperation("ExtendedCode", [IsCode, IsInt]); 
+
+#############################################################################
+##
+#F  ShortenedCode( <C> [, <L>] )  . . . . . . . . . . . . . .  shortened code
+##
+DeclareOperation("ShortenedCode", [IsCode, IsList]);  
+
+#############################################################################
+##
+#F  PuncturedCode( <C> [, <list>] ) . . . . . . . . . . . . .  punctured code
+##
+##  PuncturedCode(C [, remlist]) punctures a code by leaving out the
+##  coordinates given in list remlist. If remlist is omitted, then
+##  the last coordinate will be removed.
+##
+DeclareOperation("PuncturedCode", [IsCode, IsList]); 
+
+#############################################################################
+##
+#F  ExpurgatedCode( <C>, <L> )  . . . . .  removes codewords in <L> from code
+##
+##  The usual way of expurgating a code is removing all words of odd weight.
+##
+DeclareOperation("ExpurgatedCode", [IsCode, IsList]); 
+
+#############################################################################
+##
+#F  AddedElementsCode( <C>, <L> ) . . . . . . . . . .  adds words in list <L>
+##
+DeclareOperation("AddedElementsCode", [IsCode, IsList]); 
+
+#############################################################################
+##
+#F  RemovedElementsCode( <C>, <L> ) . . . . . . . . removes words in list <L>
+##
+DeclareOperation("RemovedElementsCode", [IsCode, IsList]);  
+
+#############################################################################
+##
+#F  LengthenedCode( <C> [, <i>] ) . . . . . . . . . . . . . .  lengthens code
+##
+DeclareOperation("LengthenedCode", [IsCode, IsInt]); 
+
+#############################################################################
+##
+#F  ResidueCode( <C> [, <w>] )  . .  takes residue of <C> with respect to <w>
+##
+##  If w is omitted, a word from C of minimal weight is used
+##
+DeclareOperation("ResidueCode", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  ConstructionBCode( <C> )  . . . . . . . . . . .  code from construction B
+##
+##  Construction B (See M&S, Ch. 18, P. 9) assumes that the check matrix has
+##  a first row of weight d' (the dual distance of C). The new code has a
+##  check matrix equal to this matrix, but with columns removed where the
+##  first row is 1.
+##
+DeclareOperation("ConstructionBCode", [IsCode]); 
+
+#############################################################################
+##
+#F  ConstructionB2Code( <C> )  . . . . . . . . . .  code from construction B2
+##
+##  Construction B2 is mixtures of shortening and puncturing. Given an
+##  [n,k,d] code which has dual code of minimum distance s, we obtain
+##  an [n-s, k-s+2j+1, d-2j] code for each j with 2j+1 < s.
+##  
+##  For more details, see A. Brouwer (1998), "Bounds on the size of linear
+##  codes,", in Handbook of Coding Theory, V. S. Pless and W. C. Huffmann
+##  ed., pp. 311
+##
+##  added by CJ, April 2006
+##
+DeclareOperation("ConstructionB2Code", [IsCode]);
+
+#############################################################################
+##
+#F  SubCode( <C>, [ <s> ] ) . . . . . . . . . . . . . . . . . . subcode of C
+##
+##  Given C, an [n,k,d] code, return a subcode of C with dimension k-s.
+##  If s is not given, it is assumed 1.
+##
+##  added by CJ, April 2006
+DeclareOperation("SubCode", [IsCode, IsInt]);
+
+#############################################################################
+##
+#F  PermutedCode( <C>, <P> )  . . . . . . . permutes coordinates of codewords
+##
+DeclareOperation("PermutedCode", [IsCode, IsPerm]); 
+
+#############################################################################
+##
+#F  StandardFormCode( <C> ) . . . . . . . . . . . . standard form of code <C>
+##
+DeclareOperation("StandardFormCode", [IsCode]); 
+
+#############################################################################
+##
+#F  ConversionFieldCode( <C> )  . . . . . converts code from GF(q^m) to GF(q)
+##
+DeclareOperation("ConversionFieldCode", [IsCode]); 
+
+#############################################################################
+##
+#F  CosetCode( <C>, <f> ) . . . . . . . . . . . . . . . . . . .  coset of <C>
+##
+DeclareOperation("CosetCode", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  DirectSumCode( <C1>, <C2> ) . . . . . . . . . . . . . . . . .  direct sum
+##
+##  DirectSumCode(C1, C2) creates a (n1 + n2 , M1 M2 , min{d1 , d2} ) code
+##  by adding each codeword of the second code to all the codewords of the
+##  first code.
+##
+DeclareOperation("DirectSumCode", [IsCode, IsCode]); 
+
+#############################################################################
+##
+#F  ConcatenationCode( <C1>, <C2> ) . . . . .  concatenation of <C1> and <C2>
+##
+DeclareOperation("ConcatenationCode", [IsCode, IsCode]); 
+
+#############################################################################
+##
+#F  DirectProductCode( <C1>, <C2> ) . . . . . . . . . . . . .  direct product
+##
+##  DirectProductCode constructs a new code from the direct product of two
+##  codes by taking the Kronecker product of the two generator matrices
+##
+DeclareOperation("DirectProductCode", [IsCode, IsCode]); 
+
+#############################################################################
+##
+#F  UUVCode( <C1>, <C2> ) . . . . . . . . . . . . . . .  u | u+v construction
+##
+##  Uuvcode(C1, C2) # creates a ( 2n , M1 M2 , d = min{2 d1 , d2} ) code
+##  with codewords  (u | u + v) for all u in C1 and v in C2
+##
+DeclareOperation("UUVCode", [IsCode, IsCode]);  
+
+#############################################################################
+##
+#F  UnionCode( <C1>, <C2> ) . . . . . . . . . . . . .  union of <C1> and <C2>
+##
+DeclareOperation("UnionCode", [IsCode, IsCode]); 
+
+#############################################################################
+##
+#F  IntersectionCode( <C1>, <C2> )  . . . . . . intersection of <C1> and <C2>
+## 
+DeclareOperation("IntersectionCode", [IsCode, IsCode]); 
+
+#############################################################################
+##
+#F  ConstructionXCode( <C>, <A> ) ... code from Construction X
+##
+##
+DeclareOperation("ConstructionXCode", [IsList, IsList]);
+
+#############################################################################
+##
+#F  ConstructionXXCode( <C1>, <C2>, <C3>, <A1>, <A2>  ) ... code from Construction XX
+##
+##
+DeclareOperation("ConstructionXXCode", [IsCode, IsCode, IsCode, IsCode, IsCode]);
+
+#########################################################################
+##
+#F BZCode( <O>, <I> ) . . . . . . . . . . Blokh Zyablov concatenated code
+##
+## Given a set of outer codes O_i=[N, K_i, D_i] over GF(q^e_i), where
+## i=1,2,...,t and a set of inner codes I_i=[n, k_i, d_i] over GF(q),
+## BZCode returns a multilevel concatenated code with parameter
+## [ n*N, e_1*K_1 + e_2*K_2 + ... + e_t*K_t, min(d_i * D_i)] over GF(q).
+##
+## Note that the set inner codes must satisfy chain condition, i.e.
+## I_1=[n,k_1,d_1] < I_2=[n,k_2,d_2] < ... < I_t=[n,k_t,d_t] where
+## 0=k_0 < k_1 < k_2 < ... < k_t.
+##
+## The dimensions of the inner code must satisfy the condition
+## e_i = k_i - k_{i-1}, where GF(q^e_i) is the field of the ith
+## outer code.
+##
+DeclareOperation("BZCode", [IsList, IsList]);
+
+DeclareOperation("BZCodeNC", [IsList, IsList]);
+
diff --git a/lib/codeman.gi b/lib/codeman.gi
new file mode 100644
index 0000000..e9f04d9
--- /dev/null
+++ b/lib/codeman.gi
@@ -0,0 +1,2307 @@
+############################################################################
+##
+#A  codeman.gi              GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for manipulating codes
+##
+#H  @(#)$Id: codeman.gi,v 1.5 2003/02/12 03:49:16 gap Exp $
+##
+## ConstantWeightSubcode revised 10-23-2004
+##
+## added 12-207 (CJ): ConstructionXCode, ConstructionXXCode, BZCode functions
+##
+Revision.("guava/lib/codeman_gi") :=
+    "@(#)$Id: codeman.gi,v 1.5 2003/02/12 03:49:16 gap Exp $";
+
+#############################################################################
+##
+#F  DualCode( <C> ) . . . . . . . . . . . . . . . . . . . .  dual code of <C>
+##
+
+InstallMethod(DualCode, "generic method for codes", true, [IsCode], 0, 
+function(C) 
+	local Cnew; 
+	if IsCyclicCode(C) or IsLinearCode(C) then  
+		return DualCode(C); 
+	else 
+		Cnew := CheckMatCode(BaseMat(VectorCodeword(AsSSortedList(C))), 
+							"dual code", LeftActingDomain(C));
+		Cnew!.history := History(C); 
+		return(Cnew);
+	fi;
+end);
+
+InstallMethod(DualCode, "method for linear codes", true, [IsLinearCode], 0, 
+function(C) 
+	local C1, Pr, n, newwd, wd, oldrow, newrow, i, j, q;
+	if IsCyclicCode(C) then  
+		return DualCode(C); 
+	elif HasGeneratorMat(C) then 
+		C1 := CheckMatCode(GeneratorMat(C), "dual code", LeftActingDomain(C)); 
+	elif HasCheckMat(C) then 
+		C1 := GeneratorMatCode(CheckMat(C), "dual code", LeftActingDomain(C)); 
+	else
+		Error("No GeneratorMat or CheckMat for C");  
+	fi;
+	if HasWeightDistribution(C) then 
+		n := WordLength(C);  
+		wd := WeightDistribution(C);  
+		q := Size(LeftActingDomain(C)) - 1;
+		newwd := [Sum(wd)];  
+		oldrow := List([1..n+1],i->1);  
+		newrow := []; 
+		for i in [2..n+1] do 
+            newrow[1] := Binomial(n, i-1) * q^(i-1);
+            for j in [2..n+1] do
+                newrow[j] := newrow[j-1] - q * oldrow[j] - oldrow[j-1];
+            od;
+            newwd[i] := newrow * wd;
+            oldrow := ShallowCopy(newrow);
+        od;
+        SetWeightDistribution(C1, newwd / ((q+1) ^ Dimension(C)) );
+        Pr := PositionProperty(WeightDistribution(C1){[2..n+1]}, i-> i <> 0);
+        if Pr = false then
+            Pr := n;
+        fi;
+        C1!.lowerBoundMinimumDistance := Pr;
+        C1!.upperBoundMinimumDistance := Pr;
+    fi;
+    C1!.history := History(C);
+    return C1;
+end);
+
+InstallMethod(DualCode, "method for self dual codes", true,[IsSelfDualCode], 0, 
+function(C) 
+	return ShallowCopy(C); 
+end); 
+
+InstallMethod(DualCode, "method for cyclic codes", true, [IsCyclicCode], 0, 
+function(C) 
+	local C1, r, n, Pr, wd, q, newwd, oldrow, newrow, i, j;  
+    if HasGeneratorPol(C) then
+		r := ReciprocalPolynomial(GeneratorPol(C),Redundancy(C));
+		r := r/LeadingCoefficient(r);
+		C1 := CheckPolCode(r, WordLength(C), "dual code", LeftActingDomain(C));
+	elif HasCheckPol(C) then
+		r := ReciprocalPolynomial(CheckPol(C),Dimension(C));
+		r := r/LeadingCoefficient(r);
+		C1 := GeneratorPolCode(r, WordLength(C), "dual code", 
+								LeftActingDomain(C));
+	else 
+		Error("No GeneratorPol or CheckPol for C"); 
+	fi;
+	if HasWeightDistribution(C) then
+		n := WordLength(C);
+		wd := WeightDistribution(C);
+		q := Size(LeftActingDomain(C)) - 1;
+		newwd := [Sum(wd)];
+		oldrow := List([1..n+1], i->1);
+		newrow := [];
+		for i in [2..n+1] do
+			newrow[1] := Binomial(n, i-1) * q^(i-1);
+			for j in [2..n+1] do
+				newrow[j] := newrow[j-1] - q * oldrow[j] - oldrow[j-1];
+			od;
+            newwd[i] := newrow * wd;
+			oldrow := ShallowCopy(newrow);
+		od;
+		SetWeightDistribution(C1, newwd / ((q+1) ^ Dimension(C)));
+	    Pr := PositionProperty(WeightDistribution(C1){[2..n+1]}, i-> i <> 0);
+	    if Pr = false then
+	         Pr := n;
+	    fi;
+	    C1!.lowerBoundMinimumDistance := Pr;
+	    C1!.upperBoundMinimumDistance := Pr;
+	fi;
+	C1!.history := History(C);
+	return C1;
+end); 
+
+
+#############################################################################
+##
+#F  AugmentedCode( <C> [, <L>] )  . . .  add words to generator matrix of <C>
+##
+
+InstallMethod(AugmentedCode, "unrestricted code and codeword list/object", 
+	true, [IsCode, IsObject], 0, 
+function (C, L) 
+	if IsLinearCode(C) then 
+		return AugmentedCode(C, L); 
+	else 
+		Error("argument must be a linear code"); 
+	fi; 
+end); 
+
+InstallOtherMethod(AugmentedCode, "unrestricted code", true, [IsCode], 0, 
+function(C) 
+	return AugmentedCode(C, NullMat(1, WordLength(C), LeftActingDomain(C)) 
+								+ One(LeftActingDomain(C))); 
+end); 
+
+InstallMethod(AugmentedCode, "linear code and codeword object/list", 
+	true, [IsCode, IsObject], 0, 
+function (C, L) 
+    local Cnew;  
+	L := VectorCodeword(Codeword(L, C) );
+	if not IsList(L[1]) then
+		L := [L];
+	else
+		L := Set(L);
+	fi;
+    Cnew := GeneratorMatCode(BaseMat(Concatenation(GeneratorMat(C),L)),
+                 Concatenation("code, augmented with ", String(Length(L)),
+                         " word(s)"), LeftActingDomain(C));
+    if Length(GeneratorMat(Cnew)) > Dimension(C) then
+        Cnew!.upperBoundMinimumDistance := Minimum(
+                 UpperBoundMinimumDistance(C),
+                 Minimum(List(L, l-> Weight(Codeword(l)))));
+        Cnew!.history := History(C);
+        return Cnew;
+    else
+        return ShallowCopy(C);
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  EvenWeightSubcode( <C> )  . . .  code of all even-weight codewords of <C>
+##
+
+InstallMethod(EvenWeightSubcode, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(Cold) 
+	local C, n, Els, E, d, i, s, q, wd;  
+
+	if IsCyclicCode(Cold) or IsLinearCode(Cold) then    
+		return EvenWeightSubcode(Cold); 
+	fi;  
+
+    q := Size(LeftActingDomain(Cold));
+    n := WordLength(Cold);
+    Els := AsSSortedList(Cold); 
+    E := []; 
+	s := 0;
+    for i in [1..Size(Cold)] do
+        if IsEvenInt(Weight(Els[i])) then
+            Append(E, [Els[i]]);
+            s := s + 1;
+        fi;
+    od;
+    if s <> Size(Cold) then
+        C := ElementsCode( E, "even weight subcode", GF(q) );
+        d := [LowerBoundMinimumDistance(Cold),
+              UpperBoundMinimumDistance(Cold)];
+        for i in [1..2] do 
+            if q=2 and IsOddInt(d[i] mod 2) then
+                d[i] := Minimum(d[i]+1,n);
+            fi;
+        od;
+        C!.lowerBoundMinimumDistance := d[1];
+        C!.upperBoundMinimumDistance := d[2];
+        if HasWeightDistribution(Cold) then
+            wd := ShallowCopy(WeightDistribution(Cold));
+            for i in [1..QuoInt(n+1,2)] do 
+                wd[2*i] := 0;
+            od;
+        	SetWeightDistribution(C, wd);
+		fi;
+        C!.history := History(Cold);
+        return C;
+    else
+        return ShallowCopy(Cold);
+    fi;
+end);
+
+InstallMethod(EvenWeightSubcode, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(Cold) 
+    local C, P, edited, n, G, Els, E, i, s,q, Gold, wd, lbmd;
+    if IsCyclicCode(Cold) then    
+		return EvenWeightSubcode(Cold); 
+	fi; 
+	q := Size(LeftActingDomain(Cold));
+    n := WordLength(Cold);
+    edited := false;
+    if q = 2 then
+        # Why is the next line needed?
+        P := NullVector(n, GF(2));
+        G := [];
+        Gold := GeneratorMat(Cold);
+        for i in [1..Dimension(Cold)] do
+            if Weight(Codeword(Gold[i])) mod 2 <> 0 then
+                if not edited then
+                    P := Gold[i];
+                    edited := true;
+                else
+                    Append(G, [Gold[i]+P]);
+                fi;
+            else
+                Append(G, [Gold[i]]);
+            fi;
+        od;
+        if edited then
+            C := GeneratorMatCode(BaseMat(G),"even weight subcode",GF(q));
+        fi;
+    else
+        Els := AsSSortedList(Cold);   
+        E := []; s := 0;
+        for i in [1..Size(Cold)] do
+            if IsEvenInt(Weight(Els[i])) then
+                Append(E, [Els[i]]);
+                s := s + 1;
+            fi;
+        od;
+        edited := (s <> Size(Cold));
+        if edited then
+            C := ElementsCode(E, "even weight subcode", GF(q) );
+        fi;
+    fi;
+
+    if edited then
+        lbmd := Minimum(n, LowerBoundMinimumDistance(Cold));
+        if q = 2 and IsOddInt(lbmd) then
+            lbmd := lbmd + 1;
+        fi;
+        C!.lowerBoundMinimumDistance := lbmd; 
+		if HasWeightDistribution(Cold) then
+            wd := ShallowCopy(WeightDistribution(Cold));
+            for i in [1..QuoInt(n+1,2)] do 
+                wd[2*i] := 0;
+            od;
+			SetWeightDistribution(C, wd);  
+		fi; 
+		C!.history := History(Cold);
+        return C;
+    else
+        return ShallowCopy(Cold);
+    fi;
+end);
+
+##LR See co'd roots stuff, nd reinstate sometime. 
+InstallMethod(EvenWeightSubcode, "method for cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(Cold) 
+    local C, P, edited, n, Els, E, i, q, lbmd, wd;
+    q := Size(LeftActingDomain(Cold));
+    n := WordLength(Cold);
+    edited := false;
+    if (q =2) then
+        P := Indeterminate(GF(2))-One(GF(2));  
+        if Gcd(P, GeneratorPol(Cold)) <> P then
+            C := GeneratorPolCode( GeneratorPol(Cold)*P, n,
+                         "even weight subcode", LeftActingDomain(Cold));
+            #if IsBound(C.roots) then
+            #    AddSet(C.roots, Z(2)^0);
+            #fi;
+            edited := true;
+        fi;
+    else
+        Els := AsSSortedList(Cold);
+        E := [];
+        for i in [1..Size(Cold)] do
+            if IsEvenInt(Weight(Els[i])) then
+                Append(E, [Els[i]]);
+            else
+                edited := true;
+            fi;
+        od;
+        if edited then
+            C := ElementsCode(E, "even weight subcode", LeftActingDomain(Cold));
+        fi;
+    fi;
+
+    if edited then
+        lbmd := Minimum(n, LowerBoundMinimumDistance(Cold)); 
+        if q = 2 and IsOddInt(lbmd) then
+            lbmd := lbmd + 1;
+        fi;
+        C!.lowerBoundMinimumDistance := lbmd;  
+		if HasWeightDistribution(Cold) then
+            wd := ShallowCopy(WeightDistribution(Cold));
+            for i in [1..QuoInt(n+1,2)] do 
+                wd[2*i] := 0;
+            od;
+        	SetWeightDistribution(C, wd);  
+		fi;
+        C!.history := History(Cold);
+        return C;
+    else
+        return ShallowCopy(Cold);
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  ConstantWeightSubcode( <C> [, <w>] )  .  all words of <C> with weight <w>
+##
+
+InstallMethod(ConstantWeightSubcode, "method for unrestricted code, weight", 
+	true, [IsCode, IsInt], 0, 
+function(C, wt) 
+  local D, Els,path;  
+  if IsLinearCode(C) then 
+	return ConstantWeightSubcode(C, wt); 
+  fi; 
+  Els := Filtered(AsSSortedList(C), c -> Weight(c) = wt); 
+  if Els <> [] then 
+    D := ElementsCode(Els, Concatenation( "code with codewords of weight ", String(wt)), LeftActingDomain(C) ); 
+    D!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); 
+    D!.history := History(C); 
+    return D; 
+   else 
+    Error("no words of weight", wt); 
+  fi; 
+end); 
+
+InstallOtherMethod(ConstantWeightSubcode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function(C) 
+  local wt; 
+  if IsLinearCode(C) then 
+	return ConstantWeightSubcode(C, MinimumDistance(C)); 
+  fi; 
+  wt := PositionProperty(WeightDistribution(C){[2..WordLength(C)+1]}, i-> i > 0); 
+  if wt = false then 
+	wt := WordLength(C); 
+  fi; 
+ return ConstantWeightSubcode(C, wt); 
+end); 
+
+InstallMethod(ConstantWeightSubcode, "method for linear code, weight", true, 
+	[IsLinearCode, IsInt], 0, 
+function(C, wt) 
+    local S, c, a, CWS, path, F, tmpdir, incode, infile, inV, Els, i, D;
+    a:=wt;
+    if wt = 0 then
+        return NullCode(WordLength(C), LeftActingDomain(C));
+    fi;
+    if Dimension(C) = 0 then
+        Error("no constant weight subcode of a null code is defined");
+    fi;
+
+      path := DirectoriesPackagePrograms( "guava" );
+
+      if ForAny( ["desauto", "leonconv", "wtdist"], 
+                 f -> Filename( path, f ) = fail ) then
+##  begin if-then
+	  Print("the C code programs are not compiled, so using GAP code...\n");
+	  F:=LeftActingDomain(C);
+	  S:=[];
+	  for c in Elements(C) do
+	   if WeightCodeword(c)=a then
+	     S:=Concatenation([c],S); 
+	   fi;
+	  od;
+	  CWS:=ElementsCode(S,"constant weight subcode",F);
+	  CWS!.lowerBoundMinimumDistance:=a;
+	  CWS!.upperBoundMinimumDistance:=a;
+	  return CWS;
+## end if-then
+else 
+	 Print("the C code programs are compiled, so using Leon's binary....\n");
+
+ tmpdir := DirectoryTemporary();;
+ incode := TmpName();
+ PrintTo( incode, "\n" );
+# inV := TmpName(); 
+# PrintTo( inV, "\n" );
+ infile := TmpName();
+ PrintTo( infile, "\n" );
+ GuavaToLeon(C, incode);
+ Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), 
+            Concatenation("-q ",incode,"::code ",
+            String(wt), " ", Filename( tmpdir, "cwsc.txt" ),"::code"));  
+ if IsReadableFile( Filename( tmpdir, "cwsc.txt" )) then
+      inV := Filename( tmpdir, "cwsc.txt" );  
+      Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), 
+            Concatenation("-c ",inV," ",infile));  
+  else  
+      Error("\n Sorry, no codes words of weight ",wt,"\n");
+ fi;
+ Read(infile);
+ RemoveFiles(incode,inV,infile);
+ Els := [];
+ for i in AsSSortedList(LeftActingDomain(C)){[2..Size(LeftActingDomain(C))]} do
+        Append(Els, i * GUAVA_TEMP_VAR);
+ od;
+ if Els <> [] then
+        D := ElementsCode(Els, Concatenation( "code with codewords of weight ",
+                String(wt)), LeftActingDomain(C) );
+        D!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+        D!.history := History(C);
+        return D;
+    else
+        Error("no words of weight ",wt);
+        Print("\n no words of weight ",wt);
+ fi;
+fi; ## end if-then-else
+end);
+
+InstallOtherMethod(ConstantWeightSubcode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	return ConstantWeightSubcode(C, MinimumDistance(C)); 
+end); 
+
+
+#############################################################################
+##
+#F  ExtendedCode( <C> [, <i>] ) . . . . . code with added parity check symbol
+## 
+
+InstallMethod(ExtendedCode, "method to extend unrestricted code i times", true, 
+	[IsCode, IsInt], 0, 
+function(Cold, nrcolumns) 
+	local n, q, zeros, elements, word, vec, lbmd, ubmd, i, indist, wd, C;  
+	if nrcolumns < 1 then 
+		return ShallowCopy(Cold);
+	elif IsLinearCode(Cold) then    
+		return ExtendedCode(Cold,nrcolumns);
+	fi;
+
+    n := WordLength(Cold)+1;
+    q := Size(LeftActingDomain(Cold));
+    zeros:= List( [ 2 .. nrcolumns ], i-> Zero(LeftActingDomain(Cold)) );
+    elements := [];
+    for word in AsSSortedList(Cold) do
+        vec := VectorCodeword(word); 
+        Add(elements, Codeword(Concatenation(vec, [-Sum(vec)], zeros)));
+        
+    od;
+    C := ElementsCode( elements, "extended code", q );
+    lbmd := LowerBoundMinimumDistance(Cold);
+    ubmd := UpperBoundMinimumDistance(Cold);
+    if q = 2 then
+        if lbmd mod 2 = 1 then
+            lbmd := lbmd + 1;
+        fi;
+        if ubmd mod 2 = 1 then
+            ubmd := ubmd + 1;
+        fi;
+        C!.lowerBoundMinimumDistance := lbmd;  
+		C!.upperBoundMinimumDistance := ubmd; 
+		if HasInnerDistribution(Cold) then
+            indist := NullVector(n+1);
+            indist[1] := InnerDistribution(Cold)[1];
+            for i in [1 .. QuoInt( WordLength(Cold), 2 ) ] do
+                indist[i*2+1]:= InnerDistribution(Cold)[i*2+1]+
+                                    InnerDistribution(Cold)[i*2];
+            od;
+            if IsOddInt(WordLength(Cold)) then
+                indist[WordLength(Cold) + 2] := 
+                  InnerDistribution(Cold)[WordLength(Cold) + 1];
+            fi;
+        	SetInnerDistribution(C, indist); 
+		fi;
+        if HasWeightDistribution(Cold) then
+            wd := NullVector( n + 1);
+            wd[1] := WeightDistribution(Cold)[1];
+            for i in [1 .. QuoInt( WordLength(Cold), 2 ) ] do
+                wd[i*2+1]:= WeightDistribution(Cold)[i*2+1]+
+                                WeightDistribution(Cold)[i*2];
+            od;
+            if IsOddInt(WordLength(Cold)) then
+                wd[WordLength(Cold) + 2] := 
+                  WeightDistribution(Cold)[WordLength(Cold) + 1];
+            fi;
+        	SetWeightDistribution(C, wd); 
+		fi;
+        if IsBound(Cold!.boundsCoveringRadius)
+           and Length( Cold!.boundsCoveringRadius ) = 1 then
+            C!.boundsCoveringRadius :=  
+              [ Cold!.boundsCoveringRadius[ 1 ] + nrcolumns ];
+        fi;
+    else
+        C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(Cold) + 1;
+    fi;
+    C!.history := History(Cold);
+    return C;
+end);
+
+InstallOtherMethod(ExtendedCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function(C) 
+	return ExtendedCode(C, 1); 
+end); 
+
+InstallMethod(ExtendedCode, "method to extend linear code i times", true, 
+	[IsLinearCode, IsInt], 0, 
+function(Cold, nrcolumns) 
+    local C, G, word, zeros, i, n, q, lbmd, ubmd, wd;
+	if nrcolumns < 1 then 
+		return ShallowCopy(C); 
+	fi; 
+	
+    n := WordLength(Cold) + nrcolumns;
+    zeros := List( [2 .. nrcolumns], i-> Zero(LeftActingDomain(Cold)) );
+    q := Size(LeftActingDomain(Cold));
+    G := List(GeneratorMat(Cold), i-> ShallowCopy(i));
+    for word in G do
+        Add(word, -Sum(word));
+        Append(word, zeros);
+    od;
+    C := GeneratorMatCode(G, "extended code", q);
+    lbmd := LowerBoundMinimumDistance(Cold);
+    ubmd := UpperBoundMinimumDistance(Cold);
+    if q = 2 then
+        if IsOddInt( lbmd ) then
+            lbmd := lbmd + 1;
+        fi;
+        if IsOddInt( ubmd ) then
+            ubmd := ubmd + 1;
+        fi;
+        C!.lowerBoundMinimumDistance := lbmd; 
+		C!.upperBoundMinimumDistance := ubmd; 
+		if HasWeightDistribution(Cold) then
+            wd := NullVector(n + 1);
+            wd[1] := 1;
+            for i in [ 1 .. QuoInt( WordLength(Cold), 2 ) ] do
+                wd[i*2+1]:=WeightDistribution(Cold)[i*2+1]+
+                                 WeightDistribution(Cold)[i*2];
+            od;
+            if IsOddInt(WordLength(Cold)) then
+                wd[WordLength(Cold) + 2] := 
+                  WeightDistribution(Cold)[WordLength(Cold) + 1];
+            fi;
+        	SetWeightDistribution(C, wd); 
+		fi;
+        if IsBound(Cold!.boundsCoveringRadius)
+           and Length( Cold!.boundsCoveringRadius ) = 1 then
+            C!.boundsCoveringRadius :=  
+              [ Cold!.boundsCoveringRadius[ 1 ] + nrcolumns ];
+        fi;
+    else
+        C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(Cold) + 1;
+    fi;
+    C!.history := History(Cold);
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  ShortenedCode( <C> [, <L>] )  . . . . . . . . . . . . . .  shortened code
+##
+## 
+
+InstallMethod(ShortenedCode, "Method for unrestricted code, position list", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+    local Cnew, i, e, zero, q, baseels, element, max, number, 
+          temp, els, n;
+	if IsLinearCode(C) then 
+		return ShortenedCode(C,L);  
+	fi; 
+	L := Reversed(Set(L));
+    zero := Zero(LeftActingDomain(C));
+    baseels := AsSSortedList(LeftActingDomain(C));  
+    q := Size(LeftActingDomain(C));
+    els := VectorCodeword(AsSSortedList(C));
+    for i in L do
+        temp := List(els, x -> x[i]);
+        max := 0;
+        for e in baseels do
+            number := Length(Filtered(temp, x -> x=e));
+            if number > max then
+                max := number;
+                element := e;
+            fi;
+        od;
+        temp := [];
+        n := Length(els[1]);
+        for e in els do
+            if e[i] = element then
+                Add(temp,Concatenation(e{[1..i-1]},e{[i+1..n]}));
+            fi;
+            els := temp;
+        od;
+    od;
+    Cnew := ElementsCode(temp, "shortened code", LeftActingDomain(C));
+    Cnew!.history := History(C);
+    Cnew!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C),
+                                              WordLength(Cnew));
+    return Cnew;
+end);
+
+InstallOtherMethod(ShortenedCode, "method for unrestricted code, int position", 
+	true, [IsCode, IsInt], 0, 
+function(C, i) 
+	return ShortenedCode(C, [i]); 
+end); 
+
+InstallOtherMethod(ShortenedCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	return ShortenedCode(C, [1]); 
+end); 
+
+InstallMethod(ShortenedCode, "method for linear code and position list", 
+	true, [IsLinearCode, IsList], 0, 
+function(C, L) 
+	local Cnew, G, i, e, zero, q, baseels, temp, n;  
+	L := Reversed(Set(L));
+    zero := Zero(LeftActingDomain(C)); 
+    baseels := AsSSortedList(LeftActingDomain(C));
+    q := Size(LeftActingDomain(C));
+    G := ShallowCopy(GeneratorMat(C));
+    for i in L do
+        e := 0;
+        repeat
+            e := e + 1;
+        until (e > Length(G)) or (G[e][i] <> zero);
+        if G <> [] then 
+            n := Length(G[1]);
+        else
+            n := WordLength(C);
+        fi;
+        if e <= Length(G) then
+            temp := G[e];
+            G := Concatenation(G{[1..e-1]},G{[e+1..Length(G)]});
+            G := List(G, x-> x - temp * (x[i] / temp[i]));
+        fi;
+        G := List(G, x->Concatenation(x{[1..i-1]},x{[i+1..n]}));
+        if G = [] then 
+            return NullCode(WordLength(C)-Length(L), LeftActingDomain(C));
+        fi;
+    od;
+    Cnew := GeneratorMatCode(BaseMat(G), "shortened code", LeftActingDomain(C));
+    Cnew!.history := History(C);
+    Cnew!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C),
+                                              WordLength(Cnew));
+	if IsCyclicCode(C) then 
+		Cnew!.upperBoundMinimumDistance := Minimum(WordLength(Cnew),  
+											UpperBoundMinimumDistance(C)); 
+
+	fi; 
+	return Cnew;
+end);
+
+
+#############################################################################
+##
+#F  PuncturedCode( <C> [, <list>] ) . . . . . . . . . . . . .  punctured code
+##
+##  PuncturedCode(C [, remlist]) punctures a code by leaving out the
+##  coordinates given in list remlist. If remlist is omitted, then
+##  the last coordinate will be removed.
+##
+
+InstallMethod(PuncturedCode, 
+	"method for unrestricted codes, position list provided", 
+	true, [IsCode, IsList], 0, 
+function(Cold, remlist) 
+	local keeplist, n, C;  
+	if IsLinearCode(Cold) then 
+		return PuncturedCode(Cold, remlist); 
+	fi;
+	n := WordLength(Cold);
+	remlist := Set(remlist);
+	keeplist := [1..n];
+	SubtractSet(keeplist, remlist);
+    C := ElementsCode(
+                 VectorCodeword(Codeword( 
+				 	AsSSortedList(Cold))){[1 .. Size(Cold)]}{keeplist},
+                 "punctured code", LeftActingDomain(Cold));
+    C!.history := History(Cold);
+    C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(Cold) -
+                                           Length(remlist), 1);
+    C!.upperBoundMinimumDistance := Minimum( Maximum( 1,
+                                           UpperBoundMinimumDistance(Cold) ), 
+                                           n-Length(remlist));
+    return C;
+end);
+
+InstallOtherMethod(PuncturedCode, 
+	"method for unrestricted codes, int position provided", 
+	true, [IsCode, IsInt], 0, 
+function(C, n) 
+	return PuncturedCode(C, [n]); 
+end); 
+
+InstallOtherMethod(PuncturedCode, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C) 
+	return PuncturedCode(C, [WordLength(C)]);  
+end); 
+
+InstallMethod(PuncturedCode, "method for linear codes, position list provided", 
+	true, [IsLinearCode, IsList], 0, 
+function(Cold, remlist)  
+	local C, keeplist, n;  
+	n := WordLength(Cold);
+	remlist := Set(remlist);
+	keeplist := [1..n];
+	SubtractSet(keeplist, remlist);
+    C := GeneratorMatCode(
+                 GeneratorMat(Cold){[1..Dimension(Cold)]}{keeplist},
+                 "punctured code", LeftActingDomain(Cold) );
+    C!.history := History(Cold);
+    C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(Cold) -
+                                           Length(remlist), 1);
+	
+# Cyclic codes always have at least one codeword with minimal weight in the
+# i-th column (for every i), so if you remove a column, that word has a
+# weight of one less -> the minimumdistance is reduced by one
+	if IsCyclicCode(Cold) then 
+		C!.upperBoundMinimumDistance := Minimum( Maximum( 1,
+									   UpperBoundMinimumDistance(Cold)-1),
+									   n - Length(remlist) );
+	else 
+		C!.upperBoundMinimumDistance := Minimum( Maximum( 1, 
+                                           UpperBoundMinimumDistance(Cold) ), 
+                                           n - Length(remlist));
+    fi; 
+	return C;
+end);
+
+
+#############################################################################
+##
+#F  ExpurgatedCode( <C>, <L> )  . . . . .  removes codewords in <L> from code
+##
+##  The usual way of expurgating a code is removing all words of odd weight.
+##
+
+InstallMethod(ExpurgatedCode, "method for unrestricted codes, codeword list", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+	if IsLinearCode(C) then 
+		return ExpurgatedCode(C, L);  
+	else 
+		Error("can't expurgate a non-linear code; ",
+			  "consider using RemovedElementsCode"); 
+	fi; 
+end); 
+
+InstallOtherMethod(ExpurgatedCode, "method for unrestricted code, codeword", 
+	true, [IsCode, IsCodeword], 0, 
+function(C, w) 
+	return ExpurgatedCode(C, [w]); 
+end); 
+
+InstallOtherMethod(ExpurgatedCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	if IsLinearCode(C) then 
+		return ExpurgatedCode(C); 
+	else 
+		Error("can't expurgate a non-linear code; "); 
+	fi; 
+end); 
+
+InstallMethod(ExpurgatedCode, "method for linear code, codeword list", 
+	true, [IsLinearCode, IsList], 0, 
+function(Cold, L) 
+    local C, num, H, F;
+	L := VectorCodeword( L );
+	L := Set(L);
+    F := LeftActingDomain(Cold);
+    L := Filtered(L, l-> Codeword(l) in Cold);
+    H := List(L, function(l)
+        local V,p;
+        V := NullVector(WordLength(Cold), F);
+        p := PositionProperty(l, i-> not (i = Zero(F)));
+        if not (p = false) then
+            V[p] := One(F);
+        fi;
+        return V;
+    end);
+	H := BaseMat(Concatenation(CheckMat(Cold), H));
+    num := Length(H) - Redundancy(Cold);
+    if num > 0 then
+        C := CheckMatCode( H, Concatenation("code, expurgated with ",
+                     String(num), " word(s)"), F);
+        C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(Cold);
+        C!.history := History(Cold);
+        return C;
+    else
+        return ShallowCopy(Cold);
+    fi;
+end);
+
+InstallOtherMethod(ExpurgatedCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	local C2; 
+	C2 := EvenWeightSubcode(C); 
+	##LR - prob if C2 not lin.  Try on DualCode(RepetitionCode(5, GF(3))) 
+	if Dimension(C2) = Dimension(C) then 
+		## No words of odd weight, so expurgate by removing first row of 
+		## generator matrix. 
+		return ExpurgatedCode(C, Codeword(GeneratorMat(C)[1])); 
+	else 
+		return C2; 
+	fi; 
+end); 
+
+
+#############################################################################
+##
+#F  AddedElementsCode( <C>, <L> ) . . . . . . . . . .  adds words in list <L>
+##
+
+InstallMethod(AddedElementsCode, "method for unrestricted code, codeword list", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+    local Cnew, e, w, E, CalcWD, wd, num;
+    L := VectorCodeword( L );
+	L := Set(L);
+    E := ShallowCopy(VectorCodeword(AsSSortedList(C)));
+    if HasWeightDistribution(C) then
+        wd := ShallowCopy(WeightDistribution(C));
+        CalcWD := true;
+    else
+        CalcWD := false;
+    fi;
+    num := 0;
+    for e in L do
+        if not (e in C) then
+            Add(E, e);
+            num := num + 1;
+            if CalcWD then
+                w := Weight(Codeword(e)) + 1;
+                wd[w] := wd[w] + 1;
+            fi;
+        fi;
+    od;
+    if num > 0 then
+        Cnew := ElementsCode(E, Concatenation( "code with ", String(num),
+                " word(s) added"), LeftActingDomain(C));
+        if CalcWD then
+            SetWeightDistribution(Cnew, wd); 
+        fi;
+        Cnew!.history := History(C);
+        return Cnew;
+    else
+        return ShallowCopy(C);
+    fi;
+end);
+
+InstallOtherMethod(AddedElementsCode, "method for unrestricted code, codeword", 
+	true, [IsCode, IsCodeword], 0, 
+function(C, w) 
+	return AddedElementsCode(C, [w]); 
+end); 
+
+
+#############################################################################
+##
+#F  RemovedElementsCode( <C>, <L> ) . . . . . . . . removes words in list <L>
+##
+
+InstallMethod(RemovedElementsCode, 
+	"method for unrestricted code, codeword list", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+    local E, E2, e, num, s, CalcWD, wd, w, Cnew;
+    L := VectorCodeword( L );
+    E := Set(VectorCodeword(AsSSortedList(C)));
+    E2 := [];
+    if HasWeightDistribution(C) then
+        wd := ShallowCopy(WeightDistribution(C));
+        CalcWD := true;
+    else
+        CalcWD := false;
+    fi;
+    for e in E do
+        if not (e in L) then
+            Add(E2, e);
+        elif CalcWD then
+            w := Weight(Codeword(e)) + 1;
+            wd[w] := wd[w] - 1;
+        fi;
+    od;
+    num := Size(E) - Size(E2);
+    if num > 0 then
+        Cnew := ElementsCode(E2, Concatenation( "code with ", String(num),
+                " word(s) removed"), LeftActingDomain(C) );
+        if CalcWD then
+            SetWeightDistribution(Cnew, wd);
+        fi;
+        Cnew!.history := History(C);
+        Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+        return Cnew;
+    else
+        return ShallowCopy(C);
+    fi;
+end);
+
+InstallOtherMethod(RemovedElementsCode, 
+	"method for unrestricted code, codeword", 
+	true, [IsCode, IsCodeword], 0, 
+function(C, w) 
+	return RemovedElementsCode(C, [w]); 
+end); 
+
+
+#############################################################################
+##
+#F  LengthenedCode( <C> [, <i>] ) . . . . . . . . . . . . . .  lengthens code
+##
+
+InstallMethod(LengthenedCode, "method for unrestricted code, number of columns",
+	true, [IsCode, IsInt], 0, 
+function(C, nrcolumns) 
+    local Cnew;
+    Cnew := ExtendedCode(AugmentedCode(C), nrcolumns);
+    Cnew!.history := History(C);
+    Cnew!.name := Concatenation("code, lengthened with ",String(nrcolumns),
+            " column(s)");
+    return Cnew;
+end);
+
+InstallOtherMethod(LengthenedCode, "unrestricted code", true, [IsCode], 0,  
+function(C) 
+	return LengthenedCode(C, 1); 
+end); 
+
+
+#############################################################################
+##
+#F  ResidueCode( <C> [, <w>] )  . .  takes residue of <C> with respect to <w>
+##
+##  If w is omitted, a word from C of minimal weight is used
+##
+
+InstallMethod(ResidueCode, "method for unrestricted code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, w) 
+	if not IsLinearCode(C) then 
+		Error("argument must be a linear code"); 
+	else 
+		return ResidueCode(C, w); 
+	fi; 
+end); 
+
+InstallOtherMethod(ResidueCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	if not IsLinearCode(C) then 
+		Error("argument must be a linear code"); 
+	else 
+		return ResidueCode(C); 
+	fi; 
+end); 
+
+InstallOtherMethod(ResidueCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C) 
+    local w, i, d;
+	d := MinimumDistance(C);
+	i := 2;
+	while Weight(CodewordNr(C, i)) > d do
+		i := i + 1;
+	od;
+	w := CodewordNr(C, i);
+    return ResidueCode(C, w);
+end);
+
+InstallMethod(ResidueCode, "method for linear code, codeword", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, w) 
+    local Cnew, q, d;
+    if Weight(w) = 0 then 
+		Error("word of weight 0 is not allowed"); 
+	elif Weight(w) = WordLength(C) then 
+		Error("all-one word is not allowed"); 
+	fi; 
+	Cnew := PuncturedCode(ExpurgatedCode(C, w), Support(w));
+    q := Size(LeftActingDomain(C));
+    d := MinimumDistance(C) - Weight(w) * ( (q-1) / q );
+    if not IsInt(d) then
+        d := Int(d) + 1;
+    fi;
+    Cnew!.lowerBoundMinimumDistance := d;
+    Cnew!.history := History(C);
+    Cnew!.name := "residue code";
+    return Cnew;
+end);
+
+
+#############################################################################
+##
+#F  ConstructionBCode( <C> )  . . . . . . . . . . .  code from construction B
+##
+##  Construction B (See M&S, Ch. 18, P. 9) assumes that the check matrix has
+##  a first row of weight d' (the dual distance of C). The new code has a
+##  check matrix equal to this matrix, but with columns removed where the
+##  first row is 1.
+##
+
+InstallMethod(ConstructionBCode, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C)  
+	if LeftActingDomain(C) <> GF(2) then 
+		Error("only valid for binary codes"); 
+	elif IsLinearCode(C) then   
+		return ConstructionBCode(C);  
+	else 
+		Error("only valid for linear codes");  
+	fi; 
+end); 
+
+InstallMethod(ConstructionBCode, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+    local i, H, dd, M, mww, Cnew, DC, keeplist;
+	if LeftActingDomain(C) <> GF(2) then
+		Error("only valid for binary codes");
+	fi;
+	DC := DualCode(C);
+    H := ShallowCopy(GeneratorMat(DC));        # is check matrix of C
+    M := Size(DC);
+    dd := MinimumDistance(DC);          # dual distance of C
+    i := 2;
+    repeat
+        mww := CodewordNr(DC, i);
+        i := i + 1;
+    until Weight(mww) = dd;
+    i := i - 2;
+    keeplist := Set([1..WordLength(C)]);
+    SubtractSet(keeplist, Support(mww));
+    mww := VectorCodeword(mww);
+    # make sure no row dependencies arise;
+    H[Redundancy(C)-LogInt(i, Size(LeftActingDomain(C)))] := mww;
+    H := List(H, h -> h{keeplist});
+    Cnew := CheckMatCode(H, Concatenation("Construction B (",String(dd),
+            " coordinates)"), LeftActingDomain(C));
+    Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+    Cnew!.history := History(DC);
+    return Cnew;
+end);
+
+#############################################################################
+##
+#F  ConstructionB2Code( <C> )  . . . . . . . . . .  code from construction B2
+##
+##  Construction B2 is mixtures of shortening and puncturing. Given an
+##  [n,k,d] code which has dual code of minimum distance s, we obtain
+##  an [n-s, k-s+2j+1, d-2j] code for each j with 2j+1 < s.
+##  
+##  For more details, see A. Brouwer (1998), "Bounds on the size of linear
+##  codes,", in Handbook of Coding Theory, V. S. Pless and W. C. Huffmann
+##  ed., pp. 311
+##
+##  added by CJ, April 2006  -  FIXME this function is NOT complete
+##
+
+InstallMethod(ConstructionB2Code, "method for unrestricted codes", true,
+	[IsCode], 0,
+function(C)
+	Error("ConstructionB2 is not implemented yet ....... sorry\n");
+end);
+
+#############################################################################
+##
+#F  SubCode( <C>, [<s>] ) . .  . . . . . . . . . . . . . . . . subcode of C
+##
+##  Given C, an [n,k,d] code, return a subcode of C with dimension k-s.
+##  If s is not given, it is assumed to be 1.
+##
+##  added by CJ, April 2006  -  FIXME this function is NOT complete
+##
+
+InstallMethod(SubCode, "method for linear codes, int provided", true,
+	[IsCode, IsInt], 0,
+function(C, s)  
+	local G, Gs, Cs;
+	if (IsLinearCode(C) = false) then
+		Error("SubCode only works for linear code\n");
+	fi;
+	if (Dimension(C)-s = 0) then
+		return NullCode(CodeLength(C), LeftActingDomain(C));
+	elif (Dimension(C) <= s) then
+		Error("Dimension of the code must be greater than s\n");
+	else
+		G  := ShallowCopy(GeneratorMat(C));
+		Gs := List([1..Length(G)-s], x->G[x]);
+   	 	Cs := GeneratorMatCode(BaseMat(Gs), "subcode", LeftActingDomain(C));
+	    Cs!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C), 1);
+    	Cs!.upperBoundMinimumDistance := Minimum(Maximum(1, UpperBoundMinimumDistance(C)), CodeLength(C));
+    	Cs!.history := History(C);
+    	return Cs;
+	fi;
+end);	 
+
+InstallOtherMethod(SubCode, "method for linear codes", true,
+	[IsCode], 0,
+function(C)
+	return SubCode(C, 1);
+end);
+
+#############################################################################
+##
+#F  PermutedCode( <C>, <P> )  . . . . . . . permutes coordinates of codewords
+##
+
+InstallMethod(PermutedCode, "method for unrestricted codes", true, 
+	[IsCode, IsPerm], 0, 
+function(Cold, P) 
+	local C, field, fields;  
+	if IsCyclicCode(Cold) or IsLinearCode(Cold) then 
+		return PermutedCode(Cold, P); 
+	fi; 
+
+    C := ElementsCode(
+				PermutedCols(VectorCodeword(Codeword(AsSSortedList(Cold))), P),
+                "permuted code", LeftActingDomain(Cold));
+    # Copy the fields that stay the same:
+    fields := [WeightDistribution, InnerDistribution, IsPerfectCode, 
+				IsSelfDualCode, MinimumDistance, CoveringRadius]; 
+	for field in fields do 
+		if Tester(field)(Cold) then 
+			Setter(field)(C, field(Cold)); 
+		fi; 
+	od; 
+	fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance", 
+				"boundsCoveringRadius"]; 
+	for field in fields do 
+		if IsBound(Cold!.(field)) then 
+			C!.(field) := Cold!.(field); 
+		fi; 
+	od; 
+	C!.history := History(Cold);
+    return C;
+end);
+
+InstallMethod(PermutedCode, "method for linear codes", true, 
+	[IsLinearCode, IsPerm], 0,  
+function(Cold, P) 
+	local C, field, fields;  
+	if IsCyclicCode(Cold) then 
+		return PermutedCode(Cold, P); 
+	fi; 
+    C := GeneratorMatCode(
+                 PermutedCols(GeneratorMat(Cold), P),
+                 "permuted code", LeftActingDomain(Cold));
+    # Copy the fields that stay the same:
+    fields := [WeightDistribution, IsPerfectCode, IsSelfDualCode, 
+				MinimumWeightOfGenerators, MinimumDistance, CoveringRadius]; 
+	for field in fields do
+        if Tester(field)(Cold) then
+			Setter(field)(C, field(Cold));
+		fi;
+	od;
+	fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance", 
+				"boundsCoveringRadius"]; 
+	for field in fields do
+        if IsBound(Cold!.(field)) then
+			C!.(field) := Cold!.(field);
+		fi;
+	od;
+	C!.history := History(Cold);
+    return C;
+end);
+
+InstallMethod(PermutedCode, "method for cyclic codes", true, 
+	[IsCyclicCode, IsPerm], 0, 
+function(Cold, P) 
+    local C, field, fields;
+    C := GeneratorMatCode(
+                 PermutedCols(GeneratorMat(Cold), P),
+                 "permuted code", LeftActingDomain(Cold) );
+    # Copy the fields that stay the same:
+	fields := [WeightDistribution, IsPerfectCode, IsSelfDualCode,
+                MinimumWeightOfGenerators, MinimumDistance, CoveringRadius, 
+				UpperBoundOptimalMinimumDistance];
+	for field in fields do
+		if Tester(field)(Cold) then
+	        Setter(field)(C, field(Cold));
+	    fi;
+	od;
+	fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance",
+	            "boundsCoveringRadius"];
+	for field in fields do
+	    if IsBound(Cold!.(field)) then
+	        C!.(field) := Cold!.(field);
+	    fi;
+	od;
+
+    C!.history := History(Cold);
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  StandardFormCode( <C> ) . . . . . . . . . . . . standard form of code <C>
+##
+
+##LR - all of these methods used to use a ShallowCopy, but that doesn't 
+##	   allow for unbinding/unsetting of attributes.  So now a whole new 
+##	   code is created.  However, should figure out what can be saved and 
+##	   use that.  
+
+InstallMethod(StandardFormCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C) 
+	local Cnew;   
+	if IsLinearCode(C) then 
+		return StandardFormCode(C);  
+	fi; 
+	Cnew := ElementsCode(AsSSortedList(C), "standard form", 
+						 LeftActingDomain(C)); 
+	Cnew!.history := History(C); 
+	return Cnew; 
+end); 
+
+InstallMethod(StandardFormCode, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	local G, P, Cnew;  
+	G := ShallowCopy(GeneratorMat(C)); 
+	P := PutStandardForm(G, true, LeftActingDomain(C)); 
+	if P = () then 
+		Cnew := ShallowCopy(C); 	
+		# this messes up code names
+		#Cnew!.name := "standard form"; 	
+	else 
+		Cnew := GeneratorMatCode(G, 
+			Concatenation("standard form, permuted with ", 
+			               String(P)),  
+				      LeftActingDomain(C)); 
+	fi;
+	Cnew!.history := History(C); 
+	return Cnew; 
+end); 
+
+
+#############################################################################
+##
+#F  ConversionFieldCode( <C> )  . . . . . converts code from GF(q^m) to GF(q)
+##
+
+InstallMethod(ConversionFieldCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function (C) 
+	local F, x, q, m, i, ConvertElms, Cnew;  
+	if IsLinearCode(C) then 
+		return ConversionFieldCode(C); 
+	fi; 
+
+    ConvertElms := function (M)
+        local res,n,k,vec,coord, ConvTable, Nul, g, zero;
+        res := [];
+        n := Length(M[1]);
+        k := Length(M);
+        g := MinimalPolynomial(GF(q), Z(q^m));
+        zero := Zero(F);  
+        Nul := List([1..m], i -> zero);
+        ConvTable := [];
+        x := Indeterminate(GF(q));
+        for i in [1..Size(F) - 1] do
+            ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod g, m));
+        od;
+        for vec in [1..k] do
+            res[vec] := [];
+            for coord in [1..n] do
+                if M[vec][coord] <> zero then
+                    Append(res[vec], 
+							ConvTable[LogFFE(M[vec][coord], Z(q^m)) + 1]);
+                else
+                    Append(res[vec], Nul);
+                fi;
+            od;
+        od;
+        return res;
+    end;
+
+    F := LeftActingDomain(C);
+    q := Characteristic(F);  
+    m := Dimension(F); 
+    Cnew := ElementsCode(
+                    ConvertElms(VectorCodeword(AsSSortedList(C))),
+                    Concatenation("code, converted to basefield GF(",
+                            String(q),")"),
+                    F );
+    Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+    Cnew!.upperBoundMinimumDistance := Minimum(WordLength(C), 
+                                              m*UpperBoundMinimumDistance(C));
+    Cnew!.history := History(C);
+    return Cnew;
+end);
+
+InstallOtherMethod(ConversionFieldCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C) 
+    local F, Cnew;
+    F := LeftActingDomain(C); 
+    Cnew := GeneratorMatCode(
+                    HorizontalConversionFieldMat( GeneratorMat(C), F),
+                    Concatenation("code, converted to basefield GF(",
+                            String(Characteristic(F)), ")"),
+                    GF(Characteristic(F)));
+    Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+    Cnew!.upperBoundMinimumDistance := Minimum(WordLength(C), 
+                                 Dimension(F) * UpperBoundMinimumDistance(C));
+    Cnew!.history := History(C);
+    return Cnew;
+end);
+
+
+#############################################################################
+##
+#F  CosetCode( <C>, <f> ) . . . . . . . . . . . . . . . . . . .  coset of <C>
+##
+
+InstallMethod(CosetCode, "method for unrestricted codes", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, f) 
+	local i, els, Cnew; 	
+	if IsLinearCode(C) then 
+		return CosetCode(C, f); 
+	fi;
+    f := Codeword(f, LeftActingDomain(C));
+    els := [];
+    for i in [1..Size(C)] do
+        Add(els, AsSSortedList(C)[i] + f);
+    od;
+    Cnew := ElementsCode(els, "coset code", LeftActingDomain(C) );
+    Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+    Cnew!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C);
+    Cnew!.history := History(C);
+    return Cnew;
+end);
+
+InstallMethod(CosetCode, "method for linear codes", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, f) 
+    local Cnew, i, els, Cels;
+    f := Codeword(f, LeftActingDomain(C));
+    if f in C then
+        return ShallowCopy(C);
+    fi;
+    els := [];
+    Cels := AsSSortedList(C);
+    for i in [1..Size(C)] do
+        Add(els, Cels[i] + f);
+    od;
+    Cnew := ElementsCode(els, "coset code", LeftActingDomain(C) );
+	if HasWeightDistribution(C) then
+        SetInnerDistribution(Cnew, ShallowCopy(WeightDistribution(C)));
+    fi;
+    Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C);
+    Cnew!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C);
+    Cnew!.history := History(C);
+    return Cnew;
+end);
+
+
+#############################################################################
+##
+#F  DirectSumCode( <C1>, <C2> ) . . . . . . . . . . . . . . . . .  direct sum
+##
+##  DirectSumCode(C1, C2) creates a (n1 + n2 , M1 M2 , min{d1 , d2} ) code
+##  by adding each codeword of the second code to all the codewords of the
+##  first code.
+##
+    
+InstallMethod(DirectSumCode, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	local i, j, C, els, n, sumcr, wd, id;   
+	if IsLinearCode(C1) and IsLinearCode(C2) then
+        return DirectSumCode(C1, C2);
+	fi;
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+        Error("Codes are not in the same basefield");
+	fi;
+
+    els := [];
+    for i in VectorCodeword(AsSSortedList(C1)) do
+        Append(els,List(VectorCodeword(AsSSortedList(C2)),
+                x-> Concatenation(i, x ) ) );
+    od;
+    C := ElementsCode( els, "direct sum code", LeftActingDomain(C1) );
+    n := WordLength(C1) + WordLength(C2);
+    if Size(C) <= 1 then
+        C!.lowerBoundMinimumDistance := n;
+        C!.upperBoundMinimumDistance := n;
+    else
+        C!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C1),
+                                               LowerBoundMinimumDistance(C2));
+        C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+                                               UpperBoundMinimumDistance(C2));
+    fi;
+    if HasWeightDistribution(C1) and HasWeightDistribution(C2) then
+        wd := NullVector(WordLength(C)+1);
+        for i in [1..WordLength(C1)+1] do
+            for j in [1..WordLength(C2)+1] do
+                wd[i+j-1] := wd[i+j-1]+
+                             WeightDistribution(C1)[i] *
+                             WeightDistribution(C2)[j];
+            od;
+        od;
+    	SetWeightDistribution(C, wd); 
+	fi;
+    if HasInnerDistribution(C1) and HasInnerDistribution(C2) then
+        id := NullVector(WordLength(C) + 1);
+        for i in [1..WordLength(C1) + 1 ] do
+            for j in [1..WordLength(C2) + 1 ] do
+                id[i+j-1] := id[i+j-1]+
+                             InnerDistribution(C1)[i] *
+                             InnerDistribution(C2)[j];
+
+            od;
+        od;
+		SetInnerDistribution(C, id); 
+	fi;
+    if IsBound(C1!.boundsCoveringRadius) 
+       and IsBound(C2!.boundsCoveringRadius) then
+        sumcr := List( C1!.boundsCoveringRadius,
+          x -> x + C2!.boundsCoveringRadius);
+        sumcr := Set( Flat( sumcr ) );
+        IsRange( sumcr );
+        C!.boundsCoveringRadius := sumcr;
+    fi;
+    C!.history := MergeHistories(History(C1), History(C2));
+    return C;
+end);
+
+InstallMethod(DirectSumCode, "method for linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local i, j, C, zeros1, zeros2, G, n, sumcr, wd;  
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+        Error("Codes are not in the same basefield");
+	fi;
+    
+	zeros1 := NullVector(WordLength(C1), LeftActingDomain(C1));
+    zeros2 := NullVector(WordLength(C2), LeftActingDomain(C1));
+    G := List(GeneratorMat(C1),x -> Concatenation(x,zeros2));
+    Append(G,List(GeneratorMat(C2),x -> Concatenation(zeros1,x)));
+    C := GeneratorMatCode( G, "direct sum code", LeftActingDomain(C1) );
+    n := WordLength(C1) + WordLength(C2);
+    if Size(C) <= 1 then
+        C!.lowerBoundMinimumDistance := n;
+        C!.upperBoundMinimumDistance := n;
+    else
+        C!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C1),
+                                               LowerBoundMinimumDistance(C2));
+        C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+                                               UpperBoundMinimumDistance(C2));
+    fi;
+    if HasWeightDistribution(C1) and HasWeightDistribution(C2) then
+        wd := NullVector(WordLength(C)+1);
+        for i in [1..WordLength(C1)+1] do
+            for j in [1..WordLength(C2)+1] do
+                wd[i+j-1] := wd[i+j-1]+
+                             WeightDistribution(C1)[i] *
+                             WeightDistribution(C2)[j];
+            od;
+        od;
+    	SetWeightDistribution(C, wd);  
+	fi;  
+    if IsBound(C1!.boundsCoveringRadius) 
+       and IsBound(C2!.boundsCoveringRadius) then
+        sumcr := List( C1!.boundsCoveringRadius,
+          x -> x + C2!.boundsCoveringRadius);
+        sumcr := Set( Flat( sumcr ) );
+        IsRange( sumcr );
+        C!.boundsCoveringRadius := sumcr;
+    fi;
+    if HasIsNormalCode(C1) and HasIsNormalCode(C2) and
+       IsNormalCode( C1 ) and IsNormalCode( C2 ) then
+        SetIsNormalCode(C, true);
+    fi;
+    if HasIsSelfOrthogonalCode(C1) and HasIsSelfOrthogonalCode(C2) 
+       and IsSelfOrthogonalCode(C1) and IsSelfOrthogonalCode(C2) then
+        SetIsSelfOrthogonalCode(C, true);
+    fi;
+    C!.history := MergeHistories(History(C1), History(C2));
+    return C;
+end);
+
+
+#############################################################################
+##
+#F  ConcatenationCode( <C1>, <C2> ) . . . . .  concatenation of <C1> and <C2>
+##
+
+InstallMethod(ConcatenationCode, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	local E,e,C;  
+	if IsLinearCode(C1) and IsLinearCode(C2) then 
+		return ConcatenationCode(C1, C2);
+	elif Size(C1) <> Size(C2) then
+		Error("both codes must have equal size");
+	elif LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("both codes must be over the same field");
+	fi;
+						
+	E := [];
+	for e in [1..Size(C1)] do
+		Add(E,Concatenation(VectorCodeword(AsSSortedList(C1)[e]),
+				VectorCodeword(AsSSortedList(C2)[e])));
+	od;
+	C := ElementsCode( E, "concatenation code", LeftActingDomain(C1) );
+	C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) +
+								   LowerBoundMinimumDistance(C2);
+	C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) +
+								   UpperBoundMinimumDistance(C2);
+	# CoveringRadius?
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+    
+
+InstallMethod(ConcatenationCode, "method for linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local e, C, G, G1, G2;   
+	if Size(C1) <> Size(C2) then
+        Error("both codes must have equal size");
+	elif LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("both codes must be over the same field");
+	fi;
+						
+	G := [];
+	G1 := GeneratorMat(C1);
+	G2 := GeneratorMat(C2);
+	for e in [1..Dimension(C1)] do
+		Add(G, Concatenation(G1[e], G2[e]));
+	od;
+	C := GeneratorMatCode(G, "concatenation code", LeftActingDomain(C1));
+	C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) +
+								   LowerBoundMinimumDistance(C2);
+	C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) +
+								   UpperBoundMinimumDistance(C2);
+	# CoveringRadius?
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+    
+
+#############################################################################
+##
+#F  DirectProductCode( <C1>, <C2> ) . . . . . . . . . . . . .  direct product
+##
+##  DirectProductCode constructs a new code from the direct product of two
+##  codes by taking the Kronecker product of the two generator matrices
+##
+
+InstallMethod(DirectProductCode, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	if IsLinearCode(C1) and IsLinearCode(C2) then 
+		return DirectProductCode(C1,C2); 
+	else
+		Error("both codes must be linear"); 
+	fi; 
+end); 
+
+InstallMethod(DirectProductCode, "method for linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local C;
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("both codes must have the same basefield");
+	fi;
+	C := GeneratorMatCode(
+				 KroneckerProduct(GeneratorMat(C1), GeneratorMat(C2)),
+				 "direct product code",
+				 LeftActingDomain(C1));
+	if Dimension(C) = 0 then
+		C!.lowerBoundMinimumDistance := WordLength(C);
+		C!.upperBoundMinimumDistance := WordLength(C);
+	else
+		C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) *
+									   LowerBoundMinimumDistance(C2);
+		C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) *
+									   UpperBoundMinimumDistance(C2);
+	fi;
+	C!.history := MergeHistories(History(C1), History(C2));
+	if IsBound( C1!.boundsCoveringRadius ) and
+	   IsBound( C2!.boundsCoveringRadius ) then
+		C!.boundsCoveringRadius := [
+		Maximum( WordLength( C1 ) * C2!.boundsCoveringRadius[ 1 ],
+				   WordLength( C2 ) * C1!.boundsCoveringRadius[ 1 ] )
+		  .. GeneralUpperBoundCoveringRadius( C ) ];
+	fi;
+	return C;
+end);
+
+
+#############################################################################
+##
+#F  UUVCode( <C1>, <C2> ) . . . . . . . . . . . . . . .  u | u+v construction
+##
+##  Uuvcode(C1, C2) # creates a ( 2n , M1 M2 , d = min{2 d1 , d2} ) code
+##  with codewords  (u | u + v) for all u in C1 and v in C2
+##
+
+InstallMethod(UUVCode, "method for linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local C, F, diff, zeros, zeros2, G, n; 
+	if LeftActingDomain(C1)<>LeftActingDomain(C2) then
+        Error("Codes are not in the same basefield");
+	fi; 
+	F := LeftActingDomain(C1); 
+	n := WordLength(C1)+Maximum(WordLength(C1),WordLength(C2));
+	diff := WordLength(C1)-WordLength(C2);
+	zeros := NullVector(WordLength(C1), F);
+	zeros2 := NullVector(AbsInt(diff), F);
+	if diff < 0 then
+		G := List(GeneratorMat(C1),u -> Concatenation(u,u,zeros2));
+		Append(G,List(GeneratorMat(C2),v -> Concatenation(zeros,v)));
+	else
+		G:=List(GeneratorMat(C1),u -> Concatenation(u,u));
+		Append(G,List(GeneratorMat(C2),v->Concatenation(zeros,v,zeros2)));
+	fi;
+	C := GeneratorMatCode( G, "U|U+V construction code", F );
+	if Dimension(C1) = 0 then
+		if Dimension(C2) = 0 then
+			C!.lowerBoundMinimumDistance := n;
+			C!.upperBoundMinimumDistance := n;
+		else
+			C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C2);
+			C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C2);
+		fi;
+	elif Dimension(C2) = 0 then
+		C!.lowerBoundMinimumDistance := 2*LowerBoundMinimumDistance(C1);
+		C!.upperBoundMinimumDistance := 2*UpperBoundMinimumDistance(C1);
+	else
+		C!.lowerBoundMinimumDistance := Minimum(
+			2*LowerBoundMinimumDistance(C1),LowerBoundMinimumDistance(C2));
+		C!.upperBoundMinimumDistance := Minimum(
+			2*UpperBoundMinimumDistance(C1),UpperBoundMinimumDistance(C2));
+	fi;
+	
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+
+InstallMethod(UUVCode, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	local C, F, i, M1, diff, zeros, extended, Els1, Els2, els, n; 
+    if LeftActingDomain(C1)<>LeftActingDomain(C2) then
+		Error("Codes are not in the same basefield");
+	elif IsLinearCode(C1) and IsLinearCode(C2) then
+		return UUVCode(C1, C2);
+	fi;
+	F := LeftActingDomain(C1); 
+	n := WordLength(C1)+Maximum(WordLength(C1),WordLength(C2));
+	diff := WordLength(C1)-WordLength(C2);
+	M1 := Size(C1);
+	zeros := NullVector(AbsInt(diff), F);
+	els := [];
+	Els1 := AsSSortedList(C1);
+	Els2 := AsSSortedList(C2);
+	if diff>0 then 
+		extended := List(Els2,x->Concatenation(VectorCodeword(x),zeros)); 
+		for i in [1..M1] do 
+			Append(els, List(extended,x-> Concatenation(VectorCodeword(Els1[i]),
+					VectorCodeword(Els1[i]) + x ) ) );
+		od; 
+	elif diff<0 then 
+		for i in [1..M1] do 
+			extended := Concatenation(VectorCodeword(Els1[i]),zeros);
+			Append(els,List(Els2,x-> Concatenation(VectorCodeword(Els1[i]), 
+					extended + VectorCodeword(x) ) ) ); 
+		od; 
+	else 
+		for i in [1..M1] do
+			Append(els,List(Els2,x-> Concatenation(VectorCodeword(Els1[i]), 
+					VectorCodeword(Els1[i]) + VectorCodeword(x) ) ) );
+		od; 
+	fi;
+	C := ElementsCode(els, "U|U+V construction code", F);
+	C!.lowerBoundMinimumDistance := Minimum(2*LowerBoundMinimumDistance(C1),
+										   LowerBoundMinimumDistance(C2));
+	C!.upperBoundMinimumDistance := Minimum(2*UpperBoundMinimumDistance(C1),
+										   UpperBoundMinimumDistance(C2));
+
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+
+
+#############################################################################
+##
+#F  UnionCode( <C1>, <C2> ) . . . . . . . . . . . . .  union of <C1> and <C2>
+##
+
+InstallMethod(UnionCode, "method for two linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local C, Els, e;
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("codes are not in the same basefield");
+	elif WordLength(C1) <> WordLength(C2) then
+		Error("wordlength must be the same");
+	fi;
+	C := AugmentedCode(C1, GeneratorMat(C2));
+	C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+										   UpperBoundMinimumDistance(C2));
+	C!.history := MergeHistories(History(C1), History(C2));
+	C!.name := "union code";
+	return C;
+end);
+
+# should there be a special function for cyclic codes? Or in other words:
+# If C1 and C2 are cyclic, does that mean that UnionCode(C1, C2) is cyclic?
+
+InstallMethod(UnionCode, "method for one or both unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	if IsLinearCode(C1) and IsLinearCode(C2) then 
+		return UnionCode(C1,C2); 
+	else 
+		Error("use AddedElementsCode for non-linear codes"); 
+	fi; 
+end); 
+
+
+#############################################################################
+##
+#F  IntersectionCode( <C1>, <C2> )  . . . . . . intersection of <C1> and <C2>
+##
+
+InstallMethod(IntersectionCode, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	local C, Els, e; 
+	if (IsCyclicCode(C1) and IsCyclicCode(C2)) or 
+	   (IsLinearCode(C1) and IsLinearCode(C2)) then 
+		return IntersectionCode(C1, C2); 
+	fi; 
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("codes are not in the same basefield");
+	elif WordLength(C1) <> WordLength(C2) then
+		Error("wordlength must be the same");
+	fi;
+	Els := [];
+	for e in AsSSortedList(C1) do
+		if e in C2 then Add(Els, e); fi;
+	od;
+	if Els = [] then
+		return false; # or an Error?   
+	else
+		C := ElementsCode(Els, "intersection code", LeftActingDomain(C1));
+	fi;
+	C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+										   LowerBoundMinimumDistance(C2));  
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+  
+InstallMethod(IntersectionCode, "method for linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local C;
+	if IsCyclicCode(C1) and IsCyclicCode(C2) then 
+		return IntersectionCode(C1, C2); 
+	fi; 
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		Error("codes are not in the same basefield");
+	elif WordLength(C1) <> WordLength(C2) then
+		Error("wordlength must be the same");
+	fi;
+	C := DualCode(AugmentedCode(DualCode(C1), CheckMat(C2)));
+	C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+										   LowerBoundMinimumDistance(C2));
+	C!.history := MergeHistories(History(C1), History(C2));
+	C!.name := "intersection code";
+	return C;
+end);
+  
+InstallMethod(IntersectionCode, "method for cyclic codes", true, 
+	[IsCyclicCode, IsCyclicCode], 0, 
+function(C1, C2) 
+	local C; 
+	if LeftActingDomain(C1) <> LeftActingDomain(C2) then
+        Error("codes are not in the same basefield");
+	elif WordLength(C1) <> WordLength(C2) then
+		Error("wordlength must be the same");
+	fi;
+	C := GeneratorPolCode(
+				 Lcm(GeneratorPol(C1), GeneratorPol(C2)), WordLength(C1),
+				 "intersection code", LeftActingDomain(C1) );
+	if HasRootsOfCode(C1) and HasRootsOfCode(C2) then 
+		SetRootsOfCode(C, UnionSet(RootsOfCode(C1), RootsOfCode(C2))); 
+	fi;
+	C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+										   LowerBoundMinimumDistance(C2));  
+	C!.history := MergeHistories(History(C1), History(C2));
+	return C;
+end);
+  
+#############################################################################
+##
+#F    ConstructionXCode( <C>, <A> )  ... code from Construction X
+##
+##
+InstallMethod(ConstructionXCode, "linear code constructed using Construction X", 
+	true, [IsList, IsList], 0,
+function( C, A )
+	#
+	# Construction X (see N. Sloane, S. Reddy and C. Chen, ``New binary codes,''
+	#                     IEEE Trans. Inform. Theory, vol. IT-18, pp. 503-510,
+	#                     Jul. 1972
+	#                )
+	#
+	# Consider a list of linear codes of the same length N, C := [ C_1, C_2, ... , C_j ],
+	# where the parameter of ith code, C_i, is [N, K_i, D_i] and C_1 > C_2 > ... > C_j.
+	# Consider a list of (Size(C)-1) auxiliary linear codes A := [ A_1, A_2, ..., A_{j-1} ]
+	# where the parameter of ith code A_i is [n_i, k_i=(K_1-K_{i+1}), d_i], a [n, k, d]
+	# can be constructed where n = N + (n_1 + n_2 + ... + n_{j-1}), k = K_1, and
+	# d = min{ D_j, D_{j-1} + d_{j-1}, D_{j-2} + d_{j-2} + d_{j-1}, ..., D_1 + (d_1 +
+	# ... + d_{j-1}) }.
+	#
+	local i, j, k, p, r,
+    	  K, S, GC, GA, GX, CX, ZeroVec;
+
+	# Make sure list C contains all linear codes
+	if (PositionNot( List([1..Size(C)], i->IsLinearCode(C[i])), true ) < Size(C)) then
+		Error("The list C contains non linear code(s)\n"); return (0);
+	fi;
+
+	# Make sure list A contains all linear codes
+	if (PositionNot( List([1..Size(A)], i->IsLinearCode(A[i])), true ) < Size(A)) then
+		Error("The list A contains non linear code(s)\n"); return (0);
+	fi;
+
+	# Make sure all codes in C and A have the same LeftActingDomain
+	K:=Filtered([2..Size(C)], i->LeftActingDomain(C[i]) <> LeftActingDomain(C[1]));;
+	if Size(K) > 0 then
+		Error("Codes in C are not of the same left-acting-domain\n");
+	fi;
+	S:=Filtered([2..Size(A)], i->LeftActingDomain(A[i]) <> LeftActingDomain(A[1]));;
+	if Size(S) > 0 then
+		Error("Codes in A are not of the same left-acting-domain\n");
+	fi;
+	if LeftActingDomain(C[1]) <> LeftActingDomain(A[1]) then
+		Error("Codes in C and A are of different left-acting-domain\n");
+	fi;
+
+	# Ensure that Dimension(C[1]) < Dimension(C[2]) < ... < Dimension(C[j]), i.e. we need to sort them
+	K:=List([1..Size(C)], i->Dimension(C[i]));;
+	S:=List([1..Size(C)], i->Dimension(C[i]));;
+	Sort(S);;
+	C:=List([1..Size(K)], i->C[Position(K, S[i])]);;
+
+	# Need to make sure that C[1] < C[2] < ... < C[j], i.e. subset
+	if (PositionNot(List([0..Size(C)-2], i->IsSubset(C[Size(C)-i], C[Size(C)-i-1])), true) < Size(C)-1) then
+		Error("Inappropriate chain of codes\n");
+	fi;
+
+	# Now, ensure that codes in A are sorted such that their dimensions are in accending order
+	K:=List([1..Size(A)], i->Dimension(A[i]));;
+	S:=List([1..Size(A)], i->Dimension(A[i]));;
+	Sort(S);;
+	A:=List([1..Size(K)], i->A[Position(K, S[i])]);;
+
+	# Number codes in A should be 1 less than that in C
+	if (Size(A) <> Size(C)-1) then
+		Error("Inappropriate list of codes given\n");
+	fi;
+
+	# Need to make sure that the dimension of each of the auxiliary codes (codes in A)
+	# is equal to the difference in dimension between the appropriate pair of codes in C.
+	for i in [1..Size(A)] do;
+		if (Dimension(A[i]) <> (Dimension(C[Size(C)])-Dimension(C[Size(C)-i]))) then
+			Error("Inappropriate auxiliary codes\n");
+		fi;
+	od;
+
+	# Generator matrices of the chain codes
+	GC:=List([1..Size(C)], i->ShallowCopy(GeneratorMat(C[i])));;
+	GA:=List([1..Size(A)], i->ShallowCopy(GeneratorMat(A[i])));;
+
+	# Generator matrix of the largest code in chain format
+	GX:=GC[Size(C)];;
+	i:=1;;
+	p:=1;;
+	while (i < Size(C)) do
+		for j in [p..Dimension(C[i])] do;
+			GX[p] := GC[i][j];
+			p := p + 1;
+		od;
+		i := i + 1;
+	od;
+
+	GX:=ShallowCopy(GX);;
+	# Add the G matrix of the tail codes
+	k:=Dimension(C[Size(C)]);;
+	for i in [1..Size(A)] do
+		r:=1;;
+		ZeroVec:=List([1..CodeLength(A[i])], i->Zero( LeftActingDomain(C[1]) ));;
+		while (r <= k-Dimension(A[i])) do
+			GX[r]:=ShallowCopy(GX[r]);;
+			Append(GX[r], ZeroVec);;
+			r := r + 1;;
+		od;
+		j:=1;;
+		while (r <= k) do
+			GX[r]:=ShallowCopy(GX[r]);;
+			Append(GX[r], GA[i][j]);;
+			j := j + 1;;
+			r := r + 1;;
+		od;
+	od;
+	CX:=GeneratorMatCode(GX, "Construction X code", LeftActingDomain(C[1]));
+
+	K:=[C[1]!.lowerBoundMinimumDistance];;
+	S:=[C[1]!.upperBoundMinimumDistance];;
+	i:=1;;
+	while (i <= Size(A)) do;
+		r:=0;;
+		p:=0;;
+		for j in [1..i] do;
+			r := r + A[Size(A)-j+1]!.lowerBoundMinimumDistance;
+			p := p + A[Size(A)-j+1]!.upperBoundMinimumDistance;
+		od;
+		Append(K, [r + C[i+1]!.lowerBoundMinimumDistance]);
+		Append(S, [p + C[i+1]!.upperBoundMinimumDistance]);
+		i := i + 1;
+	od;
+	CX!.lowerBoundMinimumDistance := Minimum(K);;
+	CX!.upperBoundMinimumDistance := Minimum(S);;
+	
+	# This can be displayed using Display(C) or History(C). This shows the
+	# componenet codes that are used to construct the concatenated code
+	CX!.history := [ Concatenation(String("Base codes: "), String(C)),
+					 Concatenation(String("Auxiliary codes: "), String(A)) ];
+
+	return CX;
+end);
+
+#########################################################################################
+##
+#F    ConstructionXXCode( <C1>, <C2>, <C3>, <A1>, <A2> )  ... code from Construction XX
+##
+##
+InstallMethod(ConstructionXXCode, "linear code constructed using Construction XX", 
+	true, [IsCode, IsCode, IsCode, IsCode, IsCode], 0,
+function( C1, C2, C3, A1, A2 )
+	#
+	# Construction XX (see W.O. Alltop, ``A method for extending binary linear codes,''
+	#                      IEEE Trans. Inform. Theory, vol. 30, pp. 871-872, 1984
+	#                 )
+	# 
+	# Consider a set of linear codes of the same length n, C1 [n, k_1, d_1], C2 [n, k_2, d_2]
+	# and C3 [n, k_3, d_3] such that C1 contains C2, C1 contains C3 and C4 [n,k_4,d_4] is the
+	# intersection code of C2 and C3. Given two auxiliary codes A1 [n_1, k_1-k-2, e_1] and
+	# A2 [n_2, k_1-k_3, e_2], there exists a [n + n_1 + n_2, k_1, d] CXX code where
+	# d = min{d_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2}.
+	# 
+	# The codewords of CXX can be partitioned into 3 sections ( v | a | b ) where v has length
+	# n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the form:
+	#    ( v | 0...0 | 0...0 ) if v is a codeword of C4,
+	#    ( v |  a_1  | 0...0 ) if v is a codeword of C3\C4,
+	#    ( v | 0...0 |  a_2  ) if v is a codeword of C2\C4,
+	#    ( v |  a_1  |  a_2  ) otherwise.
+	#
+	local i, q, p, a1, a2, 
+		K, L, U, G1, G2, G3, G4, C4, GA1, GA2, GXX, CXX, ZeroVec1, ZeroVec2;
+
+	# Make sure all codes are linear
+	if ( (IsLinearCode(C1) = false) or (IsLinearCode(C2) = false) or 
+		(IsLinearCode(C3) = false) or (IsLinearCode(A1) = false) or
+   	 	(IsLinearCode(A2) = false) ) then
+		Error("Not all codes are linear\n");
+	fi;
+
+	# Make sure all codes have the same LeftActingDomain
+	q:=LeftActingDomain(C1);;
+	if ((LeftActingDomain(C2) <> q) or (LeftActingDomain(C3) <> q) or
+  	 	(LeftActingDomain(A1) <> q) or (LeftActingDomain(A2) <> q)) then
+		Error("Not all codes have the same left-acting-domain\n");
+	fi;
+
+	# Ensure that Dimension(C[1]) > Dimension(C[2]) > ... > Dimension(C[j]), i.e. we need to sort them
+	if (Dimension(C1) < Dimension(C2)) then
+		if (Dimension(C1) > Dimension(C3)) then
+			K:=C1;; C1:=C2;; C2:=K;;
+		else
+        	if (Dimension(C2) > Dimension(C3)) then
+        		K:=C1;; C1:=C2;; C2:=C3;; C3:=K;;
+        	else
+         	   K:=C1;; C1:=C3;; C3:=K;;
+        	fi;
+		fi;
+	fi;
+
+	# Need to make sure that C[1] > C[2] and C[1] > C[3], i.e. superset
+	if (IsSubset(C1, C2) = false or IsSubset(C1, C3) = false) then
+		Error("Inappropriate chain of codes, C1 must contain C2 and must also contain C3\n");
+	fi;
+
+	# Now, ensure that codes in A1 and A2 has the right dimension
+	if (Dimension(A1) <> Dimension(C1)-Dimension(C2)) then
+		Error("Inappropriate auxiliary code A1, dim(A1) <> dim(C1)-dim(C2)\n");
+	fi; 
+	if (Dimension(A2) <> Dimension(C1)-Dimension(C3)) then
+		Error("Inappropriate auxiliary code A2, dim(A2) <> dim(C1)-dim(C3)\n");
+	fi; 
+
+	C4:=IntersectionCode(C2,C3);
+	L:=[];; U:=[];;
+	Append(L, [LowerBoundMinimumDistance(C1) + LowerBoundMinimumDistance(A1) + LowerBoundMinimumDistance(A2)]);;
+	Append(L, [LowerBoundMinimumDistance(C2) + LowerBoundMinimumDistance(A2)]);;
+	Append(L, [LowerBoundMinimumDistance(C3) + LowerBoundMinimumDistance(A1)]);;
+	Append(U, [UpperBoundMinimumDistance(C1) + UpperBoundMinimumDistance(A1) + UpperBoundMinimumDistance(A2)]);;
+	Append(U, [UpperBoundMinimumDistance(C2) + UpperBoundMinimumDistance(A2)]);;
+	Append(U, [UpperBoundMinimumDistance(C3) + UpperBoundMinimumDistance(A1)]);;
+	Append(L, [LowerBoundMinimumDistance(C4)]);;
+	Append(U, [UpperBoundMinimumDistance(C4)]);;
+
+	# Generator matrices of the chain codes
+	G1 :=ShallowCopy(GeneratorMat(C1));;
+	G2 :=ShallowCopy(GeneratorMat(C2));;
+	G3 :=ShallowCopy(GeneratorMat(C3));;
+	G4 :=ShallowCopy(GeneratorMat(C4));;
+	GA1:=ShallowCopy(GeneratorMat(A1));;
+	GA2:=ShallowCopy(GeneratorMat(A2));;
+
+	# Generator matrix of the largest code in chain format
+	GXX:=G1;;
+	GXX:=ShallowCopy(GXX);;
+	p:=1;;
+	a1:=1;; a2:=1;;
+	ZeroVec1:=List([1..CodeLength(A1)], i->Zero(q));;
+	ZeroVec2:=List([1..CodeLength(A2)], i->Zero(q));;
+	for i in [1..Dimension(C4)] do;		# G(C_4) on the top k_4 rows
+		GXX[i] := ShallowCopy(G4[i]);; 
+		Append(GXX[i], ZeroVec1);; Append(GXX[i], ZeroVec2);;
+		p := p + 1;;
+	od;
+	for i in [1..(Dimension(C2)-Dimension(C4))] do; # Proper coset of C4 in C2
+		GXX[p] := ShallowCopy(G2[Dimension(C4)+i]);;
+		GA2[a2] := ShallowCopy(GA2[a2]);;
+    	Append(GXX[p], ZeroVec1);; Append(GXX[p], GA2[a2]);;
+		p := p + 1;; a2:=a2+1;;
+	od;
+	for i in [1..(Dimension(C3)-Dimension(C4))] do; # Proper coset of C4 in C3
+		GXX[p] := ShallowCopy(G3[Dimension(C4)+i]);; 
+		GA1[a1] := ShallowCopy(GA1[a1]);;
+		Append(GXX[p], GA1[a1]);; Append(GXX[p], ZeroVec2);;
+		p := p + 1;; a1:=a1+1;;
+	od;
+	for i in [1..(Dimension(C1)-(Dimension(C2)+Dimension(C3)-Dimension(C4)))] do;
+		GXX[p]  := ShallowCopy(G1[p]);; 
+		GA1[a1] := ShallowCopy(GA1[a1]);;
+		GA2[a2] := ShallowCopy(GA2[a2]);;
+		Append(GXX[p], GA1[a1]);; Append(GXX[p], GA2[a2]);;
+		p := p + 1;; a1:=a1+1;; a2:=a2+1;;
+	od;
+
+	CXX:=GeneratorMatCode(GXX, "Construction XX code", q);
+	CXX!.lowerBoundMinimumDistance := Minimum(L);
+	CXX!.upperBoundMinimumDistance := Minimum(U);
+	
+	# This can be displayed using Display(C) or History(C). This shows the
+	# componenet codes that are used to construct this code
+	CXX!.history := [ Concatenation(String("C1: "), String(C1)),
+					  Concatenation(String("C2: "), String(C2)),
+					  Concatenation(String("C3: "), String(C3)),
+					  Concatenation(String("A1: "), String(A1)),
+					  Concatenation(String("A2: "), String(A2))
+                    ];
+
+	return CXX;
+end);
+
+#########################################################################
+##
+#F BZCode( <O>, <I> ) . . . . . . . . . . Blokh Zyablov concatenated code
+##
+## Given a set of outer codes O_i=[N, K_i, D_i] over GF(q^e_i), where
+## i=1,2,...,t and a set of inner codes I_i=[n, k_i, d_i] over GF(q),
+## BZCode returns a multilevel concatenated code with parameter
+## [ n*N, e_1*K_1 + e_2*K_2 + ... + e_t*K_t, min(d_i * D_i)] over GF(q).
+##
+## Note that the set inner codes must satisfy chain condition, i.e.
+## I_1=[n,k_1,d_1] < I_2=[n,k_2,d_2] < ... < I_t=[n,k_t,d_t] where
+## 0=k_0 < k_1 < k_2 < ... < k_t.
+##
+## The dimensions of the inner code must satisfy the condition
+## e_i = k_i - k_{i-1}, where GF(q^e_i) is the field of the ith
+## outer code.
+##
+__G_BZCode := function(O, I)
+	local encode_code, VectorRep, i, j, l, e, u, v, ik, n, k, F,
+          G, GIBZ, GOBZ, M, L, oi, oj, cw;
+
+	# Two helper functions ...
+	encode_code := function(u, G)
+		return (u * G);
+	end;
+
+	VectorRep := function(e, F)
+		local a, f, MF;
+		if IsZero(e) then;
+			return List([1..LogInt(Size(F), Characteristic(F))], i->Zero(GF(Characteristic(F)))); 
+		fi;
+		a := PrimitiveElement(F);
+		f := MinimalPolynomial( GF(Characteristic(F)), a);
+		MF:= CompanionMat( f );
+		return TransposedMat(MF^LogFFE(e, a))[1];
+	end;
+
+	# Make sure that both O and I have the same number of codes
+	if Size(O) <> Size(I) then
+		Error("Unequal number of inner and outer codes\n");
+	fi;
+
+	# Make sure list O (outer codes) contains all linear codes
+	if (PositionNot( List([1..Size(O)], i->IsLinearCode(O[i])), true ) < Size(O)) then
+		Error("The list O contains non linear code(s)\n");
+	fi;
+
+	# Make sure list I (inner codes) contains all linear codes
+	if (PositionNot( List([1..Size(I)], i->IsLinearCode(I[i])), true ) < Size(I)) then
+		Error("The list I contains non linear code(s)\n");
+	fi;
+		
+	# Make sure that all outer codes have the same length
+	if (PositionNot(List([1..Size(O)], i->CodeLength(O[i])), CodeLength(O[1])) < Size(O)) then
+		Error("Code lengths of all outer codes are required to be the same\n");
+	fi;
+
+	# Need to make sure that I[1] < I[2] < ... < I[s], i.e. subset
+	if (PositionNot(List([0..Size(I)-2], i->IsSubset(I[Size(I)-i], I[Size(I)-i-1])), true) < Size(I)-1) then
+		Error("Inappropriate chain of inner codes\n");
+	fi;
+
+	# Make sure that e_i = k_i - k_{i-1} where k_i is the dimension of the ith inner code	
+	ik := [0];
+	for i in [1..Size(I)] do;
+		Append(ik, [ Dimension(I[i]) ]);
+	od;
+	for i in [1..Size(I)] do;
+		e := ik[i+1] - ik[i];
+		if GF(Characteristic(LeftActingDomain(O[i]))^e) <> LeftActingDomain(O[i]) then
+			Error("Field size of outer code O[", i, "] does not equal to the difference in dimension between the inner code I[", i, "] and that of inner code I[", i-1, "]\n");
+			return (0);
+		fi;
+	od;
+	
+	# Generator matrix of the inner codes (in chain form)
+	GIBZ := [];
+	for i in [1..Size(I)] do;
+		G := ShallowCopy( GeneratorMat(I[i]) );
+		TriangulizeMat(G);
+		for j in [1..(ik[i+1] - ik[i])] do;
+			Append(GIBZ, [ G[ik[i] + j] ]);
+		od;
+	od;
+
+	# Generator matrix of the outer codes -- in reduced-echelon form
+	GOBZ := [];
+	for i in [1..Size(O)] do;
+		G := ShallowCopy( GeneratorMat(O[i]) );
+		TriangulizeMat(G);
+		Append(GOBZ, [ G ]);
+	od;
+
+	# What are the length and dimension of the resulting concatenated code?
+	n := CodeLength(O[1]) * CodeLength(I[1]);
+	k := Sum(List([1..Size(O)], i->(Dimension(O[i]) * (ik[i+1] - ik[i]))));
+
+	# Construct the generator matrix of the BZ code
+	v := [];
+	for i in [1..Size(O)] do;
+		Append(v, [ List([1..Dimension(O[i])], x->Zero(LeftActingDomain(O[i]))) ]);
+	od;
+	G := [];
+	for i in [1..Size(O)] do;
+		F := LeftActingDomain(O[i]);
+		# Enumerate all elements of F
+		L := [ Zero(F) ];
+		for j in [1..(Size(F)-1)] do;
+			Append(L, [ PrimitiveElement(F)^j ]);
+		od;
+		e := ik[i+1] - ik[i];
+		for j in [1..Dimension(O[i])] do;
+			for l in [1..e] do;
+				v[i][j] := L[l+1];
+				cw := [];
+				for oi in [1..Size(O)] do;
+					Append(cw, [ encode_code(v[oi], GOBZ[oi]) ]);
+				od;
+				M := [];
+				for oj in [1..Length(cw[1])] do;
+					u := [];
+					for oi in [1..Size(O)] do;
+						Append(u, VectorRep(cw[oi][oj], LeftActingDomain(O[oi])));
+					od;
+					Append(M, encode_code(u, GIBZ));
+				od;
+				Append(G, [ M ]);
+				v[i][j] := Zero(LeftActingDomain(O[i]));
+			od;
+		od;
+	od;
+
+	if Rank(G) < k then
+		Error("Cannot build the generator matrix of the concatenated code. Please report this to <ctjhai at plymouth.ac.uk> and supply the list of your inner and outer codes\n");
+	fi;
+	
+	return G;
+end;
+
+InstallMethod(BZCode, "linear code constructed using Blokh Zyablov concatenation", 
+	true, [IsList, IsList], 0,
+function( O, I )
+	local G, C;
+	
+	# Obtain generator matrix
+	G := __G_BZCode(O, I);
+
+	C := GeneratorMatCode(G, "Blokh Zyablov concatenated code", LeftActingDomain(I[1]));
+
+	C!.GeneratorMat := ShallowCopy(G);
+	
+	# Upper- and lower-bound of minimum distance
+	C!.lowerBoundMinimumDistance := Minimum( List([1..Size(O)], 
+		i->O[i]!.lowerBoundMinimumDistance * I[i]!.lowerBoundMinimumDistance) );
+	C!.upperBoundMinimumDistance := Minimum( List([1..Size(O)], 
+		i->O[i]!.upperBoundMinimumDistance * I[i]!.upperBoundMinimumDistance) );
+
+	# This can be displayed using Display(C) or History(C). This shows the
+	# componenet codes that are used to construct the concatenated code
+	C!.history := [ Concatenation(String("Inner codes: "), String(I)),
+					Concatenation(String("Outer codes: "), String(O)) ];
+
+	return C;
+end);
+
+# Faster version - without covering radius estimation
+InstallMethod(BZCodeNC, "linear code constructed using Blokh Zyablov concatenation", 
+	true, [IsList, IsList], 0,
+function( O, I )
+	local G, C;
+	
+	# Obtain generator matrix
+	G := __G_BZCode(O, I);
+
+	C := GeneratorMatCodeNC(G, LeftActingDomain(I[1]));
+
+	C!.GeneratorMat := ShallowCopy(G);
+
+	C!.name := "Blokh Zyablov concatenated code";	
+	# Upper- and lower-bound of minimum distance
+	C!.lowerBoundMinimumDistance := Minimum( List([1..Size(O)], 
+		i->O[i]!.lowerBoundMinimumDistance * I[i]!.lowerBoundMinimumDistance) );
+	C!.upperBoundMinimumDistance := Minimum( List([1..Size(O)], 
+		i->O[i]!.upperBoundMinimumDistance * I[i]!.upperBoundMinimumDistance) );
+
+	# Set covering radius to unknown
+    C!.boundsCoveringRadius := [ 0, WordLength(C) ];
+
+	# This can be displayed using Display(C) or History(C). This shows the
+	# componenet codes that are used to construct the concatenated code
+	C!.history := [ Concatenation(String("Inner codes: "), String(I)),
+					Concatenation(String("Outer codes: "), String(O)) ];
+
+	return C;
+end);
diff --git a/lib/codemisc.gd b/lib/codemisc.gd
new file mode 100644
index 0000000..d12169f
--- /dev/null
+++ b/lib/codemisc.gd
@@ -0,0 +1,117 @@
+#############################################################################
+##
+#A  codemisc.gd             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains miscellaneous functions for codes
+##
+#H  @(#)$Id: codemisc.gd,v 1.2 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codemisc_gd") :=
+    "@(#)$Id: codemisc.gd,v 1.2 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CodeWeightEnumerator( <code> )
+##
+##  Returns a polynomial over the rationals 
+##  with degree not greater than the length of the code.
+##  The coefficient of x^i equals
+##  the number of codewords of weight i.
+##
+DeclareOperation("CodeWeightEnumerator", [IsCode]); 
+
+########################################################################
+##
+#F  CodeDistanceEnumerator( <code>, <word> )
+##
+##  Returns a polynomial over the rationals
+##  with degree not greater than the length of the code.
+##  The coefficient of x^i equals 
+##  the number of codewords with distance i to <word>.
+DeclareOperation("CodeDistanceEnumerator", 
+										[IsCode, IsCodeword]); 
+
+########################################################################
+##
+#F  CodeMacWilliamsTransform( <code> )
+##
+##  Returns a polynomial with the weight
+##  distribution of the dual code as
+##  coefficients.
+##
+DeclareOperation("CodeMacWilliamsTransform", [IsCode]); 
+
+########################################################################
+##
+#F  WeightVector( <vector> )
+##
+##  Returns the number of non-zeroes in a vector.
+DeclareOperation("WeightVector", [IsVector]); 
+
+########################################################################
+##
+#F  RandomVector( <len> [, <weight> [, <field> ] ] )
+##
+DeclareOperation("RandomVector", [IsInt, IsInt, IsField]); 
+
+########################################################################
+##
+#F  IsSelfComplementaryCode( <code> )
+##
+##  Return true if <code> is a complementary code, false otherwise.
+##  A code is called complementary if for every v \in <code>
+##  also 1 - v \in <code> (where 1 is the all-one word).
+##
+DeclareProperty("IsSelfComplementaryCode", IsCode);
+
+########################################################################
+##
+#F  IsAffineCode( <code> )
+##
+##  Return true if <code> is affine, i.e. a linear code or
+##  a coset of a linear code, false otherwise.
+##
+DeclareProperty("IsAffineCode", IsCode);
+
+########################################################################
+##
+#F  IsAlmostAffineCode( <code> )
+##
+##  Return true if <code> is almost affine, false otherwise.
+##  A code is called almost affine if the size of any punctured
+##  code is equal to q^r for some integer r, where q is the
+##  size of the alphabet of the code.
+##
+DeclareProperty("IsAlmostAffineCode", IsCode);
+
+########################################################################
+##
+#F  IsGriesmerCode( <code> )
+##
+##  Return true if <code> is a Griesmer code, i.e. if
+##  n = \sum_{i=0}^{k-1} d/(q^i), false otherwise.
+##
+DeclareProperty("IsGriesmerCode", IsCode);
+
+########################################################################
+##
+#F  CodeDensity( <code> )
+##
+##  Return the density of <code>, i.e. M*V_q(n,r)/(q^n).
+##
+DeclareAttribute("CodeDensity", IsCode); 
+
+########################################################################
+##
+#F  DecreaseMinimumDistanceUpperBound( <C>, <s>, <iteration> )
+##
+##  Tries to compute the minimum distance of C.
+##  The algorithm is Leon's, see for more
+##  information his article.
+DeclareOperation("DecreaseMinimumDistanceUpperBound", 
+						[IsCode, IsInt, IsInt]); 
+
+
diff --git a/lib/codemisc.gi b/lib/codemisc.gi
new file mode 100644
index 0000000..20c5621
--- /dev/null
+++ b/lib/codemisc.gi
@@ -0,0 +1,742 @@
+#############################################################################
+##
+#A  codemisc.gi             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains miscellaneous functions for codes
+##
+#H  @(#)$Id: codemisc.gi,v 1.6 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codemisc_gi") :=
+    "@(#)$Id: codemisc.gi,v 1.6 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CodeWeightEnumerator( <code> )
+##
+##  Returns a polynomial over the rationals 
+##  with degree not greater than the length of the code.
+##  The coefficient of x^i equals
+##  the number of codewords of weight i.
+##
+
+InstallMethod(CodeWeightEnumerator, "unrestricted code", true, [IsCode], 0, 
+function( code ) 
+    
+    return LaurentPolynomialByCoefficients( 
+				ElementsFamily(FamilyObj(Rationals)), 
+				WeightDistribution( code ),  0  );
+    
+end);
+
+
+########################################################################
+##
+#F  CodeDistanceEnumerator( <code>, <word> )
+##
+##  Returns a polynomial over the rationals
+##  with degree not greater than the length of the code.
+##  The coefficient of x^i equals 
+##  the number of codewords with distance i to <word>.
+
+InstallMethod(CodeDistanceEnumerator, "unrestricted code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function( code, word ) 
+    
+    word := Codeword( word, code );
+    
+    return LaurentPolynomialByCoefficients( 
+		ElementsFamily(FamilyObj( Rationals )), 
+		DistancesDistribution( code, word ),  0  );
+    
+end);
+
+
+########################################################################
+##
+#F  CodeMacWilliamsTransform( <code> )
+##
+##  Returns a polynomial with the weight
+##  distribution of the dual code as
+##  coefficients.
+##
+
+InstallMethod(CodeMacWilliamsTransform, "unrestricted code", 
+	true, [IsCode], 0, 
+function( code ) 
+    local weightdist, transform, size, n, x, i, j, tmp;
+    
+    n := WordLength( code );
+    
+    # if dimension < n/2, or if non-linear code, 
+    # use weightdistribution of code,
+    # else use weightdistribution of dual code
+    if not IsLinearCode( code ) or Dimension( code ) < n / 2 then
+        weightdist := WeightDistribution( code );
+        size := Size( code );
+        transform := List( [ 1 .. n+1 ], x -> 0 );
+        for j in [ 0 .. n ] do
+            tmp := 0;
+            for i in [ 0 .. n ] do
+                tmp := tmp + weightdist[ i+1 ] * Krawtchouk( j, i, n, 2 );
+            od;
+            transform[ j+1 ] := tmp / size;
+        od;
+    else
+        transform := WeightDistribution( DualCode( code ) );
+    fi;
+
+    return LaurentPolynomialByCoefficients( 
+				ElementsFamily(FamilyObj( Rationals )), 
+				transform,  0  );
+end);
+
+
+########################################################################
+##
+#F  WeightVector( <vector> )
+##
+##  Returns the number of non-zeroes in a vector.
+
+InstallMethod(WeightVector, "method for vector", true, [IsVector], 0, 
+function( vector ) 
+    local pos, number, fieldzero;
+    
+    number := 0;
+    fieldzero := Zero( Field( vector ) );  
+    
+    for pos in [ 1 .. Length( vector ) ] do
+        
+        if vector[ pos ] <> fieldzero then
+            number := number + 1;
+        fi;
+        
+    od;
+    
+    return number;
+    
+end);
+
+
+########################################################################
+##
+#F  RandomVector( <len> [, <weight> [, <field> ] ] )
+##
+
+InstallMethod(RandomVector, "length, weight, field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(len, wt, field) 
+    local  vec, coord, coordlist, elslist, i;
+    
+    if len <= 0 then 
+        Error( "RandomVector: length must be a positive integer" );
+    fi;
+	if wt < -1 or wt > len then
+		Error( "RandomVector: <weight> must be an integer in the range",
+			   " -1 .. ", len );
+	fi;
+    
+    
+    vec := NullVector( len, field );
+    if wt > 0 then
+        coordlist := [ 1 .. len ];
+        elslist := Difference( AsSSortedList( field ), [ Zero(field) ] );
+        # make wt elements of the vector non-zero,
+        # choosing uniformly between the other field-elements
+        for i in [ 1 .. wt ] do
+            coord := Random( coordlist );
+            SubtractSet( coordlist, [ coord ] );
+            vec[ coord ] := Random( elslist );
+        od;
+    # do nothing if w = 0
+    elif wt = -1 then
+        # for each coordinate, choose uniformly from
+        # all field elements, including zero
+        elslist := AsSSortedList( field );
+        for i in [ 1 .. len ] do
+            vec[ i ] := Random( elslist );
+        od;
+    fi;
+
+    return vec;
+end);
+
+InstallOtherMethod(RandomVector, "length, weight, fieldsize", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(len, wt, q) 
+	return RandomVector(len, wt, GF(q)); 
+end); 
+
+InstallOtherMethod(RandomVector, "length, weight", true, [IsInt, IsInt], 0,  
+function(len, wt) 
+	return RandomVector(len, wt, GF(2)); 
+end); 
+
+InstallOtherMethod(RandomVector, "length, field", true, [IsInt, IsField], 0, 
+function(len, field) 
+	return RandomVector(len, -1, field); 
+end); 
+
+InstallOtherMethod(RandomVector, "length", true, [IsInt], 0, 
+function(len) 
+	return RandomVector(len, -1, GF(2)); 
+end); 
+
+
+########################################################################
+##
+#F  IsSelfComplementaryCode( <code> )
+##
+##  Return true if <code> is a complementary code, false otherwise.
+##  A code is called complementary if for every v \in <code>
+##  also 1 - v \in <code> (where 1 is the all-one word).
+##
+
+InstallMethod(IsSelfComplementaryCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function ( code )
+    local size, els, selfcompl, alloneword, newword; 
+   	if LeftActingDomain( code ) <> GF(2) then 
+		Error("IsSelfComplementaryCode: <code> is not a binary code" ); 	
+    elif IsLinearCode( code ) then
+        return IsSelfComplementaryCode( code );
+    else
+        els := AsSSortedList( code );
+        selfcompl := true;
+        alloneword := AllOneCodeword( WordLength( code ), GF(2) );
+        while Length( els ) > 0 and selfcompl = true do
+            newword := alloneword - els[ 1 ];
+            if newword <> els[ 1 ] then
+                if newword in els then
+                    els := Difference( els, [ newword ] );
+                else
+                    selfcompl := false;
+                fi;
+                els := Difference( els, [ els[ 1 ] ] );
+            fi;
+        od;
+        return selfcompl;
+    fi;
+end);
+
+InstallMethod(IsSelfComplementaryCode, "method for linear code", 
+	true, [IsLinearCode], 0, 
+function ( code )
+	if LeftActingDomain( code ) <> GF(2) then 
+		Error("IsSelfComplementaryCode: <code> is not a binary code" ); 
+	else 
+    	return( AllOneCodeword( WordLength( code ), GF(2) ) in code );
+	fi;
+end);
+
+
+########################################################################
+##
+#F  IsAffineCode( <code> )
+##
+##  Return true if <code> is affine, i.e. a linear code or
+##  a coset of a linear code, false otherwise.
+##
+
+InstallMethod(IsAffineCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function ( code )
+    
+    if IsLinearCode( code ) then
+        return IsAffineCode( code );   
+    elif NullWord( code ) in code then
+        # code cannot be a coset code of a linear code
+        return false;
+    elif not ( Size( code ) in List( [ 0 .. WordLength( code ) ],
+            x -> Characteristic( LeftActingDomain( code ) ) ^ x ) ) then
+        # the code must have a "dimension"
+        return false;
+    else
+        # subtract the first codeword from all codewords.
+        # if the resulting code is linear, then the
+        # original code is affine.
+        return IsLinearCode( 
+                       CosetCode( code, NullWord( code  ) 
+                               - CodewordNr( code, 1 ) ) );
+    fi;
+    
+end);
+
+InstallTrueMethod(IsAffineCode, IsLinearCode); 
+
+
+########################################################################
+##
+#F  IsAlmostAffineCode( <code> )
+##
+##  Return true if <code> is almost affine, false otherwise.
+##  A code is called almost affine if the size of any punctured
+##  code is equal to q^r for some integer r, where q is the
+##  size of the alphabet of the code.
+##
+
+InstallMethod(IsAlmostAffineCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function( code )
+    
+    local F, n, i, j, subcode, sizelist, coordlist, almostaffine;
+    
+        if IsAffineCode( code ) then
+            # every affine code is also almost affine
+            almostaffine := true;
+        else
+            # not affine
+            almostaffine := true;
+           	
+			F := LeftActingDomain( code ); 
+
+            # however, any code over GF(2) or GF(3) is affine
+            # if it is almost affine.
+            # so non-affine codes with q=2,3 are also not almost affine
+            if Size( F ) = 2 
+               or Size( F ) = 3 then
+                almostaffine := false;
+            fi;
+            
+            n := WordLength( code );
+            sizelist := List( [ 0 .. n ], x -> Characteristic( F ) ^ x );
+
+            # first check whether the code itself is of size q^r
+            if not ( Size( code ) in sizelist ) then
+                almostaffine := false;
+            else
+                # now check for all possible puncturings
+                i := 1;
+                while almostaffine and i < n do
+                    coordlist := List( Tuples( [ 1 .. n ], i ), 
+                                       x -> Difference( [ 1 .. n ], x ) );
+                    j := 1;
+                    while almostaffine 
+                      and j < Length( coordlist ) do
+                        subcode := PuncturedCode( code, coordlist[ j ] );
+                        # one fault is enough !
+                        if not Size( subcode ) in sizelist then
+                            almostaffine := false;
+                        fi;
+                        j := j + 1;
+                    od;
+                    i := i + 1;
+                od;
+            fi;
+        fi;
+    return almostaffine;
+end);
+
+InstallTrueMethod(IsAlmostAffineCode, IsAffineCode); 
+
+
+########################################################################
+##
+#F  IsGriesmerCode( <code> )
+##
+##  Return true if <code> is a Griesmer code, i.e. if
+##  n = \sum_{i=0}^{k-1} d/(q^i), false otherwise.
+##
+
+InstallMethod(IsGriesmerCode, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function( code )
+    
+    if IsLinearCode( code ) then
+        return IsGriesmerCode( code ); 
+	else 
+		Error( "IsGriesmerCode: <code> must be a linear code" );
+    fi;
+
+end); 
+
+InstallMethod(IsGriesmerCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function( code ) 
+	
+	local n, k, d, q; 
+
+    n := WordLength( code );
+    k := Dimension( code );
+    d := MinimumDistance( code );
+    q := Size( LeftActingDomain( code ) );
+    return n = Sum( [ 0 .. k-1 ], x -> IntCeiling( d / q^x ) );
+end);
+
+
+########################################################################
+##
+#F  CodeDensity( <code> )
+##
+##  Return the density of <code>, i.e. M*V_q(n,r)/(q^n).
+##
+
+InstallMethod(CodeDensity, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function ( code )
+    
+    local n, q, cr;
+
+    cr := CoveringRadius( code );
+
+	# Linear codes with redundancy >= 20 can return an interval 
+	# for the Covering Radius, so this test is necessary. 
+	if not IsInt( cr ) then
+        Error( "CodeDensity: the covering radius of <code> is unknown" );
+    fi;
+    
+    n := WordLength( code  );
+    q := Size( LeftActingDomain( code ) );
+    return Size( code )
+           * SphereContent( n, CoveringRadius( code ), q )
+           / q^n;
+    
+end);
+
+
+########################################################################
+##
+#F  DecreaseMinimumDistanceUpperBound( <C>, <s>, <iteration> )
+##
+##  Tries to compute the minimum distance of C.
+##  The algorithm is Leon's, see for more
+##  information his article.
+
+InstallMethod(DecreaseMinimumDistanceUpperBound, 
+	"method for unrestricted code, s, iteration", 
+	true, [IsCode, IsInt, IsInt], 0, 
+function(C, s, iteration) 
+	if IsLinearCode(C) then 
+		return DecreaseMinimumDistanceUpperBound(C, s, iteration); 
+	else 
+		Error("DecreaseMinimumDIstanceUB: <C> must be a linear code"); 
+	fi; 
+end); 
+
+InstallMethod(DecreaseMinimumDistanceUpperBound, 
+	"method for linear code, s, iteration", 
+	true, [IsLinearCode, IsInt, IsInt], 0, 
+function ( C, s, iteration ) 
+	# <C> is the code to compute the min. dist. for
+    # <s> is the parameter to help find words with
+	# small weight
+	# <iteration> is number of iterations to perform
+
+	local           
+          trials,    # the number of trials so far
+          n, k,      # some parameters of the code C
+          genmat,    # the generator matrix of C
+          d,         # the minimum distance so far
+          cont,      # have we computed enough trials ?      
+          N,         # the set { 1, ..., n }
+          S,         # a random s-subset of N
+          h, i, j,   # some counters
+          sigma,     # permutation, mapping of N, mapping S on {1,...,s}
+          tau,       # permutation, for eliminating first s columns of Emat
+          Emat,      # genmat ^ sigma
+          Dmat,      # (k-e,n-s) right lower submatrix of Emat
+          e,         # rank of k * s submatrix of Emat
+          nullrow,   # row of zeroes, for appending to Emat
+          res,       # result from PutSemiStandardForm
+          w,         # runs through all words spanned by Dmat
+          t,         # weight of the current codeword
+          v,         # word with current lowest weight
+          Bmat,      # (e, n-s) right upper submatrix of Emat
+          Bsupp,     # supports of differences of rows of Bmat
+          Bweight,   # weights of rows of Bmat
+          sup1, sup2,# temporary variables holding supports
+          Znonempty, # true if e < s, false otherwise (indicates whether
+                     # Zmat is a real matrix or not
+          Zmat,      # ( s-e, e ) middle upper submatrix of Emat
+          Zweight,   # weights of differences of rows of Zmat
+          wsupp,     # weight of the current codeword w of D
+          ij1,       # 0: i<>1 and j<>1 1: i=1 xor j=1 2: i=1 and j=1
+          nullw,     # nullword of length s, begin of w
+          PutSemiStandardForm,   # local function for partial Gaussian
+                                 # elimination
+          sups,      # the supports of the elements of B
+          found;     # becomes true if a better minimum distance is
+                     # found
+    
+    
+    # check the arguments
+    if s < 1 or s > Dimension( C ) then
+        Error( "DecreaseMinimumDistanceUB: <s> must lie between 1 and the ",
+               "dimension of <C>." );
+    fi;
+    if iteration < 1 then 
+        Error( "DecreaseMinimumDistanceLB: <iteration> must be at least zero." );
+    fi;
+
+    # the function PutSemiStandardForm is local
+    ###########################################################################
+    ##
+    #F  PutSemiStandardForm( <mat>, <s> )
+    ##
+    ##  Put first s coordinates of mat in standard form.
+    ##  Return e as the rank of the s x s left upper
+    ##  matrix. The coordinates s+1, ..., n are not permuted.
+    ##
+    ##  This function is based on PutStandardForm.
+    ##
+    ##  (maybe it's better to make this function local
+    ##   in DecreaseMinimumDistanceUpperBound)
+    ##
+
+    PutSemiStandardForm := function ( mat, s )
+
+        local k, n, zero,
+              stop, found,
+              g, h, i, j,
+              row, e, tau;
+
+        k := Length(mat);     # number of rows: dimension
+        n := Length(mat[1]);  # number of columns: wordlength
+
+        zero := Zero(GF(2)); 
+        stop := false;
+        e := 0;
+        tau := ( );
+
+        for j in [ 1..s ] do
+            if not stop then
+                if mat[j][j] = zero then
+                    # start looking for another pivot
+                    i := j;
+                    found := false;
+                    while ( i <= s ) and not found do
+                        h := j;
+                        while ( h <= k ) and not found do
+                            if mat[h][i] <> zero then
+                                found := true;
+                            else
+                                h := h + 1;
+                            fi;  # if mat[h][i] <> zero
+                        od;  # while ( h <= k ) and not found
+                        if not found then
+                            i := i + 1;
+                        fi;  # if not found
+                    od;  # while ( i <= s ) and not found
+                    if not found then
+                        stop := true;
+                    else
+                        # pivot found at position (h,i)
+                        # increase subrank
+                        e := e + 1;
+                        # permutate the matrix so that (h,i) <-> (j,j)
+                        if h <> j then
+                            row := mat[h];
+                            mat[h] := mat[j];
+                            mat[j] := row;
+                        fi;  # if h <> j
+                        if i <> j then
+                            tau := tau * (i,j);
+                            for g in [ 1 .. k ] do
+                                mat[g] := Permuted( mat[g], (i,j) );
+                            od;  # for g in [ 1..k ]
+                        fi;  # if i <> j
+                    fi;  # if not found
+                else
+                    e := e + 1;
+                fi;  # if mat[j][j] = zero
+
+                if not stop then
+                    for i in [ 1..k ] do
+                        if i <> j then
+                            if mat[i][j] <> zero then
+                                mat[i] := mat[i] + mat[j];
+                            fi;  # if mat[i][j] <> zero
+                        fi;  # if i <> j
+                    od;  # for i in [ 1..k ]
+                fi;  # if not stop
+            fi;  # if not stop
+        od;  # for j in [ 1..s ] do
+
+        return [ e, tau ];
+
+    end;
+
+    n := WordLength( C );
+    k := Dimension( C );
+    genmat := GeneratorMat( C );
+    
+    # step 1. initialisation
+    trials := 0;
+    d := n;
+    cont := true; 
+    found := false;
+
+    while cont do
+        
+        # step 2. 
+        trials := trials + 1;
+        InfoMinimumDistance( "Trial nr. ", trials, "   distance: ", d, "\n" );
+        
+        # step 3.  choose a random s-elements subset of N
+        N := [ 1 .. WordLength( C ) ];
+        S := [ ];
+        for i in [ 1 .. s ] do
+            S[ i ] := Random( N );  # pick a random element from N
+            RemoveSet( N, S[ i ] ); # and remove it from N
+        od;
+        Sort( S );                  # not really necessary, but
+                                    # it doesn't hurt either
+        
+        # step 4.  choose a permutation sigma of N,
+        #          mapping S onto { 1, ..., s }
+        Append( S, N );
+        sigma := PermList( S ) ^ (-1);
+        
+        # step 5.  Emat := genmat^sigma (genmat is the generator matrix C)
+        Emat := [ ];
+        for i in [ 1 .. k ] do
+            Emat[ i ] := Permuted( genmat[ i ], sigma );
+        od;
+        
+        # step 6.  apply elementary row operations to E
+        #          and perhaps a permutation tau so that
+        #          we get the following form:
+        #          [ I | Z | B ]
+        #          [ 0 | 0 | D ]
+        #          where I is the e * e identity matrix,
+        #          e is the rank of the k * s left submatrix of E
+        #          the permutation tau leaves { s+1, ..., n } fixed
+        
+        InfoMinimumDistance( "Gaussian elimination of E ... \n");
+        
+        res := PutSemiStandardForm( Emat, s );
+        e := res[ 1 ];    # rank (in most cases equal to s)
+        tau := res[ 2 ];  # permutation of { 1, ..., s } 
+        
+        # append null-row to Emat (at front)
+        nullrow := NullMat( 1, n, GF(2) );
+        Append( nullrow, Emat );
+        Emat := nullrow;
+        
+        InfoMinimumDistance( "Gaussian elimination of E ... done. \n" );
+        
+        # retrieve Dmat from Emat
+        Dmat := [ ];
+        for i in [ e + 1 .. k ] do
+            Dmat[ i - e ] := List( [ s+1 .. n ], x -> Emat[ i+1 ][ x ] );
+        od;
+        
+        # retrieve Bmat from Emat
+        # we only need the support of the differences of the
+        # rows of B
+        Bmat := [ ];
+        Bmat[ 1 ] := NullVector( n-s, GF(2) );
+        for j in [ 2 .. e+1 ] do
+            Bmat[ j ] := List( [ s+1 .. n ], x -> Emat[ j ][ x ] );
+        od;
+        
+        InfoMinimumDistance( "Computing supports of B  ... \n" );
+        sups := List( [ 1 .. e+1 ], x -> Support( Codeword( Bmat[ x ] ) ) );
+        
+        # compute supports of differences of rows of Bmat
+        # and the weights of these supports
+        # do this once every trial, instead of for each codeword,
+        # to save time
+        Bsupp := List( [ 1 .. e ], x -> [ ] );
+        Bweight := List( [ 1 .. e ], x -> [ ] );
+        for i in [ 1 .. e ] do
+            sup1 := sups[ i ];
+#            Bsupp[ i ] := List( [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ],
+#                                x -> Difference( Union( sup1, sups[ x ] ),
+#                                        Intersection( sup1, sups[ x ] ) ) );
+            
+            for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do
+                sup2 := sups[ j ];
+                Bsupp[ i ][ j ] := Difference( Union( sup1, sup2 ),
+                                               Intersection( sup1, sup2 ) );
+                Bweight[ i ][ j ] := Length( Bsupp[ i ][ j ] );
+            od;
+        od;
+        InfoMinimumDistance( "Computing supports of B  ... done. \n" );
+        
+        # retrieve Zmat from Emat
+        # in this case we only need the weights of the supports of
+        # the differences of the rows of Zmat
+        # because we don't have to add them to codewords
+        
+        if e < s then
+            
+            InfoMinimumDistance( "Computing weights of Z   ... \n" );
+            Znonempty := true;
+            Zmat := List( [ 1 .. e ], x -> [ ] );
+            Zmat[ 1 ] := NullVector( s-e, GF(2) );
+            for i in [ 2 .. e+1 ] do
+                Zmat[ i ] := List( [ e+1 .. s ], x -> Emat[ i ][ x ] );
+            od;
+            Zweight := List( [ 1 ..e ], x -> [ ] );
+            for i in [ 1 .. e ] do
+                for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do
+                    Zweight[ i ][ j ] := 
+                      WeightCodeword( Codeword( Zmat[ i ] + Zmat[ j ] ) );
+                od;
+            od;
+            InfoMinimumDistance( "Computing weights of Z   ... done. \n" );
+            
+        else
+            Znonempty := false;
+        fi;
+              
+        # step 7.  for each w in (n-s, k-e) code spanned by D
+        for w in AsSSortedList( GeneratorMatCode( Dmat, GF(2) ) ) do
+            wsupp := Support( w );
+            
+            # step 8.
+            for i in [ 1 .. e ] do
+                
+                # step 9.
+                for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do
+                    
+                    ij1 := KroneckerDelta( i, 1 ) + KroneckerDelta( j, 1 );
+                    
+                    # step 10.
+                    if Znonempty then
+                        t := Zweight[ i ][ j ];
+                    else
+                        t := 0;
+                    fi;
+                    
+                    # step 11.
+                    if t <= ij1 then
+                        
+                        # step 12.
+                        t := t  
+                             + Bweight[ i ][ j ]
+                             + Length( wsupp ) 
+                             - 2 * Length( Intersection(
+                                     Bsupp[ i ][ j ], wsupp ) );
+                        t := t + ( 2 - ij1 );
+                        if 0 < t and t < d then
+                            
+                            found := true;
+                            
+                            # step 13.
+                            d := t;
+                            C!.upperBoundMinimumDistance :=
+                              Minimum( UpperBoundMinimumDistance( C ), t );
+                            # step 14.
+                            nullw := NullVector( s, GF(2) );
+                            Append( nullw, VectorCodeword( w ) );
+                            v := Emat[ i ] + Emat[ j ] + nullw;
+                            v := Permuted( v, tau ^ (-1) );
+                            v := Permuted( v, sigma ^ (-1) );
+                        fi;
+                    fi;
+                od;
+            od;
+        od;
+        if iteration <= trials then
+            cont := false;
+        fi;
+    od;
+    if found then
+        return rec( mindist := d, word := v );
+    fi;
+end);
+
diff --git a/lib/codenorm.gd b/lib/codenorm.gd
new file mode 100644
index 0000000..ecdaa99
--- /dev/null
+++ b/lib/codenorm.gd
@@ -0,0 +1,71 @@
+#############################################################################
+##
+#A  codenorm.gd             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains functions for calculating code norms
+##
+#H  @(#)$Id: codenorm.gd,v 1.2 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codenorm_gd") :=
+    "@(#)$Id: codenorm.gd,v 1.2 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CoordinateSubCode( <code>, <i>, <element> )
+##
+##  Return the subcode of <code>, that has elements
+##  with an <element> in coordinate position <i>.
+##  If no elements have an <element> in position <i>, return false.
+##
+DeclareOperation("CoordinateSubCode", [IsCode, IsInt, IsFFE]); 
+
+########################################################################
+##
+#F  CoordinateNorm( <code>, <i> )
+##
+##  Returns the norm of code with respect to coordinate i.
+##
+DeclareAttribute("CoordinateNorm", IsCode, "mutable");
+
+########################################################################
+##
+#F  CodeNorm( <code> )
+##
+##  Return the norm of code.
+##  The norm of code is the minimum of the coordinate norms
+##  of code with respect to i = 1, ..., n.
+##
+DeclareAttribute("CodeNorm", IsCode);
+
+########################################################################
+##
+#F  IsCoordinateAcceptable( <code>, <i> )
+##
+##  Test whether coordinate i of <code> is acceptable.
+##  (a coordinate is acceptable if the norm of code with respect to
+##   that coordinate is less than or equal to one plus two times the 
+##   covering radius of code).
+DeclareOperation("IsCoordinateAcceptable", 
+										[IsCode, IsInt]); 
+########################################################################
+##
+#F  IsNormalCode( <code> )
+##
+##  Return true if code is a normal code, false otherwise.
+##  A code is called normal if its norm is smaller than or
+##  equal to two times its covering radius + one.
+##
+DeclareProperty("IsNormalCode", IsCode);
+
+########################################################################
+##
+#F  GeneralizedCodeNorm( <code>, <code1>, <code2>, ... , <codek> )
+## 
+##  Compute the k-norm of code with respect to the k subcode
+##  code1, code2, ... , codek.
+##
+DeclareGlobalFunction("GeneralizedCodeNorm"); 
+
diff --git a/lib/codenorm.gi b/lib/codenorm.gi
new file mode 100644
index 0000000..5f022a8
--- /dev/null
+++ b/lib/codenorm.gi
@@ -0,0 +1,297 @@
+#############################################################################
+##
+#A  codenorm.gi             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  This file contains functions for calculating code norms
+##
+#H  @(#)$Id: codenorm.gi,v 1.3 2003/02/12 03:49:16 gap Exp $
+##
+Revision.("guava/lib/codenorm_gi") :=
+    "@(#)$Id: codenorm.gi,v 1.3 2003/02/12 03:49:16 gap Exp $";
+
+########################################################################
+##
+#F  CoordinateSubCode( <code>, <i>, <element> )
+##
+##  Return the subcode of <code>, that has elements
+##  with an <element> in coordinate position <i>.
+##  If no elements have an <element> in position <i>, return false.
+##
+
+InstallMethod(CoordinateSubCode, "method for unrestricted code, position, FFE", 
+	true, [IsCode, IsInt, IsFFE], 0, 
+function ( code, i, element )
+    local els;
+
+    if i < 1 or i > WordLength( code ) then
+        Error( "CoordinateSubCode: <i> must lie in the range [ 1 .. n ]" );
+    fi;
+    if not ( element in AsSSortedList( LeftActingDomain( code ) ) ) then
+        Error( "CoordinateSubCode: <element> must be an element of ",
+                LeftActingDomain( code ) );
+    fi;
+
+    els := AsSSortedList( code );
+    els := VectorCodeword( els );
+    els := Filtered( els, x -> x[ i ] = element );
+    if Length( els ) = 0 then
+        return false;
+    else
+        return ElementsCode( els, "subcoordinate code", 
+								LeftActingDomain( code )  );
+    fi;
+end);
+
+
+########################################################################
+##
+#F  CoordinateNorm( <code>, <i> )
+##  
+##  Returns the norm of code with respect to coordinate i.
+##
+
+InstallMethod(CoordinateNorm, "attribute method for unrestricted code", 
+	true, [IsCode], 0, 
+function( code ) 
+	# This is a mutable attribute.  Initial value is all -1, updated as 
+	# other method of CoordinateNorm is called. 
+	return List( [ 1 .. WordLength( code ) ], x -> -1 ); 
+end); 
+
+
+InstallOtherMethod(CoordinateNorm, "method for unrestricted code, coordinate", 
+	true, [IsCode, IsInt], 0, 
+function ( code, i )
+
+    local max, els, subcode, f, j, w, n, c;
+
+    if i < 1 or i > WordLength( code ) then
+        Error( "CoordinateNorm: <i> must lie in the range [ 1 .. n ]" );
+    fi;
+
+    if CoordinateNorm( code )[ i ] = -1 then
+        max := -1;
+        els := AsSSortedList( LeftActingDomain( code ) );
+        subcode := [ 1 .. Length( els ) ];
+        f := [ 1 .. Length( els ) ];
+        for j in [ 1 .. Length( els ) ] do
+            subcode[ j ] := CoordinateSubCode( code, j, els[ j ] );
+        od;
+        for w in Codeword( CosetLeadersMatFFE( CheckMat( code ),
+                           LeftActingDomain( code ) ) ) do
+            for j in [ 1 .. Length( els ) ] do
+                if subcode[ j ] = false then
+                    f[ j ] := WordLength( code );
+                else
+                    f[ j ] := MinimumDistance( subcode[ j ], w );
+                fi;
+            od;
+            n := Sum( f );
+            if n > max then
+                max := n;
+            fi;
+        od;
+        c := CoordinateNorm( code ); 
+		c[ i ] := max;
+    fi;
+    return CoordinateNorm(code)[i];
+end);
+
+
+########################################################################
+##
+#F  CodeNorm( <code> )
+##
+##  Return the norm of code.
+##  The norm of code is the minimum of the coordinate norms
+##  of code with respect to i = 1, ..., n.
+##
+
+InstallMethod(CodeNorm, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function( code ) 
+
+	return Minimum( List( [ 1 .. WordLength( code ) ],
+                           x -> CoordinateNorm( code, x ) ) );
+end);
+
+
+########################################################################
+##
+#F  IsCoordinateAcceptable( <code>, <i> )
+##
+##  Test whether coordinate i of <code> is acceptable.
+##  (a coordinate is acceptable if the norm of code with respect to
+##   that coordinate is less than or equal to one plus two times the 
+##   covering radius of code).
+
+InstallMethod(IsCoordinateAcceptable, "method for unrestricted code, position", 
+	true, [IsCode, IsInt], 0, 
+function ( code, i )
+    
+    local cr;
+    
+    cr := CoveringRadius( code );
+    if IsInt( cr ) then
+        if CoordinateNorm( code, i ) <= 2 * cr + 1 then
+            return true;
+        else
+            return false;
+        fi;
+    else
+        Error( "IsCoordinateAcceptable: Sorry, the covering radius is ",
+               "not known and not easy to compute." );
+    fi;
+    
+end);
+
+
+########################################################################
+##
+#F  IsNormalCode( <code> )
+##
+##  Return true if code is a normal code, false otherwise.
+##  A code is called normal if its norm is smaller than or
+##  equal to two times its covering radius + one.
+##
+
+InstallMethod(IsNormalCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function( code ) 
+	local n, k, d, r, i, isnormal;  
+
+    if LeftActingDomain( code ) <> GF(2) then
+        Error( "IsNormalCode: <code> must be a binary code" );
+    elif IsLinearCode( code ) then
+        return IsNormalCode( code );
+    else
+        n := WordLength( code );
+        k := Dimension( code );
+        d := MinimumDistance( code );
+        r := CoveringRadius( code );
+        if not IsInt( r ) then
+            r := -1;
+        fi;
+        if d = 2 * r
+           or ( d = 2 * r - 1 and EuclideanRemainder( n, r ) <> 0 )
+           or ( r = 1 and n <= 9 )
+           or ( r = 1 and Size( code ) <= 95 )
+           then
+            return true;
+        else
+            if r >= 0 then
+                i := 1;
+                isnormal := false;
+                while i <= n and not isnormal do
+                    isnormal := IsCoordinateAcceptable( code, i );
+                    i := i + 1;
+                od;
+                return isnormal;
+            else
+                Error( "IsNormalCode: sorry, the covering radius for ",
+                       "this code has not yet been computed." );
+            fi;
+        fi;
+    fi;
+end);
+
+InstallMethod(IsNormalCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function( code ) 
+    local n, k, d, r, i, isnormal;
+	if LeftActingDomain( code ) <> GF(2) then 
+		Error("IsNormalCode: <code> must be a binary code");  
+	fi; 
+    
+	n := WordLength( code );
+    k := Dimension( code );
+    d := MinimumDistance( code );
+    r := CoveringRadius( code );
+    if not IsInt( r ) then
+        r := -1;
+    fi;
+    if d = 2 * r
+       or ( d = 2 * r - 1 and EuclideanRemainder( n, r ) <> 0 )
+       or ( r = 1 and n <= 9 )
+       or ( r = 1 and Size( code ) <= 95 )
+       # the following conditions are only valid for linear codes
+       or ( n <= 15 )
+       or ( k <= 5 )
+       or ( n-k <= 7 )
+       or ( d <= 4 )
+       or ( r >= 0 and r <= 3 )
+       or ( IsPerfectCode( code ) )
+       then
+        return true;
+    else
+        if r >= 0 then
+            # a code is normal if one of the coordinates is acceptable
+            i := 1;
+            isnormal := false;
+            while i <= n and not isnormal do
+                isnormal := IsCoordinateAcceptable( code, i );
+                i := i + 1;
+            od;
+            return isnormal;
+        else
+            Error( "IsNormalCode: sorry, the covering radius for ",
+                   "this code has not yet been computed." );
+        fi;
+    fi;
+end);
+
+
+########################################################################
+##
+#F  GeneralizedCodeNorm( <code>, <code1>, <code2>, ... , <codek> )
+## 
+##  Compute the k-norm of code with respect to the k subcode
+##  code1, code2, ... , codek.
+##
+
+InstallGlobalFunction(GeneralizedCodeNorm, 
+function ( arg )
+    local i, mindist, min, max, globalmax, x, union,word;
+    
+    if Length( arg ) < 2 then
+        Error( "GeneralizedCodeNorm: no subcodes are specified" );
+    fi;
+    if not IsCode( arg[ 1 ] ) then
+        Error( "GeneralizedCodeNorm: <code> must be a code" );
+    fi;
+    union := arg[ 2 ];
+    for i in [ 1 .. Length( arg ) - 1 ] do
+        if WordLength( arg[ i + 1 ] ) <> WordLength( arg[ 1 ] ) then
+            Error( "GeneralizedCodeNorm: length of code ", i,
+                   " is not equal to the length of <code>" );
+        fi;
+        if not ( arg[ i + 1 ] in arg[ 1 ] ) then
+            Error( "GeneralizedCodeNorm: code ", i,
+                   " is not a subcode of code." );
+        fi;
+        if i > 1 then
+            union := AddedElementsCode( union,
+                       AsSSortedList( arg[ i + 1 ] ) );
+        fi;
+    od;
+    if arg[ 1 ] <> union then
+        Error( "GeneralizedCodeNorm: <code> is not the union of the ",
+               "subcodes" );
+    fi;
+
+    globalmax := -1;
+    for word in AsSSortedList( arg[ 1 ] ) do
+        mindist := List( [ 2 .. Length( arg ) ],
+                          x -> MinimumDistance( arg[ x ], word ) );
+        min := Minimum( mindist );
+        max := Maximum( mindist );
+        if min + max > globalmax then
+            globalmax := min + max;
+        fi;
+    od;
+    return globalmax;
+end);
+
diff --git a/lib/codeops.gd b/lib/codeops.gd
new file mode 100644
index 0000000..e1fa76d
--- /dev/null
+++ b/lib/codeops.gd
@@ -0,0 +1,447 @@
+#############################################################################
+##
+#A  codeops.gd               GUAVA                              Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  All the code operations 
+##
+#H  @(#)$Id: codeops.gd,v 1.5 2003/02/12 03:49:17 gap Exp $
+##
+##  20 Dec 07 14:24 (CJ) added IsDoublyEvenCode, IsSinglyEvenCode
+##                       and IsEvenCode functions
+##
+Revision.("guava/lib/codeops_gd") :=
+    "@(#)$Id: codeops.gd,v 1.5 2003/02/12 03:49:17 gap Exp $";
+
+#############################################################################
+##
+#F  WordLength( <C> ) . . . . . . . . . . . .  length of the codewords of <C>
+##
+
+#############################################################################
+##
+#F  IsLinearCode( <C> ) . . . . . . . . . . . . . . . checks if <C> is linear
+##
+## If so, the record fields will be adjusted to the linear representation 
+##
+DeclareProperty("IsLinearCode", IsCode);
+
+#############################################################################
+##
+#F  Redundancy( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##
+DeclareAttribute("Redundancy", IsCode);
+
+
+#############################################################################
+##
+#F  GeneratorMat(C) . . . . .  finds the generator matrix belonging to code C
+##
+##  Pre: C should contain a generator or check matrix
+##
+DeclareAttribute("GeneratorMat", IsCode);
+
+#############################################################################
+##
+#F  CheckMat( <C> ) . . . . . . .  finds the check matrix belonging to code C
+##
+##  Pre: <C> should be a linear code
+##
+DeclareAttribute("CheckMat", IsCode);
+
+
+#############################################################################
+##
+#F  IsCyclicCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+DeclareProperty("IsCyclicCode", IsLinearCode);
+
+
+#############################################################################
+##
+#F  GeneratorPol( <C> ) . . . . . . . . returns the generator polynomial of C
+##
+##  Pre: C must have a generator or check polynomial
+##
+DeclareAttribute("GeneratorPol", IsCode);
+
+
+#############################################################################
+##
+#F  CheckPol( <C> ) . . . . . . . .  returns the parity check polynomial of C
+##
+##  Pre: C must have a generator or check polynomial
+##
+DeclareAttribute("CheckPol", IsCode);
+
+
+#############################################################################
+##
+#F  MinimumDistance( <C> [, <w>] )  . . . .  determines the minimum distance
+##
+##  MinimumDistance( <C> ) determines the minimum distance of <C>
+##  MinimumDistance( <C>, <w> ) determines the minimum distance to a word <w>
+##
+DeclareAttribute("MinimumDistance", IsCode);
+
+
+#############################################################################
+##
+#F  MinimumDistanceCodeword( <C> [, <w>] )  . . . .  determines the minimum distance
+##                                                                                having  minimum distance to w 
+##                                                                               (w= zero vector is the default)
+##  MinimumDistance( <C>, <w> ) determines the minimum distance to a word <w>
+##
+DeclareAttribute("MinimumDistanceCodeword", IsCode);
+
+#############################################################################
+##
+##  MinimumDistanceLeon( <C> ) determines the minimum distance of <C>
+##
+DeclareAttribute("MinimumDistanceLeon", IsLinearCode);
+
+#############################################################################
+##
+#F  DesignedDistance( arg )  . . . . . . . . . . . . . . . . . . . . . . . .
+## 
+##  Cannot be calculated.  Must be set at creation, if at all. 
+DeclareAttribute("DesignedDistance", IsCode);
+
+
+#############################################################################
+##
+#F  LowerBoundMinimumDistance( arg )  . . . . . . . . . . . . . . . . . . .
+##
+DeclareOperation("LowerBoundMinimumDistance", [IsCode]);  
+
+
+#############################################################################
+##
+#F  UpperBoundMinimumDistance( arg )  . . . . . . . . . . . . . . . . . . .
+##
+DeclareOperation("UpperBoundMinimumDistance", [IsCode]); 
+
+#############################################################################
+##
+#F  UpperBoundOptimalMinimumDistance( arg )  . . . . . . . . . . . . . . . .
+## 
+##  UpperBoundMinimumDistance of optimal code with same parameters 
+## 
+DeclareAttribute("UpperBoundOptimalMinimumDistance", IsCode);
+
+
+#############################################################################
+##
+#F  MinimumWeightOfGenerators( arg )  . . . . . . . . . . . . . . . . . . . .
+##
+##
+DeclareAttribute("MinimumWeightOfGenerators", IsCode); 
+
+
+#############################################################################
+##
+#F  MinimumWeightWords( <C> ) . . .  returns the code words of minimum weight
+##
+DeclareAttribute("MinimumWeightWords", IsCode);
+
+
+#############################################################################
+##
+#F  WeightDistribution( <C> ) . . . returns the weight distribution of a code
+##
+DeclareAttribute("WeightDistribution", IsCode);
+
+
+#############################################################################
+##
+#F  InnerDistribution( <C> )  . . . . . .  the inner distribution of the code
+##
+##  The average distance distribution of distances between all codewords
+##
+DeclareAttribute("InnerDistribution", IsCode);
+
+
+#############################################################################
+##
+#F  OuterDistribution( <C> )  . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  the number of codewords on a distance i from all elements of GF(q)^n
+##
+DeclareAttribute("OuterDistribution", IsCode);
+
+
+#############################################################################
+##
+#F  CodewordVector( <l>, <C> ) 
+##
+##  returns the element of the code <C> corresponding to the coefficient
+##  list <l>. This is a synonym for \* for codes
+DeclareOperation("CodewordVector", [IsList, IsCode]); 
+
+
+#############################################################################
+##
+#F  InformationWord( C, c )  . . . . . . . "decodes" a codeword in C to the 
+##                                information "message" word m, so m*C=c
+##
+DeclareOperation("InformationWord", [IsCode,IsCodeword]); 
+
+
+#############################################################################
+##
+#F  IsSelfDualCode( <C> ) . . . . . . . . . determines whether C is self dual
+##
+##  i.o.w. each codeword is orthogonal to all codewords (including itself)
+##
+DeclareProperty("IsSelfDualCode", IsCode);
+
+
+#############################################################################
+##
+#F  \*( <l>, <C> )  . . . . .  the codeword belonging to information vector x
+##
+##  only valid if C is linear! 
+##
+
+
+#############################################################################
+##
+#F  \+( <l>, <C> )  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##
+
+
+#############################################################################
+##
+#F  \in( <l>, <C> ) . . . . . .  true if the vector is an element of the code
+##
+##
+
+
+#############################################################################
+##
+#F  \=( <C1>, <C2> )  . . . . .  tests if Set(Elements(C1))=Set(Elements(C2))
+##
+##  Post: returns a boolean
+##
+
+
+#############################################################################
+##
+#F  SyndromeTable ( <C> ) . . . . . . . . . . . . . . . a Syndrome table of C
+##
+DeclareAttribute("SyndromeTable", IsCode);
+
+
+#############################################################################
+##
+#F  StandardArray( <C> )  . . . . . . . . . . . . a standard array for code C
+##
+##  Post: returns a 3D-matrix. The first row contains all the codewords of C.
+##  The other rows contain the cosets, preceded by their coset leaders.
+##
+DeclareAttribute("StandardArray", IsCode);
+
+
+#############################################################################
+##
+#F  AutomorphismGroup( <C> )  . . . . . . . .  the automorphism group of code
+##
+##  The automorphism group is the largest permutation group of degree n such
+##  that for each permutation in the group C' = C. Binary codes only. Calls
+##  Leon's C code.
+##
+DeclareAttribute("AutomorphismGroup", IsCode);
+
+#############################################################################
+##
+#F  PermutationGroup( <C> )  . . . . . . . .  the permutation group of code
+##
+##  The largest permutation group of degree n such
+##  that for each permutation pn in the group pC = C. Written in GAP.
+##  May be removed in future versions.
+##
+DeclareAttribute("PermutationGroup", IsCode);
+
+
+#############################################################################
+##
+#F  PermutationAutomorphismGroup( <C> )  . . . . the permutation group of code
+##
+##  The largest permutation group of degree n such
+##  that for each permutation pn in the group pC = C. Written in GAP.
+##
+DeclareAttribute("PermutationAutomorphismGroup", IsCode);
+
+#############################################################################
+##
+#F  IsSelfOrthogonalCode( <C> ) . . . . . . . . . . . . . . . . . . . . . .
+##
+DeclareProperty("IsSelfOrthogonalCode", IsCode);
+
+#############################################################################
+##
+#F  IsDoublyEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a binary linear code which has
+##  all codewords of weight divisible by 4 only.
+##
+##  If a binary linear code is self-orthogonal and the weight of each row
+##  in its generator matrix is divisibly by 4, the code is doubly-even
+##  (see Theorem 1.4.8 in  W. C. Huffman and V. Pless, "Fundamentals of
+##  error-correcting codes", Cambridge Univ. Press, 2003.) 
+##  
+DeclareProperty("IsDoublyEvenCode", IsLinearCode);
+
+#############################################################################
+##
+#F  IsSinglyEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a self-orthogonal binary linear
+##  code which is not doubly-even.
+##
+DeclareProperty("IsSinglyEvenCode", IsLinearCode);
+
+#############################################################################
+##
+#F  IsEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a binary linear code which has
+##  even weight codewords--regardless whether or not it is self-orgthogonal.
+##
+DeclareProperty("IsEvenCode", IsLinearCode);
+
+#############################################################################
+##
+#F  CodeIsomorphism( <C1>, <C2> ) . . the permutation that translates C1 into
+#F                         C2 if C1 and C2 are equivalent, or false otherwise
+##
+DeclareOperation("CodeIsomorphism", [IsCode, IsCode]); 
+
+
+#############################################################################
+##
+#F  IsEquivalent( <C1>, <C2> )  . . . . . .  true if C1 and C2 are equivalent
+##
+##  that is if there exists a permutation that transforms C1 into C2.
+##  If returnperm is true, this permutation (if it exists) is returned;
+##  else the function only returns true or false. 
+##
+DeclareOperation("IsEquivalent", [IsCode, IsCode]); 
+
+
+#############################################################################
+##
+#F  RootsOfCode( <C> )  . . . .  the roots of the generator polynomial of <C>
+##
+##  It finds the roots by trying all elements of the extension field
+##
+DeclareAttribute("RootsOfCode", IsCode);
+
+
+#############################################################################
+##
+#F  DistancesDistribution( <C>, <w> ) . . .  distribution of distances from a
+#F                                               word w to all codewords of C
+##
+DeclareOperation("DistancesDistribution", [IsCode, IsCodeword]);  
+
+
+#############################################################################
+##
+#F  Syndrome( <C>, <c> )  . . . . . . .  the syndrome of word <c> in code <C>
+##
+DeclareOperation("Syndrome", [IsCode, IsCodeword]); 
+
+
+#############################################################################
+##
+#F  CodewordNr( <C>, <i> )  . . . . . . . . . . . . . . . . .  elements(C)[i]
+##
+DeclareOperation("CodewordNr", [IsCode, IsList]); 
+
+
+#############################################################################
+##
+#F  String( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##
+
+
+#############################################################################
+##
+#F  CodeDescription( <C> )  . . . . . . . . . . . . . . . . . . . . . . . . . 
+##
+DeclareOperation("CodeDescription", [IsCode]); 
+
+
+#############################################################################
+##
+#F  Print( <C> )  . . . . . . . . . . . . .  prints short information about C
+##
+##
+
+
+#############################################################################
+##
+#F  Display( <C> )  . . . . . . . . . . . .  prints the history of the code C
+##
+##
+
+
+#############################################################################
+##
+#F  Save( <filename>, <C>, <var-name> ) . . . . . writes the code C to a file
+##
+##  with variable name var-name. It can be read back by calling
+##  Read (filename); the code then has the name var-name.
+##  All fields of the code record are stored except, 
+##  in case of a linear or cyclic code, the elements.
+##  Pre: filename is accessible for writing
+##
+DeclareOperation("Save", [IsString, IsCode, IsString]); 
+
+
+#############################################################################
+##
+#F  History( <C> )  . . . . . . . . . . . . . . . shows the history of a code
+## 
+DeclareOperation("History", [IsCode]); 
+
+
+######################################################################################
+#F           MinimumDistanceRandom( <C>, <num>, <s> )
+##
+## This is a simpler version than Leon's method, which does not put G in st form.
+## (this works welland is in some cases faster than the st form one)
+## Input: C is a linear code 
+##        num is an integer >0 which represents the number of iterations
+##        s is an integer between 1 and n which represents the columns considered
+##           in the algorithm.
+## Output: an integer >= min dist(C), and hopefully equal to it!
+##         a codework of that weight
+##
+## Algorithm: randomly permute the columns of the gen mat G of C
+##              by a permutation rho - call new mat Gp
+##            break Gp into (A,B), where A is kxs and B is kx(n-s)
+##            compute code C_A generated by rows of A
+##            find min weight codeword c_A of C_A and w_A=wt(c_A)
+##              using AClosestVectorCombinationsMatFFEVecFFECoords
+##            extend c_A to a corresponding codeword c_p in C_Gp
+##            return c=rho^(-1)(c_p) and wt=wt(c_p)=wt(c)
+##
+DeclareOperation("MinimumDistanceRandom",[IsCode,IsInt,IsInt]);
+
+############################################################################
+#F  MinimumWeight( <C> )
+##
+## This function calls an external C program to compute the minimum Hamming
+## weight of a linear code over GF(2) and GF(3). The external program is
+## "minimum-weight"
+##
+## Author: CJ, Tjhai
+##
+DeclareAttribute("MinimumWeight", IsLinearCode);
+ 
diff --git a/lib/codeops.gi b/lib/codeops.gi
new file mode 100644
index 0000000..8ebf7ad
--- /dev/null
+++ b/lib/codeops.gi
@@ -0,0 +1,2670 @@
+#############################################################################
+##
+#A  codeops.gi               GUAVA                              Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##                                                              &David Joyner
+##
+##  All the code operations 
+##
+#H  @(#)$Id: codeops.gi,v 1.11 2004/09/29 03:49:17 gap Exp $
+##
+## changes 2003-2004 to MinimumDistance by David Joyner, Aron Foster
+## bug in MinimumDistance corrected 9-29-2004 by wdj
+## moved Decode and PermutationDecode to decoders.gi on 10-2004
+## added HasGeneratorMat to GeneratorMat function 11-2-2004
+## another bug in MinimumDistance (discovered by Jason McGowan) 
+##                             corrected 11-9-2004 by wdj
+## slight changes to MinimumWeightWords (11-26-2005)
+## wdj (9-14-2007): bug fix to MinimumDistance 
+##                              added MinimumDistanceCodeword
+## 20 Dec 07 14:24 (CJ) added IsDoublyEvenCode, IsSinglyEvenCode
+##                      and IsEvenCode functions
+##
+Revision.("guava/lib/codeops_gi") :=
+    "@(#)$Id: codeops.gi,v 1.11 2004/09/29 03:49:17 gap Exp $";
+
+
+#############################################################################
+##
+#F  WordLength( <C> ) . . . . . . . . . . . .  length of the codewords of <C>
+##
+
+InstallOtherMethod(WordLength, "generic code", true, [IsCode], 0,
+function(C)
+    return  WordLength(AsSSortedList(C)[1]) ;
+end);
+
+# This comment from GAP3 version. 
+#In a linear code, the wordlength must always be included
+#because the wordlength cannot always be calculated (NullCode)
+#
+#InstallOtherMethod(WordLength, "method for linear codes", true, 
+#	[IsLinearCode], 0, 
+#function(C)
+#    if HasGeneratorMat(C) then
+#        return Length( GeneratorMat(C)[1] );
+#    else
+#        return Length( CheckMat(C)[1] );
+#    fi;
+#end);
+
+
+#############################################################################
+##
+#F  IsLinearCode( <C> ) . . . . . . . . . . . . . . . checks if <C> is linear
+##
+## If so, the record fields will be adjusted to the linear type
+##
+
+InstallMethod(IsLinearCode, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+    local gen, k, F, q;
+    F := LeftActingDomain(C);
+    q := Size(F);
+    k := LogInt(Size(C),q);
+    # first the trivial cases:
+    if ( HasWeightDistribution(C) and 
+         HasInnerDistribution(C)
+         and (WeightDistribution(C) <> InnerDistribution(C)) )
+       or ( q^k <> Size(C) )
+       or (not NullWord(WordLength(C), F) in C) then
+        return false; #is cool
+    else
+        gen:=BaseMat(VectorCodeword(AsSSortedList(C)));
+        if Length(gen) <> k then
+            return false; # is cool as ice
+        else    
+           	SetFilterObj(C, IsLinearCodeRep);  
+			SetGeneratorMat(C, gen);
+            if Length(gen) = 0 then  # special case for Nullcode 
+				SetGeneratorsOfLeftModule(C, [AsSSortedList(C)[1]]); 
+			else 
+				SetGeneratorsOfLeftModule(C, AsList(Codeword(gen,F)));  
+			fi; 
+			if HasInnerDistribution(C) then
+                SetWeightDistribution(C, InnerDistribution(C));
+            fi;
+            return true;
+        fi;        
+    fi;
+end);
+
+InstallOtherMethod(IsLinearCode, "method for generic object", true, 
+	[IsObject], 0, 
+function(obj) 
+	return IsCode(obj) and IsLinearCode(obj); 
+end); 
+
+
+#############################################################################
+##
+#F  IsFinite( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##
+
+InstallTrueMethod(IsFinite, IsCode); 
+
+
+#############################################################################
+##
+#F  Dimension( <C> )  . . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##
+
+InstallOtherMethod(Dimension, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C)
+    if IsLinearCode(C) then
+        return Dimension(C);
+    else
+        Error("dimension is only defined for linear codes");
+    fi;
+end);
+
+InstallOtherMethod(Dimension, "method for cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(C) 
+    if HasGeneratorPol(C) then
+        return WordLength(C) - DegreeOfLaurentPolynomial(
+														GeneratorPol(C));
+    else
+        return DegreeOfLaurentPolynomial(CheckPol(C));
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  Size( <C> ) . . . . . . . . . . .  returns the number of codewords of <C>
+##
+##
+
+InstallMethod(Size, "method for unrestricted codes", true, [IsCode], 0, 
+function(C)
+    return Length(AsSSortedList(C));
+end);
+
+
+#############################################################################
+##
+#F  AsSSortedList( <C> ) . . . . . . . .  returns the list of codewords of <C>
+##  AsList( <C> ) 
+##
+##  Codes created with ElementsCode must have AsSSortedList set.  
+##  Linear codes use the vector space / FLM method to calculate.  
+##  AsList defaults to AsSSortedList. 
+
+InstallMethod(AsList, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+	return AsSSortedList(C); 
+end);  
+
+
+#############################################################################
+##
+#F  Redundancy( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##
+
+InstallMethod(Redundancy, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+    if IsLinearCode(C) then
+        return Redundancy(C);
+    else
+        Error("redundancy is only defined for linear codes");
+    fi;
+end);
+
+InstallMethod(Redundancy, "method for linear codes", true, [IsLinearCode], 0, 
+function(C) 
+    return WordLength(C) - Dimension(C);
+end);
+
+
+#############################################################################
+##
+#F  GeneratorMat(C) . . . . .  finds the generator matrix belonging to code C
+##
+##  Pre: C should contain a generator or check matrix
+##
+
+InstallMethod(GeneratorMat, "method for unrestricted code", true, [IsCode], 0, 
+function(C) 
+	if IsLinearCode(C) then 
+		return GeneratorMat(C); 
+	else 
+        Error("non-linear codes don't have a generator matrix");
+    fi;
+end);
+
+InstallMethod(GeneratorMat, "method for linear code", true, [IsLinearCode], 0, 
+function(C) 
+    local G;
+
+    if HasGeneratorMat(C) then return C!.GeneratorMat; fi;
+    if not HasCheckMat( C ) then
+        return List( BasisVectors( Basis( C ) ), x -> VectorCodeword( x ) );
+    fi;
+    
+    if CheckMat(C) = [] then  
+        G := IdentityMat(Dimension(C), LeftActingDomain(C)); 
+    elif IsInStandardForm(CheckMat(C), false) then      
+        G := TransposedMat(Concatenation(IdentityMat(
+                     Dimension(C), LeftActingDomain(C) ),
+                     List(-CheckMat(C), x->x{[1..Dimension(C) ]})));
+    else 
+        G := NullspaceMat(TransposedMat(CheckMat(C)));
+    fi;
+    return ShallowCopy(G);
+end);
+
+InstallMethod(GeneratorMat, "method for cyclic code", true, [IsCyclicCode], 0, 
+function(C) 
+    local F, G, p, n, i, R, zero, coeffs;
+
+    if HasGeneratorMat(C) then return C!.GeneratorMat; fi;
+    #To be inspected:
+    #if HasCheckMat(C) and IsInStandardForm(CheckMat(C), false) then
+    #    G := TransposedMat(Concatenation(IdentityMat(Dimension(C), 
+	#													LeftActingDomain(C)),
+    #                 List(-CheckMat(C), x->x{[1..Dimension(C)]})));
+    #else
+        F := LeftActingDomain(C);
+        p := GeneratorPol(C);
+        n := WordLength(C);
+		G := [];
+        zero := Zero(F);  
+		coeffs := CoefficientsOfLaurentPolynomial(p); 
+		coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]);  
+        for i in [1..Dimension(C)] do
+            R := NullVector(i-1, F);
+            Append(R, coeffs);
+            Append(R, NullVector(n-Length(R), F));
+            G[i] := R;
+        od;
+    #fi;
+    return ShallowCopy(G);
+end);
+
+#############################################################################
+##
+#F  CheckMat( <C> ) . . . . . . .  finds the check matrix belonging to code C
+##
+##  Pre: <C> should be a linear code
+##
+
+InstallMethod(CheckMat, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+    if IsLinearCode(C) then
+        return CheckMat(C);
+    else
+        Error("non-linear codes don't have a check matrix");
+    fi;
+end);
+
+InstallMethod(CheckMat, "method for linear code", true, [IsLinearCode], 0, 
+function(C) 
+    local H;
+    if GeneratorMat(C) = [] then
+        H := IdentityMat(WordLength(C), LeftActingDomain(C));
+    elif IsInStandardForm(GeneratorMat(C), true) then
+        H := TransposedMat(Concatenation(List(-GeneratorMat(C),
+                     x-> x{[Dimension(C)+1 .. WordLength(C) ]}),
+                     IdentityMat(Redundancy(C), LeftActingDomain(C) )));
+    else
+        H := NullspaceMat(TransposedMat(GeneratorMat(C)));
+    fi;
+    return ShallowCopy(H);
+end);
+
+InstallMethod(CheckMat, "method for cyclic code", true, [IsCyclicCode], 0, 
+function(C) 
+    local F, H, p, n, i, R, zero, coeffs;
+    #if HasGeneratorMat(C) and IsInStandardForm(GeneratorMat(C), true) then
+    #    H := TransposedMat(Concatenation(List(-GeneratorMat(C), x-> 
+    #                 x{[Dimension(C)+1..WordLength(C)]}),
+    #                 IdentityMat(Redundancy(C), LeftActingDomain(C))));
+    #else
+        F := LeftActingDomain(C);
+        H := [];
+        p := CheckPol(C);
+        p := Indeterminate(F)^Dimension(C)*Value(p,Indeterminate(F)^-1);
+        n := WordLength(C);
+        zero := Zero(F); 
+		coeffs := CoefficientsOfLaurentPolynomial(p); 
+		coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); 
+        for i in [1..Redundancy(C)] do
+            R := NullVector(i-1, F);
+            Append(R, coeffs);
+            Append(R, NullVector(n-Length(R), F));
+            H[i] := R;
+        od;
+    #fi;
+    return ShallowCopy(H);
+end);
+
+#############################################################################
+##
+#F  IsCyclicCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+
+InstallOtherMethod(IsCyclicCode, "method for unrestricted codes", 
+	true, [IsCode], 0, 
+function(C) 
+    if IsLinearCode(C) then
+        return IsCyclicCode(C);
+    else
+        return false;
+    fi;
+end);
+
+InstallMethod(IsCyclicCode, "method for linear codes", true, [IsLinearCode], 0, 
+function(C) 
+    local C1, F, L, Gp;
+    F := LeftActingDomain(C);
+    L := List(GeneratorMat(C), 
+	        g->LaurentPolynomialByCoefficients(
+		    ElementsFamily(FamilyObj(F)),One(F)*g, 0 ));
+    Add(L, Indeterminate(F)^WordLength(C) - One(F));
+    Gp := Gcd(L);
+    if Redundancy(C) = DegreeOfLaurentPolynomial(Gp) then
+        SetGeneratorPol(C, Gp);
+        return true;
+    else
+        return false; #so the code is not cyclic
+    fi;
+end);
+
+InstallOtherMethod(IsCyclicCode, "method for generic objects", true, 
+	[IsObject], 0, 
+function(obj) 
+	return IsCode(obj) and IsLinearCode(obj) and IsCyclicCode(obj); 
+end); 
+
+
+#############################################################################
+##
+#F  GeneratorPol( <C> ) . . . . . . . . returns the generator polynomial of C
+##
+##  Pre: C must have a generator or check polynomial
+##
+
+InstallMethod(GeneratorPol, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+    if IsCyclicCode(C) then
+        return GeneratorPol(C);
+    else
+        Error("generator polynomial is only defined for cyclic codes");
+    fi;
+end);
+
+InstallMethod(GeneratorPol, "method for cyclic codes", true, [IsCyclicCode], 0, 
+function(C) 
+    local F, n;
+    F := LeftActingDomain(C);
+    n := WordLength(C); 
+	return EuclideanQuotient(One(F)*(Indeterminate(F)^n-1),CheckPol(C));
+end);
+
+
+#############################################################################
+##
+#F  CheckPol( <C> ) . . . . . . . .  returns the parity check polynomial of C
+##
+##  Pre: C must have a generator or check polynomial 
+##
+
+InstallMethod(CheckPol, "method for unrestricted codes", true, [IsCode], 0, 
+function(C) 
+    if IsCyclicCode(C) then
+        return CheckPol(C);
+    else
+        Error("generator polynomial is only defined for cyclic codes");
+    fi;
+end);
+
+InstallMethod(CheckPol, "method for cyclic codes", true, [IsCyclicCode], 0, 
+function(C) 
+    local F, n;
+    F := LeftActingDomain(C);
+    n := WordLength(C);
+    return EuclideanQuotient((Indeterminate(F)^n-One(F)),GeneratorPol(C));
+end);
+
+#############################################################################
+##
+#F  MinimumDistanceCodeword( <C> [, <w>] )  . . . .  determines a codeword
+##                                                                   having  minimum distance to w 
+##                                                                   (w= zero vector is the default)
+##
+##wdj,9-14-2007
+
+InstallMethod(MinimumDistanceCodeword, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+
+	local  k, i, j, G, F, zero, AClosestVec, minwt, num, n, closestvec;
+        F := LeftActingDomain(C);
+        n := WordLength(C);
+        zero := Zero(F)*NullVector(n); 
+	G := GeneratorMat(C);
+        minwt:=n;
+        closestvec := zero;
+	for i in [1..Length(G)] do
+	  AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, zero, i, 1);
+	  if WeightVecFFE(AClosestVec)<minwt then
+	      minwt := WeightVecFFE(AClosestVec);
+              closestvec := AClosestVec;
+	  fi;
+	od;
+
+return(closestvec);
+end);
+    
+InstallOtherMethod(MinimumDistance, "linear code, word", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, word)  
+
+	local  k, i, j, G, F, zero, AClosestVec, minwt, num, n, closestvec;
+        F := LeftActingDomain(C);
+        n := WordLength(C);
+        zero := Zero(F)*NullVector(n); 
+	G := GeneratorMat(C);
+        minwt:=n;
+        closestvec := word;
+	for i in [1..Length(G)] do
+	  AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, word, i, 1);
+	  if WeightVecFFE(AClosestVec)<minwt then
+	      minwt := WeightVecFFE(AClosestVec);
+              closestvec := AClosestVec;
+	  fi;
+	od;
+
+return(closestvec);
+end);
+
+#############################################################################
+##
+#F  MinimumDistance( <C> [, <w>] )  . . . .  determines the minimum distance 
+##
+##  MinimumDistance( <C> ) determines the minimum distance of <C>
+##  MinimumDistance( <C>, <w> ) determines the minimum distance to a word <w>
+##
+
+InstallMethod(MinimumDistance, "attribute method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C) 
+	local W, El, F, n, zero, d, DD, w;  
+#Print("unrestricted code\n");
+	if IsBound(C!.upperBoundMinimumDistance) and 
+	   IsBound(C!.lowerBoundMinimumDistance) and 
+	   C!.upperBoundMinimumDistance = C!.lowerBoundMinimumDistance then 
+		return C!.lowerBoundMinimumDistance;   
+	elif IsCyclicCode(C) or IsLinearCode(C) then 
+		return MinimumDistance(C); 
+	fi;
+	W := VectorCodeword(AsSSortedList(C));
+	El := W;  # so not a copy!
+    F := LeftActingDomain(C);
+    n := WordLength(C);
+    zero := Zero(F);  
+    d := n;
+    DD := NullVector(n+1);
+    for w in W do
+        DD := DD + DistancesDistributionVecFFEsVecFFE(El, w);
+    od;
+    d := PositionProperty([2..n+1], i->DD[i] <> 0);
+    C!.lowerBoundMinimumDistance := d; 
+	C!.upperBoundMinimumDistance := d; 
+	return d;
+end);
+
+InstallMethod(MinimumDistance, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+
+	local  k, i, j, G, F, zero, AClosestVec, minwt, num, n;
+	if IsBound(C!.upperBoundMinimumDistance) and 
+	   IsBound(C!.lowerBoundMinimumDistance) and 
+	   C!.upperBoundMinimumDistance = C!.lowerBoundMinimumDistance then 
+		return C!.lowerBoundMinimumDistance;   
+        fi;
+        F := LeftActingDomain(C);
+        n := WordLength(C);
+        zero := Zero(F)*NullVector(n); 
+	G := GeneratorMat(C);
+        minwt:=n;
+	for i in [1..Length(G)] do
+	  AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, zero, i, 1);
+	  if WeightVecFFE(AClosestVec)<minwt then
+	      minwt := WeightVecFFE(AClosestVec);
+	  fi;
+	od;
+
+    C!.lowerBoundMinimumDistance := minwt; 
+    C!.upperBoundMinimumDistance := minwt;
+return(minwt);
+end);
+    
+InstallMethod(MinimumDistance, "attribute method for cyclic code", true, 
+	[IsCyclicCode], 0, 
+function(C) 
+	local md; 
+#Print("cyclic code\n");
+	if IsBound(C!.lowerBoundMinimumDistance) and 
+	   IsBound(C!.upperBoundMinimumDistance) and 
+	   C!.lowerBoundMinimumDistance = C!.upperBoundMinimumDistance then 
+		return C!.lowerBoundMinimumDistance; 
+	else 
+		md := MinimumDistance( PuncturedCode( C ) ) + 1;
+		C!.lowerBoundMinimumDistance := md; 
+		C!.upperBoundMinimumDistance := md; 
+		return md; 
+	fi; 
+end);
+
+## Should be a better way to set up the Other methods, given 
+## how much overlap there is with attribute methods.  For now, though, 
+## this works.  
+InstallOtherMethod(MinimumDistance, "unrestricted code, word", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, word) 
+    local W, El, F, n, zero, d, w, DD;
+#Print("unrestricted code, vector\n");
+    if IsLinearCode(C) then
+        return MinimumDistance(C, word); 
+    fi; 
+	if word in C then
+		return 0;
+	fi;
+	W := [VectorCodeword(Codeword(word, C))];
+	El := VectorCodeword(AsSSortedList(C));
+    F := LeftActingDomain(C);  
+    n := WordLength(C);
+    zero := Zero(F); 
+    d := n;
+    DD := NullVector(n+1);
+    for w in W do
+        DD := DD + DistancesDistributionVecFFEsVecFFE(El, w);
+    od;
+    d := PositionProperty([2..n+1], i->DD[i] <> 0);
+    return d;
+end);
+
+InstallOtherMethod(MinimumDistance, "linear code, word", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, word)  
+    local Mat, n, k, zero, UP, G, W, multiple, weight,
+          ThisGIsDone,  #is true as the latest matrix is converted
+          Icount,       #number of corrected generatormatrices
+          i,            #first rownumber which could be added to I
+          l,            #columnnumber which could be used
+          IdentityColumns,
+          j, CurW, UMD, w, q, tmp, F;
+    
+#Print("linear code, vector\n");
+    k := Dimension(C);
+    n := WordLength(C);
+    zero := Zero(LeftActingDomain(C)); 
+    q := Size(LeftActingDomain(C)); 
+	F := LeftActingDomain(C); 
+	w := VectorCodeword(word);
+	if w in C then
+		return 0;
+	elif k = 0 then
+		return Weight(Codeword(w));
+	elif HasSyndromeTable(C) then
+		j := 1;
+		w := VectorCodeword( Syndrome(C, w) );
+		for i in [ 0 .. k - 1 ] do
+			if w[ k - i ] <> zero then
+				j := j + q^i * ( LogFFE( w[ k - i ] ) + 1 );
+			fi;
+		od;
+		return Weight(SyndromeTable(C)[j][1]);
+	fi;
+	UMD := Weight(Codeword(w));
+			   #this must be so, because the kernel function
+			   #can not find this distance
+	CurW := 0; 
+    Mat := ShallowCopy(GeneratorMat(C));
+    i := 1;
+##  The next lines could go etwas faster for cyclic codes by weighting the
+##  generator polynomial, but a copy of this function must be made in the
+##  CycCodeOps, which makes it harder to make changes. 
+    if q = 2 then
+		multiple := 2;
+        repeat
+            weight := 0;
+            for j in Mat[i] do
+                if not j = zero then
+                    weight := weight + 1;
+                fi;
+            od;
+            multiple := Gcd( multiple, weight );
+            i := i + 1;
+        until multiple = 1 or i > k;
+    else
+        multiple := 1;
+    fi;
+# we now know that the weight of all the elements are a multiple of multiple
+    UP := List([1..n], i->false);   #which columns are already used
+    G := [];
+    W := [];
+    Icount := 0;
+    
+    repeat
+        ThisGIsDone := false;
+        i := 1;                   # i is the row of the identitymatrix it
+        l := 1;                   # is trying to make
+        IdentityColumns := [];
+        while not ThisGIsDone and (l <= n) do
+            if not UP[l] then     # try this column if it is not already used
+                j := i;      
+                while (j <= k) and (Mat[j][l] = zero) do 
+                    j := j + 1;   # go down in the matrix until a nonzero
+                od;               # entry is found
+                if j <= k then
+                    if j > i then
+                        tmp := Mat[i];
+                        Mat[i] := Mat[j];
+                        Mat[j] := tmp;
+                    fi;
+                    Mat[i] := Mat[i]/Mat[i][l];
+                    for j in Concatenation([1..i-1], [i+1..k]) do
+                        if Mat[j][l] <> zero then
+                            Mat[j] := Mat[j] - Mat[j][l]*Mat[i];
+                        fi;
+                    od;
+                    UP[l] := true;
+                    Add(IdentityColumns, l);
+                    i := i + 1;
+                    ThisGIsDone := ( i > k );
+                fi;
+            fi; 
+            l := l + 1;
+        od;
+        if ThisGIsDone then
+            Icount := Icount + 1;
+            Add( G, Mat{[1..k]}{Difference([1..n],IdentityColumns)} );
+            w := w-w{IdentityColumns}*Mat;
+            Add(W,w{Difference([1..n], IdentityColumns)} );
+			UMD := Minimum( UMD, WeightCodeword( Codeword( w ) ) );
+## G_i is generator matrix i
+## W_i has zeros in IdentityColumns,
+## but has same distance to code because
+## only a codeword is added
+        fi;
+    until not ThisGIsDone or ( Icount = Int( n / k ) );
+
+    while CurW <= ( UMD - multiple ) / Icount do
+        i := 0;
+        repeat
+            i := i + 1;
+            UMD := Minimum( UMD, DistanceVecFFE( W[i],
+                                   AClosestVectorCombinationsMatFFEVecFFE(
+                                     G[i], F, W[i], CurW, CurW*(Icount-1) )
+                                   ) + CurW );
+        until (i = Length(G)) or (UMD = CurW*Icount);
+        CurW := CurW + 1;
+    od;
+    return UMD;
+end);
+           
+InstallMethod(MinimumDistanceLeon, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	local majority,G0, Gp, Gpt, Gt, L, k, i, j, dimMat, Grstr, J, d1, arrayd1, Combo, rows, row, rowSum, G, F, zero, AClosestVec, s, p, num;
+	G0 := GeneratorMat(C);
+	if (IsInStandardForm(G0)=false) then
+		G := List(G0,ShallowCopy);
+		PutStandardForm(G);		
+	fi;
+	F:=LeftActingDomain(C);
+	if F<>GF(2) then Print("Code must be binary. Quitting. \n"); return(0); fi;
+	p:=5; #these seem to be optimal values
+	num:=8; #these seem to be optimal values
+	dimMat := DimensionsMat(G);
+	s := dimMat[2]-dimMat[1];
+	arrayd1:=[];
+
+for k in [1..num] do
+##Permute the columns randomly
+	Gt := TransposedMat(G);
+	Gp := NullMat(dimMat[2],dimMat[1]);
+	L := SymmetricGroup(dimMat[2]);
+	L := Random(L);
+	L:=List([1..dimMat[2]],i->OnPoints(i,L));
+	for i in [1..dimMat[2]] do 
+		Gp[i] := Gt[L[i]];
+	od;
+	Gp := TransposedMat(Gp);
+	Gp := ShallowCopy(Gp);
+
+##Use gaussian elimination on the new matrix
+	TriangulizeMat(Gp);
+
+##generate the restricted code (I|Z) from Gp=(I|Z|B)
+	Gpt := TransposedMat(Gp);
+	Grstr := NullMat(s,dimMat[1]);
+	for i in [dimMat[1]+1..dimMat[1]+s] do
+		Grstr[i-dimMat[1]] := Gpt[i];
+	od;
+	Grstr := TransposedMat(Grstr);
+	zero := Zero(F)*Grstr[1];
+
+##search for all rows of weight p
+
+	J := []; #col number of codewords to compute the length of
+	
+	for i in [1..p] do
+	AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(Grstr, F, zero, i, 1);
+	if WeightVecFFE(AClosestVec) > 0 then
+		Add(J, [AClosestVec,i]);
+	fi;
+	od;
+
+	d1:=dimMat[2];
+	for rows in J do
+	  d1:=Minimum(WeightVecFFE(rows[1])+rows[2],d1);
+	od;
+	arrayd1[k]:=d1;
+od;
+if AbsoluteValue(Sum(arrayd1)/Length(arrayd1)-Int(Sum(arrayd1)/Length(arrayd1)))<1/2 then 
+  majority:=Int(Sum(arrayd1)/Length(arrayd1)); 
+ else
+  majority:=Int(Sum(arrayd1)/Length(arrayd1))+1;
+fi;
+return(majority);
+end);
+
+
+
+#############################################################################
+##
+#F  LowerBoundMinimumDistance( arg )  . . . . . . . . . . . . . . . . . . .  
+##
+
+##LR - Is there a better way to handle HasMD case, without reset? 
+InstallMethod(LowerBoundMinimumDistance, "method for unrestricted codes", 
+	true, [IsCode], 0, 
+function(C) 
+	if HasMinimumDistance(C) then 
+		C!.lowerBoundMinimumDistance := MinimumDistance(C); 
+	elif not IsBound(C!.lowerBoundMinimumDistance) then 
+		if Size(C) = 1 then 
+			C!.lowerBoundMinimumDistance := WordLength(C); 
+		else 
+			C!.lowerBoundMinimumDistance := 1;
+		fi;
+	fi; 
+	return C!.lowerBoundMinimumDistance; 
+end); 
+
+InstallMethod(LowerBoundMinimumDistance, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	if HasMinimumDistance(C) then 
+		C!.lowerBoundMinimumDistance := MinimumDistance(C); 
+	elif not IsBound(C!.lowerBoundMinimumDistance) then 
+		if Dimension(C) = 0 then  
+			C!.lowerBoundMinimumDistance := WordLength(C);  
+		elif Dimension(C) = 1 then 
+			C!.lowerBoundMinimumDistance:= Weight(Codeword(GeneratorMat(C)[1]));
+		else  
+			C!.lowerBoundMinimumDistance := 1;
+		fi;
+	fi; 
+	return C!.lowerBoundMinimumDistance; 
+end); 
+
+InstallMethod(LowerBoundMinimumDistance, "method for cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(C) 
+	if HasMinimumDistance(C) then 
+		C!.lowerBoundMinimumDistance := MinimumDistance(C); 
+	elif not IsBound(C!.lowerBoundMinimumDistance) then 
+		if Dimension(C) = 0 then  
+			C!.lowerBoundMinimumDistance := WordLength(C);  
+		elif Dimension(C) = 1 then 
+			C!.lowerBoundMinimumDistance := Weight(Codeword(GeneratorPol(C))); 
+		else 
+			C!.lowerBoundMinimumDistance := 1;
+		fi;
+	fi; 
+	return C!.lowerBoundMinimumDistance; 
+end); 
+
+InstallOtherMethod(LowerBoundMinimumDistance, "n, k, q", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, k, q) 
+	local r; 
+	r := BoundsMinimumDistance(n, k, q, true); 
+	return r.lowerBound; 
+end); 
+
+InstallOtherMethod(LowerBoundMinimumDistance, "n, k", true, 
+	[IsInt, IsInt], 0, 
+function(n, k) 
+	local r; 
+	r := BoundsMinimumDistance(n, k, 2, true); 
+	return r.lowerBound; 
+end); 
+
+InstallOtherMethod(LowerBoundMinimumDistance, "n, k, F", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n, k, F) 
+	local r; 
+	r := BoundsMinimumDistance(n, k, Size(F), true); 
+	return r.lowerBound; 
+end); 
+
+
+#############################################################################
+##
+#F  UpperBoundMinimumDistance( arg )  . . . . . . . . . . . . . . . . . . .  
+## 
+
+##LR - is there a better way to handle HasMD case, without reset? 
+InstallMethod(UpperBoundMinimumDistance, "method for unrestricted codes", 
+	true, [IsCode], 0, 
+function(C) 
+	if HasMinimumDistance(C) then 
+		C!.upperBoundMinimumDistance := MinimumDistance(C); 
+	elif not IsBound(C!.upperBoundMinimumDistance) then 
+		C!.upperBoundMinimumDistance := WordLength(C); 
+	fi; 
+	return C!.upperBoundMinimumDistance; 
+end); 
+
+InstallMethod(UpperBoundMinimumDistance, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+    local ubmd;
+	if HasMinimumDistance(C) then 
+		C!.upperBoundMinimumDistance := MinimumDistance(C); 
+	else 
+		if not IsBound(C!.upperBoundMinimumDistance) then 
+			ubmd := WordLength(C);
+		else 
+			ubmd := C!.upperBoundMinimumDistance; 
+		fi; 
+		if MinimumWeightOfGenerators(C) < ubmd then
+			ubmd := MinimumWeightOfGenerators(C);
+		fi;
+		if UpperBoundOptimalMinimumDistance(C) < ubmd then
+		    ubmd := UpperBoundOptimalMinimumDistance(C);
+		fi;
+		C!.upperBoundMinimumDistance := ubmd; 
+	fi; 
+	return C!.upperBoundMinimumDistance; 
+end);
+
+InstallOtherMethod(UpperBoundMinimumDistance, "n, k, q", true,
+    [IsInt, IsInt, IsInt], 0,
+function(n, k, q)
+	local r;
+	r := BoundsMinimumDistance(n, k, q, false);
+	return r.upperBound;
+end);
+
+InstallOtherMethod(UpperBoundMinimumDistance, "n,k", true,
+	[IsInt, IsInt], 0,
+function(n, k)
+	local r;
+	r := BoundsMinimumDistance(n, k, 2, false);
+	return r.upperBound;
+end);
+
+InstallOtherMethod(UpperBoundMinimumDistance, "n,k,F", true,
+	[IsInt, IsInt, IsField], 0,
+function(n, k, F)
+	local r;
+	r := BoundsMinimumDistance(n, k, Size(F), false);
+	return r.upperBound;
+end);
+
+
+#############################################################################
+##
+#F  UpperBoundOptimalMinimumDistance( arg )  . . . . . . . . . . . . . . . .
+##
+##  UpperBoundMinimumDistance of optimal code with given parameters 
+## 
+
+InstallMethod(UpperBoundOptimalMinimumDistance, "method for unrestricted code", 
+	true, [IsCode], 0, 
+function(C) 
+	local r; 
+	r := BoundsMinimumDistance(WordLength(C), Dimension(C), 
+								Size(LeftActingDomain(C)), false); 
+	return r.upperBound; 
+end); 
+
+
+#############################################################################
+##
+#F  MinimumWeightOfGenerators( arg )  . . . . . . . . . . . . . . . . . . . .
+##
+##
+
+InstallMethod(MinimumWeightOfGenerators, "linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	local zero, mwg, sum, element, row;  
+    zero := Zero(LeftActingDomain(C));  
+	mwg := WordLength(C);
+	if Dimension(C) > 0 then
+	    # minimumWeightOfGenerators for null codes is n
+	    for row in GeneratorMat(C) do
+	        sum := 0;
+	        for element in row do
+	            if element <> zero then
+	                 sum := sum + 1;
+	            fi;
+	        od;
+			if sum < mwg then
+				 mwg := sum;
+			fi;
+	    od;
+	fi;
+	return mwg;
+end); 
+
+InstallMethod(MinimumWeightOfGenerators, "method for cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(C) 
+	if Dimension(C) > 0 then
+	     # minimumWeightOfGenerators of null codes is n
+	     return Weight(Codeword(GeneratorPol(C)));  
+	else
+	     return WordLength(C);
+	fi;
+end); 
+
+
+#############################################################################
+##
+#F  MinimumWeightWords( <C> ) . . .  returns the code words of minimum weight
+##
+
+InstallMethod(MinimumWeightWords, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    local curmin, res, e, w, zerovec, d;
+    if IsLinearCode(C) then
+        return MinimumWeightWords(C);
+    fi;
+    curmin := WordLength(C);
+    if not HasWeightDistribution(C) then
+        res := [];
+        for e in AsSSortedList(C) do
+            w := Weight(e);
+            if w < curmin and w <> 0 then
+                # New minimum weight found
+                curmin := w;
+                res := [ e ];
+            elif w = curmin then
+                Add(res, e);
+            fi;
+        od;
+        return res;
+    else
+        # Find the minimum weight
+        d := MinimumDistance(C);
+        return Filtered(AsSSortedList(C), e -> Weight(e) = d);
+    fi;
+end);
+
+InstallMethod(MinimumWeightWords, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C)
+    local d, G, res, vector, count, i, t, k, q, M, zerovec;
+    d := MinimumDistance(C);  # Equal to minimum weight
+    G := GeneratorMat(C);
+    k := Dimension(C);
+    q := Size(LeftActingDomain(C));
+    M := Size(C);
+    res := [];
+    vector := NullVector(WordLength(C), LeftActingDomain(C));
+    zerovec := ShallowCopy(vector);
+    count := 1;
+    while count < M do
+        # Calculate next word in the code
+        i := k;
+        t := count;
+        while t mod q = 0 do
+            t := t / q;
+            i := i - 1;
+        od;
+        vector := vector + G[i];
+        if DistanceVecFFE(vector, zerovec) = d then
+            # This word has minimum weight
+            Add(res, Codeword(vector));
+        fi;
+        count := count + 1;
+    od;
+    return res;
+end);
+
+
+#############################################################################
+##
+#F  WeightDistribution( <C> ) . . . returns the weight distribution of a code
+##
+InstallMethod(WeightDistribution, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function (C)
+    local El, nl, newwd;
+    if IsLinearCode(C) then
+        return WeightDistribution(C);
+    fi;
+    El := VectorCodeword(AsSSortedList(C));
+    nl := VectorCodeword(NullWord(C));
+    newwd := DistancesDistributionVecFFEsVecFFE(El, nl);
+    return newwd;
+end);
+
+InstallMethod(WeightDistribution, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C)
+    local G, nl, k, n, q, F, wd, newwd, oldrow, newrow, i, j;
+    n := WordLength(C);
+    k := Dimension(C);
+    q := Size(LeftActingDomain(C)); 
+	F := LeftActingDomain(C); 
+    nl := VectorCodeword(NullWord(C));
+    if k = 0 then
+        G := NullVector(n+1);
+        G[1] := 1;
+        newwd := G;
+    elif k = n then
+        newwd := List([0..n], i->Binomial(n, i));
+    elif k <= Int(n/2) then
+		G := ShallowCopy(GeneratorMat(C));
+        newwd := DistancesDistributionMatFFEVecFFE(G, F, nl);
+    else
+        G := ShallowCopy(CheckMat(C));
+        wd := DistancesDistributionMatFFEVecFFE(G, F, nl);
+        newwd := [Sum(wd)];
+        oldrow := List([1..n+1], i->1);
+        newrow := [];
+        for i in [2..n+1] do
+            newrow[1] := Binomial(n, i-1) * (q-1)^(i-1);
+            for j in [2..n+1] do
+                newrow[j] := newrow[j-1] - (q-1) * oldrow[j] - oldrow[j-1];
+            od;
+            newwd[i] := newrow * wd;
+            oldrow := ShallowCopy(newrow);
+        od;
+        newwd:= newwd / (q ^ Redundancy(C));
+    fi;
+    return newwd;
+end);
+
+
+#############################################################################
+##
+#F  InnerDistribution( <C> )  . . . . . .  the inner distribution of the code
+##
+##  The average distance distribution of distances between all codewords
+##
+
+InstallMethod(InnerDistribution, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function (C)
+    local ID, c, El;
+    El := VectorCodeword(AsSSortedList(C));
+    ID := List([1..WordLength(C)+1], i->0);
+    for c in El do
+        ID := ID + DistancesDistributionVecFFEsVecFFE(El, c);
+    od;
+    return ID/Size(C);
+end);
+
+InstallMethod(InnerDistribution, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function (C)
+    return WeightDistribution(C);
+end);
+
+
+#############################################################################
+##
+#F  OuterDistribution( <C> )  . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##  the number of codewords on a distance i from all elements of GF(q)^n
+##
+									
+InstallOtherMethod(OuterDistribution, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function (C)
+	local gen, q, n, F, zero, Els, res, vector, t, large, count, dd; 
+
+    if IsLinearCode(C) then
+        return OuterDistribution(C);
+    fi;
+    q := Size(LeftActingDomain(C));
+    n := WordLength(C);
+	F := LeftActingDomain(C); 
+	zero := Zero(F); 
+
+	Els := VectorCodeword(AsSSortedList(C)); 
+	res := [[NullWord(C),WeightDistribution(C)]]; 
+	vector := NullVector(n, F); 
+	t := n; 
+	gen := Z(q); 
+	large := One(F); 
+
+	for count in [2..q^n] do 
+		t := n; 
+		while vector[t] = large do 
+			vector[t] := zero; 
+			t := t-1; 
+		od; 
+		if vector[t] = zero then 
+			vector[t] := gen; 
+		else 
+			vector[t] := vector[t] * gen; 
+		fi; 
+
+		dd := DistancesDistributionVecFFEsVecFFE(Els, vector); 
+		Add(res, [Codeword(vector), dd]); 
+	od; 
+
+	return res; 
+
+end); 
+
+InstallMethod(OuterDistribution, "method for linear codes", true,
+    [IsLinearCode], 0,
+function(C)
+	local STentry, dtw, E, res, i;
+	E := AsSSortedList(C);
+	res := [];
+	for STentry in List(SyndromeTable(C), i -> i[1]) do
+		dtw := DistancesDistribution(C, STentry);
+		for i in E do
+			Add(res, [VectorCodeword(STentry) + i, dtw]);
+		od;
+	od;
+	return res;
+end);
+
+
+  
+#############################################################################
+##
+#F  InformationWord( Code, c )  . . . "decodes" a codeword c in C to the 
+##                                information "message" word m, so m*C=c
+
+InstallMethod(InformationWord, "code, codeword", true, [IsCode, IsCodeword], 1, 
+function(C, c)
+	local m;
+	if not(c in C) then return "ERROR: codeword must belong to code"; fi; 
+	if not(IsLinearCode(C)) then return "ERROR: code must be linear"; fi; 
+	m := SolutionMat(List(GeneratorMat(C),List), VectorCodeword(c));  
+	return Codeword(m);
+end);
+
+
+
+#############################################################################
+##
+#F  IsSelfDualCode( <C> ) . . . . . . . . . determines whether C is self dual
+##
+##  i.o.w. each codeword is orthogonal to all codewords (including itself)
+##
+
+InstallMethod(IsSelfDualCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    if IsCyclicCode(C) or IsLinearCode(C) then 
+		return IsSelfDualCode(C); 
+	else 
+		return false;
+	fi; 
+end);
+
+InstallMethod(IsSelfDualCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C)
+    if IsCyclicCode(C) then 
+		return IsSelfDualCode(C); 
+	elif Redundancy(C) <> Dimension(C) then
+        return false; #so the code is not self dual
+    else
+        return (GeneratorMat(C)*TransposedMat(GeneratorMat(C)) = 
+                NullMat(Dimension(C),Dimension(C),LeftActingDomain(C))); 
+    fi;
+end);
+
+InstallMethod(IsSelfDualCode, "method for cyclic codes", true, 
+	[IsCyclicCode], 0, 
+function(C)
+    local r;
+    if Redundancy(C) <> Dimension(C) then
+        return false; #so the code is not self dual
+    else
+        r := ReciprocalPolynomial(GeneratorPol(C),Redundancy(C));
+        r := r/LeadingCoefficient(r);
+        return CheckPol(C) = r;
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  CodewordVector( <l>, <C> )
+##
+##  only valid if C is linear! 
+##
+
+InstallOtherMethod(CodewordVector,"vector and unrestricted code", true, 
+	[IsList, IsCode], 0, 
+function(l, C) 
+    if IsLinearCode(C) then
+        return CodewordVector(l,C);
+    else
+    	Error("<r> is a non-linear code");# encoding not possible
+    fi;
+end);
+
+InstallOtherMethod(CodewordVector,"vector and linear code", true, 
+	[IsList, IsLinearCode], 0, 
+function(l, C) 
+    local s, i, k;
+    if IsCyclicCode(C) then
+        return CodewordVector(l,C);
+    else
+        l := VectorCodeword(Codeword(l, Dimension(C), LeftActingDomain(C)));
+		if GeneratorMat(C) = [] then
+            return NullMat(Length(l), WordLength(C), LeftActingDomain(C));
+        else
+            return Codeword(l*GeneratorMat(C), C);
+        fi;
+    fi;
+end);
+
+InstallOtherMethod(CodewordVector, "<list of codewords|vector>,cyclic code", 
+	true, [IsList, IsCyclicCode], 0, 
+function(l, C) 
+    local F, p;
+    F := LeftActingDomain(C);
+	l := Codeword(l, Dimension(C), F);
+	if IsList(l) and not IsCodeword(l) then
+	    return List(l, i->CodewordVector(i,C));
+	else
+	    return Codeword(PolyCodeword(l) * GeneratorPol(C), C);
+	fi;
+end);  
+
+InstallOtherMethod(CodewordVector, "method for poly and cyclic code", true, 
+	[IsUnivariatePolynomial, IsCyclicCode], 0, 
+function(p, C) 
+	local F, w; 
+	F := LeftActingDomain(C); 
+	w := Codeword(p, Dimension(C), F); 
+	return Codeword(PolyCodeword(w) * GeneratorPol(C), C); 
+end); 
+
+InstallOtherMethod(\*, "list with code", true, [IsList, IsCode], 0, 
+  CodewordVector);
+
+InstallOtherMethod(\*, "poly with code", true, 
+  [IsUnivariatePolynomial, IsCode], 0, CodewordVector);
+
+InstallOtherMethod(\*, "method for two codes", true, [IsCode, IsCode], 0, 
+function(C1, C2) 
+	return DirectProductCode(C1, C2); 
+end); 
+
+
+#############################################################################
+##
+#F  \+( <l>, <C> )  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##
+
+InstallOtherMethod(\+, "method for codeword+code", true, 
+	[IsCodeword, IsCode], 0, 
+function(w, C) 
+	return CosetCode(C, w); 
+end); 
+
+InstallOtherMethod(\+, "method for code+codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, w) 
+	return CosetCode(C, w); 
+end); 
+
+InstallOtherMethod(\+, "method for two codes", true, [IsCode, IsCode], 0, 
+function(C1, C2) 
+	return DirectSumCode(C1, C2); 
+end); 
+
+
+#############################################################################
+##
+#F  \in( <l>, <C> ) . . . . . .  true if the vector is an element of the code
+##
+##
+
+InstallMethod(\in, "method for codeword in unrestricted code", true, 
+	[IsCodeword, IsCode], 0, 
+function(w, C) 
+	if WordLength(w) <> WordLength(C) then 
+		return false; 
+	else 
+		return w in AsSSortedList(C); 
+	fi; 
+end); 
+
+InstallMethod(\in, "method for list of codewords in unrestricted code", true, 
+	[IsList, IsCode], 0, 
+function(l, C) 
+	return ForAll(l, w->w in C); 
+end); 
+
+InstallMethod(\in, "method for unrestricted code in unrestricted code", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2)
+	local l;
+	l := ShallowCopy(AsSSortedList(C1)); 
+	return ForAll(l, w->w in C2);    
+end); 
+
+InstallMethod(\in, "method for codeword in linear code", true, 
+	[IsCodeword, IsLinearCode], 0, 
+function(w, C) 
+	if WordLength(w) <> WordLength(C) then 
+		return false; 
+	elif GeneratorMat(C) = [] then 
+		return w = 0*w; 
+	elif CheckMat(C) = [] then  #Code is WholeSpace, just check field.  
+		return ForAll(VectorCodeword(w), x->x in LeftActingDomain(C)); 
+	else 
+		return CheckMat(C)*w = 0*w;
+	fi; 
+end); 
+
+InstallMethod(\in, "method for linear code in linear code", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+	local l; 
+	l := ShallowCopy(GeneratorMat(C1)); 
+	return ForAll(l, w-> Codeword(w) in C2); 
+end); 
+
+InstallMethod(\in, "method for codeword in cyclic code", true, 
+	[IsCodeword, IsCyclicCode], 0, 
+function(w, C) 
+	return PolyCodeword(w) mod GeneratorPol(C) = 
+					0 * Indeterminate(LeftActingDomain(C)); 
+end); 
+
+InstallMethod(\in, "method for cyclic code in cyclic code", true, 
+	[IsCyclicCode, IsCyclicCode], 0, 
+function(C1, C2) 
+	return GeneratorPol(C1) mod GeneratorPol(C2) = 
+					0 * Indeterminate(LeftActingDomain(C2));
+end); 
+
+#############################################################################
+##
+#F  \=( <C1>, <C2> )  . . . . .  tests if Set(AsList(C1))=Set(AsList(C2))
+##
+##  Post: returns a boolean
+##
+
+InstallMethod(\=, "method for unrestricted code = unrestricted code", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+	local field, fields; 
+	if (IsLinearCode(C1) and IsLinearCode(C2)) or 
+	   (IsCyclicCode(C1) and IsCyclicCode(C2)) then 
+		return C1 = C2; 
+	elif IsLinearCode(C1) or IsLinearCode(C2) then 
+		return false;  ##one is linear, the other is not, so not equal
+	fi; 
+	if Set(AsSSortedList(C1)) = Set(AsSSortedList(C2)) then
+		fields := [WeightDistribution, InnerDistribution,
+				   IsLinearCode, IsPerfectCode,
+				   IsSelfDualCode, OuterDistribution, IsCyclicCode,
+				   AutomorphismGroup, MinimumDistance, CoveringRadius];
+		for field in fields do 
+			if not Tester(field)(C1) then 
+				if Tester(field)(C2) then 
+					Setter(field)(C1, field(C2)); 
+				fi;
+			else
+				if not Tester(field)(C2) then
+					Setter(field)(C2, field(C1));  
+				fi;
+			fi;
+		od; 
+		if not IsBound(C1!.boundsCoveringRadius) then 
+			if IsBound(C2!.boundsCoveringRadius) then 
+				C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; 
+			fi; 
+		else 
+			if not IsBound(C2!.boundsCoveringRadius) then 
+				C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; 
+			fi; 
+		fi; 
+		C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+												LowerBoundMinimumDistance(C2));
+		C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance;
+		C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), 
+												UpperBoundMinimumDistance(C2));
+		C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance;
+		return true;
+	else
+		return false; #so C1 is not equal to C2 
+	fi;
+end);
+
+InstallMethod(\=, "method for linear code = linear code", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+    local field, fields;
+    if IsCyclicCode(C1) and IsCyclicCode(C2) then 
+		return C1 = C2; 
+	elif IsCyclicCode(C1) or IsCyclicCode(C2) then 
+		return false;  ##one is cyclic, the other is not, so not equal. 
+	fi; 
+	if BaseMat(GeneratorMat(C1))=BaseMat(GeneratorMat(C2)) then
+		fields := [WeightDistribution, InnerDistribution,
+				   IsLinearCode, IsPerfectCode,
+				   IsSelfDualCode, OuterDistribution, IsCyclicCode,
+				   AutomorphismGroup, MinimumDistance, CoveringRadius];
+		for field in fields do 
+			if not Tester(field)(C1) then
+				if Tester(field)(C2) then 
+					Setter(field)(C1, field(C2)); 
+				fi;
+			else
+				if not Tester(field)(C2) then 
+					Setter(field)(C2, field(C1)); 
+				fi;
+			fi;
+		od;  
+		if not IsBound(C1!.boundsCoveringRadius) then 
+			if IsBound(C2!.boundsCoveringRadius) then 
+				C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; 
+			fi; 
+		else 
+			if not IsBound(C2!.boundsCoveringRadius) then 
+				C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; 
+			fi; 
+		fi; 
+		C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+												LowerBoundMinimumDistance(C2));
+		C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance;
+		C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+												UpperBoundMinimumDistance(C2));
+		C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance;
+		return true;
+	else
+		return false; #so l is not equal to r
+	fi;
+end);
+
+InstallMethod(\=, "method for cyclic code = cyclic code", true, 
+	[IsCyclicCode, IsCyclicCode], 0, 
+function(C1, C2) 
+    local field, fields, bmdl, bmdr;
+    if GeneratorPol(C1) = GeneratorPol(C2) then
+        fields := [WeightDistribution, InnerDistribution,
+                   IsLinearCode, IsPerfectCode,
+                   IsSelfDualCode, OuterDistribution, IsCyclicCode,
+                   AutomorphismGroup, MinimumDistance, CoveringRadius, 
+				   RootsOfCode]; 
+        for field in fields do 
+            if not Tester(field)(C1) then 
+                if Tester(field)(C2) then 
+                    Setter(field)(C1, field(C2)); 
+                fi;
+            else
+                if not Tester(field)(C2) then
+                    Setter(field)(C2, field(C1)); 
+                fi;
+            fi;
+        od; 
+		if not IsBound(C1!.boundsCoveringRadius) then 
+			if IsBound(C2!.boundsCoveringRadius) then 
+				C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; 
+			fi; 
+		else 
+			if not IsBound(C2!.boundsCoveringRadius) then 
+				C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; 
+			fi; 
+		fi; 
+        C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+                                               LowerBoundMinimumDistance(C2));
+        C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance;
+        C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+                                               UpperBoundMinimumDistance(C2));
+        C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance;
+        return true;
+    else
+        return false; #so l is not equal to r
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  SyndromeTable ( <C> ) . . . . . . . . . . . . . . . a Syndrome table of C
+##
+
+InstallMethod(SyndromeTable, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    if IsLinearCode(C) then
+        return SyndromeTable(C);
+    else
+        Error("the syndrome table is not defined for non-linear codes");
+    fi;
+end);
+
+InstallMethod(SyndromeTable, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C)
+    local H, L, F;
+    H := CheckMat(C);
+    if H = [] then
+        return [];
+    fi;
+    F := LeftActingDomain(C);
+    L := CosetLeadersMatFFE(List(H,List), F);
+    H := TransposedMat(H);
+    return Codeword(List(L, l-> [l, l*H]), F);
+end);
+
+
+#############################################################################
+##
+#F  StandardArray( <C> )  . . . . . . . . . . . . a standard array for code C
+##
+##  Post: returns a 3D-matrix. The first row contains all the codewords of C.
+##  The other rows contain the cosets, preceded by their coset leaders.
+##
+
+InstallMethod(StandardArray, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    if IsLinearCode(C) then
+        return StandardArray(C);
+    else
+        Error("a standard array is not defined for non-linear codes");
+    fi;
+end);
+
+InstallMethod(StandardArray, "method for linear code", true, [IsLinearCode], 0, 
+function(C)
+    local Els;
+    Els := AsSSortedList(C);
+    if CheckMat(C) = [] then
+        return [Els];
+    fi;
+    return List(Set(CosetLeadersMatFFE(CheckMat(C), LeftActingDomain(C))),
+                row -> List(Els, column -> row + column));
+end);
+    
+
+#############################################################################
+##
+#F  AutomorphismGroup( <C> )  . . . . . . . .  the automorphism group of code
+##
+##  The automorphism group is the largest permutation group of degree n such
+##  that for each permutation in the group C' = C
+##
+
+InstallOtherMethod(AutomorphismGroup, "method for unrestricted codes", true, 
+	[IsCode], 0, 
+function(C) 
+ local path;
+      path := DirectoriesPackagePrograms( "guava" );
+
+      if ForAny( ["desauto", "leonconv", "wtdist"], 
+                 f -> Filename( path, f ) = fail ) then
+Print("desauto not loaded ... switching to PermutationGroup ...\n");
+return PermutationGroup(C);
+      fi;
+    if Size(LeftActingDomain(C)) > 2 then
+	Print("This command calculates automorphism groups for binary codes only\n");
+        Print("... automatically switching to PermutationGroup ...\n");
+        return PermutationGroup(C);
+    elif IsLinearCode(C) then
+        return AutomorphismGroup(C);
+    else
+        return MatrixAutomorphisms(VectorCodeword(AsSSortedList(C)), 
+                       [], Group( () ));
+    fi;
+end);
+
+InstallOtherMethod(AutomorphismGroup, "method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+    local incode, inV, outgroup, infile,Ccalc,path;
+      path := DirectoriesPackagePrograms( "guava" );
+
+      if ForAny( ["desauto", "leonconv", "wtdist"], 
+                 f -> Filename( path, f ) = fail ) then
+Print("desauto not loaded ... switching to PermutationGroup ...\n");
+return PermutationGroup(C);
+      fi;
+    if Size(LeftActingDomain(C)) > 2 then 
+	Print("This command calculates automorphism groups for binary codes only\n");
+        Print("... automatically switching to PermutationGroup ...\n");
+        return PermutationGroup(C);
+	fi; 
+    incode :=  TmpName(); PrintTo( incode, "\n" );
+    inV := TmpName(); PrintTo( inV, "\n" );
+    outgroup := TmpName(); PrintTo( outgroup, "\n" );
+    infile := TmpName(); PrintTo( infile, "\n" );
+    # Calculate with dual code if it is smaller:
+    if Dimension(C) > QuoInt(WordLength(C), 2) then
+        Ccalc := DualCode(C);
+    else
+        Ccalc := ShallowCopy(C);
+    fi;
+    GuavaToLeon(Ccalc, incode);
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), 
+            Concatenation("-q ",incode,"::code ",
+            String(MinimumDistance(Ccalc))," ",inV,"::code"));
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "desauto"), 
+            Concatenation("-code -q ",
+            incode,"::code ",inV,"::code ",outgroup));
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), 
+            Concatenation("-a ",outgroup," ", infile));
+    Read(infile);
+    RemoveFiles(incode,inV,outgroup,infile);
+    return GUAVA_TEMP_VAR;
+end);
+
+##  If the new partition backtrack algorithms are implemented, the previous
+##  function can be replaced by the next:
+#InstallOtherMethod(AutomorphismGroup, "method for linear code", true, 
+#	[IsLinearCode], 0, 
+#function(C)
+#    local Ccalc, InvSet;
+#    if Dimension(C) > QuoInt(WordLength(C), 2) then
+#        Ccalc := DualCode(C);
+#    else
+#        Ccalc := ShallowCopy(C);
+#    fi;
+#    InvSet := VectorCodeword(MinimumWeightWords(Ccalc));
+#    return AutomorphismGroupBinaryLinearCode(Ccalc, InvSet);
+#end);
+
+#############################################################################
+##
+## PermutationGroup( <C> ) . . . . . .  PermutationGroup of non-binary code
+##
+## confusing name?
+
+InstallMethod(PermutationGroup, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C)
+local G0, Gell, G1, G2, Gt, L, k, i, j, G, F, A, aut, n, Sn, ell;
+
+Print("\n To be deprecated. Please use PermutationAutomorphismGroup.\n");
+	F:=LeftActingDomain(C);
+	G1 := GeneratorMat(C);
+	G := List(G1,ShallowCopy);
+	k:=DimensionsMat(G)[1];
+	n:=DimensionsMat(G)[2];
+	TriangulizeMat(G);
+	Gt := TransposedMat(G);
+	Sn := SymmetricGroup(n);
+	A:=[];
+	for ell in Sn do
+ 	  G2:= NullMat(n,k);
+ 	  for j in [1..n] do
+  	    G2[j]:=Gt[OnPoints(j,ell)];
+ 	  od; # j
+	  Gell := TransposedMat(G2);
+ 	  G0 := List(Gell,ShallowCopy);
+ 	  TriangulizeMat(G0);
+ 	  if G = G0 then Add(A, ell); fi;
+	od; # ell
+	if Length(A)>0 then 
+	  aut := Group(A); 
+	else aut:=Group(()); 
+	fi;
+	return(aut);
+end);
+
+
+#############################################################################
+##
+## PermutationAutomorphismGroup( <C> ) . .  Permutation automorphism
+##                                  group of linear (possibly non-binary) code
+##
+##
+
+InstallMethod(PermutationAutomorphismGroup, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C)
+local G0, Gell, G1, G2, Gt, L, k, i, j, G, F, A, aut, n, Sn, ell;
+
+	F:=LeftActingDomain(C);
+	G1 := GeneratorMat(C);
+	G := List(G1,ShallowCopy);
+	k:=DimensionsMat(G)[1];
+	n:=DimensionsMat(G)[2];
+	TriangulizeMat(G);
+	Gt := TransposedMat(G);
+	Sn := SymmetricGroup(n);
+	A:=[];
+	for ell in Sn do
+ 	  G2:= NullMat(n,k);
+ 	  for j in [1..n] do
+  	    G2[j]:=Gt[OnPoints(j,ell)];
+ 	  od; # j
+	  Gell := TransposedMat(G2);
+ 	  G0 := List(Gell,ShallowCopy);
+ 	  TriangulizeMat(G0);
+ 	  if G = G0 then Add(A, ell); fi;
+	od; # ell
+	if Length(A)>0 then 
+	  aut := Group(A); 
+	else aut:=Group(()); 
+	fi;
+	return(aut);
+end);
+
+#############################################################################
+##
+#F  IsSelfOrthogonalCode( <C> ) . . . . . . . . . . . . . . . . . . . . . .  
+##
+
+InstallTrueMethod(IsSelfOrthogonalCode, IsSelfDualCode);  
+
+InstallMethod(IsSelfOrthogonalCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    local El, M, zero, i, j, IsSO;
+    if IsLinearCode(C) then
+        return IsSelfOrthogonalCode(C);
+    fi;
+    El := AsSSortedList(C);
+    M := Size(C);
+    zero := Zero(LeftActingDomain(C));
+    i := 1; IsSO := true;
+    while (i <= M-1) and IsSO do
+        j := i+1;
+        while (j <= M) and (El[i]*El[j] = zero) do 
+            j := j + 1; 
+        od;
+        if j <= M then 
+            IsSO := false;
+        fi;
+        i := i + 1;
+    od;
+    return IsSO;
+end);
+
+InstallMethod(IsSelfOrthogonalCode, "method for linear code", true, 
+	[IsLinearCode], 0, 
+function(C)
+    local G, k;
+    G := GeneratorMat(C);
+    k := Dimension(C);
+    return G*TransposedMat(G) = NullMat(k,k,LeftActingDomain(C));
+end);
+
+#############################################################################
+##
+#F  IsDoublyEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a binary linear code which has
+##  all codewords of weight divisible by 4 only. 
+##
+##  If a binary linear code is self-orthogonal and the weight of each row
+##  in its generator matrix is divisibly by 4, the code is doubly-even
+##  (see Theorem 1.4.8 in  W. C. Huffman and V. Pless, "Fundamentals of
+##  error-correcting codes", Cambridge Univ. Press, 2003.) 
+##  
+InstallMethod(IsDoublyEvenCode, "method for binary linear code", true,
+	[IsLinearCode], 0,
+function(C)
+	local G, i;
+	if LeftActingDomain(C)<>GF(2) then
+		Error("Code must be binary\n");
+	fi;
+	G:=GeneratorMat(C);
+	for i in [1..Size(G)] do;
+		if Weight(Codeword(G[i])) mod 4 <> 0 then
+			return false;
+		fi;
+	od;
+	return IsSelfOrthogonalCode(C);
+end);
+
+#############################################################################
+##
+#F  IsSinglyEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a self-orthogonal binary linear
+##  code which is not doubly-even.
+##
+InstallMethod(IsSinglyEvenCode, "method for binary linear code", true,
+	[IsLinearCode], 0,
+function(C)
+	if LeftActingDomain(C)<>GF(2) then
+		Error("Code must be binary\n");
+	fi;
+	return (IsSelfOrthogonalCode(C)) and (not IsDoublyEvenCode(C));
+end);
+
+#############################################################################
+##
+#F  IsEvenCode( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##  Return true if and only if the code C is a binary linear code which has
+##  even weight codewords--regardless whether or not it is self-orgthogonal.
+##
+InstallMethod(IsEvenCode, "method for binary linear code", true,
+	[IsLinearCode], 0,
+function(C)
+	if LeftActingDomain(C)<>GF(2) then
+		Error("Code must be binary\n");
+	fi;
+	return (C = EvenWeightSubcode(C));
+end);
+
+#############################################################################
+##
+#F  CodeIsomorphism( <C1>, <C2> ) . . the permutation that translates C1 into
+#F                         C2 if C1 and C2 are equivalent, or false otherwise
+##
+
+InstallMethod(CodeIsomorphism, "method for two unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function(C1, C2) 
+    local tp, field; 
+	if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2)
+       or MinimumDistance(C1) <> MinimumDistance(C2)
+       or LeftActingDomain(C1) <> LeftActingDomain(C2) then
+        return false; #I think this is what we want (see IsEquivalentCode)
+    elif C1=C2 then
+        return ();
+    elif IsLinearCode(C1) and IsLinearCode(C2) then 
+        return CodeIsomorphism(C1, C2 );
+    fi;
+     
+    tp :=  TransformingPermutations(VectorCodeword(AsSSortedList(C1)), 
+                   VectorCodeword(AsSSortedList(C2)));
+    if tp <> false then
+        for field in [WeightDistribution, InnerDistribution,
+                IsPerfectCode, IsSelfDualCode] do 
+            if not Tester(field)(C1) then 
+				if Tester(field)(C2) then 
+					Setter(field)(C1, field(C2)); 
+				fi; 
+			else 
+				if not Tester(field)(C2) then 
+					Setter(field)(C2, field(C1)); 
+				fi; 
+			fi; 
+		od; 
+
+		if not IsBound(C1!.boundsCoveringRadius) then
+			if IsBound(C2!.boundsCoveringRadius) then
+				C1!.boundsCoveringRadius := C2!.boundsCoveringRadius;
+			fi;
+		else
+			if not IsBound(C2!.boundsCoveringRadius) then
+				C2!.boundsCoveringRadius := C1!.boundsCoveringRadius;
+			fi;
+		fi;
+	    	
+        C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+                                                LowerBoundMinimumDistance(C2));
+        C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1);
+        C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+                                                UpperBoundMinimumDistance(C2));
+        C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1);
+        return tp.columns;
+    else
+        return false; #yes, this is right
+    fi;
+end);
+
+InstallMethod(CodeIsomorphism, "method for two linear codes", true, 
+	[IsLinearCode, IsLinearCode], 0, 
+function(C1, C2) 
+    local code1,code2,cwcode1,cwcode2,output,infile, field;
+
+	if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2)
+       or MinimumDistance(C1) <> MinimumDistance(C2)
+	   or LeftActingDomain(C1) <> LeftActingDomain(C2) then
+		return false; #I think this is what we want (see IsEquivalentCode)
+	elif C1=C2 then
+		return ();
+	elif LeftActingDomain(C1) <> GF(2) then
+        Error("GUAVA can only calculate equivalence over GF(2)");
+    fi;
+    
+	code1 := TmpName(); PrintTo( code1, "\n" );
+    code2 := TmpName(); PrintTo( code2, "\n" );
+    cwcode1 := TmpName(); PrintTo( cwcode1, "\n" );
+    cwcode2 := TmpName(); PrintTo( cwcode2, "\n" );
+    output := TmpName(); PrintTo( output, "\n" );
+    infile := TmpName(); PrintTo( infile, "\n" );
+    GuavaToLeon(C1, code1);
+    GuavaToLeon(C2, code2);
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), 
+            Concatenation("-q ",code1,"::code ",
+            String(MinimumDistance(C1))," ",cwcode1,"::code"));
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), 
+            Concatenation("-q ",code2,"::code ",
+            String(MinimumDistance(C2))," ",cwcode2,"::code"));
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "desauto"), 
+            Concatenation("-iso -code -q ",
+            code1,"::code ",code2,"::code ",cwcode1,"::code ",
+            cwcode2,"::code ",output));
+    Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), 
+            Concatenation("-e ",output," ", 
+            infile));
+    Read(infile);
+    RemoveFiles(code1,code2,cwcode1,cwcode2,output,infile);
+    if not IsPerm(GUAVA_TEMP_VAR) then
+        return false; #it is good that false is returned
+    else
+        for field in [WeightDistribution,
+                IsPerfectCode,
+                IsSelfDualCode]  do 
+			if not Tester(field)(C1) then 
+				if Tester(field)(C2) then 
+					Setter(field)(C1, field(C2)); 
+				fi; 
+			else 
+				if not Tester(field)(C2) then 
+					Setter(field)(C2, field(C1)); 
+				fi; 
+			fi; 
+		od; 
+
+		if not IsBound(C1!.boundsCoveringRadius) then
+			if IsBound(C2!.boundsCoveringRadius) then
+				C1!.boundsCoveringRadius := C2!.boundsCoveringRadius;
+			fi;
+		else
+			if not IsBound(C2!.boundsCoveringRadius) then
+				C2!.boundsCoveringRadius := C1!.boundsCoveringRadius;
+			fi;
+		fi;
+        C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+                                                LowerBoundMinimumDistance(C2));
+        C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1);
+        C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+                                                UpperBoundMinimumDistance(C2));
+        C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1);
+        return GUAVA_TEMP_VAR;
+    fi;
+end);
+
+
+##  If the new partition backtrack algorithms are implemented, the previous
+##  function can be replaced by the next:
+#InstallMethod(CodeIsomorphism, "method for linear codes", true, 
+#	[IsLinearCode, IsLinearCode], 0, 
+#function (C1, C2)
+#   local field, InvSet1, InvSet2, P;
+#   if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2)
+#      or MinimumDistance(C1) <> MinimumDistance(C2)
+#	   or LeftActingDomain(C1) <> LeftActingDomain(C2) then
+#		return false; #I think this is what we want (see IsEquivalentCode)
+#	elif C1=C2 then
+#	 	return ();
+#	elif LeftActingDomain(C1) <> GF(2) then
+#		Error("GUAVA can only calculate equivalence over GF(2)");
+#	fi;
+#    InvSet1 := VectorCodeword(MinimumWeightWords(C1));
+#    InvSet2 := VectorCodeword(MinimumWeightWords(C2));
+#    P := AutomorphismGroupBinaryLinearCode(C1, InvSet1, C2, InvSet2);
+#    if not IsPerm(P) then
+#        return false; #it is good that false is returned
+#    else
+#        for field in [WeightDistribution,
+#                      IsPerfectCode,
+#                      IsSelfDualCode]  do 
+#        	if not Tester(field)(C1) then 
+#				if Tester(field)(C2) then 
+#					Setter(field)(C1, field(C2)); 
+#				fi; 
+#			else 
+#				if not Tester(field)(C2) then 
+#					Setter(field)(C2, field(C1)); 
+#				fi; 
+#			fi; 
+#		 od; 
+#
+#		 if not IsBound(C1!.boundsCoveringRadius) then
+#            if IsBound(C2!.boundsCoveringRadius) then
+#                C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; 
+#            fi;
+#        else
+#            if not IsBound(C2!.boundsCoveringRadius) then
+#                C2!.boundsCoveringRadius := C1!.boundsCoveringRadius;
+#            fi;
+#        fi;
+#        C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1),
+#                                               LowerBoundMinimumDistance(C2));
+#        C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1);
+#        C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1),
+#                                               UpperBoundMinimumDistance(C2));
+#        C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1);
+#        return P;
+#    fi;
+#end);
+
+
+#############################################################################
+##
+#F  IsEquivalent( <C1>, <C2> )  . . . . . .  true if C1 and C2 are equivalent
+##
+##  that is if there exists a permutation that transforms C1 into C2.
+##  If returnperm is true, this permutation (if it exists) is returned;
+##  else the function only returns true or false. Has a global dispatcher.
+##
+InstallMethod(IsEquivalent, "method for unrestricted codes", true, 
+	[IsCode, IsCode], 0, 
+function (C1, C2 )
+    return not IsBool( CodeIsomorphism( C1, C2 ) );
+end);
+
+
+#############################################################################
+##
+#F  RootsOfCode( <C> )  . . . .  the roots of the generator polynomial of <C>
+##
+##  It finds the roots by trying all elements of the extension field
+##
+
+InstallMethod(RootsOfCode, "method for unrestricted code", true, 
+	[IsCode], 0, 
+function(C)
+    if IsCyclicCode(C) then
+        return RootsOfCode(C);
+    else
+        Error("the roots of a code are only defined for cyclic codes");
+    fi;
+end);
+
+InstallMethod(RootsOfCode, "method for cyclic code", true, [IsCyclicCode], 0, 
+function(C)
+    local a, roots, zero, i, t, G;
+    G := GeneratorPol(C);
+    a := PrimitiveUnityRoot(Size(LeftActingDomain(C)), WordLength(C));
+    roots := [];
+    zero := 0*a;
+    t := a^0;
+    for i in [0..WordLength(C)-1] do
+        if Value(G, t) = zero then
+            Add(roots, t);
+        fi;
+        t := t * a;
+    od;
+    return(Set(roots));
+end);
+
+
+#############################################################################
+##
+#F  DistancesDistribution( <C>, <w> ) . . .  distribution of distances from a
+#F                                               word w to all codewords of C
+##
+
+InstallMethod(DistancesDistribution, 
+	"method for unrestricted code and codeword", 
+	true, [IsCode, IsCodeword], 0, 
+function(C, w)
+    local El;
+    if IsLinearCode(C) then
+        return DistancesDistribution(C,w);
+    fi;
+    El := VectorCodeword(AsSSortedList(C));  
+    w := VectorCodeword(w);
+    return DistancesDistributionVecFFEsVecFFE(El,w);
+end);
+
+InstallMethod(DistancesDistribution, "method for linear code and codeword", 
+	true, [IsLinearCode, IsCodeword], 0, 
+function(C, w)
+	local G;
+	G := ShallowCopy(GeneratorMat(C));
+	w := VectorCodeword(w);
+	return DistancesDistributionMatFFEVecFFE(G, LeftActingDomain(C), w);
+end);
+
+          
+#############################################################################
+##
+#F  Syndrome( <C>, <c> )  . . . . . . .  the syndrome of word <c> in code <C>
+##
+
+InstallMethod(Syndrome, "method for unrestricted code and codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, c) 
+    if not IsLinearCode(C) then
+        Error("argument must be a linear code");
+    else
+        return Syndrome(C,c);
+    fi;
+end);
+
+InstallMethod(Syndrome, "method for linear code and codeword", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, c) 
+    if CheckMat(C) = [] then
+        return [Zero(LeftActingDomain(C))];  
+    else
+        return CheckMat(C) * Codeword(c,C);
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  CodewordNr( <C>, <i> )  . . . . . . . . . . . . . . . . .  elements(C)[i]
+##
+
+InstallMethod(CodewordNr, "method for unrestricted code and position list", 
+	true, [IsCode, IsList], 0, 
+function(C, l) 
+	local returnlist;  
+	if IsLinearCode(C) then 
+		return CodewordNr(C,l); 
+	fi;
+
+	l := Set(l);
+	returnlist := (Length(l) > 1);
+    if (l[1] < 1) or (l[Length(l)] > Size(C)) then
+        Error("range: 1..", String(Size(C)));
+    fi;
+    if returnlist then
+        return AsSSortedList(C){l};
+    else
+        return Flat(AsSSortedList(C){l})[1];
+    fi;
+end);
+
+DoCodewordNr:=function(C, l) 
+local index, source, i, result, q, returnlist, F, kmin;
+    if IsList(l) then
+      l := Set(l);
+      returnlist:=true;
+    else
+      l:=[l];
+      returnlist:=false;
+    fi;
+    if (l[1] < 1) or (l[Length(l)] > Size(C)) then
+        Error("range: 1..", String(Size(C)));
+    fi;
+    if HasAsSSortedList(C) then 
+        if returnlist then
+            return AsSSortedList(C){l};
+        else
+            return AsSSortedList(C)[l[1]];
+        fi;
+    else
+        result := [];
+        q := Size(LeftActingDomain(C));  
+        F := LeftActingDomain(C);
+        kmin := Dimension(C) - 1;
+        for index in l do
+            source := [];
+            i := index-1;
+            while i >= 1 do
+                Add(source, i mod q);
+                i := Int(i / q);
+            od;
+            for i in [Length(source)..kmin] do
+                Add(source, 0);
+            od;
+            Add(result, CodewordVector(Reversed(source),C));
+        od;
+        if returnlist then
+            return result;
+        else
+            return result[1];
+        fi;
+    fi;
+end;
+
+InstallOtherMethod(CodewordNr, "method for unrestricted code and int position", 
+	true, [IsCode, IsInt], 0,DoCodewordNr);
+
+InstallMethod(CodewordNr, "method for linear code and position list", true, 
+	[IsLinearCode, IsList], 0, DoCodewordNr);
+
+
+#############################################################################
+##
+#F  String( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
+##
+##  
+
+InstallMethod(String, "method for code", true, [IsCode], 0, 
+function(C) 
+	return CodeDescription(C); 
+end); 
+
+
+#############################################################################
+##
+#F  CodeDescription( <C> ) . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+##
+
+InstallMethod(CodeDescription, "method for an unrestricted code", 
+	true, [IsCode], 0, 
+function(C) 
+    local n, x, lbmd, ubmd, line;
+    line := "a";
+    if Int(WordLength(C)/(10^LogInt(WordLength(C),10))) = 8 
+       or WordLength( C ) = 11 or WordLength( C ) = 18 then
+    	Append(line, "n");
+    fi;
+    Append(line,Concatenation(" (",String(WordLength(C)),",",
+            String(Size(C)),","));
+    lbmd := String( LowerBoundMinimumDistance(C));
+    ubmd := String( UpperBoundMinimumDistance(C));
+    if lbmd = ubmd then
+		Append(line, lbmd );
+	else
+		Append( line, Concatenation( lbmd, "..", ubmd ) );
+    fi; 
+    Append( line, ")" );
+	# Call to BoundsCoveringRadius checks HasCoveringRadius first.  
+	# No need to repeat here.  Similar for LBMD, UBMD, above.  
+	if Length( BoundsCoveringRadius( C ) ) = 1 then
+        SetCoveringRadius(C, BoundsCoveringRadius(C)[1]); 
+		Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) );
+    else
+        Append( line, Concatenation( 
+                String( BoundsCoveringRadius(C)[ 1 ] ),
+                "..",
+                String( BoundsCoveringRadius(C)[ 
+                        Length( BoundsCoveringRadius(C) ) ] ) ) );
+    fi;
+    Append( line, " " );
+    if not IsBound( C!.name ) then
+        C!.name := "unknown unrestricted code";
+    fi;
+    Append( line, C!.name );
+    if not IsBound( C!.history ) then
+        Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")"));
+    fi;
+    IsString( line );
+    return line;
+end);
+          
+InstallMethod(CodeDescription, "method for linear code", 
+	true, [IsLinearCode], 0, 
+function(C) 
+    local lbmd, ubmd, line;
+    line := "a linear [";
+    line := Concatenation( line, String(WordLength(C)), ",",
+                    String(Dimension(C)), "," );
+    lbmd := String( LowerBoundMinimumDistance(C) );
+    ubmd := String( UpperBoundMinimumDistance(C) );
+    if lbmd = ubmd then
+        Append(line, lbmd );
+    else
+        Append(line,Concatenation( lbmd, "..", ubmd ) );
+    fi;
+    Append( line, "]" );
+	if Length( BoundsCoveringRadius( C ) ) = 1 then
+        Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) );
+    else
+        Append( line, Concatenation( 
+                String( BoundsCoveringRadius(C)[ 1 ] ),
+                "..",
+                String( Maximum( BoundsCoveringRadius(C) ) ) ) );
+    fi;
+    Append( line, " " );
+    if not IsBound( C!.name ) then
+        C!.name := "unknown linear code";
+    fi;
+    Append( line, C!.name );
+    if not IsBound( C!.history ) then
+        Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")"));
+    fi;
+    IsString( line );
+    return line;
+end);
+
+InstallMethod(CodeDescription, "method for cyclic codes", 
+	true, [IsCyclicCode], 0, 
+function(C) 
+    local n, x, lbmd, ubmd, line;
+    line:="a cyclic [";
+    Append( line, Concatenation( String(WordLength(C)), ",",
+            String(Dimension(C)), "," ));
+	lbmd := String( LowerBoundMinimumDistance(C) );
+	ubmd := String( UpperBoundMinimumDistance(C) );
+	if lbmd = ubmd then
+		Append(line, lbmd );
+	else
+		Append(line,Concatenation( lbmd, "..", ubmd ) );
+	fi; 
+    Append( line, "]" );
+	if Length( BoundsCoveringRadius( C ) ) = 1 then
+		Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) );
+    else
+        Append( line, Concatenation( 
+                String( BoundsCoveringRadius(C)[ 1 ] ),
+                "..",
+                String( BoundsCoveringRadius(C)[ 
+                        Length( BoundsCoveringRadius(C) ) ] ) ) );
+    fi;
+    Append( line, " " );
+    if not IsBound( C!.name ) then
+        C!.name := "unknown cyclic code";
+    fi;
+    Append( line, C!.name );
+    if not IsBound( C!.history ) then
+        Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")"));
+    fi;
+    IsString( line );
+    return line;
+end);
+
+
+#############################################################################
+##
+#F  Print( <C> )  . . . . . . . . . . . . .  prints short information about C
+##
+##
+InstallMethod(PrintObj, "method for codes", true, [IsCode], 0, 
+function(C) 
+  if HasCoveringRadius(C) and HasMinimumDistance(C) then 
+    Print(String(C));  # sets for future use  
+  else 
+  Print(CodeDescription(C)); # allows to change as bmd, bcr updated 
+  fi; 
+end);
+
+InstallMethod(PrintObj, "method for linear code", true, 
+	[IsFreeLeftModule and IsLinearCodeRep], 0, 
+function(C) 
+  if HasCoveringRadius(C) and HasMinimumDistance(C) then 
+    Print(String(C));  #sets for future use 
+  else 
+    Print(CodeDescription(C)); # allows to change as bcr, bmd updated 
+  fi; 
+end); 
+
+InstallMethod(ViewObj, "method for codes", true, [IsCode], 0, 
+function(C) 
+  if HasCoveringRadius(C) and HasMinimumDistance(C) then 
+    Print(String(C));  # sets for future use  
+  else 
+    Print(CodeDescription(C)); # allows to change as bcr, bmd updated 
+  fi; 
+end);
+
+InstallMethod(ViewObj, "method for linear code", true, 
+	[IsFreeLeftModule and IsLinearCodeRep], 0, 
+function(C) 
+  local line;
+  if HasCoveringRadius(C) and HasMinimumDistance(C) then 
+     Print(String(C));  #sets for future use 
+   elif (IsBound(C!.name) and C!.name="random linear code") then 
+     line := Concatenation( "a  [", String(WordLength(C)), ",",String(Dimension(C)), "," );
+     Append(line,Concatenation( "?] randomly generated code over GF(",String(Size(LeftActingDomain(C))),")") ); 
+     Print(line);
+   elif (IsBound(C!.name) and C!.name="code defined by generator matrix, NC") then 
+     line := Concatenation( "a  [", String(WordLength(C)), ",",String(Dimension(C)), "," );
+     Append(line,Concatenation( "?] randomly generated code over GF(",String(Size(LeftActingDomain(C))),")") ); 
+     Print(line);
+   else
+     Print(CodeDescription(C)); # allows to change as bcr, bmd updated  
+   fi;
+end); 
+
+
+#############################################################################
+##
+#F  Display( <C> )  . . . . . . . . . . . .  prints the history of the code C
+##
+##
+
+InstallMethod(Display, "method for codes", true, [IsCode], 0,  
+function(C) 
+    local d;
+    for d in History(C) do
+        Print(d,"\n");
+    od;
+end);
+
+
+#############################################################################
+##
+#F  Save( <filename>, <C>, <var-name> ) . . . . . writes the code C to a file
+##
+##  with variable name var-name. It can be read back by calling
+##  Read (filename); the code then has the name var-name.
+##  All fields of the code record are stored except for the operations field
+##  and, in case of a linear or cyclic code, the elements.
+##  Pre: filename is accessible for writing
+##
+
+InstallMethod(Save, "method for unrestricted code", true, 
+	[IsString, IsCode, IsString], 0, 
+function(filename, C, codename) 
+	local fld, attr_list, attr;
+    PrintTo(filename, "\n# GUAVA code #\n");
+    ##LR - need proper code creation statement here! 
+	AppendTo(filename, codename, " := rec(\n");
+	attr_list := [CheckMat, CheckPol, CodeDensity, CodeNorm, 
+		CoordinateNorm, CoveringRadius, DesignedDistance,
+	        Dimension, GeneratorMat, GeneratorPol, 
+		GeneratorsOfLeftModule, 
+		InnerDistribution, IsAffineCode, IsAlmostAffineCode, 
+		IsCyclicCode, IsGriesmerCode, IsLinearCode, 
+	        IsMDSCode, IsNormalCode, IsPerfectCode,
+		IsSelfComplementaryCode, IsSelfDualCode, 
+	        IsSelfOrthogonalCode,
+	        LeftActingDomain, MinimumDistance, 
+	        MinimumWeightOfGenerators, MinimumWeightWords, 
+	        OuterDistribution, Redundancy,
+		RootsOfCode, SpecialCoveringRadius, SpecialDecoder, 
+		StandardArray, SyndromeTable, 
+		UpperBoundOptimalMinimumDistance, 
+		WeightDistribution, WordLength ];
+	for attr in attr_list do  
+		if Tester(attr)(C) then 
+			AppendTo(filename, "Set", NameFunction(attr), "(", codename, ", ", 
+			attr(C), ");\n"); 
+    	fi; 
+	od;
+    for fld in ["boundsCoveringRadius", "lowerBoundMinimumDistance", 
+				"upperBoundMinimumDistance"] do 
+		if IsBound(C!.(fld)) then 
+			AppendTo(filename, codename, "!.", fld, ":=", C!.(fld), ";\n" ); 
+		fi; 
+	od; 
+	if (not HasIsLinearCode(C)) or (not IsLinearCode(C)) then 
+		AppendTo(filename,
+			"SetAsSSortedList(", codename, ", ", "Codeword(", 
+			VectorCodeword(AsSSortedList(C)),");\n");
+    fi; 
+	AppendTo(filename, "C!.name := \"", C!.name,"\";\n");
+end);
+
+
+#############################################################################
+##
+#F  History( <C> )  . . . . . . . . . . . . . . . shows the history of a code
+##
+InstallMethod(History, "method for codes", true, [IsCode], 0, 
+function(C) 
+	local s; 
+	if not IsBound(C!.history) then 
+		return [CodeDescription(C)]; 
+	else 
+		s := String(Concatenation(CodeDescription(C), " of")); 
+		return Concatenation( [s], C!.history); 
+	fi;
+end); 
+
+
+######################################################################################
+##
+#F           MinimumDistanceRandom( <C>, <num>, <s> )
+##
+## This is a simpler version than Leon's method, which does not put G in st form.
+## (this works welland is in some cases faster than the st form one)
+## Input: C is a linear code 
+##        num is an integer >0 which represents the number of iterations
+##        s is an integer between 1 and n which represents the columns considered
+##           in the algorithm.
+## Output: an integer >= min dist(C), and hopefully equal to it!
+##         a codework of that weight
+##
+## Algorithm: randomly permute the columns of the gen mat G of C
+##              by a permutation rho - call new mat Gp
+##            break Gp into (A,B), where A is kxs and B is kx(n-s)
+##            compute code C_A generated by rows of A
+##            find min weight codeword c_A of C_A and w_A=wt(c_A)
+##              using AClosestVectorCombinationsMatFFEVecFFECoords
+##            extend c_A to a corresponding codeword c_p in C_Gp
+##            return c=rho^(-1)(c_p) and wt=wt(c_p)=wt(c)
+##
+InstallMethod(MinimumDistanceRandom, "attribute method for linear codes", true, 
+	[IsLinearCode,IsInt,IsInt], 0, 
+function(C,num,s) 
+	local A,HasZeroRow,majority,G0, Gp, Gpt, Gt, L, k, n, i, j, m, dimMat, J, d1,M,
+	arrayd1, Combo, rows, row, rowSum, G, F, zero, AClosestVec, B, ZZ,  p, numrow0,
+        bigwtrow,bigwtvec, x, d, v, ds, vecs,rho,perms,g,newv,pos,rowcombos,v1,v2;
+# returns the estimated distance, and corresponding vector of that weight
+Print("\n This is a probabilistic algorithm which may return the wrong answer.\n");
+	G0 := GeneratorMat(C);
+	p:=5; #this seems to be an optimal value
+              # it's the max number of rows used in Z to find a small
+              # codewd in C_Z
+        G := List(G0,ShallowCopy);
+
+	F:=LeftActingDomain(C);
+	dimMat := DimensionsMat(G);
+	n:=dimMat[2];
+	k:=dimMat[1];
+        if n=k then 
+           C!.lowerBoundMinimumDistance := 1; 
+           C!.upperBoundMinimumDistance := 1; 
+           return 1; 
+        fi; #  added 11-2004
+	if s > n-1 then 
+            Print("Resetting s to ",n-2," ... \n"); 
+            s:=n-k; 
+        fi;
+	arrayd1:=[n];
+
+        numrow0:=0; # initialize
+        perms:=[]; # initialize
+
+   for m in [1..num] do
+   ##Permute the columns of C randomly
+	Gt := TransposedMat(G);
+	Gp := NullMat(n,k);
+	L := SymmetricGroup(n);
+	rho := Random(L);
+	L:=List([1..n],i->OnPoints(i,rho));
+	for i in [1..n] do 
+		Gp[i] := Gt[L[i]];
+	od;
+	Gp := TransposedMat(Gp);
+        Gp := List(Gp,ShallowCopy);
+
+##generate the matrix A from Gp=(A|B)
+	Gpt := TransposedMat(Gp);
+	A := NullMat(s,k);
+	for i in [1..s] do
+		A[i] := Gpt[i];
+	od;
+	A := TransposedMat(A);
+
+##generate the matrix B from Gp=(A|B)
+	Gpt := TransposedMat(Gp);
+	B := NullMat(n-s,k);
+	for i in [s+1..n] do
+		B[i-s] := Gpt[i];
+	od;
+	B := TransposedMat(B);
+
+	zero := Zero(F)*A[1];
+	if (s<n-k and A=Zero(F)*A) then 
+           Error("This method fails for these parameters. Try increasing s.\n");
+        fi; 
+        if (s=n and A=Zero(F)*A) then 
+           return 1; 
+        fi;                 
+
+## search for all rows of weight p
+## J is the list of all triples representing the codeword in C which
+## corresponds to AClosestVec[1].
+
+	J := []; #col number of codewords to compute the length of
+	for i in [1..p] do
+        	AClosestVec:=AClosestVectorCombinationsMatFFEVecFFECoords(A, F, zero, i, 1);
+### AClosestVec[1]=ZZ*AClosestVec[2]...
+                v1:=AClosestVec[2]*Gp;
+                v2:=Permuted(v1,(rho)^(-1));
+        	Add(J,[WeightVecFFE(v2),Codeword(v2,n,F),AClosestVec[2]]);
+	od;
+        ds:=List(J,x->x[1]);
+        vecs:=List(J,x->x[2]);
+        rowcombos:=List(J,x->x[3]);
+        d:=Minimum(ds);
+        i:=Position(ds,d);
+        arrayd1[m]:=[d,vecs[i],rowcombos[i]];
+        perms[m]:=rho;
+   od; ## m
+
+   ds:=List(arrayd1,x->x[1]);
+   vecs:=List(arrayd1,x->x[2]);
+   rowcombos:=List(arrayd1,x->x[3]);
+   d:=MostCommonInList(ds);
+   pos:=Position(ds,d);
+   v:=vecs[pos];
+   L:=List([1..n],i->OnPoints(i,perms[pos]^(-1)));
+   newv:=Codeword(List(L,i->v[L[i]]));
+   return([d,newv]);
+end);
+
+############################################################################
+#F  MinimumWeight( <C> )
+##
+## This function calls an external C program to compute the minimum Hamming
+## weight of a linear code over GF(2) and GF(3). The external program is
+## "minimum-weight"
+##
+## Author: CJ, Tjhai
+##
+InstallMethod(MinimumWeight, "attribute method for linear codes", true, 
+	[IsLinearCode], 0, 
+function(C) 
+	## Since this function calls an external program, we need to write the code
+	## into a generator matrix format recognised by this external program
+	local r, c, q, k, n, G, path, param, tmpFile, tmpOutFile;
+    
+	path := DirectoriesPackagePrograms( "guava" );
+
+    if ForAny( ["minimum-weight"], f->Filename( path, f ) = fail ) then
+		Print("minimum-weight is not loaded ... switching to MinimumDistance ...\n");
+		return MinimumDistance(C);
+    fi;
+	if Size(LeftActingDomain(C)) > 3 then 
+		Print("Code must either be binary or ternary. Quitting. \n"); return(0); 
+	fi;
+	G := GeneratorMat(C);; G := ShallowCopy(G); TriangulizeMat(G);
+    k := DimensionsMat(G)[1];
+    n := DimensionsMat(G)[2];
+    path := DirectoriesPackagePrograms( "guava" );;
+    tmpFile := TmpName(); tmpOutFile := TmpName();
+	
+	PrintTo(tmpFile, k, " ", n, " ", Size(LeftActingDomain(C)), "\n");
+	for r in [1..k] do;
+        for c in [1..n] do;
+            AppendTo(tmpFile, IntFFE(G[r][c]), " ");
+        od;
+        AppendTo(tmpFile, "\n");
+    od;
+
+	# Build the parameters required for the external program
+	param := "";
+	param := Concatenation(param, " --out ", tmpOutFile);
+    if IsCyclicCode(C) then
+	   param := Concatenation(param, " --cyclic");
+	fi;
+	if IsBound(C!.lowerBoundMinimumDistance) then
+		param := Concatenation(param, " --lower-bound ", String(C!.lowerBoundMinimumDistance));
+	fi;
+	if LeftActingDomain(C) = GF(2) then
+		if IsSelfOrthogonalCode(C) then
+			param := Concatenation(param, " --mod 4");
+		elif IsEvenCode(C) then 
+			param := Concatenation(param, " --mod 1");
+		fi;
+	elif LeftActingDomain(C) = GF(3) then
+		if IsSelfOrthogonalCode(C) then
+			param := Concatenation(param, " --mod 5");
+		fi;
+	fi;
+	
+	## Now call the external program
+    Exec(Filename(path, "minimum-weight"), Concatenation(" ", param, " ", tmpFile));
+	Read(tmpOutFile);
+	RemoveFiles(tmpFile, tmpOutFile);
+	C!.lowerBoundMinimumDistance := GUAVA_TEMP_VAR; 
+	C!.upperBoundMinimumDistance := GUAVA_TEMP_VAR; 
+	return GUAVA_TEMP_VAR;
+end);
diff --git a/lib/codeword.gd b/lib/codeword.gd
new file mode 100644
index 0000000..c6ef96f
--- /dev/null
+++ b/lib/codeword.gd
@@ -0,0 +1,102 @@
+#############################################################################
+##
+#A  codeword.gd            GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for working with codewords
+##
+#H  @(#)$Id: codeword.gd,v 1.5 2003/02/12 03:49:18 gap Exp $
+##
+Revision.("guava/lib/codeword_gd") :=
+    "@(#)$Id: codeword.gd,v 1.5 2003/02/12 03:49:18 gap Exp $";
+
+#############################################################################
+##
+#F  IsCodeword( <v> ) . . . . . . . . . . . . . . . .  codeword category 
+##
+DeclareCategory("IsCodeword", IsRowVector); 
+DeclareCategoryCollections("IsCodeword"); 
+
+#############################################################################
+##
+#F  Codeword( <list> [, <F>] or . . . . . . . . . . . .  creates new codeword
+#F  Codeword( <P> [, <n>] [, <F>] ) . . . . . . . . . . . . . . . . . . . . .
+##  Codeword( <P>, Code)  . . . . . . . . . . . . . . . . . . . . . . . . . .
+##
+DeclareOperation("Codeword", [IsObject, IsInt, IsFFE]);
+
+#############################################################################
+##
+#F  Support( <v> )  . . . . . . . set of coordinates in which <v> is not zero
+##
+DeclareAttribute("Support", IsCodeword); 
+
+#############################################################################
+##
+#F  TreatAsPoly( <v> )  . . . . . . . . . . . .  treat codeword as polynomial
+##
+##  The codeword <v> will be treated as a polynomial
+##
+DeclareOperation("TreatAsPoly", [IsCodeword]);
+
+#############################################################################
+##
+#F  TreatAsVector( <v> )  . . . . . . . . . . . .  treat codeword as a vector
+##
+##  The codeword <v> will be treated as a vector
+##
+DeclareOperation("TreatAsVector", [IsCodeword]);
+
+#############################################################################
+##
+#F  PolyCodeword( <arg> ) . . . . . . . . . . converts input to polynomial(s)
+##
+## Input may be codeword, polynomial, vector or a list of those
+##  
+DeclareAttribute("PolyCodeword", IsCodeword); 
+
+#############################################################################
+##
+#F  VectorCodeword( <arg> ) . . . . . . . . . . . .  converts input to vector
+##
+## Input may be codeword, polynomial, vector or a list of those
+## 
+DeclareAttribute("VectorCodeword", IsCodeword); 
+
+#############################################################################
+##
+#F  Weight( <v> ) . . . . . . . . . . . calculates the weight of codeword <v>
+##
+DeclareAttribute("Weight", IsCodeword); 
+
+#############################################################################
+##
+#F  WeightCodeword( <v> ) . . . . . . . calculates the weight of codeword <v>
+##
+DeclareSynonymAttr("WeightCodeword", Weight);
+
+#############################################################################
+##
+#F  DistanceCodeword( <a>, <b> )  . the distance between codeword <a> and <b>
+##
+DeclareOperation("DistanceCodeword", [IsCodeword, IsCodeword]); 
+
+#############################################################################
+##
+#F  NullWord( <C> ) or NullWord( <n>, <F> ) . . . . . . . . . . all zero word
+##
+DeclareOperation("NullWord", [IsInt, IsFFE]); 
+
+#############################################################################
+##
+## Zero(<w>) .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  zero codeword
+##
+
+#############################################################################
+##
+#F  WordLength( <v> ) . . . . . . . . . stores the wordlength of codeword <v>
+## 			Currently no method to calculate.  Assumed to be set at creation. 
+DeclareAttribute("WordLength", IsCodeword); 
+
+
diff --git a/lib/codeword.gi b/lib/codeword.gi
new file mode 100644
index 0000000..9051928
--- /dev/null
+++ b/lib/codeword.gi
@@ -0,0 +1,836 @@
+#############################################################################
+##
+#A  codeword.gi             GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for working with codewords
+##  Codeword is a record with the following field:
+##  !.treatAsPoly
+##
+##  Codeword can have the following attributes: 
+##	VectorCodeword
+##	PolyCodeword 
+##	Weight 
+##	WordLength 
+##	Support 
+## 	
+#H  @(#)$Id: codeword.gi,v 1.9 2003/02/12 03:49:19 gap Exp $
+##
+Revision.("guava/lib/codeword_gi") :=
+    "@(#)$Id: codeword.gi,v 1.9 2003/02/12 03:49:19 gap Exp $";
+
+DeclareRepresentation("IsCodewordRep", 
+			    IsAttributeStoringRep and IsComponentObjectRep, 
+			    ["treatAsPoly"]);
+
+BindGlobal("CodewordFamily",
+        NewFamily("CodewordFamily", IsCodeword,IsCodeword and IsCodewordRep)); 
+
+BindGlobal("CodewordType",NewType(CodewordFamily, IsCodeword ));
+
+
+# Function to objectify codeword using input 
+# vector, length, and field or ffe 
+MakeCodeword := function(vec, n, F) 
+	local v;
+	if Length(vec) > n then 
+		vec := vec{[1..n]};
+    elif Length(vec) < n then 
+		vec := Concatenation(vec, [1..n-Length(vec)]*Zero(F)); 
+    fi;
+	vec := vec * One(F);
+	v := Objectify(CodewordType, rec());
+	SetVectorCodeword(v, vec);
+	SetWordLength(v, n);
+	return v;
+end;
+
+
+## Function to select an appropriate field based on contents of list. 
+SelectField := function(list) 
+	local f;
+	f := Maximum(list) + 1;
+	while not IsPrimePowerInt(f) do 
+		f := f + 1;
+	od;
+	return GF(f);
+end;
+
+#############################################################################
+##
+#F  Codeword( <list> [, <F>] or . . . . . . . . . . . .  creates new codeword
+#F  Codeword( <P> [, <n>] [, <F>] ) . . . . . . . . . . . . . . . . . . . . .
+##  Codeword( <P>, Code)  . . . . . . . . . . . . . . . . . . . . . . . . . . 
+##
+
+InstallMethod(Codeword, "list,n,FFE", true, [IsList, IsInt, IsFFE], 1, 
+function(list, n, ffe)
+	local c;
+	if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then 
+		return List(list, i->Codeword(i, n, ffe)); 
+	fi; 
+	c := MakeCodeword(list, n, ffe);  
+	TreatAsVector(c);
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "list,n,Field", true, [IsList, IsInt, IsField], 1, 
+function(list, n, F)
+  	local i;
+	if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then 
+  		return List(list, i->Codeword(i, n, F)); 
+	fi;
+	if Length(list) > 0 and IsRat(list[1]) and not IsPrime(Size(F)) then 
+		list := List(list, i->AsSSortedList(F)[Int(i)mod Size(F) + 1]);
+	fi;
+	return Codeword(list,n,One(F));
+end);
+
+InstallOtherMethod(Codeword, "list,FFE", true, [IsList, IsFFE], 1, 
+function(list, ffe)
+	if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then 
+		return List(list, i->Codeword(i, ffe)); 
+	fi;
+	return Codeword(list, Length(list), ffe);
+end);
+
+InstallOtherMethod(Codeword, "list,Field", true, [IsList, IsField], 1, 
+function(list, F)
+	if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then 
+		return List(list, i->Codeword(i, F)); 
+	fi;
+		return Codeword(list, Length(list), F);
+end);
+
+InstallOtherMethod(Codeword, "list,n", true, [IsList, IsInt], 1, 
+function(list, n)
+local o;
+  if Length(list)=0 then
+	o:=Z(2);
+  elif IsRat(list[1]) then 
+ 	o:=SelectField(list);
+  elif IsFFE(list[1]) then 
+	o:=Maximum(list);
+  else 
+    return List(list, i->Codeword(i, n)); 
+  fi;
+  return Codeword(list,n,o);
+end);
+
+InstallOtherMethod(Codeword,"list",true,[IsList],1,
+function(list)
+local o;
+  if Length(list)=0 then  
+	o:=Z(2);
+  elif IsRat(list[1]) then 
+  	o:= SelectField(list);
+  elif  IsFFE(list[1]) then  
+	o:= Maximum(list);
+  else  
+  	return List(list, i->Codeword(i)); 
+  fi;
+  return Codeword(list,Length(list),o);
+end);
+
+InstallOtherMethod(Codeword, "list,Code", true, [IsList, IsCode], 0, 
+function(l, C) 
+	return Codeword(l, WordLength(C), LeftActingDomain(C));
+end);
+
+
+## Methods with a string provided ##
+
+## helper function to convert string to list/vector.  Digits go to approp.
+## digit.  Other characters go to 0.
+StringToVec := function(s)
+	local val, i, S; 
+	S := [];
+	for i in s do 
+		val := Position("0123456789", i);
+		if val = fail then 
+			val := 0;
+		else 
+			val := val-1;
+		fi;
+		Add(S, val);
+	od;
+	return S;
+end;
+
+
+InstallOtherMethod(Codeword,"string,n,FFE",true,[IsString,IsInt,IsFFE],0,
+function(s,n,ffe)
+	s:=StringToVec(s);
+	return Codeword(s,n,ffe);
+end);
+
+InstallOtherMethod(Codeword,"string,n,Field",true,[IsString,IsInt,IsField],0,
+function(s,n,F)
+	s := StringToVec(s);
+	return Codeword(s, n, F);
+end);
+
+InstallOtherMethod(Codeword, "string,FFE", true, [IsString, IsFFE], 0, 
+function(s, ffe)
+	return Codeword(s, Length(s), ffe);
+end);
+
+InstallOtherMethod(Codeword, "string,Field", true, [IsString, IsField], 0, 
+function(s, F) 
+	return Codeword(s, Length(s), F);
+end);
+
+InstallOtherMethod(Codeword, "string,n", true, [IsString, IsInt], 0, 
+function(s, n)
+	local F;
+	s := StringToVec(s);
+	F := SelectField(s); 
+	return Codeword(s, n, F);
+end);
+
+InstallOtherMethod(Codeword, "string", true, [IsString], 0, 
+function(s) 
+	return Codeword(s, Length(s)); 
+end);
+
+InstallOtherMethod(Codeword, "string,Code", true, [IsString, IsCode], 0, 
+function(s, C)
+	return Codeword(s, WordLength(C), LeftActingDomain(C));
+end);
+
+
+## Methods with a poly provided ##
+InstallOtherMethod(Codeword,"poly,n,FFE", 
+  	function(pf, inf, ff)
+  		return IsIdenticalObj(CoefficientsFamily(pf), ff);
+	end, 
+	[IsUnivariatePolynomial,IsInt,IsFFE],0,
+function(p,n,ffe)
+  	local c;
+	p := CoefficientsOfLaurentPolynomial(p);
+  	p := ShiftedCoeffs(p[1],p[2]);
+  	c := Codeword(p,n,ffe);
+    TreatAsPoly(c);
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "poly,n,Field",  
+	function(pf,inf,ff)
+		return IsIdenticalObj(CoefficientsFamily(pf), ElementsFamily(ff));
+	end,
+	[IsUnivariatePolynomial, IsInt, IsField], 0, 
+function(p, n, F)
+	return Codeword(p, n, One(F));
+end);
+
+InstallOtherMethod(Codeword, "poly,FFE",  
+	function(pf, ff)
+		return IsIdenticalObj(CoefficientsFamily(pf), ff);
+	end,
+	[IsUnivariatePolynomial, IsFFE], 0, 
+function(p, ffe)
+	local c;
+	p := CoefficientsOfLaurentPolynomial; 
+	p := ShiftedCoeffs(p[1],p[2]);
+	c := Codeword(p, Length(p), ffe);
+	TreatAsPoly(c); 
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "poly,Field",  
+	function(pf,ff)
+		return IsIdenticalObj(CoefficientsFamily(pf), ElementsFamily(ff));
+	end,
+	[IsUnivariatePolynomial, IsField], 0, 
+function(p, F)
+	local c;
+	p := CoefficientsOfLaurentPolynomial(p);
+	p := ShiftedCoeffs(p[1],p[2]); 
+	c := Codeword(p, Length(p), One(F));
+	TreatAsPoly(c);
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "poly,n", true, 
+	[IsUnivariatePolynomial, IsInt], 0, 
+function(p, n)
+	local c, F;
+	F := CoefficientsRing(DefaultRing(p)); 
+	p := CoefficientsOfLaurentPolynomial(p);
+	p := ShiftedCoeffs(p[1],p[2]); 
+	c := Codeword(p, n, F); 
+	TreatAsPoly(c);
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "poly", true, 
+	[IsUnivariatePolynomial], 0, 
+function(p)
+	local c, F; 
+	F := CoefficientsRing(DefaultRing(p));
+	p := CoefficientsOfLaurentPolynomial(p); 
+	p := ShiftedCoeffs(p[1],p[2]); 
+	c := Codeword(p, Length(p), F);
+	TreatAsPoly(c);
+	return c;
+end);
+
+InstallOtherMethod(Codeword, "poly,Code", true, 
+	[IsUnivariatePolynomial, IsCode], 0, 
+function(p, C)
+	return Codeword(p, WordLength(C), LeftActingDomain(C));
+end);
+
+
+## Methods with a codeword provided ##
+InstallOtherMethod(Codeword,"codeword,n",true,[IsCodeword,IsInt],0,
+function(w,n)
+  return Codeword(VectorCodeword(w),n, Field(VectorCodeword(w)));
+end);
+
+InstallOtherMethod(Codeword, "codeword", true, [IsCodeword], 0,
+function(w)
+	return Codeword(VectorCodeword(w), WordLength(w), Field(VectorCodeword(w)));
+end);
+
+InstallOtherMethod(Codeword, "codeword,n,Field", true, 
+	[IsCodeword, IsInt, IsField], 0, 
+function(w, n, F)
+	return Codeword(VectorCodeword(w),n,F);
+end);
+
+InstallOtherMethod(Codeword, "codeword,n,FFE", true, 
+	[IsCodeword, IsInt, IsFFE], 0, 
+function(w, n, ffe) 
+	return Codeword(VectorCodeword(w), n, ffe);
+end);
+
+InstallOtherMethod(Codeword, "codeword,Field", true, [IsCodeword, IsField], 0,
+function(w, F)
+	return Codeword(VectorCodeword(w),WordLength(w), F);
+end);
+
+InstallOtherMethod(Codeword, "codeword,FFE", true, [IsCodeword, IsFFE], 0, 
+function(w, ffe)
+	return Codeword(VectorCodeword(w), WordLength(w), ffe);
+end);
+
+InstallOtherMethod(Codeword, "codeword,Code", true, [IsCodeword, IsCode], 0, 
+function(w, C)
+	return Codeword(VectorCodeword(w), WordLength(C), LeftActingDomain(C));
+end);
+
+
+#############################################################################
+##
+#F  Field( <c> )
+##
+#InstallOtherMethod(FieldByGenerators,"codewords",true,[IsCodewordCollection],0,
+#function(l)
+#  return FieldByGenerators(VectorCodeword(l[1]));
+#end);
+
+#############################################################################
+##
+#M  Print( <v> )  . . . . . . . . . . . . . . . . . . . . . prints a codeword
+##
+PrintViewCodeword:=function(w)
+local v, q, isclear, i, l, power;
+  if w!.treatAsPoly then 
+    v := VectorCodeword(w);
+    if Length(v) > 0 then 
+      q := Size(Field(v));
+    else 
+      Print("[ ]");
+      return;
+    fi;
+    isclear := true;
+    for power in Reversed([0..WordLength(w)-1]) do 
+      if v[power+1] <> 0*Z(q) then 
+	if not isclear then 
+		Print(" + "); 
+	fi;
+	isclear := false; 
+	if power = 0 or v[power+1] <> Z(q)^0 then 
+		if IsPrime(q) then 
+			Print(String(Int(v[power+1])));
+		else
+			i := LogFFE(v[power+1], Z(q));
+			if i = 0 then 
+				Print("1");
+			elif i = 1 then 
+				Print("a");
+			else
+				Print("(a^",String(i),")");
+			fi;
+		fi;
+	fi;
+	if power > 0 then 
+		Print("x");
+		if power > 1 then 
+			Print("^", String(power));
+		fi;
+	fi;
+      fi;
+    od;
+    if isclear then 
+      Print("0");
+    fi; 
+  else
+    Print("[ ");
+    v := VectorCodeword(w);
+    if Length(v) > 0 then 
+	    q := Size(Field(v));
+    else 
+	    Print("]");
+	    return;
+    fi;
+    if not IsPrime(q) then 
+	    for i in v do 
+		    if i = 0 * Z(q) then 
+			    Print("0 ");
+		    else
+			    l := LogFFE(i, Z(q));
+			    if l = 0 then 
+				    Print("1 ");
+			    elif l = 1 then 
+				    Print("a ");
+			    else
+				    Print("a^", String(l), " ");
+			    fi;
+		    fi;
+	    od;
+    else
+	    for i in IntVecFFE(v) do 
+		    Print(i, " ");
+	    od;
+    fi;
+    Print("]");
+  fi;
+end;
+
+InstallMethod(PrintObj, "codeword", true, [IsCodeword], 0, 
+  PrintViewCodeword);
+
+InstallMethod(ViewObj, "codeword", true, [IsCodeword], 0, 
+  PrintViewCodeword);
+
+#############################################################################
+##
+## list methods for codewords (to permit codeword+list...)
+InstallOtherMethod(Length,"codeword",true,[IsCodeword],0,
+  w->Length(VectorCodeword(w)));
+
+InstallOtherMethod(\[\],"codeword",true,[IsCodeword,IsPosInt],0,
+function(w,i)
+  return VectorCodeword(w)[i];
+end);
+
+#############################################################################
+##
+#F  \+( <l>, <r> )  . . . . . . . . . . . . . . . . . . . .  sum of codewords
+##
+
+InstallOtherMethod(\+, "codeword+codeword", true, [IsCodeword, IsCodeword], 0, 
+function(a, b) 
+	return Codeword(VectorCodeword(a) + VectorCodeword(b));
+end);
+
+InstallOtherMethod(\+, "codeword+list", true, [IsCodeword, IsList], 0, 
+function(w, l)
+	return Codeword(VectorCodeword(w) + l); 
+end);
+
+InstallOtherMethod(\+, "list+codeword", true, [IsList,IsCodeword], 0, 
+function(l, w)
+	return Codeword(l+VectorCodeword(w)); 
+end);
+
+InstallOtherMethod(\+, "poly+codeword", true, 
+	[IsUnivariatePolynomial, IsCodeword], 0, 
+function(p, w)
+	return Codeword(p) + w;
+end);
+
+InstallOtherMethod(\+, "codeword+poly", true, 
+	[IsCodeword, IsUnivariatePolynomial], 0, 
+function(w, p)
+	return w + Codeword(p);
+end);
+
+InstallOtherMethod(\+, "string+codeword", true, [IsString, IsCodeword], 0, 
+function(s, w)
+	return Codeword(s) + w;
+end);
+
+InstallOtherMethod(\+, "codeword+string", true, [IsCodeword, IsString], 0, 
+function(w, s)
+	return w + Codeword(s);
+end);
+
+InstallOtherMethod(\+, "Rat+codeword", true, [IsRat, IsCodeword], 0, 
+function(r, w)
+	return Codeword(r + VectorCodeword(w));
+end);
+
+InstallOtherMethod(\+, "codeword+Rat", true, [IsCodeword, IsRat], 0, 
+function(w, r)
+	return Codeword(VectorCodeword(w) + r);
+end);
+
+InstallOtherMethod(\+, "FFE+codeword", true, [IsFFE, IsCodeword], 0, 
+function(ffe, w)
+	return Codeword(ffe + VectorCodeword(w));
+end);
+
+InstallOtherMethod(\+, "codeword+FFE", true, [IsCodeword, IsFFE], 0, 
+function(w, ffe)
+	return Codeword(VectorCodeword(w) + ffe);
+end);
+
+
+#############################################################################
+##
+#F  \*( <l>, <r> )  . . . . . . . . . . . .  product of codewords
+##
+
+InstallOtherMethod(\*, "codeword*codeword", true, [IsCodeword, IsCodeword], 0, 
+function(a, b)
+	return VectorCodeword(a) * VectorCodeword(b);
+end);
+
+InstallOtherMethod(\*, "matrix*codeword", true, [IsMatrix, IsCodeword], 0, 
+function(m, w)
+	return Codeword(m * VectorCodeword(w));
+end);
+
+InstallOtherMethod(\*, "codeword*matrix", true, [IsCodeword, IsMatrix], 0, 
+function(w, m)
+	return Codeword(VectorCodeword(w) * m);
+end);
+
+InstallOtherMethod(\*, "FFE*codeword", true, [IsFFE, IsCodeword], 0, 
+function(ffe, w)
+	return Codeword(ffe * VectorCodeword(w));
+end);
+
+InstallOtherMethod(\*, "codeword*FFE", true, [IsCodeword, IsFFE], 0, 
+function(w, ffe)
+	return Codeword(VectorCodeword(w) * ffe);
+end);
+
+InstallOtherMethod(\*, "Rat*codeword", true, [IsRat, IsCodeword], 0, 
+function(r, w)
+	return Codeword(r * VectorCodeword(w));
+end);
+
+InstallOtherMethod(\*, "codeword*Rat", true, [IsCodeword, IsRat], 0, 
+function(w, r)
+	return Codeword(VectorCodeword(w) * r);
+end);
+
+
+#############################################################################
+##
+#F  \-( <l>, <r> )  . . . . . . . . . . . . . . . . . difference of codewords
+##
+
+InstallOtherMethod(\-, "codeword-codeword", true, [IsCodeword, IsCodeword], 0, 
+function(a, b)
+	return Codeword(VectorCodeword(a) - VectorCodeword(b)); 
+end);
+
+InstallOtherMethod(\-, "vector-codeword", true, [IsVector, IsCodeword], 0, 
+function(v, w)
+	return Codeword(v - VectorCodeword(w));
+end);
+
+InstallOtherMethod(\-, "codeword-vector", true, [IsCodeword, IsVector], 0, 
+function(w,v)
+	return Codeword(VectorCodeword(w) - v);
+end);
+
+InstallOtherMethod(\-, "poly-codeword", true, 
+	[IsUnivariatePolynomial, IsCodeword], 0, 
+function(p, w)
+	return Codeword(p) - w;
+end);
+
+InstallOtherMethod(\-, "codeword-poly", true, 
+	[IsCodeword, IsUnivariatePolynomial], 0, 
+function(w, p)
+	return w - Codeword(p);
+end);
+
+InstallOtherMethod(\-, "string-codeword", true, [IsString, IsCodeword], 0, 
+function(s, w)
+	return Codeword(s) - w;
+end);
+
+InstallOtherMethod(\-, "codeword-string", true, [IsCodeword, IsString], 0, 
+function(w, s)
+	return w - Codeword(s);
+end);
+
+InstallOtherMethod(\-, "Rat-codeword", true, [IsRat, IsCodeword], 0, 
+function(r, w)
+	return Codeword(r - VectorCodeword(w));
+end);
+
+InstallOtherMethod(\-, "codeword-Rat", true, [IsCodeword, IsRat], 0, 
+function(w, r)
+	return Codeword(VectorCodeword(w) - r);
+end);
+
+InstallOtherMethod(\-, "FFE-codeword", true, [IsFFE, IsCodeword], 0, 
+function(ffe, w)
+	return Codeword(ffe - VectorCodeword(w));
+end);
+
+InstallOtherMethod(\-, "codeword-FFE", true, [IsCodeword, IsFFE], 0, 
+function(w, ffe)
+	return Codeword(VectorCodeword(w) - ffe);
+end);
+
+
+#############################################################################
+##
+#F  \=( <l>, <r> )  . . . . . . . . . . . . . . . . . . equality of codewords
+##
+
+InstallMethod(\=, "codeword=codeword", true, [IsCodeword, IsCodeword], 0, 
+function(a, b)
+	return VectorCodeword(a) = VectorCodeword(b);
+end);
+
+InstallMethod(\=, "vector=codeword", true, [IsVector, IsCodeword], 0, 
+function(v, w)
+	return v = VectorCodeword(w);
+end);
+
+InstallMethod(\=, "codeword=vector", true, [IsCodeword, IsVector], 0, 
+function(w, v)
+	return VectorCodeword(w) = v;
+end);
+
+InstallMethod(\=, "poly=codeword", true, 
+	[IsUnivariatePolynomial, IsCodeword], 0, 
+function(p, w)
+	return VectorCodeword(Codeword(p)) = VectorCodeword(w);
+end);
+
+InstallMethod(\=, "codeword=poly", true, 
+	[IsCodeword, IsUnivariatePolynomial], 0, 
+function(w, p)
+	return VectorCodeword(w) = VectorCodeword(Codeword(p));
+end);
+
+InstallMethod(\=, "string=codeword", true, 
+	[IsString, IsCodeword], 0, 
+function (s, w)
+	return VectorCodeword(Codeword(s)) = VectorCodeword(w);
+end);
+
+InstallMethod(\=, "codeword=string", true, 
+	[IsCodeword, IsString], 0, 
+function(w, s)
+	return VectorCodeword(w) = VectorCodeword(Codeword(s));
+end);
+
+
+#############################################################################
+##
+#F  \<( <l>, <r> )  . . . . . . . . . . . . . . . . less than for codewords
+##
+
+InstallMethod(\<, "codeword<codeword", IsIdenticalObj, 
+	[IsCodeword, IsCodeword], 0, 
+function(a,b)
+	return VectorCodeword(a) < VectorCodeword(b);
+end);
+
+
+#############################################################################
+##
+#F  Support( <v> )  . . . . . . . set of coordinates in which <v> is not zero
+##
+
+InstallMethod(Support, "codeword", true, [IsCodeword], 0, 
+function (c)
+	local i, S, zero;
+	S := [];
+	zero := Zero(VectorCodeword(c)[1]);   
+	for i in [1..WordLength(c)] do 
+		if VectorCodeword(c)[i] <> zero then 
+			Add(S, i);
+		fi;
+	od;
+	return S;
+end);
+
+
+#############################################################################
+##
+#F  TreatAsPoly( <v> )  . . . . . . . . . . . .  treat codeword as polynomial
+##
+##  The codeword <v> will be treated as a polynomial
+##
+
+InstallMethod(TreatAsPoly, "codeword", true, [IsCodeword], 0, 
+function(c)
+	c!.treatAsPoly := true;
+end);
+
+InstallOtherMethod(TreatAsPoly, "list of codewords", true, [IsList], 0, 
+function(list)
+local i;
+  if IsCodeword(list) then
+    TryNextMethod(); # codeword is list
+  fi;
+  for i in list do 
+    TreatAsPoly(i);
+  od;
+end);
+
+
+#############################################################################
+##
+#F  TreatAsVector( <v> )  . . . . . . . . . . . .  treat codeword as a vector
+##
+##  The codeword <v> will be treated as a vector
+##
+
+InstallMethod(TreatAsVector, "codeword", true, [IsCodeword], 0, 
+function(c)
+	c!.treatAsPoly := false;
+end);
+
+InstallOtherMethod(TreatAsVector, "list of codewords", true, [IsList], 0, 
+function(list) 
+local i;
+  if IsCodeword(list) then
+    TryNextMethod(); # codeword is list
+  fi;
+  for i in list do 
+    TreatAsVector(i);
+  od;
+end);
+
+
+#############################################################################
+##
+#F  PolyCodeword( <arg> ) . . . . . . . . . . converts input to polynomial(s)
+##
+## Input may be codeword, polynomial, vector or a list of those
+##  -currently only codeword or list of 
+
+InstallMethod(PolyCodeword, "poly from codeword", true, [IsCodeword], 0, 
+function(w)
+	local fam, cf, F;
+	cf := VectorCodeword(w);
+	if Length(cf) > 0 then 
+		F := Field(cf);
+	else 
+		F := GF(2);
+	fi;
+	fam := ElementsFamily(FamilyObj(F)); 
+	return LaurentPolynomialByCoefficients(fam, cf, 0);
+end);
+
+InstallOtherMethod(PolyCodeword, "polys from codeword list", true, [IsList], 0, 
+function(l)
+	return List(l, i->PolyCodeword(Codeword(i)));	
+end);
+
+
+#############################################################################
+##
+#F  VectorCodeword( <arg> ) . . . . . . . . . . . .  converts input to vector
+##
+## Input may be codeword, polynomial, vector or a list of those
+##  - currently only codeword or list of!
+
+InstallMethod(VectorCodeword, "vector from codeword", true, [IsCodeword], 0, 
+function(w)
+	local p;
+	if HasPolyCodeword(w) then 
+		p := PolyCodeword(w);
+	else
+		Error("VectorCodeword and PolyCodeword both unknown");
+	fi;
+	p := CoefficientsOfLaurentPolynomial(p);
+	p := ShiftedCoeffs(p[1], p[2]);
+	return p; 
+end);
+
+InstallOtherMethod(VectorCodeword, "vectors from codeword list", true, 
+	[IsList], 0, 
+function(l)
+	return List(l, i->VectorCodeword(Codeword(i)));
+end);
+
+
+#############################################################################
+##
+#F  Weight( <v> ) . . . . . . . . . . . calculates the weight of codeword <v>
+##
+
+InstallMethod(Weight, "codeword", true, [IsCodeword], 0, 
+function(w)
+    local vec; 
+    vec := VectorCodeword(w);
+    return DistanceVecFFE( 0*vec, vec );  
+end );
+
+
+#############################################################################
+##
+#F  DistanceCodeword( <a>, <b> )  . the distance between codeword <a> and <b>
+##
+
+InstallMethod(DistanceCodeword, "two codewords", true, 
+	[IsCodeword, IsCodeword], 0, 
+function(w1, w2)
+	return DistanceVecFFE(VectorCodeword(w1), VectorCodeword(w2));
+end);
+
+
+#############################################################################
+##
+#F  NullWord( <C> ) or NullWord( <n>, <F> ) . . . . . . . . . . all zero word
+##
+
+InstallMethod(NullWord, "n-FFE", true, [IsInt, IsFFE], 0, 
+function(n,ffe)
+	return Codeword(List([1..n], i->0), n, ffe);
+end);
+
+InstallOtherMethod(NullWord, "n-Field", true, [IsInt, IsField], 0, 
+function(n, F)
+	return Codeword(List([1..n], i->0), n, One(F));
+end);
+
+InstallOtherMethod(NullWord, "n", true, [IsInt], 0, 
+function(n)
+	return Codeword(List([1..n], i->0), n, One(GF(2)));
+end);
+
+InstallOtherMethod(NullWord, "Code", true, [IsCode], 0, 
+function(C)
+	local n;
+	n := WordLength(C); 
+	return Codeword(List([1..n], i->0),n,One(LeftActingDomain(C)));
+end);
+
+
+#############################################################################
+##
+## Zero(<w>) .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  zero codeword 
+##
+InstallOtherMethod(Zero, "method for codewords", true, [IsCodeword], 0, 
+function(w) 
+	return Zero(VectorCodeword(w)[1]) * w; 
+end); 
+
+
diff --git a/lib/curves.gd b/lib/curves.gd
new file mode 100644
index 0000000..c50aeed
--- /dev/null
+++ b/lib/curves.gd
@@ -0,0 +1,383 @@
+#############################################################################
+##
+#A  curves.gd                GUAVA library                      David Joyner
+#A                                                      
+#A                                                      
+##
+##  This file contains functions related to AG codes and RR speaces on P^1
+##
+#H  @(#)$Id: curves.gd,v 1.3 2005/05/09 03:49:21 gap Exp $
+##
+## created 5-9-2005: also, moved
+##       DivisorsMultivariatePolynomial (and subfunctions), 
+##       from util2.gi (where it was in guava 2.0)
+## added 5-15-2005:
+##       MoebiusTransformation, ActionMoebiusTransformationOnFunction,
+##       ActionMoebiusTransformationOnDivisorP1, DivisorAutomorphismGroupP1,
+##       MatrixRepresentationOnRiemannRochSpaceP1
+##
+Revision.("guava2.1/lib/curves_gd") :=
+    "@(#)$Id: curves.gd,v 1.3 2005/05/09 03:49:21 gap Exp $";
+
+###########################################################
+##
+##      DegreesMonomialTerm(m)
+##  
+## Input: a monomial m in n variables,
+##        n1 <= n is the number of variables occuring
+##          in each monomial term of m. 
+## Output: the list of degrees of each variable in m.
+##
+DeclareOperation("DegreesMonomialTerm", [IsRingElement, IsRing]); 
+
+###########################################################
+##
+##      DegreesMultivariatePolynomial(f,R)
+##  
+## Input: multivariate poly <f> in R=F[x1,x2,...,xn]
+##        a multivariate polynomial ring <R> containing <f>
+## Output: the list of degrees of each term in <f>.
+##
+DeclareOperation("DegreesMultivariatePolynomial", [IsRingElement, IsRing]); 
+
+###########################################################
+##
+#F      DegreeMultivariatePolynomial( <f>, <R> )
+##  
+## Input: multivariate poly <f> in R=F[x1,x2,...,xn]
+##        a multivariate polynomial ring <R> containing <f>
+## Output: the degree of <f>.
+##
+DeclareOperation("DegreeMultivariatePolynomial", [IsRingElement, IsRing]); 
+
+########################################################################
+##
+#F  CoefficientToPolynomial( <coeffs> , <R> )
+##  
+##  Input: a list of coeffs = [c0,c1,..,cd]
+##         a univariate polynomial ring R = F[x]
+##  Output: a polynomial c0+c1*x+...+cd*x^(d-1) in R
+##
+DeclareOperation("CoefficientToPolynomial", [IsList, IsRing]); 
+
+########################################################################
+##
+#F  DivisorsMultivariatePolynomial( <f> , <R> )
+##  
+## Input: f is a polynomial in R=F[x1,...,xn]
+## Output: all divisors of f
+## uses a slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard,
+##  Modern Computer Algebra, exercise 16.10)
+DeclareOperation("DivisorsMultivariatePolynomial",[IsPolynomial,IsPolynomialRing]); 
+
+###########################################################
+##
+#F      AffineCurve(<poly>, <ring> )
+##
+## Input: <poly> is a polynomial in the ring F[x,y],
+##        <ring> is a bivariate ring containing <f>
+## Output: associated record: polynomial component and a ring component
+##
+DeclareOperation("AffineCurve", [IsRingElement, IsRing]); 
+
+###########################################################
+##
+#F      GenusCurve( <crv> )
+##
+##
+## Input: <crv> is a curve record structure
+##        crv: f(x,y)=0, f a poly of degree d
+## Output: genus of plane curve
+##         genus = (d-1)(d-2)/2
+##
+DeclareOperation("GenusCurve", [IsRecord]); 
+
+#############################################################################
+##
+#F  OnCurve(<Pts>, <crv>)
+##
+## Input: <crv> is a curve record structure
+##        <Pts> a list of pts in F^2
+##        crv: f(x,y)=0, f a poly in F[x,y]
+## Output: true if they are all on crv
+##         false otherwise
+##  
+DeclareOperation("OnCurve",[IsList,IsRecord]);
+
+#############################################################################
+##
+#F  AffinePointsOnCurve(<f>, <R>, <E>)
+##
+##  returns the points in $f(x,y)=0$ where $(x,y) \in E$ and 
+##  $f\in R=F[x,y]$, $E/F$ finite fields.
+##  
+DeclareGlobalFunction("AffinePointsOnCurve");
+#DeclareOperation("AffinePointsOnCurve",[IsPolynomial,IsRing,IsField]);
+
+###########################################################
+##
+#F      DivisorOnAffineCurve(<cdiv>, <sdiv>, <crv> )
+##
+##
+## Input: <cdiv> list of integers (coeffs of divisor),
+##        <sdiv> is a list of points (support of divisor),
+##        <crv> is a curve record
+## Output: associated divisor record
+##
+DeclareOperation("DivisorOnAffineCurve", [IsList, IsList, IsRecord]); 
+
+###########################################################
+##
+#F      DivisorOnAffineCurve(<div1>, <div2> )
+##
+## Input: <div1> , <div2> are divisor records 
+## Output: sum
+##
+DeclareOperation("DivisorAddition", [IsRecord, IsRecord]); 
+
+###########################################################
+##
+#F      DivisorDegree( <div> )
+##
+## Input: <div> a divisor record 
+## Output: degree = sum of coeffs
+##
+DeclareOperation("DivisorDegree", [IsRecord]); 
+
+###########################################################
+##
+#F      DivisorIsEffective( <div> )
+##
+## Input: <div> a divisor record 
+## Output: true if all coeffs>=0, false otherwise
+##
+DeclareOperation("DivisorIsEffective", [IsRecord]); 
+
+###########################################################
+##
+#F      DivisorNegate( <div> )
+##
+## Input: <div> a divisor record 
+## Output: -div
+##
+DeclareOperation("DivisorNegate", [IsRecord]); 
+
+###########################################################
+##
+#F      DivisorIsZero( <div> )
+##
+## Input: <div> a divisor record 
+## Output: true if all coeffs=0, false otherwise
+##
+DeclareOperation("DivisorIsZero", [IsRecord]); 
+
+###########################################################
+##
+#F      DivisorEqual(<div1>, <div2> )
+##
+## Input: <div1> , <div2> are divisor records 
+## Output: true if div1=div2
+##
+DeclareOperation("DivisorEqual", [IsRecord, IsRecord]); 
+
+
+###########################################################
+##
+#F      DivisorGCD(<D1>, <D2> )
+##
+## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k
+## are two divisors on a curve then their
+## GCD is  min(e_1,f_1)P_1+...+min(e_k,f_k)P_k
+##
+## Input: <D1> , <D2> are divisor records 
+## Output: GCD
+##
+DeclareOperation("DivisorGCD", [IsRecord, IsRecord]); 
+
+###########################################################
+##
+#F      DivisorLCM(<D1>, <D2> )
+##
+## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k
+## are two divisors on a curve then their
+## LCM is  max(e_1,f_1)P_1+...+max(e_k,f_k)P_k
+##
+## Input: <D1> , <D2> are divisor records 
+## Output: LCM
+##
+DeclareOperation("DivisorLCM", [IsRecord, IsRecord]); 
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisFunctionP1(<P>, <k>, <R> )
+##
+## Input: <P> is a point in F^2, F=finite field,
+##        <k> is an integer, 
+##        <R> is a polynomial ring in x,y
+## Output: associated basis function of P^1, 1/(x-P)^k
+##
+DeclareOperation("RiemannRochSpaceBasisFunctionP1", [IsExtAElement, IsInt, IsRing]); 
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisEffectiveP1(<div> )
+##
+## Input: <div> is an effective divisor on P^1
+## Output: associated basis functions of L(div) on P^1
+##
+DeclareOperation("RiemannRochSpaceBasisEffectiveP1", [IsRecord]); 
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisP1(<div> )
+##
+## Input: <div> is a divisor on P^1
+## Output: associated basis functions of L(div) on P^1
+##
+DeclareOperation("RiemannRochSpaceBasisP1", [IsRecord]); 
+
+##################################################
+#
+#  Group action on RR space and associate AG code
+#   for the curve P^1
+#
+###################################################
+
+###########################################################
+##
+#F      MoebiusTransformation(A,R)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <R> is a polynomial ring in x, R=F[x]
+## Output: associated Moebius transformation to A
+##
+DeclareOperation("MoebiusTransformation", [IsMatrix,IsRing]); 
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnFunction(A,f,R2)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <f> is a rational function in F(x)
+##        <R2> is a polynomial ring in x,y, R2=F[x,y]
+## Output: associated function Af
+##
+DeclareOperation("ActionMoebiusTransformationOnFunction",[IsMatrix,IsRationalFunction,IsRing]);
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnDivisorP1(A,div)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <div> is a divisor on P^1
+## Output: associated divisor Adiv
+##
+DeclareOperation("ActionMoebiusTransformationOnDivisorP1",[IsMatrix,IsRecord]);
+
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnDivisorDefinedP1(A,div)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <div> is a divisor on P^1
+## Output: returns true if associated divisor Adiv is 
+##         not supported at infinity
+##
+DeclareOperation("ActionMoebiusTransformationOnDivisorDefinedP1",[IsMatrix,IsRecord]);
+
+###########################################################
+##
+#F      DivisorAutomorphismGroupP1(div)
+##
+## Input: <div> is a divisor on P^1 over a finite field
+## Output: returns subgroup of GL(2,F) which preserves div
+##
+## *** very slow ***
+##
+DeclareOperation("DivisorAutomorphismGroupP1",[IsRecord]);
+
+###########################################################
+##
+#F      MatrixRepresentationOnRiemannRochSpaceP1(g,div)
+##
+## Input: g in G subgp Aut(D) subgp Aut(X)
+##        D a divisor on a curve X
+## Output: a dxd matrix, where d = dim L(D),
+##         representing the action of g on L(D).
+## Note: g sends L(D) to r*L(D), where
+##       r is a polynomial of degree 1 depending on 
+##       g and D
+##
+## *** very slow ***
+##
+DeclareOperation("MatrixRepresentationOnRiemannRochSpaceP1", [IsMatrix,IsRecord]);
+
+###########################################################
+##
+#F      GOrbitPoint:(G,P)
+##
+## P must be a point in P^n(F)
+## G must be a finite subgroup of GL(n+1,F)
+##   returns all (representatives of projective)
+##   points in the orbit G*P
+##
+DeclareOperation("GOrbitPoint", [IsGroup,IsList]);
+
+############################################
+#          AG codes
+############################################
+
+###########################################################
+##
+#F      EvaluationBivariateCode(<P>, <L>, <crv> )
+##  
+##  Automatically removes the 'bad' points (poles or points
+##  not on the curve from <P>.
+##
+## Input: <P> are points in F^2, F=finite field,
+##        <L> is a list of ratl fcns on <crv>
+## Output: associated evaluation code
+##
+DeclareOperation("EvaluationBivariateCode", [IsList, IsList, IsRecord]); 
+
+###########################################################
+##
+#F      EvaluationBivariateCodeNC(<P>, <L>, <crv> )
+##  
+## Input: <P> are points in F^2, F=finite field,
+##        <L> is a list of ratl fcns on <crv>
+## Output: associated evaluation code
+##
+DeclareOperation("EvaluationBivariateCodeNC", [IsList, IsList, IsRecord]); 
+
+###########################################################
+##
+#F      DivisorOfRationalFunctionP1(<f>, <R> )
+##
+## Input: <f> is a rational function of x
+##        <R> is a polynomial ring in x,y
+## Output: associated divisor of <f>
+##
+DeclareOperation("DivisorOfRationalFunctionP1", [IsRationalFunction, IsRing]); 
+
+############################################################
+##
+#F     GoppaCodeClassical(<div>,<pts>)
+##
+##          classical Goppa codes
+##   Vaguely related to GeneralizedSrivastavaCode?
+##   (Think of a weighted dual of a classical Goppa code of 
+##   an effective divisor of the form div = kP1+kP2+...+kPn?)
+## 
+DeclareOperation("GoppaCodeClassical", [IsRecord, IsList]); 
+
+###########################################################
+##
+#F      XingLingCode(<k>, <R> )
+##
+## Input: <k> is an integer
+##        <R> is a polynomial ring of one variable
+## Output: associated evaluation code
+##
+DeclareOperation("XingLingCode", [IsInt, IsRing]); 
\ No newline at end of file
diff --git a/lib/curves.gi b/lib/curves.gi
new file mode 100644
index 0000000..f7950d6
--- /dev/null
+++ b/lib/curves.gi
@@ -0,0 +1,1198 @@
+#############################################################################
+##
+#A  curves.gi                 GUAVA library                      David Joyner
+##
+##  this file contains implementations for some AG codes and Riemann-Roch
+##  spaces for the projective line P^1
+##
+#H  @(#)$Id: curves.gi,v 1.1 2005/05/09 22:45:16 gap Exp $
+##
+##  created 5-9-2005: also, moved
+##       DivisorsMultivariatePolynomial (and subfunctions), 
+##       from util2.gi (where it was in guava 2.0)
+##  added 5-15-2005: MatrixRepresentationOnRiemannRochSpaceP1
+##            and related functions for P1
+##  bug fix 6-13-2005: MatrixRepresentationOnRiemannRochSpaceP1
+##            code was cleaned up and fixed.
+##  added SolveLinearSystem (with bug fix due to 
+##             Punarbasu Purkayastha <ppurka at umd.edu>)
+##
+Revision.("guava2.1/lib/curves_gi") :=
+    "@(#)$Id: curves.gi,v 1.1 2005/05/09 22:45:16 gap Exp $";
+
+############ some miscellaneous functions ###############
+
+
+########################################################################
+##
+#F  CoefficientToPolynomial( <coeffs> , <R> )
+##  
+##  Input: a list of coeffs = [c0,c1,..,cd]
+##         a univariate polynomial ring R = F[x]
+##  Output: a polynomial c0+c1*x+...+cd*x^(d-1) in R
+##
+
+InstallMethod(CoefficientToPolynomial, true, [IsList, IsRing], 0, 
+function(coeffs,R)
+  local p,i,j, lengths, F,xx;
+  xx:=IndeterminatesOfPolynomialRing(R)[1];
+  F:=Field(coeffs);
+  p:=Zero(F);
+# lengths:=List([1..Length(coeffs)],i->Sum(List([1..i],j->1+coeffs[j])));
+  for i in [1..Length(coeffs)] do 
+   p:=p+coeffs[i]*xx^(i-1); 
+  od;
+  return p;
+end);
+
+CoefficientOfPolynomial00:=function(f,var)
+# **just** computes the coeff of var in f
+local F,coeffs;
+ F:=DefaultField(f);
+ coeffs:=[];
+ coeffs:=PolynomialCoefficientsOfPolynomial(f,var);
+ if Length(coeffs)=1 then 
+   return Zero(F);
+ fi;
+ return coeffs[2];
+end;
+################### example:
+#R:= PolynomialRing( Rationals, 3 );;
+#vars:= IndeterminatesOfPolynomialRing(R);;
+#x:= vars[1];; y:= vars[2];; z:= vars[3];;
+#g:=x^2+x^3;
+#PolynomialCoefficientsOfPolynomial(g,x);
+#CoefficientOfPolynomial00(g,x);
+
+
+SolveLinearSystem:=function(L,vars)
+# L is a list of linear forms in the variables vars
+# return the soln of the system, if its unique
+# 1. first find the associated matrix A
+# 2. find the "constant vector" b
+# 3. solve A*v=b
+##  **** no error checking is done ****
+local zerosF,F,v,A,b,f,coeffs;
+  F:=DefaultField(L[1]);
+  zerosF:=List(vars,v->Zero(F));
+  A:=List(L,f->List(vars,v->CoefficientOfPolynomial00(f,v)));
+  b:=(-1)*List(L,f->Value(f,vars,zerosF));
+  return SolutionMat( TransposedMat(A), b );
+end;
+######### example:
+#
+#R:= PolynomialRing( Rationals, ["x","y"] );;
+#i:= IndeterminatesOfPolynomialRing(R);;
+#x:= i[1];; y:= i[2];;
+#f:=2*y-3*x+1; g:=-5*y+2*x-7;
+#soln:=SolveLinearSystem([f,g],[x,y]);
+#Value(f,[x,y],soln);
+#Value(g,[x,y],soln);
+#
+#f:=-2*y-3*x+1; g:=-5*y+3*x-7;
+#soln:=SolveLinearSystem([f,g],[x,y]);
+#
+
+
+###########################################################
+##
+#F      DegreesMonomialTerm( <m>, <R> )
+##  
+## Input: a monomial <m> in n variables,
+##          (not all of which need occur)
+##        a multivariate polynomial ring R containing <m>
+## Output: the list of degrees of each variable in <m>.
+##
+InstallMethod(DegreesMonomialTerm, true, [IsRingElement, IsRing], 0, 
+function(m,R)
+## output is a different format if m is not a monomial
+local degrees, e, n0, i, j, l, n1, n,vars,x;
+ vars:=IndeterminatesOfPolynomialRing(R);
+ e:=ExtRepPolynomialRatFun(m);
+ n0:=Length(e);
+ n:=Int(n0/2);
+ degrees:=[];
+ if n>1 then 
+  for i in [1..n] do
+   l:=e[2*i-1];
+   n1:=Length(l);
+   for j  in [1..Int(n1/2)] do
+     degrees:=Concatenation(degrees,[l[2*j]]);
+   od;
+  od;
+ fi;
+ if n=1 then 
+  for x in vars do
+    degrees:=Concatenation(degrees,[DegreeIndeterminate(m,x)]);
+  od;
+ fi;
+ return degrees;
+end);
+
+###########################################################
+##
+#F      DegreesMultivariatePolynomial( <f>, <R> )
+##  
+## Input: multivariate poly <f> in R=F[x1,x2,...,xn]
+##        a multivariate polynomial ring <R> containing <f>
+## Output: the list of degrees of each term in <f>.
+##
+InstallMethod(DegreesMultivariatePolynomial, true, [IsRingElement, IsRing], 0, 
+function(f,R)
+local partsf,monsf,vars,deg,i,j;
+ vars:=IndeterminatesOfPolynomialRing(R);
+ partsf:=ConstituentsPolynomial(f);
+# varsf:=partsf.variables;
+ monsf:=partsf.monomials;
+ deg:=List([1..Length(monsf)],i->
+  List([1..Length(vars)],j->
+   [monsf[i],vars[j],DegreeIndeterminate(monsf[i],vars[j])]));
+ return deg;
+end);
+
+###########################################################
+##
+#F      DegreeMultivariatePolynomial( <f>, <R> )
+##  
+## Input: multivariate poly <f> in R=F[x1,x2,...,xn]
+##        a multivariate polynomial ring <R> containing <f>
+## Output: the degree of <f>.
+##
+InstallMethod(DegreeMultivariatePolynomial, true, [IsRingElement, IsRing], 0, 
+function(f,R)
+local partsf,monsf,vars,deg,i,j;
+ vars:=IndeterminatesOfPolynomialRing(R);
+ partsf:=ConstituentsPolynomial(f);
+# varsf:=partsf.variables;
+ monsf:=partsf.monomials;
+ deg:=List([1..Length(monsf)],i->
+  Sum(List([1..Length(vars)],j->
+   DegreeIndeterminate(monsf[i],vars[j]))));
+ return Maximum(deg);
+end);
+
+########################################################################
+##
+#F  DivisorsMultivariatePolynomial( <f> , <R> )
+##  
+## Input: f is a polynomial in R=F[x1,...,xn]
+## Output: all divisors of f
+## uses a slow algorithm due to Kronecker (see Joachim von zur Gathen, 
+## Juergen Gerhard, *Modern Computer Algebra*, exercise 16.10)
+##
+InstallMethod(DivisorsMultivariatePolynomial, true, 
+[IsPolynomial, IsPolynomialRing], 0, function(f,R)
+local p,var,vars,mons,degrees,g,d,r,div,ffactors,F,R1,fam,fex,cand,i,j,
+      select,T,TN,ti,terms,L,N,k,varpow,nvars,cp,perm,cnt,vals,forig,ediv,
+      KroneckerMap,InverseKroneckerMapUnivariate;
+
+ KroneckerMap:=function(f,vars,var,p)
+ # maps polys in x1,...,xn to polys in x 
+ # induced by xi -> x^(p^(i-1))
+ local g;
+  g:=Value(f,vars, List([1..Length(vars)],i->var[1]^(p^(i-1))));
+  return g;
+ end;
+
+ InverseKroneckerMapUnivariate:=function(g,varpow)
+ local coeffs,d,f,i;
+  if not IsUnivariatePolynomial(g) then
+    Error("this function assumes polynomial is univariate");
+  fi;
+  coeffs:=CoefficientsOfUnivariateLaurentPolynomial(g);
+  coeffs:=ShiftedCoeffs(coeffs[1],coeffs[2]);
+  d:=Length(coeffs)-1;
+  f:=Zero(g);
+  for i in [1..Length(coeffs)] do
+    if not IsZero(coeffs[i]) then
+      f:=f+coeffs[i]*varpow[i];
+    fi;
+  od;
+  return f;
+ end;
+
+  cp:=ConstituentsPolynomial(f);
+  mons:=cp.monomials;
+  # count variable frequencies
+  L:=ListWithIdenticalEntries(
+    Maximum(List(cp.variables,
+      IndeterminateNumberOfUnivariateRationalFunction)),0);
+  for i in mons do
+    T:=ExtRepPolynomialRatFun(i)[1];
+    for j in [1,3..Length(T)-1] do
+      L[T[j]]:=L[T[j]]+T[j+1];
+    od;
+  od;
+  T:=[1..Length(L)];
+  SortParallel(L,T);
+  T:=Reversed(T);
+  L:=Reversed(L);
+  if ForAny([1..Length(L)],i->L[i]>0 and L[T[i]]<>L[i]) then
+    perm:=PermList(T)^-1;
+    Info(InfoPoly,2,"Variable swap: ",perm);
+    f:=OnIndeterminates(f,perm);
+    cp:=ConstituentsPolynomial(f);
+    mons:=cp.monomials;
+  else
+    perm:=(); # irrelevant swap
+  fi;
+
+  vars:=cp.variables;
+  nvars:=Length(vars);
+  F:=CoefficientsRing(R);
+  R1:=PolynomialRing(F,1);
+  var:=IndeterminatesOfPolynomialRing(R1);
+  degrees:=List([1..Length(mons)],i->DegreesMonomialTerm(mons[i],R));
+  d:=Maximum(Flat(degrees));
+  p:=NextPrimeInt(d);
+  p:=Maximum(d+1,2);
+
+  forig:=f;
+
+  # coefficient shift to remove duplicate roots
+  cnt:=0;
+  vals:=List(vars,i->Zero(F));
+  repeat
+    if cnt>0 then
+      vals:=List(vars,i->Random(F));
+      f:=Value(forig,vars,List([1..nvars],i->vars[i]-vals[i]));
+    fi;
+    g:=KroneckerMap(f,vars,var,p);
+    cnt:=cnt+1;
+    L:=DegreeOfUnivariateLaurentPolynomial(Gcd(g,Derivative(g)));
+    Info(InfoPoly,3,"Trying shift: ",vals,": ",L);
+  until cnt>DegreeOfUnivariateLaurentPolynomial(g) or L=0;
+
+  # prepare padic representations of powers
+  L:=ListWithIdenticalEntries(nvars,0);
+  varpow:=List([0..DegreeOfUnivariateLaurentPolynomial(g)],
+		i->Concatenation(CoefficientsQadic(i,p),L){[1..nvars]});
+  varpow:=List(varpow,i->Product(List([1..nvars],j->vars[j]^i[j])));
+
+  fam:=FamilyObj(f);
+  fex:=ExtRepPolynomialRatFun(f);
+  L:=Factors(R1,g);
+  N:=Length(L);
+  cand:=[1..N];
+  for k in [1..QuoInt(N,2)] do
+    T:=Combinations(cand,k);
+    Info(InfoPoly,2,"Length ",k,": ",Length(T)," candidates");
+    ti:=1;
+    while ti<=Length(T) do;
+      terms:=T[ti];
+      div:=Product(L{terms});
+      div:=InverseKroneckerMapUnivariate(div,varpow);
+      ediv:=ExtRepPolynomialRatFun(div);
+      #if not IsOne(ediv[Length(ediv)]) then
+      #  div:=div/ediv[Length(ediv)];
+      #	 ediv:=ExtRepPolynomialRatFun(div);
+      #fi;
+      # call the library routine used to test quotient of polynomials
+      r:=QuotientPolynomialsExtRep(fam,fex,ediv);
+      if r<>fail then
+	fex:=r;
+	f:=PolynomialByExtRepNC(fam,fex);
+	Info(InfoPoly,1,"found factor ",terms," ",div," remainder ",f);
+	ffactors:=DivisorsMultivariatePolynomial(f,R);
+	Add(ffactors,div);
+	if ForAny(vals,i->not IsZero(i)) then
+	  ffactors:=List(ffactors,
+	                 i->Value(i,vars,List([1..nvars],j->vars[j]+vals[j])));
+	fi;
+
+	if not IsOne(perm) then
+	  ffactors:=List(ffactors,i->OnIndeterminates(i,perm^-1));
+	fi;
+	return ffactors;
+      fi;
+      ti:=ti+1;
+    od;
+  od;
+
+  if ForAny(vals,i->not IsZero(i)) then
+    f:=Value(f,vars,List([1..nvars],j->vars[j]+vals[j]));
+  fi;
+
+  if not IsOne(perm) then
+    f:=OnIndeterminates(f,perm^-1);
+  fi;
+  return [f];
+end);
+
+
+###########################################################
+#
+#         general curve stuff
+#
+###########################################################
+
+###########################################################
+##
+#F      AffineCurve(<poly>, <ring> )
+##
+## Input: <poly> is a polynomial in the ring F[x,y],
+##        <ring> is a bivariate ring containing <f>
+## Output: associated record: polynomial component and a ring component
+##
+InstallMethod(AffineCurve, true, [IsRingElement, IsRing], 0, 
+function(poly,ring)
+## this does some type checking...
+local crv;
+ crv:=rec();
+ if IsPolynomialRing(ring) then crv.ring:=ring; fi; 
+ if not(IsPolynomialRing(ring)) then 
+   Error("\n 4th argument must be a polynomial ring (eg, F[x,y])\n");
+ fi; 
+ if poly in ring then crv.polynomial:=poly; fi; 
+ if not(poly in ring) then 
+   Error("\n 3rd argument must be a function in the polynomial ring (eg, y in F[x,y] for P^1)\n");
+ fi; 
+ return crv;
+end);
+
+
+###########################################################
+##
+#F      GenusCurve( <crv> )
+##
+##
+## Input: <crv> is a curve record structure
+##        crv: f(x,y)=0, f a poly of degree d
+## Output: genus of plane curve
+##         genus = (d-1)(d-2)/2
+##
+InstallMethod(GenusCurve, true, [IsRecord], 0, 
+function(crv)
+local d, f, R;
+ R:=crv.ring;
+ f:=crv.polynomial;
+ d:=DegreeMultivariatePolynomial(f,R);
+ return (d-1)*(d-2)/2;
+end);
+
+###########################################################
+##
+#F      OnCurve( <Pts>, <crv> )
+##
+## Input: <crv> is a curve record structure
+##        <Pts> a list of pts in F^2
+##        crv: f(x,y)=0, f a poly in F[x,y]
+## Output: true if they are all on crv
+##         false otherwise
+##
+InstallMethod(OnCurve, true, [IsList,IsRecord], 0, 
+function(Pts,crv)
+local p,f,R,F,vars,val,values;
+ f:=crv.polynomial;
+ R:=crv.ring;
+ F:=CoefficientsRing(R);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ values:=List(Pts,p->Value(f,vars,p));
+ if f in vars then   ###   P^1 case 
+   for p in Pts do
+     if not(p in F) then return false; fi;
+   od;
+   return true;
+ fi;
+ for p in Pts do
+   for val in values do
+    if val<>Zero(F) then return false; fi;
+   od;
+ od;
+ return true;
+end);
+
+#############################################################################
+##
+#F  AffinePointsOnCurve(<f>, <R>, <E>)
+## ***** only works for finiet fields*****
+##
+InstallGlobalFunction(AffinePointsOnCurve,function(f,R,E)
+ local a,b,indets,solns;
+ if not(IsFinite(E)) then
+    Error("Field ",E," must be finite.");
+ fi;
+ solns:=[];
+ indets:=IndeterminatesOfPolynomialRing(R);
+ for a in E do
+  for b in E do
+    if Value(f,indets,[a,b])=Zero(E) then
+     solns:=Concatenation([[a,b]],solns); 
+    fi;
+  od;
+ od;
+ return solns;
+end);
+
+###########################################################
+#
+#         general divisor stuff
+#
+###########################################################
+
+###########################################################
+##
+#F      DivisorOnAffineCurve(<cdiv>, <sdiv>, <crv> )
+##          creates divisor on curve record structure
+##
+## Input: <cdiv> list of integers (coeffs of divisor),
+##        <sdiv> is a list of points (support of divisor),
+##        <crv> is a curve record
+## Output: associated divisor record
+##
+InstallMethod(DivisorOnAffineCurve, true, [IsList,IsList,IsRecord], 0, 
+function(cdiv,sdiv,crv)
+local div,F,vars,R;
+ R:=crv.ring;
+ F:=CoefficientsRing(R);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ div:=rec();
+ if (IsList(cdiv) and cdiv[1] in Integers) then div.coeffs:=cdiv; fi;
+ if (not(IsList(cdiv)) or not(cdiv[1] in Integers)) then 
+    Error("\n 1st argument is not a list of integers\n"); 
+ fi;
+ if ((crv.polynomial in vars) and IsList(sdiv) and sdiv[1] in F) then ### this is for P^1
+   div.support:=sdiv; 
+ fi;
+ if (not(crv.polynomial in vars) and IsList(sdiv)) then ### not P^1
+   div.support:=sdiv; 
+ fi;
+# if (not(IsList(sdiv)) or not(OnCurve(sdiv,crv))) then 
+#    Error("\n 2nd argument is not a list of points\n"); 
+# fi;
+ if Length(sdiv)<>Length(cdiv) then 
+    Error("\n 1st and 2nd arguments must have same length\n"); 
+ fi;
+ div.curve:=crv;
+ return div;
+end);
+
+###########################################################
+##
+#F      DivisorOnAffineCurve(<div1>, <div2> )
+##
+## Input: <div1> , <div2> are divisor records 
+## Output: sum
+##
+InstallMethod(DivisorAddition, true, [IsRecord,IsRecord], 0, 
+function(D1,D2)
+local c1,c2,supp1,supp2,pos1,pos2,sumc,sums,pt;
+ if not(D1.curve.ring=D2.curve.ring) then
+      Error("\n 1st and 2nd divisor must have the same curve\n");
+ fi; 
+ if not(D1.curve.polynomial=D2.curve.polynomial) then
+      Error("\n 1st and 2nd divisor must have the same curve\n");
+ fi; 
+ c1:=D1.coeffs;
+ c2:=D2.coeffs;
+ supp1:=D1.support;
+ supp2:=D2.support;
+ sumc:=[];
+ sums:=[];
+ for pt in Union(supp1,supp2) do
+  if (pt in supp1) and (pt in supp2) then
+    pos1:=PositionSublist(supp1,[pt]);
+    pos2:=PositionSublist(supp2,[pt]);
+    sumc:=Concatenation(sumc,[c1[pos1]+c2[pos2]]);
+    sums:=Concatenation(sums,[pt]);
+  fi;
+  if (pt in supp1) and not(pt in supp2) then
+    pos1:=PositionSublist(supp1,[pt]);
+    sumc:=Concatenation(sumc,[c1[pos1]]);
+    sums:=Concatenation(sums,[pt]);
+  fi;
+  if (pt in supp2) and not(pt in supp1) then
+    pos2:=PositionSublist(supp2,[pt]);
+    sumc:=Concatenation(sumc,[c2[pos2]]);
+    sums:=Concatenation(sums,[pt]);
+  fi;
+ od;
+ return rec(coeffs:=sumc,support:=sums,curve:=D1.curve);
+end);
+
+
+###########################################################
+##
+#F      DivisorDegree( <div> )
+##
+## Input: <div> a divisor record 
+## Output: degree = sum of coeffs
+##
+InstallMethod(DivisorDegree, true, [IsRecord], 0, 
+function(div)
+local c;
+ c:=div.coeffs;
+ return Sum(c);
+end);
+
+###########################################################
+##
+#F      DivisorIsEffective( <div> )
+##
+## Input: <div> a divisor record 
+## Output: true if all coeffs>=0, false otherwise
+##
+InstallMethod(DivisorIsEffective, true, [IsRecord], 0, 
+function(div)
+local c,a;
+ c:=div.coeffs;
+ for a in c do
+   if a<0 then return false; fi;
+ od;
+ return true;
+end);
+
+###########################################################
+##
+#F      DivisorNegate( <div> )
+##
+## Input: <div> a divisor record 
+## Output: -div
+##
+InstallMethod(DivisorNegate, true, [IsRecord], 0, 
+function(div)
+local c,s;
+ c:=div.coeffs;
+ s:=div.support;
+ return rec(coeffs:=(-1)*c,support:=s,curve:=div.curve);
+end);
+
+###########################################################
+##
+#F      DivisorIsZero( <div> )
+##
+## Input: <div> a divisor record 
+## Output: true if all coeffs=0, false otherwise
+##
+InstallMethod(DivisorIsZero, true, [IsRecord], 0, 
+function(div)
+local c,a;
+ c:=div.coeffs;
+ for a in c do
+   if a<>0 then return false; fi;
+ od;
+ return true;
+end);
+
+###########################################################
+##
+#F      DivisorEqual(<div1>, <div2> )
+##
+## Input: <div1> , <div2> are divisor records 
+## Output: true if div1=div2
+##
+InstallMethod(DivisorEqual, true, [IsRecord,IsRecord], 0, 
+function(div1,div2)
+local div;
+ div:=DivisorAddition(div1,DivisorNegate(div2));
+ return DivisorIsZero(div);
+end);
+
+###########################################################
+##
+#F      DivisorGCD(<D1>, <D2> )
+##
+## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k
+## are two divisors on a curve then their
+## GCD is  min(e_1,f_1)P_1+...+min(e_k,f_k)P_k
+##
+## Input: <D1> , <D2> are divisor records 
+## Output: GCD
+##
+InstallMethod(DivisorGCD, true, [IsRecord,IsRecord], 0, 
+function(D1,D2)
+local c1,c2,supp1,supp2,pos1,pos2,gcdcoeffs,gcdsupp,pt;
+ if not(D1.curve.ring=D2.curve.ring) then
+      Error("\n 1st and 2nd divisor must have the same curve\n");
+ fi; 
+ if not(D1.curve.polynomial=D2.curve.polynomial) then
+      Error("\n 1st and 2nd divisor must have the same curve\n");
+ fi; 
+ c1:=D1.coeffs;
+ c2:=D2.coeffs;
+ supp1:=D1.support;
+ supp2:=D2.support;
+ gcdcoeffs:=[];
+ gcdsupp:=[];
+ for pt in Union(supp1,supp2) do
+  if (pt in supp1) and (pt in supp2) then
+    pos1:=PositionSublist(supp1,[pt]);
+    pos2:=PositionSublist(supp2,[pt]);
+    gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(c1[pos1],c2[pos2])]);
+    gcdsupp:=Concatenation(gcdsupp,[pt]);
+  fi;
+  if (pt in supp1) and not(pt in supp2) then
+    pos1:=PositionSublist(supp1,[pt]);
+    gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(c1[pos1],0)]);
+    gcdsupp:=Concatenation(gcdsupp,[pt]);
+  fi;
+  if (pt in supp2) and not(pt in supp1) then
+    pos2:=PositionSublist(supp2,[pt]);
+    gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(0,c2[pos2])]);
+    gcdsupp:=Concatenation(gcdsupp,[pt]);
+  fi;
+ od;
+ return rec(coeffs:=gcdcoeffs,support:=gcdsupp,curve:=D1.curve);
+end);
+
+###########################################################
+##
+#F      DivisorLCM(<D1>, <D2> )
+##
+## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k
+## are two divisors on a curve then their
+## LCM is  max(e_1,f_1)P_1+...+max(e_k,f_k)P_k
+##
+## Input: <D1> , <D2> are divisor records 
+## Output: LCM
+##
+InstallMethod(DivisorLCM, true, [IsRecord,IsRecord], 0, 
+function(D1,D2)
+local div_sum, ndiv_gcd;
+ div_sum:=DivisorAddition(D1,D2);
+ ndiv_gcd:=DivisorNegate(DivisorGCD(D1,D2));
+ return DivisorAddition(div_sum, ndiv_gcd);
+end);
+
+###########################################################
+#
+#            P^1 only stuff
+#
+#  ..... bases of L(D) on P^1 ...
+#  if D is effective then the basis is easy...
+#
+###########################################################
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisFunctionP1(<P>, <k>, <R> )
+##
+## Input: <P> is a point in F, F=finite field,
+##        <k> is an integer, 
+##        <R> is a polynomial ring in x,y
+## Output: associated basis function of P^1, 1/(x-P)^k
+##
+InstallMethod(RiemannRochSpaceBasisFunctionP1, true, [IsExtAElement, IsInt,IsRing], 0, 
+function(P,k,R2)
+local x,vars;
+  vars:=IndeterminatesOfPolynomialRing(R2);
+  x:=vars[1];
+  return x^0/(x-P)^k;
+end);
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisEffectiveP1(<div> )
+##
+## Input: <div> is an effective divisor on P^1
+## Output: associated basis functions of L(div) on P^1
+##
+InstallMethod(RiemannRochSpaceBasisEffectiveP1, true, [IsRecord], 0, 
+function(div)
+local F,n,basis,pt,cdiv,sdiv,i,j,k,pos,R;
+  R:=div.curve.ring;
+  F:=CoefficientsRing(R);
+  if not(DivisorIsEffective(div)) then 
+    Error("\n divisor must be effective \n");
+  fi;
+  basis:=[]; #RiemannRochSpaceBasisFunctionP1(Zero(F),0,R)
+  cdiv:=div.coeffs;
+  sdiv:=div.support;
+  n:=Length(cdiv);
+  for k in [1..n] do
+   for i in [1..cdiv[k]] do
+    basis:=Concatenation(basis,
+            [RiemannRochSpaceBasisFunctionP1(sdiv[k],i,R)]);
+   od;
+  od;
+  return Concatenation(basis,[basis[1]^0]);
+end);
+
+###########################################################
+##
+#F      RiemannRochSpaceBasisP1(<div> )
+##
+## Input: <div> is a divisor on P^1
+## Output: associated basis functions of L(div) on P^1
+##
+InstallMethod(RiemannRochSpaceBasisP1, true, [IsRecord], 0, 
+function(div)
+local R,vars,x,div0,deg,f,F,basis,pt,cdiv,sdiv,i,j,k,pos;
+  R:=div.curve.ring;
+  F:=CoefficientsRing(R);
+  if DivisorIsZero(div) then 
+    return [One(F)];
+  fi;
+  deg:=DivisorDegree(div);
+  if deg<0 then 
+    return [Zero(F)];
+  fi;
+  if DivisorIsEffective(div) then 
+    return RiemannRochSpaceBasisEffectiveP1(div);
+  fi;
+  vars:=IndeterminatesOfPolynomialRing(R);
+  x:=vars[1];
+  div0:=Immutable(div); ### unnecessary...
+  cdiv:=div.coeffs;
+  sdiv:=div.support;
+  k:=Length(cdiv);  
+  cdiv[k]:=cdiv[k]-deg;   ## pick the last point in div to subtract away
+  f:=One(F);
+  for i in [1..Length(cdiv)] do
+    f:=f*(x-sdiv[i])^(-cdiv[i]);
+  od;
+  basis:=Concatenation([One(F)*x^0],List([0..deg],i->f*(x-sdiv[k])^(-i)));
+  cdiv[k]:=cdiv[k]+deg; ## restores divisor to original
+ return basis;
+end);
+
+###########################################################
+##
+#F      DivisorOfRationalFunctionP1(<f>, <R> )
+##
+## Input: <f> is a rational function of x
+##        <R> is a polynomial ring in x,y
+## Output: associated divisor of <f>
+##
+InstallMethod(DivisorOfRationalFunctionP1, true, [IsRationalFunction,IsRing], 0, 
+function(f,R)
+local crv,vars,y,n1,n2,suppdiv,coeffdiv,i,divf,rootsd,rootsn,den,num;
+  vars:=IndeterminatesOfPolynomialRing(R); y:=vars[1];
+  num:=NumeratorOfRationalFunction(f); 
+  rootsn:=RootsOfUPol(num);
+  den:=DenominatorOfRationalFunction(f); 
+  rootsd:=RootsOfUPol(den);
+  n1:=Length(Set(rootsn)); n2:=Length(Set(rootsd));
+  coeffdiv:=Concatenation(List([1..n1],
+    i->MultiplicityInList(rootsn, Set(rootsn)[i])),
+       List([1..n2],i->-MultiplicityInList(rootsd, Set(rootsd)[i])));
+  suppdiv:=Concatenation(Set(rootsn),Set(rootsd));
+  crv:=AffineCurve(y,R);
+  divf:=rec(coeffs:=coeffdiv,support:=suppdiv,curve:=crv);
+  return divf;
+end);
+
+##################################################
+#
+#  Group action on RR space and associate AG code
+#   for the curve P^1
+#
+###################################################
+
+###########################################################
+##
+#F      MoebiusTransformation(A,R)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <R> is a polynomial ring in x, R=F[x]
+## Output: associated Moebius transformation to A
+##
+InstallMethod(MoebiusTransformation, true, [IsMatrix,IsRing], 0, 
+function(A,R)
+local var,f,x,a,b,c,d,F;
+ var:=IndeterminatesOfPolynomialRing(R); 
+ F:=CoefficientsRing(R);
+ x:=var[1];
+ a:=A[1][1];
+ b:=A[1][2];
+ c:=A[2][1];
+ d:=A[2][2];
+ if c=Zero(F) and d=Zero(F) then return "infinity"; fi;
+ f:=(a*x+b)/(c*x+d);
+ return f;
+end);
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnFunction(A,f,R2)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <f> is a rational function in F(x)
+##        <R2> is a polynomial ring in x,y, R2=F[x,y]
+## Output: associated function Af
+##
+InstallMethod(ActionMoebiusTransformationOnFunction, true, [IsMatrix,IsRationalFunction,IsRing], 0, 
+function(A,f,R2)
+local m,numf,var,p,denf,F,R1;
+if A=() then return f; fi;
+ F:=CoefficientsRing(R2);
+ var:=IndeterminatesOfPolynomialRing(R2);
+ R1:= PolynomialRing(F,[var[1]]);
+ var:=IndeterminatesOfPolynomialRing(R1);
+ m:=MoebiusTransformation(A,R1);
+ denf:=DenominatorOfRationalFunction(f);
+ numf:=NumeratorOfRationalFunction(f);
+# return Value(numf,var,[m])/Value(denf,var,[m]);
+ return Value(f,var,[m]);
+end);
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnDivisorP1(A,div)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <div> is a divisor on P^1
+## Output: associated divisor Adiv
+##
+InstallMethod(ActionMoebiusTransformationOnDivisorP1, true, [IsMatrix,IsRecord], 0, 
+function(A,div)
+local f,sdiv,Adiv,var,p,denf,F,R,xx,R1;
+if A=() then return div; fi;
+ R:=div.curve.ring;
+ F:=CoefficientsRing(R);
+ var:=IndeterminatesOfPolynomialRing(R);
+ xx:=X(F,var);
+ R1:= PolynomialRing(F,[xx]);
+ var:=IndeterminatesOfPolynomialRing(R1);
+ Adiv:=ShallowCopy(div);
+ sdiv:=div.support;
+ f:=MoebiusTransformation(A,R1);
+ denf:=DenominatorOfRationalFunction(f);
+ for p in sdiv do
+  if Value(denf,var,[p])=Zero(F) then
+   Print("\n f.l.t. = ",f,",   point = ",p,"\n\n");
+   Error("\n Sorry, action on this divisor is undefined\n\n");
+  fi;
+ od;
+ Adiv.support:=List(sdiv,p->Value(f,var,[p]));
+ return Adiv;
+end);
+
+###########################################################
+##
+#F      ActionMoebiusTransformationOnDivisorDefinedP1(A,div)
+##
+## Input: <A> is a 2x2 matrix with entries in a field F
+##        <div> is a divisor on P^1
+## Output: returns true if associated divisor Adiv is 
+##         not supported at infinity
+##
+InstallMethod(ActionMoebiusTransformationOnDivisorDefinedP1, true, [IsMatrix,IsRecord], 0, 
+function(A,div)
+local f,sdiv,Adiv,var,p,denf,F,R,R1,xx;
+if A=() then return div; fi;
+ R:=div.curve.ring;
+ F:=CoefficientsRing(R);
+ var:=IndeterminatesOfPolynomialRing(R);
+ xx:=X(F,var); #### this be called more than once:-)
+ R1:= PolynomialRing(F,[xx]);
+ var:=IndeterminatesOfPolynomialRing(R1);
+ Adiv:=ShallowCopy(div);
+ sdiv:=div.support;
+ f:=MoebiusTransformation(A,R1);
+ denf:=DenominatorOfRationalFunction(f);
+ for p in sdiv do
+  if Value(denf,var,[p])=Zero(F) then
+   return false;
+  fi;
+ od;
+ return true;
+end);
+
+###########################################################
+##
+#F      DivisorAutomorphismGroupP1(div)
+##
+## Input: <div> is a divisor on P^1 over a finite field
+## Output: returns subgroup of GL(2,F) which preserves div
+##
+## *** very slow ***
+##
+InstallMethod(DivisorAutomorphismGroupP1, true, [IsRecord], 0, 
+function(div)
+local R,F,A,autgp,sdiv,G,Adiv,eG;
+ sdiv:=div.support;
+ autgp:=[];
+ R:=div.curve.ring;
+ F:=CoefficientsRing(R);
+ G:=GL(2,F); 
+ eG:=Elements(G);
+ for A in eG do
+#  f:=MoebiusTransformation(A,R);
+   if ActionMoebiusTransformationOnDivisorDefinedP1(A,div) then
+      Adiv:= ActionMoebiusTransformationOnDivisorP1(A,div);
+      if DivisorEqual(div,Adiv) then 
+        autgp:=Concatenation(autgp,[A]);
+#        eG:=Difference(eG,Elements(Group(autgp)));
+#  leaving the above in slows it down!
+      fi;
+   fi;
+ od;
+ if autgp<>[] then return Group(autgp); fi;
+ return Group(());
+end);
+
+###########################################################
+##
+#F      MatrixRepresentationOnRiemannRochSpaceP1(g,div)
+##
+## Input: g in G subgp Aut(D) subgp Aut(X)
+##        D=div a divisor on a curve X
+## Output: a dxd matrix, where d = dim L(D),
+##         representing the action of g on L(D).
+## Note: g sends L(D) to r*L(D), where
+##       r is a polynomial of degree 1 depending on 
+##       g and D
+##
+## *** very slow ***
+##
+InstallMethod(MatrixRepresentationOnRiemannRochSpaceP1, true, [IsMatrix,IsRecord], 0, 
+function(g,div)
+local i,j,n,R,F,f,B,gB,num,gBgood,basisLD,LD,coeffs_g,xx,R1,var;
+ R:=div.curve.ring;
+ var:=IndeterminatesOfPolynomialRing(R);
+ F:=CoefficientsRing(R);
+ B:=RiemannRochSpaceBasisP1(div);
+ n:=Length(B);
+ LD:=VectorSpace(F,B);
+ basisLD:=Basis(LD,B);
+ xx:=X(F,var);       
+ R1:= PolynomialRing(F,[xx]); ## used ????????
+ gB:=List(B,f->ActionMoebiusTransformationOnFunction(g,f,R));
+# this ring R for gB must be same ring as for B
+ coeffs_g:=[];   # moved from inside "if not(Div..." statement below 
+ if not(DivisorIsEffective(div)) then            #div<0
+  for i in [1..n] do
+    coeffs_g[i]:=Coefficients( basisLD, gB[i] );
+  od;
+ fi;
+ if DivisorIsEffective(div) then                 #div>0   
+  for i in [1..n] do
+     coeffs_g[i]:=Coefficients( basisLD, xx^0*gB[i] );
+     # Coefficients can't handle a constant function so pre-multiply by x^0
+  od;
+ fi;
+ return coeffs_g;
+end);
+
+###########################################################
+##
+#F      GOrbitPoint:(G,P)
+##
+## P must be a point in P^n(F)
+## G must be a finite subgroup of GL(n+1,F)
+##   returns all (representatives of projective)
+##   points in the orbit G*P
+##
+InstallMethod(GOrbitPoint, true, [IsGroup,IsList], 0, 
+function(G,P)
+local O,p,g,addit,gP,IsEqualProjectivePoint;
+
+##start local fcn: represent same projective point?
+IsEqualProjectivePoint:=function(P1,P2)
+# P1 = [x1,y1,z1]
+# P2 = [x2,y2,z2]
+# returns true iff P1=lambda*P2
+local lambda,F;
+F:=DefaultField(P1[1]);
+if P1[1]<>Zero(F) then
+   lambda:=P2[1]/P1[1];
+ elif P1[2]<>Zero(F) then
+   lambda:=P2[2]/P1[2];
+ else
+   lambda:=P2[3]/P1[3];
+fi;
+return P1*lambda=P2;
+end;
+##end local fcn
+
+O:=[P];
+for g in G do
+ gP:=g*P;
+ addit:=true;
+ for p in O do
+  if IsEqualProjectivePoint(gP,p) then 
+     addit:=false;
+     break;
+  fi;
+ od;
+ if addit then
+     O:=Concatenation(O,[gP]);
+ fi;
+od;
+return O;
+end);
+
+
+
+###########################################################
+#
+#            ag error-correcting codes stuff
+#
+###########################################################
+
+
+###########################################################
+##
+#F      EvaluationBivariateCode(<P>, <L>, <crv> )
+##
+##  Automatically removes the 'bad' points (poles or points
+##  not on the curve from <P>.
+##
+## Input: <P> are points in F^2, F=finite field,
+##        <L> is a list of ratl fcns on <crv>
+## Output: associated evaluation code
+##
+InstallMethod(EvaluationBivariateCode, true, [IsList,IsList,IsRecord], 0, 
+function(P,L,crv)
+ local pos,R,F,f,p,i,goodpts,badpts,G, n,valsdenom,C, j, k,vals,vars;
+
+ R:=crv.ring;
+ F:=CoefficientsRing(R);
+ n:=Length(P); ## "designed" length (may shrink, 
+               ##  if bad points (poles of an f in L) exist)
+ k:=Length(L); ## "designed" dimension
+
+ vars:=IndeterminatesOfPolynomialRing(R);
+ valsdenom:=function(f,p) return
+    Value(DenominatorOfRationalFunction(f*vars[1]^0),vars,p);
+ end;
+ vars:=IndeterminatesOfPolynomialRing(R);
+
+ goodpts:=[];
+ badpts:=[];
+ for p in P do
+  if (ForAll([1..k],i->valsdenom(L[i],p)<>Zero(F)) and OnCurve([p],crv)) then
+    goodpts:=Concatenation(goodpts,[p]);
+   else
+    badpts:=Concatenation(badpts,[p]);
+  fi;
+ od;
+ if badpts<>[] then 
+   Print("\n\n Automatically removed the following 'bad' points (either a pole or not on the curve):\n",badpts,"\n\n");
+ fi;
+ vals:=List(L,f->List(goodpts,p->Value(f,vars,p)));
+ G:=ShallowCopy(NullMat(k,Length(goodpts),F));
+ for i in [1..k] do
+  for j in [1..Length(goodpts)] do
+       pos:=Position(P,goodpts[j]);
+       G[i][j]:=vals[i][j];
+  od;
+ od;
+ C:=GeneratorMatCode(G," evaluation code",F);
+ C!.GeneratorMat:=ShallowCopy(G);
+ C!.basis:=L;
+ C!.points:=goodpts;
+ C!.ring:=R;
+ return C;
+end);
+
+###########################################################
+##
+#F      EvaluationBivariateCodeNC(<Pts>, <L>, <crv> )
+##
+##  Does Not Check if points are 'bad'
+##
+## Input: <Pts> are points in F^2, F=finite field,
+##        <L> is a list of ratl fcns on <crv>
+## Output: associated evaluation code
+##
+InstallMethod(EvaluationBivariateCodeNC, true, [IsList,IsList,IsRecord], 0, 
+function(P,L,crv)
+ local pos,R,F,f,p,i,goodpts,badpts,G, n,valsdenom,C, j, k,vals,vars;
+
+ R:=crv.ring;
+ F:=CoefficientsRing(R);
+ n:=Length(P); ## "designed" length (may shrink, 
+               ##  if bad points (poles of an f in L) exist)
+ k:=Length(L); ## "designed" dimension
+
+ vars:=IndeterminatesOfPolynomialRing(R);
+ valsdenom:=function(f,p) return
+    Value(DenominatorOfRationalFunction(f*vars[1]^0),vars,p);
+ end;
+ vars:=IndeterminatesOfPolynomialRing(R);
+
+ goodpts:=P;
+ vals:=List(L,f->List(goodpts,p->Value(f,vars,p)));
+ G:=ShallowCopy(NullMat(k,Length(goodpts),F));
+ for i in [1..k] do
+  for j in [1..Length(goodpts)] do
+       pos:=Position(P,goodpts[j]);
+       G[i][j]:=vals[i][j];
+  od;
+ od;
+ C:=GeneratorMatCode(G," evaluation code",F);
+ C!.GeneratorMat:=ShallowCopy(G);
+ C!.basis:=L;
+ C!.points:=goodpts;
+ C!.ring:=R;
+ return C;
+end);
+
+
+############################################################
+##
+#F     GoppaCodeClassical(<div>,<pts>)
+##
+##          classical Goppa codes
+##   Vaguely related to GeneralizedSrivastavaCode?
+##   (Think of a weighted dual of a classical Goppa code of 
+##   an effective divisor of the form div = kP1+kP2+...+kPn?)
+## 
+InstallMethod(GoppaCodeClassical, true, [IsRecord,IsList], 0, 
+function(div,pts)
+local n,k,F,R,var,cdiv,sdiv,basis,G,C,f,p;
+  R:=div.curve.ring;
+  F:=CoefficientsRing(R);
+  cdiv:=div.coeffs;
+  sdiv:=div.support;
+  if Intersection(sdiv,pts)<>[] then
+    Error("\n divisor and points must be disjoint \n");
+  fi;
+  var:=IndeterminatesOfPolynomialRing(R);
+  basis:=RiemannRochSpaceBasisP1(div);
+  G:=List(basis,f->List(pts,p->Value(var[1]^0*f,[var[1]],[p])));
+  return GeneratorMatCode(G,F);
+end);
+
+###########################################################
+##
+#F      XingLingCode(<k>, <R> )
+##
+## Input: <k> is an integer
+##        <R> is a polynomial ring of one variable
+## Output: associated evaluation code
+## ######## seems to have a bug - F=GF(7), k=15 hangs ########
+##
+InstallMethod(XingLingCode, true, [IsInt,IsRing], 0, 
+function(k,R)
+local i,j,e,q,F,FF,indets,xx,a,b,f,Pts,RatPts,IrrRatPts,G,C;
+ e:=[];
+ F:=CoefficientsRing(R);
+ q:=Size(F);
+ indets := IndeterminatesOfPolynomialRing(R);
+ xx:=indets[1]; 
+ a:=PrimitiveElement(F);
+ FF:=FieldExtension(F,xx^2-a);
+ IrrRatPts:=[];
+ RatPts:=Elements(F);
+ for b in FF do
+  if not(b^q in F) then 
+   IrrRatPts:=Concatenation(IrrRatPts,[b]);
+  fi;
+ od;
+ for i in [1..k] do
+    for j in [i..k] do
+     if (i=j and q*(i+1)<k and IsOddInt(q)) then 
+      e:=Concatenation(e,[2*xx^(q*i+i)]);
+     fi;
+     if (i=j and q*(i+1)<k and IsEvenInt(q)) then 
+      e:=Concatenation(e,[xx^(q*i+i)]);
+     fi;
+     if (i<j and q*(i+1)<k and q*(i+1)<k) then     ####nonsense??????
+      e:=Concatenation(e,[xx^(q*j+i)+xx^(q*i+j)]);
+     fi;
+    od;
+ od;
+ if Size(e)=0 then 
+   Error("\n\n Please increase k (or decrease ground field size) and try again.\n\n");
+ fi;
+ G:=[];
+ Pts:=Concatenation(RatPts,IrrRatPts);
+ for f in e do
+   G:=Concatenation(G,[List(Pts,p->Value(f,[xx],[p]))]);
+ od;
+ C:=GeneratorMatCode(G,F);
+ return C;
+end);
\ No newline at end of file
diff --git a/lib/decoders.gd b/lib/decoders.gd
new file mode 100644
index 0000000..4ea58e3
--- /dev/null
+++ b/lib/decoders.gd
@@ -0,0 +1,198 @@
+#############################################################################
+##
+#A  decoders.gd             GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##                                                              &David Joyner
+##
+##  This file contains functions for decoding codes
+##
+#H  @(#)$Id: decoders.gd,v 1.3 2003/02/12 03:49:19 gap Exp $
+##
+## some commands moved form cdeops.gi and Decodeword added in 10-2004
+## added GeneralizedReedSolomonDecoder 11-2005
+## added GeneralizedReedSolomonListDecoder and GRS<functions>, 12-2004
+## added PermutationDecoderNC, CyclicDecoder 5-2005
+## 1-2006: added BitFlipDecoder
+##
+Revision.("guava/lib/decoders_gd") :=
+    "@(#)$Id: decoders.gd,v 1.3 2003/02/12 03:49:19 gap Exp $";
+
+#############################################################################
+##
+#F  Decode( <C>, <v> )  . . . . . . . . .  decodes the word(s) v to
+##                                 the information digits of a codeword in <C>
+##                                        (<C> must be linear)
+##
+##  v can be a codeword or a list of codewords
+##
+DeclareOperation("Decode", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  Decodeword( <C>, <v> )  . . . . . . . . .  decodes the word(s) v to
+##                                                 a codeword in <C>
+##                                        (<C> need not be linear)
+##
+##  v can be a codeword or a list of codewords
+##
+DeclareOperation("Decodeword", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  PermutationDecode( <C>, <v> )    decodes the vector <v> from <C>
+##
+##  v is a vector (ie, a list)
+##
+DeclareOperation("PermutationDecode", [IsLinearCode, IsList]); 
+
+#############################################################################
+##
+#F  PermutationDecodeNC( <C>, <v>, <P> )    decodes the vector <v> to <C>, 
+##
+##  v is a vector (ie, a list), P subset Aut(C) is a finite permutation aut gp
+##
+DeclareOperation("PermutationDecodeNC", [IsLinearCode,IsCodeword,IsGroup]); 
+
+########################################################################
+##
+#F  SpecialDecoder( <code> )
+##
+##  Special function to decode 
+##
+DeclareAttribute("SpecialDecoder", IsCode);
+
+#############################################################################
+##
+#F  BCHDecoder( <C>, <r> )  . . . . . . . . . . . . . . . . decodes BCH codes
+##
+DeclareOperation("BCHDecoder", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  CyclicDecoder( <C>, <r> )  . . . . . . . . . . . . . decodes cyclic codes
+##
+DeclareOperation("CyclicDecoder", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  HammingDecoder( <C>, <r> )  . . . . . . . . . . . . decodes Hamming codes
+##
+##  Generator matrix must have all unit columns
+DeclareOperation("HammingDecoder", [IsCode, IsCodeword]); 
+
+ 
+#############################################################################
+##
+#F  GeneralizedReedSolomonDecoderGao( <C>, <v> )   . . decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using S. Gao's method
+##
+DeclareOperation("GeneralizedReedSolomonDecoderGao", [IsCode, IsCodeword]); 
+
+##########################################################
+##
+## GRSLocatorMat( <r> , <Xlist> , <L> )
+## Input: Xlist=[x1,..,xn], l = highest power,
+##       L=[h_1,...,h_ell] is list of powers
+##       r=[r1,...,rn] is received vector
+## Output: Computes matrix described in Algor. 12.1.1 in [JH]
+##
+## needed for both GeneralizedReedSolomonDecoder 
+##             and GeneralizedReedSolomonListDecoder
+
+##############################################################
+##
+##  GRSErrorLocatorCoeffs( <r> , <Pts> , <L> )
+##
+## Input: Pts=[x1,..,xn], 
+##        L=[h_1,...,h_ell] is list of powers
+##        r=[r1,...,rn] is received vector
+##
+## Output: the lists of coefficients of the polynomial Q(x,y) in alg 12.1.1.  
+##
+
+#######################################################
+##
+##  GRSErrorLocatorPolynomials( <r> , <Pts> , <L> , <R> )
+##
+## Input: List L of ell_j, 
+##        R = F[x],
+##        Pts=[x1,..,xn], 
+##        r=[r1,...,rn] is received vector
+## Output: list of polynomials Qi as in Algor. 12.1.1 in [JH]
+## 
+
+##########################################################
+##
+##   GRSInterpolatingPolynomial( <r> , <Pts> , <L> , <R> )
+##
+## Input: List L of ell_j
+##        R = F[x]
+##        Pts=[x1,..,xn], 
+##        r=[r1,...,rn] is received vector
+## Output: interpolating polynomial Q as in Algor. 12.1.1 in [JH]
+## 
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonDecoder( <C>, <v> )   . . decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using the interpolation algorithm
+##
+DeclareOperation("GeneralizedReedSolomonDecoder", [IsCode, IsCodeword]); 
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonListDecoder( <C>, <v> , <ell> )   . . ell-list decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using M. Sudan's algorithm
+## 
+DeclareOperation("GeneralizedReedSolomonListDecoder",[IsCode, IsCodeword, IsInt]); 
+
+#############################################################################
+##
+#F  NearestNeighborGRSDecodewords( <C>, <v> , <dist> )   . . . finds all 
+##                                           generalized Reed-Solomon codewords
+##                                           within distance <dist> from v
+##                                           *and* the associated polynomial,
+##                                           using "brute force"
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a GRS code
+##        dist>0 is the distance from v to search
+## Output: a list of pairs [c,f(x)], where wt(c-v)<dist
+##         and c = (f(x1),...,f(xn))
+##
+## ****** very slow*****
+##
+DeclareOperation("NearestNeighborGRSDecodewords",[IsCode, IsCodeword, IsInt]);
+
+#############################################################################
+##
+#F  NearestNeighborDecodewords( <C>, <v> , <dist> )   . . . finds all 
+##                                           codewords in a linear code C 
+##                                           within distance <dist> from v
+##                                           using "brute force"
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a linear code
+##        dist>0 is the distance from v to search
+## Output: a list of c in C, where wt(c-v)<dist
+##
+## ****** very slow*****
+##
+DeclareOperation("NearestNeighborDecodewords",[IsCode, IsCodeword, IsInt]);
+#############################################################################
+##
+#F  BitFlipDecoder( <C>, <v>  )   . . . decodes *binary* LDPC codes using bit-flipping
+##                                                           or Gallager hard-decision
+##               ** often fails to work if C is not LDPC **
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a binary LDPC code
+## Output: a c in C, where wt(c-v)<mindis(C)
+##
+## ****** fast *****
+##
+DeclareOperation("BitFlipDecoder",[IsCode, IsCodeword]);
\ No newline at end of file
diff --git a/lib/decoders.gi b/lib/decoders.gi
new file mode 100644
index 0000000..57bca16
--- /dev/null
+++ b/lib/decoders.gi
@@ -0,0 +1,827 @@
+#############################################################################
+##
+#A  decoders.gi             GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##                                                              &David Joyner
+##  This file contains functions for decoding codes
+##
+#H  @(#)$Id: decoders.gi,v 1.4 2003/02/12 03:49:19 gap Exp $
+##
+## Decodeword (unrestricted) modified 11-3-2004
+## Decodeword (linear) created 10-2004
+## Hamming, permutation, and BCH decoders moved into this file 10-2004
+## GeneralizedReedSolomonDecoderGao added 11-2004
+## GeneralizedReedSolomonDecoder added 11-2004
+## bug fix in GRS decoder 11-29-2004
+## added GeneralizedReedSolomonListDecoder and GRS<functions>, 12-2004
+## added PermutationDecodeNC, CyclicDecoder 5-2005
+## revisions to Decodeword, 11-2005 (fixed bug spotted by Cayanne McFarlane)
+## 1-2006: added bit flip decoder
+## 7-2007: Fixed several bugs in CyclicDecoder found by 
+##             Punarbasu Purkayastha <ppurka at umd.edu>
+##
+Revision.("guava/lib/decoders_gi") :=
+    "@(#)$Id: decoders.gi,v 1.4 2003/02/12 03:49:19 gap Exp $";
+
+
+#############################################################################
+##
+#F  Decode( <C>, <v> )  . . . . . . . . .  decodes the vector(s) v from <C>
+##
+##  v can be a "codeword" or a list of "codeword"s
+## 
+
+InstallMethod(Decode, "method for unrestricted code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, v) 
+        local c;
+	c := Codeword(v, C); 
+	if HasSpecialDecoder(C) then
+		return SpecialDecoder(C)(C, c);
+	elif IsCyclicCode(C) or IsLinearCode(C) then 
+		return Decode(C, c);
+	else
+		Error("no decoder present");
+	fi;
+end);
+
+InstallOtherMethod(Decode, 
+	"method for unrestricted code, list of codewords", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+        local i;
+	return List(L, i->Decode(C, i)); 
+end); 
+
+InstallMethod(Decode, "method for linear code, codeword", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, c) 
+    local S, syn, index, corr, Gt, i, x, F;
+    c := Codeword(c, C); 
+	if HasSpecialDecoder(C) then 
+		return SpecialDecoder(C)(C, c); 
+	fi; 
+	F := LeftActingDomain(C);
+    S := SyndromeTable(C);
+    syn := Syndrome(C, c);
+    index := 0;
+    repeat
+        index := index + 1;
+    until S[index][2] = syn;
+    corr := VectorCodeword(c - S[index][1]);	     # correct codeword
+    x := SolutionMat(GeneratorMat(C), corr);
+    return Codeword(x,LeftActingDomain(C));	     # correct "message"
+end);
+
+
+
+#############################################################################
+##
+#F  Decodeword( <C>, <v> )  . . . . . . . . .  decodes the vector(s) v from <C>
+##
+##  v can be a "codeword" or a list of "codeword"s
+## 
+
+#nearest neighbor
+InstallMethod(Decodeword, "method for unrestricted code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, v) 
+        local r, c, Cwords, NearbyWords, dist;
+	r := Codeword(v, C); 
+        if r in C then return r; fi;
+	if HasSpecialDecoder(C) then
+		return SpecialDecoder(C)(C, r)*C;
+	elif IsCyclicCode(C) or IsLinearCode(C) then 
+		return Decodeword(C, r);
+	else
+	     dist:=Int((MinimumDistance(C)-1)/2);
+             Cwords:=Elements(C);
+             NearbyWords:=[];
+             for c in Cwords do
+               if WeightCodeword(r-c) <= dist then
+                   NearbyWords:=Concatenation(NearbyWords,[r]); 
+               fi;
+             od;
+             return NearbyWords;	
+	fi;
+end);
+
+
+InstallOtherMethod(Decodeword, 
+	"method for unrestricted code, list of codewords", 
+	true, [IsCode, IsList], 0, 
+function(C, L) 
+        local i;
+	return List(L, i->Decodeword(C, i)); 
+end); 
+
+#syndrome decoding
+InstallMethod(Decodeword, "method for linear code, codeword", true, 
+	[IsLinearCode, IsCodeword], 0, 
+function(C, v) 
+    local c, c0, S, syn, index, corr, Gt, i, x, F;
+    c := Codeword(v, C); 
+    if HasSpecialDecoder(C) then 
+                c0:=SpecialDecoder(C)(C, c); 
+		return c0*C; 
+    fi; 
+    F := LeftActingDomain(C);
+    S := SyndromeTable(C);
+    syn := Syndrome(C, c);
+    index := 0;
+    repeat
+        index := index + 1;
+    until S[index][2] = syn;
+    corr := VectorCodeword(c - S[index][1]);	     # correct codeword
+    return Codeword(corr,F);
+end);
+
+
+##################################################################
+##
+##  PermutationDecode( <C>, <v> ) -  decodes the vector v  to <C>
+##
+##   Uses Leon's AutomorphismGroup in the binary case,
+##   PermutationAutomorphismGroup in the non-binary case,
+##   performs permutation decoding when possible.
+##   Returns original vector and prints "fail" when not possible.
+##
+
+InstallMethod(PermutationDecode, "attribute method for linear codes", true, 
+	[IsLinearCode,IsList], 0, 
+function(C,v)
+ #C is a linear [n,k,d] code,
+ #v is a vector with <=(d-1)/2 errors
+local M,G,perm,F,P,t,p0,p,pc,i,k,pv,c,H,d,G0,H0;
+ G:=GeneratorMat(C);
+ H:=CheckMat(C);
+ d:=MinimumDistance(C);
+ k:=Dimension(C);
+ G0 := List(G, ShallowCopy);
+ perm:=PutStandardForm(G0);
+ H0 := List(H, ShallowCopy);
+ PutStandardForm(H0,false);
+ F:=LeftActingDomain(C);
+ if F=GF(2) then 
+   P:=AutomorphismGroup(C);
+  else
+   P:=PermutationAutomorphismGroup(C);
+ fi;
+ t:=Int((d-1)/2);
+ p0:=0;
+ if WeightCodeword(H0*v)=0 then return(v); fi;
+ for p in P do
+  pv:=Permuted(v,p);
+  if WeightCodeword(Codeword(H0*pv))<=t then 
+	p0:=p; 
+	break; 
+  fi;
+ od;
+ if p0=0 then Print("fail \n"); return(v); fi;
+ pc:=TransposedMat(G0)*List([1..k],i->pv[i]);
+ c:=Permuted(pc,p0^(-1));
+ return Codeword(Permuted(c,perm));
+end);
+
+
+##################################################################
+##
+##
+##  PermutationDecodeNC( <C>, <v>, <P> ) -  decodes the 
+##                                vector v  to <C>
+##
+##   Performs permutation decoding when possible.
+##   Returns original vector and prints "fail" when not possible.
+##   NC version does Not Compute the aut gp so one must
+##   input the permutation automorphism group  
+##   <P> subset SymmGp(n), n=wordlength(<C>)
+##
+####  wdj,2-7-2005
+
+InstallMethod(PermutationDecodeNC, "attribute method for linear codes", true, 
+	[IsLinearCode,IsCodeword,IsGroup], 0, 
+function(C,v,P)
+ #C is a linear [n,k,d] code,
+ #v is a vector with <=(d-1)/2 errors
+local M,G,G0, perm,F,t,p0,p,pc,i,k,pv,c,H,H0, d;
+ G:=GeneratorMat(C);
+ H:=CheckMat(C);
+ d:=MinimumDistance(C);
+ k:=Dimension(C);
+ G0 := List(G, ShallowCopy);
+ perm:=PutStandardForm(G0);
+ H0 := List(H, ShallowCopy);
+ PutStandardForm(H0,false);
+ F:=LeftActingDomain(C);
+ t:=Int((d-1)/2);
+ p0:=0;
+ if WeightCodeword(H0*v)=0 then return(v); fi;
+ for p in P do
+  pv:=Permuted(v,p);
+  if WeightCodeword(Codeword(H0*pv))<=t then 
+	p0:=p; 
+#	Print(p0," = p0 \n",pv,"\n",H*pv,"\n"); 
+	break; 
+  fi;
+ od;
+ if p0=0 then Print("fail \n"); return(v); fi;
+ pc:=TransposedMat(G0)*List([1..k],i->pv[i]);
+ c:=Permuted(pc,p0^(-1));
+ return Codeword(Permuted(c,perm));
+end);
+
+#############################################################################
+##
+#F  CyclicDecoder( <C>, <w> )  . . . . . . . . . . . . decodes cyclic codes
+##
+InstallMethod(CyclicDecoder, "method for cyclic code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C,w)
+local d, g, wpol, s, ds, cpol, cc, c, i, m, e, x, n, ccc, r;
+ if not(IsCyclicCode(C)) then
+   Error("\n\n Code must be cyclic");
+ fi;
+ if Codeword(w) in C then return Codeword(w); fi; ## bug fix 7-6-2007
+ n:=WordLength(C);
+ d:=MinimumDistance(C);
+ g:=GeneratorPol(C);
+ x:=IndeterminateOfUnivariateRationalFunction(g);
+ wpol:=PolyCodeword(w);
+ s:=wpol mod g;
+ ds:=DegreeOfLaurentPolynomial(s);
+ if ds<=Int((d-1)/2) then
+   cpol:=wpol-s;
+   cc:=CoefficientsOfUnivariatePolynomial(cpol);
+   r:=Length(cc);
+   ccc:=Concatenation(cc,List([1..(n-r)],k->0*cc[1]));
+   c:=Codeword(ccc);
+   return InformationWord( c, C );
+ fi;
+ for i in [1..(n-1)] do
+   s:=x^i*wpol mod g;
+   ds:=DegreeOfLaurentPolynomial(s);
+   if ds<=Int((d-1)/2) then
+     m:=i;
+     e:=x^(n-m)*s mod (x^n-1);
+     cpol:=wpol-e;
+     cc:=CoefficientsOfUnivariatePolynomial(cpol);
+     r:=Length(cc);
+     ccc:=Concatenation(cc,List([1..(n-r)],k->0*cc[1]));
+     c:=Codeword(ccc);
+     return InformationWord( c, C );
+   fi;
+ od;
+ return "fail";
+end);
+
+#############################################################################
+##
+#F  BCHDecoder( <C>, <r> )  . . . . . . . . . . . . . . . . decodes BCH codes
+##
+InstallMethod(BCHDecoder, "method for code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function (C, r)
+    local F, q, n, m, ExtF, x, a, t, ri_1, ri, rnew, si_1, si, snew,
+          ti_1, ti, qi, sigma, i, cc, cl, mp, ErrorLocator, zero,
+          Syndromes, null, pol, ExtSize, ErrorEvaluator, Fp;
+    F := LeftActingDomain(C);
+    q := Size(F);
+    n := WordLength(C);
+    m := OrderMod(q,n);
+    t := QuoInt(DesignedDistance(C) - 1, 2);
+    ExtF := GF(q^m);
+    x := Indeterminate(ExtF);
+    a := PrimitiveUnityRoot(q,n);
+    zero := Zero(ExtF); 
+    r := PolyCodeword(Codeword(r, n, F));
+    if Value(GeneratorPol(C), a) <> zero then
+        return Decode(C, r);  ##LR - inf loop !!! 
+    fi;
+    # Calculate syndrome: this simple line is faster than using minimal pols.
+    Syndromes :=  List([1..2*QuoInt(DesignedDistance(C) - 1,2)],
+                       i->Value(r, a^i));
+    if Maximum(Syndromes) = Zero(F) then # no errors
+        return Codeword(r / GeneratorPol(C), C);
+    fi;
+    # Use Euclidean algorithm:
+    ri_1 := x^(2*t); 
+	ri := LaurentPolynomialByCoefficients( 
+			ElementsFamily(FamilyObj(ExtF)), 
+			Syndromes, 0); 
+	rnew := ShallowCopy(ri);
+    si_1 := x^0; si := 0*x; snew := 0*x;
+    ti_1 := 0*x; ti := x^0; sigma := x^0;
+    while Degree(rnew) >= t do
+        rnew := (ri_1 mod ri);
+        qi := (ri_1 - rnew) / ri;
+        snew := si_1 - qi*si;
+        sigma := ti_1 - qi*ti;
+        ri_1 := ri; ri := rnew;
+        si_1 := si; si := snew;
+        ti_1 := ti; ti := sigma;
+    od;
+    # Chien search for the zeros of error locator polynomial:
+    ErrorLocator := []; 
+    null := a^0;
+    ExtSize := q^m-1;
+    for i in [0..ExtSize-1] do
+        if Value(sigma, null) = zero then
+            AddSet(ErrorLocator, (ExtSize-i) mod n);
+        fi;
+        null := null * a;
+    od;
+    # And decode:
+    if Length(ErrorLocator) = 0 then
+        Error("not decodable");
+    fi;
+    x := Indeterminate(F);
+    if q = 2 then # error locator is not necessary
+        pol := Sum(List([1..Length(ErrorLocator)], i->x^ErrorLocator[i]));
+        return Codeword((r - pol) / GeneratorPol(C), C);
+    else
+        pol := Derivative(sigma);
+        Fp := One(F)*(x^n-1);
+        ErrorEvaluator := List(ErrorLocator,i->
+                              Value(rnew,a^-i)/Value(pol, a^-i));
+        pol := Sum(List([1..Length(ErrorLocator)], i->
+                       -ErrorEvaluator[i]*x^ErrorLocator[i]));
+        return Codeword((r - pol) / GeneratorPol(C), C);
+    fi;
+end);
+
+#############################################################################
+##
+#F  HammingDecoder( <C>, <r> )  . . . . . . . . . . . . decodes Hamming codes
+##
+##  Generator matrix must have all unit columns
+## 
+InstallMethod(HammingDecoder, "method for code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C, r) 
+    local H, S,p, F, fac, e,z,x,ind, i,Sf;
+    S := VectorCodeword(Syndrome(C,r));
+    r := ShallowCopy(VectorCodeword(r));
+    F := LeftActingDomain(C);
+    p := PositionProperty(S, s->s<>Zero(F)); 
+    if p <> fail then
+        z := Z(Characteristic(S[p]))^0;
+        if z = S[p] then
+            fac := One(F); 
+        else
+            fac := S[p]/z;
+        fi;
+        Sf := S/fac;
+        H := CheckMat(C);
+        ind := [1..WordLength(C)];
+        for i in [1..Redundancy(C)] do
+            ind := Filtered(ind, j-> H[i][j] = Sf[i]);
+        od;
+        e := ind[1];
+        r[e] := r[e]-fac;     # correct error
+    fi;
+    x := SolutionMat(GeneratorMat(C), r);
+    return Codeword(x);
+end);	
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonDecoderGao( <C>, <v> )   . . decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using S. Gao's method
+## 
+InstallMethod(GeneralizedReedSolomonDecoderGao,"method for code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C,vec)
+ local vars,a,b,n,i,g0,g1,geea,u,q,v,r,g,f,F,R,x,k,GcdExtEuclideanUntilBound; 
+ if C!.name<>" generalized Reed-Solomon code" then
+   Error("\N This method only applies to GRS codes.\n");
+ fi;
+
+GcdExtEuclideanUntilBound:=function(F,f,g,d,R)
+## S Gao's version
+## R is a poly ring
+local vars,u,v,r,q,i,num,x;
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1]; # define local x
+ u:=List([1..3],i->Zero(F)); ## Need u[3] as a temporary variable
+ v:=List([1..3],i->Zero(F));
+ r:=List([1..3],i->Zero(F));
+ q:=Zero(F);
+ u[1]:=One(F); u[2]:=Zero(F); v[1]:=Zero(F); v[2]:=One(F);
+ r[2]:=f; r[1]:=g;           ### applied with r2=f=g1, r1=g=g0
+ while DegreeIndeterminate(r[2],x)> d-1 do    ### assume Degree(0) < 0.
+  q   := EuclideanQuotient(R,r[1],r[2]);
+  r[3]:=EuclideanRemainder(R,r[1],r[2]);
+  u[3]:=u[1] - q*u[2];
+  v[3]:=v[1] - q*v[2];
+  r[1]:=r[2]; r[2] :=r[3];
+  u[1]:=u[2]; u[2] :=u[3];
+  v[1]:=v[2]; v[2] :=v[3];
+ od;
+ return([r[2],u[2],v[2]]);
+end;
+
+ a:=C!.points;
+ R:=C!.ring;
+ k:=C!.degree;
+ F:=CoefficientsRing(R);
+ b:=VectorCodeword(vec);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1]; # define local x
+ n:=Length(a);
+ if Size(Set(a)) < n then    
+   Error("`Points in 1st vector must be distinct.`\n\n");  
+ fi;
+ g0:=One(F)*Product([1..n],i->x-a[i]);
+ g1:=InterpolatedPolynomial(F,a,b);
+ geea:=GcdExtEuclideanUntilBound(F,g1,g0,(n+k)/2,R);
+ u:=geea[2]; v:=geea[3]; g:=geea[1];
+ if v=Zero(F) then return("fail"); fi;   
+ if v=One(F) then 
+     q:=g; 
+     r:=Zero(F); 
+   else 
+     q:=EuclideanQuotient(R,g,v);  
+     r:=EuclideanRemainder(R,g,v);
+ fi;
+ if ((r=Zero(F) or LeadingCoefficient(r)=Zero(F)) and (Degree(q) < k)) then
+     f:=q;
+   else
+     f:="fail";  ## this does not occur if num errors < (mindist - 1)/2
+ fi;
+ if f="fail" then return(f); else
+    return Codeword(List(a,i->Value(f,i)),C);
+ fi;
+end);
+
+##########################################################
+#
+# Input: Pts=[x1,..,xn], l = highest power,
+#       L=[h_1,...,h_ell] is list of powers
+#       r=[r1,...,rn] is received vector
+# Output: Computes matrix described in Algor. 12.1.1 in [JH]
+#
+GRSLocatorMat:=function(r,Pts,L)
+  local a,j,b,ell,DiagonalPower,add_col_mat,add_row_mat,block_matrix;
+
+ add_col_mat:=function(M,N) ## "AddColumnsToMatrix"
+  #N is a matrix with same rowdim as M 
+  #the fcn adjoins N to the end of M
+  local i,j,S,col,NT;
+  col:=MutableTransposedMat(M);  #preserves M
+  NT:=MutableTransposedMat(N);   #preserves N
+  for j in [1..DimensionsMat(N)[2]] do
+      Add(col,NT[j]);
+  od;
+  return MutableTransposedMat(col);
+ end;
+
+ add_row_mat:=function(M,N) ## "AddRowsToMatrix"
+  #N is a matrix with same coldim as M 
+  #the fcn adjoins N to the bottom of M
+  local i,j,S,row;
+  row:=ShallowCopy(M);#to preserve M;
+  for j in [1..DimensionsMat(N)[1]] do
+    Add(row,N[j]);
+  od;
+  return row;
+ end;
+
+ block_matrix:=function(L) ## slightly simpler syntax IMHO than "BlockMatrix"
+  # L is an array of matrices of the form
+  # [[M1,...,Ma],[N1,...,Na],...,[P1,...,Pa]]
+  # returns the associated block matrix 
+  local A,B,i,j,m,n;
+  n:=Length(L[1]);
+  m:=Length(L);
+  A:=[];
+  if n=1 then
+     if m=1 then return L[1][1]; fi;
+     A:=L[1][1];
+     for i in [2..m] do
+         A:=add_row_mat(A,L[i][1]);
+     od;
+     return A;
+  fi;
+  for j in [1..m] do
+    A[j]:=L[j][1];
+  od;
+  for j in [1..m] do
+   for i in [2..n] do
+    A[j]:=add_col_mat(A[j],L[j][i]);
+   od;
+  od;
+  B:=A[1];
+  for j in [2..m] do
+   B:= add_row_mat(B,A[j]);
+  od;
+  return B;
+ end;
+
+ DiagonalPower:=function(r,j)
+  local R,n,i;
+  n:=Length(r);
+  R:=DiagonalMat(List([1..n],i->r[i]^j));
+  return R;
+ end;
+
+  ell:=Length(L);
+  a:=List([1..ell],j->DiagonalPower(r,(j-1))*VandermondeMat(Pts,L[j]));
+  b:=List([1..ell],j->[1,j,a[j]]);
+  return (block_matrix([a]));  
+end; 
+
+##############################################################
+#
+#
+# Input: Pts=[x1,..,xn], 
+#       L=[h_1,...,h_ell] is list of powers
+#       r=[r1,...,rn] is received vector
+#
+# Compute kernel of matrix in alg 12.1.1 in [JH].
+# Choose a basis vector in kernel.  
+# Output: the lists of coefficients of the polynomial Q(x,y) in alg 12.1.1.  
+#
+GRSErrorLocatorCoeffs:=function(r,Pts,L)
+  local a,j,b,vec,e,QC,i,lengths,ker,ell;
+  ell:=Length(L); 
+  e:=GRSLocatorMat(r,Pts,L);
+  ker:=TriangulizedNullspaceMat(TransposedMat(e));
+  if ker=[] then Print("Decoding fails.\n"); return []; fi;
+  vec:=ker[Length(ker)];
+  QC:=[];
+  lengths:=List([1..ell],i->Sum(List([1..i],j->1+L[j])));
+  QC[1]:=List([1..lengths[1]],j->vec[j]);
+  for i in [2..ell] do
+  QC[i]:=List([(lengths[i-1]+1)..lengths[i]],j->vec[j]);
+  od;
+  return QC;
+end;
+
+
+#######################################################
+#
+# Input: List L of coefficients ell, R = F[x]
+#        Pts=[x1,..,xn], 
+# Output: list of polynomials Qi as in Algor. 12.1.1 in [JH]
+# 
+GRSErrorLocatorPolynomials:=function(r,Pts,L,R)
+  local q,p,i,ell;
+  ell:=Length(L)+1; ##  ?? Length(L) instead ??
+  q:=GRSErrorLocatorCoeffs(r,Pts,L);
+  if q=[] then Print("Decoding fails.\n"); return []; fi;
+  p:=[];
+  for i in [1..Length(q)] do 
+     p:=Concatenation(p,[CoefficientToPolynomial(q[i],R)]);
+  od;
+  return p;
+end;
+
+##########################################################
+#
+# Input: List L of coefficients ell, R = F[x]
+#       Pts=[x1,..,xn], 
+# Output: interpolating polynomial Q as in Algor. 12.1.1 in [JH]
+# 
+GRSInterpolatingPolynomial:=function(r,Pts,L,R)
+  local poly,i,Ry,F,y,Q,ell;
+  ell:=Length(L)+1; ##  ?? Length(L) instead ??  ##### not used ???
+Q:=GRSErrorLocatorPolynomials(r,Pts,L,R);
+  if Q=[] then Print("Decoding fails.\n"); return 0; fi;
+  F:=CoefficientsRing(R);
+  y:=IndeterminatesOfPolynomialRing(R)[2];
+# Ry:=PolynomialRing(F,[y]);
+# poly:=CoefficientToPolynomial(Q,Ry);
+  poly:=Sum(List([1..Length(Q)],i->Q[i]*y^(i-1)));
+  return poly;
+end;
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonDecoder( <C>, <v> )   . . decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using the interpolation algorithm
+## 
+InstallMethod(GeneralizedReedSolomonDecoder,"method for code, codeword", true, 
+	[IsCode, IsCodeword], 0, 
+function(C,vec)
+local v,R,k,P,z,F,f,s,t,L,n,Qpolys,vars,x,c,y;
+
+ v:=VectorCodeword(vec);
+ R:=C!.ring;
+ P:=C!.points;
+ k:=C!.degree;
+ F:=CoefficientsRing(R);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1];
+#y:=vars[2];
+ n:=Length(v);
+ t:=Int((n-k)/2);
+ L:=[n-1-t,n-t-k];
+ Qpolys:=GRSErrorLocatorPolynomials(v,P,L,R);
+ f:=-Qpolys[2]/Qpolys[1];
+ c:=List(P,s->Value(f,[x],[s]));
+ return Codeword(c,n,F);
+end);
+
+
+#############################################################################
+##
+#F  GeneralizedReedSolomonListDecoder( <C>, <v> , <ell> )   . . ell-list decodes 
+##                                           generalized Reed-Solomon codes
+##                                           using M. Sudan's algorithm
+## 
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a GRS code
+##        ell>0 is the length of the decoded list (should be at least
+##                  2 to beat GeneralizedReedSolomonDecoder
+##                  or Decoder with the special method of interpolation decoding)
+##
+InstallMethod(GeneralizedReedSolomonListDecoder,"method for code, codeword, integer", 
+    true, [IsCode, IsCodeword, IsInt], 0, 
+function(C,v,ell)
+local f,h,g,x,R,R2,L,F,t,i,c,Pts,k,n,tau,Q,divisorsf,div,
+      CodewordList,p,vars,y,degy, divisorsdeg1;
+ R:=C!.ring;
+ F:=CoefficientsRing(R);
+ vars:=IndeterminatesOfPolynomialRing(R);
+ x:=vars[1]; 
+ Pts:=C!.points;
+ n:=Length(Pts);
+ k:=C!.degree; 
+ tau:=Int((n-k)/2);
+ L:=List([0..ell],i->n-tau-1-i*(k-1));
+ y:=X(F,vars);;
+ R2:=PolynomialRing(F,[x,y]);
+ vars:=IndeterminatesOfPolynomialRing(R2);
+ Q:=GRSInterpolatingPolynomial(v,Pts,L,R2); 
+ divisorsf:=DivisorsMultivariatePolynomial(Q,R2);
+ divisorsdeg1:=[];
+ CodewordList:=[];
+ for div in divisorsf do
+  degy:=DegreeIndeterminate(div,y);
+  if degy=1 then ######### div=h*y+g
+    g:=Value(div,vars,[x,Zero(F)]);
+    h:=Derivative(div,y);
+   if DegreeIndeterminate(h,x)=0 then
+      f:= -h^(-1)*g*y^0;
+      divisorsdeg1:=Concatenation(divisorsdeg1,[f]);
+    if g=Zero(F)*x then
+       c:=List(Pts,p->Zero(F));
+     else
+       c:=List(Pts,p->Value(f,[x,y],[p,Zero(F)]));
+    fi;
+    CodewordList:=Concatenation(CodewordList,[Codeword(c,C)]);
+   fi;
+  fi;
+ od;
+ return CodewordList;
+end);
+
+#############################################################################
+##
+#F  NearestNeighborGRSDecodewords( <C>, <v> , <dist> )   . . . finds all 
+##                                           generalized Reed-Solomon codewords
+##                                           within distance <dist> from v
+##                                           *and* the associated polynomial,
+##                                           using "brute force"
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a GRS code
+##        dist>0 is the distance from v to search
+## Output: a list of pairs [c,f(x)], where wt(c-v)<dist
+##         and c = (f(x1),...,f(xn))
+##
+## ****** very slow*****
+##
+InstallMethod(NearestNeighborGRSDecodewords,"method for code, codeword, integer", 
+    true, [IsCode, IsCodeword, IsInt], 0, 
+function(C,r,dist)
+# "brute force" decoder
+local k,F,Pts,v,p,x,f,NearbyWords,c,a;
+ k:=C!.degree;
+ Pts:=C!.points;
+ F:=LeftActingDomain(C);
+ NearbyWords:=[];
+ for v in F^k do
+   a := Codeword(v); 
+   f:=PolyCodeword(a);
+   x:=IndeterminateOfLaurentPolynomial(f);
+   c:=Codeword(List(Pts,p->Value(f,[x],[p])));
+   if WeightCodeword(r-c) <= dist then
+   NearbyWords:=Concatenation(NearbyWords,[[c,f]]); 
+ fi;
+od;
+return NearbyWords;
+end);
+
+#############################################################################
+##
+#F  NearestNeighborDecodewords( <C>, <v> , <dist> )   . . . finds all 
+##                                           codewords in a linear code C 
+##                                           within distance <dist> from v
+##                                           using "brute force"
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a linear code
+##        dist>0 is the distance from v to search
+## Output: a list of c in C, where wt(c-v)<dist
+##
+## ****** very slow*****
+##
+InstallMethod(NearestNeighborDecodewords,"method for code, codeword, integer", 
+    true, [IsCode, IsCodeword, IsInt], 0, 
+function(C,r,dist)
+# "brute force" decoder
+local k,F,Pts,v,p,x,f,NearbyWords,c,a;
+ F:=LeftActingDomain(C);
+ NearbyWords:=[];
+ for v in C do
+   c := Codeword(v); 
+   if WeightCodeword(r-c) <= dist then
+   NearbyWords:=Concatenation(NearbyWords,[c]); 
+ fi;
+od;
+return NearbyWords;
+end);
+
+
+#############################################################################
+##
+#F  BitFlipDecoder( <C>, <v>  )   . . . decodes *binary* LDPC codes using bit-flipping
+##                                                           or Gallager hard-decision
+##               ** often fails to work if C is not LDPC **
+##
+## Input: v is a received vector (a GUAVA codeword)
+##        C is a binary LDPC code
+## Output: a c in C, where wt(c-v)<mindis(C)
+##
+## ****** fast *****
+##
+checksetJ:=function(H,w)
+ local i,I,n,k;
+ I:=[];
+ n:=Length(H[1]);
+ for i in [1..n] do
+		if H[w][i]<>0*Z(2) then 
+		I:=Concatenation(I,[i]);
+		fi;
+	od;
+ return I;
+end;
+
+checksetI:=function(H,u)
+ return checksetJ(TransposedMat(H),u);
+end;
+
+BFcounter:=function(I,s)
+ local S,i;
+ S:=Codeword(List(I, i -> List(s)[i]));
+ return WeightCodeword(S);
+end;
+
+bit_flip:=function(H,v)
+ local i,j,s,q,n,k,rho,gamma,I_j,tH;
+ tH:=TransposedMat(H);
+ q:=ShallowCopy(v);
+ s:=H*q;
+ n:=Length(H[1]);
+ k:=n-Length(H);
+ rho:=Length(Support(Codeword(H[1])));
+ #gamma:= Length(Support(Codeword(TransposedMat(H)[1])));
+ for j in [1..n] do
+   gamma:= Length(Support(Codeword(tH[j])));
+   I_j:=checksetI(H,j);
+       if BFcounter(I_j,s)>gamma/2 then
+           q[j]:=q[j]+Z(2);
+           break;
+       fi;
+ od;
+ return Codeword(q);
+end;
+
+InstallMethod(BitFlipDecoder,"method for code, codeword, integer", 
+    true, [IsCode, IsCodeword], 0, 
+function(C,v)
+ local H,r,qnew,q;
+ H:=CheckMat(C);
+ r:=ShallowCopy(v);
+ if Length(Support(Codeword(H*v)))=0 then
+        return v;
+ fi;
+ q:=bit_flip(H,r);
+ if Length(Support(Codeword(H*q)))=0 then
+        return Codeword(q);
+ fi;
+ while Length(Support(Codeword(H*q)))<Length(Support(Codeword(H*r))) do
+ #while q<>r do
+   qnew:=q;
+   r:=q;
+   q:=bit_flip(H,qnew);
+   Print("  ",Length(Support(Codeword(H*q))),"  ",Length(Support(Codeword(H*r))),"\n");
+ od;
+ return Codeword(r);
+end);
+
diff --git a/lib/matrices.gd b/lib/matrices.gd
new file mode 100644
index 0000000..edaebe0
--- /dev/null
+++ b/lib/matrices.gd
@@ -0,0 +1,111 @@
+#############################################################################
+##
+#A  matrices.gd             GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for generating matrices
+##
+#H  @(#)$Id: matrices.gd,v 1.2 2003/02/12 03:49:19 gap Exp $
+##
+Revision.("guava/lib/matrices_gd") :=
+    "@(#)$Id: matrices.gd,v 1.2 2003/02/12 03:49:19 gap Exp $";
+
+#############################################################################
+##
+#F  KrawtchoukMat( <n> [, <q>] )  . . . . . . .  matrix of Krawtchouk numbers
+##
+DeclareOperation("KrawtchoukMat", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  GrayMat( <n> [, <F>] )  . . . . . . . . .  matrix of Gray-ordered vectors
+##
+##  GrayMat(n [, F]) returns a matrix in which rows a(i) have the property
+##  d( a(i), a(i+1) ) = 1 and a(1) = 0.
+##
+DeclareOperation("GrayMat", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  SylvesterMat( <n> ) . . . . . . . . . . . . Sylvester matrix of order <n>
+##
+DeclareOperation("SylvesterMat", [IsInt]); 
+
+#############################################################################
+##
+#F  HadamardMat( <n> )  . . . . . . . . . . . .  Hadamard matrix of order <n>
+##
+DeclareOperation("HadamardMat", [IsInt]); 
+
+#############################################################################
+##
+#F  IsLatinSquare( <M> )  . . . . . . .  determines if matrix is latin square
+##
+##  IsLatinSquare determines if M is a latin square, that is a q*q array whose
+##  entries are from a set of q distinct symbols such that each row and each
+##  column of the array contains each symbol exactly once
+##
+DeclareOperation("IsLatinSquare", [IsMatrix]); 
+
+#############################################################################
+##
+#F  AreMOLS( <matlist> )  . . . . . . . . .  determines if arguments are MOLS
+##
+##  AreMOLS(M1, M2, ...) determines if the arguments are mutually orthogonal
+##  latin squares.
+##
+DeclareGlobalFunction("AreMOLS"); 
+
+#############################################################################
+##
+#F  MOLS( <q> [, <n>] ) . . . . . . . . . .  list of <n> MOLS of size <q>*<q>
+##
+##  MOLS( q [, n]) returns a list of n Mutually Orthogonal Latin
+##  Squares of size q * q. If n is omitted, MOLS will return a list
+##  of two MOLS. If it is not possible to return n MOLS of size q,
+##  MOLS will return a boolean false.
+##
+DeclareOperation("MOLS", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  VerticalConversionFieldMat( <M> ) . . . . . . .  converts matrix to GF(q)
+##
+##  VerticalConversionFieldMat (M) converts a matrix over GF(q^m) to a matrix
+##  over GF(q) with vertical orientation of the tuples
+##
+DeclareOperation("VerticalConversionFieldMat", 
+											[IsMatrix, IsField]); 
+
+#############################################################################
+##
+#F  HorizontalConversionFieldMat( <M>, <F> )  . . .  converts matrix to GF(q)
+##
+##  HorizontalConversionFieldMat (M, F) converts a matrix over GF(q^m) to a
+##  matrix over GF(q) with horizontal orientation of the tuples
+##
+DeclareOperation("HorizontalConversionFieldMat", 
+												[IsMatrix, IsField]);  
+
+#############################################################################
+##
+#F  IsInStandardForm( <M> [, <boolean>] ) . . . . is matrix in standard form?
+##
+##  IsInStandardForm(M [, identityleft]) determines if M is in standard form;
+##  if identityleft = false, the identitymatrix must be at the right side
+##  of M; otherwise at the left side.
+##
+DeclareOperation("IsInStandardForm", [IsMatrix, IsBool]);  
+
+#############################################################################
+##
+#F  PutStandardForm( <M> [, <boolean>] [, <F>] )  .  put <M> in standard form
+##
+##  PutStandardForm(Mat [, idleft] [, F]) puts matrix Mat in standard form,
+##  the size of Mat being (n x m). If idleft is true or is omitted, the
+##  the identity matrix is put left, else right. The permutation is returned.
+##
+DeclareOperation("PutStandardForm", 
+								[IsMatrix, IsBool, IsField]); 
+
diff --git a/lib/matrices.gi b/lib/matrices.gi
new file mode 100644
index 0000000..d20b255
--- /dev/null
+++ b/lib/matrices.gi
@@ -0,0 +1,542 @@
+#############################################################################
+##
+#A  matrices.gi             GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains functions for generating matrices
+##
+#H  @(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $
+##
+Revision.("guava/lib/matrices_gi") :=
+    "@(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $";
+
+#############################################################################
+##
+#F  KrawtchoukMat( <n> [, <q>] )  . . . . . . .  matrix of Krawtchouk numbers
+##
+InstallMethod(KrawtchoukMat, "n,q", true, [IsInt, IsInt], 0, 
+function(n,q) 
+    local res,i,k;
+    if not IsPrimePowerInt(q) then 
+		Error("q must be a prime power int"); 
+	fi;
+	res := MutableNullMat(n+1,n+1);
+    for k in [0..n] do
+        res[1][k+1]:=1;
+    od;
+    for k in [0..n] do
+        res[k+1][1] := Binomial(n,k)*(q-1)^k;
+    od;
+    for i in [2..n+1] do
+        for k in [2..n+1] do
+            res[k][i] := res[k][i-1] - (q-1)*res[k-1][i] - res[k-1][i-1];
+        od;
+    od;
+    return res;
+end);
+
+InstallOtherMethod(KrawtchoukMat, "n", true, [IsInt], 0, 
+function(n) 
+	return KrawtchoukMat(n, 2);
+end);
+
+
+#############################################################################
+##
+#F  GrayMat( <n> [, <F>] )  . . . . . . . . .  matrix of Gray-ordered vectors
+##
+##  GrayMat(n [, F]) returns a matrix in which rows a(i) have the property
+##  d( a(i), a(i+1) ) = 1 and a(1) = 0.
+##
+
+InstallMethod(GrayMat, "n,Field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    local M, result, row, series, column, elem, q, elementnr, line,
+          goingup; 
+	elem := AsSSortedList(F);
+	q := Length(elem);
+    M := q^n;
+    result := MutableNullMat(M,n);
+    for column in [1..n] do
+        goingup := true;
+        row:=0;
+        for series in [1..q^(column-1)] do
+            for elementnr in [1..q] do
+                for line in [1..q^(n-column)] do
+                    row:=row+1;
+                    if goingup then
+                        result[row][column]:= elem[elementnr];
+                    else
+                        result[row][column]:= elem[q+1-elementnr];
+                    fi;
+                od;
+            od;
+            goingup:= not goingup;
+        od;
+    od;
+    return result;
+end);
+
+InstallOtherMethod(GrayMat, "n", true, [IsInt], 0, 
+function(n) 
+	return GrayMat(n, GF(2));
+end); 
+
+
+#############################################################################
+##
+#F  SylvesterMat( <n> ) . . . . . . . . . . . . Sylvester matrix of order <n>
+##
+
+InstallMethod(SylvesterMat, "order", true, [IsInt], 0, 
+function(n) 
+    local result, syl;
+    if n = 1 then
+        return [[1]];
+    elif (n mod 2)=0 then
+        syl:=SylvesterMat(n/2);
+        result:=List(syl, x->Concatenation(x,x));
+        Append(result,List(syl,x->Concatenation(x,-x)));
+        return result;
+    else
+        Error("n must be a power of 2");
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  HadamardMat( <n> )  . . . . . . . . . . . .  Hadamard matrix of order <n>
+##
+
+InstallMethod(HadamardMat, "order", true, [IsInt], 0, 
+function(n) 
+    local result, had, i, j;
+    if n = 1 then
+        return [[1]];
+    elif (n=2) or (n=4) or ((n mod 8)=0) then
+        had:=HadamardMat(n/2);
+        result:=List(had, x->Concatenation(x,x));
+        Append(result,List(had,x->Concatenation(x,-x)));
+        return result;
+    elif IsPrimeInt(n-1) and (n mod 4)=0 then
+        result := List(MutableNullMat(n,n)+1, x->ShallowCopy(x));
+        for i in [2..n] do
+            result[i][i]:=-1;  
+            for j in [i+1..n] do
+                result[i][j]:=Legendre(j-i,n-1);
+                result[j][i]:=-result[i][j];
+            od;
+        od;
+        return result;
+    elif (n mod 4)=0 then
+        Error("The Hadamard matrix of order ",n," is not yet implemented");
+    else
+        Error("The Hadamard matrix of order ",n," does not exist");
+    fi;
+end);
+
+
+#############################################################################
+##
+#F  IsLatinSquare( <M> )  . . . . . . .  determines if matrix is latin square
+##
+##  IsLatinSquare determines if M is a latin square, that is a q*q array whose
+##  entries are from a set of q distinct symbols such that each row and each
+##  column of the array contains each symbol exactly once
+##
+
+InstallMethod(IsLatinSquare, "method for matrix", true, [IsMatrix], 0, 
+function(M) 
+
+    local i, j, s, n, isLS, MT;
+	n:=Length(M);
+	s:=Set(M[1]);
+	isLS:= (Length(s) = n and Length(s) = Length(M[1]) );
+    i:=2;
+    if isLS then
+        MT:=TransposedMat(M);
+    fi;
+    while isLS and i<=n do
+        isLS:= (Set(M[i]) = s);
+        i:=i+1;
+    od;
+    i := 1;
+    while isLS and i<=n do
+        isLS:= (Set(MT[i]) = s);
+        i:=i+1;
+    od;
+    return isLS;
+end);
+
+InstallOtherMethod(IsLatinSquare, "generic method, any object", true, 
+	[IsObject], 0, 
+function(obj) 
+	if IsMatrix(obj) then 
+		TryNextMethod(); 
+	fi;
+	return false;
+end); 
+
+
+#############################################################################
+##
+#F  AreMOLS( <matlist> )  . . . . . . . . .  determines if arguments are MOLS
+##
+##  AreMOLS(M1, M2, ...) determines if the arguments are mutually orthogonal
+##  latin squares.
+##
+
+##LR - doesn't handle case where arg is list of one matrix.  Is this a prob? 
+InstallGlobalFunction(AreMOLS, 
+function(arg) 
+    local i, j, s, M, n, q2, first, second, max, fast;
+    if Length(arg) = 1 then
+        M:=arg[1];
+    else
+        M:=List([1..Length(arg)],i->arg[i]);
+    fi;
+    n:=Length(M);
+    if ( n >= Length(M[1]) ) or not ForAll(M, i-> IsLatinSquare(i)) then
+        return false; #this is right
+    fi;
+    q2 := Length(M[1])^2;
+    max := Maximum(M[1][1]) + 1;
+    M := List(M, i -> Flat(i));
+    fast := (DefaultField(Flat(M)) = Rationals);
+    first := 1;
+    repeat
+        second := first+1;
+        if fast then
+            repeat
+                s := Set( M[first] * max + M[second] );
+                second := second + 1;
+            until (Length(s) < q2) or (second > n);
+        else
+            repeat
+                s:=Set([]);
+                for i in [1 .. q2] do
+                    AddSet(s, [  M[first][i], M[second][i] ]);
+                od;
+                second := second + 1;
+            until (Length(s) < q2) or (second > n);
+        fi;
+        first:=first + 1;
+    until (Length(s) < q2) or (first >= n);
+    return Length(s) = q2;
+end);
+
+
+#############################################################################
+##
+#F  MOLS( <q> [, <n>] ) . . . . . . . . . .  list of <n> MOLS of size <q>*<q>
+##
+##  MOLS( q [, n]) returns a list of n Mutually Orthogonal Latin
+##  Squares of size q * q. If n is omitted, MOLS will return a list
+##  of two MOLS. If it is not possible to return n MOLS of size q,
+##  MOLS will return a boolean false.
+##
+
+InstallMethod(MOLS, "size, number", true, [IsInt, IsInt], 0, 
+function(q, n) 
+    local facs, res, Merged, Squares, nr, S, ToInt;
+	
+    ToInt := function(M)
+        local res, els, q, i, j;
+        q:=Length(M);
+        els:=AsSSortedList(GF(q));
+        res := MutableNullMat(q,q)+1;
+        for i in [1..q] do
+            for j in [1..q] do
+                while els[res[i][j]] <> M[i][j] do
+                    res[i][j]:=res[i][j]+1;
+                od;
+            od;
+        od;
+        return res-1;
+    end;
+
+    Squares := function(q, n)
+        local els, res, i, j, k;
+        els:=AsSSortedList(GF(q));
+        res:=List([1..n], x-> MutableNullMat(q,q,GF(q)));
+        for i in [1..q] do
+            for j in [1..q] do
+                for k in [1..n] do
+                    res[k][i][j] := els[i] + els[k+1] * els[j];
+                od;
+            od;
+        od;
+        return List([1..n],x -> ToInt(res[x]));
+    end;
+
+    Merged := function(A, B)
+        local i, j, q1, q2, res;
+        q1:=Length(A);
+        q2:=Length(B);
+        res:=KroneckerProduct(A,NullMat(q2,q2)+1);
+        for i in [1 .. q1*q2] do
+            for j in [1 .. q1*q2] do
+                res[i][j]:= res[i][j] + q1 *
+                            B[((i-1) mod q2)+1][((j-1) mod q2)+1];
+            od;
+        od;
+        return res;
+    end;
+
+    if n <= 0 then 
+		return false; 
+	elif (q < 3) or (q = 6) or (q mod 4) = 2 then
+        return false; #this must be so
+    elif n <> 2 then
+        if (not IsPrimePowerInt(q)) or (n >= q) then
+            return false; #this is right
+        elif IsPrimeInt(q) then
+            return List([1..n],i -> List([0..q-1], y -> List([0..q-1], x -> 
+                           (x+i*y) mod q)));
+        else
+            return Squares(q,n);
+        fi;
+    else
+        res:=[[[0]],[[0]]];
+        facs:=Collected(Factors(q));
+        for nr in facs do
+            if nr[2] = 1 then 
+                S:= List([1..2], i -> List([0..nr[1]-1],y ->
+                            List([0..nr[1]-1], x -> (x+i*y) mod nr[1])));
+            else
+                S:=Squares(nr[1]^nr[2],2);
+            fi;
+            res:=[Merged(res[1],S[1]),Merged(res[2],S[2])];
+        od;
+        return res;
+    fi;
+end);
+
+InstallOtherMethod(MOLS, "size", true, [IsInt], 0, 
+function(q) 
+	return MOLS(q, 2);
+end);
+
+
+#############################################################################
+##
+#F  VerticalConversionFieldMat( <M> ) . . . . . . .  converts matrix to GF(q)
+##
+##  VerticalConversionFieldMat (M) converts a matrix over GF(q^m) to a matrix
+##  over GF(q) with vertical orientation of the tuples
+##
+
+InstallMethod(VerticalConversionFieldMat, "method for matrix and field", true, 
+	[IsMatrix, IsField], 0, 
+function(M, F)  
+    local res, q, Fq, m, n, r, ConvTable, x, temp, i, j, k, zero;
+    q := Characteristic(F);  
+    Fq := GF(q);
+    zero := Zero(Fq);  
+    m := Dimension(F);     
+    n := Length(M[1]);
+    r := Length(M);
+
+    ConvTable := [];
+    x := Indeterminate(Fq);
+	temp := MinimalPolynomial(Fq, Z(q^m));
+    for i in [1.. q^m - 1] do
+        ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod temp, m+1));
+    od;
+
+    res := MutableNullMat(r * m, n, Fq);
+    for i in [1..r] do
+        for j in [1..n] do
+            if M[i][j] <> zero then
+                temp := ConvTable[LogFFE(M[i][j], Z(q^m)) + 1];
+                for k in [1..m] do
+                    res[(i-1)*m + k][j] := temp[k];
+                od;
+            fi;
+        od;
+    od;
+    return res;
+end);
+
+InstallOtherMethod(VerticalConversionFieldMat, "method for matrix", true, 
+	[IsMatrix], 0, 
+function(M) 
+	return VerticalConversionFieldMat(M, DefaultField(Flat(M))); 
+end); 
+
+
+#############################################################################
+##
+#F  HorizontalConversionFieldMat( <M>, <F> )  . . .  converts matrix to GF(q)
+##
+##  HorizontalConversionFieldMat (M, F) converts a matrix over GF(q^m) to a
+##  matrix over GF(q) with horizontal orientation of the tuples
+##
+
+InstallMethod(HorizontalConversionFieldMat, "method for matrix and field", 
+	true, [IsMatrix, IsField], 0, 
+function(M, F) 
+    local res, vec, k, n, coord, i, p, q, m, zero, g, Nul, ConvTable,
+          x;
+    q := Characteristic(F);  
+    m := Dimension(F);  
+    zero := Zero(F);  
+    g := MinimalPolynomial(GF(q), Z(q^m));    
+    Nul := List([1..m], i -> zero);
+    ConvTable := [];
+    x := Indeterminate(GF(q));
+    for i in [1..Size(F) - 1] do
+        ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod g, m));
+    od;
+    res := [];
+    n := Length(M[1]);
+    k := Length(M);
+    for vec in [0..k-1] do
+        for i in [1..m] do res[m*vec+i] := []; od;
+        for coord in [1..n] do
+            if M[vec+1][coord] <> zero then
+                p := LogFFE(M[vec+1][coord], Z(q^m));
+                for i in [1..m] do
+                    if (p+i) mod q^m = 0 then p := p+1; fi;
+                    Append(res[m*vec+i], ConvTable[(p + i) mod (q^m)]);
+                od;
+            else
+                for i in [1..m] do
+                    Append(res[m*vec+i], Nul);
+                od;
+            fi;
+        od;
+    od;
+    return res;
+end);
+
+InstallOtherMethod(HorizontalConversionFieldMat, "method for matrix", true, 
+	[IsMatrix], 0, 
+function(M) 
+	return HorizontalConversionFieldMat(M, DefaultField(Flat(M))); 
+end); 
+
+
+#############################################################################
+##
+#F  IsInStandardForm( <M> [, <boolean>] ) . . . . is matrix in standard form?
+##
+##  IsInStandardForm(M [, identityleft]) determines if M is in standard form;
+##  if identityleft = false, the identitymatrix must be at the right side
+##  of M; otherwise at the left side.
+##
+
+InstallMethod(IsInStandardForm, "method for matrix and boolean", true, 
+	[IsMatrix, IsBool], 0, 
+function(M, identityleft) 
+    local l;
+    l := Length(M);
+    if identityleft = false then  
+        return IdentityMat(l, DefaultField(Flat(M))) =
+               M{[1..l]}{[Length(M[1])-l+1..Length(M[1])]};
+    else    
+        return IdentityMat(l, DefaultField(Flat(M))) = M{[1..l]}{[1..l]};
+    fi;
+end);
+
+InstallOtherMethod(IsInStandardForm, "method for matrix", true, [IsMatrix], 0, 
+function(M) 
+	return IsInStandardForm(M, true); 
+end); 
+
+
+#############################################################################
+##
+#F  PutStandardForm( <M> [, <boolean>] [, <F>] )  .  put <M> in standard form
+##
+##  PutStandardForm(Mat [, idleft] [, F]) puts matrix Mat in standard form,
+##  the size of Mat being (n x m). If idleft is true or is omitted, the
+##  the identity matrix is put left, else right. The permutation is returned.
+##
+
+InstallMethod(PutStandardForm, "method for matrix, idleft and field", true, 
+	[IsMatrix, IsBool, IsField], 0, 
+function(Mat, idleft, F) 
+    local n, m, row, i, j, h, hp, s, zero, P;
+    n := Length(Mat);   # not the word length!
+    m := Length(Mat[1]);
+    if idleft then 
+        return PutStandardForm(Mat,F); 
+     else	
+        s := m-n;
+    fi;
+    zero := Zero(F);
+    P := ();
+    for j in [1..n] do
+        if Mat[j][j+s] =zero then
+            i := j+1;
+            while (i <= n) and (Mat[i][j+s] = zero) do
+                i := i + 1;
+            od;
+            if i <= n then
+                row := Mat[j];
+                Mat[j] := Mat[i];
+                Mat[i] := row;
+            else
+                h := j+s;
+                while Mat[j][h] = zero do
+                    h := h + 1;
+                    if h > m then h := 1; fi;
+                od;
+                for i in [1..n] do
+                    Mat[i] := Permuted(Mat[i],(j+s,h));  
+                od;   
+                P := P*(j+s,h);
+            fi;
+        fi;
+        Mat[j] := Mat[j]/Mat[j][j+s];
+        for i in [1..n] do
+            if i <> j then
+                if Mat[i][j+s] <> zero then
+                    Mat[i] := Mat[i]-Mat[i][j+s]*Mat[j];
+                fi;
+            fi;
+        od;
+    od;
+    return P;
+end);
+
+##
+##Thanks to Frank Luebeck for this code:
+##
+InstallOtherMethod(PutStandardForm, "method for matrix and Field", true, 
+	[IsMatrix, IsField], 0, 
+function(mat, F) 
+local perm, k, i, j, d ;
+ d := Length(mat[1]);
+ TriangulizeMat(mat);
+ perm := ();
+ k := Length(mat[1]);
+ for i in [1..Length(mat)] do
+   j := PositionNonZero(mat[i]);
+   if (j <= d and i <> j) then
+     perm := perm * (i,j);
+   fi;
+ od;
+ if perm <> () then
+   for i in [1..Length(mat)] do
+     mat[i] := Permuted(mat[i], perm);
+   od;
+ fi;
+ return perm;
+end); 
+
+InstallOtherMethod(PutStandardForm, "method for matrix and idleft", true, 
+	[IsMatrix, IsBool], 0, 
+function(M, idleft) 
+	return PutStandardForm(M, idleft, DefaultField(Flat(M))); 
+end); 
+
+InstallOtherMethod(PutStandardForm, "method for matrix", true, [IsMatrix], 0, 
+function(M) 
+	return PutStandardForm(M, true, DefaultField(Flat(M))); 
+end); 
+
+
diff --git a/lib/nordrob.gd b/lib/nordrob.gd
new file mode 100644
index 0000000..31b4705
--- /dev/null
+++ b/lib/nordrob.gd
@@ -0,0 +1,20 @@
+#############################################################################
+##
+#A  nordrob.gd              GUAVA Code library                  Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  The complete Nordstrom-Robinson Code
+##
+#H  @(#)$Id: nordrob.gd,v 1.2 2003/02/12 03:49:20 gap Exp $
+##
+Revision.("guava/lib/nordrob_gd") :=
+    "@(#)$Id: nordrob.gd,v 1.2 2003/02/12 03:49:20 gap Exp $";
+
+#############################################################################
+##
+#F  NordstromRobinsonCode( )  . . . . . . . . . . . . Nordstrom-Robinson code
+##
+DeclareOperation("NordstromRobinsonCode", []); 
+
+
diff --git a/lib/nordrob.gi b/lib/nordrob.gi
new file mode 100644
index 0000000..4f3646f
--- /dev/null
+++ b/lib/nordrob.gi
@@ -0,0 +1,552 @@
+#############################################################################
+##
+#A  nordrob.gi              GUAVA Code library                  Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains the complete Nordstrom-Robinson code
+##
+#H  @(#)$Id: nordrob.gi,v 1.3 2003/02/12 03:49:20 gap Exp $
+##
+Revision.("guava/lib/nordrob_gi") :=
+    "@(#)$Id: nordrob.gi,v 1.3 2003/02/12 03:49:20 gap Exp $";
+
+#############################################################################
+##
+#F  NordstromRobinsonCode( )  . . . . . . . . . . . . Nordstrom-Robinson code
+##
+
+InstallMethod(NordstromRobinsonCode, true, [], 0, 
+function() 
+	local C, elements;
+	elements := Codeword(
+[ [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 
+      Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
+      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 
+      0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
+  [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 
+      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ]);
+      
+	C := ElementsCode(elements, "Nordstrom-Robinson code", GF(2)); 
+	SetWordLength(C, 16);
+	SetSize(C, 256);  
+    SetIsLinearCode(C, false); 
+    SetIsCyclicCode(C, false); 
+    C!.lowerBoundMinimumDistance := 6; 
+    C!.upperBoundMinimumDistance := 6; 
+    SetMinimumDistance(C, 6); 
+	SetWeightDistribution(C,  
+		[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]); 
+    SetInnerDistribution(C, 
+		[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]); 
+    C!.boundsCoveringRadius := [ 4 ]; 
+	SetCoveringRadius(C, 4); 
+	return C;
+end);
+
diff --git a/lib/setup.g b/lib/setup.g
new file mode 100644
index 0000000..425936d
--- /dev/null
+++ b/lib/setup.g
@@ -0,0 +1,34 @@
+#############################################################################
+##
+#A  setup.g                 GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file sets some startup variables
+##
+#H  @(#)$Id: setup.g,v 1.5 2003/02/13 11:57:58 gap Exp $
+##
+Revision.("guava/lib/setup_g") :=
+    "@(#)$Id: setup.g,v 1.5 2003/02/13 11:57:58 gap Exp $";
+
+if not IsBound( InfoCoveringRadius ) then InfoCoveringRadius := Print; fi;
+if not IsBound( InfoMinimumDistance ) then InfoMinimumDistance := Ignore; fi;
+if not IsBound( CRMemSize ) then CRMemSize := 2^15; fi;
+
+#############################################################################
+##
+#V  GUAVA_TEMP_VAR . . . . . . . . variable for interfacing external programs
+##
+GUAVA_TEMP_VAR := 0;
+
+#############################################################################
+##
+#V  GUAVA_BOUNDS_TABLE . . . . . . . . .  contains a list of tables of bounds
+##
+GUAVA_BOUNDS_TABLE := [ [], [] ];
+
+#############################################################################
+##
+#V  GUAVA_REF_LIST  . . . contains a record of references for bounds on codes
+##
+GUAVA_REF_LIST := rec();
diff --git a/lib/tblgener.gd b/lib/tblgener.gd
new file mode 100644
index 0000000..613fd4c
--- /dev/null
+++ b/lib/tblgener.gd
@@ -0,0 +1,20 @@
+#############################################################################
+##
+#A  tblgener.gd             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  Table generation
+##
+#H  @(#)$Id: tblgener.gd,v 1.2 2003/02/12 03:49:21 gap Exp $
+##
+Revision.("guava/lib/tblgener_gd") :=
+    "@(#)$Id: tblgener.gd,v 1.2 2003/02/12 03:49:21 gap Exp $";
+
+#############################################################################
+##
+#F  CreateBoundsTable( <Sz>, <q> [, <info> ] ) . . constructs table of bounds
+##
+DeclareOperation("CreateBoundsTable", [IsInt, IsInt, IsBool]); 
+
diff --git a/lib/tblgener.gi b/lib/tblgener.gi
new file mode 100644
index 0000000..69334cb
--- /dev/null
+++ b/lib/tblgener.gi
@@ -0,0 +1,445 @@
+#############################################################################
+##
+#A  tblgener.gi             GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+##
+##  Table generation
+##
+#H  @(#)$Id: tblgener.gi,v 1.2 2003/02/12 03:49:21 gap Exp $
+##
+Revision.("guava/lib/tblgener_gi") :=
+    "@(#)$Id: tblgener.gi,v 1.2 2003/02/12 03:49:21 gap Exp $";
+
+#############################################################################
+##
+#F  CreateBoundsTable( <Sz>, <q> [, <info> ] ) . . constructs table of bounds
+##
+InstallMethod(CreateBoundsTable, "Sz, fieldsize, info", true, 
+	[IsInt, IsInt, IsBool], 0, 
+function(Sz, q, info) 
+    local RulesList, LBT, UBT, FillPoints, NumberUnchanged, RuleNumber, file,
+          WriteToFile, InitialTable, help, temp;
+
+    help := 
+      Concatenation("\n##\n",
+              "##  Each entry [n][k] of one of the tables below contains\n",
+              "##  a bound (the first table contains lowerbounds, the   \n",
+              "##  second upperbounds) for a code with wordlength n and \n",
+              "##  dimension k. Each entry contains one of the following\n",
+              "##  items:                                               \n",
+              "##                                                       \n",
+              "##  FOR LOWER- AND UPPERBOUNDSTABLE                      \n",
+              "##  [ 0, <d>, <ref> ]  from Brouwers table               \n",
+              "##                                                       \n",
+              "##  FOR LOWERBOUNDSTABLE                                 \n",
+              "##  empty        k= 0, 1, n or d= 2 or (k= 2 and q= 2)   \n",
+              "##  1            shortening a [ n + 1, k + 1 ] code      \n",
+              "##  2            puncturing a [ n + 1, k ] code          \n",
+              "##  3            extending a [ n - 1, k ] code           \n",
+              "##  [ 4, <dd> ]  constr. B, of a [ n+dd, k+dd-1, d ] code\n",
+              "##  [ 5, <k1> ]  an UUV-construction with a [ n / 2, k1 ]\n",
+              "##               and a [ n / 2, k - k1 ] code            \n",
+              "##  [ 6, <n1> ]  concatenation of a [ n1, k ] and a      \n",
+              "##               [ n - n1, k ] code                      \n",
+              "##  [ 7, <n1> ]  taking the residue of a [ n1, k + 1 ] code\n",
+              "##                                                       \n",
+              "##  FOR UPPERBOUNDSTABLE                                 \n",
+              "##  empty        Griesmer bound                          \n",
+              "##  11           shortening a [ n + 1, k + 1 ] code      \n",
+              "##  12           puncturing a [ n + 1, k ] code          \n",
+              "##  13           extending a [ n - 1, k ] code           \n",
+              "##  [ 14, <dd> ] constr. B, with dd = dual distance      \n");
+
+
+    InitialTable := function(to, lb)
+        local n, k, d, i, j, sum, BT;
+        BT := List([1..to], i-> [[i]]);      #RepetitionCodes
+        for k in [2 .. to] do
+            BT[k][k] := [1];         #WholeSpaceCode
+            for n in [k+1 .. to] do
+                if lb then
+                    BT[n][k] := [2];
+                else #upperbound
+                    # Calculate Griesmer bound (for linear codes only)
+                    # n >= Sum([0..k-1],i->DivUp(d,q^i));
+                    d := BT[n-1][k][1] + 1;
+                    sum := 0;
+                    i := 1;
+                    j := 1;
+                    while j <= k do
+                        # Calculate one term
+                        sum := sum + QuoInt(d, i) + SignInt(d mod i);
+                        i := i * q;
+                        if i >= d then
+                            # the rest will be one
+                            sum := sum + k - j;
+                            j := k;
+                        fi;
+                        j := j + 1;
+                    od;
+                    if sum <= n then
+                        BT[n][k] := [d];
+                    else
+                        BT[n][k] := [d - 1];
+                    fi;
+                fi;
+            od;
+            if q = 2 and k > 2 then     #CordaroWagnerCode
+                BT[k][2] := [ 2*Int( (k+1) / 3 ) - Int(k mod 3 / 2 ) ];
+            fi;
+        od;
+        return BT;
+    end;
+    
+    FillPoints := function( BT, lb )
+        local pt, initialfile;
+        GUAVA_TEMP_VAR := [false];
+        if lb then
+            initialfile := Filename(LOADED_PACKAGES.guava, 
+									Concatenation("tbl/codes", 
+												   String(q),".g") );
+        else
+            initialfile := Filename(LOADED_PACKAGES.guava, 
+									Concatenation("tbl/upperbd",
+												   String(q),".g") );
+        fi;
+        if initialfile = fail then
+            Error("no table around for GF(",String(q),")");
+        fi;
+        if GUAVA_TEMP_VAR[1] = false then
+            GUAVA_TEMP_VAR := GUAVA_TEMP_VAR{[ 2 .. Length(GUAVA_TEMP_VAR) ]};
+        fi;
+        for pt in GUAVA_TEMP_VAR do
+            if (pt[1] <= Sz) and (pt[2] <= pt[1]) and
+               ((lb      and pt[3] > BT[pt[1]][pt[2]][1]) or
+               ((not lb) and pt[3] < BT[pt[1]][pt[2]][1])) then
+                BT[pt[1]][pt[2]] := [pt[3], [ 0, pt[3], pt[4] ] ];
+            fi;
+        od;
+        return BT;
+    end;
+        
+    WriteToFile := function(BT)
+        local list, k, n;
+        Print(Concatenation( "][", String(q), "] := [\n#V   n = 1\n[  ]" ) );
+        for n in [2 .. Sz] do
+            list := [];
+            for k in [1 .. n] do
+                if Length( BT[n][k] ) = 2 then
+                    list[k] := BT[n][k][2];
+                fi;
+            od;
+            Print(Concatenation(",\n#V   n = ",String(n),"\n"), list);
+        od;
+        Print("];");
+    end; 
+#F              begin of rules for lowerbound
+
+    RulesList := [];
+
+# If a rule is added which is only valid for a special q (like q=2) the
+# check for q should be around the Add(RulesList, function()....) :
+# if q=2 then Add(RulesList, function() .... end); fi;
+
+    # Extending
+    Add(RulesList, function()
+        local n, k, number;
+        number := 0;
+        for n in [1..Sz-1] do
+            for k in [1..n] do
+                if q=2 and IsOddInt(LBT[n][k][1]) then
+                    if LBT[n+1][k][1] < LBT[n][k][1] + 1 then
+                        LBT[n+1][k] := [LBT[n][k][1] + 1, 3 ];
+                        number := number + 1;
+                    fi;
+                else
+                    if LBT[n+1][k][1] < LBT[n][k][1] then
+                        LBT[n+1][k] := [LBT[n][k][1], 3 ];
+                        number := number + 1;
+                    fi;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Extending\n" ); fi;
+        return number > 0;
+    end);
+    
+    # UUV Construction
+    Add(RulesList, function()
+        local n, k1, k2, d, d1, number;
+        number := 0;
+        for n in [ 3 .. Int( Sz / 2 ) ] do
+            for k1 in [ 1 .. n-2 ] do           # V is a ( n, k1, d1 )-code
+                d1 := LBT[n][k1][1];
+                for k2 in [ k1+1 .. n-1 ] do    # U is a ( n, k2, d2 )-code
+                    d := 2 * LBT[n][k2][1];
+                    if d1 < d  then d := d1;  fi; #faster then Minimum();
+                    if LBT[2 * n][k1 + k2][1] < d then
+                        LBT[2 * n][k1 + k2] := [d, [5, k2] ];
+                        number := number + 1;
+                    fi;
+                od;
+            od;
+        od;
+        if info then Print(number," changes with UUV\n" ); fi;
+        return (number > 0);
+    end);
+    
+    # Concatenation
+    Add(RulesList, function()
+        local n1, n2, k, d, number;
+        number := 0;
+        for k in [ 2 .. Sz ] do
+            for n1 in [ k .. Int( Sz / 2 ) ] do
+                for n2 in [ n1 .. Sz - n1 ] do
+                    d := LBT[n1][k][1] + LBT[n2][k][1];
+                    if LBT[n1 +  n2][k][1] < d then
+                        LBT[n1 + n2][k] := [d, [6, n1 ] ];
+                        number := number + 1;
+                    fi;
+                od;
+            od;
+        od;
+        if info then Print(number," changes with Concatenation\n" ); fi;
+        return number > 0;
+    end);
+    
+    # Puncturing
+    Add( RulesList, 
+         function()
+        local n, k, number;
+        number := 0;
+        for n in Reversed([2..Sz]) do
+            for k in [1..n-1] do
+                if LBT[n-1][k][1] < LBT[n][k][1] - 1 then
+                    LBT[n-1][k] := [LBT[n][k][1] - 1, 2 ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Puncturing\n" ); fi;
+        return (number > 0);
+    end);
+    
+    # Shortening
+    Add(RulesList,
+        function()
+        local n, k, number;
+        number := 0;
+        for n in Reversed([5 .. Sz]) do
+            for k in [3 .. n-2] do
+                if LBT[n-1][k-1][1] < LBT[n][k][1] then
+                    LBT[n-1][k-1] := [LBT[n][k][1], 1 ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Shortening\n" ); fi;
+        return (number > 0);
+    end);
+        
+    # Taking the residue
+    Add(RulesList, function()
+        local n, k, temp, d, dnew, number;
+        number := 0;
+        for n in Reversed([ 4 .. Sz ]) do
+            temp := LBT[n];
+            for k in [ 3 .. n - 1 ] do
+                d := temp[k][1];
+                dnew := QuoInt(d,q)+SignInt(d mod q);# = (d/q) rounded up
+                if ( n - d > k ) and (LBT[ n - d ][ k - 1 ][1] < dnew) then
+                    LBT[ n - d ][ k - 1 ] := [ dnew, [ 7, n ] ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Residue\n" ); fi;
+        return number > 0;
+    end);
+    
+    # Construction B: M&S, Ch. 18, P. 9, Pg. 592
+    Add(RulesList, function()
+        local n, k, dd, number;
+        number := 0;
+        for n in Reversed([2..Sz]) do
+            for k in Reversed([1..n-1]) do
+                dd := UBT[n][n-k][1];     # upper bound for dual distance
+                if n-dd > 0 and k-dd+1 > 0 and
+                   LBT[n-dd][k-dd+1][1] < LBT[n][k][1] then
+                    LBT[n-dd][k-dd+1] := [ LBT[n][k][1], [4, dd] ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Construction B\n" ); fi;
+        return number > 0;
+    end);
+#F              begin of rules for lowerbound (not working)
+#    # ConversionFieldCode (it appears that this rule is not needed)
+#    if q = 2 then
+#        temp := BT4[1];
+#        Add(RulesList,
+#            function()
+#            local n, k, d, number;
+#            number := 0;
+#            for n in [ 2 .. Int(Sz/2) ] do
+#                for k in [ 1 .. n - 1 ] do
+#                    d := temp[n][k][1];
+#                    if LBT[2*n][2*k][1] < d then
+#                        LBT[2*n][2*k] := [ d , 8 ];
+#                        number := number + 1;
+#                    fi;
+#                od;
+#            od;
+#        if info then Print(number," changes with ConversionField\n" ); fi;
+#        return number > 0;
+#        end);
+#    fi;
+#F              begin of rules for upperbound
+
+    # Shortening
+    Add(RulesList, function()
+        local n, k, number;
+        number := 0;
+        for n in [ 2 .. Sz-1 ] do
+            for k in [ 1 .. n - 1 ] do
+                if UBT[ n + 1 ][ k + 1 ][ 1 ] > UBT[ n ][ k ][ 1 ] then
+                    UBT[ n + 1 ][ k + 1 ] := [ UBT[ n ][ k ][ 1 ], 11 ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Shortening\n" ); fi;
+        return number > 0;
+    end);
+
+    # Construction B
+    Add(RulesList, function()
+        local n, k, dd, s, number;
+        number := 0;
+        for n in [2..Sz] do
+            for k in [1..n-1] do
+                for s in [1..Sz-n-1] do
+                    if s >= UBT[n+s][n-k+1][1] and
+                       UBT[n+s][k+s-1][1] > UBT[n][k][1] then
+                        UBT[n+s][k+s-1] := [ UBT[n][k][1], [14, s] ];
+                        number := number + 1;
+                    fi;
+                od;
+            od;
+        od;
+        if info then Print(number," changes with Construction B\n" ); fi;
+        return number > 0;
+    end);
+    
+    # Extending
+    Add(RulesList, function()
+        local n, k, number;
+        number := 0;
+        for n in Reversed([2..Sz]) do
+            for k in [1..n-2] do
+                if q=2 and IsOddInt(UBT[n][k][1]) then
+                    if UBT[n-1][k][1] > UBT[n][k][1]-1 then
+                        UBT[n-1][k] := [ UBT[n][k][1]-1, 13 ];
+                        number := number + 1;
+                    fi;
+                else
+                    if UBT[n-1][k][1] > UBT[n][k][1] then
+                        UBT[n-1][k] := [ UBT[n][k][1], 13 ];
+                        number := number + 1;
+                    fi;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Extending\n" ); fi;
+        return number > 0;
+    end);
+
+    # Puncturing
+    Add(RulesList, function()
+        local n, k, number;
+        number := 0;
+        for n in [ 2 .. Sz-1 ] do
+            for k in [ 2 .. n - 1 ] do
+                if UBT[ n + 1 ][ k ][ 1 ] > UBT[ n ][ k ][ 1 ] + 1 then
+                    UBT[ n + 1 ][ k ] := [ UBT[ n ][ k ][ 1 ] + 1, 12 ];
+                    number := number + 1;
+                fi;
+            od;
+        od;
+        if info then Print(number," changes with Puncturing\n" ); fi;
+        return number > 0;
+    end);
+#F              begin of rules for upperbound (not working)
+#
+#    # Taking the residue
+#    Add(RulesList, function()
+#        local n, k;
+#        for n in [ 2 .. Sz-1 ] do
+#            for k in [ 2 .. n - 1 ] do
+#                if UBT[ n + q * UBT[ n ][ k ][ 1 ] ][ k + 1 ] >
+#                   UBT[ n ][ k ][ 1 ] * q then
+#                    UBT[ n + q * UBT[ n ] [ k ][ 1 ] ][ k + 1 ] :=
+#                      [UBT[ n ][ k ][ 1 ] * q, [7, n + q * UBT[n][k][1]]];
+#                    number := number + 1;
+#                fi;
+#            od;
+#        od;
+#    end);
+#F              begin of body
+    
+    LBT := InitialTable( Sz,  true  );
+    LBT := FillPoints  ( LBT, true  );
+    UBT := InitialTable( Sz,  false );
+    UBT := FillPoints  ( UBT, false );
+    NumberUnchanged := 0;
+    RuleNumber := 1;
+    repeat
+        if RulesList[RuleNumber]() then
+            NumberUnchanged := 0;
+        else
+            NumberUnchanged := NumberUnchanged + 1;
+        fi;
+        if RuleNumber = Length(RulesList) then
+            RuleNumber := 1;
+            if info then Print("\n"); fi;
+        else
+            RuleNumber := RuleNumber + 1;
+        fi;
+    until NumberUnchanged >= Length(RulesList);
+
+    # This way of saving the tables to a file make use of a nasty trick,
+    # used to speed up things heavily
+    
+	##LR - This trick is not yet working in GAP4.  Until it does, 
+	##  the tables will not be printed to the file.  
+	if info then Print("\nSaving the bound tables...\n"); fi;
+    file := Filename(LOADED_PACKAGES.guava,
+					 Concatenation("tbl/bdtable",String(q),".g") );
+    PrintTo(file, "#A  BOUNDS FOR q = ", String(q), help,
+            "\n\nGUAVA_BOUNDS_TABLE[1", WriteToFile(LBT),
+            "\n\nGUAVA_BOUNDS_TABLE[2", WriteToFile(UBT) );
+    return [LBT,UBT];                    #just used for testing the program
+end);
+
+
+InstallOtherMethod(CreateBoundsTable, "Sz, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(Sz, q) 
+	return CreateBoundsTable(Sz, q, false); 
+end); 
+
+InstallOtherMethod(CreateBoundsTable, "Sz, field, info", true, 
+	[IsInt, IsField, IsBool], 0, 
+function(Sz, F, info) 
+	return CreateBoundsTable(Sz, Size(F), info); 
+end); 
+
+InstallOtherMethod(CreateBoundsTable, "Sz, field", true, 
+	[IsInt, IsField], 0, 
+function(Sz, F) 
+	return CreateBoundsTable(Sz, Size(F), false); 
+end); 
+
diff --git a/lib/toric.gd b/lib/toric.gd
new file mode 100644
index 0000000..c9a3569
--- /dev/null
+++ b/lib/toric.gd
@@ -0,0 +1,40 @@
+#############################################################################
+##
+#A  toric.gd                  GUAVA library                      David Joyner
+##
+##  this file contains declarations for toric codes
+##
+#H  @(#)$Id: toric.gd,v 1.1 2003/02/27 22:45:16 gap Exp $
+##
+Revision.("guava/lib/toric_gd") :=
+    "@(#)$Id: toric.gd,v 1.1 2003/02/27 22:45:16 gap Exp $";
+
+
+#############################################################################
+##
+#F  ToricPoints(<n>,<F>)
+##
+##  returns the points in $(F^*)^n$.
+##  
+DeclareGlobalFunction("ToricPoints");
+
+#############################################################################
+##
+#F  ToricCode(<L>,<F>)
+##
+##  This function returns the same toric code as in J. P. Hansen, "Toric
+##  surfaces and error-correcting codes", except that the polytope can be
+##  more general This is a truncated RS code. <L> is a list of integral
+##  vectors (in Hansen's case, <L> is the list of integral vectors in a
+##  polytope) and <F> is the finite field. The characteristic of <F> must
+##  be different from 2.
+##  
+DeclareGlobalFunction("ToricCode");
+
+#############################################################################
+##
+#F  GeneralizedReedMullerCode(<Pts>, <r>, <F>)
+#F  GeneralizedReedMullerCode(<d>, <r>, <F>)
+##
+## 
+DeclareOperation("GeneralizedReedMullerCode",[IsList,IsInt,IsField]);
diff --git a/lib/toric.gi b/lib/toric.gi
new file mode 100644
index 0000000..7a91646
--- /dev/null
+++ b/lib/toric.gi
@@ -0,0 +1,107 @@
+#############################################################################
+##
+#A  toric.gi                  GUAVA library                      David Joyner
+##
+##  this file contains implementations for toric codes
+##
+#H  @(#)$Id: toric.gi,v 1.1 2003/02/27 22:45:16 gap Exp $
+##
+##  added 11-2004:
+##  GeneralizedReedMullerCode with "record" components
+##     points, degree, GeneratorMat
+##  added "record" components exponents, GeneratorMat to ToricCode
+##
+Revision.("guava/lib/toric_gi") :=
+    "@(#)$Id: toric.gi,v 1.1 2003/02/27 22:45:16 gap Exp $";
+
+#############################################################################
+##
+#F  ToricPoints(<n>,<F>)
+##
+InstallGlobalFunction(ToricPoints,function(n,F)
+local T,L,i,x0;
+  T:=[];
+  for x0 in AsList(F ) do
+  if x0<>Zero(F) then Add(T,x0); fi;
+  od;
+  L:=Cartesian(List([1..n],i->T));
+  return L;
+end);
+
+#############################################################################
+##
+#F  ToricCode(<L>,<F>)
+##
+InstallGlobalFunction(ToricCode,function(L,F)
+local u,gens,d,V,n,i,Z,v,B0,B,C,C1,t,e,tmpvar;
+  gens:=L;
+  d:=Size(gens[1]);
+  n:=Size(ToricPoints(d,F));
+  V:=F^n;         # VectorSpace(F,n);
+  Z:=Integers;
+  B0:=[];
+  e:=gens[1];
+  for e in gens do
+  tmpvar:=List(ToricPoints(d,F),t->Product([1..d],i->t[i]^e[i]));
+  Add(B0,tmpvar);
+  od;
+  B:=One(F)*AsList(B0);
+  C:=GeneratorMatCode(B,F); ##uses guava command
+  C!.GeneratorMat:=ShallowCopy(B);
+  C!.exponents:=L;
+  C!.name:=" toric code";
+  return C;
+end);
+
+# for compatibility ...
+BindGlobal("ToricCodewords",function(L,F)
+  return Elements(ToricCode(L,F));
+end);
+
+InstallMethod(GeneralizedReedMullerCode, "list of points,order,field,name", true, 
+	[IsList,IsInt,IsField], 0, 
+function(Pts,r,F)
+## Pts=[p1,...,pn] are points in F^d
+## for usual GRM code, take
+##     pts:=Cartesian(List([1..d],i->Elements(F)));
+## for some d>1.
+## r is the degree of the polys in x1, ..., xd
+## returns code with gen mat having rows
+##  (f(p1),...,f(pn)) with f a monomial x1^e1...xd^ed
+##  with e1+...+ed<=r
+##
+local C, B, q, n, row, B0, L, exps, Ld, i, x, e, d, t;
+  q:=Size(F);
+  d:=Length(Pts[1]); 
+  L:=[0..Minimum(q-1,r)];
+  Ld:=Cartesian(List([1..d],i->L));
+  exps:=Filtered(Ld,x->Sum(x)<=r);
+  n:=Size(Pts);
+  B0:=[];
+  for e in exps do
+    row:=List(Pts,t->Product([1..d],i->t[i]^e[i]));
+    Add(B0,row);
+  od;
+  B:=One(F)*AsList(B0);
+  C:=GeneratorMatCode(B," generalized Reed-Muller code",F);
+  C!.GeneratorMat:=ShallowCopy(B);
+  C!.points:=Pts;
+  C!.degree:=r;
+return C;
+end);
+
+InstallOtherMethod(GeneralizedReedMullerCode, "number of vars,order,field", true, 
+	[IsInt,IsInt,IsField], 0, 
+function(d,r,F)
+## Pts=[p1,...,pn] are *all* points in F^d
+## take
+##     pts:=Cartesian(List([1..d],i->Elements(F)));
+## r is the degree of the polys in x1, ..., xd
+## returns code with gen mat having rows
+##  (f(p1),...,f(pn)) with f a monomial x1^e1...xd^ed
+##  with e1+...+ed<=r
+##
+local pts, i;
+  pts:=Cartesian(List([1..d],i->Elements(F)));
+  return GeneralizedReedMullerCode(pts,r,F);
+end);
\ No newline at end of file
diff --git a/lib/util.gd b/lib/util.gd
new file mode 100644
index 0000000..51b1a3e
--- /dev/null
+++ b/lib/util.gd
@@ -0,0 +1,77 @@
+#############################################################################
+##
+#A  util.gd                  GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains miscellaneous functions
+##
+#H  @(#)$Id: util.gd,v 1.4 2003/02/12 03:49:21 gap Exp $
+##
+Revision.("guava/lib/util_gd") :=
+    "@(#)$Id: util.gd,v 1.4 2003/02/12 03:49:21 gap Exp $";
+
+#############################################################################
+##
+#F  SphereContent( <n>, <e> [, <F>] ) . . . . . . . . . . .  contents of ball
+##
+##  SphereContent(n, e [, F]) calculates the contents of a ball of radius e in 
+##  the space (GF(q))^n
+##
+DeclareOperation("SphereContent", [IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  Krawtchouk( <k>, <i>, <n> [, <F>] ) . . . . . .  Krwatchouk number K_k(i)
+##
+##  Krawtchouk(k, i, n [, F]) calculates the Krawtchouk number K_k(i) 
+##  over field of size q (or 2), wordlength n.
+##  Pre: 0 <= k <= n
+##
+DeclareOperation("Krawtchouk", [IsInt, IsInt, IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  PermutedCols( <M>, <P> )  . . . . . . . . . .  permutes columns of matrix
+##
+DeclareOperation("PermutedCols", [IsMatrix, IsPerm]); 
+
+#############################################################################
+##
+#F  ReciprocalPolynomial( <p> [, <n>] ) . . . . . .  reciprocal of polynomial
+##
+DeclareOperation("ReciprocalPolynomial",[IsUnivariatePolynomial, IsInt]); 
+							
+#############################################################################
+##
+#F  CyclotomicCosets( [<q>, ] <n> ) . . . .  cyclotomic cosets of <q> mod <n>
+##
+DeclareOperation("CyclotomicCosets", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  PrimitiveUnityRoot( [<q>, ] <n> ) . .  primitive n'th power root of unity
+##
+DeclareOperation("PrimitiveUnityRoot", [IsInt, IsInt]); 
+
+#############################################################################
+##
+#F  RemoveFiles( <arglist> )  . . . . . . . .  removes all files in <arglist>
+##
+##  used for functions which use external programs (like Leons stuff)
+##
+DeclareGlobalFunction("RemoveFiles"); 
+
+#############################################################################
+##
+#F  NullVector( <n> [, <F> ] )  . .  vector consisting of <n> coordinates <o>
+##
+DeclareOperation("NullVector", [IsInt]); 
+
+#############################################################################
+##
+#F  TransposedPolynomial( <p>, <m> ) . . . . . . . . . tranpose of polynomial
+##
+##  Returns the transpose of polynomial px mod (x^m-1)
+##
+DeclareOperation("TransposedPolynomial", [IsUnivariatePolynomial, IsInt]); 
diff --git a/lib/util.gi b/lib/util.gi
new file mode 100644
index 0000000..f7a3845
--- /dev/null
+++ b/lib/util.gi
@@ -0,0 +1,249 @@
+#############################################################################
+##
+#A  util.gi                 GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##
+##  This file contains miscellaneous functions
+##
+#H  @(#)$Id: util.gi,v 1.5 2003/02/12 03:49:21 gap Exp $
+##
+Revision.("guava/lib/util_gi") :=
+    "@(#)$Id: util.gi,v 1.5 2003/02/12 03:49:21 gap Exp $";
+
+#############################################################################
+##
+#F  SphereContent( <n>, <e> [, <F>] ) . . . . . . . . . . .  contents of ball
+##
+##  SphereContent(n, e [, F]) calculates the contents of a ball of radius e in 
+##  the space (GF(q))^n
+##
+
+InstallMethod(SphereContent, "n, radius, fieldsize", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(n, e, q) 
+	local res, num, den, i, q_1;  
+	q_1 := q - 1;
+    res := 0;
+    num := 1;
+    den := 1;
+    for i in [0..e] do
+        res := res + (num * den);
+        num := num * q_1;
+        den := (den * (n-i)) / (i+1);
+    od;
+    return res;
+end);
+
+InstallOtherMethod(SphereContent, "n, radius, field", true, 
+	[IsInt, IsInt, IsField], 0, 
+function(n,e,F) 
+	return SphereContent(n, e, Size(F)); 
+end); 
+
+InstallOtherMethod(SphereContent, "n, radius", true, [IsInt, IsInt], 0, 
+function(n, e) 
+	return SphereContent(n, e, 2); 
+end); 
+
+
+#############################################################################
+##
+#F  Krawtchouk( <k>, <i>, <n> [, <F>] ) . . . . . .  Krwatchouk number K_k(i)
+##
+##  Krawtchouk(k, i, n [, F]) calculates the Krawtchouk number K_k(i) 
+##  over field of size q (or 2), wordlength n.
+##  Pre: 0 <= k <= n
+##
+
+InstallMethod(Krawtchouk, "k, i, wordlength, fieldsize", true, 
+	[IsInt, IsInt, IsInt, IsInt], 0, 
+function(k, i, n, q) 
+    local q_1;
+	q_1 := q - 1;
+    if k > n or k < 0 then
+        Error("0 <= k <= n");
+    elif not IsPrimePowerInt(q+1) then
+        Error("q must be a prime power");
+    fi;
+    return Sum([0..k],j->Binomial(i,j)*Binomial(n-i,k-j)*(-1)^j*q_1^(k-j));
+end);
+
+InstallOtherMethod(Krawtchouk, "k, i, wordlength, field", true, 
+	[IsInt, IsInt, IsInt, IsField], 0, 
+function(k, i, n, F) 
+	return Krawtchouk(k, i, n, Size(F));
+end); 
+
+InstallOtherMethod(Krawtchouk, "k, i, wordlength", true, 
+	[IsInt, IsInt, IsInt], 0, 
+function(k, i, n) 
+	return Krawtchouk(k, i, n, 2); 
+end); 
+
+#############################################################################
+##
+#F  PermutedCols( <M>, <P> )  . . . . . . . . . .  permutes columns of matrix
+##
+
+InstallMethod(PermutedCols, "matrix, permutation", true, [IsMatrix, IsPerm], 0, 
+function(M, P)
+    if P = () then
+        return M;
+    else
+        return List(M, i -> Permuted(i,P));
+    fi;
+end);
+
+#############################################################################
+##
+#F  ReciprocalPolynomial( <p> [, <n>] ) . . . . . .  reciprocal of polynomial
+##
+
+InstallMethod(ReciprocalPolynomial, "poly, wordlength", true, 
+	[IsUnivariatePolynomial, IsInt], 0, 
+function(p, n) 
+	local cl, F, fam, w;  
+	w := Codeword(p, n+1); 
+	cl := VectorCodeword(w); 
+	F := CoefficientsRing(DefaultRing(PolyCodeword(w))); 
+	fam := ElementsFamily(FamilyObj(F)); 
+	return LaurentPolynomialByCoefficients(fam, Reversed(cl), 0); 
+end); 
+
+
+InstallOtherMethod(ReciprocalPolynomial, "poly", true, 
+	[IsUnivariatePolynomial], 0, 
+function(p) 
+	local cl, F, fam, w;  
+	w := Codeword(p); 
+	cl := VectorCodeword(w); 
+	F := CoefficientsRing(DefaultRing(PolyCodeword(w))); 
+	fam := ElementsFamily(FamilyObj(F)); 
+	return LaurentPolynomialByCoefficients(fam, Reversed(cl), 0); 
+end); 
+
+
+#############################################################################
+##
+#F  CyclotomicCosets( [<q>, ] <n> ) . . . .  cyclotomic cosets of <q> mod <n>
+##
+
+InstallMethod(CyclotomicCosets, "cyclotomic cosets of q mod n", 
+	true, [IsInt,IsInt], 0, 
+function(q, n) 
+    local addel, set, res, nrelements, elements, start;
+    if Gcd(q,n) <> 1 then
+        Error("q and n must be relative primes");
+    fi;
+    res := [[0]];
+    nrelements := 1;
+    elements := Set([1..n-1]);
+    repeat
+        start := elements[1];
+        addel := start;
+        set := [];
+        repeat
+            Add(set, addel);
+            RemoveSet(elements, addel);
+            addel := addel * q mod n;
+            nrelements := nrelements + 1;
+        until addel = start;
+        Add(res, set);
+    until nrelements >= n;
+    return res;
+end);
+
+InstallOtherMethod(CyclotomicCosets, "cyclotomic cosets of 2 mod n", 
+	true, [IsInt], 0, 
+function(n) 
+	return CyclotomicCosets(2, n); 
+end); 
+ 
+
+#############################################################################
+##
+#F  PrimitiveUnityRoot( [<q>, ] <n> ) . .  primitive n'th power root of unity
+##
+
+InstallMethod(PrimitiveUnityRoot, "method for fieldsize, n (th power)", true, 
+	[IsInt, IsInt], 0, 
+function(q,n)
+    local qm;
+    qm := q ^ OrderMod(q,n);
+	if not qm in [2..65536] then
+    Error("GUAVA cannot compute in a finite field of size larger than 2^16");
+    fi;
+    return Z(qm)^((qm - 1) / n);
+end);
+
+InstallOtherMethod(PrimitiveUnityRoot, "method for field, n (th power)", true, 
+	[IsField, IsInt], 0, 
+function(F, n) 
+	return PrimitiveUnityRoot(Size(F), n); 
+end); 
+
+InstallOtherMethod(PrimitiveUnityRoot, "method for n (th power)", true, 
+	[IsInt], 0, 
+function(n) 
+	return PrimitiveUnityRoot(2, n); 
+end); 
+
+#############################################################################
+##
+#F  RemoveFiles( <arglist> )  . . . . . . . .  removes all files in <arglist>
+##
+##  used for functions which use external programs (like Leons stuff)
+##
+
+InstallGlobalFunction(RemoveFiles, 
+function(arg)
+    local f;
+    for f in arg do
+        Exec(Concatenation("rm -f ",f));
+    od;
+end);
+
+#############################################################################
+##
+#F  NullVector( <n> [, <F> ] )  . .  vector consisting of <n> coordinates <o>
+##
+
+InstallMethod(NullVector, "length", true, [IsInt], 0, 
+function(n) 
+	return List([1..n], i->0); 
+end); 
+
+InstallOtherMethod(NullVector, "length, field", true, [IsInt, IsField], 0, 
+function(n, F) 
+	return List([1..n], i->Zero(F)); 
+end); 
+
+#############################################################################
+##
+#F  TransposedPolynomial( <p>, <m> ) . . . . . . . . . tranpose of polynomial
+##
+##  Returns the transpose of polynomial px mod (x^m-1)
+##
+InstallMethod(TransposedPolynomial, "poly, length", true, 
+	[IsUnivariatePolynomial, IsInt], 0,
+function(p, m)
+	local i, c, v, F, fam;
+
+	c := CoefficientsOfLaurentPolynomial(p)[1];
+	c := MutableCopyMat(c);
+
+	if Length(c) <> m then
+		Append(c, List( [1..(m-Length(c))], i->Zero(c[1]) ));
+	fi;
+
+	v := [c[1]];
+	i := Length(c);
+	while (i > 1) do
+		v := Concatenation(v, [ c[i] ]);
+		i := i-1;
+	od;
+	F   := CoefficientsRing(DefaultRing(PolyCodeword(Codeword(v, m))));
+	fam := ElementsFamily(FamilyObj(F));
+	return LaurentPolynomialByCoefficients(fam, v, 0);
+end);
diff --git a/lib/util2.gd b/lib/util2.gd
new file mode 100644
index 0000000..428f65f
--- /dev/null
+++ b/lib/util2.gd
@@ -0,0 +1,116 @@
+#############################################################################
+##
+#A  util2.gd                GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+#A                                                         &David Joyner
+## 
+##  This file contains miscellaneous functions
+##
+#H  @(#)$Id: util2.gd,v 1.3 2003/02/12 03:49:21 gap Exp $
+##
+## several functions added 12-16-2005 
+##  
+
+Revision.("guava/lib/util2_gd") :=
+    "@(#)$Id: util2.gd,v 1.3 2003/02/12 03:49:21 gap Exp $";
+
+########################################################################
+##
+#F  AllOneVector( <n> [, <field> ] )
+##
+##  Return a vector with all ones.
+##
+DeclareOperation("AllOneVector", [IsInt, IsField]); 
+
+########################################################################
+##
+#F  AllOneCodeword( <n>, <field> )
+##
+##  Return a codeword with <n> ones.
+##
+DeclareOperation("AllOneCodeword", [IsInt, IsField]); 
+
+#############################################################################
+##
+#F  IntCeiling( <r> )
+##
+##  Return the smallest integer greater than or equal to r.
+##  3/2 => 2,  -3/2 => -1.
+##
+DeclareOperation("IntCeiling", [IsRat]); 
+
+########################################################################
+##
+#F  IntFloor( <r> ) 
+##
+##  Return the greatest integer smaller than or equal to r.
+##  3/2 => 1, -3/2 => -2.
+##
+DeclareOperation("IntFloor", [IsRat]); 
+
+########################################################################
+##
+#F  KroneckerDelta( <i>, <j> )
+##
+##  Return 1 if i = j,
+##         0 otherwise
+##
+DeclareOperation("KroneckerDelta", [IsInt, IsInt]); 
+
+########################################################################
+##
+#F  BinaryRepresentation( <elements>, <length> )
+##
+##  Return a binary representation of an element
+##  of GF( 2^k ), where k <= length.
+##  
+##  If elements is a list, then return the binary
+##  representation of every element of the list.
+##
+##  This function is used to make to Gabidulin codes.
+##  It is not intended to be a global function, but including
+##  it in all five Gabidulin codes is a bit over the top
+##
+##  Therefore, no error checking is done.
+##
+
+########################################################################
+##
+#F  SortedGaloisFieldElements( <size> )
+##
+##  Sort the field elements of size <size> according to
+##  their log.
+##
+##  This function is used to make to Gabidulin codes.
+##  It is not intended to be a global function, but including
+##  it in all five Gabidulin codes is not a good idea.
+## 
+
+########################################################################
+##
+#F  VandermondeMat( <Pts> , <a> )
+##  
+## Input: Pts=[x1,..,xn], a >0 an integer
+## Output: Vandermonde matrix (xi^j), 
+##         for xi in Pts and 0 <= j <= a
+##         (an nx(a+1) matrix)
+##
+DeclareOperation("VandermondeMat", [IsList, IsInt]); 
+
+###########################################################
+##
+#F    MultiplicityInList(L,a)
+##  
+## Input: a list L
+##        an element a of L
+## Output: the multiplicity a occurs in L
+##
+
+###########################################################
+##
+#F    MostCommonInList(L,a)
+##  
+## Input: a list L
+## Output: an a in L which occurs at least as much as any other in L
+##
\ No newline at end of file
diff --git a/lib/util2.gi b/lib/util2.gi
new file mode 100644
index 0000000..47b9367
--- /dev/null
+++ b/lib/util2.gi
@@ -0,0 +1,484 @@
+#############################################################################
+##
+#A  util2.gi                GUAVA library                       Reinald Baart
+#A                                                        &Jasper Cramwinckel
+#A                                                           &Erik Roijackers
+##                                                              &David Joyner
+##
+##  This file contains miscellaneous functions
+##
+#H  @(#)$Id: util2.gi,v 1.99 09/23/2004 gap Exp $
+##
+## minor bug in SortedGaloisFieldElements fixed 9-24-2004
+## several functions added 12-16-2005 MostCommonInList,
+##       MultiplicityInList, VandermondeMat
+## added 5-13-2005:
+##   RotateList, CirculantMatrix, ZechLog,
+##   MatrixRepresentationOfElement,IrreduciblePolynomialsNr,
+##   PrimitivePolynomialsNr, TraceCode, CodeLength
+## added 12-4-2005, 1-3-206: GuavaVersion. guava_version
+## 22 May 2006 (CJ): modified GuavaVersion so that the version
+##   information is obtained directly from "PackageInfo"
+## 26 Dec 2007 (CJ): added RightRotateList and NegacirculantMatrix
+##   functions
+##
+
+Revision.("guava/lib/util2_gi") :=
+    "@(#)$Id: util2.gi,v 1.99 09/23/2004 gap Exp $";
+
+########################################################################
+##
+#F  AllOneVector( <n> [, <field> ] )
+##
+##  Return a vector with all ones.
+##
+
+InstallMethod(AllOneVector, "length, Field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    if n <= 0 then
+        Error( "AllOneVector: <n> must be a positive integer" );
+    fi;
+    return List( [ 1 .. n ], x -> One(F) );
+end);
+
+InstallOtherMethod(AllOneVector, "length, fieldsize", true, [IsInt, IsInt], 0, 
+function(n, q) 
+	return AllOneVector(n, GF(q)); 
+end); 
+
+InstallOtherMethod(AllOneVector, "length", true, [IsInt], 0, 
+function(n) 
+	return AllOneVector(n, Rationals); 
+end); 
+
+
+########################################################################
+##
+#F  AllOneCodeword( <n>, <field> )
+##
+##  Return a codeword with <n> ones.
+##
+
+InstallMethod(AllOneCodeword, "wordlength, field", true, [IsInt, IsField], 0, 
+function(n, F) 
+    if n <= 0 then
+        Error( "AllOneCodeword: <n> must be a positive integer" );
+    fi;
+    return Codeword( AllOneVector( n, F ), F );
+end);
+
+InstallOtherMethod(AllOneCodeword, "wordlength, fieldsize", true, 
+	[IsInt, IsInt], 0, 
+function(n, q) 
+	return AllOneCodeword(n, GF(q)); 
+end); 
+
+InstallOtherMethod(AllOneCodeword, "wordlength", true, [IsInt], 0, 
+function(n) 
+	return AllOneCodeword(n, GF(2)); 
+end); 
+
+
+#############################################################################
+##
+#F  IntCeiling( <r> )
+##
+##  Return the smallest integer greater than or equal to r.
+##  3/2 => 2,  -3/2 => -1.
+##
+
+InstallMethod(IntCeiling, "method for integer", true, [IsInt], 0, 
+function(r) 
+	# don't round integers 
+	return r; 
+end); 
+
+InstallMethod(IntCeiling, "method for rational", true, [IsRat], 0, 
+function(r) 
+	if r > 0 then
+		# round positive numbers to smallest integer 
+		# greater than r (3/2 => 2)
+		return Int(r)+1;
+	else
+		# round negative numbers to smallest integer
+		# greater than r (-3/2 => -1)
+		return Int(r);
+	fi;
+end);
+
+
+########################################################################
+##
+#F  IntFloor( <r> ) 
+##
+##  Return the greatest integer smaller than or equal to r.
+##  3/2 => 1, -3/2 => -2.
+##
+
+InstallMethod(IntFloor, "method for integer", true, [IsInt], 0, 
+function(r) 
+	# don't round integers
+	return r;
+end); 
+
+InstallMethod(IntFloor, "method for rational", true, [IsRat], 0, 
+function(r) 
+	if r > 0 then
+		# round positive numbers to largest integer
+		# smaller than r (3/2 => 1)
+		return Int(r);
+	else
+		# round negative numbers to largest integer
+		# smaller than r (-3/2 => -2)
+		return Int(r-1);
+    fi;
+end);
+
+
+########################################################################
+##
+#F  KroneckerDelta( <i>, <j> )
+##
+##  Return 1 if i = j,
+##         0 otherwise
+##
+
+InstallMethod(KroneckerDelta, true, [IsInt, IsInt], 0, 
+function ( i, j )
+    
+    if i = j then
+        return 1;
+    else
+        return 0;
+    fi;
+    
+end);
+
+
+########################################################################
+##
+#F  BinaryRepresentation( <elements>, <length> )
+##
+##  Return a binary representation of an element
+##  of GF( 2^k ), where k <= length.
+##  
+##  The representation is actually the binary 
+##  representation of k+1, where k is the exponent 
+##  of the element, taken in the field 2^length.  
+##  For example, Z(16)^10 = Z(4)^2.  If length = 4, 
+##  the binary representation 1011 = 11(base 10) 
+##  is returned.  If length = 2, the binary 
+##  representation 11 = 3(base 10) is returned. 
+##  
+##  If elements is a list, then return the binary
+##  representation of every element of the list.
+##
+##  This function is used to make to Gabidulin codes.
+##  It is not intended to be a global function, but including
+##  it in all five Gabidulin codes is a bit over the top
+##
+##  Therefore, no error checking is done.
+##
+
+BinaryRepresentation := function ( elementlist, length )
+    
+    local field, i, log, vector, element;
+    
+    if IsList( elementlist ) then
+        return( List( elementlist,
+                      x -> BinaryRepresentation( x, length ) ) );
+    else
+        
+        element := elementlist;
+        field := Field( element );
+
+        vector := NullVector( length, GF(2) );
+    
+        if element = Zero(field) then 
+            # exception, log is not defined for zeroes
+            return vector;
+        else
+            log := LogFFE( element, Z(2^length) ) + 1; 
+        
+            for i in [ 1 .. length ] do
+                if log >= 2^( length - i ) then
+                    vector[ i ] := One(GF(2)); 
+                    log := log - 2^( length - i );
+                fi;
+            od;
+        
+            return vector;
+        fi;
+    fi;
+end;
+
+
+########################################################################
+##
+#F  SortedGaloisFieldElements( <size> )
+##
+##  Sort the field elements of size <size> according to
+##  their log.
+##
+##  This function is used to make to Gabidulin codes.
+##  It is not intended to be a global function, but including
+##  it in all five Gabidulin codes is not a good idea.
+##
+
+SortedGaloisFieldElements := function ( size )
+    
+    local field, els, sortlist, alpha;
+    
+    if IsInt( size ) then
+        field := GF( size );
+    else
+        field := size;
+        size := Size( field );
+    fi;
+    alpha:=PrimitiveRoot( field );
+# this line was moved from immed after the local statement 9-2004    
+    els := ShallowCopy(AsSSortedList( field ));
+    sortlist := NullVector( size );
+    # log 1 = 0, so we add one to each log to avoid
+    # conflicts with the 0 for zero.
+
+    sortlist := List( els, function( x )
+        if x = Zero(field) then
+            return 0;
+        else
+            return LogFFE( x, alpha ) + 1;
+        fi;
+        end );
+
+    sortlist{ [ 2 .. size ] } := List( els { [ 2 .. size ] },
+                                 x -> LogFFE( x, alpha ) + 1 );
+    SortParallel( sortlist, els );
+    
+    return els;
+end;
+
+########################################################################
+##
+#F  VandermondeMat( <Pts> , <a> )
+##  
+## Input: Pts=[x1,..,xn], a >0 an integer
+## Output: Vandermonde matrix (xi^j), 
+##         for xi in Pts and 0 <= j <= a
+##         (an nx(a+1) matrix)
+##
+InstallMethod(VandermondeMat, true, [IsList, IsInt], 0, 
+function(Pts,a)
+ local V,n,i,j;
+ n:=Length(Pts);
+ V:=List([1..(a+1)],j->List([1..n],i->Pts[i]^(j-1)));
+ return TransposedMat(V);
+end);
+
+###########################################################
+##
+#F    MultiplicityInList(L,a)
+##  
+## Input: a list L
+##        an element a of L
+## Output: the multiplicity a occurs in L
+##
+MultiplicityInList:=function(L,a)
+local mult,b;
+  mult:=0;
+  for b in L do
+   if b=a then mult:=mult+1; fi;
+  od;
+  return mult;
+end;
+
+###########################################################
+##
+#F    MostCommonInList(L,a)
+##  
+## Input: a list L
+## Output: an a in L which occurs at least as much as any other in L
+##
+MostCommonInList:=function(L)
+local mults,max,maxi,x;
+  mults:=List(L,x->MultiplicityInList(L,x));
+  max:=Maximum(mults);
+  maxi:=Position(mults,max);
+  return L[maxi];
+end;
+
+###########################################################
+##
+#F    RotateList(L)
+##  
+## Input: a list L
+## Output: cyclic rotation of the list (to the right)
+##
+RotateList:=function(L)
+local rL,i,n;
+ n:=Length(L);
+ rL:=[];
+ for i in [1..n] do
+  if i<n then rL[i]:=L[i+1]; fi;
+  if i=n then rL[i]:=L[1]; fi;
+ od; 
+ return rL;
+end;
+
+###########################################################
+##
+#F RightRotateList(L)
+##  
+## Input: a list L
+## Output: cyclic rotation of the list (to the right)
+##         RotateList function seems to rotate to the left ??
+##         Am I loosing my direction now? left, right?
+##
+RightRotateList:=function(L)
+	local rL,i,n;
+ 	
+	n :=Length(L);
+ 	rL:=[];
+ 	rL[1] := L[n];
+	for i in [1..(n-1)] do
+		rL[n-i+1] := L[n-i];
+	od;
+ 	
+	return rL;
+end;
+
+###########################################################
+##
+#F    CirculantMatrix(k,L)
+##  
+## Input: integer k, a list L of length n
+## Output: kxn matrix whose rows are cyclic rotations of the list L
+##
+CirculantMatrix:=function(k,L)
+local M,i,rL;
+ rL:=L; 
+ M:=[L];
+ for i in [1..(k-1)] do
+  rL:=RotateList(rL);
+  M:=Concatenation(M,[rL]);
+ od;
+ return M;
+end;
+
+###########################################################
+##
+#F    NegacirculantMatrix(k,L)
+##  
+## Input: integer k, a list L of length n
+## Output: kxk matrix whose rows are cyclic (right) rotations
+##         of the list L
+## NOTE: RotateList function is not used as it generates
+##       cyclic rotation to the left. RightRotateList
+##       function is used instead.
+##
+NegacirculantMatrix:=function(k,L)
+	local M, rL, i;
+
+	if k <> Size(L) then
+		Error("Negacirculant matrix must be a square matrix\n");
+	fi;
+
+    rL:= L;
+	M := [L];
+	for i in [1..(k-1)] do;
+		# generate nega cyclic shift (to the right)
+		rL := RightRotateList(rL);
+		rL[1] := -rL[1];
+		M := Concatenation(M, [rL]);
+	od;
+	return M;
+end;
+
+###############################################
+### some "convenience functions":
+
+CodeLength:= function (C)
+ return WordLength(C);
+end;
+
+TraceCode:= function (C,F)
+# Input: C is a linear code defined over an extension E of F
+# (F is base field)
+# Output: The linear code generated by Tr_{E/F}(c), c in C
+# ****extremely slow**** so hesitant to include in codesfun.gi
+local FF, TC, TrC, i, n, c;
+ n:= WordLength(C);
+ FF:= LeftActingDomain(C);
+ TC:= List(C,c->Codeword(List([1..n],i->Trace(FF,F,c[i]))));
+ TrC:=ElementsCode(TC, F);
+ IsLinearCode(TrC);
+ return TrC;
+end;
+
+###################### finite field functions
+## see also ConwayPolynomial
+## IsPrimitivePolynomial, for p < 256 
+## IsCheapConwayPolynomial
+## RandomPrimitivePolynomial
+##
+
+PrimitivePolynomialsNr:=function(n,q)
+#n is an integer>1
+#F is a finite field
+#FACT (Golomb): The number of irreducible polynomials mod p of degree n 
+#with (maximum) period p^n-1 is lambda(n,p)=phi(p^n-1)/n).
+local period;
+ #q:=Size(F);
+ if n<2 then 
+   Error("\n\n First arg must be > 1.\n");
+ fi;
+ return Phi(q^n-1)/n;
+end;
+
+IrreduciblePolynomialsNr:=function(n,q)
+#FACT (Golomb): The number of irreducible polynomials in GF(q)[x] of degree n 
+#is Psi0(n,p).
+ local d;
+ return (1/n)*Sum(DivisorsInt(n),d->q^d*MoebiusMu(n/d));
+end;
+
+MatrixRepresentationOfElement:=function(a,F)
+#returns the matrix representation of
+#the element a
+local q,p,d,A,i,j,f,coeffs,c0,Id;
+ p:=Characteristic(F);
+ if p>0 then 
+   q:=Size(F);
+  # d:=LogInt(q,p);
+   f:=MinimalPolynomial(GF(p),a);
+   A:=CompanionMat(f);
+  # Id:=IdentityMat(d,F); 
+   return A;
+ fi;
+ if p=0 then 
+   f:=MinimalPolynomial(Rationals,a);
+   A:=CompanionMat(f);
+  # Id:=IdentityMat(d,F); 
+   return A;
+ fi;
+end;
+
+ZechLog:=function(x,b,F)
+#Zech log of x to base b, ie the i such that x+1=b^i, 
+# so y+z=y*(1+z/y)=b^k, where k=Log(y,b)+ZechLog(z/y,b)
+# b must be a primitive element of F
+ return LogFFE(x+One(F),b);
+end;
+
+GuavaVersion:=function()
+# prints current version
+#local version;
+# version:="2.5";
+# return version;
+  return PackageInfo("guava")[1].Version;
+end;
+
+guava_version:=function()
+# prints current version
+ return GuavaVersion();
+end;
+
diff --git a/read.g b/read.g
new file mode 100644
index 0000000..32d50f9
--- /dev/null
+++ b/read.g
@@ -0,0 +1,41 @@
+#############################################################################
+##
+#A  read.g                  GUAVA library                       Reinald Baart
+#A                                                         Jasper Cramwinckel
+#A                                                            Erik Roijackers
+#A                                                                Eric Minkes
+#A                                                                 Lea Ruscio
+#A                                                               David Joyner
+##
+##  This file is read by GAP upon startup. It installs all functions of
+##  the GUAVA library 
+##
+#H  @(#)$Id: read.g,v 1.5 2003/02/27 22:45:16 gap Exp $
+##
+## added read curves.gi 5-2005
+##
+
+#############################################################################
+##
+#F  Read calls to load all files.  
+##
+ReadPkg("guava", "lib/util2.gi"); 
+ReadPkg("guava", "lib/setup.g");
+ReadPkg("guava", "lib/codeword.gi");    
+ReadPkg("guava", "lib/codegen.gi");
+ReadPkg("guava", "lib/matrices.gi");
+ReadPkg("guava", "lib/nordrob.gi");
+ReadPkg("guava", "lib/util.gi"); 
+ReadPkg("guava", "lib/curves.gi"); 
+ReadPkg("guava", "lib/codeops.gi"); 
+ReadPkg("guava", "lib/bounds.gi"); 
+ReadPkg("guava", "lib/codefun.gi"); 
+ReadPkg("guava", "lib/codeman.gi"); 
+ReadPkg("guava", "lib/codecr.gi");
+ReadPkg("guava", "lib/codecstr.gi");
+ReadPkg("guava", "lib/codemisc.gi");
+ReadPkg("guava", "lib/codenorm.gi");
+ReadPkg("guava", "lib/decoders.gi"); 
+ReadPkg("guava", "lib/tblgener.gi"); 
+ReadPkg("guava", "lib/toric.gi"); 
+
diff --git a/src/Makefile b/src/Makefile
new file mode 100755
index 0000000..aed367e
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,17 @@
+# This is the Makefile for Guava binaries
+
+# Set this to the location for Guava binaries
+BINDIR = /usr/local/gap/pkg/guava/bin
+
+CC = gcc
+CFLAGS = -O2
+FILES = leonconv
+
+all :	$(FILES)
+
+install :
+	mkdir -p $(BINDIR)
+	cp $(FILES) $(BINDIR)
+
+clean :
+	rm -f $(FILES)
diff --git a/src/ctjhai/README b/src/ctjhai/README
new file mode 100644
index 0000000..d42ab21
--- /dev/null
+++ b/src/ctjhai/README
@@ -0,0 +1,60 @@
+******************************************************************
+
+  1. The author is not liable for any damage on your side caused
+     as a result of using this program. Use it at your own risk.
+
+  2. This code is provided as is. Bugs may be reported to the
+     author (ctjhai at plymouth.ac.uk), but bear in mind that the
+     author has no duty to remedy for the deficiencies of the
+     program.
+
+  3. Contributions towards this program are greatly appreciated,
+     especially in making this code faster (optimisation). When
+     you have changed the program, or implemented the program for
+     other OS or environment, it would be grateful if you could
+     specify the part you have changed.  
+
+******************************************************************
+
+This directory contains the source code for computing the minimum
+Hamming weight of linear codes over GF(2) and GF(3). The executable
+minimum-weight is called within GUAVA by the MinimumWeight function.
+
+This code is known to run in the following platforms:
+   o X11 under Mac OS X (PowerPC) - 32 bit machine
+   o Windows XP running Cygwin - 32 bit machine
+   o Linux 2.6 - 32 bit machine
+   o Linux 2.6 - 64 bit machine
+
+You can also use this executable without having to launch GUAVA.
+This code expects a generator matrix as an input and the format of
+the matrix may be easily explained with this example.
+
+6 12 3
+1 0 2 1 2 2 0 0 0 0 0 1
+0 1 0 2 1 2 2 0 0 0 0 1
+0 0 1 0 2 1 2 2 0 0 0 1
+0 0 0 1 0 2 1 2 2 0 0 1
+0 0 0 0 1 0 2 1 2 2 0 1
+0 0 0 0 0 1 0 2 1 2 2 1
+
+The above example is the generator matrix of a code of length 12
+and dimension 6 over GF(3). To compute the minimum Hamming weight
+of the code above, you can use the following command:
+
+    minimum-weight GeneratorMatrix.File
+
+where GeneratorMatrix.File contains the generator matrix described
+above. For further information on the other parameters, run
+
+    minimum-weight --help
+
+To produce the executable, refer to the Makefile in GUAVA's main
+directory.
+
+
+CJ, Tjhai
+email: ctjhai at plymouth.ac.uk
+Homepage: www.plymouth.ac.uk/staff/ctjhai
+
+18 March 2008
diff --git a/src/ctjhai/config.h b/src/ctjhai/config.h
new file mode 100644
index 0000000..65928c9
--- /dev/null
+++ b/src/ctjhai/config.h
@@ -0,0 +1,50 @@
+/*
+ * config.h
+ *
+ * This file contains various configuration needed for compilation
+ * 
+ * The minimum Hamming weight computation uses different types of
+ * population count (bit count) methods, see popcount.h/c:
+ * 		POPCOUNT_STD
+ *  	POPCOUNT_LUT8
+ *  	POPCOUNT_LUT16
+ * 
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#ifndef _CONFIG_H
+#define	_CONFIG_H
+
+#include <limits.h>
+
+#undef BITS_PER_LONG
+#if ULONG_MAX == 0xffffffffUL
+#	define	BITS_PER_LONG	32
+#elif ULONG_MAX == 0xffffffffffffffffUL
+#	define	BITS_PER_LONG	64
+#else
+#	error	Unknown architecture, report to ctjhai at plymouth.ac.uk
+#endif
+
+#if BITS_PER_LONG == 64		/* 64-bit */
+#	define ZERO			0x0UL
+#	define ONE			0x1UL
+#	define MOD			0x3F
+#	define LOG2			6
+#else						/* 32-bit */
+#	define ZERO			0x0UL
+#	define ONE			0x1UL
+#	define MOD			0x1F
+#	define LOG2			5
+#endif /* BITS_PER_LONG */
+#define BITSIZE			BITS_PER_LONG
+
+#define POPCOUNT_LUT16	1
+
+#endif
diff --git a/src/ctjhai/minimum-weight-gf2.c b/src/ctjhai/minimum-weight-gf2.c
new file mode 100644
index 0000000..17a1f4d
--- /dev/null
+++ b/src/ctjhai/minimum-weight-gf2.c
@@ -0,0 +1,732 @@
+/*
+ * minimum-weight-gf2.c
+ *
+ * Minimum Hamming weight computation for codes over GF(2)
+ * The core of computation is in this src file
+ *
+ * NOTES:
+ *  � The GF(2) vectors are represented in packed long integer
+ *    format. This long integer is either 32-bit or 64-bit,
+ *    depending on the machine architecture, see config.h
+ *    
+ *  � To efficiently generate combination patterns, revolving door
+ *    algorithm is used here. This algorithm has the property that
+ *    in going to the next combination pattern, there is only one
+ *    position that is exchanged, i.e. one 'In' and one 'Out'. The
+ *    implementation here follows the third algorithm in the paper
+ *    by 
+ *    
+ *    Clement W.H. Lam and Leonard H. Soicher, "Three new combination
+ *       algorithms with minimal change property", Communications
+ *       of the ACM, vol. 25, no. 8, August 1982
+ *
+ *  � The code here is not yet optmised, your contributions in this
+ *    respect are greatly appreciated.
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "minimum-weight-gf2.h"
+#include "popcount.h"
+#include "config.h"
+#include "types.h"
+
+/*--------- Some useful macros for updating upper-bound ---------*/
+#define ROUND_0_MOD_2(d)	(((int)ceil((double)d/2.0))*2)	/* (singly) even code */
+#define ROUND_1_MOD_2(d)	((d & 0x1) ? d : d+1)
+#define ROUND_0_MOD_4(d)	(((int)ceil((double)d/4.0))*4)	/* doubly-even code */
+#define ROUND_3_MOD_4(d)	((d & 0x11)	? ROUND_0_MOD_4(d+1) : ROUND_0_MOD_4(d))
+
+/*-------------------- Function prototypes ----------------------*/
+packed_t **to_packed_integer_gf2(MATRIX *G, int nBlocks);
+int  gf2_gauss_jordan(MATRIX *M, int start);
+void mat_packed_print_gf2(packed_t **M, int nBlocks, int dim, int length);
+void update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info);
+void cyclic_update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info);
+void __mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info);
+void __cyclic_mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info);
+/*---------------------------------------------------------------*/
+
+/* Return the minimum weight of a general binary linear code */
+int mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound) {
+	int i, j, l, rank, pos;
+	double steps;
+	unsigned int sum=0;
+	PACKED_MATRIX_GF2 packedG;
+	INFO info;
+
+	/* 
+	 * Knowing G, now build an array of generator matrices with
+	 * disjoint information sets. These matrices are stored in
+	 * packed integer format
+	 * 
+	 */
+	j = (G.cols - G.rows) + 1;	/* maximum possible number of matrices */
+	packedG.mat = (packed_t ***)malloc(j * sizeof(packed_t **));
+	packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short));
+	packedG.dimension = G.rows;
+	packedG.block_length = G.cols;
+	packedG.nMatrices = packedG.nFullRankMatrices = 0;
+	packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1;
+	for (i=0,pos=0;;i++) {
+		if (pos >= G.cols) break;
+		rank = gf2_gauss_jordan(&G, pos);	/* what is the rank at column 'pos'? */
+		if (!rank) {
+			fprintf(stderr, "ERROR: rank is 0\n\n"); return -1;
+		}
+		
+		/* Convert the reduced echelon matrix into packed integer format */	
+		packedG.mat[i] = to_packed_integer_gf2(&G, packedG.nBlocks);
+		
+		packedG.rank[i] = rank;
+		pos += rank;
+		packedG.nMatrices++;
+		if (rank == G.rows) packedG.nFullRankMatrices++;
+	}
+
+	/*---------------------- core computation starts here -------------------------*/
+	
+	printf("[%d,%d] linear code over GF(2) - minimum weight evaluation\n", G.cols, G.rows);
+	printf("Known lower-bound: %d\n", lower_bound);
+	printf("There are %d generator matrices, ranks : ", packedG.nMatrices);
+	for (i=0; i<packedG.nMatrices; i++) printf("%d ", packedG.rank[i]); printf("\n");
+	info.weight_constraint = m_mod;
+	switch (m_mod) {
+		case C_0MOD2:
+			printf("The weight of the minimum weight codeword satisfies 0 mod 2 congruence\n"); break;
+		case C_1MOD2:
+			printf("The weight of the minimum weight codeword satisfies 1 mod 2 congruence\n"); break;
+		case C_3MOD4:
+			printf("The weight of the minimum weight codeword satisfies 3 mod 4 congruence\n"); break;
+		case C_0MOD4:
+			printf("The weight of the minimum weight codeword satisfies 0 mod 4 congruence\n"); break;
+		default: break;
+	}
+	fflush(stdout);
+	
+	/* Obtain the first lower-bound */
+	info.known_lower_bound = lower_bound;
+	info.lower_bound = 2 * packedG.nFullRankMatrices;
+	for (i=packedG.nFullRankMatrices; i<packedG.nMatrices; i++) {
+		j = 2 - (G.rows - packedG.rank[i]);
+		if (j>0) info.lower_bound += j;
+	}
+
+	/* Information weight 1 */
+	printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout);
+	steps = 0; info.upper_bound = G.cols; i = packedG.nMatrices; 
+	do { --i;
+		j = packedG.dimension;
+		do { --j;
+			steps++;
+			sum = 0; l = packedG.nBlocks;
+			do { --l;
+				sum += popcount(packedG.mat[i][j][l]);
+			} while (l);
+			if (sum < info.upper_bound) {
+				info.upper_bound = sum;
+				printf("    Found new minimum weight %d\n", info.upper_bound); fflush(stdout);
+				if (info.upper_bound <= info.known_lower_bound) break;
+			}
+		} while (j);
+		if (sum <= info.known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			info.upper_bound = sum;
+			goto completed;
+		}
+	} while(i);
+	
+	/* Update progress information */
+	info.info_weight_completed = 1;
+	update_info_gf2(&packedG, &info);
+	
+	printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req);
+	printf("Completed w= 1, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+			steps, info.displayed_lower_bound, info.upper_bound); fflush(stdout);
+	if (info.displayed_lower_bound >= info.upper_bound) goto completed;
+	printf("Termination expected with information weight %d at matrix %d\n",
+			info.max_info_weight_req, info.ith_matrix);
+	printf("-----------------------------------------------------------------------------\n");
+	
+	/* The following function is executed for higher minimum weight */
+	__mindist_gf2(&packedG, &info);
+	
+	/*------------------------ end of core computation ----------------------------*/
+
+completed:	
+	/* Deallocating memory */	
+	for (i=0; i<packedG.nMatrices; i++) {
+		for (j=0; j<G.rows; j++) free(packedG.mat[i][j]);
+		free(packedG.mat[i]);
+	}
+	free(packedG.mat);
+	
+	return info.upper_bound;
+}
+
+/* Return the minimum weight of a binary cyclic code */
+int cyclic_mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound) {
+	int j, l, rank;
+	unsigned int sum=0;
+	PACKED_MATRIX_GF2 packedG;
+	INFO info;
+
+	/* 
+	 * For cyclic code, only one information set is required, so
+	 * only one generator matrix (in packed integer format) is
+	 * needed.
+	 * 
+	 */
+	j = 1;	/* only one generator matrix */
+	packedG.mat = (packed_t ***)malloc(j * sizeof(packed_t **));
+	packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short));
+	packedG.dimension = G.rows;
+	packedG.block_length = G.cols;
+	packedG.nMatrices = j; 
+	packedG.nFullRankMatrices = 1 + ((G.cols - G.rows)/G.rows);
+	packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1;
+	rank = gf2_gauss_jordan(&G, 0);
+	if (!rank) {
+		fprintf(stderr, "ERROR: rank is 0\n\n"); return -1;
+	}
+		
+	/* Convert the reduced echelon matrix into packed integer format */	
+	packedG.mat[0] = to_packed_integer_gf2(&G, packedG.nBlocks);
+		
+	packedG.rank[0] = rank;
+	if (rank != G.rows) {
+		fprintf(stderr, "ERROR: full rank generator matrix cannot be obtained.\n\n");
+		return -1;
+	}
+
+	/*---------------------- core computation starts here -------------------------*/
+	
+	printf("[%d,%d] cyclic code over GF(2) - minimum weight evaluation\n", G.cols, G.rows);
+	printf("Known lower-bound: %d\n", lower_bound);
+	info.weight_constraint = m_mod;
+	switch (m_mod) {
+		case C_0MOD2:
+			printf("The weight of the minimum weight codeword satisfies 0 mod 2 congruence\n"); break;
+		case C_1MOD2:
+			printf("The weight of the minimum weight codeword satisfies 1 mod 2 congruence\n"); break;
+		case C_3MOD4:
+			printf("The weight of the minimum weight codeword satisfies 3 mod 4 congruence\n"); break;
+		case C_0MOD4:
+			printf("The weight of the minimum weight codeword satisfies 0 mod 4 congruence\n"); break;
+		default: break;
+	}
+	fflush(stdout);
+	info.matrices_req = 1;
+	
+	/* Obtain the first lower-bound */
+	info.known_lower_bound = lower_bound;
+	info.lower_bound = (unsigned int)ceil(((double)G.cols/(double)G.rows)*2.0);
+
+	/* Information weight 1 */
+	printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout);
+	info.upper_bound = G.cols; 
+	j = packedG.dimension;
+	do { --j;
+		sum = 0; l = packedG.nBlocks;
+		do { --l;
+			sum += popcount(packedG.mat[0][j][l]);
+		} while (l);
+		if (sum < info.upper_bound) {
+			info.upper_bound = sum;
+			printf("    Found new minimum weight %d\n", info.upper_bound); fflush(stdout);
+			if (info.upper_bound <= info.known_lower_bound) break;
+		}
+	} while (j);
+	if (sum <= info.known_lower_bound) {
+		printf("The known lower-bound is met, enumeration completed.\n");
+		info.upper_bound = sum;
+		goto completed;
+	}
+	
+	/* Update progress information */
+	info.info_weight_completed = 1;
+	cyclic_update_info_gf2(&packedG, &info);
+	
+	printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req);
+	printf("Completed w= 1, %d codewords enumerated, lower-bound %d, upper-bound %d\n", 
+			packedG.dimension, info.displayed_lower_bound, info.upper_bound); fflush(stdout);
+	if (info.displayed_lower_bound >= info.upper_bound) goto completed;
+	printf("Termination expected with information weight %d\n", info.max_info_weight_req);
+	printf("-----------------------------------------------------------------------------\n");
+	
+	/* The following function is executed for higher minimum weight */
+	__cyclic_mindist_gf2(&packedG, &info);
+	
+	/*------------------------ end of core computation ----------------------------*/
+
+completed:	
+	/* Deallocating memory */	
+	for (j=0; j<G.rows; j++) free(packedG.mat[0][j]);
+	free(packedG.mat[0]);
+	free(packedG.mat);
+	
+	return info.upper_bound;
+}
+
+/* Minimum weight enumeration function for information weight >= 2 */
+void __mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info) {
+#define EVALUATE_MINIMUM_WEIGHT1	{\
+		l=info->matrices_req; do { --l;\
+			steps++;\
+			i = G->nBlocks; w = 0;\
+			do { --i;\
+				c[l][i] = G->mat[l][v[1]][i];\
+				j = m; do { --j; c[l][i] ^= G->mat[l][v[j+2]][i]; } while (j);\
+				w += popcount(c[l][i]);\
+			} while (i);\
+			if (w < info->upper_bound) {\
+				info->upper_bound = w;\
+				printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+				if (w <= info->known_lower_bound) goto lower_bound_met;\
+			}\
+		} while (l);\
+	}
+#define EVALUATE_MINIMUM_WEIGHT		{\
+		l=info->matrices_req; do { --l;\
+			steps++;\
+			i = G->nBlocks; w = 0;\
+			do { --i;\
+				/* Property of revolving door algorithm:       */\
+				/* In two consecutive combination pattern,     */\
+				/* exactly one element In and one element Out. */\
+				c[l][i] ^= (G->mat[l][ Out ][i] ^ G->mat[l][ In ][i]);\
+				w += popcount(c[l][i]);\
+			} while (i);\
+			if (w < info->upper_bound) {\
+				info->upper_bound = w;\
+				printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+				if (w <= info->known_lower_bound) goto lower_bound_met;\
+			}\
+		} while (l);\
+	}
+	double steps;
+	short m, iw, top, In, Out, nMat;
+	register short i, j, l, w;
+	register packed_t **c;
+	short *v, *s;
+
+	w = top = 0;
+	nMat = info->matrices_req;
+	c = (packed_t **)malloc(nMat * sizeof(packed_t*));
+	l = nMat; do { --l; 
+		c[l] = (packed_t *)malloc(G->nBlocks * sizeof(packed_t)); 
+	} while (l);	
+	for (iw=2;;iw++) {	/* starting from information weight 2 */
+		if (iw == info->max_info_weight_req) info->matrices_req = info->ith_matrix;
+		printf("Enumerating codewords with information weight %d (w=%d) using %d matrices\n", 
+				iw, iw, info->matrices_req);
+		fflush(stdout);
+		steps = 0;
+		
+		m = iw - 1;
+		v = (short *) malloc((iw+2)*sizeof(short));
+		s = (short *) malloc((iw+2)*sizeof(short));
+		
+		if ( !(iw & 1) ) {
+			v[iw + 1] = G->dimension; v[iw] = iw - 1;
+			if (iw < G->dimension) top = iw;
+		} else {
+			v[iw] = G->dimension - 1;
+			if (iw < G->dimension) top = iw - 1;
+		}
+		v[1] = s[iw] = 0;
+		for (i=2; i<iw; ++i) { v[i] = i-1; s[i] = i+1; }
+
+		/* first combination */
+		EVALUATE_MINIMUM_WEIGHT1;
+		
+		/* main loop to generate all other combinations */
+		while (top != 0) {
+			if (top == 2) {	/* special handling far v[1] and v[2] */
+				top = s[2]; s[2] = 3;
+				do {
+					Out = v[1];
+					v[1] = v[2]; ++v[2];
+					In = v[2];
+					EVALUATE_MINIMUM_WEIGHT;
+					do {
+						Out = v[1];
+						--v[1];
+						In = v[1];
+						EVALUATE_MINIMUM_WEIGHT;
+					} while (v[1]);
+				} while ( !(v[2] == v[3] - 1) );
+			} else {
+				if (top & 0x1) {
+					Out = v[top];
+					--v[top];
+					if (v[top] > top - 1) {
+						top = top - 1; v[top] = top - 1;
+						In = v[top];
+					} else {
+						v[top-1] = top - 2; i = top;
+						In = v[top-1];
+						top = s[top]; s[i] = i + 1;
+					}
+				} else {
+					Out = v[top-1];
+					v[top-1] = v[top]; ++v[top];
+					In = v[top];
+					if (v[top] == v[top+1] - 1) {
+						s[top-1] = s[top]; s[top] = top + 1;
+					}
+					top -= 2;
+				}
+				EVALUATE_MINIMUM_WEIGHT;
+			}
+		}
+
+		/* Update progress information */
+		info->info_weight_completed = iw;
+		update_info_gf2(G, info);
+		
+		printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+				iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout);
+lower_bound_met:
+		free(v);
+		free(s);
+		if (w <= info->known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			printf("-----------------------------------------------------------------------------\n");
+		   	info->upper_bound = w;
+			for (l=0; l<nMat; l++) free(c[l]);
+			free(c);
+			return;	
+		}
+		if (info->displayed_lower_bound >= info->upper_bound) break;
+		printf("Termination expected with information weight %d at matrix %d\n",
+				info->max_info_weight_req, info->ith_matrix);
+		printf("-----------------------------------------------------------------------------\n");
+	}
+	printf("-----------------------------------------------------------------------------\n");
+	for (l=0; l<nMat; l++) free(c[l]);
+	free(c);
+}
+
+/* Cyclic code: minimum weight enumeration function for information weight >= 2 */
+void __cyclic_mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info) {
+#define EVALUATE_CYCLIC_MINIMUM_WEIGHT1	{\
+		steps++;\
+		i = G->nBlocks; w = 0;\
+		do { --i;\
+			c[i] = G->mat[0][v[1]][i];\
+			j = m; do { --j; c[i] ^= G->mat[0][v[j+2]][i]; } while (j);\
+			w += popcount(c[i]);\
+		} while (i);\
+		if (w < info->upper_bound) {\
+			info->upper_bound = w;\
+			printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+			if (w <= info->known_lower_bound) goto lower_bound_met;\
+		}\
+	}
+#define EVALUATE_CYCLIC_MINIMUM_WEIGHT		{\
+		steps++;\
+		i = G->nBlocks; w = 0;\
+		do { --i;\
+			/* Property of revolving door algorithm:       */\
+			/* In two consecutive combination pattern,     */\
+			/* exactly one element In and one element Out. */\
+			c[i] ^= (G->mat[0][ Out ][i] ^ G->mat[0][ In ][i]);\
+			w += popcount(c[i]);\
+		} while (i);\
+		if (w < info->upper_bound) {\
+			info->upper_bound = w;\
+			printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+			if (w <= info->known_lower_bound) goto lower_bound_met;\
+		}\
+	}
+	double steps;
+	short m, iw, top, In, Out;
+	register short i, j, w;
+	register packed_t *c;
+	short *v, *s;
+
+	w = top = 0;
+	c = (packed_t *)malloc(G->nBlocks * sizeof(packed_t)); 
+	for (iw=2;;iw++) {	/* starting from information weight 2 */
+		printf("Enumerating codewords with information weight %d (w=%d) using 1 matrix\n", 
+				iw, iw);
+		fflush(stdout);
+		steps = 0;
+		
+		m = iw - 1;
+		v = (short *) malloc((iw+2)*sizeof(short));
+		s = (short *) malloc((iw+2)*sizeof(short));
+		
+		if ( !(iw & 1) ) {
+			v[iw + 1] = G->dimension; v[iw] = iw - 1;
+			if (iw < G->dimension) top = iw;
+		} else {
+			v[iw] = G->dimension - 1;
+			if (iw < G->dimension) top = iw - 1;
+		}
+		v[1] = s[iw] = 0;
+		for (i=2; i<iw; ++i) { v[i] = i-1; s[i] = i+1; }
+
+		/* first combination */
+		EVALUATE_CYCLIC_MINIMUM_WEIGHT1;
+		
+		/* main loop to generate all other combinations */
+		while (top != 0) {
+			if (top == 2) {	/* special handling far v[1] and v[2] */
+				top = s[2]; s[2] = 3;
+				do {
+					Out = v[1];
+					v[1] = v[2]; ++v[2];
+					In = v[2];
+					EVALUATE_CYCLIC_MINIMUM_WEIGHT;
+					do {
+						Out = v[1];
+						--v[1];
+						In = v[1];
+						EVALUATE_CYCLIC_MINIMUM_WEIGHT;
+					} while (v[1]);
+				} while ( !(v[2] == v[3] - 1) );
+			} else {
+				if (top & 0x1) {
+					Out = v[top];
+					--v[top];
+					if (v[top] > top - 1) {
+						top = top - 1; v[top] = top - 1;
+						In = v[top];
+					} else {
+						v[top-1] = top - 2; i = top;
+						In = v[top-1];
+						top = s[top]; s[i] = i + 1;
+					}
+				} else {
+					Out = v[top-1];
+					v[top-1] = v[top]; ++v[top];
+					In = v[top];
+					if (v[top] == v[top+1] - 1) {
+						s[top-1] = s[top]; s[top] = top + 1;
+					}
+					top -= 2;
+				}
+				EVALUATE_CYCLIC_MINIMUM_WEIGHT;
+			}
+		}
+
+		/* Update progress information */
+		info->info_weight_completed = iw;
+		cyclic_update_info_gf2(G, info);
+		
+		printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+				iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout);
+lower_bound_met:
+		free(v);
+		free(s);
+		if (w <= info->known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			printf("-----------------------------------------------------------------------------\n");
+		   	info->upper_bound = w;
+			free(c);
+			return;	
+		}
+		if (info->displayed_lower_bound >= info->upper_bound) break;
+		printf("Termination expected with information weight %d\n",
+				info->max_info_weight_req);
+		printf("-----------------------------------------------------------------------------\n");
+	}
+	printf("-----------------------------------------------------------------------------\n");
+	free(c);
+}
+
+/* Update INFO structure, which contains various information on the */
+/* current progress of enumeration.                                 */
+void update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info) {
+	bool end;
+	short i, j, l, d, w;
+	
+	/* Estimate the number of matrices required to complete enumeration */
+	info->matrices_req = 0;
+	for (w=0,i=1;;i++) {
+		w = (i+1) * G->nFullRankMatrices;
+		info->matrices_req = G->nFullRankMatrices;
+		for (j=G->nFullRankMatrices; j<G->nMatrices; j++) {
+			l = i - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) { w += l; info->matrices_req++; }
+		}
+		end = false;
+		switch (info->weight_constraint) {
+			case C_0MOD2: if (ROUND_0_MOD_2(w) >= info->upper_bound) end = true; break;
+			case C_1MOD2: if (ROUND_1_MOD_2(w) >= info->upper_bound) end = true; break;
+			case C_3MOD4: if (ROUND_3_MOD_4(w) >= info->upper_bound) end = true; break;
+			case C_0MOD4: if (ROUND_0_MOD_4(w) >= info->upper_bound) end = true; break;
+			default: if (w >= info->upper_bound) end = true;
+		}
+		if (end) break;
+	}
+
+	/* Estimate the minimum distance lower bound after current enumeration */
+	if (info->info_weight_completed == 1) /* required for safety */
+		info->max_info_weight_req = G->dimension;	
+	if (info->info_weight_completed < info->max_info_weight_req) {
+		info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices;
+		for (j=G->nFullRankMatrices; j<G->nMatrices; j++) {
+			l = info->info_weight_completed - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) info->lower_bound += l;	
+		}
+	} else {	/* last information weight in enumeration */
+		for (j=0; j<info->ith_matrix; j++) {
+			if (j < G->nFullRankMatrices) info->lower_bound++;
+			else {
+				l = i - (G->dimension - G->rank[j]) + 1;
+				if (l > 0) info->lower_bound++;
+			}
+		}
+	}
+
+	/* lower-bound information to display, this value could be different */
+	/* from the actual lower-bound if the code satisfies some weight     */
+	/* constraint such as 0 mod 2, 1 mod 2, 3 mod 4 or 0 mod 4.          */
+	switch (info->weight_constraint) {
+		case C_0MOD2: info->displayed_lower_bound = ROUND_0_MOD_2(info->lower_bound); break;
+		case C_1MOD2: info->displayed_lower_bound = ROUND_1_MOD_2(info->lower_bound); break;
+		case C_3MOD4: info->displayed_lower_bound = ROUND_3_MOD_4(info->lower_bound); break;
+		case C_0MOD4: info->displayed_lower_bound = ROUND_0_MOD_4(info->lower_bound); break;
+		default: info->displayed_lower_bound = info->lower_bound;
+	}
+	
+	/* Estimate the maximum information weight required */
+	d = 0;
+	w = info->lower_bound;
+	for (i=info->info_weight_completed+1;;i++) {
+		for (j=0; j<G->nMatrices; j++) {
+			if (j < G->nFullRankMatrices) 
+				l = 1;	/* this is a trick to reduce the number of lines of codes */
+			else 
+				l = i - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) {
+				w++;
+				switch (info->weight_constraint) {
+					case C_0MOD2: d = ROUND_0_MOD_2(w); break;
+					case C_1MOD2: d = ROUND_1_MOD_2(w); break;
+					case C_3MOD4: d = ROUND_3_MOD_4(w); break;
+					case C_0MOD4: d = ROUND_0_MOD_4(w); break;
+					default: d = w;
+				}
+				if (d >= info->upper_bound) { info->ith_matrix = j + 1; break; }
+			}
+		}
+		if (d >= info->upper_bound) { info->max_info_weight_req = i; break; }
+	}
+}			
+
+/* Update INFO structure, which contains various information on the */
+/* current progress of enumeration.                                 */
+void cyclic_update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info) {
+	short i, d, w;
+	
+	/* Estimate the minimum distance lower bound after current enumeration */
+	info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices;
+	info->lower_bound = (unsigned int)
+		ceil(((double)G->block_length/(double)G->dimension)*((double)info->info_weight_completed+1.0));
+
+	/* lower-bound information to display, this value could be different */
+	/* from the actual lower-bound if the code satisfies some weight     */
+	/* constraint such as 0 mod 2, 1 mod 2, 3 mod 4, 0 mod 4.            */
+	switch (info->weight_constraint) {
+		case C_0MOD2: info->displayed_lower_bound = ROUND_0_MOD_2(info->lower_bound); break;
+		case C_1MOD2: info->displayed_lower_bound = ROUND_1_MOD_2(info->lower_bound); break;
+		case C_3MOD4: info->displayed_lower_bound = ROUND_3_MOD_4(info->lower_bound); break;
+		case C_0MOD4: info->displayed_lower_bound = ROUND_0_MOD_4(info->lower_bound); break;
+		default: info->displayed_lower_bound = info->lower_bound;
+	}
+	
+	/* Estimate the maximum information weight required */
+	d = 0;
+	for (i=info->info_weight_completed+1;;i++) {
+		w = (unsigned int)
+			ceil(((double)G->block_length/(double)G->dimension)*((double)i+1.0));
+		switch (info->weight_constraint) {
+			case C_0MOD2: d = ROUND_0_MOD_2(w); break;
+			case C_1MOD2: d = ROUND_1_MOD_2(w); break;
+			case C_3MOD4: d = ROUND_3_MOD_4(w); break;
+			case C_0MOD4: d = ROUND_0_MOD_4(w); break;
+			default: d = w;
+		}
+		if (d >= info->upper_bound) { info->max_info_weight_req = i; break; }
+	}
+}
+
+/* Convert a binary matrix into packed integer format */
+packed_t **to_packed_integer_gf2(MATRIX *G, int nBlocks) {
+	int i, j;
+	packed_t **M;
+	
+	M = (packed_t **)malloc(G->rows * sizeof(packed_t *));
+	for (i=0; i<G->rows; i++) {
+		M[i] = (packed_t *)malloc(nBlocks * sizeof(packed_t));
+		memset(M[i], 0, nBlocks * sizeof(packed_t));
+		for (j=0; j<G->cols; j++) {
+			if (G->m[i][j]) M[i][j >> LOG2] |= (ONE << (j & MOD));
+		}
+	}
+	return M;
+}
+
+/* Print out a packed GF2 matrix in unpacked format */
+void mat_packed_print_gf2(packed_t **M, int nBlocks, int dim, int length) {
+	unsigned int r, i, j;
+	for (r=0; r<dim; r++) {
+		for (i=0; i<nBlocks-1; i++) {
+			for (j=0; j<BITSIZE; j++) {
+				printf("%d", (M[r][i] & (ONE << j)) ? 1 : 0);
+			}
+		}
+		for (i=nBlocks-1,j=0; j<length-(BITSIZE*(nBlocks-1)); j++) {
+			printf("%d", (M[r][i] & (ONE << j)) ? 1 : 0);
+		}
+		printf("\n");
+	}
+}
+
+/* gauss jordan - turn matrix 'M' into reduced-echelon format at positon 'start' */
+int gf2_gauss_jordan(MATRIX *M, int start) {
+	bool found;
+	int i, r, c, pivot, swap;
+	for (c=0; c<M->rows; ++c) {		/* diagonalise the element from col=1 to rows */
+		if (c+start >= M->cols) return c;
+		if (!M->m[c][c+start]) {	/* pivot is zero, do row swapping */
+			for (found=false,r=c+1; r<M->rows; ++r) { if (M->m[r][c+start]) { found=true; break; } }
+			if (found) {
+				for (i=0; i<M->cols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; }
+			} else {			/* row swapping failed, do column swapping */
+				for (found=false,i=start+c+1; i<M->cols; ++i) {
+					for (r=c; r<M->rows; ++r) { if (M->m[r][i]) { found=true; break; } }
+					if (found) break;
+				}
+				if (!found) return c;
+				for (pivot=i,i=0; i<M->cols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; }
+				for (r=0; r<M->rows; ++r) { 
+					swap=M->m[r][pivot]; M->m[r][pivot]=M->m[r][c+start]; M->m[r][c+start]=swap; 
+				}
+			}
+		}
+		for (r=0; r<M->rows; ++r) {	/* zero the whole rows at column c, except at row c (diagonalisation) */
+			if (r==c) continue;
+			if (M->m[r][c+start]) {
+				pivot = M->m[r][c+start];
+				for (i=0; i<M->cols; ++i) 
+					M->m[r][i] = (M->m[r][i] - M->m[c][i]) & 0x1;
+			}
+		}
+	}
+	return c;
+}
diff --git a/src/ctjhai/minimum-weight-gf2.h b/src/ctjhai/minimum-weight-gf2.h
new file mode 100644
index 0000000..d14692d
--- /dev/null
+++ b/src/ctjhai/minimum-weight-gf2.h
@@ -0,0 +1,32 @@
+/*
+ * minimum-weight-gf2.h
+ *
+ * Minimum Hamming weight computation for codes over GF(2)
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#ifndef _MINIMUM_WEIGHT_GF2_H
+#define _MINIMUM_WEIGHT_GF2_H
+
+#include "types.h"
+
+/*------------- Data structure specified for GF(2) --------------*/
+typedef struct {
+	unsigned short dimension, block_length;
+	unsigned short nBlocks;
+	unsigned short nMatrices, nFullRankMatrices;
+	unsigned short *rank;
+	packed_t ***mat;
+} PACKED_MATRIX_GF2;
+
+int mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound);
+int cyclic_mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound);
+
+#endif
diff --git a/src/ctjhai/minimum-weight-gf3.c b/src/ctjhai/minimum-weight-gf3.c
new file mode 100644
index 0000000..cfb8f02
--- /dev/null
+++ b/src/ctjhai/minimum-weight-gf3.c
@@ -0,0 +1,809 @@
+/*
+ * minimum-weight-gf3.c
+ *
+ * Minimum Hamming weight computation for codes over GF(3)
+ * The core of computation is in this src file
+ *
+ * NOTES:
+ *  � The GF(3) vectors are represented as two packed long
+ *    integers, i.e. GF3_VEC structure in minimum-weight-gf3.h.
+ *    Each of the long integer is either 32-bit or 64-bit,
+ *    depending on the machine architecture, see config.h
+ *
+ *  � This packing of GF(3) vectors and their vector manipulations
+ *    follow the description given in the paper by
+ *    
+ *    K. Harrison, D. Page and N. P. Smart, "Software implementation
+ *       of finite fields of characteristic three, for use in
+ *       pairing-based cryptosystems", London Mathematical Society
+ *       Journal of Computation and Mathematics, vol. 5, pp.181--193,
+ *       2002
+ *    
+ *  � To efficiently generate combination patterns, revolving door
+ *    algorithm is used here. This algorithm has the property that
+ *    in going to the next combination pattern, there is only one
+ *    position that is exchanged, i.e. one 'In' and one 'Out'. The
+ *    implementation here follows the third algorithm in the paper
+ *    by 
+ *    
+ *    Clement W.H. Lam and Leonard H. Soicher, "Three new combination
+ *       algorithms with minimal change property", Communications
+ *       of the ACM, vol. 25, no. 8, August 1982
+ *
+ *    In the current version of the code, the generation of combination
+ *    patterns does not fully exploit the the revolving door property
+ *    yet--further (speed) optimisation is possible.
+ *
+ *  � To generate all n-tupple of non zero elements of GF(3), Bitner's
+ *    algorithm is used. See Algorithm L (Loopless Gray binary
+ *    generation) in Knuth's book.
+ *    
+ *  � The code here is not yet optmised, your contributions in this
+ *    respect are greatly appreciated.
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "minimum-weight-gf3.h"
+#include "popcount.h"
+#include "config.h"
+#include "types.h"
+
+/*--------- Some useful macros for updating upper-bound ---------*/
+#define ROUND_0_MOD_3(d)	(((int)ceil((double)d/3.0))*3)	/* for self-orthogonal ternary code */
+
+/*-------------------- Function prototypes ----------------------*/
+void init_gf3(GF3 *gf);
+void clear_gf3(GF3 *gf);
+GF3_VEC **to_packed_integer_gf3(MATRIX *G, int nBlocks);
+int  gf3_gauss_jordan(GF3 *gf, MATRIX *M, int start);
+void mat_packed_print_gf3(GF3_VEC **M, int nBlocks, int dim, int length);
+void update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info);
+void cyclic_update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info);
+void __mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info);
+void __cyclic_mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info);
+/*---------------------------------------------------------------*/
+
+/* Return the minimum weight of a general ternary linear code */
+int mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound) {
+	int i, j, l, rank, pos;
+	double steps;
+	unsigned int sum=0;
+	PACKED_MATRIX_GF3 packedG;
+	INFO info;
+	GF3 gf;
+
+	/* Initialise GF(3) */
+	init_gf3(&gf);
+	
+	/* 
+	 * Knowing G, now build an array of generator matrices with
+	 * disjoint information sets. These matrices are stored in
+	 * packed integer format
+	 * 
+	 */
+	j = (G.cols - G.rows) + 1;	/* maximum possible number of matrices */
+	packedG.mat = (GF3_VEC ***)malloc(j * sizeof(GF3_VEC **));
+	packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short));
+	packedG.dimension = G.rows;
+	packedG.block_length = G.cols;
+	packedG.nMatrices = packedG.nFullRankMatrices = 0;
+	packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1;
+	for (i=0,pos=0;;i++) {
+		if (pos >= G.cols) break;
+		rank = gf3_gauss_jordan(&gf, &G, pos);	/* what is the rank at column 'pos'? */
+		if (!rank) {
+			fprintf(stderr, "ERROR: rank is 0\n\n"); return -1;
+		}
+		
+		/* Convert the reduced echelon matrix into packed integer format */	
+		packedG.mat[i] = to_packed_integer_gf3(&G, packedG.nBlocks);
+		
+		packedG.rank[i] = rank;
+		pos += rank;
+		packedG.nMatrices++;
+		if (rank == G.rows) packedG.nFullRankMatrices++;
+	}
+
+	/*---------------------- core computation starts here -------------------------*/
+	
+	printf("[%d,%d] linear code over GF(3) - minimum weight evaluation\n", G.cols, G.rows);
+	printf("Known lower-bound: %d\n", lower_bound);
+	printf("There are %d generator matrices, ranks : ", packedG.nMatrices);
+	for (i=0; i<packedG.nMatrices; i++) printf("%d ", packedG.rank[i]); printf("\n");
+	info.weight_constraint = m_mod;
+	if (m_mod == C_0MOD3) 
+		printf("The weight of the minimum weight codeword satisfies 0 mod 3 congruence\n");
+	fflush(stdout);
+	
+	/* Obtain the first lower-bound */
+	info.known_lower_bound = lower_bound;
+	info.lower_bound = 2 * packedG.nFullRankMatrices;
+	for (i=packedG.nFullRankMatrices; i<packedG.nMatrices; i++) {
+		j = 2 - (G.rows - packedG.rank[i]);
+		if (j>0) info.lower_bound += j;
+	}
+
+	/* Information weight 1 */
+	printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout);
+	steps = 0; info.upper_bound = G.cols; i = packedG.nMatrices; 
+	do { --i;
+		j = packedG.dimension;
+		do { --j;
+			steps++;
+			sum = 0; l = packedG.nBlocks;
+			do { --l;
+				sum += (popcount(packedG.mat[i][j][l].v1) + popcount(packedG.mat[i][j][l].v2));
+			} while (l);
+			if (sum < info.upper_bound) {
+				info.upper_bound = sum;
+				printf("    Found new minimum weight %d\n", info.upper_bound); fflush(stdout);
+				if (info.upper_bound <= info.known_lower_bound) break;
+			}
+		} while (j);
+		if (sum <= info.known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			info.upper_bound = sum;
+			goto completed;
+		}
+	} while(i);
+	
+	/* Update progress information */
+	info.info_weight_completed = 1;
+	update_info_gf3(&packedG, &info);
+	
+	printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req);
+	printf("Completed w= 1, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+			steps, info.displayed_lower_bound, info.upper_bound); fflush(stdout);
+	if (info.displayed_lower_bound >= info.upper_bound) goto completed;
+	printf("Termination expected with information weight %d at matrix %d\n",
+			info.max_info_weight_req, info.ith_matrix);
+	printf("-----------------------------------------------------------------------------\n");
+	
+	/* The following function is executed for higher minimum weight */
+	__mindist_gf3(&packedG, &info);
+	
+	/*------------------------ end of core computation ----------------------------*/
+
+completed:	
+	/* Deallocating memory */	
+	for (i=0; i<packedG.nMatrices; i++) {
+		for (j=0; j<G.rows; j++) free(packedG.mat[i][j]);
+		free(packedG.mat[i]);
+	}
+	free(packedG.mat);
+	clear_gf3(&gf);
+	
+	return info.upper_bound;
+}
+
+/* Return the minimum weight of a ternary cyclic code */
+int cyclic_mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound) {
+	int j, l, rank;
+	unsigned int sum=0;
+	PACKED_MATRIX_GF3 packedG;
+	INFO info;
+	GF3 gf;
+
+	/* Initialise GF(3) */
+	init_gf3(&gf);
+	
+	/* 
+	 * For cyclic code, only one information set is required, so
+	 * only one generator matrix (in packed integer format) is
+	 * needed.
+	 * 
+	 */
+	j = 1;	/* only one generator matrix */
+	packedG.mat = (GF3_VEC ***)malloc(j * sizeof(GF3_VEC **));
+	packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short));
+	packedG.dimension = G.rows;
+	packedG.block_length = G.cols;
+	packedG.nMatrices = j; 
+	packedG.nFullRankMatrices = 1 + ((G.cols - G.rows)/G.rows);
+	packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1;
+	rank = gf3_gauss_jordan(&gf, &G, 0);
+	if (!rank) {
+		fprintf(stderr, "ERROR: rank is 0\n\n"); return -1;
+	}
+		
+	/* Convert the reduced echelon matrix into packed integer format */	
+	packedG.mat[0] = to_packed_integer_gf3(&G, packedG.nBlocks);
+		
+	packedG.rank[0] = rank;
+	if (rank != G.rows) {
+		fprintf(stderr, "ERROR: full rank generator matrix cannot be obtained.\n\n");
+		return -1;
+	}
+
+	/*---------------------- core computation starts here -------------------------*/
+	
+	printf("[%d,%d] cyclic code over GF(3) - minimum weight evaluation\n", G.cols, G.rows);
+	printf("Known lower-bound: %d\n", lower_bound);
+	info.weight_constraint = m_mod;
+	if (m_mod == C_0MOD3) 
+		printf("The weight of the minimum weight codeword satisfies 0 mod 3 congruence\n");
+	fflush(stdout);
+	info.matrices_req = 1;
+	
+	/* Obtain the first lower-bound */
+	info.known_lower_bound = lower_bound;
+	info.lower_bound = (unsigned int)ceil(((double)G.cols/(double)G.rows)*2.0);
+
+	/* Information weight 1 */
+	printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout);
+	info.upper_bound = G.cols; 
+	j = packedG.dimension;
+	do { --j;
+		sum = 0; l = packedG.nBlocks;
+		do { --l;
+			sum += (popcount(packedG.mat[0][j][l].v1) + popcount(packedG.mat[0][j][l].v2));
+		} while (l);
+		if (sum < info.upper_bound) {
+			info.upper_bound = sum;
+			printf("    Found new minimum weight %d\n", info.upper_bound); fflush(stdout);
+			if (info.upper_bound <= info.known_lower_bound) break;
+		}
+	} while (j);
+	if (sum <= info.known_lower_bound) {
+		printf("The known lower-bound is met, enumeration completed.\n");
+		info.upper_bound = sum;
+		goto completed;
+	}
+	
+	/* Update progress information */
+	info.info_weight_completed = 1;
+	cyclic_update_info_gf3(&packedG, &info);
+	
+	printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req);
+	printf("Completed w= 1, %d codewords enumerated, lower-bound %d, upper-bound %d\n", 
+			packedG.dimension, info.displayed_lower_bound, info.upper_bound); fflush(stdout);
+	if (info.displayed_lower_bound >= info.upper_bound) goto completed;
+	printf("Termination expected with information weight %d\n", info.max_info_weight_req);
+	printf("-----------------------------------------------------------------------------\n");
+	
+	/* The following function is executed for higher minimum weight */
+	__cyclic_mindist_gf3(&packedG, &info);
+	
+	/*------------------------ end of core computation ----------------------------*/
+
+completed:	
+	/* Deallocating memory */	
+	for (j=0; j<G.rows; j++) free(packedG.mat[0][j]);
+	free(packedG.mat[0]);
+	free(packedG.mat);
+	clear_gf3(&gf);
+	
+	return info.upper_bound;
+}
+
+/* Minimum weight enumeration function for information weight >= 2 */
+void __mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info) {
+#define EVALUATE_MINIMUM_WEIGHT_GF3	{\
+		memset(a, 0, m * sizeof(short));\
+		f[m] = m; j = m; do { --j; f[j] = j; } while (j);\
+		while (1) {\
+			l=info->matrices_req; do { --l;\
+				steps++;\
+				i = G->nBlocks; w = 0;\
+				do { --i;\
+					/* FIXME: (optimisation)                          */\
+					/* There must a clever (faster) way of doing this */\
+					/* by exploiting the revolving door property      */\
+					c[l][i] = G2[0][l][v[1]][i];\
+					j = m; do { --j;\
+						add_gf3_vec(c[l][i], G2[a[j]][l][v[j+2]][i], c[l][i]);\
+					} while (j);\
+					w += (popcount(c[l][i].v1) + popcount(c[l][i].v2));\
+				} while (i);\
+				if (w < info->upper_bound) {\
+					info->upper_bound = w;\
+					printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+					if (w <= info->known_lower_bound) goto lower_bound_met;\
+				}\
+			} while (l);\
+			j = f[0]; f[0] = 0;\
+			if (!(j-m)) break;\
+			else { f[j] = f[j+1]; f[j+1] = j+1; }\
+			a[j] = 1 - a[j];\
+		}\
+	}
+	double steps;
+	short m, iw, top, nMat;
+	register short i, j, l, w;
+	register GF3_VEC **c;
+	short *v, *s, *a, *f;
+	packed_t t1, t2;
+	
+	/* G2 contains a set of generator matrices of G->nFullRankMatrices disjoint */
+	/* information sets. For each information set, G2 contains (q-1) matrices,  */
+	/* where the identity element of each is non zeros of GF(q)                 */
+	GF3_VEC ****G2;
+	nMat = info->matrices_req;
+	G2 = (GF3_VEC ****) malloc(2 * sizeof(GF3_VEC ***));
+	G2[0] = G->mat;	/* the first one (identity = 1) points to 'G->mat' */
+	G2[1] = (GF3_VEC ***) malloc(nMat * sizeof(GF3_VEC **));
+	for (i=0; i<nMat; i++) {
+		G2[1][i] = (GF3_VEC **) malloc(G->dimension * sizeof(GF3_VEC *));
+		for (j=0; j<G->dimension; j++) {
+			G2[1][i][j] = (GF3_VEC *) malloc(G->nBlocks * sizeof(GF3_VEC));
+			for (l=0; l<G->nBlocks; l++) {
+				G2[1][i][j][l].v1 = G2[0][i][j][l].v2;
+				G2[1][i][j][l].v2 = G2[0][i][j][l].v1;
+			}
+		}
+	}
+	
+	w = top = 0;
+	c = (GF3_VEC **)malloc(nMat * sizeof(GF3_VEC*));
+	l = nMat; do { --l; 
+		c[l] = (GF3_VEC *)malloc(G->nBlocks * sizeof(GF3_VEC)); 
+	} while (l);	
+	for (iw=2;;iw++) {	/* starting from information weight 2 */
+		if (iw == info->max_info_weight_req) info->matrices_req = info->ith_matrix;
+		printf("Enumerating codewords with information weight %d (w=%d) using %d matrices\n", 
+				iw, iw, info->matrices_req);
+		fflush(stdout);
+		steps = 0;
+		
+		m = iw - 1;
+		v = (short *) malloc((iw+2)*sizeof(short));
+		s = (short *) malloc((iw+2)*sizeof(short));
+		a = (short *) malloc(iw *sizeof(short));
+		f = (short *) malloc((iw+1)*sizeof(short));
+		
+		if ( !(iw & 1) ) {
+			v[iw + 1] = G->dimension; v[iw] = iw - 1;
+			if (iw < G->dimension) top = iw;
+		} else {
+			v[iw] = G->dimension - 1;
+			if (iw < G->dimension) top = iw - 1;
+		}
+		v[1] = s[iw] = 0;
+		for (i=2; i<iw; ++i) { v[i] = i-1; s[i] = i+1; }
+
+		/* first combination */
+		EVALUATE_MINIMUM_WEIGHT_GF3;
+		
+		/* main loop to generate all other combinations */
+		while (top != 0) {
+			if (top == 2) {	/* special handling far v[1] and v[2] */
+				top = s[2]; s[2] = 3;
+				do {
+					v[1] = v[2]; ++v[2];
+					EVALUATE_MINIMUM_WEIGHT_GF3;
+					do {
+						--v[1];
+						EVALUATE_MINIMUM_WEIGHT_GF3;
+					} while (v[1]);
+				} while ( !(v[2] == v[3] - 1) );
+			} else {
+				if (top & 0x1) {
+					--v[top];
+					if (v[top] > top - 1) {
+						top = top - 1; v[top] = top - 1;
+					} else {
+						v[top-1] = top - 2; i = top;
+						top = s[top]; s[i] = i + 1;
+					}
+				} else {
+					v[top-1] = v[top]; ++v[top];
+					if (v[top] == v[top+1] - 1) {
+						s[top-1] = s[top]; s[top] = top + 1;
+					}
+					top -= 2;
+				}
+				EVALUATE_MINIMUM_WEIGHT_GF3;
+			}
+		}
+
+		/* Update progress information */
+		info->info_weight_completed = iw;
+		update_info_gf3(G, info);
+		
+		printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+				iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout);
+lower_bound_met:
+		free(a);
+		free(f);
+		free(v);
+		free(s);
+		if (w <= info->known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			printf("-----------------------------------------------------------------------------\n");
+		   	info->upper_bound = w;
+			for (l=0; l<nMat; l++) {
+				for (i=0; i<G->dimension; i++) free(G2[1][l][i]);
+				free(G2[1][l]);
+				free(c[l]); 
+			}
+			free(G2[1]); free(G2);
+			return;	
+		}
+		if (info->displayed_lower_bound >= info->upper_bound) break;
+		printf("Termination expected with information weight %d at matrix %d\n",
+				info->max_info_weight_req, info->ith_matrix);
+		printf("-----------------------------------------------------------------------------\n");
+	}
+	printf("-----------------------------------------------------------------------------\n");
+	for (l=0; l<nMat; l++) {
+		for (i=0; i<G->dimension; i++) free(G2[1][l][i]);
+		free(c[l]); free(G2[1][l]);
+	}
+	free(G2[1]); free(G2);
+	free(c);
+}
+
+/* Cyclic code: minimum weight enumeration function for information weight >= 2 */
+void __cyclic_mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info) {
+#define EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3	{\
+		memset(a, 0, m * sizeof(short));\
+		f[m] = m; j = m; do { --j; f[j] = j; } while (j);\
+		while (1) {\
+			steps++;\
+			i = G->nBlocks; w = 0;\
+			do { --i;\
+				/* FIXME: (optimisation)                          */\
+				/* There must a clever (faster) way of doing this */\
+				/* by exploiting the revolving door property      */\
+				c[i] = G2[0][0][v[1]][i];\
+				j = m; do { --j; add_gf3_vec(c[i], G2[a[j]][0][v[j+2]][i], c[i]); } while (j);\
+				w += (popcount(c[i].v1) + popcount(c[i].v2));\
+			} while (i);\
+			if (w < info->upper_bound) {\
+				info->upper_bound = w;\
+				printf("   Found new minimum weight %d\n", w); fflush(stdout);\
+				if (w <= info->known_lower_bound) goto lower_bound_met;\
+			}\
+			j = f[0]; f[0] = 0;\
+			if (!(j-m)) break;\
+			else { f[j] = f[j+1]; f[j+1] = j+1; }\
+			a[j] = 1 - a[j];\
+		}\
+	}
+	double steps;
+	short m, iw, top;
+	register short i, j, l, w;
+	register GF3_VEC *c;
+	packed_t t1, t2;
+	short *v, *s, *a, *f;
+
+	/* G2 contains a set of generator matrices of G->nFullRankMatrices disjoint */
+	/* information sets. For each information set, G2 contains (q-1) matrices,  */
+	/* where the identity element of each is non zeros of GF(q)                 */
+	GF3_VEC ****G2;
+	G2 = (GF3_VEC ****) malloc(2 * sizeof(GF3_VEC ***));
+	G2[0] = G->mat;	/* the first one (identity = 1) points to 'G->mat' */
+	G2[1] = (GF3_VEC ***) malloc(1 * sizeof(GF3_VEC **));
+	G2[1][0] = (GF3_VEC **) malloc(G->dimension * sizeof(GF3_VEC *));
+	for (j=0; j<G->dimension; j++) {
+		G2[1][0][j] = (GF3_VEC *) malloc(G->nBlocks * sizeof(GF3_VEC));
+		for (l=0; l<G->nBlocks; l++) {
+			G2[1][0][j][l].v1 = G2[0][0][j][l].v2;
+			G2[1][0][j][l].v2 = G2[0][0][j][l].v1;
+		}
+	}
+	
+	w = top = 0;
+	c = (GF3_VEC *)malloc(G->nBlocks * sizeof(GF3_VEC)); 
+	for (iw=2;;iw++) {	/* starting from information weight 2 */
+		printf("Enumerating codewords with information weight %d (w=%d) using 1 matrix\n", 
+				iw, iw);
+		fflush(stdout);
+		steps = 0;
+		
+		m = iw - 1;
+		v = (short *) malloc((iw+2)*sizeof(short));
+		s = (short *) malloc((iw+2)*sizeof(short));
+		a = (short *) malloc(iw *sizeof(short));
+		f = (short *) malloc((iw+1)*sizeof(short));
+		
+		if ( !(iw & 1) ) {
+			v[iw + 1] = G->dimension; v[iw] = iw - 1;
+			if (iw < G->dimension) top = iw;
+		} else {
+			v[iw] = G->dimension - 1;
+			if (iw < G->dimension) top = iw - 1;
+		}
+		v[1] = s[iw] = 0;
+		for (i=2; i<iw; ++i) { v[i] = i-1; s[i] = i+1; }
+
+		/* first combination */
+		EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3;
+		
+		/* main loop to generate all other combinations */
+		while (top != 0) {
+			if (top == 2) {	/* special handling far v[1] and v[2] */
+				top = s[2]; s[2] = 3;
+				do {
+					v[1] = v[2]; ++v[2];
+					EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3;
+					do {
+						--v[1];
+						EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3;
+					} while (v[1]);
+				} while ( !(v[2] == v[3] - 1) );
+			} else {
+				if (top & 0x1) {
+					--v[top];
+					if (v[top] > top - 1) {
+						top = top - 1; v[top] = top - 1;
+					} else {
+						v[top-1] = top - 2; i = top;
+						top = s[top]; s[i] = i + 1;
+					}
+				} else {
+					v[top-1] = v[top]; ++v[top];
+					if (v[top] == v[top+1] - 1) {
+						s[top-1] = s[top]; s[top] = top + 1;
+					}
+					top -= 2;
+				}
+				EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3;
+			}
+		}
+
+		/* Update progress information */
+		info->info_weight_completed = iw;
+		cyclic_update_info_gf3(G, info);
+		
+		printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", 
+				iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout);
+lower_bound_met:
+		free(v);
+		free(s);
+		free(a);
+		free(f);
+		if (w <= info->known_lower_bound) {
+			printf("The known lower-bound is met, enumeration completed.\n");
+			printf("-----------------------------------------------------------------------------\n");
+		   	info->upper_bound = w;
+			free(c);
+			for (i=0; i<G->dimension; i++) free(G2[1][0][i]);
+			free(G2[1][0]); free(G2[1]); free(G2);
+			return;	
+		}
+		if (info->displayed_lower_bound >= info->upper_bound) break;
+		printf("Termination expected with information weight %d\n",
+				info->max_info_weight_req);
+		printf("-----------------------------------------------------------------------------\n");
+	}
+	printf("-----------------------------------------------------------------------------\n");
+	free(c);
+	for (i=0; i<G->dimension; i++) free(G2[1][0][i]);
+	free(G2[1][0]); free(G2[1]); free(G2);
+}
+
+/* Update INFO structure, which contains various information on the */
+/* current progress of enumeration.                                 */
+void update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info) {
+	bool end;
+	short i, j, l, d, w;
+	
+	/* Estimate the number of matrices required to complete enumeration */
+	info->matrices_req = 0;
+	for (w=0,i=1;;i++) {
+		w = (i+1) * G->nFullRankMatrices;
+		info->matrices_req = G->nFullRankMatrices;
+		for (j=G->nFullRankMatrices; j<G->nMatrices; j++) {
+			l = i - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) { w += l; info->matrices_req++; }
+		}
+		end = false;
+		switch (info->weight_constraint) {
+			case C_0MOD3: if (ROUND_0_MOD_3(w) >= info->upper_bound) end = true; break;
+			default: if (w >= info->upper_bound) end = true;
+		}
+		if (end) break;
+	}
+
+	/* Estimate the minimum distance lower bound after current enumeration */
+	if (info->info_weight_completed == 1) /* required for safety */
+		info->max_info_weight_req = G->dimension;	
+	if (info->info_weight_completed < info->max_info_weight_req) {
+		info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices;
+		for (j=G->nFullRankMatrices; j<G->nMatrices; j++) {
+			l = info->info_weight_completed - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) info->lower_bound += l;	
+		}
+	} else {	/* last information weight in enumeration */
+		for (j=0; j<info->ith_matrix; j++) {
+			if (j < G->nFullRankMatrices) info->lower_bound++;
+			else {
+				l = i - (G->dimension - G->rank[j]) + 1;
+				if (l > 0) info->lower_bound++;
+			}
+		}
+	}
+
+	/* lower-bound information to display, this value could be different */
+	/* from the actual lower-bound if the code satisfies some weight     */
+	/* constraint, i.e. 0 mod 3 (self-orthogonal ternay code).           */
+	switch (info->weight_constraint) {
+		case C_0MOD3: info->displayed_lower_bound = ROUND_0_MOD_3(info->lower_bound); break;
+		default: info->displayed_lower_bound = info->lower_bound;
+	}
+	
+	/* Estimate the maximum information weight required */
+	d = 0;
+	w = info->lower_bound;
+	for (i=info->info_weight_completed+1;;i++) {
+		for (j=0; j<G->nMatrices; j++) {
+			if (j < G->nFullRankMatrices) 
+				l = 1;	/* this is a trick to reduce the number of lines of codes */
+			else 
+				l = i - (G->dimension - G->rank[j]) + 1;
+			if (l > 0) {
+				w++;
+				switch (info->weight_constraint) {
+					case C_0MOD3: d = ROUND_0_MOD_3(w); break;
+					default: d = w;
+				}
+				if (d >= info->upper_bound) { info->ith_matrix = j + 1; break; }
+			}
+		}
+		if (d >= info->upper_bound) { info->max_info_weight_req = i; break; }
+	}
+}			
+
+/* Update INFO structure, which contains various information on the */
+/* current progress of enumeration.                                 */
+void cyclic_update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info) {
+	short i, d, w;
+	
+	/* Estimate the minimum distance lower bound after current enumeration */
+	info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices;
+	info->lower_bound = (unsigned int)
+		ceil(((double)G->block_length/(double)G->dimension)*((double)info->info_weight_completed+1.0));
+
+	/* lower-bound information to display, this value could be different */
+	/* from the actual lower-bound if the code satisfies some weight     */
+	/* constraint, i.e. 0 mod 3 (self-orthogonal ternary code).          */
+	switch (info->weight_constraint) {
+		case C_0MOD3: info->displayed_lower_bound = ROUND_0_MOD_3(info->lower_bound); break;
+		default: info->displayed_lower_bound = info->lower_bound;
+	}
+	
+	/* Estimate the maximum information weight required */
+	d = 0;
+	for (i=info->info_weight_completed+1;;i++) {
+		w = (unsigned int)
+			ceil(((double)G->block_length/(double)G->dimension)*((double)i+1.0));
+		switch (info->weight_constraint) {
+			case C_0MOD3: d = ROUND_0_MOD_3(w); break;
+			default: d = w;
+		} 
+		if (d >= info->upper_bound) { info->max_info_weight_req = i; break; }
+	}
+}
+
+/* Initialise GF subtraction and division tables */
+void init_gf3(GF3 *gf) {
+	int i;
+	
+	gf->sub = (short **)malloc(3 * sizeof(short *));
+	for (i=0; i<3; i++) gf->sub[i] = (short *)malloc(3*sizeof(short));
+	gf->sub[0][0] = 0; gf->sub[0][1] = 2; gf->sub[0][2] = 1;
+	gf->sub[1][0] = 1; gf->sub[1][1] = 0; gf->sub[1][2] = 2;
+	gf->sub[2][0] = 2; gf->sub[2][1] = 1; gf->sub[2][2] = 0;
+	
+	gf->div = (short **)malloc(3 * sizeof(short int *));
+	for (i=0; i<3; i++) gf->div[i] = (short *)malloc(3*sizeof(short));
+	gf->div[0][0] = 3; gf->div[0][1] = 0; gf->div[0][2] = 0;
+	gf->div[1][0] = 3; gf->div[1][1] = 1; gf->div[1][2] = 2;
+	gf->div[2][0] = 3; gf->div[2][1] = 2; gf->div[2][2] = 1;
+}
+
+/* Deallocation */
+void clear_gf3(GF3 *gf) {
+	int i;
+	for (i=0; i<3; i++) {
+		free(gf->sub[i]);
+		free(gf->div[i]);
+	}
+	free(gf->sub);
+	free(gf->div);
+}
+
+/* Convert a ternary matrix into packed integer format */
+GF3_VEC **to_packed_integer_gf3(MATRIX *G, int nBlocks) {
+	int i, j;
+	GF3_VEC **M;
+	
+	M = (GF3_VEC **)malloc(G->rows * sizeof(GF3_VEC *));
+	for (i=0; i<G->rows; i++) {
+		M[i] = (GF3_VEC *)malloc(nBlocks * sizeof(GF3_VEC));
+		memset(M[i], 0, nBlocks * sizeof(GF3_VEC));
+		for (j=0; j<nBlocks; j++) M[i][j].v1 = M[i][j].v2 = ZERO;
+		for (j=0; j<G->cols; j++) {
+			switch (G->m[i][j]) {
+				case 1 : M[i][j >> LOG2].v2 |= (ONE << (j & MOD)); break;
+				case 2 : M[i][j >> LOG2].v1 |= (ONE << (j & MOD)); break;
+				default: break;
+			}
+		}
+	}
+	return M;
+}
+
+/* Print out a packed GF3 matrix in unpacked format */
+void mat_packed_print_gf3(GF3_VEC **M, int nBlocks, int dim, int length) {
+	unsigned int r, i, j;
+	packed_t u1, u2;
+	for (r=0; r<dim; r++) {
+		for (i=0; i<nBlocks-1; i++) {
+			for (j=0; j<BITSIZE; j++) {
+				u1 = M[r][i].v1 & (ONE << j);
+				u2 = M[r][i].v2 & (ONE << j);
+				if ((!u1) && (!u2)) printf("0");
+				else if ((!u1) && u2) printf("1");
+				else if (u1 && !u2) printf("2");
+				else printf("?");
+			}
+		}
+		for (i=nBlocks-1,j=0; j<length-(BITSIZE*(nBlocks-1)); j++) {
+			u1 = M[r][i].v1 & (ONE << j);
+			u2 = M[r][i].v2 & (ONE << j);
+			if ((!u1) && (!u2)) printf("0");
+			else if ((!u1) && u2) printf("1");
+			else if (u1 && !u2) printf("2");
+			else printf("?");
+		}
+		printf("\n");
+	}
+}
+
+/* gauss jordan - turn matrix M into reduced-echelon form at position 'start' */
+int gf3_gauss_jordan(GF3 *gf, MATRIX *M, int start) {
+	bool found;
+	int i, r, c, pivot, swap;
+	for (c=0; c<M->rows; ++c) {		/* diagonalise the element from col=1 to rows */
+		if (c+start >= M->cols) return c;
+		if (!M->m[c][c+start]) {	/* pivot is zero, do row swapping */
+			for (found=false,r=c+1; r<M->rows; ++r) { if (M->m[r][c+start]) { found=true; break; } }
+			if (found) {
+				for (i=0; i<M->cols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; }
+			} else {			/* row swapping failed, do column swapping */
+				for (found=false,i=start+c+1; i<M->cols; ++i) {
+					for (r=c; r<M->rows; ++r) { if (M->m[r][i]) { found=true; break; } }
+					if (found) break;
+				}
+				if (!found) return c;
+				for (pivot=i,i=0; i<M->cols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; }
+				for (r=0; r<M->rows; ++r) { 
+					swap=M->m[r][pivot]; M->m[r][pivot]=M->m[r][c+start]; M->m[r][c+start]=swap; 
+				}
+			}
+		}
+		if (M->m[c][c+start]>1) {	/* ensure the diagonal element is 1 */
+			for (pivot=M->m[c][c+start],i=0; i<M->cols; ++i) 
+				M->m[c][i] = divide_gf3(gf, M->m[c][i], pivot);
+		}
+		for (r=0; r<M->rows; ++r) {	/* zero the whole rows at column c, except at row c (diagonalisation) */
+			if (r==c) continue;
+			if (M->m[r][c+start]) {
+				pivot = M->m[r][c+start];
+				for (i=0; i<M->cols; ++i) 
+					M->m[r][i] = subtract_gf3(gf, divide_gf3(gf, M->m[r][i], pivot), M->m[c][i]);
+			}
+		}
+	}
+	/* ensure that the diagonal element is 1 */
+	for (c=0; c<M->rows; ++c) {
+		if (M->m[c][c+start]>1) {
+			for (pivot=M->m[c][c+start],i=0; i<M->cols; ++i) 
+				M->m[c][i] = divide_gf3(gf, M->m[c][i], pivot);
+		}
+	}
+	return c;
+}
diff --git a/src/ctjhai/minimum-weight-gf3.h b/src/ctjhai/minimum-weight-gf3.h
new file mode 100644
index 0000000..cd6a878
--- /dev/null
+++ b/src/ctjhai/minimum-weight-gf3.h
@@ -0,0 +1,67 @@
+/*
+ * minimum-weight-gf3.h
+ *
+ * Minimum Hamming weight computation for codes over GF(3)
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#ifndef _MINIMUM_WEIGHT_GF3_H
+#define _MINIMUM_WEIGHT_GF3_H
+
+#include "types.h"
+
+#define subtract_gf3(gf,a,b)	gf->sub[a][b]
+#define divide_gf3(gf,a,b)		gf->div[a][b]
+/*
+ * c = a + b
+ * add_gf3_vec requires a declaration of "packed_t t1, t2"
+ * 
+ */
+#define add_gf3_vec(a, b, c)	{   t1   = (a.v1 | b.v2)^(a.v2 | b.v1);\
+									t2   = (a.v2 | b.v2) ^ t1;\
+									c.v2 = (a.v1 | b.v1) ^ t1;\
+									c.v1 = t2;\
+								}
+/*
+ * c = a - b 
+ *   = a + -b 
+ *   = a + 2b
+ * sub_gf3_vec requires a declaration of "packed_t t1, t2"
+ * 
+ */
+#define sub_gf3_vec(a, b, c)	{   t1   = (a.v1 | b.v1)^(a.v2 | b.v2);\
+									t2   = (a.v2 | b.v1) ^ t1;\
+									c.v2 = (a.v1 | b.v2) ^ t1;\
+									c.v1 = t2;\
+								}
+
+
+/*------------- Data structure specified for GF(3) --------------*/
+typedef struct {
+	short **sub, **div;
+} GF3;
+
+typedef struct {
+	packed_t v1, v2;
+} GF3_VEC;
+
+typedef struct {
+	unsigned short dimension, block_length;
+	unsigned short nBlocks;
+	unsigned short nMatrices, nFullRankMatrices;
+	unsigned short *rank;
+	GF3_VEC  ***mat;
+} PACKED_MATRIX_GF3;
+
+/*-------------------- Function prototypes ----------------------*/
+int  mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound);
+int  cyclic_mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound);
+
+#endif
diff --git a/src/ctjhai/minimum-weight.c b/src/ctjhai/minimum-weight.c
new file mode 100644
index 0000000..e8d91a2
--- /dev/null
+++ b/src/ctjhai/minimum-weight.c
@@ -0,0 +1,180 @@
+/*
+ * minimum-weight.c
+ *
+ * Minimum Hamming weight computation for linear codes over
+ * finite field.
+ *
+ * Note that:
+ *  q=2, if the code is doubly-even then the weights of the
+ *          code satisfy 0 mod 4
+ *       if the code is singly-even then the weights of the
+ *          code satisfy 0 mod 2
+ *       provision for code with codewords of minimum weight
+ *          satisfies 1 mod 2 (odd) and 3 mod 4 constraints
+ *          are also taken into account
+ *  q=3, if the code is self-orthogonal (or self-dual) then
+ *          the weights of the code satisfy 0 mod 3.
+ * In order to take these constraints into account, a parameter
+ * 'm' or 'mod' is used as an argument to this program.
+ * 
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ * 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include "minimum-weight-gf2.h"
+#include "minimum-weight-gf3.h"
+#include "popcount.h"
+#include "config.h"
+#include "types.h"
+
+/*--------------------- Function prototypes -----------------------*/
+int  generator_matrix(char *fname, MATRIX *M);
+void print_usage(FILE *stream, int exitcode, char *str);
+int  mindist(MATRIX G, int m_mod, int lower_bound);
+int  cyclic_mindist(MATRIX G, int m_mod, int lower_bound);
+/*-----------------------------------------------------------------*/
+
+/* Main entry point */
+int main(int argc, char *argv[]) {
+	MATRIX G;
+	FILE *fptr;
+	int opt, dmin;
+	int cyclic_code, m_mod, lower_bound;
+	char *output_file;
+	const char* const short_options = "hcmlo:";	/* Valid short option characters */
+	const struct option long_options[] = {		/* Valid long options strings    */
+		{ "help",        0, NULL, 'h' },
+		{ "cyclic",      0, NULL, 'c' },
+		{ "mod",         1, NULL, 'm' },
+		{ "lower-bound", 1, NULL, 'l' },
+		{ "out",         1, NULL, 'o' },
+    	{ NULL,          0, NULL, 0   }         /* Required at end of array      */
+	};	
+
+	if (argc < 2) print_usage(stderr, -1, argv[0]);	
+	cyclic_code = 0; m_mod = 0; lower_bound = 1; output_file = NULL;	/* default values */
+	do {
+		opt = getopt_long(argc, argv, short_options, long_options, NULL);
+		switch (opt) {
+			case 'h':	/* -h or --help */
+				print_usage(stdout, 1, argv[0]);
+			case 'c':	/* -c or --cyclic */
+				cyclic_code = 1;
+				break;
+			case 'm':	/* -m or --mod */
+				m_mod = atoi(optarg);
+				break;
+			case 'l':	/* -l or --lower-bound (argument follows) */
+				lower_bound = atoi(optarg);
+				break;
+			case 'o':	/* -o or --out (argument follows) */
+				output_file = optarg;
+				break;
+			case '?':	/* invalid option */
+				print_usage(stderr, -1, argv[0]);
+			case -1:	/* done */
+				break;
+			default:	/* something else unexpected */
+				abort();
+		}
+	} while (opt != -1);
+	
+	/* Initialisation */
+	init_popcount();
+	
+	/* Read generator matrix from file */
+	generator_matrix(argv[optind], &G);
+
+	if (cyclic_code)
+		dmin = cyclic_mindist(G, m_mod, lower_bound);
+	else
+		dmin = mindist(G, m_mod, lower_bound);
+	
+	if (dmin) {
+		printf("Minimum weight: %d\n", dmin); fflush(stdout);
+
+		if (output_file) {
+			fptr = fopen(output_file, "w");
+			if (!fptr) {
+				fprintf(stderr, "Unable to open %s\n", output_file); return -1;
+			}
+			fprintf(fptr, "GUAVA_TEMP_VAR := %d;\n", dmin);
+			fclose(fptr);
+		}
+	}
+	
+	/* Deallocate memory */
+	clear_popcount();
+	
+	return 0;
+}
+
+/* Display options to use this program */
+void print_usage(FILE *stream, int exitcode, char *str) {
+	fprintf(stream, "Usage: %s options [generator matrix file]\n", str);
+	fprintf(stream, "   -h --help             Display this help screen\n");
+	fprintf(stream, "   -c --cyclic           Indicate that the code is cyclic\n");
+	fprintf(stream, "   -l --lower-bound [x]  Known lower-bound on the minimum distance\n");
+	fprintf(stream, "   -m --mod [x]          Constraint on minimum weight codeword\n");
+	fprintf(stream, "                         1 : 0 mod 2\n");
+	fprintf(stream, "                         2 : 1 mod 2\n");
+	fprintf(stream, "                         3 : 3 mod 4\n");
+	fprintf(stream, "                         4 : 0 mod 4\n");
+	fprintf(stream, "                         5 : 0 mod 3\n");
+	fprintf(stream, "\n");
+	exit(exitcode);
+}
+
+/* Read generator matrix from file */
+int generator_matrix(char *fname, MATRIX *M) {
+	int i, j;
+	FILE *fptr;
+
+	fptr = fopen(fname, "r");
+	if (!fptr) {
+		fprintf(stderr, "Error opening %s\n", fname);
+		return -1;
+	}
+	fscanf(fptr, "%d %d %d\n", &M->rows, &M->cols, &M->q);
+	M->m = (unsigned int **)malloc(M->rows * sizeof(unsigned int *));
+	for (i=0; i<M->rows; i++) 
+		M->m[i] = (unsigned int *)malloc(M->cols * sizeof(unsigned int));
+	for (i=0; i<M->rows; i++) {
+		for (j=0; j<M->cols; j++) fscanf(fptr, "%d ", &M->m[i][j]);
+	}
+
+	return 0;
+}
+
+/* Minimum weight for cyclic code */
+int cyclic_mindist(MATRIX G, int m_mod, int lower_bound) {
+	if (G.q == 2)		/* binary field */
+		return cyclic_mindist_gf2(G, m_mod, lower_bound);
+	else if (G.q == 3)	/* ternary field */
+		return cyclic_mindist_gf3(G, m_mod, lower_bound);
+	else {
+		fprintf(stderr, "Minimum weight computation over this field is not implemented yet\n");
+		return -2;
+	}
+}
+
+/* Minimum weight for general linear code */
+int mindist(MATRIX G, int m_mod, int lower_bound) {
+	if (G.q == 2)		/* binary field */
+		return mindist_gf2(G, m_mod, lower_bound);
+	else if (G.q == 3)	/* ternary field */
+		return mindist_gf3(G, m_mod, lower_bound);
+	else {
+		fprintf(stderr, "Minimum weight computation over this field is not implemented yet\n");
+		return -2;
+	}
+}
diff --git a/src/ctjhai/popcount.c b/src/ctjhai/popcount.c
new file mode 100644
index 0000000..47bf890
--- /dev/null
+++ b/src/ctjhai/popcount.c
@@ -0,0 +1,82 @@
+/*
+ * popcount.c
+ *
+ * This file contains functions related to population count
+ *
+ * Note that the popcount() implementation for POPCOUNT_STD is taken from
+ * Joerg's useful and ugly FFT page (http://www.jjj.de/fft/fftpage.html)
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#include <stdlib.h>
+#include "popcount.h"
+
+#if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16)
+unsigned short *__popcnt_LUT;
+#endif
+
+/* Initialisation for population count */
+void init_popcount() {
+#if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16)
+	__init_popcount_LUT();
+#endif
+}
+
+/* Deallocate memory used  population count */
+void clear_popcount() {
+#if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16)
+	__clear_popcount_LUT();
+#endif
+}
+
+#if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16)
+/* Initialise the look-up table for population count */
+void __init_popcount_LUT() {
+#ifdef POPCOUNT_LUT8
+	#define LUT_SIZE	8		/* 8 bit LUT */
+#else
+	#define LUT_SIZE	16		/* 16 bit LUT */
+#endif
+    int i, j, n;
+    __popcnt_LUT = 
+		(unsigned short *)malloc((0x1U<<LUT_SIZE) * sizeof(unsigned short));
+    n = 0;
+    while (n < 0x1U<<LUT_SIZE) {
+        i = 0; j = n;
+        while (j) { i++; j &= (j-1); }
+        __popcnt_LUT[n++] = i;
+    }
+#undef LUT_SIZE
+}
+
+/* Deallocate memory allocated for population count */
+void __clear_popcount_LUT() {
+	free(__popcnt_LUT);
+}
+#endif	/* POPCOUNT_LUT8 || POPCOUNT_LUT16 */
+
+/* Population count function */
+#if	POPCOUNT_STD
+unsigned int popcount(unsigned long x) {
+#if  BITS_PER_LONG == 32
+    x -=  (x>>1) & 0x55555555UL;
+    x  = ((x>>2) & 0x33333333UL) + (x & 0x33333333UL);
+    x  = ((x>>4) + x) & 0x0f0f0f0fUL;
+    x *= 0x01010101UL;
+    return  x>>24;
+#else	/* BITS_PER_LONG is 64 */
+    x -=  (x>>1) & 0x5555555555555555UL;
+    x  = ((x>>2) & 0x3333333333333333UL) + (x & 0x3333333333333333UL);
+    x  = ((x>>4) + x) & 0x0f0f0f0f0f0f0f0fUL;
+    x *= 0x0101010101010101UL;
+    return  x>>56;
+#endif	/* BITS_PER_LONG */
+}
+#endif	/* POPCOUNT_STD */
diff --git a/src/ctjhai/popcount.h b/src/ctjhai/popcount.h
new file mode 100644
index 0000000..ca709ca
--- /dev/null
+++ b/src/ctjhai/popcount.h
@@ -0,0 +1,53 @@
+/*
+ * popcount.h
+ *
+ * This header file contains various declaration for population count
+ *
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ *
+ */
+
+#ifndef _POPCOUNT_H
+#define _POPCOUNT_H
+
+#include "config.h"
+
+/* Global variable -- only used for LUT-based popcount */
+#if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16)
+extern unsigned short *__popcnt_LUT;
+#endif
+
+/* Function prototypes */
+void init_popcount();
+void __init_popcount_LUT();
+void clear_popcount();
+void __clear_popcount_LUT();
+
+/* The following contains the macros that actually do the population count */
+#if defined(POPCOUNT_LUT8)		/* 8-bit LUT */
+#	if BITS_PER_LONG == 64	/* 64-bit machine */
+#		define popcount(__v)   (__popcnt_LUT[__v & 0xFFUL] + __popcnt_LUT[(__v>>8) & 0xFFUL] + \
+        		                __popcnt_LUT[(__v>>16) & 0xFFUL] + __popcnt_LUT[(__v>>24) & 0xFFUL] + \
+        		                __popcnt_LUT[(__v>>32) & 0xFFUL] + __popcnt_LUT[(__v>>40) & 0xFFUL] + \
+        		                __popcnt_LUT[(__v>>48) & 0xFFUL] + __popcnt_LUT[(__v>>56) & 0xFFUL])
+#	else					/* 32-bit machine */
+#		define popcount(__v)   (__popcnt_LUT[__v & 0xFFU] + __popcnt_LUT[(__v>>8) & 0xFFU] + \
+		                        __popcnt_LUT[(__v>>16) & 0xFFU] + __popcnt_LUT[(__v>>24) & 0xFFU])
+#	endif					
+#elif defined(POPCOUNT_LUT16)	/* 16-bit LUT */
+#	if BITS_PER_LONG == 64	/* 64-bit machine */
+#		define popcount(__v)   (__popcnt_LUT[__v & 0xFFFFUL] + __popcnt_LUT[(__v>>16) & 0xFFFFUL] + \
+        		                __popcnt_LUT[(__v>>32) & 0xFFFFUL] + __popcnt_LUT[(__v>>48) & 0xFFFFUL])
+#	else					/* 32-bit machine */
+#		define popcount(__v)   (__popcnt_LUT[__v & 0xFFFFU] + __popcnt_LUT[(__v>>16) & 0xFFFFU])
+#	endif					
+#elif defined(POPCOUNT_STD)
+	unsigned int popcount(unsigned long x);
+#endif
+
+#endif	/* _POPCOUNT_H */
diff --git a/src/ctjhai/types.h b/src/ctjhai/types.h
new file mode 100644
index 0000000..d805dae
--- /dev/null
+++ b/src/ctjhai/types.h
@@ -0,0 +1,42 @@
+/*
+ * types.h
+ *
+ * This header file contains data structure for the minimum Hamming
+ * weight computation program
+ * 
+ * Version Log:
+ *   0.1  18 March 2008 (first released to public -- GUAVA 3.3)   
+ *  
+ * CJ, Tjhai 
+ * email: ctjhai at plymouth.ac.uk
+ * Homepage: www.plymouth.ac.uk/staff/ctjhai
+ * 
+ */
+
+#ifndef _TYPES_H
+#define _TYPES_H
+
+/*---------------------- Data Structure ---------------------------*/
+typedef unsigned long packed_t;
+
+typedef struct {
+	unsigned int q, rows, cols;
+	unsigned int **m;
+} MATRIX;
+
+typedef enum { false = 0, true = 1 } bool;
+typedef enum { C_0MOD2 = 1, C_1MOD2, C_3MOD4, C_0MOD4, C_0MOD3 } mod_t;
+
+typedef struct {
+	mod_t weight_constraint;
+	unsigned short known_lower_bound;
+	unsigned short lower_bound, upper_bound;
+	unsigned short displayed_lower_bound;
+	unsigned short info_weight_completed;
+	unsigned short max_info_weight_req;
+	unsigned short ith_matrix;
+	unsigned short matrices_req;
+} INFO;
+/*-----------------------------------------------------------------*/
+
+#endif
diff --git a/src/defs.h b/src/defs.h
new file mode 100644
index 0000000..5348114
--- /dev/null
+++ b/src/defs.h
@@ -0,0 +1,7 @@
+/* some defines needed on SunOS 4.1.3 */
+
+extern int printf();
+extern int fprintf();
+extern int close();
+extern int fclose();
+extern int fscanf();
diff --git a/src/leon/Makefile b/src/leon/Makefile
new file mode 100644
index 0000000..0b678b9
--- /dev/null
+++ b/src/leon/Makefile
@@ -0,0 +1,183 @@
+COMPILE = gcc
+CFLAGS  = -O2
+SRCDIR  = ./src
+COMPOPT = -c -O2
+INCLUDES =
+LINKOPT = -v
+LINKNAME = -o
+OBJ = o
+
+all:   setstab cent inter desauto generate commut cjrndper orblist fndelt compgrp orbdes randobj wtdist
+#
+# Invoke linker -- setstab
+setstab:  setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OB [...]
+	$(COMPILE) $(LINKNAME) setstab $(LINKOPT) setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$ [...]
+#
+# Invoke linker -- cent
+cent:  cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) cent $(LINKOPT) cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) toke [...]
+#
+# Invoke linker -- inter
+inter:  inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) inter $(LINKOPT) inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTI [...]
+#
+# Invoke linker -- desauto
+desauto:  desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) rea [...]
+	$(COMPILE) $(LINKNAME) desauto $(LINKOPT) desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ)  [...]
+#
+# Invoke linker -- generate
+generate:  generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) generate $(LINKOPT) generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- commut
+commut:  commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccommut.$(OBJ)  chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) commut $(LINKOPT) commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) ccommut.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- cjrndper
+cjrndper: cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) cjrndper $(LINKOPT) cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orblist
+orblist: orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orblist $(LINKOPT) orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- fndelt
+fndelt:  fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) fndelt $(LINKOPT) fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- compgrp
+compgrp:  compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) compgrp $(LINKOPT) compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orbdes
+orbdes:  orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orbdes $(LINKOPT) orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- randobj
+randobj:  randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) randobj $(LINKOPT) randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- wtdist
+wtdist:  wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) wtdist $(LINKOPT) wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+#
+# Invoke compiler
+addsgen.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/cstborb.h $(SRCDIR)/addsgen.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/addsgen.c 
+bitmanp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/bitmanp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/bitmanp.c 
+ccent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/cparstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/ccent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ccent.c 
+ccommut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/copy.h $(SRCDIR)/chbase.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/ccommut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ccommut.c 
+cdesauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cdesauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cdesauto.c 
+cent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccent.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cent.c 
+chbase.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/chbase.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/chbase.c 
+cinter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cinter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cinter.c 
+cjrndper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cjrndper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cjrndper.c 
+cmatauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cmatauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cmatauto.c 
+code.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/code.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/code.c 
+commut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccommut.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/commut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/commut.c 
+compcrep.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/chbase.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compcrep.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compcrep.c 
+compgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/util.h $(SRCDIR)/compgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compgrp.c 
+compsg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/copy.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/ptstbref.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compsg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compsg.c 
+copy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/storage.h $(SRCDIR)/copy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/copy.c 
+cparstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cparstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cparstab.c 
+csetstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/csetstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/csetstab.c 
+cstborb.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/storage.h $(SRCDIR)/cstborb.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cstborb.c 
+cstrbas.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permgrp.h $(SRCDIR)/ptstbref.h $(SRCDIR)/optsvec.h $(SRCDIR)/storage.h $(SRCDIR)/cstrbas.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cstrbas.c 
+cuprstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cuprstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cuprstab.c 
+desauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cdesauto.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/desauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/desauto.c 
+errmesg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/errmesg.c 
+essentia.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/essentia.c 
+factor.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/factor.c 
+field.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/field.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/field.c 
+fndelt.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/randgrp.h $(SRCDIR)/util.h $(SRCDIR)/fndelt.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/fndelt.c 
+generate.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/storage.h $(SRCDIR)/cputime.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/readgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/stcs.h $(SRCDIR)/util.h $(SRCDIR)/generate.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/generate.c 
+inform.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cputime.h $(SRCDIR)/readgrp.h $(SRCDIR)/inform.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/inform.c 
+inter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cinter.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/inter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/inter.c 
+matrix.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/matrix.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/matrix.c 
+new.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/new.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/new.c 
+oldcopy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/oldcopy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/oldcopy.c 
+optsvec.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/storage.h $(SRCDIR)/optsvec.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/optsvec.c 
+orbdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orbdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbdes.c 
+orbit.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/orbit.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbit.c 
+orblist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orblist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orblist.c 
+orbrefn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/orbrefn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbrefn.c 
+partn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.h $(SRCDIR)/partn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/partn.c 
+permgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/permgrp.c 
+permut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/factor.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/repimg.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/enum.h $(SRCDIR)/permut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/permut.c 
+primes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/primes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/primes.c 
+ptstbref.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/partn.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/ptstbref.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ptstbref.c 
+randgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randgrp.c 
+randobj.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/randgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/randobj.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randobj.c 
+randschr.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/randschr.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randschr.c 
+readdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/token.h $(SRCDIR)/readdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readdes.c 
+readgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readgrp.c 
+readpar.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpar.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readpar.c 
+readper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readper.c 
+readpts.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpts.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readpts.c 
+relator.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/enum.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/stcs.h $(SRCDIR)/storage.h $(SRCDIR)/relator.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/relator.c 
+rprique.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/rprique.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/rprique.c 
+setstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cparstab.h $(SRCDIR)/csetstab.h $(SRCDIR)/cuprstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/setstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/setstab.c 
+stcs.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/repimg.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randschr.h $(SRCDIR)/relator.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/stcs.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/stcs.c 
+storage.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/storage.c 
+token.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/token.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/token.c 
+util.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/util.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/util.c 
+wtdist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/field.h $(SRCDIR)/readdes.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/wt.h $(SRCDIR)/swt.h $(SRCDIR)/wtdist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/wtdist.c 
diff --git a/src/leon/Makefile.in b/src/leon/Makefile.in
new file mode 100755
index 0000000..0b678b9
--- /dev/null
+++ b/src/leon/Makefile.in
@@ -0,0 +1,183 @@
+COMPILE = gcc
+CFLAGS  = -O2
+SRCDIR  = ./src
+COMPOPT = -c -O2
+INCLUDES =
+LINKOPT = -v
+LINKNAME = -o
+OBJ = o
+
+all:   setstab cent inter desauto generate commut cjrndper orblist fndelt compgrp orbdes randobj wtdist
+#
+# Invoke linker -- setstab
+setstab:  setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OB [...]
+	$(COMPILE) $(LINKNAME) setstab $(LINKOPT) setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$ [...]
+#
+# Invoke linker -- cent
+cent:  cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) cent $(LINKOPT) cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) toke [...]
+#
+# Invoke linker -- inter
+inter:  inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) inter $(LINKOPT) inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTI [...]
+#
+# Invoke linker -- desauto
+desauto:  desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) rea [...]
+	$(COMPILE) $(LINKNAME) desauto $(LINKOPT) desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ)  [...]
+#
+# Invoke linker -- generate
+generate:  generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) generate $(LINKOPT) generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- commut
+commut:  commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccommut.$(OBJ)  chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) commut $(LINKOPT) commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) ccommut.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- cjrndper
+cjrndper: cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) cjrndper $(LINKOPT) cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orblist
+orblist: orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orblist $(LINKOPT) orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- fndelt
+fndelt:  fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) fndelt $(LINKOPT) fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- compgrp
+compgrp:  compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) compgrp $(LINKOPT) compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orbdes
+orbdes:  orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orbdes $(LINKOPT) orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- randobj
+randobj:  randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) randobj $(LINKOPT) randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- wtdist
+wtdist:  wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) wtdist $(LINKOPT) wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+#
+# Invoke compiler
+addsgen.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/cstborb.h $(SRCDIR)/addsgen.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/addsgen.c 
+bitmanp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/bitmanp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/bitmanp.c 
+ccent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/cparstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/ccent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ccent.c 
+ccommut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/copy.h $(SRCDIR)/chbase.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/ccommut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ccommut.c 
+cdesauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cdesauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cdesauto.c 
+cent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccent.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cent.c 
+chbase.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/chbase.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/chbase.c 
+cinter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cinter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cinter.c 
+cjrndper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cjrndper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cjrndper.c 
+cmatauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cmatauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cmatauto.c 
+code.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/code.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/code.c 
+commut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccommut.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/commut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/commut.c 
+compcrep.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/chbase.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compcrep.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compcrep.c 
+compgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/util.h $(SRCDIR)/compgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compgrp.c 
+compsg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/copy.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/ptstbref.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compsg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/compsg.c 
+copy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/storage.h $(SRCDIR)/copy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/copy.c 
+cparstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cparstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cparstab.c 
+csetstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/csetstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/csetstab.c 
+cstborb.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/storage.h $(SRCDIR)/cstborb.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cstborb.c 
+cstrbas.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permgrp.h $(SRCDIR)/ptstbref.h $(SRCDIR)/optsvec.h $(SRCDIR)/storage.h $(SRCDIR)/cstrbas.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cstrbas.c 
+cuprstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cuprstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/cuprstab.c 
+desauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cdesauto.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/desauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/desauto.c 
+errmesg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/errmesg.c 
+essentia.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/essentia.c 
+factor.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/factor.c 
+field.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/field.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/field.c 
+fndelt.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/randgrp.h $(SRCDIR)/util.h $(SRCDIR)/fndelt.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/fndelt.c 
+generate.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/storage.h $(SRCDIR)/cputime.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/readgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/stcs.h $(SRCDIR)/util.h $(SRCDIR)/generate.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/generate.c 
+inform.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cputime.h $(SRCDIR)/readgrp.h $(SRCDIR)/inform.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/inform.c 
+inter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cinter.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/inter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/inter.c 
+matrix.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/matrix.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/matrix.c 
+new.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/new.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/new.c 
+oldcopy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/oldcopy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/oldcopy.c 
+optsvec.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/storage.h $(SRCDIR)/optsvec.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/optsvec.c 
+orbdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orbdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbdes.c 
+orbit.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/orbit.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbit.c 
+orblist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orblist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orblist.c 
+orbrefn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/orbrefn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/orbrefn.c 
+partn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.h $(SRCDIR)/partn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/partn.c 
+permgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/permgrp.c 
+permut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/factor.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/repimg.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/enum.h $(SRCDIR)/permut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/permut.c 
+primes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/primes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/primes.c 
+ptstbref.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/partn.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/ptstbref.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/ptstbref.c 
+randgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randgrp.c 
+randobj.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/randgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/randobj.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randobj.c 
+randschr.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/randschr.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/randschr.c 
+readdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/token.h $(SRCDIR)/readdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readdes.c 
+readgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readgrp.c 
+readpar.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpar.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readpar.c 
+readper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readper.c 
+readpts.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpts.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/readpts.c 
+relator.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/enum.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/stcs.h $(SRCDIR)/storage.h $(SRCDIR)/relator.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/relator.c 
+rprique.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/rprique.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/rprique.c 
+setstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cparstab.h $(SRCDIR)/csetstab.h $(SRCDIR)/cuprstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/setstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/setstab.c 
+stcs.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/repimg.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randschr.h $(SRCDIR)/relator.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/stcs.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/stcs.c 
+storage.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/storage.c 
+token.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/token.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/token.c 
+util.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/util.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/util.c 
+wtdist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/field.h $(SRCDIR)/readdes.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/wt.h $(SRCDIR)/swt.h $(SRCDIR)/wtdist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES)  $(SRCDIR)/wtdist.c 
diff --git a/src/leon/config.guess b/src/leon/config.guess
new file mode 100755
index 0000000..396482d
--- /dev/null
+++ b/src/leon/config.guess
@@ -0,0 +1,1500 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    x86:Interix*:[3456]*)
+	echo i586-pc-interix${UNAME_RELEASE}
+	exit ;;
+    EM64T:Interix*:[3456]*)
+	echo x86_64-unknown-interix${UNAME_RELEASE}
+	exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/leon/config.sub b/src/leon/config.sub
new file mode 100755
index 0000000..387c18d
--- /dev/null
+++ b/src/leon/config.sub
@@ -0,0 +1,1608 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/leon/configure b/src/leon/configure
new file mode 100755
index 0000000..937220a
--- /dev/null
+++ b/src/leon/configure
@@ -0,0 +1,21666 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for libleon 0.0.2.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`
+
+tagnames=`echo "$tagnames,F77" | sed 's/^,//'`
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='libleon'
+PACKAGE_TARNAME='libleon'
+PACKAGE_VERSION='0.0.2'
+PACKAGE_STRING='libleon 0.0.2'
+PACKAGE_BUGREPORT=''
+
+ac_unique_file="src/group.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL [...]
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures libleon 0.0.2 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of libleon 0.0.2:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors
+  --enable-shared[=PKGS]
+                          build shared libraries [default=yes]
+  --enable-static[=PKGS]
+                          build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-tags[=TAGS]
+                          include additional configurations [automatic]
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+libleon configure 0.0.2
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by libleon $as_me 0.0.2, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+am__api_version="1.6"
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ # test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# Define the identity of the package.
+ PACKAGE=libleon
+ VERSION=0.0.2
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+
+
+# Add the stamp file to the list of files AC keeps track of,
+# along with our hook.
+          ac_config_headers="$ac_config_headers src/leon_config.h"
+
+
+
+rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
+  DEPDIR=.deps
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  DEPDIR=_deps
+fi
+rmdir .deps 2>/dev/null
+
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+doit:
+	@echo done
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    echo '#include "conftest.h"' > conftest.c
+    echo 'int i;' > conftest.h
+    echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=conftest.c object=conftest.o \
+       depfile=conftest.Po tmpdepfile=conftest.TPo \
+       $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+       grep conftest.h conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      am_cv_CC_dependencies_compiler_type=$depmode
+      break
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int *) 0)
+  return 0;
+if (sizeof (int))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
+
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi;
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi;
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi;
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+
+fi
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `"$LD" -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$CC -nostdlib -Xlinker$reload_flag $archargs -o $output$reload_objs'
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  # win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='win32_libid'
+  ;;
+
+darwin* | rhapsody*)
+  # this will be overwritten by pass_all, but leave it in just in case
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[012])
+    lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+  irix5* | nonstopux*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*)
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 4483 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to the libleon lists.  ##
+## ---------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    echo '#include "conftest.h"' > conftest.c
+    echo 'int i;' > conftest.h
+    echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=conftest.c object=conftest.o \
+       depfile=conftest.Po tmpdepfile=conftest.TPo \
+       $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+       grep conftest.h conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      am_cv_CXX_dependencies_compiler_type=$depmode
+      break
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_F77" && break
+done
+
+  F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:5542:" \
+     "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_f77_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  testring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \
+	       = "XX$testring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$testring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      testring=$testring$testring
+    done
+    testring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGISTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to undo escaping of the cmd sep variable
+unescape_variable_subst='s/\\\(${_S_}\)/\1/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  AR=$ac_ct_AR
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib\${_S_}$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib\${_S_}$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds\${_S_}\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    lt_prog_cc_shlib='-belf'
+    ;;
+  esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | grep "[ 	]$lt_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+    { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+     else
+       lt_prog_compiler_static_works=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6572: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:6576: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc|ecc)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      ccc)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic='-Kpic'
+      lt_prog_compiler_static='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6804: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:6808: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+   # that will create temporary files in the current directory regardless of
+   # the output directory.  Thus, making CWD read-only will cause this test
+   # to fail, enabling locking or at least warning the user not to do parallel
+   # builds.
+   chmod -w .
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6871: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:6875: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest* out/*
+   rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag=
+  enable_shared_with_static_runtimes=no
+  archive_cmds=
+  archive_expsym_cmds=
+  old_archive_From_new_cmds=
+  old_archive_from_expsyms_cmds=
+  export_dynamic_flag_spec=
+  whole_archive_flag_spec=
+  thread_safe_flag_spec=
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_direct=no
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  link_all_deplibs=unknown
+  hardcode_automatic=no
+  module_cmds=
+  module_expsym_cmds=
+  always_export_symbols=no
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi${_S_}
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L=yes
+  	  hardcode_libdir_flag_spec='-L$libdir'
+  	  hardcode_libdir_separator=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec=' '
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+      archive_cmds_need_lc=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag='-undefined suppress'
+	;;
+      darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0
+	test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+	;;
+      *) # Darwin 7.0 on
+	case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in
+	10.[012])
+	  test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+	  ;;
+	*) # 10.3 on
+	  if test -z ${LD_TWOLEVEL_NAMESPACE}; then
+	    allow_undefined_flag='-flat_namespace -undefined suppress'
+	  else
+	    allow_undefined_flag='-undefined dynamic_lookup'
+	  fi
+	  ;;
+	esac
+	;;
+      esac
+      # FIXME: Relying on posixy $() will cause problems for
+      #        cross-compilation, but unfortunately the echo tests do not
+      #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
+      #	       `"' quotes if we put them in here... so don't!
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct=no
+      hardcode_automatic=yes
+      hardcode_shlibpath_var=unsupported
+      whole_archive_flag_spec='-all_load $convenience'
+      link_all_deplibs=yes
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld='+b $libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    openbsd*)
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_}
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp'
+      else
+	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      hardcode_shlibpath_var=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      hardcode_libdir_flag_spec=
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *"$_S_"*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var " || \
+   test "X$hardcode_automatic"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   NOT-darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`${_S_}
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_}
+      dldir=$destdir/`dirname \$dlpath`${_S_}
+      test -d \$dldir || mkdir -p \$dldir${_S_}
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_}
+      dlpath=$dir/\$dldll${_S_}
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 9003 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 9101 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds\${_S_}\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+    archive_cmds_need_lc=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0
+      test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    *) # Darwin 7.0 on
+      case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in
+      10.[012])
+	test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+	;;
+      *) # 10.3 on
+	if test -z ${LD_TWOLEVEL_NAMESPACE}; then
+	  allow_undefined_flag='-flat_namespace -undefined suppress'
+	else
+	  allow_undefined_flag='-undefined dynamic_lookup'
+	fi
+	;;
+      esac
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
+    #	       `"' quotes if we put them in here... so don't!
+		output_verbose_link_cmd='echo'
+    archive_cmds='$CC -dynamiclib $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+		  archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+		  module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+    fi
+    ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler \
+    CC \
+    LD \
+    lt_prog_compiler_wl \
+    lt_prog_compiler_pic \
+    lt_prog_compiler_static \
+    lt_prog_compiler_no_builtin_flag \
+    export_dynamic_flag_spec \
+    thread_safe_flag_spec \
+    whole_archive_flag_spec \
+    enable_shared_with_static_runtimes \
+    old_archive_cmds \
+    old_archive_from_new_cmds \
+    predep_objects \
+    postdep_objects \
+    predeps \
+    postdeps \
+    compiler_lib_search_path \
+    archive_cmds \
+    archive_expsym_cmds \
+    postinstall_cmds \
+    postuninstall_cmds \
+    old_archive_from_expsyms_cmds \
+    allow_undefined_flag \
+    no_undefined_flag \
+    export_symbols_cmds \
+    hardcode_libdir_flag_spec \
+    hardcode_libdir_flag_spec_ld \
+    hardcode_libdir_separator \
+    hardcode_automatic \
+    module_cmds \
+    module_expsym_cmds \
+    lt_cv_prog_compiler_c_o \
+    exclude_expsyms \
+    include_expsyms; do
+
+    case $var in
+    old_archive_cmds | \
+    old_archive_from_new_cmds | \
+    archive_cmds | \
+    archive_expsym_cmds | \
+    module_cmds | \
+    module_expsym_cmds | \
+    old_archive_from_expsyms_cmds | \
+    export_symbols_cmds | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+  cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Set the command separator (default: ~)
+_S_=\${LIBTOOL_CMD_SEP-\~}
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+  withval="$with_tags"
+  tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+    else
+      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+    "") ;;
+    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+  lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `"$LD" -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec_CXX=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    archive_cmds_CXX=''
+    hardcode_direct_CXX=yes
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.012|aix4.012.*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct_CXX=yes
+	else
+	  # We have old collect2
+	  hardcode_direct_CXX=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_CXX=yes
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  hardcode_libdir_separator_CXX=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    always_export_symbols_CXX=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag_CXX='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag_CXX="-z nodefs"
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	no_undefined_flag_CXX=' ${wl}-bernotok'
+	allow_undefined_flag_CXX=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	always_export_symbols_CXX=yes
+	# Exported symbols can be pulled into shared objects from archives
+	whole_archive_flag_spec_CXX=' '
+	archive_cmds_need_lc_CXX=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+    # as there is no search path for DLLs.
+    hardcode_libdir_flag_spec_CXX='-L$libdir'
+    allow_undefined_flag_CXX=unsupported
+    always_export_symbols_CXX=no
+    enable_shared_with_static_runtimes_CXX=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi${_S_}
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+   if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+    archive_cmds_need_lc_CXX=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag_CXX='-undefined suppress'
+      ;;
+    darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0
+      test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+      ;;
+    *) # Darwin 7.0 on
+      case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in
+      10.[012])
+	test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+	;;
+      *) # 10.3 on
+	if test -z ${LD_TWOLEVEL_NAMESPACE}; then
+	  allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+	else
+	  allow_undefined_flag_CXX='-undefined dynamic_lookup'
+	fi
+	;;
+      esac
+      ;;
+    esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_CXX='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_CXX='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+        archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      else
+        archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      fi
+        module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct_CXX=no
+    hardcode_automatic_CXX=yes
+    hardcode_shlibpath_var_CXX=unsupported
+    whole_archive_flag_spec_CXX='-all_load $convenience'
+    link_all_deplibs_CXX=yes
+   fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  freebsd12*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    ld_shlibs_CXX=no
+    ;;
+  freebsd-elf*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  freebsd*)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    ld_shlibs_CXX=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    hardcode_direct_CXX=yes
+    hardcode_minus_L_CXX=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      ld_shlibs_CXX=no
+      ;;
+    aCC)
+      archive_cmds_CXX='$rm $output_objdir/$soname${_S_}$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        archive_cmds_CXX='$rm $output_objdir/$soname${_S_}$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+	hardcode_libdir_separator_CXX=:
+        ;;
+      ia64*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+        ;;
+      *)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+	export_dynamic_flag_spec_CXX='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      ;;
+    ia64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      hardcode_direct_CXX=yes
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	link_all_deplibs_CXX=yes
+	;;
+    esac
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	archive_cmds_need_lc_CXX=no
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      hardcode_libdir_flag_spec_CXX='-R$libdir'
+      hardcode_direct_CXX=yes
+      hardcode_shlibpath_var_CXX=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' -expect_unresolved \*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done${_S_}
+	  echo "-hidden">> $lib.exp${_S_}
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib${_S_}
+	  $rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  sco*)
+    archive_cmds_need_lc_CXX=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	no_undefined_flag_CXX=' -zdefs'
+	archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-R$libdir'
+	hardcode_shlibpath_var_CXX=no
+	case $host_os in
+	  solaris2.0-5 | solaris2.0-5.*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	link_all_deplibs_CXX=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_CXX=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11284: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:11288: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+   # that will create temporary files in the current directory regardless of
+   # the output directory.  Thus, making CWD read-only will cause this test
+   # to fail, enabling locking or at least warning the user not to do parallel
+   # builds.
+   chmod -w .
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11351: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:11355: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest* out/*
+   rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *"$_S_"*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+   test -n "$runpath_var CXX" || \
+   test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   NOT-darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`${_S_}
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_}
+      dldir=$destdir/`dirname \$dlpath`${_S_}
+      test -d \$dldir || mkdir -p \$dldir${_S_}
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_}
+      dlpath=$dir/\$dldll${_S_}
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 12680 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 12778 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_CXX \
+    CC_CXX \
+    LD_CXX \
+    lt_prog_compiler_wl_CXX \
+    lt_prog_compiler_pic_CXX \
+    lt_prog_compiler_static_CXX \
+    lt_prog_compiler_no_builtin_flag_CXX \
+    export_dynamic_flag_spec_CXX \
+    thread_safe_flag_spec_CXX \
+    whole_archive_flag_spec_CXX \
+    enable_shared_with_static_runtimes_CXX \
+    old_archive_cmds_CXX \
+    old_archive_from_new_cmds_CXX \
+    predep_objects_CXX \
+    postdep_objects_CXX \
+    predeps_CXX \
+    postdeps_CXX \
+    compiler_lib_search_path_CXX \
+    archive_cmds_CXX \
+    archive_expsym_cmds_CXX \
+    postinstall_cmds_CXX \
+    postuninstall_cmds_CXX \
+    old_archive_from_expsyms_cmds_CXX \
+    allow_undefined_flag_CXX \
+    no_undefined_flag_CXX \
+    export_symbols_cmds_CXX \
+    hardcode_libdir_flag_spec_CXX \
+    hardcode_libdir_flag_spec_ld_CXX \
+    hardcode_libdir_separator_CXX \
+    hardcode_automatic_CXX \
+    module_cmds_CXX \
+    module_expsym_cmds_CXX \
+    lt_cv_prog_compiler_c_o_CXX \
+    exclude_expsyms_CXX \
+    include_expsyms_CXX; do
+
+    case $var in
+    old_archive_cmds_CXX | \
+    old_archive_from_new_cmds_CXX | \
+    archive_cmds_CXX | \
+    archive_expsym_cmds_CXX | \
+    module_cmds_CXX | \
+    module_expsym_cmds_CXX | \
+    old_archive_from_expsyms_cmds_CXX | \
+    export_symbols_cmds_CXX | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Set the command separator (default: ~)
+_S_=\${LIBTOOL_CMD_SEP-\~}
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds\${_S_}\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc|ecc)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      ccc)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_F77='-Kpic'
+      lt_prog_compiler_static_F77='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_F77=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13603: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:13607: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+   # that will create temporary files in the current directory regardless of
+   # the output directory.  Thus, making CWD read-only will cause this test
+   # to fail, enabling locking or at least warning the user not to do parallel
+   # builds.
+   chmod -w .
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13670: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:13674: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest* out/*
+   rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  enable_shared_with_static_runtimes_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  old_archive_From_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  export_dynamic_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  thread_safe_flag_spec_F77=
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_flag_spec_ld_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_direct_F77=no
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  link_all_deplibs_F77=unknown
+  hardcode_automatic_F77=no
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  always_export_symbols_F77=no
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_F77=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi${_S_}
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_F77" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_F77=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_F77=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_F77=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_F77=yes
+  	  hardcode_libdir_flag_spec_F77='-L$libdir'
+  	  hardcode_libdir_separator_F77=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' ${wl}-bernotok'
+	  allow_undefined_flag_F77=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_F77=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_F77=' '
+	  archive_cmds_need_lc_F77=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_F77=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_F77=' '
+      allow_undefined_flag_F77=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_F77='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+      archive_cmds_need_lc_F77=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_F77='-undefined suppress'
+	;;
+      darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0
+	test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+	;;
+      *) # Darwin 7.0 on
+	case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in
+	10.[012])
+	  test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+	  ;;
+	*) # 10.3 on
+	  if test -z ${LD_TWOLEVEL_NAMESPACE}; then
+	    allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+	  else
+	    allow_undefined_flag_F77='-undefined dynamic_lookup'
+	  fi
+	  ;;
+	esac
+	;;
+      esac
+      # FIXME: Relying on posixy $() will cause problems for
+      #        cross-compilation, but unfortunately the echo tests do not
+      #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
+      #	       `"' quotes if we put them in here... so don't!
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_F77='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_F77='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_F77=no
+      hardcode_automatic_F77=yes
+      hardcode_shlibpath_var_F77=unsupported
+      whole_archive_flag_spec_F77='-all_load $convenience'
+      link_all_deplibs_F77=yes
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd*)
+      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_F77='-L$libdir'
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=yes
+	  export_dynamic_flag_spec_F77='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      link_all_deplibs_F77=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_F77='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_F77='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_}
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp'
+      else
+	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_F77='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_F77=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      hardcode_libdir_flag_spec_F77=
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_F77 in
+    *"$_S_"*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_F77
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+        allow_undefined_flag_F77=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_F77=no
+        else
+	  archive_cmds_need_lc_F77=yes
+        fi
+        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+   test -n "$runpath_var F77" || \
+   test "X$hardcode_automatic_F77"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_F77" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+     test "$hardcode_minus_L_F77" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   NOT-darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`${_S_}
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_}
+      dldir=$destdir/`dirname \$dlpath`${_S_}
+      test -d \$dldir || mkdir -p \$dldir${_S_}
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_}
+      dlpath=$dir/\$dldll${_S_}
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_F77 \
+    CC_F77 \
+    LD_F77 \
+    lt_prog_compiler_wl_F77 \
+    lt_prog_compiler_pic_F77 \
+    lt_prog_compiler_static_F77 \
+    lt_prog_compiler_no_builtin_flag_F77 \
+    export_dynamic_flag_spec_F77 \
+    thread_safe_flag_spec_F77 \
+    whole_archive_flag_spec_F77 \
+    enable_shared_with_static_runtimes_F77 \
+    old_archive_cmds_F77 \
+    old_archive_from_new_cmds_F77 \
+    predep_objects_F77 \
+    postdep_objects_F77 \
+    predeps_F77 \
+    postdeps_F77 \
+    compiler_lib_search_path_F77 \
+    archive_cmds_F77 \
+    archive_expsym_cmds_F77 \
+    postinstall_cmds_F77 \
+    postuninstall_cmds_F77 \
+    old_archive_from_expsyms_cmds_F77 \
+    allow_undefined_flag_F77 \
+    no_undefined_flag_F77 \
+    export_symbols_cmds_F77 \
+    hardcode_libdir_flag_spec_F77 \
+    hardcode_libdir_flag_spec_ld_F77 \
+    hardcode_libdir_separator_F77 \
+    hardcode_automatic_F77 \
+    module_cmds_F77 \
+    module_expsym_cmds_F77 \
+    lt_cv_prog_compiler_c_o_F77 \
+    exclude_expsyms_F77 \
+    include_expsyms_F77; do
+
+    case $var in
+    old_archive_cmds_F77 | \
+    old_archive_from_new_cmds_F77 | \
+    archive_cmds_F77 | \
+    archive_expsym_cmds_F77 | \
+    module_cmds_F77 | \
+    module_expsym_cmds_F77 | \
+    old_archive_from_expsyms_cmds_F77 | \
+    export_symbols_cmds_F77 | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Set the command separator (default: ~)
+_S_=\${LIBTOOL_CMD_SEP-\~}
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15649: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15653: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_GCJ='-Wl,'
+    lt_prog_compiler_static_GCJ='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_GCJ='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_GCJ=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_GCJ=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_GCJ='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      else
+	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc|ecc)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-KPIC'
+	lt_prog_compiler_static_GCJ='-static'
+        ;;
+      ccc)
+        lt_prog_compiler_wl_GCJ='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_GCJ='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_GCJ='-Kpic'
+      lt_prog_compiler_static_GCJ='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_GCJ='-Qoption ld '
+      lt_prog_compiler_pic_GCJ='-PIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_GCJ='-Kconform_pic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_GCJ='-pic'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_GCJ=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15881: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15885: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+    case $lt_prog_compiler_pic_GCJ in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+     esac
+else
+    lt_prog_compiler_pic_GCJ=
+     lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_GCJ=
+    ;;
+  *)
+    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_GCJ=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+   # that will create temporary files in the current directory regardless of
+   # the output directory.  Thus, making CWD read-only will cause this test
+   # to fail, enabling locking or at least warning the user not to do parallel
+   # builds.
+   chmod -w .
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15948: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15952: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_GCJ=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest* out/*
+   rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_GCJ=
+  enable_shared_with_static_runtimes_GCJ=no
+  archive_cmds_GCJ=
+  archive_expsym_cmds_GCJ=
+  old_archive_From_new_cmds_GCJ=
+  old_archive_from_expsyms_cmds_GCJ=
+  export_dynamic_flag_spec_GCJ=
+  whole_archive_flag_spec_GCJ=
+  thread_safe_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_ld_GCJ=
+  hardcode_libdir_separator_GCJ=
+  hardcode_direct_GCJ=no
+  hardcode_minus_L_GCJ=no
+  hardcode_shlibpath_var_GCJ=unsupported
+  link_all_deplibs_GCJ=unknown
+  hardcode_automatic_GCJ=no
+  module_cmds_GCJ=
+  module_expsym_cmds_GCJ=
+  always_export_symbols_GCJ=no
+  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_GCJ=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_GCJ=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_GCJ=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_GCJ=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=no
+      enable_shared_with_static_runtimes_GCJ=yes
+      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi${_S_}
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_GCJ" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_GCJ=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=yes
+      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_GCJ=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_GCJ=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_GCJ=''
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_GCJ=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_GCJ=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_GCJ=yes
+  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+  	  hardcode_libdir_separator_GCJ=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_GCJ=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_GCJ='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_GCJ="-z nodefs"
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_GCJ=' ${wl}-bernotok'
+	  allow_undefined_flag_GCJ=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_GCJ=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_GCJ=' '
+	  archive_cmds_need_lc_GCJ=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_GCJ=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_GCJ=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ=' '
+      allow_undefined_flag_GCJ=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_GCJ='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_GCJ=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+      archive_cmds_need_lc_GCJ=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_GCJ='-undefined suppress'
+	;;
+      darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0
+	test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+	;;
+      *) # Darwin 7.0 on
+	case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in
+	10.[012])
+	  test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+	  ;;
+	*) # 10.3 on
+	  if test -z ${LD_TWOLEVEL_NAMESPACE}; then
+	    allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+	  else
+	    allow_undefined_flag_GCJ='-undefined dynamic_lookup'
+	  fi
+	  ;;
+	esac
+	;;
+      esac
+      # FIXME: Relying on posixy $() will cause problems for
+      #        cross-compilation, but unfortunately the echo tests do not
+      #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
+      #	       `"' quotes if we put them in here... so don't!
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_GCJ='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_GCJ='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_GCJ=no
+      hardcode_automatic_GCJ=yes
+      hardcode_shlibpath_var_GCJ=unsupported
+      whole_archive_flag_spec_GCJ='-all_load $convenience'
+      link_all_deplibs_GCJ=yes
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_GCJ=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd*)
+      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_GCJ='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_direct_GCJ=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=yes
+	  export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    newsos6)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      allow_undefined_flag_GCJ=unsupported
+      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_}
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_GCJ=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp'
+      else
+	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+	  hardcode_direct_GCJ=no
+        ;;
+	motorola)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_GCJ=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_GCJ=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_GCJ='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_GCJ=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_}
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp'
+      hardcode_libdir_flag_spec_GCJ=
+      hardcode_shlibpath_var_GCJ=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      ld_shlibs_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_GCJ=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_GCJ in
+    *"$_S_"*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_GCJ
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+        allow_undefined_flag_GCJ=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_GCJ=no
+        else
+	  archive_cmds_need_lc_GCJ=yes
+        fi
+        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+   test -n "$runpath_var GCJ" || \
+   test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_GCJ" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+     test "$hardcode_minus_L_GCJ" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_GCJ=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_GCJ=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   NOT-darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`${_S_}
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_}
+      dldir=$destdir/`dirname \$dlpath`${_S_}
+      test -d \$dldir || mkdir -p \$dldir${_S_}
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_}
+      dlpath=$dir/\$dldll${_S_}
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 18080 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 18178 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_GCJ \
+    CC_GCJ \
+    LD_GCJ \
+    lt_prog_compiler_wl_GCJ \
+    lt_prog_compiler_pic_GCJ \
+    lt_prog_compiler_static_GCJ \
+    lt_prog_compiler_no_builtin_flag_GCJ \
+    export_dynamic_flag_spec_GCJ \
+    thread_safe_flag_spec_GCJ \
+    whole_archive_flag_spec_GCJ \
+    enable_shared_with_static_runtimes_GCJ \
+    old_archive_cmds_GCJ \
+    old_archive_from_new_cmds_GCJ \
+    predep_objects_GCJ \
+    postdep_objects_GCJ \
+    predeps_GCJ \
+    postdeps_GCJ \
+    compiler_lib_search_path_GCJ \
+    archive_cmds_GCJ \
+    archive_expsym_cmds_GCJ \
+    postinstall_cmds_GCJ \
+    postuninstall_cmds_GCJ \
+    old_archive_from_expsyms_cmds_GCJ \
+    allow_undefined_flag_GCJ \
+    no_undefined_flag_GCJ \
+    export_symbols_cmds_GCJ \
+    hardcode_libdir_flag_spec_GCJ \
+    hardcode_libdir_flag_spec_ld_GCJ \
+    hardcode_libdir_separator_GCJ \
+    hardcode_automatic_GCJ \
+    module_cmds_GCJ \
+    module_expsym_cmds_GCJ \
+    lt_cv_prog_compiler_c_o_GCJ \
+    exclude_expsyms_GCJ \
+    include_expsyms_GCJ; do
+
+    case $var in
+    old_archive_cmds_GCJ | \
+    old_archive_from_new_cmds_GCJ | \
+    archive_cmds_GCJ | \
+    archive_expsym_cmds_GCJ | \
+    module_cmds_GCJ | \
+    module_expsym_cmds_GCJ | \
+    old_archive_from_expsyms_cmds_GCJ | \
+    export_symbols_cmds_GCJ | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Set the command separator (default: ~)
+_S_=\${LIBTOOL_CMD_SEP-\~}
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_RC \
+    CC_RC \
+    LD_RC \
+    lt_prog_compiler_wl_RC \
+    lt_prog_compiler_pic_RC \
+    lt_prog_compiler_static_RC \
+    lt_prog_compiler_no_builtin_flag_RC \
+    export_dynamic_flag_spec_RC \
+    thread_safe_flag_spec_RC \
+    whole_archive_flag_spec_RC \
+    enable_shared_with_static_runtimes_RC \
+    old_archive_cmds_RC \
+    old_archive_from_new_cmds_RC \
+    predep_objects_RC \
+    postdep_objects_RC \
+    predeps_RC \
+    postdeps_RC \
+    compiler_lib_search_path_RC \
+    archive_cmds_RC \
+    archive_expsym_cmds_RC \
+    postinstall_cmds_RC \
+    postuninstall_cmds_RC \
+    old_archive_from_expsyms_cmds_RC \
+    allow_undefined_flag_RC \
+    no_undefined_flag_RC \
+    export_symbols_cmds_RC \
+    hardcode_libdir_flag_spec_RC \
+    hardcode_libdir_flag_spec_ld_RC \
+    hardcode_libdir_separator_RC \
+    hardcode_automatic_RC \
+    module_cmds_RC \
+    module_expsym_cmds_RC \
+    lt_cv_prog_compiler_c_o_RC \
+    exclude_expsyms_RC \
+    include_expsyms_RC; do
+
+    case $var in
+    old_archive_cmds_RC | \
+    old_archive_from_new_cmds_RC | \
+    archive_cmds_RC | \
+    archive_expsym_cmds_RC | \
+    module_cmds_RC | \
+    module_expsym_cmds_RC | \
+    old_archive_from_expsyms_cmds_RC | \
+    export_symbols_cmds_RC | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Set the command separator (default: ~)
+_S_=\${LIBTOOL_CMD_SEP-\~}
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	;;
+
+      *)
+	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    echo '#include "conftest.h"' > conftest.c
+    echo 'int i;' > conftest.h
+    echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=conftest.c object=conftest.o \
+       depfile=conftest.Po tmpdepfile=conftest.TPo \
+       $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+       grep conftest.h conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      am_cv_CC_dependencies_compiler_type=$depmode
+      break
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+          ac_config_files="$ac_config_files Makefile"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by libleon $as_me 0.0.2, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+libleon config.status 0.0.2
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "src/leon_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/leon_config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at PACKAGE@,$PACKAGE,;t t
+s, at VERSION@,$VERSION,;t t
+s, at ACLOCAL@,$ACLOCAL,;t t
+s, at AUTOCONF@,$AUTOCONF,;t t
+s, at AUTOMAKE@,$AUTOMAKE,;t t
+s, at AUTOHEADER@,$AUTOHEADER,;t t
+s, at MAKEINFO@,$MAKEINFO,;t t
+s, at AMTAR@,$AMTAR,;t t
+s, at install_sh@,$install_sh,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s, at AWK@,$AWK,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at DEPDIR@,$DEPDIR,;t t
+s, at am__include@,$am__include,;t t
+s, at am__quote@,$am__quote,;t t
+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s, at CCDEPMODE@,$CCDEPMODE,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at AR@,$AR,;t t
+s, at ac_ct_AR@,$ac_ct_AR,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at CXX@,$CXX,;t t
+s, at CXXFLAGS@,$CXXFLAGS,;t t
+s, at ac_ct_CXX@,$ac_ct_CXX,;t t
+s, at CXXDEPMODE@,$CXXDEPMODE,;t t
+s, at CXXCPP@,$CXXCPP,;t t
+s, at F77@,$F77,;t t
+s, at FFLAGS@,$FFLAGS,;t t
+s, at ac_ct_F77@,$ac_ct_F77,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+  # Run the commands associated with the file.
+  case $ac_file in
+    src/leon_config.h ) # update the timestamp
+echo 'timestamp for src/leon_config.h' >"src/stamp-h1"
+ ;;
+  esac
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/src/leon/configure.in b/src/leon/configure.in
new file mode 100644
index 0000000..f3d840d
--- /dev/null
+++ b/src/leon/configure.in
@@ -0,0 +1,19 @@
+AC_INIT(leon,1.0)
+AC_CONFIG_SRCDIR(src/group.h)
+AM_INIT_AUTOMAKE
+AM_CONFIG_HEADER(src/leon_config.h)
+AC_CHECK_SIZEOF(int)
+
+AC_PROG_LIBTOOL
+
+AC_PROG_INSTALL
+
+AC_PROG_CC
+AC_LANG_C
+AC_PROG_MAKE_SET
+
+AC_HEADER_STDC
+
+dnl maybe AC_CHECK_HEADERS or AC_CHECK_FUNCS to verify existence of needed things...
+
+AC_OUTPUT(Makefile)
diff --git a/src/leon/doc/leon_guava_manual.pdf b/src/leon/doc/leon_guava_manual.pdf
new file mode 100644
index 0000000..f818183
Binary files /dev/null and b/src/leon/doc/leon_guava_manual.pdf differ
diff --git a/src/leon/doc/manual.tex b/src/leon/doc/manual.tex
new file mode 100644
index 0000000..36c9242
--- /dev/null
+++ b/src/leon/doc/manual.tex
@@ -0,0 +1,3002 @@
+% Twelve point font
+\font\twelverm=cmr12
+\font\twelvei=cmmi12
+\font\twelvesy=cmsy10 scaled \magstep1
+\font\twelveex=cmex10 scaled \magstep1
+\font\twelvebf=cmbx12
+\font\twelvesl=cmsl12
+\font\twelvett=cmtt12
+\font\twelveit=cmti12
+\font\ninerm=cmr9
+\font\ninei=cmmi9
+\font\ninesy=cmsy9
+\font\ninebf=cmbx9
+\font\sevenrm=cmr7
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\font\sevenbf=cmbx7
+\def\twelvepoint{\def\rm{\fam0\twelverm}
+   \textfont0=\twelverm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm
+   \textfont1=\twelvei  \scriptfont1=\ninei  \scriptscriptfont1=\seveni
+   \textfont2=\twelvesy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+   \textfont3=\twelveex \scriptfont3=\twelveex\scriptscriptfont3=\twelveex
+   \textfont\itfam=\twelveit  \def\it{\fam\itfam\twelveit}%
+   \textfont\slfam=\twelvesl  \def\sl{\fam\slfam\twelvesl}%
+   \textfont\ttfam=\twelvett  \def\tt{\fam\ttfam\twelvett}%
+   \textfont\bffam=\twelvebf  \scriptfont\bffam=\ninebf
+   \scriptscriptfont\bffam=\sevenbf  \def\bf{\fam\bffam\twelvebf}%
+   \normalbaselineskip=14pt
+   \setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}%
+   \normalbaselines\rm}
+%
+% 11 point font
+\font\elevenrm=cmr10    scaled \magstephalf
+\font\eleveni=cmmi10    scaled \magstephalf
+\font\elevensy=cmsy10   scaled \magstephalf
+\font\elevenex=cmex10   scaled \magstephalf
+\font\elevenbf=cmbx10   scaled \magstephalf
+\font\elevensl=cmsl10   scaled \magstephalf
+\font\eleventt=cmtt10   scaled \magstephalf
+\font\elevenit=cmti10   scaled \magstephalf
+\font\eightrm=cmr8
+\font\eighti=cmmi8
+\font\eightsy=cmsy8
+\font\eightbf=cmbx8
+\font\sixrm=cmr6
+\font\sixi=cmmi6
+\font\sixsy=cmsy6
+\font\sixbf=cmbx6
+\def\elevenpoint{\def\rm{\fam0\elevenrm}% switch to 11-point type
+   \textfont0=\elevenrm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
+   \textfont1=\eleveni  \scriptfont1=\eighti  \scriptscriptfont1=\sixi
+   \textfont2=\elevensy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+   \textfont3=\elevenex \scriptfont3=\elevenex\scriptscriptfont3=\elevenex
+   \textfont\itfam=\elevenit  \def\it{\fam\itfam\elevenit}%
+   \textfont\slfam=\elevensl  \def\sl{\fam\slfam\elevensl}%
+   \textfont\ttfam=\eleventt  \def\tt{\fam\ttfam\eleventt}%
+   \textfont\bffam=\elevenbf  \scriptfont\bffam=\eightbf
+   \scriptscriptfont\bffam=\sixbf  \def\bf{\fam\bffam\elevenbf}%
+   \normalbaselineskip=13pt
+   \setbox\strutbox=\hbox{\vrule height9pt depth4pt width0pt}%
+   \normalbaselines\rm}
+%
+\twelvepoint
+\parindent=0pt
+\raggedbottom
+
+% Make headline containing date
+\def\makeheadline{\vbox to 0pt{\vskip-45pt
+   \line{\vbox to 8.5pt{}\hskip-40pt\fiverm{\number\month}/{\number\day}/92\hfil}\vss}
+   \nointerlineskip}
+%
+\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
+\chardef\letter = 11 \chardef\other = 12
+\catcode`@=\letter
+\def\alwaysspace{\hglue\fontdimen2\the\font \relax}%
+{\makeactive\^^M \makeactive\ %
+\gdef\obeywhitespace{%
+\makeactive\^^M\def^^M{\par\indent}%
+\aftergroup\@removebox%
+\makeactive\ \let =\alwaysspace}}%
+\def\@removebox{\setbox0=\lastbox}
+%
+\font\titlefont=cmbx10 scaled\magstep4
+\font\authorfont=cmr12 scaled\magstep1
+\font\sectionheaderfont=cmbx12 scaled\magstep1
+\font\subsectionheaderfont=cmbx12
+\def\filenamefont{\tt}
+%
+\long\def\section#1{\bigbigbreak{\sectionheaderfont #1}\nobreak\medskip\nobreak}
+\long\def\subsection#1{\bigbreak{\subsectionheaderfont #1}\hskip0.75em}
+\def\twocols#1#2{\hskip0.45truein\hbox to 3.0truein{#1\hfil}\hskip0.4truein\relax
+                 \hbox to 2.45truein{#2\hfil}\hfil}
+\long\def\objectfile#1{{\elevenpoint\obeylines\obeyspaces\tt\ttraggedright
+                        #1\vskip0pt}}
+\newdimen\optionIndent\optionIndent=1.1in
+\long\def\defoption#1#2{{\advance\leftskip by1em\advance\leftskip by\optionIndent
+                       \noindent\llap{\hbox to\optionIndent{\tt #1\hfil}}#2\vskip0pt}}
+%
+\def\germR{\underline{{\rm R}}}
+\def\bfgermR{\underline{{\bf R}}}
+%
+\def\options{{\rm [}{\it options\/}{\rm ]}}
+%
+\newskip\bigbigskipamount \bigbigskipamount=20pt plus 7pt minus 5pt
+\def\bigbigskip{\vskip\bigbigskipamount}
+\def\bigbigbreak{\par\ifdim\lastskip<\bigbigskipamount
+  \removelastskip\penalty-300\bigbigskip\fi}
+\multiply\smallskipamount by4\divide\smallskipamount by3
+\multiply\medskipamount by4\divide\medskipamount by3
+\multiply\bigskipamount by4\divide\bigskipamount by3
+\multiply\bigbigskipamount by4\divide\bigbigskipamount by3
+%
+\pageno=1
+\centerline{{\titlefont PARTITION BACKTRACK PROGRAMS:}}
+\vskip10pt
+\centerline{{\titlefont USER'S MANUAL}}
+\vskip35pt
+\centerline{{\authorfont JEFFREY S. LEON}}
+\vskip6pt
+\centerline{Mathmatics Dept, m/c 249}
+\centerline{University of Illinois at Chicago}
+\centerline{Box 4348}
+\centerline{Chicago, IL 60680}
+\vskip40pt
+%
+\section{I.\quad INTRODUCTION}
+%
+This document describes a collection of programs for permutation group
+computations employing the partition backtrack method, as described in a
+recent article by the author (Leon, 1991).  At present, these programs
+perform the following computations:
+\medskip
+\twocols{set stabilizers,}{set images (see below),}
+\vskip4pt
+\twocols{ordered partition stabilizers,}{ordered partition images,}
+\vskip4pt
+\twocols{intersections,}{}
+\vskip4pt
+\twocols{centralizers (of elements),}{conjugacy (of elements),}
+\vskip4pt
+\twocols{centralizers (of subgroups),}{}
+\vskip4pt
+\twocols{automorphism groups of designs,}{isomorphism of designs,}
+\vskip4pt
+\twocols{automorphism groups of matrices,}{isomorphism of matrices,}
+\vskip4pt
+\twocols{monomial automorphism groups of}{monomial isomorphism of matrices}
+\vskip-1.5pt
+\twocols{matrices over small fields,}{over small fields,}
+\vskip4pt
+\twocols{automorphism groups of linear codes,}{isomorphism of linear codes.}
+\medbreak
+The term {\it set image} problem is used here to refer to the following
+problem: Given a permutation group
+$G$ and subsets $\Lambda$ and $\Phi$ of the domain, determine if there exists
+$g \in G$ such that $\Lambda^g = \Phi$.  The ordered partition image problem is
+defined analogously.  The term {\it design\/} is used here to refer to any
+collection of points and blocks.  An automorphism of a matrix is any permutation
+of the rows and columns that leaves the matrix invariant; two matrices are
+isomorphic if one may be transformed to the other by permutation of rows and
+columns.  For monomial automorphism groups and monomial isomorphism, the matrix entries
+must be taken from a finite field; in addition to permutation of rows and
+columns, we allow each row and each column to be multiplied by a nonzero
+field element.
+%
+\medbreak
+Note that each of the problems in the first column above involves
+computation of a subgroup; these problems will be referred to
+as {\it subgroup computations}.  For each problem
+in the second column, the set of permutations having the desired property
+either is empty or forms a right coset of an appropriate subgroup; we are
+seeking one coset representative (if it exists).  These problems
+will be referred to as {\it coset representative computations}.
+%
+\medbreak
+Some of the programs described here can be used to compute in groups of
+relatively high degree, considerably higher than those that can be
+handled by programs based on conventional algorithms.
+However, it should be kept mind that the programs are new.
+All appear to work correctly, but most have not
+been thoroughly tested, especially on intransitive groups.  (The set
+stabilizer program has been tested the most thoroughly, and in general those
+for subgroup computations have received more testing than those for coset
+representative calculations.)  The author would appreciate any reports of errors; they
+may be sent to {\tt leon at turing.math.uic.edu}.
+\medbreak
+Work on programs for the following computations is in progress:
+\medskip
+\twocols{unordered partition stabilizers,}{unordered partition images,}
+\vskip4pt
+\twocols{normalizers,}{conjugacy (of subgroups),}
+\vskip4pt
+\twocols{}{coset intersections,}
+\medbreak
+In the course of constructing test cases for the partition backtrack programs
+and verifying their output,
+the author has developed several other programs, not based on backtrack search.
+These programs are described briefly in Section~IX.  Many of these programs
+were put together quickly, with a view toward simplicity rather than
+efficiency and ease of use.
+\medbreak
+At present, the programs run on the following machines: The Sun/3, the Sun/4,
+the IBM~3090, and the IBM~PC.  Two versions are available for the IBM~PC: a standard version,
+which is limited to groups of degree no more than 1000 (roughly) due
+to the 640K memory limitation, and a 386/486 version using a DOS extender, that
+can handle larger groups.  The source code for all programs is written
+entirely in C and, with very minor exceptions, conforms to the ANSI
+standard.  The programs should compile, with minimal changes, with
+any C compiler fully supporting the ANSI standard.  The Sun/3 and Sun/4
+versions have been compiled with the GNU C compiler, the IBM~3090 version with the
+Waterloo~C compiler, and the IBM/PC versions with the Borland C++ and
+Zortech C++ compilers (both configured as C compilers).
+%
+%
+\section{II.\quad OBJECTS AND FILE FORMATS}
+%
+At present, the programs compute with objects of seven types:  Permutation
+groups, permutations, point sets, partitions (ordered or unordered),
+block designs, matrices, and linear codes.  Each object used as
+input by the programs is read from a file.  Likewise, each object constructed
+by the programs is written to a file.  All of these files
+are ordinary text files.  The format of the files is designed for
+compatibility with Cayley (Cannon, 1984); it is that of a Cayley library,
+with certain restrictions added.  Essentially, the restrictions say that
+the library may contain only statements defining the object, and (at present)
+that only certain attributes of the object may specified in the library.
+(Many of the permutation group libraries distributed with Cayley conform
+to these restrictions.)  Thus objects constructed by these programs 
+described here may be read into Cayley for further investigation.
+Likewise, objects defined in existing Cayley libraries may, in many cases,
+be used as input to the programs described here.  An alternative format,
+compatible with Gap, may be added at a later date.
+\medbreak
+The examples which follow illustrate the correct format for these object files.
+Note that the contents of the files is case--insensitive; upper and lower case
+letters may be used interchangeably.  (However, the names of the files may
+be case--sensitive, depending on the operating system.)  Also, the
+use of white space (blanks, tabs, newline characters) is optional:  Except
+within integers and identifiers, any number of whitespace characters may
+occur.  Text enclosed by ampersands or quotation marks is treated as a comment.
+%
+\subsection{a)\enskip Permutation groups:}The format for permutation group files
+is illustrated by following file, named {\filenamefont psp62}, which defines
+${\rm PSp}_6(2)$ as a permutation group
+on nonzero vectors (degree 63).
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY psp62;
+" PSp(6,2) acting on nonzero vectors, degree 63."
+psp62: permutation group(63);
+psp62.forder: 2^9 * 3^4 * 5 * 7;
+psp62.generators:
+  a = (1,2)(3,5)(4,7)(8,12)(11,16)(13,19)(17,18)(20,26)(21,28)(23,30)(24,32)
+      (25,34)(29,37)(31,40)(33,43)(36,46)(38,41)(39,49)(42,44)(45,52)(48,51)
+      (53,58)(57,62)(59,61),
+  b = (1,3,6,10,15,22)(2,4,8,13,20,27)(5,9,14,21,29,38)(7,11,17,23,31,41)
+      (12,18,24,33,44,34)(16,19,25)(26,35,45,53,32,42)(28,36,47)(30,39,50,
+      56,61,58)(37,48)(40,51,46,54,59,62)(49,55,60,63,52,57);
+FINISH;\vskip0pt}}
+\medbreak
+The line specifying the factored group order may be omitted; however, since the
+random Schreier method is currently used to construct a base and strong
+generating set for the group, there is a possibility (probably small) that
+the group may be generated incorrectly if this line is removed.  
+When generators are written in cycle format, as above, inclusion of cycles
+of length one is optional.  (For compatibility with Cayley, they should be
+omitted.)
+It is also
+possible to write the generators in image (rather than cycle) format; in
+this case, the file shown above would become:
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY psp62;
+" PSp(6,2) acting on nonzero vectors, degree 63."
+psp62: permutation group(63);
+psp62.forder: 2^9 * 3^4 * 5 * 7;
+psp62.generators:
+   a = /2,1,5,7,3,6,4,12,9,10,16,8,19,14,15,11,18,17,13,26,28,22,30,
+        32,34,20,27,21,37,23,40,24,43,25,35,46,29,41,49,31,38,44,33,42,
+        52,36,47,51,39,50,48,45,58,54,55,56,62,53,61,60,59,57,63/,
+   b = /3,4,6,8,9,10,11,13,14,15,17,18,20,21,22,19,23,24,25,27,29,1,
+        31,33,16,35,2,36,38,39,41,42,44,12,45,47,48,5,50,51,7,26,43,34,
+        53,54,28,37,55,56,46,57,32,59,60,61,49,30,62,63,58,40,52/;
+FINISH;\vskip0pt}}
+\medbreak
+Finally, if a base and strong generating set for the group are already
+known, they may be included in the file.  This eliminates the need for
+the programs to first construct a base and strong generating set for
+the input group.  The file format is then as follows.
+\nobreak\medskip\nobreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY psp62;
+" PSp(6,2) acting on nonzero vectors, degree 63."
+psp62: permutation group(63);
+psp62.forder: 2^9 * 3^4 * 5 * 7;
+psp62.base:  seq(1,3,6,2,4,5);
+psp62.strong generators:  [
+   x01 = (1,3)(4,27)(5,9)(7,45)(10,48)(11,17)(12,34)(13,20)(14,25)(15,
+         39)(16,63)(19,60)(21,55)(22,58)(23,28)(24,37)(31,53)(32,47)(33,
+         61)(36,42)(38,49)(44,50)(51,62)(54,59),
+   x02 = (2,16)(3,6)(5,55)(8,21)(9,40)(13,51)(14,46)(15,47)(17,44)(19,
+         59)(20,29)(22,36)(23,58)(24,61)(25,63)(26,37)(27,60)(31,50)(32,
+         48)(33,41)(34,56)(38,57)(43,45)(52,62),
+    .
+    .
+
+   x12 = (5,51)(7,12)(8,29)(9,62)(10,42)(13,55)(15,23)(18,35)(20,21)
+         (22,32)(28,39)(34,45)(36,48)(40,52)(43,56)(47,58)];
+FINISH;\vskip0pt}}
+\medbreak
+(The vertical dots indicated that part of the file has been omitted.)
+When a base and strong generating set are given, inclusion of the factored
+order of the group is purely optional.
+At present it is {\it not} possible to specify both generators and a base and
+strong generating set for a group.  (This obviously undesirable restriction
+will be removed eventually.)
+%
+\subsection{b)\enskip Permutations:}The format for permutation files
+is illustrated by following file, named {\filenamefont g}, which defines a permutation of
+$g$ of degree 63 and order 4, which turns out to lie in the group 
+${\rm PSp}_6(2)$ given above.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY g;
+" An element of order 4 in the group psp62 above."
+g = (1,40,50,6)(2,58,18,34)(3,8,44,30)(4,10,15,48)(5,11)(7,60,38,32)
+    (12,46,22,56)(13,62,20,61)(16,42,36,63)(19,49,47,45)(21,53,31,
+    55)(24,33,37,51)(25,28)(26,52)(27,59,39,54)(29,41);
+FINISH;\vskip0pt}}
+\medbreak
+As with generators for permutation groups, permutations may be written in
+image format, rather than cycle format.  Note that, when cycle format is used,
+the file contains no explicit indication of the degree of the permutation.
+Thus, for example, the permutation {\tt g} above could be used wherever a
+permutation of degree 63 (the largest point appearing explicitly) or greater
+is expected.
+\medbreak
+Given the files above, the centralizer in ${\rm PSp}_6(2)$ of $g$ could be
+computed by the command
+\smallskip
+\hskip0.45truein{\tt cent\quad psp62\quad g\quad C}
+\smallskip
+which would save the centralizer (in the format described in part~(a) above)
+in the file {\filenamefont C}.
+%
+\subsection{c)\enskip Point sets:}The format for point sets is illustrated
+by following file, named {\filenamefont lambda}, which defines a subset $\Lambda$ of
+$\{1,\ldots,63\}$.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY lambda;
+" A subset of {1,...,63} of size 31."
+lambda = [10,16,44,3,5,33,48,63,56,50,6,52,55,19,34,25,2,35,17,40,21,
+          58,49,36,39,12,60,30,15,29,37];
+FINISH;\vskip0pt}}
+\medbreak
+Note that there is no explicit indication of the size 
+of the base set.  Thus the set {\tt lambda} above could be used wherever
+a subset of $\{1,\ldots,m\}$ is expected for any $m$ with $m \geq 63$
+(the largest point appearing explicitly).
+\medbreak
+The set stabilizer in ${\rm PSp}_6(2)$ of $\Lambda$ could be computed
+by the command
+\smallskip
+\hskip0.45truein{\tt setstab\quad psp62\quad lambda\quad S}
+\smallskip
+which would save the stabilizer in the file {\filenamefont S}.
+%
+\subsection{d)\enskip Partitions:}The format for partitions (ordered or
+unordered) is illustrated
+by following file, named {\filenamefont pi}, which defines a partition
+$\Pi$ of $\{1,\ldots,63\}$.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY pi;
+" An (ordered or unordered) partition of 1,...,63 having four "
+" cells of sizes 15, 20, 13, and 15. respectively."
+pi = seq([1,34,28,48,37,41,13,54,57,51,4,38,8,46,16],[2,40,21,
+          18,6,53,30,56,42,12,3,11,33,15,32,5,60,31,55,63],[7,
+          36,25,29,35,9,26,49,14,47,10,24,43],[17,58,52,50,59,
+          45,20,61,23,39,44,19,22,62,27]);
+FINISH;\vskip0pt}}
+\medbreak
+Note that the individual cells are delimited by square brackets.
+Note also that the file contains no indication whether the partition is ordered
+or unordered; rather each program operating on partitions interprets the
+partition as ordered or unordered, whichever is appropriate for the the
+program.   
+\medbreak
+The stabilizer in ${\rm PSp}_6(2)$ of $\Pi$, interpreted as an ordered
+partition, could be computed by the command
+\smallskip
+\hskip0.45truein{\tt parstab\quad psp62\quad pi\quad T}
+\smallskip
+which saves the stabilizer in the file {\filenamefont T}.
+%
+\subsection{e)\enskip Block designs:}Here a block design refers to any
+collection of subsets of $\{1,\ldots,n\}$; it is even possible to have
+repeated blocks, i.e., two different blocks containing exactly the same points.
+(If repeated blocks occur, we require that an automorphism preserve
+multiplicities.)  The file format for block designs
+is illustrated by following file, named {\filenamefont d17}, which defines
+a block design $D_{17}$ with 17 points and with 34 blocks, each of size 5.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY d17;
+" The design with 17 points and 34 blocks, each containing "
+" 5 points, obtained from the codewords of weight 5 in the "
+" quadratic residue code of length 17 and dimension 9."
+d17 = seq( 17, 34,
+           [3,6,8,15,17], [1,4,7,9,16], [1,4,5,11,17],
+           [2,5,8,10,17], [3,4,7,8,14], [1,2,5,6,12],
+           [1,4,6,13,15], [1,3,6,9,11], [1,3,10,12,15],
+           [3,5,8,11,13], [2,8,9,12,13], [1,7,13,14,17],
+           [6,8,11,14,16], [4,5,8,9,15], [2,5,7,14,16],
+           [2,3,6,7,13], [3,4,10,16,17], [3,5,12,14,17],
+           [1,7,8,11,12], [5,7,10,13,15], [6,12,13,16,17],
+           [2,4,7,10,12], [2,9,11,14,17], [2,3,9,15,16],
+           [2,4,11,13,16], [6,7,10,11,17], [4,6,9,12,14],
+           [5,11,12,15,16], [1,8,10,13,16], [1,2,8,14,15],
+           [5,6,9,10,16], [4,10,11,14,15], [7,9,12,15,17],
+           [3,9,10,13,14] );
+FINISH;\vskip0pt}}
+\medbreak
+Note that the file contains the number of points, followed by the number
+of blocks, followed by a listing of the blocks.  Each block is delimited
+by square brackets.
+\medbreak
+The automorphism group of this block design could be computed by the command
+\smallskip
+\hskip0.45truein{\tt desauto\quad d17\quad A}
+\smallskip
+which saves the automorphism group in the file {\filenamefont A}.
+%
+\subsection{f)\enskip Matrices:}Here a matrix is merely a $k\times n$
+array of integers, each in the set $\{0,\ldots,q-1\}$ for some $k$, $n$, and
+$q$.  (At present, $q$ cannot exceed 256; this limit could be raised, at the
+cost of additional space, by minor changes to the source code.)
+The file format for matrices is
+illustrated by following file, named {\filenamefont m17},
+which represents incidence matrix $M_{17}$ for the block design $D_{17}$
+in part~(e) above.  (In the incidence matrix, rows correspond to points and
+columns to blocks.)
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY m17;
+" The incidence matrix of d17."
+m17 = seq( 2, 17, 34, seq(
+       0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,
+       0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,
+       1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,
+       0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,
+       0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,
+       1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,
+       0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,
+       1,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,
+       0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,
+       0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,
+       0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,
+       0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,
+       0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,
+       0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,
+       1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,
+       0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,
+       1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0
+      ));
+FINISH;\vskip0pt}}
+\medbreak
+Note that the file contains the set size $q$, followed by the number $k$ of rows,
+followed by the number $n$ of columns, followed by the entries of the matrix
+listed in row--major order.  Note that matrix entries are not, in general,
+limited to 0 and 1; if $q$ is the set size, matrix entries may be integers
+in the range 0 through $q-1$.
+\medbreak
+The automorphism group of this matrix could be computed by the command
+\smallskip
+\hskip0.45truein{\tt matauto\quad m17\quad B}
+\smallskip
+which saves the automorphism group in the file {\filenamefont B}.
+\medbreak
+Matrices may also be specified using an alternate format, which is not
+compatible with Cayley, but which saves considerable space for large
+matrices.\footnote{${}^{\dag}$}{\elevenpoint At time of writing, the alternate format does not work
+correctly on some machines.}  This alternate format is available only when the set size $q$ is
+at most 9.  Using the alternate format, the matrix $M_{17}$ would be
+specified by a file as follows:
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+m17
+2  17  34
+0110011110010000001000000000110000
+0001010000100011000001111000010000
+1000100111000001110000010000000001
+0110101000000100100001001010000100
+0011010001000110010100000001001000
+1000011100001001000010000110001000
+0100100000010011001101000100000010
+1001100001101100001000000000110000
+0100000100100100000000110010001011
+0001000010000000100101000100101101
+0010000101001000001000101101000100
+0000010010100000011011000011000010
+0000001001110001000110001000100001
+0000100000011010010000100010010101
+1000001010000100000100010001010110
+0100000000001010100010011001101000
+1011000000010000110010100100000010
+\vskip0pt}}
+\medbreak
+With the alternate format, blanks may occur between matrix entries, but
+are not required.  The first line of the file is reserved for the matrix
+name; nothing else may be placed on this line.
+%
+\subsection{g)\enskip Linear codes:}
+The file format for lines codes is
+illustrated by following file, named {\filenamefont q17}, which represents the
+binary (17,9)--quadratic residue code $Q_{17}$ mentioned in part~(e) above.
+This file gives a generator matrix for the code, in the format of
+part~(f) above.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY q17;
+" The (17,9) binary quadratic residue code."
+q17 = seq( 2, 9, 17, seq(
+           1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,
+           1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,
+           1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,
+           0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,
+           1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,
+           0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,
+           0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,
+           0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,
+           1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+      ));
+FINISH;\vskip0pt}}
+\medbreak
+Note that the file contains the size of the field for the code, followed by the 
+dimension of the code, followed by the
+length of the code, followed by a generator matrix whose entries are
+listed in row--major order.  At present, the field size is restricted to
+a prime integer (less than 255) or to 4; automorphism group and isomorphism
+calculations are practical only when the field size is quite small.
+  In the case of a prime, the field
+is taken as the integers modulo that prime.  
+\medbreak
+The automorphism group of this code could be computed by the command
+\smallskip
+\hskip0.45truein{\tt codeauto\quad q17\quad v17\quad H}
+\smallskip
+which saves the automorphism group as the group {\filenamefont H}.
+(Here file {\filenamefont v17} defines a matrix $V_{17}$ which is the
+transpose of the matrix $M_{17}$ of part~(f) above; the role of
+$V_{17}$ will be explained later.)
+\medbreak
+As with matrices, an alternate (not Cayley--compatible) format is provided
+for codes over field of size at most 9.\footnote{${}^{\dag}$}{\elevenpoint As with matrices, this
+alternate format at present fails to work correctly on some machines.}
+With the alternate format, the file defining the code $Q_{17}$
+would be as follows:
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+q17
+2  9  17
+11101000110001011
+11110100011000101
+11111010001100010
+01111101000110001
+10111110100011000
+01011111010001100
+00101111101000110
+00010111110100011
+11111111111111111
+\vskip0pt}}
+\bigbreak
+\hrule
+\bigbigbreak
+In the examples above, it was assumed that the name of file matched the
+name of the Cayley library that it contained.  Although this is
+recommended for simplicity, it need not be the case.  When the names
+do not match, an object is specified using the format
+\hbox{{\it fileName\/}{\tt ::}{\it libraryName\/}}.  For example, if the file
+{\filenamefont psp62} in part~(a) above were renamed {\filenamefont psp}
+and the file {\filenamefont g} in part~(b) were named {\filenamefont pspx4},
+but if the contents of both files remained unchanged, the command to
+compute the centralizer in ${\rm PSp}_6(2)$ of $g$ might be
+\smallskip
+\hskip0.45truein{\tt cent\quad psp::psp62\quad pspx4::g\quad gCentr::C}
+\smallskip
+where now the centralizer is saved in the file {\filenamefont gCentr}, but in a
+Cayley library named {\tt C}.  A path may also be specified, for example,
+\smallskip
+\hskip0.45in{\tt cent\quad ../groups/psp::psp62\quad ../groups/pspx4::g\quad gCentr::C}
+\smallskip
+in Unix.  (In MS~DOS on the IBM~PC, the forward slash must be replaced 
+by a backslash.  Under CMS on the IBM~370, the file name and file type must
+be separated by a period, rather than the blank normally used under CMS.)
+If however, the file name and the library name for input files
+differ only in that the file name contains path information, the
+{\tt -p} option (discussed later) may be useful.
+%
+\medbreak
+In the examples above, not only did the file name and the Cayley library
+name match, but both matched the actual name for the object appearing in
+the Cayley library.  Actually, the name for the object need not be
+related to the name of the Cayley library.  For example, the following
+is acceptable.
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+LIBRARY psp62;
+" PSp(6,2) acting on nonzero vectors, degree 63."
+G: permutation group(63);
+G.forder: 2^9 * 3^4 * 5 * 7;
+G.generators:
+  a = (1,2)(3,5)(4,7)(8,12)(11,16)(13,19)(17,18)(20,26)(21,28)(23,30)(24,32)
+      (25,34)(29,37)(31,40)(33,43)(36,46)(38,41)(39,49)(42,44)(45,52)(48,51)
+      (53,58)(57,62)(59,61),
+  b = (1,3,6,10,15,22)(2,4,8,13,20,27)(5,9,14,21,29,38)(7,11,17,23,31,41)
+      (12,18,24,33,44,34)(16,19,25)(26,35,45,53,32,42)(28,36,47)(30,39,50,
+      56,61,58)(37,48)(40,51,46,54,59,62)(49,55,60,63,52,57);
+FINISH;\vskip0pt}}
+\medbreak
+In this situation, the command line must still specify the Cayley library name
+(and file name, if different), but informative messages printed as the
+command executes use the object name ({\tt G}, in this case).  For
+objects created by commands, an object name different from the Cayley
+library name may be specified by means of the {\tt -n} option, discussed
+later.
+%
+%
+\section{III.\quad\kern-3pt FIELDS, MONOMIAL PERMUTATIONS, AND MATRICES\kern-2pt}
+%
+This section treats several topics that arise primarily in connection
+with computations involving combinatorial structures -- designs, matrices,
+and codes.
+%
+\subsection{i)\enskip Finite fields:}Finite fields arise when computing with
+codes, or with matrices whose entries belong to the field.  At present, only 
+fields ${\rm GF}(q)$ whose order $q$ is either 4 or a prime integer are 
+supported; moreover, we must have $q\leq 255$.  (For automorphism
+group and isomorphism calculations, time and space considerations generally 
+dictate a practical limit on $q$ that is far lower.)  Field elements are 
+numbered $0,1,\ldots,q-1$.  When $q$ is prime, the field is taken as the 
+integers modulo $q$.  When $q=4$, there is an essentially unique way to 
+number the field elements.  
+\smallbreak
+We denote the set of nonzero elements of
+${\rm GF}(q)$ by ${\rm GF}(q)^{\#}$.
+\bigbreak
+\subsection{ii)\enskip Monomial permutations:}Given a fixed field 
+${\rm GF}(q)$, a monomial permutation of monomial degree $n$ over 
+${\rm GF}(q)$ is essentially a permutation $s$ on 
+${\rm GF}(q)^{\#} \times \{1,\ldots,n\}$ which satisfies the following property, 
+henceforth referred to as the {\it monomial property:\/}
+$$\displaylines{(\alpha,i)^s = (\beta,j)\quad {\rm implies}\quad
+  (\gamma\alpha,i)^s = (\gamma\beta,j)\kern40pt\cr\kern40pt 
+  {\rm \hbox{for all}}\enskip
+  \alpha,\beta,\gamma\in {\rm GF}(q)^{\#}\enskip {\rm and}\enskip 
+  i,j\in\{1,\ldots,n\}.\cr}$$
+Note that $s$ is determined completely by its action on the points $(1,i)$,
+$1\leq i\leq n$; note also that the actual degree of $s$ is $(q-1)n$.
+\smallbreak
+For purposes of actual computation, however, we want 
+a representation of $s$ as a 
+permutation on $\{1,\ldots,(q-1)n\}$; to obtain this, 
+we number the pair $(\alpha,i)$ by 
+$(q-1)(i-1)+\overline{\alpha}$, where $\overline{\alpha}$ denotes the integer
+representing $\alpha$.  Then the monomial property becomes
+$$\displaylines{\bigl((q-1)(i-1)+\overline{\alpha}\bigr)^s = 
+(q-1)(j-1)+\overline{\beta}\quad{\rm implies}\kern40pt\cr
+  \kern40pt\bigl((q-1)(i-1)+\overline{\gamma\alpha}\bigr)^s = 
+(q-1)(j-1)+\overline{\gamma\beta}.\cr}$$
+\medbreak
+For example, over the field ${\rm GF}(4)$, the monomial permutation $s$ on
+${\rm GF}(4) \times \{1,2,3,4\}$ determined by
+$$ (1,1)^s = (3,2),\quad (1,2)^s = (2,4),\quad (1,3)^s = (1,1),\quad
+   (1,4)^s = (2,3)$$
+is represented as a permutation on $\{1,\ldots,12\}$ as follows:
+$$(1,6,10,8,2,4,11,9,3,5,12,7).$$
+%
+\bigbreak
+\subsection{iii)\enskip Permutations acting on matrices:}Let 
+$A = (a_{ij})$ be an $r \times c$ matrix with entries from an arbitrary set.
+A permutation $s$ of degree $r+c$ which fixes $\{1,\ldots,r\}$ setwise
+induces an action on $A$ as follows:  Row $i$ of $A$ is moved to row position $i^s$\enskip
+$(1\leq i\leq r)$ and column $j$ of $A$ is moved to column position
+$(r+j)^s-r$\enskip $(1\leq j\leq c)$.  Thus
+$$A^s = (b_{ij}),\quad {\rm where}\quad 
+  b_{ij} = a_{i^\prime j^\prime},\enskip {\rm with}\enskip
+  i^\prime = i^{s^{-1}}\enskip {\rm and}\enskip
+  j^\prime = (r+j)^{s^{-1}}-r.$$
+If $A^s = B$, we say that $s$ is an {\it isomorphism\/} of $A$ to $B$.  When
+$A^s=A$,\enskip $s$ is called an {\it automorphism\/} of $A$.  The group formed by 
+the automorphisms is called the {\it automorphism group\/} of $A$, and denoted
+${\rm AUT}(A)$.
+\medbreak
+For example, the action of a permutation $s$ of degree 7 on a $3\times 4$
+matrix $A$ is illustrated by the following.
+$$s = (1,3,2)(4,7,5),\qquad
+  A =   \pmatrix{8&0&4&3\cr
+                2&9&3&0\cr
+                0&1&7&5\cr},\qquad
+  A^s = \pmatrix{9&0&3&2\cr
+                1&5&7&0\cr
+                0&3&4&8\cr}.$$
+%
+\bigbreak
+\subsection{iv)\enskip Monomial permutations acting on matrices:}Now let 
+$A = (a_{ij})$ be an $r \times c$ matrix with entries from a field
+${\rm GF}(q)$.  A monomial permutation $s$ of monomial degree $r+c\kern3pt$
+(actual degree $(q-1)(r+c)\kern2pt)$ which fixes $\{1,\ldots,(q-1)r\}$ setwise
+induces an action on $A$.  This action is most easily described if we think of $s$ as
+a permutation on ${\rm GF}(q)^{\#} \times \{1,\ldots,n\}$, as in~(ii) above;
+then $s$ fixes $\{(\alpha,i)\vert \alpha\in{\rm GF}(q)^{\#},1\leq i\leq r\}$
+setwise.  If $(1,i)^s = (\alpha,k)$ and $(1,r+j)^s = (\beta,r+m)$, 
+then row $i$ of $A$ is multiplied by $\alpha$ and moved to row position $k$,\enskip
+and column $j$ of $A$ is multiplied by $\beta$ and moved to column position
+$m$.  Thus
+$$ A^s = (b_{ij}),\quad {\rm where}\quad
+   b_{ij} = \lambda^{-1}\mu^{-1}a_{i^\prime j^\prime},$$
+with $\lambda$, $\mu$, $i^\prime$, and $j^\prime$ determined by
+$$ (\lambda,i^\prime) = (1,i)^{s^{-1}}\quad {\rm and}\quad
+   (\mu,r+j^\prime) = (1,r+j)^{s^{-1}}.$$
+If $A^s = B$, we say that $s$ is an {\it monomial isomorphism\/} of $A$ to $B$.  When
+$A^s=A$,\enskip $s$ is called a {\it monomial automorphism\/} of $A$.  The group 
+formed by the automorphisms is called the {\it monomial automorphism group\/} of $A$, and denoted
+${\rm AUT}^*(A)$.
+\medbreak
+For example, over the field ${\rm GF}(4)$, the action of a 
+monomial permutation $s$ of monomial degree 5 (actual degree 15) 
+on a $2\times 3$ matrix $A$ is illustrated by the following.
+$$\displaylines{(1,1)^s = (3,2),\enskip\kern2pt (1,2)^s = (1,1),\enskip\kern2pt
+  (1,3)^s = (2,5),\enskip\kern2pt (1,4)^s = (3,3),\enskip\kern2pt (1,5)^s = (2,4),\cr
+  s = (1,6,3,5,2,4)(7,14,12,8,15,10,9,13,11),\quad\enskip
+  A =   \pmatrix{2&0&3\cr
+                 0&3&1\cr},\quad\enskip
+  A^s = \pmatrix{2&2&0\cr
+                 0&3&2\cr}.\cr}$$
+%
+% 
+%
+%
+\section{IV.\quad PARTITION BACKTRACK COMMANDS}
+%
+The commands employing the partition backtrack method that are currently 
+available are described below.  Note material
+in square brackets is optional.  (The brackets themselves are not to be
+typed.)  Discussion of most of the available options will be
+deferred to Section~V; only those unique to a specific command will be
+mentioned here.  
+\medskip
+Options are never required, but they may prove
+useful in controlling the format of the output or the procedures used in the
+computation. For example, certain options allow for a time versus space
+tradeoff.  For some ``unusual'' groups (e.g., very dense imprimitive groups),
+it may be necessary to specify nonstandard options in order to obtain
+acceptable performance.
+\medskip
+The partition backtrack programs described here represent full implementations
+of the partition backtrack method, as set forth in (Leon, 1991), with
+two exceptions.
+{\smallskip\advance\leftskip by 0.45in\relax
+ \item{i)}The criterion in Prop.~8(iii) is not checked.
+ \smallskip
+ \item{ii)}In coset--type computations, the refinement $\germR^+$ of Figure~8 is
+           always taken as $\germR$\footnote{${}^{\dag}$}{\elevenpoint In order to allow
+           this manual to be printed without special AMS~TeX fonts, underlined
+           letters (e.g., $\germR$) are used here as a substitute for 
+           letters appearing in the Euler Fraktur (German) font in (Leon, 1991).}
+\smallskip}
+%
+%
+\subsection{Set stabilizers:}Set stabilizers may be computed
+by the {\tt setstab} command.  The format is
+\smallskip
+\hskip0.45truein{\tt setstab}\quad \options\quad {\it permGroup\quad pointSet\quad
+                stabilizerSubgroup}
+\smallskip
+This command computes the set stabilizer in the permutation group {\it permGroup\/}
+of the set {\it pointSet\/} and saves the result (in Cayley library format)
+as the permutation group {\it stabilizerSubgroup}.
+\medbreak
+At present, the set stabilizer program sometimes
+run slowly in doubly transitive groups, and often runs very slowly in groups
+that are triply transitive or ``almost'' triply transitive (e.g.,
+${\rm SL}_n(2)$\kern2pt), especially when both the point set and its complement
+are large and when the set stabilizer turns out to be small.  Imprimitive
+groups closely related to doubly transitive groups may also cause
+difficulty.  Modifications to alleviate this difficulty, at least in part,
+will be added eventually.
+%
+%
+\subsection{Set images:}Given a permutation group $G$ on $\{1,\ldots,n\}$
+and subsets $\Lambda$ and $\Phi$ of $\{1,\ldots,n\}$, the {\tt setimage}
+command may be used to determine if there exists an element $g$ of $G$ such
+that $\Lambda^g = \Phi$.  The format is
+\smallskip
+\hskip0.45truein{\tt setimage}\quad \options\quad {\it permGroup\quad pointSet1\quad
+                pointSet2\quad groupElement}
+\smallskip
+where {\it permGroup}, {\it pointSet1}, {\it pointSet2}, and {\it groupElement}
+play the role of $G$, $\Lambda$, $\Phi$, and $g$, respectively.  That is,
+the command determines whether there exists an element of {\it permGroup\/}
+mapping {\it pointSet1\/} to {\it pointSet2\/} and, if so, saves one such
+element as the permutation {\it groupElement}.
+Note that {\it groupElement\/} will not be created if $\Phi\notin\Lambda^G$.
+(Unless the {\tt -q} option is specified, a message indicating whether
+$\Phi\in\Lambda^G$ will be written to the standard output.)
+The potential difficulties with doubly and triply transitive groups mentioned
+for set stabilizer computations apply here also.
+%
+%
+\subsection{Ordered partition stabilizers:}Stabilizers of ordered partitions
+may be computed by the {\tt parstab} command.  The format is
+\smallskip
+\hskip0.45truein{\tt parstab}\quad \options\quad {\it permGroup\quad ordPartition\quad
+                stabilizerSubgroup}
+\smallskip
+This command computes the stabilizer in the permutation group {\it permGroup\/}
+of the ordered partition {\it ordPartition\/} and saves the result as the
+permutation group {\it stabilizerSubgroup}.  The remarks about performance
+on doubly and triply transitive groups for set stabilizer computations
+apply here also.
+%
+%
+\subsection{Ordered partition images:}Given a permutation group $G$ on
+$\{1,\ldots,n\}$ and ordered partitions $\Pi$ and $\Sigma$ of $\{1,\ldots,n\}$,
+the {\tt parimage} command may be used to determine if there exists an
+element $g$ of $G$ such that $\Pi^g = \Sigma$.  The format is
+\smallskip
+\hskip0.45truein{\tt parimage}\quad \options\quad {\it permGroup\quad ordPartition1\quad
+                ordPartition2\quad groupElement}
+\smallskip
+where {\it permGroup}, {\it ordPartition1}, {\it ordPartition2}, and {\it groupElement}
+play the role of $G$, $\Pi$, $\Sigma$, and $g$, respectively.
+That is,
+the command determines whether there exists an element of {\it permGroup\/}
+mapping {\it ordPartition1\/} to {\it ordPartition2\/} and, if so, saves one
+such element as the permutation {\it groupElement}.
+The permutation {\it groupElement\/} is created only if $\Sigma\in\Pi^G$.
+The remarks about performance on doubly and triply
+transitive groups given above for
+set stabilizer computations apply here also.
+%
+%
+\subsection{Group intersections:}Given permutation groups $G$ and $H$ on
+$\{1,\ldots,n\}$, the {\tt inter} command may be used compute the
+intersection $G\cap H$.  The format is
+\smallskip
+\hskip0.45truein{\tt inter}\quad \options\quad {\it permGroup1\quad permGroup2\quad
+                interGroup}
+\smallskip
+This command computes the intersection of groups {\it permGroup1\/} and {\it permGroup2\/}
+and saves the result as the group {\it interGroup\/}.  The potential
+difficulty with doubly and triply transitive groups discussed above for set
+stabilizer computations applies here also when both groups are doubly
+or triply transitive.
+%
+%
+\subsection{Centralizers of elements:}Given a permutation group $G$ and
+a permutation $x$ (not necessarily contained in $G$), the
+{\tt cent} command may be used compute $C_G(x)$, the centralizer in $G$ of $x$.
+The format is
+\smallskip
+\hskip0.45truein{\tt cent}\quad \options\quad {\it permGroup\quad permutation\quad
+                centralizerSubgroup}
+\smallskip
+Here {\it permGroup}, {\it permutation}, and {\it centralizerSubgroup\/}
+play the role of $G$, $x$, and $C_G(x)$ above.  That is, the command computes
+the centralizer in the group {\it permGroup\/} of
+the permutation {\it permutation\/}
+and saves the result as the group {\it centralizerSubgroup}.
+\medbreak
+For this command, it is permissible to specify
+{\it permGroup\/} as {\tt \#}{\it n}, where {\it n\/}
+is an integer at least 2, in which case {\it permGroup\/} is taken as the symmetric
+group of degree {\it n}; in this situation, the normal restrictions on
+base size (discussed later) do not apply to {\it permGroup}, although they do apply to
+{\it centralizerSubgroup}.
+\medbreak
+The {\tt cent} command accepts an option {\tt -np} which can have an effect
+(often small) on performance.  If this option is specified, a refinement
+process based on the cycle structure of $x$ will not be used.  The effect is
+to reduce memory requirements a bit.  In many cases, the running time does
+not change significantly, but in some cases it does increase a great deal.
+\medbreak
+It should be noted that in many cases, perhaps most
+cases arising in practice, centralizer computations are fairly easy
+even for conventional algorithms, and the partition backtrack
+program may perform no better than, and perhaps not even as well as,
+programs based on conventional techniques, such as those in
+Cayley.  (Note, however, that, unlike Cayley, the program here does not require
+that the permutation to be centralized lie in the group.)
+%
+%
+\subsection{Conjugacy of elements:}Given a permutation group $G$ and
+permutations $x$ and $y$ (not necessarily contained in $G$), the
+{\tt conj} command may be used to determine if $x$ and $y$ are conjugate
+under $G$ and, if so, to find $g$ in $G$ with $x^g = y$.  The format is
+\smallskip
+\hskip0.45truein{\tt conj}\quad \options\quad {\it permGroup\quad permutation1\quad
+                permutation2\quad conjugatingElement}
+\smallskip
+Here {\it permGroup}, {\it permutation1}, {\it permutation2}, and
+{\it conjugatingElement\/} play the role of $G$, $x$, $y$, and $g$ above.
+That is, the command determines if there exists an element of
+{\it permGroup\/} conjugating
+{\it permutation1\/} to {\it permutation2\/} and, if so, it saves one such
+element as the permutation {\it conjugatingElement}.  If the two permutations
+are not conjugate in {\it permGroup}, then {\it conjugatingElement} is not
+created.  In any case, a message indicating the result is written to the
+standard output (unless the {\tt -q} option is specified).
+\medbreak
+As with the {\tt cent} command, {\it permGroup\/} may be specified
+as {\tt \#}{\it n}, in which case conjugacy in the symmetric group of
+degree {\it n} is checked.  (In this case, the program merely checks that
+the two permutations have the same cycle structure.)  Also, the {\tt -np}
+option is accepted, and it works as described above for the {\tt cent}
+command.
+\medbreak
+As with centralizer computations, conjugacy calculations are usually
+easy with conventional algorithms, and the partition backtrack method
+may not yield an improvement.
+%
+%
+\subsection{Centralizers of groups:}Given a permutation groups $G$ and
+a second permutation group $E$ (not necessarily contained in $G$), the
+{\tt gcent} command may be used compute $C_G(E)$, the centralizer in
+$G$ of $E$.  The format is
+\smallskip
+\hskip0.45truein{\tt gcent}\quad \options\quad {\it permGroup1\quad permGroup2\quad
+                centralizerSubgroup}
+\smallskip
+Here {\it permGroup1}, {\it permGroup2}, and {\it centralizerSubgroup\/}
+play the role of $G$, $E$, and $C_G(E)$ above.  That is, the command computes
+the centralizer in the group {\it permGroup1\/} of
+the group {\it permGroup2\/}
+and saves the result as the group {\it centralizerSubgroup}.
+\medbreak
+As with the element centralizer command ({\tt cent}),
+it is permissible to specify {\it permGroup1\/} as {\tt \#}{\it n},
+indicating the symmetric group of degree {\it n}.
+\medbreak
+To an even greater extent than element centralizer
+calculations, group centralizer calculations tend to
+be easy ones for conventional algorithms; the full power of the
+partition method is not needed, and perhaps not even desirable.  For this
+reason, little effort has gone into development of the {\tt gcent} command;
+its implementation is fairly crude, and it is included primarily
+for completeness.  There are two options, {\tt -cg:}{\it m} and
+{\tt -cp:}{\it p}, which affect its performance; for some groups $G$,
+it may be necessary to assign them values different from the defaults
+(current 3 and 10, respectively).  A full description of the significance
+of {\it m\/} and {\it p\/} will not be given here; however, we note that
+higher values (especially for {\it m}) increase
+memory requirements, and often increase execution time as well, but may be
+needed if the group $E$ fails to have a small generating set (e.g., if E is
+a large elementary abelian group).
+\medbreak
+By specifying {\it permGroup1\/} and {\it permGroup2\/} as the same group,
+the {\tt gcent} command may be used to compute the center of a group; note,
+however, that it represents an exceptionally inefficient algorithm for
+this purpose.
+%
+%
+%
+\subsection{Automorphism groups of designs:}The
+{\tt desauto} command may be used to compute the
+automorphism group of a design.  Here a {\it design\/} means any set
+of points (numbered $1,\ldots,n$ for some $n$) and any collection of subsets
+of the point set. The format of the design automorphism group command is:
+\smallskip
+\hskip0.45truein{\tt desauto}\quad \options\quad {\it design\quad autoGroup}
+\smallskip
+and the command sets {\it autoGroup} to the automorphism group of the
+design {\it design\/}.
+\medbreak
+The interpretation of the group {\it autoGroup\/} that is created depends
+on whether the {\tt -pb} (points and blocks) option is specified. 
+Let $p$ and $b$ denote the number of points and blocks, respectively, of
+the design.
+\smallskip
+{\advance\leftskip by0.70truein
+\noindent\llap{i)\enspace}If the option {\tt -pb} is specified, then {\it autoGroup} is constructed as
+a group of degree $p+b$, in which the action on $1,\ldots,p$ is the action
+on points and in which the action on $p+1,\ldots,p+b$ is the
+action on blocks, the $j$\kern1ptth block being
+represented by $p+j$.
+\smallskip\vskip2pt
+\noindent\llap{ii)\enspace}If the {\tt -pb} option is omitted, then
+{\it autoGroup} is constructed as a group of degree $p$, representing the
+action on points only.
+In this case, if there are repeated blocks, the group acting on
+points only has lower
+order than the group acting on points and blocks).
+When this situation arises, the group saved as {\it autoGroup} represents 
+the group on points
+only, but the information written to the standard output during the computation
+refers to the group acting on points and blocks.  (This occurs because the
+computation is carried out on points and blocks; restriction to points
+is performed only at the end; note also, for this reason, restriction to
+points only does not save time or memory.)\vskip0pt}
+\medbreak
+%
+%
+%
+\subsection{Isomorphism of designs:}The
+{\tt desiso} command may be used to check
+isomorphism of designs. The format is
+\smallskip
+\hskip0.45truein{\tt desiso}\quad \options\quad {\it design1\quad
+                 design2\quad isoPerm}
+\smallskip
+and the command sets {\it isoPerm} to an isomorphism from
+design {\it design1\/} to design {\it design2}, provided the designs
+are isomorphic.  (If not, the permutation {\it isoPerm\/} is
+not created.  In any case, a message indicating the result is written to
+the standard output, unless the {\tt -q} option is specified.)
+\medbreak
+As in the case of the {\tt desauto} command, described
+above, the presence or absence of the {\tt -pb} option determines whether
+{\it isoPerm\/} is constructed as a permutation on points and blocks, 
+or on points only (the default).  When the action on blocks is included,
+the $j$\kern1ptth block is represented by $p+j$.
+%
+%
+%
+%
+\subsection{Automorphism groups and monomial groups of matrices:}The
+{\tt matauto} command may be used to compute the
+automorphism group of a matrix.  If the matrix elements are taken from a
+small finite field ${\rm GF}(q)$, then optionally the monomial automorphism group may
+be computed.  (See Section~III for definitions.)
+The command format is:
+\smallskip
+\hskip0.45truein{\tt matauto}\quad \options\quad {\it matrix\quad autoGroup}
+\smallskip
+and the command sets {\it autoGroup} to the automorphism group of the
+matrix {\it matrix\/} or, if the {\tt -mm} option is specified, to the
+monomial automorphism group of {\it matrix\/}.
+\medbreak
+If the {\tt -tr} option is specified, the matrix is transposed after it is
+read in, and all computations apply to the transposed matrix.  
+\medbreak
+Let $r$ and $c$ denote the number of rows and columns, respectively, of
+the matrix $A = (a_{ij})$ whose group is to be constructed.  Normally
+the automorphism group has degree $r+c$ and the monomial automorphism group 
+has degree $(q-1)(r+c)$; the interpretation of these groups is described
+in Section~III.  However, if the {\tt -ro} (rows only) option is specified,
+the degree will be $r$ or $(q-1)r$, and the group will represent the action
+on rows only.  Note that restriction to rows only may reduce the order of
+the group, just as in the case of designs restriction to points only may
+reduce the order of the group.  When this occurs, the remarks above for
+design groups apply here also. 
+\medbreak
+At present, the program for computing monomial groups of matrices is a very
+crude one.  As a result, although it works reasonably for many matrices of
+fairly large size, it can fail to run in acceptable time even for very small
+matrices, e.g., matrices of all 0s.  Sometimes use of the {\tt -tr} option
+can get around this difficulty (which will be fixed eventually).
+%
+%
+%
+\subsection{Isomorphism and monomial isomorphism of matrices:}The
+{\tt matiso} command may be used to check
+if two matrices are isomorphic or, if the matrix elements are from a 
+finite field ${\rm GF}(q)$, monomially isomorphic.  (See Section~III for
+definitions.)  The command format is
+\smallskip
+\hskip0.45truein{\tt matiso}\quad \options\quad {\it matrix1\quad
+                 matrix2\quad isoPerm}
+\smallskip
+In the absence of the {\tt -mm} option, the command sets {\it isoPerm} to an 
+isomorphism from matrix {\it matrix1\/} to matrix {\it matrix2}, provided the matrices
+are isomorphic.  (If not, the permutation {\it isoPerm\/} is
+not created).  If the {\tt -mm} option is specified, the command sets 
+{\it isoPerm} to a monomial isomorphism from matrix {\it matrix1\/} to matrix {\it matrix2}, 
+provided the matrices are monomially isomorphic.  (In this case, the matrix
+entries should be field elements.)  The effect of the {\tt -ro} option is as
+described above for matrix automorphism group calculations.
+\medbreak
+Currently the monomial isomorphism program suffers from the same limitations
+as the monomial automorphism group program, as mentioned above.
+\medbreak
+%
+%
+\subsection{Automorphism groups of linear codes:}The
+{\tt codeauto} command may be used to compute the
+automorphism group of a linear code over a small field ${\rm GF}(q)$.  
+However, before the automorphism group of a code $C$ may be computed, 
+it is necessary to have a set $V$ of vectors (not necessarily codewords) 
+such that the following conditions hold.  In these conditions, $V^*$
+denotes the set of all nonzero scalar multiples of vectors in $V$.
+\smallbreak
+{\advance\leftskip by1em\parindent=1em\relax
+\item{i)} No vector in $V$ is a scalar multiple of any other vector in $V$.
+(In particular, $\vert V^*\vert = (q-1)\vert V\vert$.)
+\smallbreak
+\item{ii)} $V$ is ``reasonably small''.  (With a very large memory,
+           ``reasonably small'' might mean 100,000 or more.)
+\smallbreak
+\item{iii)} $V^*$ is invariant under ${\rm AUT}(C)$\enskip (the automorphism
+          group of $C$),
+\smallbreak
+\item{iv)} $\bigl\vert{\rm AUT}(V^*):{\rm AUT}(C)\bigr\vert$ is very small.
+            (The running time rises very rapidly as a function of this
+            index.  Note that, if $V$ spans $C$, the index is 1.)
+\smallbreak}
+Often the set of minimal weight vectors of the code (scalar multiples 
+removed if $q > 2$) make a suitable choice for $V$; minimum weight vectors
+of the dual code may also be used.  This choice for $V$ certainly 
+satisfies~(i) and~(iii), 
+may well satisfy~(ii), and in many cases satisfies~(iv).  The author has available
+programs for computing the set of minimum weight vectors (or vectors of
+any specified weight.)
+\medbreak
+The format of the code automorphism group command is
+\smallskip
+\hskip0.45truein{\tt codeauto}\quad \options\quad {\it code\quad
+                 invarVectors\quad autoGroup}
+\smallskip
+where {\it invarVectors\/} is the set $V$ of vectors described above
+(in the format of a matrix, whose rows are the vectors).  The command
+sets {\it autoGroup} to the automorphism group of the
+code {\it code}.
+\medbreak
+The {\tt -cv} (coordinates and vectors) option for codes 
+has essentially the same effect as the
+{\tt -pb} option for designs.  With this option, the automorphism
+group is saved in {\it autoGroup\/} as a permutation group
+of degree $\bigl(q-1)(n+\vert V\vert\bigr)$\enskip ($n =$ length of code),
+representing the action on (monomial) coordinates 
+and invariant vectors; without the {\tt -cv} option, it is saved as a permutation group 
+acting of degree $(q-1)n$, representing the action on (monomial)
+coordinates only.   (However, restriction to coordinates only can never lead to a reduction
+in the group order, as occurred with restriction to points or rows for
+designs or matrices.)  For an explanation of the format of monomial
+permutations, see Section~III.
+\medbreak
+At present, the program for computing groups of non--binary codes is a very
+crude one; sometimes it can fail to run in reasonable time even on small
+codes.  Eventually this program will be improved.
+\medbreak
+%
+%
+%
+\subsection{Isomorphism of linear codes:}The
+{\tt codeiso} command may be used to check isomorphism
+of linear codes.  However, before isomorphism of two codes
+$C_1$ and $C_2$ may be checked, it is necessary to have a sets $V_1$
+and $V_2$ of vectors (not necessarily codewords of the two codes)
+such that $V_1$ and $V_2$ satisfy conditions~(i), (ii), (iii), and~(iv) above
+relative to $C_1$ and $C_2$, respectively, and in addition such that
+any isomorphism of $C_1$ to $C_2$ must map $V_1^*$ to $V_2^*$.  (As with
+code automorphism groups, $V_1^*$ and $V_2^*$ denote the sets of nonzero scalar
+multiples of vectors in $V_1$ and $V_2$, respectively.
+Often suitable choices for $V_1$ and $V_2$ are the minimal weight vectors
+of $C_1$ and $C_2$, respectively (scalar multiples removed.); minimal weight vectors of the duals
+of the two codes also could be used.
+\medbreak
+The format of the code isomorphism command is
+\smallskip
+\hskip0.45truein{\tt codeiso}\quad \options\quad {\it code1\quad
+                 code2\quad invarVectors1\quad invarVectors2\quad
+                 isoPerm}
+\smallskip
+where {\it invarVectors1\/} and {\it invarVectors2\/}
+are the sets $V_1$ and $V_2$, respectively, of vectors described above
+(each in the format of a matrix, whose rows are the vectors).  The command
+sets {\it isoPerm} to an isomorphism from {\it code1\/} to {\it code2},
+if the codes are isomorphic; if not, {\it isoPerm\/} is not created.
+\medbreak
+As in the case of the {\tt codeauto} command, described
+above, the presence or absence of the {\tt -cv} option determines whether
+{\it isoPerm\/} is a permutation on (monomial) coordinates and invariant vectors,
+or on (monomial) coordinates only.  The interpretation of monomial permutations
+is described in Section~III..
+%
+%
+\vskip10pt
+\bigbigbreak
+Note that a number of the commands above are implemented as shell 
+files (under Unix), batch files (under MS~DOS), or exec files
+(under CMS).  The commands that are implemented in this manner, and the
+contents of the Unix shell files, are as follows.  (The list includes a few 
+commands to be discussed in Section~IX.)
+\bigskip
+\long\def\shellfile#1#2{\noindent\hskip0.45truein\hbox to1.0truein{#1\hfil}\relax
+                   \hbox to4.0truein{#2\hfil}\vskip2.0pt}\relax
+\vbox{{\it
+\shellfile{command}{contents of shell file}
+\vskip6pt
+\elevenpoint\tt
+\shellfile{setimage}{setstab -image \$*}
+\shellfile{parstab} {setstab -partn \$*}
+\shellfile{parimage}{setstab -image -partn \$*}
+\shellfile{conj}    {cent -conj \$*}
+\shellfile{gcent}   {cent -group \$*}
+\shellfile{desiso}  {desauto -iso \$*}
+\shellfile{matauto} {desauto -matrix \$*}
+\shellfile{matiso}  {desauto -iso -matrix \$*}
+\shellfile{codeauto}{desauto -code \$*}
+\shellfile{codeiso} {desauto -iso -code \$*}
+\shellfile{cjper}   {cjrndper -perm \$*}
+\shellfile{ncl}     {commut -ncl \$*}
+\shellfile{compper} {compgrp -perm:\$1 \$2 \$3}
+\shellfile{compset} {compgrp -set:\$1 \$2 \$3}
+\shellfile{chbase}  {orblist -chbase \$*}
+\shellfile{ptstab}  {orblist -ptstab \$*}
+\vskip0pt}}
+%
+%
+%
+\section{V.\quad OPTIONS}
+%
+A partial description of the options that are currently available
+follows.  Most of the options are available with all of
+the commands described in Section~IV.  A few options apply only to
+subgroup computations, or only to coset--representative computations;
+these restrictions are noted below.  Options applicable only to a single command
+are discussed with that command in Section~IV.
+\medbreak
+In general, options may be specified in any order.  However, if
+conflicting options are specified, the one specified last is
+the one that is used.  (In some cases, conflicting options are treated
+as an error.  Also, the {\tt -l} and {\tt -v} options, discussed later,
+are an exception to the general rule that options may be specified in
+any order; these options, if present, must come first, and the remainder
+of the command line is ignored.)
+\medbreak
+Entering any command with no options or arguments causes a brief
+summary of the command format to be displayed.
+\bigbreak
+\subsection{Options affecting file handling:}
+\nobreak\medskip\nobreak
+%
+\defoption{-a}{Normally, if a file name is specified for an object
+                 to be constructed, and if a file by that name already
+                 exists, the programs overwrite the existing file.  With
+                 the {\tt -a} option, they append to the existing file,
+                 rather than overwriting it.}
+\medbreak
+\defoption{-p:{\it path}}{Here {\it path\/} is a string.
+                 The string {\it path\/} is concatenated to
+                 the file name of every input file.  This option can be useful
+                 if all the input files are in another directory.
+                 For example,
+                 \smallskip
+                 \hskip0.15truein{\tt setstab\quad\kern-1pt  ../groups/psp62::psp62\quad\kern-1pt
+                 ../groups/lambda::lambda\quad\kern-2pt S}
+                 \smallskip
+                 may be written more compactly as
+                 \smallskip
+                 \hskip0.15truein{\tt setstab\quad  -p:../groups/\quad
+                 psp62\quad lambda\quad S}
+                 \smallskip
+                 (Note the final slash following {\tt groups} is required.).
+                 The {\tt -p} option has no effect on output files.}
+%
+\bigbreak
+\subsection{Options affecting output format:}
+\nobreak\medskip\nobreak
+%
+\medbreak
+\defoption{-i}{This option applies to commands that construct and write out
+               either a permutation or a permutation group.  It causes
+               permutations to be written in image format, rather
+               than in cycle format (the default).}
+%
+\medbreak
+\defoption{-n:{\it name}}{Here {\it name\/} is a string.  The object created
+                         by the command will be named {\it name}.  By
+                         default, the name assigned to the object will be
+                         the name of the Cayley library containing its
+                         definition.  Note this option affects only the
+                         name of the object, not that of the file or the
+                         Cayley library.}
+%
+\medbreak
+\defoption{-q}{Suppresses informative messages on the state of the
+               computation, normally written to the standard output during
+               the computation.}
+%
+\medbreak
+\defoption{-s}{Causes statistics on the pruning of the backtrack
+               search tree to be written out to the standard output.
+               These statistics relate to the backtrack search tree
+               defined in the author's paper (Leon, 1991), and are
+               likely to be meaningful only to users familiar with that
+               paper.}
+%
+\medbreak
+\defoption{-w:{\it n}}{Here {\it n\/} should be a nonnegative integer.
+                       This option applies only to coset representative
+                       computations.   If the degree is less
+                       than or equal to {\it n}, and if a coset representative
+                       is found, it will be included in the informative
+                       messages written to the standard output.  (In any case,
+                       the coset representative will be written to a file in
+                       Cayley library format.)  The default value of {\it n}
+                       is currently 300.}
+\bigbreak
+%
+\subsection{Options affecting performance of the algorithm:}
+\nobreak\medskip\nobreak
+\defoption{-b:{\it k}}{Here {\it k\/} is a nonnegative integer which
+                 determines the extent to which base changes are performed
+                 in an attempt to
+                 improve pruning of the backtrack search tree using
+                 tests on double--coset minimality (Leon, 1991, Prop~8).
+                 When {\it k}~=~0,
+                 base change is never performed (except during $\bfgermR$--base
+                 construction, when it is used for a different purpose).
+                 As {\it k\/} increases, the number of base change operations
+                 performed increases;  however,
+                 increasing {\it k\/} beyond the base size produces no
+                 further increase in the number of base change operations.
+                 Designating {\it k}~=~0 reduces memory requirements and often
+                 produces the best running times as well.  On the other
+                 hand, some high--density groups seem to require a higher
+                 value of {\it k\/} in order to obtain acceptable performance.
+                 By default, the program chooses a value of {\it k\/} based
+                 on the density and degree of transitivity of the group;
+                 quite often, this default value is 0.
+                 \smallskip
+                 {\it Note:}\enskip For coset representative computations,
+                 this option has no effect unless known subgroups of the two
+                 associated groups are specified; see discussion of the
+                 {\tt -kL} and {\tt -kR} options below.}
+%
+\medbreak
+\defoption{-g:$m$}{Here $m$ should be a nonnegative integer.
+                 This is one of several parameters providing a
+                 time vs.\ space tradeoff.
+                 Small values of $m$, say 10 or less, minimize memory
+                 requirements, while large values of $m$, say 100 or
+                 greater, reduce the running time moderately for most
+                 difficult groups.  Use of a high value is recommended
+                 for multiply transitive groups.
+                 \smallskip
+                 After $\bfgermR$--base construction, the program attempts to
+                 reduce the height of the Schreier trees for the
+                 containing group by adding new strong generators.  However,
+                 it will never add generators for this purpose if doing
+                 so would cause the total number of strong generators to
+                 exceed $m$.  (It will also stop adding generators if the height
+                 falls below certain goals currently fixed in the program.)}
+%
+\medbreak
+\defoption{-k:$H$}{Here $H$ specifies a permutation group (in the format
+                 {\it cayleyLibraryName\/} or
+                 {\it fileName}\kern1pt::\kern1pt{\it cayleyLibraryName}).
+                 This option applies only to subgroup
+                 calculations.  The group $H$ must
+                 be a known subgroup of the group being computed.  In
+                 principle, this option allows one to take advantage
+                 of any subgroup of the group being computed that happens
+                 to be known in advance. In practice, however, it seldom
+                 appears to speed up the computation by very much,
+                 and it increases memory requirements.}
+%
+\medbreak
+\newdimen\optionWidth \optionWidth=\hsize \advance\optionWidth by-1em\relax
+                     \advance\optionWidth by-\optionIndent
+{\advance\leftskip by1em\noindent\vtop{\hsize=\optionIndent\parindent=0pt\tt\noindent
+                 -kL:$J$\vskip1pt\noindent -kR:$M$}\relax
+                 \vtop{\hsize=\optionWidth\parindent=0pt
+                 Here $J$ and $M$ must specify permutation groups (each in the
+                 format  {\it cayleyLibraryName\/} or
+                 {\it fileName}\kern1pt::\kern1pt{\it cayleyLibraryName}).  These options
+                 apply only to coset representative calculations.  Either or
+                 both may be specified.  Associated with every coset
+                 representative computation, there are ``left'' and ``right''
+                 groups, as explained in Section~2 of (Leon, 1991).
+                 The groups $J$ and $M$ must be known subgroups of these
+                 left and right groups, respectively.  Specifying $J$ and/or $M$,
+                 if known, increases memory requirements, but in some cases
+                 it may improve the running time.  For some very dense groups,
+                 one or both of these options may be needed in order to allow
+                 the computation to finish in an acceptable amount of time.}\vskip0pt}
+%
+\medbreak
+\defoption{-mb:$k$}{Here $k$ should be a nonnegative integer.  This integer
+                represents an upper bound on the size of the base for a 
+                permutation group.  The default value of $k$ is 62, which is
+                more than adequate for many groups.  For further discussion of
+                the {\tt -mb} option, see Section~VII.}
+%
+\medbreak
+\defoption{-mw:$\ell$}{Here $\ell$ should be a nonnegative integer whose value
+                is at least several hundred.  This integer represents an upper 
+                bound on the length of any word in the generators of any
+                permutation group.  For further discussion, see Section~VII.}
+%
+\medbreak
+\defoption{-r:$p$}{Here $p$ should be a nonnegative integer, normally smaller
+                 than the integer $m$ specified for the {\tt -g} option
+                 described above.  This is another option providing for a
+                 time versus space
+                 tradeoff.  Small values of $p$, say less than 10, minimize
+                 memory requirements, while larger values, say 50 or higher,
+                 {\it may\/} reducing the running time, although usually not
+                 a great deal.
+                 \smallskip
+                 Whenever the number of strong generators for the containing
+                 group exceeds $p$, redundant strong generators are eliminated,
+                 using a procedure originally due to Sims (1971).}
+\bigbreak
+\subsection{Special options:}
+\nobreak\medskip\nobreak
+\defoption{-l}{This option, if present, must be the first option on the
+               command line, and the remainder of the command line is
+               ignored.  (It may be omitted.)  The {\tt -l} option merely
+               prints out limits on the default maximum base size, 
+               default maximum word length, degree, and other
+               quantities with which this version of the program has been
+               compiled.  (See Section~VII for discussion of these limits.)}
+\medbreak
+\defoption{-v}{This option, if present, must be the first option on the
+               command line, and the remainder of the command line is
+               ignored.  (It may be omitted.)  The {\tt -v} option is
+               intended to be used once following compilation of the program.
+               It attempts to check that all the source files for the
+               program were compiled with the same options and size limits.
+               (See Section~VII for discussion of size limits.)}
+%
+%
+%
+\section{VI.\quad OUTPUT AND RETURN CODES}
+%
+All programs for subgroup computations return a value of 0 if the
+computation is completed successfully and a nonzero value (currently 15) if
+the computation terminates due to an error (input file not found, incorrect
+format in input file, memory exhausted, size limit in program exceeded, etc.)
+All programs for coset representative
+computations return a value of 0 if the computation is completed
+successfully and a coset representative exists, 1 if it is
+completed but a coset representative does {\it not\/} exist, and a value different from
+0 and 1 (currently 15) if the computation terminates due to an error.
+\medbreak
+%
+Unless the {\tt -q} option is specified, all of the programs write
+information about the progress of the computation to the standard output.
+Some of this information, most notably that relating to the
+$\bfgermR$--base and the backtrack search tree (the latter
+given only if {\tt -s} is specified)
+will probably be meaningful primarily to users familiar with the
+author's paper (Leon, 1991).  Information of more general interest
+includes:
+\smallskip
+{\advance\leftskip by0.45truein\noindent
+\item{i)}The order of the containing group (unless it is the symmetric 
+group).  Note that this order is determined by computing a base and strong
+generating set for the containing group when it is read in, unless they are 
+supplied in the input file. 
+\smallskip
+\item{ii)}The new (changed) base and strong generating set for the 
+containing group computed during $\bfgermR$--base construction, and the corresponding
+basic orbit lengths.  In the notation of (Leon, 1991), this is the
+base $(\alpha_1,\ldots,\alpha_k)$ associated with the $\bfgermR$--base.
+\smallskip
+\item{iii)}A base for the subgroup to be computed (subgroup computations)
+or for the subgroup associated with the right coset whose representative
+is to be computed (coset representative computations).  
+This is the subgroup base associated
+with the $\bfgermR$--base; in the notation of (Leon, 1991), it is
+$(\hat{\alpha}_1,\ldots,\hat{\alpha}_{\ell})$.  Note that this base is a
+subsequence of the base for the containing group in~(ii) above.
+\smallskip
+\item{iv)}The basic cell sizes corresponding to the subgroup base in~(iii)
+above (for definitions, see (Leon, 1991)).  Note that each basic
+cell size provides an upper bound for the corresponding basic orbit length of the
+subgroup to be computed (subgroup--type computations).
+(Usually the bound is not sharp).
+\smallskip
+\item{v)}The number of strong generators for the containing group and the
+mean node depths in the Schreier trees for the basic orbits of the containing
+group.  Depending on the {\tt -g} and {\tt -r} options, following $\bfgermR$--base
+construction, additional strong generators may be added in an attempt to
+reduce the height of the Schreier trees.  Figures are provided both before
+and after additional strong generators are added.
+\smallskip
+\item{vi)}[subgroup computations only]\enskip A message for each strong 
+generator that is found for the subgroup.  The message gives the level and the basic
+orbit lengths for the subgroup constructed thus far.  (A generator will 
+be said to be at level $i$ if it fixes the first $i-1$ base points but
+moves the $i$\kern1ptth.)
+\smallskip
+\item{vii)}[subgroup computations only]\enskip The order of the subgroup that was
+computed.
+\smallskip
+\item{viii)}[subgroup computations only]\enskip The base (same as in~(iii) above)
+and basic orbit lengths for the subgroup that was computed.
+\smallskip
+\item{ix)}[coset representative computations only]\enskip A message indicating whether a coset
+representative exists.
+\smallskip
+\item{x)}[coset representative computations only]\enskip If a coset representative exists and the degree is sufficiently
+low (depending on the {\tt -w} option), the coset representative that was
+found.  
+\smallskip
+\item{xi)}The time required for the computation.  Note that the time to
+read in the containing group from a file, construct the initial base and
+strong generating set for the containing group (if not present in the input
+file), and to write out the subgroup or coset representative to a file is
+not included in this time.  All computations relating to calculation of
+the subgroup or coset representative (including base changes in the containing
+group) are included.
+\medbreak}
+%
+Note that, in subgroup computations, the actual strong generators for the
+subgroup are not written to standard output, and in coset computations,
+the actual coset representative found may not (depending on the degree and
+{\tt -w} option) be written to the standard output.  However, both may be
+found (in Cayley library format) in the output file that is created.
+\medbreak
+For design, matrix, or code isomorphism computations, the isomorphism that
+is constructed is written to the standard output (assuming that the degree
+is sufficiently low) in a more easily readable
+(but not Cayley compatible) format than that described in Sections~II
+and~III.  For designs with the {\tt -pb} option,
+the action on points and blocks is given separately.  For matrices, the
+action on rows and columns is given separately.  For monomial isomorphism of
+matrices for non--binary codes, the monomial 
+isomorphism is written in the following format:
+$$\bigl(\kern1pt[\lambda_1]i_1,[\lambda_2]i_2,\ldots,[\lambda_k]i_k\kern1pt\bigr)$$
+This denotes the monomial permutation mapping 1 to $\lambda_1i_1$,
+2 to $\lambda_2i_2$, etc.  For example, to apply this monomial permutation
+to the rows of an $r$ by $c$ matrix, row $j$ is multiplied by $\lambda_j$
+and the result is moved to row position $i_j$.
+
+%
+\medbreak
+%
+%
+%
+\section{VII.\quad SIZE LIMITS}
+%
+There are a few fixed limits on the sizes of objects that the programs can
+handle.  These limits can be changed only by recompiling the programs.
+The order of any group may have at most 30 distinct prime divisors.  The
+name of any file may have at most 60 characters (including path information
+supplied with the {\tt -p} option).   The name of any object may have at
+most 16 characters.
+Most importantly, if the program is compiled using 16--bit integers,
+the maximum degree of any permutation group is limited to slightly less
+than $2^{16}$ (about 65000).  If it is compiled using 32--bit integers,
+there is, for practical purposes, no fixed limit.
+Note, however, that use of 16--bit
+integers reduces memory requirements substantially, and it is recommended
+unless groups of degree greater than 65000 (approx) are to be used.
+Only machines having at least 20 to 25 megabytes of memory are
+likely to be able to handle groups of degree high enough to require 
+32--bit integers.   Currently both 16--bit and 32--bit compiled versions 
+of the programs are available.
+\medbreak
+Although there is no fixed limit on the base size for a permutation group,
+a limit must be established at the time that the program is initiated, and
+this limit remains fixed during that run.
+This limit may be set at $k$ by means of the {\tt -mb:$k$} option, or it
+may be allowed to default to 62.  Note that large values of $k$ increase 
+running times and memory requirements slightly even if the actual base size 
+turns out to be much less than $k$. 
+\medbreak
+For the most part, the amount of memory (real and virtual) available
+determines the sizes of objects that can be handled by the programs.
+Memory requirements depend heavily on the degree of the group, and 
+to a somewhat lesser extent on the base size.
+The programs can use virtual memory to some extent; however, if 
+virtual memory used exceeds real memory by a factor of more than 1.6 to 1.8,
+excessive paging is likely to occur.  The following steps may be taken
+to reduce memory requirements; the steps are listed in order of decreasing
+benefit.
+\medskip{\advance\leftskip by0.45in\noindent
+\item{i)}If the degree of the group is less than 65000 (approx), use a
+         16--bit version of the program rather than a 32--bit version.
+         The 16--bit version is likely to run about as fast as the 32--bit
+         version, and it requires a great deal less memory.
+\smallskip
+\item{ii)}Specify options of {\tt -g:1} and {\tt -r:1}.  These options
+          are likely to increase the execution time substantially, but
+          they often save a good deal of memory.   As a compromise,
+          values greater than 1 but less than the defaults may be
+          specified, e.g., {\tt -g:20} and {\tt -r:15} 
+\smallskip
+\item{iii)}Specify the option {\tt -b:0} if it is not already the default.
+           In the majority of cases, this option will not increase
+           execution time, and it reduces memory requirements considerably.
+           However, in a great many cases, {\tt -b:0} 
+           will already be the default.   (The value for this and other
+           options is displayed on the standard output when the program is
+           is run.)
+\smallskip
+\item{iv)}For (element) centralizer and conjugacy calculations, specify the
+          {\tt -np} option.  This saves a modest amount of memory.  The
+          effect on execution time is hard to predict; in some cases, it
+          may lead to a major increase.  For group centralizer calculations,
+          options of {\tt -cg:2} and {\tt -cp:$i$}, where $i$ is 3 to 5,
+          may be tried, although on some groups they may raise the 
+          running time to unacceptable levels.  
+\smallskip          
+\item{v)}Specify the option {\tt -mb:$k$} for a value of $k$ less than
+          the default of 62.  The {\tt -mb:$k$} options sets a limit of $k$
+          on the base size for the group; often a value considerably less
+          than 62 (e.g., 15 or 20) will be adequate.  However, the amount of 
+          memory saved is relatively small.
+\vskip0pt}
+\medbreak
+In the author's experience, the programs can often handle groups of degree
+as high as 2000$m$ to 3000$m$, where $m$ is the number of megabytes of
+{\it real\/} memory available.  However, for groups lacking a relatively
+small base, the limit on the degree is much lower.  Also, this limit
+applies only to memory requirements; depending on the type of computation
+and the specific groups, it may or may not be possible to perform 
+computations in groups this large in an acceptable amount of time.
+%
+%
+\section{VIII.\quad EXAMPLES}
+%
+The author has prepared a number of sample objects that may be used to
+test the programs.  In the Unix distribution, these objects
+appear in various subdirectories of the directory {\tt partn/examples}.
+%
+\medbreak
+The subdirectories {\tt psp62}, {\tt psp82}, {\tt psu72},
+{\tt omg84}, {\tt fi23}, {\tt ahs2}, {\tt rubik4}, and 
+{\tt syl128} of directory {\tt partn/examples} contain
+examples for computation in the groups ${\rm PSp}_6(2)$ of degree 63,
+${\rm PSp}_8(2)$ of degree 255, ${\rm PSU}_7(2)$ of degree 2709,
+$\Omega^+_8(4)$ of degree 5525, ${\rm Fi}_{23}$ of degree 31671, 
+${\rm AUT(HS)}\times {\rm AUT(HS)}$ of degree 200, 
+the group of a $4\times 4$ Rubik's cube (degree 96), and a Sylow 2--subgroup
+of the symmetric group {\it Sym\/}(128)\enskip of degree 128, respectively.
+Note that, for the last two groups, any base will be large, and the 
+{\tt -mb} option (e.g., {\tt -mb:75}) will need to be specified.
+Each of the directories contains files as follows, where {\it grp\/} is
+to be replaced by the actual name of the directory.
+\medbreak
+{\advance\leftskip by 1.0truein\relax
+   \noindent\llap{\hbox to0.75in{{\it grp}\hfil}}The permutation group mentioned above.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{{\it grp\/}{\tt\kern1ptx}\hfil}}A group permutation isomorphic to the
+          group {\it grp\/} and having a small but nontrivial intersection with
+          {\it grp}.  The intersection of {\it grp\/} and {\it grp\/}{\tt x} may
+           be computed by the command
+   \smallskip
+   \hskip0.4in{\tt inter\quad {\it grp\/}\quad {\it grp\/}x\quad int}
+   \smallskip
+          which saves the intersection as the group {\tt int}.  The file
+          {\it grp\/}{\tt x} contains a comment giving the order of the
+          intersection.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt set1\hfil}}A random point set of size half the degree
+                of {\it grp}.  Except in the case of {\tt rubik4}
+                and {\tt syl128}, the set stabilizer of
+                 {\tt set1} in the group {\it grp\/} turns out to be trivial.  This
+                 set stabilizer may be computed by the command
+   \smallskip
+   \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set1\quad stab1}
+   \smallskip
+          which saves the set stabilizer as the group {\tt stab1}.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt set2\hfil}}A point set of size approximately
+                 half the degree whose set stabilizer in {\it grp\/} 
+                 is a dihedral group of low order, except in the case 
+                 of {\tt rubik4} and
+                 {\tt syl128}.  This set stabilizer may be computed by the command
+   \smallskip
+   \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set2\quad stab2}
+   \smallskip
+          which saves the set stabilizer as the group {\tt stab2}.
+          The file {\tt set2} contains a comment indicating the order of the
+          stabilizer.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt set3\hfil}}A point set of size roughly
+                 half the degree (in most cases ) whose set stabilizer in {\it grp\/} is a
+                 group of high order.  This set stabilizer may be
+                 computed by the command
+   \smallskip
+   \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set3\quad stab3}
+   \smallskip
+          which saves the set stabilizer as the group {\tt stab3}.
+          The file {\tt set3} contains a comment indicating the order of the
+          stabilizer.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt set1x\hfil}}A point set obtained by applying a
+                 randomly--chosen element of the group {\it grp\/} to {\tt set1}.
+                 The command
+   \smallskip
+   \hskip0.4in{\tt setimage\quad {\it grp\/}\quad set1\quad set1x\quad g}
+   \smallskip
+          may be used to find an element {\tt g} of the group {\it grp\/} mapping
+          {\tt set1} to {\tt set1x}.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt set1y\hfil}}A point set having the same cardinality
+                 as {\tt set1} but not equal to the image of {\tt set1}
+                 under any element of {\it grp\/}.  The command
+   \smallskip
+   \hskip0.4in{\tt setimage\quad {\it grp\/}\quad set1\quad set1y\quad h}
+   \smallskip
+          may be used to determine that {\tt set1y} is not in fact an
+          image of {\tt set1} under the group.  (The permutation $h$ will
+          {\it not\/} be created.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt par1\hfil}}A partition of the set $\{1,\ldots,n\}$, where
+                 $n$ is the degree of group {\it grp}.  (The file contains
+                 a comment indicating the number of cells and cell sizes.)
+                 The stabilizer in {\it grp\/} of
+                 {\tt par1}, treated as an ordered partition, may be computed by the
+                 command
+   \smallskip
+   \hskip0.4in{\tt parstab\quad {\it grp\/}\quad par1\quad pstab1}
+   \smallskip
+          which saves the ordered partition stabilizer as the group {\tt pstab1}.
+          The file {\tt par1} contains a comment giving the order of the
+          stabilizer.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt par1x\hfil}}A partition obtained by applying a
+                 randomly--chosen element of the group {\it grp\/} to {\tt par1}.
+                 The command
+   \smallskip
+   \hskip0.4in{\tt parimage\quad {\it grp\/}\quad par1\quad par1x\quad i}
+   \smallskip
+          may be used to find an element {\tt i} of the group {\it grp\/} mapping
+          {\tt par1} to {\tt par1x}.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt par1y\hfil}}A partition in which the sizes of the
+                 cells match those in {\tt par1}, but which is not the
+                 image of {\tt par1} under any element of the group {\it grp\/}.
+                 The command
+   \smallskip
+   \hskip0.4in{\tt parimage\quad {\it grp\/}\quad par1\quad par1y\quad j}
+   \smallskip
+          may be used to demonstrate that {\tt par1y} is not an image of
+          {\tt par1} under any group element.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt elt1\hfil}}An element of the group {\it grp\/}
+                 having a fairly
+                 large centralizer in {\it grp\/}.  This centralizer may be
+                 computed by the command
+   \smallskip
+   \hskip0.4in{\tt cent\quad {\it grp\/}\quad elt1\quad cent1}
+   \smallskip
+          which saves the centralizer as the group {\tt cent1}.
+          The file {\tt elt1} contains a comment stating the order of the
+          centralizer.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt elt1x\hfil}}An element conjugate
+                 under the group {\it grp\/}
+                 to {\tt elt1}.  An element of {\it grp\/} conjugating {\tt elt1}
+                 to {\tt elt1x} may be found by the command
+   \smallskip
+   \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt1\quad elt1x\quad c1}
+   \smallskip
+          which sets {\tt c1} to such a conjugating element.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt elt2\hfil}}An permutation {\it not\/}
+                 in the group {\it grp\/} having a nontrivial
+                 centralizer in {\it grp}.  This centralizer may be
+                 computed by the command
+   \smallskip
+   \hskip0.4in{\tt cent\quad {\it grp\/}\quad elt2\quad cent2}
+   \smallskip
+          which saves the centralizer as the group {\tt cent2}.
+          The file {\tt cent2} contains a comment indicating the order of the
+          centralizer.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt elt2x\hfil}}A permutation (not in {\it grp\/})
+                 conjugate under {\it grp\/}
+                 to {\tt elt2}.  An element of {\it grp\/} conjugating {\tt elt2}
+                 to {\tt elt2x} may be found by the command
+   \smallskip
+   \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt2\quad elt2x\quad c2}
+   \smallskip
+          which sets {\tt c2} to such an element.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt elt2y\hfil}}A permutation not in {\it grp\/}
+                 having the same cycle structure as {\tt elt2} but not
+                 conjugate under {\it grp\/} to {\tt elt2}.  Non--conjugacy may
+                 be demonstrated by the command
+   \smallskip
+   \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt2\quad elt2y\quad d}
+   \smallskip
+          which does {\it not} create a permutation {\tt d}.
+\vskip0pt}
+\medbreak
+Note that, in the case of the group {\tt fi23}, about 16 megabytes of real
+memory may be needed to perform the calculations above.
+\bigbreak
+The subdirectories {\tt q17} and {\tt q32} contain designs, (0,1)--matrices,
+and codes based on the quadratic residue code $Q_{17}$ of length 17 and
+on the extended quadratic residue code $Q_{32}$ of length 32, respectively.
+The contents of these directories are as follows, where $i$ denotes either
+17 or 32.
+\medbreak
+{\advance\leftskip by 1.0truein\relax
+   \noindent\llap{\hbox to0.75in{\tt q\kern1pt$i$\hfil}}The quadratic or extended
+                      quadratic residue code.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt v\kern1pt$i$\hfil}}The matrix whose rows are
+                   the weight 5 ($i = 17$) or weight 8 ($i = 32$) codewords
+                   of the code {\tt q}\kern1pt$i$.  The automorphism group of the code
+                   {\tt q}\kern1pt$i$ may be computed by the command
+   \smallskip
+   \hskip0.4in{\tt codeauto\quad q\kern1pt$i$\quad v\kern1pt$i$\quad A}
+   \smallskip
+   or
+   \smallskip
+   \hskip0.4in{\tt codeauto\quad -cv\quad q\kern1pt$i$\quad v\kern1pt$i$\quad A}
+   \smallskip
+          which saves the automorphism group as the group {\tt A},
+          either as a group of degree $i$ or as a group of degree
+          $i+k$, where $k$ is the number of codewords in the set {\tt v}\kern1pt$i$.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt q\kern1pt$i$\kern1ptx\hfil}}Another quadratic residue
+                     code obtained from
+                     {\tt q}\kern1pt$i$ by applying a random permutation to the
+                      coordinates..
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt v\kern1pt$i$\kern1ptx\hfil}}The matrix whose rows are
+                   the weight 5 ($i = 17$) or weight 8 ($i = 32$) codewords
+                   of the code {\tt q}\kern1pt$i$\kern1pt{\tt x}.  An isomorphism from
+                   {\tt q}\kern1pt$i$ to {\tt q\kern1pt$i$\kern1ptx}
+                   may be found by the command
+   \smallskip
+   \hskip0.4in{\tt codeiso\quad q\kern1pt$i$\quad q\kern1pt$i$\kern1ptx\quad
+                v\kern1pt$i$\quad v\kern1pt$i$\kern1ptx\quad s}
+   \smallskip
+          which saves the isomorphism found as the permutation {\tt s}.
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt d\kern1pt$i$\hfil}}The design on $\{1,\ldots,i\}$
+                     whose blocks correspond to the codewords of
+                     weight 5 ($i = 17$) or weight 8 ($i = 32$) in {\tt q}\kern1pt$i$.
+                     The automorphism group of this design (which must
+                     contain the group of the corresponding code, and which
+                     in fact equals it) may be computed by the command
+   \smallskip
+   \hskip0.4in{\tt desauto\quad d\kern1pt$i$\quad B}
+   \smallskip
+   or
+   \smallskip
+   \hskip0.4in{\tt desauto\quad -pb\quad d\kern1pt$i$\quad B}
+   \smallskip
+          which saves the automorphism group as the group {\tt B}, either as a
+          group on points only, or as a group on points and blocks.  Note
+          that the incidence matrix of the design {\tt d}\kern1pt$i$ is the
+          transpose of the matrix {\tt v}\kern1pt$i$, so the same automorphism
+          group could be computed by the command
+   \smallskip
+   \hskip0.4in{\tt matauto\quad -tr\quad v\kern1pt$i$\quad A}
+   \medbreak
+   \noindent\llap{\hbox to0.75in{\tt d\kern1pt$i$\kern1ptx\hfil}}A design obtained from
+                     {\tt d}\kern1pt$i$ by applying a random permutation to the
+                     points.  (The order of the blocks is also permuted
+                     randomly.)  An isomorphism from {\tt d}\kern1pt$i$ to
+                     {\tt d\kern1pt$i$\kern1ptx} may be found by the command
+   \smallskip
+   \hskip0.4in{\tt desiso\quad d\kern1pt$i$\quad d\kern1pt$i$x t}
+   \smallskip
+          which sets {\tt t} to one such isomorphism.
+\vskip0pt}
+\bigbreak
+The subdirectory {\tt dmcl} contains a design based on
+the sporadic simple group of McLaughlin (McL, degree 275).  In this group,
+a point stabilizer has orbits of length 1, 112, and 162.  The design
+{\tt dmcl} on $\{1,\ldots,275\}$ has 275 blocks, each of size 112; the
+blocks are the orbits of length 112 in the 275 point stabilizers.
+The group of this design, which must contain AUT(McL) and turns out to
+equal to AUT(McL), may be computed by the command
+\smallskip
+\hskip0.4in{\tt desauto\quad dmcl\quad Y}
+\smallskip
+which saves the group as {\tt Y}.  (Note that we are computing the group
+of the design, not the group of the graph associated with the orbit of
+length 112; in general, the design group is larger than the graph group,
+although in this case they are the equal.)  The directory also contains a
+second design {\tt dmclx}, isomorphic to {\tt dmcl}.  An isomorphism may
+be found by the command
+\smallskip
+\hskip0.4in{\tt desiso\quad dmcl\quad dmclx\quad s}
+\smallskip
+which sets {\tt s} to an isomorphism from {\tt dmcl} to {\tt dmclx}.
+\bigbreak
+Finally, the subdirectories {\tt had32} and {\tt had104} 
+contains  $32\times32$ and $104\times104$ matrices
+over ${\rm GF}(3)$, respectively, which are 
+essentially the Paley--Hadamard matrices.  
+(The entries of -1 have been changed to 2.)  The (monomial) automorphism
+group of either of these Hadamard matrices may be computed by the command
+\smallskip
+\hskip0.4in{\tt matauto\quad -mm\quad had\kern1pt$i$\quad Z}
+\smallskip
+($i = 32{\rm\ or\ }104$),
+which sets {\tt Z} to the automorphism group.  This subdirectories also
+contain matrices {\tt had\kern1pt$i$\kern1ptx} obtained by 
+applying random monomial
+permutations to the rows and columns of {\tt had\kern1pt$i$}.  Equivalence of
+{\tt had\kern1pt$i$} and {\tt had\kern1pt$i$\kern1ptx} may be 
+established by the command
+\smallskip
+\hskip0.4in{\tt matiso\quad -mm\quad had\kern1pt$i$\quad had\kern1pt$i$\kern1ptx\quad w}
+\smallskip
+which sets {\tt w} to an monomial isomorphism 
+from {\tt had\kern1pt$i$} to {\tt had\kern1pt$i$\kern1ptx}.
+Finally, the subdirectories contain Hadamard designs {\tt dhad\kern1pt$i$}\kern3pt\
+($i = 32{\rm\ or\ }104$) and equivalent designs {\tt dhad\kern1pt$i$\kern1ptx},
+whose groups may be computed using the {\tt desauto} command, and whose
+equivalence may be established with the {\tt desiso} command.
+%
+%
+\section{IX.\quad OTHER COMMANDS}
+%
+In the course of testing and benchmarking the partition backtrack
+algorithms described in Section~IV, the author developed a number of other 
+programs.  Most of these programs were put
+together quickly, with a view toward simplicity rather than efficiency;
+in some cases, they are very inefficient.  Also, some of them perform
+only minimal error checking.  Nonetheless, they may prove useful since they 
+operate on objects specified in the format described in Section~II.
+\medbreak
+All of these programs accept the {\tt -a}, {\tt -i}, {\tt -mb:$k$}, {\tt -mw:$w$},
+{\tt -n:}{\it name}, {\tt -p:}{\it path}, and {\tt -q} options, as described
+in Section~V, whenever they would be meaningful.  (For example, the {\tt -i}
+option is meaningful only if the command creates a permutation or
+permutation group.)  Other options vary by command, and are discussed separately
+for each command below.
+%
+\subsection{Base and strong generating set construction:}The {\tt generate}
+command may be used to construct a probable base and strong generating set
+for the permutation group generated by specified permutations.  The random
+Schreier method (Leon, 1980) is used.  If the group order is known in advance,
+this method always produces a correct base and strong generating set, although
+there is no bound on the time required to do so.  Otherwise,
+there is no guarantee that the method will produce a correct result.  However,
+in the author's experience, it nearly always does give a correct result, and
+it runs far more quickly than alternative methods, such as the Schreier--Sims
+or Schreier--Todd-Coxeter--Sims algorithms.
+\medbreak
+The format for the command is
+%
+\smallskip
+\centerline{{\tt generate}\quad {\it options\/}\quad {\it inputGroup\/}\quad 
+                         {\it outputGroup}}
+%
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+            [{\tt -a}]\kern-1pt\enskip
+            [{\tt -i}]\kern-1pt\enskip
+            [{\tt -mb:}$k$]\kern-1pt\enskip
+            [{\tt -mw:}$w$]\kern-1pt\enskip
+            [{\tt -n:}{\it name\/}]\kern-1pt\enskip
+            [{\tt -nro}]\kern-1pt\enskip
+            [{\tt -p:}{\it path\/}]\kern-1pt\enskip
+            [{\tt -q}]\kern-1pt\enskip
+            [{\tt -s:}{\it seed\/}]\kern-1pt\enskip
+            [{\tt -ti:}$i$]\kern-1pt\enskip
+            [{\tt -tr:}$m$]\kern-1pt\enskip
+            [{\tt -z}]}
+\smallskip
+Here {\it inputGroup\/} denotes the original permutation group, for which
+a base and strong generating set are not yet available.
+The factored group order for {\it inputGroup\/} may or may not be present.
+The random Schreier method is used to construct a probable base and strong
+generating set for {\it inputGroup},, and the result is saved as the 
+permutation group {\it outputGroup}.
+If the factored group order is present, the computation will continue until
+a base and strong generating set has been found.  Otherwise it continues until
+{\it m\/} consecutive quasi--random elements of the group factor in terms of the
+possible base and strong generating set, where {\it m\/} is the integer
+specified in the {\tt -tr:}$m$ option (default 40).  High values of 
+{\it m} may be specified to reduce the chance of an incorrect result, at the
+cost of slowing down the computation.
+\medbreak
+Normally, before a new strong generator is added to the strong generating
+set, an attempt is made to replace the new generator by a power of it, in
+order to obtain generators of low order.  (This may be desirable later on if the 
+Schreier--Todd--Coxeter--Sims method is used to verify the base and strong
+generating set; in addition, it saves space whenever a non--involutory
+generator is converted to an involution.)    This attempt may be suppressed
+by the {\tt -nro} option.  Note, however, that replacement of generators
+by powers is relatively inexpensive, so the {\tt -nro} option saves little time.
+The {\tt -ti:}$i$ option may be specified in order to have the program
+try harder to find involutory generators.  Up to $i$ consecutive generators that
+cannot be converted to involutory generators will be rejected.  The default
+for $i$ is 0; higher values often increase the execution time a good
+deal.
+\medbreak
+If the {\tt -z} option is specified, the program will make some attempt
+to remove certain redundant strong generators from the strong generating set for
+{\it outputGroup}. 
+%
+\subsection{Base change:}The {\tt chbase}
+command may be used to change the base in a permutation group.  The
+command format is
+%
+\smallskip
+\centerline{{\tt chbase}\quad {\it inputGroup\/}\quad 
+                         $p_1,p_2,\ldots,p_k$\quad {\it outputGroup}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -q}]\enskip
+        [{\tt -z}]}
+\smallskip
+The base for permutation group {\it inputGroup\/} is
+changed, if necessary, so that it begins  with $p_1,p_2,\ldots,p_k$,
+and the group with this new base is saved as {\it outputGroup}.  Note
+that, in the list $p_1,p_2,\ldots,p_k$ of points, individual points
+are separated by commas but {\it not\/} by blanks.  Note also that the
+points $p_1,p_2,\ldots,p_k$ are included in the new base even if
+they are redundant as base points.  However, no other redundant base points
+will appear in the new base.  If the {\tt -z} option is specified, certain
+redundant strong generators will be removed following the base change.
+%
+%
+\subsection{Conjugation by a specified permutation:}The {\tt cjper}
+command may be used to conjugate an object (group, permutation, point set,
+partition, design, matrix, or code) by a specified permutation.  The command
+format is
+%
+\smallskip
+\centerline{{\tt cjper}\quad {\it options\quad type\quad object\quad
+                             conjugateObject\quad conjugatingPerm}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+            [{\tt -a}]\enskip
+            [{\tt -b}]\enskip
+            [{\tt -d:}{\it deg\/}]\enskip
+            [{\tt -i}]\enskip
+            [{\tt -mb:}$k$]\enskip
+            [{\tt -mm}]\enskip
+            [{\tt -mw:}$w$]\enskip
+            [{\tt -n:}{\it name\/}]\enskip
+            [{\tt -p:}{\it path\/}]\enskip
+            [{\tt -q}]\enskip}
+\smallskip
+Here {\it type\/} must be one of the keywords {\tt group}, {\tt perm},
+{\tt set}, {\tt partition}, {\tt design}, {\tt matrix}, or {\tt code},\enskip
+{\it object\/} must be an object of the type designated by {\it type},\enskip
+and {\it conjugatingPerm\/} must be a permutation.  In the event that {\it object\/}
+is a permutation, set, or partition, the {\tt -d:}{\it deg} option {\it must\/}
+be used to specify the degree {\it deg}.  The program sets
+{\it conjugateObject\/} to the object obtained by conjugating {\it object\/}
+by {\it conjugatingPerm\/}, in the case that {\it object\/} is a group 
+or permutation, or to the object obtained by
+applying {\it conjugatingPerm\/} to {\it object}, if {\it object} is a
+point set, partition, design, matrix, or code.  In the event that
+{\it object\/} is a group, the {\tt -b} option forces the program to
+compute a base and strong generating set for {\it conjugateObject\/}; by
+default, {\it conjugateObject\/} will have a base and strong generating
+set only if {\it object\/} does.
+\medbreak
+In the event that {\it object\/} is a design or matrix, the degree
+is treated as the number of points plus the number of blocks, or the
+number of rows plus the number of columns, respectively.
+Blocks or columns are permuted as well as points or rows.  However,
+since the input format for permutations permits a permutation of degree $n$
+to be treated as a permutation of any higher degree, this represents no
+real restriction.
+\medbreak
+If {\it object\/} is a matrix over a finite field ${\rm GF}(q)$, the {\tt -mm}
+option may be specified.  Then {\it conjugatingPerm\/} must have degree
+$(q-1)(r+c)$, where $r$ and $c$ are the number of rows and columns, and
+must satisfy the ``monomial property'', as described in Section~III.
+
+%
+\subsection{Conjugation by a random permutation:}The {\tt cjrndper}
+command may be used to conjugate an object by a either a random permutation,
+or by a permutation chosen at random from a specified permutation group.  The command
+format is
+%
+\smallskip
+\centerline{{\tt cjrndper}\quad {\it options\quad type\quad object\quad
+                             conjugateObject}\quad [{\it conjugatingPerm\/}]}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\kern-1pt\enskip
+        [{\tt -b}]\kern-1pt\enskip
+        [{\tt -d:}{\it deg\/}]\kern-1pt\enskip
+        [{\tt -g:}{\it grp\/}]\kern-1pt\enskip
+        [{\tt -i}]\kern-1pt\enskip
+        [{\tt -mb:}$k$]\kern-1pt\enskip
+        [{\tt -mm}]\kern-1pt\enskip
+        [{\tt -mw:}$w$]\kern-1pt\enskip
+        [{\tt -n:}{\it name}]\kern-1pt\enskip
+        [{\tt -p:}{\it path\/}]\kern-1pt\enskip
+        [{\tt -s:}{\it seed\/}]\kern-1pt\enskip
+        [{\tt -q}]}
+\smallskip
+Here {\it type\/} must be one of the keywords {\tt group}, {\tt perm},
+{\tt set}, {\tt partition}, {\tt design}, {\tt matrix}, or {\tt code},\enskip
+and {\it object\/} must be an object of the type designated by {\it type}.
+In the event that {\it object\/}
+is a permutation, set, or partition, the {\tt -d:}{\it deg} option {\it must}
+be used to specify the degree {\it deg}.  If {\it object\/} is a permutation
+or permutation group, the program sets
+{\it conjugateObject\/} to the object obtained by conjugating {\it object\/}
+by a certain permutation $x$; if {\it object\/} is a point set, partition,
+design, matrix, or code, it sets {\it conjugateObject\/} to the
+object obtained by applying a certain permutation $x$ to {\it object}.
+In either case, the permutation $x$ is
+chosen at random from the group {\it grp}, if the {\tt -g:}{\it grp} option
+is specified, or at random from the symmetric group, if the
+{\tt -g:}{\it grp} option is omitted.  If {\it conjugatingPerm\/} is specified, 
+the permutation $x$ is saved as {\it conjugatingPerm}.
+The {\tt -s:}{\it seed} option may be used to specify
+a specific seed for the random number generator that is used internally.
+In the event that {\it object\/} is a group, the {\tt -b} option forces the
+program to compute a base and strong generating set for {\it conjObject}, even
+when one is not available for {\it object}.
+\medbreak
+In the event that {\it object\/} is a design (or matrix), both points
+and blocks (or both rows and columns) are permuted.
+\medbreak
+If {\it object\/} is a matrix over a finite field ${\rm GF}(q)$, the {\tt -mm}
+option may be specified.  Then a random monomial permutation is applied
+to the rows and columns of the input matrix.
+%
+%
+%
+\subsection{Commutator groups and lower central series:}The {\tt commut}
+command may be used to compute commutator groups.  Repeated application of
+the command may be used to compute lower central series.  Specifically, given
+a group $G$ and a (not necessarily normal) subgroup $H$ of $G$, the command
+computes the commutator group $C = [G,H]$.  The command format is
+%
+\smallskip
+\centerline{{\tt commut}\quad {\it options}\quad {\it permGroup}\quad
+                        [{\it subgroup\/}]\quad {\it commutatorGroup}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -q}]}
+\smallskip
+Here, {\it permGroup\/}, {\it subgroup\/}, and {\it commutatorGroup\/}
+play the role of $G$, $H$, and $C$ above, respectively.
+If {\it subgroup\/} is specified, it must be a subgroup of {\it permGroup\/}
+(not checked); the command sets {\it commutatorGroup\/}
+to the commutator of {\it permGroup\/} and {\it subgroup}.  If subgroup is
+omitted, the command sets {\it commutatorGroup\/} to the commutator of
+{\it permGroup\/} with itself (the derived group). 
+\medbreak
+At present, the strong generating set for the commutator group is
+constructed only by the random Schreier method.  Thus there is a
+(probably small) possibility that the base and strong generating set 
+constructed for the commutator group will be incorrect.  (If this
+occurs, the generators constructed will generate the commutator group, but
+not strongly.  This undesirable feature will be fixed eventually.)
+\medbreak
+The return code from the {\tt commut} command will 0 if the commutator group
+has order 1.  
+Otherwise the return code will depend on  whether the order of $H$ (i.e.,
+{\it subgroup\/})
+is known in advance.  If so, the return code will  1 if $\vert C\vert \neq
+\vert H\vert$ and 2 otherwise.  (If $H$ is normal in $G$, these correspond
+to the cases $H \subset G$ and $H = G$, respectively.)  If not, the return
+code will be 3. 
+%
+%
+%
+\subsection{Comparison of groups, normality, and centralization:}The {\tt compgrp} command may be
+used to check if either of two permutation groups is contained
+in the other, or normalizes the other, or whether the two groups
+centralize each other.  The command format is
+%
+\smallskip
+\centerline{{\tt compgrp}\quad [{\tt -c}] \enskip[{\tt -n}]\enskip
+            [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip
+            [{\tt -p:}{\it path\/}]\quad {\it permGroup1\quad permGroup2}}
+\smallskip
+This command checks if either of {\it permGroup1\/} or {\it permGroup2\/} is contained
+in the other.  If the {\tt -n} option is specified, it also checks if
+either group normalizes the other.  (Note here the {\tt -n} option is used
+for a different purpose that that described in Section~V.)  If the {\tt -c} option is given, it
+checks whether the two groups centralize each other.  Messages indicating the result are
+written to the standard output.   The return code is 0 if the two groups
+are equal, 1 if {\it permGroup1\/} is a proper subgroup of {\it permGroup2\/},
+2 if {\it permGroup2\/} is a proper subgroup of {\it permGroup1\/}, and 3
+otherwise.\quad  Note:  The procedure for checking normality
+is, at present, extremely inefficient in many cases.
+%
+%
+%
+\subsection{Comparison of permutations:}The {\tt compper} command may be
+used to check if two permutations are equal, or if a permutation is the
+identity.  The command format is
+%
+\smallskip
+\centerline{{\tt compper}\quad {\it degree\quad permutation1}\quad 
+            {\tt [}{\it permutation2\/}{\tt ]}}
+\smallskip
+This command checks if {\it permutation1\/} and {\it permutation2}, both of
+which must be permutations of degree {\it degree}, are equal.  It prints a
+message indicating whether the permutations are equal, and gives a return
+code of 0 if they are equal and 1 otherwise.  If {\it permutation2\/} is
+omitted, it is taken as the identity; thus the command checks if
+{\it permutation1\/} is the identity.
+%
+%
+%
+\subsection{Comparison of point sets:}The {\tt compset} command may be
+used to check if two point sets are equal.  The command format is
+%
+\smallskip
+\centerline{{\tt compset}\quad {\it degree\quad set1}\quad 
+            {\tt [}{\it set2\/}{\tt ]}}
+\smallskip
+This command checks if {\it set1\/} and {\it set2}, both of
+which must be points sets of degree {\it degree}, are equal, or if either
+is contained in the other.  if {\it set2\/} is omitted, it is taken to be
+the empty set, and the command checks if {\it set1\/} is empty.  It prints a
+message indicating the result.  If {\it set2\/} is specified, the return code is 0 if
+the two sets are equal, 1 if {\it set1\/} is properly contained in {\it set2\/}, 
+2 if {\it set1\/} properly contains {\it set2\/}, and 3 otherwise.
+If {\it set2\/} is omitted, the return code is 0 if {\it set1\/} is empty
+and 1 otherwise.
+%
+%
+\subsection{Coset weight distributions of codes:}The {\tt cwtdist}
+command\footnote{${}^{\dag}$}{\elevenpoint At time of writing, this command
+was not complete.  It should be available shortly.}
+may be used to compute the coset weight distribution of a linear code.
+At present, the program is restricted to binary codes of codimension at
+most 32.  The program is highly optimized; nonetheless, time and space
+requirements may restrict the codimension to values less than its maximum
+of 32.  The command format is
+%
+\smallskip
+\centerline{{\tt cwtdist}\quad {\it options}\quad {\it code}\quad
+            [{\it maxCosWeight\/}\quad [{\it matrix\/}]]}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -q}]}
+\smallskip
+The program computes the coset weight distribution of the code 
+{\it code\/}, that is, for each $d$, it determines the number of cosets of
+the code having minimum weight $d$.  If {\it maxCosWeight\/} is specified
+(It should be an integer.), the computation is performed only for
+$d \leq {\it maxCosWeight}$.  If {\it matrix\/} is given, a coset representative
+is saved for one coset whose minimum weight is the minimum of the covering 
+radius and {\it maxCosetWeight\/}.  {\it Note:\/}  It is not possible to 
+specify {\it matrix\/} without specifying {\it maxCosWeight\/}; however,
+an artificially large value of {\it maxCosWeight\/} may be given instead.
+%
+%
+%
+\subsection{Designs from groups:}The {\tt orbdes} command may be used to
+construct a block design $D$ from a permutation group $G$, which normally
+should be transitive.  The design $D$ will have $n$ points and $n$ blocks, each
+having the same number of points, where $n$ is the degree.  The automorphism
+group ${\rm AUT}(D)$ will contain the group $G$ (perhaps properly).
+For a specified point $\gamma$, let $\Gamma$ denote the orbit of $\gamma$
+under the point stabilizer $G_1$.  The blocks of $D$ are exactly
+$\Gamma^{u_1},\ldots,\Gamma^{u_k}$, where $k$ is the size of the $G$--orbit
+of 1, and $u_1,\ldots,u_k$ map 1 to the different points of the $G$--orbit
+of 1.  The command format is
+%
+\smallskip
+\centerline{{\tt orbdes}\quad [{\tt -a}]\enskip[{\tt -m}]\enskip
+            [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip
+            [{\tt -p:}{\it path\/}]\quad
+            {\it permGroup}\quad {\it point}\quad {\it design}}
+\smallskip
+Here {\it permGroup}, {\it point}, and {\it design\/} play the role of
+$G$, $\gamma$, and $D$ above, respectively.  If the {\tt -m} option is
+given, the incidence matrix of the design is written out as a matrix;
+otherwise the design is written in the standard format for designs.
+%
+%
+%
+\subsection{Finding group elements of specified order:}The {\tt fndelt}
+command may be used to locate group elements of specified order, using
+a quasi-random search process.  (Random group elements are examined in
+searching for ones whose order is a multiple of the specified order.)
+The command format is
+%
+\smallskip
+\centerline{{\tt fndelt}\quad {\it options}\quad {\it permGroup} \quad
+                        $n$\quad $k_1$\quad $k_2$\quad$\ldots$}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -f}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -m:}{\it trials}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name}]}
+\vskip2pt
+\centerline{
+        [{\tt -o:}{\it ord\/}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -po}]\enskip
+        [{\tt -s:}{\it seed\/}]\enskip
+        [{\tt -wg:}{\it grp\/}]\enskip
+        [{\tt -wp:}{\it perm\/}]}
+\smallskip
+By default, the command searches quasi--randomly
+until it finds $n$ involutions in the
+group {\it permGroup\/}, and
+if $k_1,\,k_2,\,\ldots$ are specified, it saves the $k_1$\kern1ptst,
+$k_2$\kern1ptnd, $\ldots$ elements found.  (See discussion of the 
+{\tt -wp} and {\tt -wg} options below.)  The value of $n$ may be at
+most 99.  The seed used in the random number generator may be specified
+by the {\tt -s:}{\it seed\/} option; two invocations with the same
+(default or specified) seed should produce identical results.
+If the {\tt -o:}{\it ord\/}
+option is given, the command searches for elements of order {\it ord}, rather
+than for involutions.  If the {\tt -f} option is specified, it prints
+the number of fixed points of each element found.  If the {\tt -po} option
+is specified, it prints the orders of all products of the elements found.
+If the {\tt -wp:}{\it perm\/} option is given and $k_1$ is specified,
+the $k_1$\kern1ptst element found is saved as the permutation {\it perm}.
+If the {\tt -wg:}{\it grp\/} is given and at least $k_1$ is specified,
+a group {\it grp\/} is created using the $k_1$\kern1ptst,
+$k_2$\kern1ptnd, $\ldots$ elements found as generators.
+\medbreak
+%
+In some groups, elements of a specified order may be very difficult
+to find using the quasi--random search technique employed by {\tt fndelt}.
+For example, it is very difficult to find involutions in ${\rm PGL}_2(2^k)$
+if $k$ is fairly high (say 10 to 15).  The {\tt -m:}{\it trials\/} option
+may be used to terminate the command after {\it trials\/} random
+group elements have been generated, regardless of how many elements of
+the desired order have been found.  By default, {\it trials\/} is
+essentially infinite.
+\medbreak
+%
+%
+%
+\subsection{Normal closures:}The {\tt ncl}
+command may be used to compute normal closures of subgroups.  Specifically, 
+given a group $G$ and a subgroup $H$ of $G$, the command
+computes the normal closure $H^G$ of $H$ in $G$.  The command format is
+%
+\smallskip
+\centerline{{\tt ncl}\quad {\it options}\quad {\it permGroup}\quad
+                        {\it subgroup\/}\quad {\it normal closure}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -q}]}
+\smallskip
+The command sets {\it normalClosure\/}
+to the normal closure in {\it permGroup\/} of {\it subgroup}.  (Note that
+{\it subgroup\/} must be a subgroup of {\it permGroup\/}; this is not checked.)
+\medbreak
+At present, the strong generating set for the normal closure is
+constructed only by the random Schreier method.  Thus there is a
+(probably small) possibility that the strong generating set
+may be incorrect.  (This will
+be fixed eventually; if it occurs, the generators obtained will generate
+the normal closure, but not strongly.)
+%
+%
+%
+\subsection{Orbit structure:}The {\tt orblist} command performs various
+calculations relating to the orbit structure of a specified group, or to the 
+orbit structure of point stabilizers within the group.  The command format
+%
+\smallskip
+\centerline{{\tt orblist}\quad {\it options}\quad {\it permGroup}\quad
+            [\kern1pt$p_1,p_2,\ldots,p_k$\quad[{\it ptStabGroup\/}]\kern1pt]}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -len}]\enskip
+        [{\tt -lr}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -p:}{\it path\/}]}
+\vskip2pt
+\centerline{
+        [{\tt -ps:}{\it set\/}]\enskip
+        [{\tt -q}]\enskip
+        [{\tt -r}]\enskip
+        [{\tt -s:}{\it seed\/}]\enskip
+        [{\tt -wno:}{\it $k$}]\enskip
+        [{\tt -wo:}{\it $p_1,p_2,\ldots$}]\enskip
+        [{\tt -wp:}{\it partn\/}]\enskip
+        [{\tt -z}]}
+\smallskip
+In the absence of any options, and with only one non--option parameter,
+the command writes (to standard output)
+the orbits of the group {\it permGroup}.  For each orbit, the orbit
+representative, the orbit length, and the list of points in the orbit
+are written.  If the {\tt -r} option is given, the order in which the
+orbits are listed is randomized; the seed for the random number generator
+that is used may be specified by means of the {\tt -s:}{\it seed\/} option.
+(Note that the {\tt -r} option is ignored if the {\tt -len} or {\tt -lr} options are
+specified.)
+\medbreak
+If the {\tt -len} option is specified, only the orbit lengths are
+written.  If the {\tt -lr} option is given, only the
+orbit representatives and orbit lengths are given; the output consists of
+a list of pairs {\it rep\/}{\tt :}{\it len}, where {\it rep\/} is an
+orbit representative and {\it len\/} is the length of the corresponding
+orbit.
+\medbreak
+The {\tt -wp:}{\it partn} may be used save the orbit partition of the
+group as the partition {\it partn}.
+The {\tt -wo:}{\it $p_1,p_2,\ldots$} option may be used to save the
+union of the orbits of points $p_1,p_2,\ldots$ as a point set; the
+name of the point set is the string {\it set\/} given by 
+the {\tt -ps:}{\it set\/} option.
+Alternatively, the {\tt -wno:}{\it $k$} option causes the union of
+the first $k$ orbits to be saved as a point set, whose name again
+is specified by the {\tt -ps:}{\it set\/} option.
+\medbreak
+If a second non--option parameter $p_1,p_2,\ldots,p_k$ is specified, 
+all orbit calculations are carried out in the stabilizer in ${\it permGroup\/}$ 
+of the point sequence $p_1,p_2,\ldots,p_k$, rather than in {\it permGroup\/} 
+itself.  Note that this entails a base change for the group {\it permGroup}.
+The {\tt -z} option causes redundant strong generators for {\it permGroup}
+to be removed following this base change.
+Specifying a third non--option parameter {\it ptStabGroup\/} option causes 
+point stabilizer of $p_1,p_2,\ldots,p_k$ to be saved
+as the permutation group {\it ptStab}.
+%
+%
+\subsection{Point stabilizers:}The {\tt ptstab}
+command may be used to compute point stabilizers in permutation groups.  The
+command format is
+%
+\smallskip
+\centerline{{\tt ptstab}\quad {\it options}\quad {\it permGroup}\quad
+            $p_1,p_2,\ldots,p_k$\quad {\it ptStabGroup\/}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -i}]\enskip
+        [{\tt -mb:}$k$]\enskip
+        [{\tt -mw:}$w$]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -q}]\enskip
+        [{\tt -z}]}
+\smallskip
+The point stabilizer in the group {\it permGroup\/} of the list
+$p_1,p_2,\ldots,p_k$ is computed and saved as the permutation group
+{\it ptStabGroup}.  Note that, in the list $p_1,p_2,\ldots,p_k$, individual
+points are separated by commas but {\it not\/} by blanks.
+The {\tt -z} option causes certain redundant strong generators for {\it ptStabGroup}
+to be removed before the group is saved.
+%
+%
+%
+%
+\subsection{Random point sets and partitions:}The {\tt randobj} 
+command may be used to construct a random $k$--element subset of 
+$\{1,\ldots,n\}$ for specified $n$ and $k$, or to construct a partition
+of $\{1,\ldots,n\}$ that is random subject to the cells having specified
+sizes.  The command format
+%
+\smallskip
+\centerline{{\tt randobj}\quad {\it options}\quad {\it type}\quad $n$\quad 
+            $k_1,k_2,\ldots,k_p$\quad {\it newObject}}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -e}]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -s:}{\it seed\/}]}
+\smallskip
+Here {\it type\/} must be either {\tt set} or {\tt partition}; it indicates
+whether a point set or partition is to be constructed.  For a point set,
+$p$ must be 1; a random $k_1$--element subset of $\{1,\ldots,n\}$ is constructed.
+For a partition, in the absence of the {\tt -e} option, 
+$k_1 + k_2 + \ldots + k_p$ must equal $n$; a partition of $\{1,\ldots,n\}$
+random subject to having cell sizes $k_1$,~$k_2$,...,~$k_p$ is constructed.
+However, if the {\tt -e} option is specified, then $p$ must equal 1, and
+a random partition having $k_1$ cells of equal size (as closely as possible)
+is constructed.  In any case, the point set or partition constructed is saved
+as the object {\it newObject}.
+\medbreak
+The {\tt -s:}{\it seed} option may be used to specify an initial seed for
+the random number generator that is used.
+%
+%
+\subsection{Weight distributions of codes:}The {\tt wtdist}
+command may be used to compute the weight distribution of a linear code.
+The program is highly optimized, both for binary and nonbinary codes.
+The command format is
+%
+\smallskip
+\centerline{{\tt wtdist}\quad {\it options}\quad {\it code}\quad
+            [{\it saveWeight\/}\quad {\it matrix\/}]}
+\smallskip
+where {\it options\/} denotes
+\smallskip
+\centerline{
+        [{\tt -a}]\enskip
+        [{\tt -b}]\enskip
+        [{\tt -g}]\enskip
+        [{\tt -n:}{\it name\/}]\enskip
+        [{\tt -p:}{\it path\/}]\enskip
+        [{\tt -pf:}$p$]\enskip
+        [{\tt -s:}$m$]\enskip
+        [{\tt -q}]\enskip
+        [{\tt -1}]}
+\smallskip
+The weight distribution of the code {\it code\/} is computed and written to
+the standard output.  If {\it saveWeight\/} (which should be a positive
+integer) and {\it matrix\/} are specified, the codewords of weight
+{\it saveWeight\/} are saved; specifically, a new matrix {\it matrix\/} is
+created whose rows are the vectors of weight {\it saveWeight\/} in the
+code {\it code}.  However, for nonbinary fields, only one codeword from
+each one-dimensional subspace is saved.  (Thus, for a code over 
+${\rm GF}(q)$ with $k$ vectors of weight {\it saveWeight}, {\it matrix\/} will
+have $k/(q-1)$ rows.)  Also, if the {\tt -1} option is specified, only one
+codeword of weight {\it saveWeight\/} will be saved, and thus {\it matrix\/}
+will have only one row.  In the event that the code has no codewords of the
+specified weight, the matrix is not created.
+\medbreak
+Four options, {\tt -b}, {\tt -g}, {\tt pf:}$p$, and {\tt s:}$m$, are never
+necessary but may be used to optimize performance.  The {\tt -s:}$m$
+option may be coded if codewords of weight {\it saveWeight\/} are to be
+saved, and if the number of such codewords is known in advance; the value
+of $m$ should be the number of such codewords (excluding scalar multiples,
+for nonbinary fields).  Use of this option saves some time and space.  (If
+an incorrect value of $m$ is specified, the savings in time and space may
+be lost, but the results will still be correct.)
+\medbreak
+To understand the other optimization options,
+it is necessary to understand that the {\tt wtdist} command invokes one of 
+two programs: a considerably optimized program for codes over any field, or 
+an even more highly optimized one for binary codes meeting certain 
+constraints on length and dimension.  The binary code program requires a fixed
+amount of time (several seconds or more on a micro or workstation) to 
+construct a certain table of size 65536, even if the 
+dimension of the code is small.  Accordingly, the {\tt wtdist} command
+invokes the general code program for binary codes of low dimension; however,
+the criteria for choosing the cutoff point is relatively crude, and often
+a nonoptimal choice may be made.  The {\tt -g} option forces the general
+code program to be used, even if the binary one would be chosen by default.
+The {\tt -b} option forces the binary code program to be used, provided the
+code is binary, provided its length is at most 128, and provided its 
+dimension is at most 3.  (If any of these conditions fail, the binary
+program cannot be used.)  
+\medbreak
+The {\tt -pf:}$p$ option is applicable only if
+the general code program is employed.  The value of $p$, which is referred
+to as the {\it packing factor}, should be a positive integer such that
+$q^p\leq 65535$.  (Here $q$ is the field size.)  Internally, the program will pack
+$p$ coordinates of each codeword into a single 16--bit word.  Higher values
+of $p$ improve performance on codes of high dimension.  On the other hand,
+the size of the internal tables that must be allocated and initialized
+rise very rapidly as a function of $p$, and in particular, a value of 
+$p$ maximal subject to $q^p\leq 65535$ will be practical only with a 
+rather large memory, and will be optimal with respect to time 
+only for codes of quite high dimension, because of the large amount of time
+spent initializing the tables.  (The size in bytes of the largest single
+table used internally is roughly $q^p e k \lceil n/p\rceil$, where $n$ is
+the length, $k$ is the dimension, and $e$ is the exponent of the field.)
+The program will choose a packing factor by default, but at present the
+procedure for making this choice is crude.  In particular, if the program
+runs out of memory, a smaller packing pactor should be specified.
+%
+%
+\section{X.\quad THE UNIX DISTRIBUTION}
+%
+On Unix, the programs, documentation, and examples will be available
+by anonymous ftp from {\tt math.uic.edu}.  The 
+directory {\tt pub/leon/partn} should contain the following files,
+where {\it r} denotes the release number, e.g. {\tt 1.00}:
+\vskip1pt
+\smallskip
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+doc-\kern-1pt{\it r}.tar.Z
+examples-\kern-1pt{\it r}.tar.Z
+src-\kern-1pt{\it r}.tar.Z
+bin16-\kern-1pt{\it r}.sun4.tar.Z
+bin16-\kern-1pt{\it r}.sun3.tar.Z
+\vskip-2pt
+bin32-\kern-1pt{\it r}.sun4.tar.Z
+bin32-\kern-1pt{\it r}.sun3.tar.Z
+\vskip0pt}}
+\vskip-2pt
+(The last two files may be omitted to conserve disk space, but can be made
+available on request; contact the author at {\tt leon at turing.math.uic.edu}.)
+Users with a Sun/4 should obtain the files {\tt doc.tar.Z}, 
+{\tt examples.tar.Z}, and {\tt bin16.sun4.tar.Z}, which contain, respectively,
+the documentation, the examples, and 16-bit executables for the Sun/4.
+Users desiring the C language source code (of limited use, due to inadequate
+documentation) should obtain the file {\tt src.tar.Z}.  Note that source code
+is not required since binary executables for the programs are supplied.
+Users needing
+to compute with groups of degree greater that 65000 (approximate) should
+obtain the file {\tt bin32.sun4.tar.Z}, which contains 32-bit executables.
+Users with a Sun/3 merely substitute ``{\tt sun3}'' for ``{\tt sun4}'' in
+the preceding instructions.  Other users should obtain only the files
+{\tt doc.tar.Z}, {\tt examples.tar.Z}, and {\tt src.tar.Z}.  It will be
+necessary to compile the source; a make file is provided for this purpose
+(See Section~XI).
+\smallskip
+A directory, say {\tt partn}, should be created, and all the files should
+be downloaded or moved to this directory.  They should then be uncompressed
+and extracted by commands such as
+\smallskip
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+uncompress -v doc.tar.Z
+tar xvf doc.tar
+\vskip0pt}}
+\smallskip
+(Repeat the above for each of the files.)
+The result should be subdirectories of {\tt partn} as follows:
+\medbreak
+\hskip0.45truein\hbox to 0.85truein{\tt doc\hfil}{Documentation for the programs --
+           primarily this manual.}
+\vskip2pt
+\hskip0.45truein\hbox to 0.85truein{\tt examples\hfil}{The subdirectories of this
+           directory contain examples.  See Section~VIII.}
+\vskip2pt
+\hskip0.45truein\hbox to 0.85truein{\tt test\hfil}{Unix shell scripts to test
+          the partition backtrack programs, using some of the examples provided
+          in the {\tt examples} subdirectory.}
+\vskip2pt
+\hskip0.45truein\hbox to 0.85truein{\tt src\hfil}\vtop{\hsize=5.2truein\relax
+          Source code and a make file, 
+          to allow compilation of the programs on machines other than the
+          Sun/3 and Sun/4.}
+\vskip2pt
+\hskip0.45truein\hbox to 0.85truein{\tt bin16\hfil}{executable programs for the Sun/3 
+                       or Sun/4, using 16--bit integers.}
+\vskip2pt
+\hskip0.45truein\hbox to 0.85truein{\tt bin32\hfil}{executable programs for the Sun/3 
+                       or Sun/4, using 32--bit integers.}
+\smallskip
+For the Sun/3 or Sun/4, the appropriate directory {\tt partn/bin16} or 
+{\tt partn/bin32} should be added to the path, or the files from one of
+those directories should be copied to a directory on the path.  For other
+Unix machines, it will be necessary to recompile the source; see Section~XI.
+%
+\medbreak
+Once installation is complete, the programs may be tested using the 
+shell scripts in the subdirectory {\tt test}.  Specifically, the following
+shell scripts, written for the Bourne shell, are provided:
+\smallskip
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+test\_setstab
+test\_cent
+test\_inter
+test\_desauto
+test\_setimage
+test\_conj
+test\_desiso
+\vskip0pt}}
+Each of the above shell files may be run, without options or parameters.
+When {\tt test\_setstab} is run, the output is collected in a file named
+{\tt setstab.output}, as well as appearing on the screen.  This file 
+may be compared to the file {\tt setstab.correct}, supplied in the subdirectory
+{\tt tests}, which contains the correct output.  The files should match
+exactly.  The comparison may be performed, for example, with the command
+\smallskip
+\vskip2pt
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+diff setstab.output setstab.correct
+\vskip0pt}}
+The other shell files work in an analogous manner.
+\medbreak
+The tests above may take a number of hours, depending on the speed of the
+machine.  In addition, they require several megabytes of memory.  Each of
+the shell files accepts an option {\tt -s}, which runs a much less time--taking
+series of tests, requiring less memory.  When this option is used with
+{\tt test\_setstab}, the output in file {\tt setstab.output} should be
+compared to the file {\tt setstab-s.correct}, rather than to 
+{\tt setstab.correct}.  A similar remark applies to the other tests.
+\medbreak
+The programs described in this manual are also available, in binary form,
+for the IBM~PC and compatibles, under MS~DOS, and for the IBM~370
+family of machines, under CMS.  For details, please contact the author.
+%
+%
+\section{XI.\quad COMPILING THE SOURCE CODE}
+%
+As mentioned earlier, compiled versions of the programs described here are
+available for the IBM~PC (DOS), the Sun/3 and Sun/4 (Unix), and the
+IBM~370 (CMS).  For other systems, it will be necessary to compile the
+C source code.  The information in this section is intended for users
+intending to compile the source code.
+\medbreak
+To compile the C source code, a compiler that supports ANSI Standard C is
+required.
+With very minor exceptions, the source code conforms to the ANSI standard
+for C; it does, however, make use of a number of features not present in
+most pre--ANSI versions of C.  The code was written under the assumption
+that it would be compiled with optimization turned on, so it is important
+to enable optimization, as the programs tend to run quite slowly if
+compiled with optimization disabled.\footnote{${}^{\dag}$}{\elevenpoint However, some compilers
+fail to optimize the code correctly.  GNU~C~1.39 and~2.1 (Sun/3, Sun/4) and 
+Waterloo~C 3.2 (IBM~370) optimize it correctly; at present, 
+Borland~C++~3.0 and Microsoft~C~5.1 do not.  
+Microsoft~C~6.0/7.0 and Borland~C++~3.1 have not been
+tested.}  At present large sections of the source code
+are not commented or are commented incorrectly.  Accordingly, the source
+is provided primarily so that users may compile the programs on other
+machines, rather than modify them.  Eventually the author hopes to
+distribute adequately documented source code.
+\medbreak
+Prior to compiling the source, it is necessary to determine whether a
+special timing function needs to be supplied.  By default the programs
+use the C standard library function {\tt clock()} to measure execution
+times.  This is adequate on many systems.  However, on some systems (e.g., 
+Sun/3 and Sun/4 Unix), a problem arises because the {\tt clock()} function returns a 
+result with a resolution of one microsecond and thus ``wraps around'' in about
+36 minutes.  Unless the user is content with timing statistics correct modulo
+$2^{32}$ microseconds (about 71.58 minutes), an alternate timing function
+must be supplied in a file which should be named {\tt cputime.c}; 
+this function must return a value of type {\tt long}
+which represents the elapsed CPU time, and C macros 
+{\tt CPU\_TIME} and {\tt TICK} must be
+defined to specify the name of this special 
+function (e.g., {\tt cpuTime}) and the resolution
+of the function (in clock ticks per second), respectively.  
+In addition, a make file macro {\tt CPUTIME} must be defined to have
+the value {\tt cputime.o} (assuming object code files have suffix {\tt o}).
+These macros are discussed in more detail below.
+For the Sun/3 and Sun/4, source code for such a function 
+{\tt cpuTime()} is supplied in the file {\tt cputime.c}; perhaps this function
+will work on other Unix systems as well.  In the remainder of this section,
+it is assumed that such a function, if needed, has already been written.
+\medbreak
+A make file (named {\tt Makefile}) is provided with the source.  This make file
+is designed for the GNU~C compiler, version 2, on the Sun/3 and Sun/4, but with some
+other compilers and systems, only simple editting of the first few lines of the make file
+should be needed; the purpose of these lines is to define appropriate
+make file macros.  For some compilers, more extensive editting of the
+make file may be
+required.  Note that the make file assumes that all source code and include
+files (except system include files) are in the currect directory, and that
+all object and executable files are to be placed in this directory.
+\medbreak
+The make file provided with the source begins as follows:
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+COMPILE = gcc
+DEFINES = -DSUN\_UNIX\_GCC -DINT\_SIZE=32 -DCPU\_TIME=cpuTime -DTICK=1000 
+          -DLONG\_EXTERNAL\_NAMES -Dclock\_t=long 
+INCLUDES =
+COMPOPT = -c -O2 -Wall  
+LINKNAME = -o
+LINKOPT = -v
+OBJ = o
+CPUTIME = cputime.o
+BOUNDS =
+}}
+\medbreak
+The purpose of the make file macros defined here is as follows:
+\smallbreak
+{\advance\leftskip by 0.3in\noindent
+   {\tt COMPILE}:\quad  This macro specifies the command to invoke the C compiler;
+                   it may include path information.
+\smallbreak
+   {\tt DEFINES}:\quad  This make file macro specifies C macros to be defined
+                        for the compilation; these are discussed below.  
+\smallbreak
+   {\tt INCLUDES}:\quad  This macro is used to tell the compiler where
+                         to search for include files, if they are located
+                         other than in the standard location.  
+\smallbreak
+   {\tt COMPOPT}:\quad  This macro is used to specify compile--time options,
+                        other than those given by means of the 
+                        {\tt DEFINES} and {\tt INCLUDES} macros.  These
+                        options should include code optimization and
+                        compile--only (no linking) if these are not
+                        defaults.  For the IBM~PC, an option specifying the
+                        large memory model should be given. 
+\smallbreak
+   {\tt LINKNAME}:\quad  This macro is used to specify the linker option
+                        used to give the name of the executable file
+                        to be created.
+\smallbreak
+   {\tt LINKOPT}:\quad  This macro is used to specify linker options, other
+                        than that given by the {\tt LINKNAME} macro above.
+\smallbreak
+   {\tt OBJ}:\quad   This macro is used to specify the suffix (file type)
+                     for object files.  Normally this would be {\tt o}
+                     on Unix and {\tt obj} on MS~DOS.
+\smallbreak
+   {\tt CPUTIME}:\quad  Unless a special timing function is to be supplied
+                     (see discussion above), this value of this macro should
+                      be the null string.  If a special timing function is
+                      supplied, the value of the {\tt CPUTIME} macro should 
+                      be {\tt cputime.o}, assuming object files have suffix
+                      {\tt o}.
+\smallbreak
+   {\tt BOUNDS}:\quad  This macro is present for use on MS~DOS with Bounds Checker,
+                     a debugging product published by Nu-Mega Technologies
+                     and used heavily by the author in debugging the programs.
+                     Normally its value should be the null string.
+\medbreak}
+It remains to discuss the C language macros that must, or may, be defined
+by the make macro {\tt DEFINES}.  One of these C macros, {\tt INT\_SIZE}, always
+must be defined; the others are optional, or are required only in
+certain circumstances.  The C language macros are as follows:
+\smallbreak
+{\advance\leftskip by 0.3in\noindent
+    {\tt INT\_SIZE}:\quad  This macro is always required.  Its value must
+             be the number of bits in the C data type {\tt int}, usually
+             16 or 32.  (The programs have never been adapted to a system
+             in which the integer size is other than 16 or 32, although
+             it should not be difficult to do so.)
+             {\it Note:\/}\enskip This macro only specifies the size of the
+             C data type {\tt int}; it does {\it not\/} determine whether
+             the programs are compiled to use 16 or 32 bit integers.  
+\smallbreak
+   {\tt EXTRA\_LARGE}:\quad If this macro is defined, and {\tt INT\_SIZE}
+             above is 32, the programs will be compiled using 32--bit integers;
+             that is, points will be represented using the C data type
+             {\tt unsigned}.  Otherwise, if {\tt INT\_SIZE} is 32, the programs
+             will be compiled using 16--bit integers (with most compilers),
+             as points will be represented using the C data type
+             {\tt unsigned short}.  Note {\tt EXTRA\_LARGE} should not be
+             defined when {\tt INT\_SIZE} is 16.  Care must be taken, of
+             course, not to link object files compiled with {\tt EXTRA\_LARGE}
+             defined with those compiled without it defined, as the make file
+             cannot protect against this error.  (However, running the programs
+             with the {\tt -v} option will reveal this error.)
+         
+\smallbreak
+   {\tt LONG\_EXTERNAL\_NAMES}:\quad   This macro should (but need not) be defined
+             if the linker supports long external names (up to 31 characters).
+             If defined, its value is irrelevent.
+\smallbreak
+   {\tt CPU\_TIME}:\quad  This macro must be defined if a special timing function
+             is supplied, and its value must be the name of that function.  
+             If the standard C function {\tt clock()} is to be used, the
+             macro must not be defined (not even as the null string).  
+\smallbreak
+   {\tt NOFLOAT}:\quad  This macro probably should be defined on a system 
+              lacking floating point hardware support.  (If defined, its
+              value is irrelevant.)  Normally, the programs perform a 
+              small amount of floating point arithmetic in attempting to
+              produce a good $\bfgermR$--base; with software emulation of floating
+              point instructions, the cost of this use of floating point
+              arithmetic probably exceeds its benefit.  If the 
+              {\tt NOFLOAT} macro is defined, no floating point arithmetic
+              is used.  (In this case, it may be advantageous to add a
+              compiler option telling the compiler not to incorporate
+              floating--point support into the executable program.  For
+              example, under Borland C++, the {\tt -f-} option has this
+              effect.)
+\smallbreak
+   {\tt TICK}:\quad  This macro should be defined in two situations: (1)
+                If a special CPU time function is supplied, {\tt TICK}
+                should be defined to be the resolution (in clock ticks per
+                second) of that function, and (2) if the
+                {\tt NOFLOAT} macro is defined and if the compiler--supplied
+                definition of the standard C macro {\tt CLK\_TCK} is a
+                floating point constant (as occurs with Borland~C++), 
+                {\tt TICK} should be defined to be the nearest integer 
+                approximation to the value of {\tt CLK\_TCK}, e.g., 18 for
+                Borland~C++.
+\smallbreak
+   {\tt HUGE}:\quad This macro must be defined for the IBM PC (unless a
+               DOS extender is being used).  It simply causes a few pointers
+               to be declared as {\tt huge}.  Only one program, the
+               weight distribution program, uses huge pointers.
+\medbreak}
+In addition, the author recommends defining a symbol unique to the system
+and compiler, e.g., {\tt SUN\_UNIX\_GCC} above.  Then any code modifications
+unique to this system and compiler can be bracketed as follows:
+\medbreak
+\vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other
+\#ifdef SUN\_UNIX\_GCC
+   /* Code modifications for Sun Unix, GNU C compiler. */
+\#endif
+}}
+\medbreak
+Once the make file has been editted appropriately, all of the programs
+may be compiled at once by the command
+\smallskip
+\hskip0.45truein\relax {\tt make all}
+\smallskip
+or, alternatively, individual programs may be compiled by the commands
+\smallskip
+\hskip0.45truein\relax \hbox to1.5truein{\tt make setstab\hfil}for
+                    {\tt setstab}, {\tt setimage}, {\tt parstab}, and {\tt parimage},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make cent\hfil}for 
+                    {\tt cent}, {\tt conj}, {\tt gcent},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make inter\hfil}for
+                    {\tt inter},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make desauto\hfil}for
+                    {\tt desauto}, {\tt desiso}, {\tt matauto}, {\tt matiso},
+                    {\tt codeauto}, and {\tt codeiso},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make cjrndper\hfil}for
+                    {\tt cjrndper} and {\tt cjper},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make commut\hfil}for
+                    {\tt commut} and {\tt ncl},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make compgrp\hfil}for
+                    {\tt compgrp},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make fndelt\hfil}for
+                    {\tt fndelt},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make generate\hfil}for
+                    {\tt generate},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make orblist\hfil}for
+                    {\tt orblist}, {\tt chbase}, and {\tt ptstab},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make randobj\hfil}for
+                    {\tt randobj},
+\vskip1pt\noindent
+\hskip0.45truein\relax \hbox to1.5truein{\tt make wtdist\hfil}for
+                    {\tt wtdist} and {\tt cwtdist}.
+\smallskip
+Ideally, there should be no errors in compilation.  However, with some
+compilers (e.g., Zortech~C++), it is necessary to define {\tt const} to
+be a null string in order to avoid compile--time errors.  Typically
+compilers will generate a number of warnings; a number of them involve
+implicit conversion between pointers to constant and non--constant types.
+\medbreak
+The above commands place the executable programs in the current directory
+(that containing the source).   The final step is to move the executables
+to the directory in which they should reside, preferably one on the current
+path.  A shell file named {\tt install} is provided for this purpose.
+The command
+\vskip2pt
+\hskip0.45in\relax {\tt sh install\ }{\it bindir}
+\vskip2pt
+should be issued, where {\it bindir\/} is the name of the directory in
+which the binary files should be placed, e.g., {\tt ../bin}.  Note that
+this command also copies certain shell files from the source directory
+to the binary directory, renaming them by dropping the {\tt sh} suffix
+in the process.
+%
+\bigbreak
+\vskip15pt
+\centerline{\sectionheaderfont REFERENCES}
+\nobreak\medskip\nobreak
+Leon, J.\enskip (1980a),\enskip
+On an algorithm for finding a base and a strong generating set
+for a group given by generating permutations,\enskip
+{\it Math.\ Comp.}
+{\bf 35},
+941--974.
+\medbreak
+Leon, J.\enskip(1991),\enskip
+Permutation group algorithms based on partitions, I: Theory and algorithms,\enskip
+{\it J. Symbolic Comp.}
+{\bf 12},
+533--583.
+\medbreak
+Cannon, J.\enskip (1984),\enskip
+{\it A language for group theory,}\enskip
+Dept.\ of Pure Mathematics, University of Sydney, Australia.
+\medbreak
+Sims, C.~C.\enskip (1971),\enskip
+Computation with permutation groups,\enskip
+In (Petrick, S.~R., ed.),\enskip
+{\it Proc.\ of the Second Symposium on Symbolic and
+Algebraic Manipulation,}\enskip
+New York: Assoc.\ for Computing Mach.
+\bye
diff --git a/src/leon/doc/readme b/src/leon/doc/readme
new file mode 100644
index 0000000..401d26b
--- /dev/null
+++ b/src/leon/doc/readme
@@ -0,0 +1,3 @@
+The file manual.tex contains TeX source for the manual describing the
+partition backtrack programs.  The file manual.dvi contains a dvi file
+for the manual.
diff --git a/src/leon/install-sh b/src/leon/install-sh
new file mode 100755
index 0000000..6ebe46d
--- /dev/null
+++ b/src/leon/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-12-17.09
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+	shift
+	shift
+	continue;;
+
+    -T) no_target_directory=true
+	shift
+	continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	# When -t is used, the destination is already specified.
+	test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    shift
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dstdir/$dstfile"; then
+	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	       || {
+		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 (exit 1); exit 1
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	 }
+    }
+  fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/src/leon/missing b/src/leon/missing
new file mode 100644
index 0000000..e69de29
diff --git a/src/leon/src/Makefile b/src/leon/src/Makefile
new file mode 100755
index 0000000..fd2849d
--- /dev/null
+++ b/src/leon/src/Makefile
@@ -0,0 +1,192 @@
+# Make file for partition backtrack programs, Sun/3 or Sun/4 Unix.
+#
+COMPILE = gcc
+DEFINES = -DINT_SIZE=32
+COMPOPT = -c -O2
+INCLUDES =
+LINKOPT = -v
+LINKNAME = -o
+OBJ = o
+#CPUTIME = cputime.o
+BOUNDS =
+#
+# Special CPU time function for Unix, Sun/3 or Sun/4
+#cputime.o : cputime.c
+#	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cputime.c
+#
+#
+#
+all:   setstab cent inter desauto generate commut cjrndper orblist fndelt compgrp orbdes randobj wtdist
+#
+# Invoke linker -- setstab
+setstab:  setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OB [...]
+	$(COMPILE) $(LINKNAME) setstab $(LINKOPT) setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$ [...]
+#
+# Invoke linker -- cent
+cent:  cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) cent $(LINKOPT) cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) toke [...]
+#
+# Invoke linker -- inter
+inter:  inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) inter $(LINKOPT) inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTI [...]
+#
+# Invoke linker -- desauto
+desauto:  desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) rea [...]
+	$(COMPILE) $(LINKNAME) desauto $(LINKOPT) desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ)  [...]
+#
+# Invoke linker -- generate
+generate:  generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME)
+	$(COMPILE) $(LINKNAME) generate $(LINKOPT) generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- commut
+commut:  commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccommut.$(OBJ)  chbase.$(OBJ)  copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ)  oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ)  randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ)  token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) commut $(LINKOPT) commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) ccommut.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- cjrndper
+cjrndper: cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) cjrndper $(LINKOPT) cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orblist
+orblist: orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orblist $(LINKOPT) orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- fndelt
+fndelt:  fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) fndelt $(LINKOPT) fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- compgrp
+compgrp:  compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) compgrp $(LINKOPT) compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- orbdes
+orbdes:  orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) orbdes $(LINKOPT) orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS)
+#
+# Invoke linker -- randobj
+randobj:  randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) randobj $(LINKOPT) randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+# Invoke linker -- wtdist
+wtdist:  wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ)
+	$(COMPILE) $(LINKNAME) wtdist $(LINKOPT) wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS)
+#
+#
+# Invoke compiler
+addsgen.$(OBJ) : group.h extname.h essentia.h permgrp.h permut.h cstborb.h addsgen.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) addsgen.c 
+bitmanp.$(OBJ) : group.h extname.h bitmanp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) bitmanp.c 
+ccent.$(OBJ) : group.h extname.h compcrep.h compsg.h cparstab.h errmesg.h inform.h new.h orbrefn.h permut.h randgrp.h storage.h ccent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ccent.c 
+ccommut.$(OBJ) : group.h extname.h addsgen.h copy.h chbase.h new.h permgrp.h permut.h storage.h ccommut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ccommut.c 
+cdesauto.$(OBJ) : group.h extname.h code.h compcrep.h compsg.h errmesg.h matrix.h storage.h cdesauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cdesauto.c 
+cent.$(OBJ) : group.h extname.h groupio.h ccent.h errmesg.h permgrp.h readgrp.h readper.h storage.h token.h util.h cent.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cent.c 
+chbase.$(OBJ) : group.h extname.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h permgrp.h permut.h randgrp.h storage.h repinimg.h settoinv.h chbase.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) chbase.c 
+cinter.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cinter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cinter.c 
+cjrndper.$(OBJ) : group.h extname.h groupio.h code.h copy.h errmesg.h matrix.h new.h permut.h readdes.h randgrp.h readgrp.h readpar.h readper.h readpts.h storage.h token.h util.h cjrndper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cjrndper.c 
+cmatauto.$(OBJ) : group.h extname.h code.h compcrep.h compsg.h errmesg.h matrix.h storage.h cmatauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cmatauto.c 
+code.$(OBJ) : group.h extname.h errmesg.h storage.h code.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) code.c 
+commut.$(OBJ) : group.h extname.h groupio.h ccommut.h errmesg.h factor.h permgrp.h readgrp.h readper.h storage.h token.h util.h commut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) commut.c 
+compcrep.$(OBJ) : group.h extname.h cputime.h chbase.h cstrbas.h errmesg.h inform.h new.h optsvec.h orbit.h orbrefn.h partn.h permgrp.h permut.h rprique.h storage.h compcrep.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compcrep.c 
+compgrp.$(OBJ) : group.h extname.h groupio.h errmesg.h permgrp.h permut.h readgrp.h util.h compgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compgrp.c 
+compsg.$(OBJ) : group.h extname.h cputime.h addsgen.h chbase.h copy.h cstrbas.h errmesg.h inform.h new.h optsvec.h orbit.h orbrefn.h partn.h permgrp.h permut.h ptstbref.h rprique.h storage.h compsg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compsg.c 
+copy.$(OBJ) : group.h extname.h essentia.h storage.h copy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) copy.c 
+cparstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cparstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cparstab.c 
+csetstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h csetstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) csetstab.c 
+cstborb.$(OBJ) : group.h extname.h errmesg.h essentia.h factor.h storage.h cstborb.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cstborb.c 
+cstrbas.$(OBJ) : group.h extname.h chbase.h cstborb.h inform.h new.h orbrefn.h permgrp.h ptstbref.h optsvec.h storage.h cstrbas.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cstrbas.c 
+cuprstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cuprstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cuprstab.c 
+desauto.$(OBJ) : group.h extname.h groupio.h cdesauto.h errmesg.h permgrp.h readdes.h readgrp.h readper.h storage.h token.h util.h desauto.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) desauto.c 
+errmesg.$(OBJ) : group.h extname.h errmesg.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) errmesg.c 
+essentia.$(OBJ) : group.h extname.h essentia.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) essentia.c 
+factor.$(OBJ) : group.h extname.h errmesg.h factor.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) factor.c 
+field.$(OBJ) : group.h extname.h errmesg.h new.h storage.h field.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) field.c 
+fndelt.$(OBJ) : group.h extname.h groupio.h errmesg.h new.h oldcopy.h permut.h readgrp.h readper.h randgrp.h util.h fndelt.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) fndelt.c 
+generate.$(OBJ) : group.h extname.h groupio.h enum.h storage.h cputime.h errmesg.h new.h readgrp.h randschr.h stcs.h util.h generate.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) generate.c 
+inform.$(OBJ) : group.h extname.h groupio.h cputime.h readgrp.h inform.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) inform.c 
+inter.$(OBJ) : group.h extname.h groupio.h cinter.h errmesg.h permgrp.h readgrp.h readper.h token.h util.h inter.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) inter.c 
+matrix.$(OBJ) : group.h extname.h errmesg.h storage.h matrix.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) matrix.c 
+new.$(OBJ) : group.h extname.h errmesg.h partn.h storage.h new.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) new.c 
+oldcopy.$(OBJ) : group.h extname.h storage.h oldcopy.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) oldcopy.c 
+optsvec.$(OBJ) : group.h extname.h cstborb.h essentia.h new.h permut.h permgrp.h storage.h optsvec.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) optsvec.c 
+orbdes.$(OBJ) : group.h extname.h groupio.h chbase.h errmesg.h new.h oldcopy.h permut.h readdes.h readgrp.h storage.h util.h orbdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbdes.c 
+orbit.$(OBJ) : group.h extname.h cstborb.h orbit.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbit.c 
+orblist.$(OBJ) : group.h extname.h groupio.h addsgen.h chbase.h cstborb.h errmesg.h factor.h new.h randgrp.h readgrp.h readpar.h readpts.h storage.h util.h orblist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orblist.c 
+orbrefn.$(OBJ) : group.h extname.h errmesg.h partn.h storage.h orbrefn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbrefn.c 
+partn.$(OBJ) : group.h extname.h storage.h permgrp.h partn.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) partn.c 
+permgrp.$(OBJ) : group.h extname.h copy.h errmesg.h essentia.h new.h permut.h storage.h permgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) permgrp.c 
+permut.$(OBJ) : group.h extname.h factor.h errmesg.h new.h storage.h repimg.h repinimg.h settoinv.h enum.h permut.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) permut.c 
+primes.$(OBJ) : group.h extname.h primes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) primes.c 
+ptstbref.$(OBJ) : group.h extname.h partn.h cstrbas.h errmesg.h ptstbref.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ptstbref.c 
+randgrp.$(OBJ) : group.h extname.h new.h permut.h randgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randgrp.c 
+randobj.$(OBJ) : group.h extname.h groupio.h errmesg.h randgrp.h readpar.h readpts.h storage.h token.h util.h randobj.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randobj.c 
+randschr.$(OBJ) : group.h extname.h groupio.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h oldcopy.h permgrp.h permut.h randgrp.h storage.h token.h randschr.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randschr.c 
+readdes.$(OBJ) : group.h extname.h groupio.h code.h errmesg.h new.h token.h readdes.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readdes.c 
+readgrp.$(OBJ) : group.h extname.h groupio.h chbase.h cstborb.h errmesg.h essentia.h factor.h permut.h permgrp.h randschr.h storage.h token.h readgrp.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readgrp.c 
+readpar.$(OBJ) : group.h extname.h groupio.h storage.h token.h errmesg.h readpar.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readpar.c 
+readper.$(OBJ) : group.h extname.h groupio.h errmesg.h essentia.h readgrp.h storage.h token.h readper.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readper.c 
+readpts.$(OBJ) : group.h extname.h groupio.h storage.h token.h errmesg.h readpts.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readpts.c 
+relator.$(OBJ) : group.h extname.h enum.h errmesg.h new.h permut.h stcs.h storage.h relator.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) relator.c 
+rprique.$(OBJ) : group.h extname.h storage.h rprique.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) rprique.c 
+setstab.$(OBJ) : group.h extname.h groupio.h cparstab.h csetstab.h cuprstab.h errmesg.h permgrp.h readgrp.h readpar.h readper.h readpts.h token.h util.h setstab.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) setstab.c 
+stcs.$(OBJ) : group.h extname.h groupio.h enum.h repimg.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h oldcopy.h permgrp.h permut.h randschr.h relator.h storage.h token.h stcs.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) stcs.c 
+storage.$(OBJ) : group.h extname.h errmesg.h storage.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) storage.c 
+token.$(OBJ) : group.h extname.h groupio.h errmesg.h token.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) token.c 
+util.$(OBJ) : group.h extname.h util.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) util.c 
+wtdist.$(OBJ) : group.h extname.h groupio.h errmesg.h field.h readdes.h storage.h token.h util.h wt.h swt.h wtdist.c
+	$(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) wtdist.c 
diff --git a/src/leon/src/addsgen.c b/src/leon/src/addsgen.c
new file mode 100644
index 0000000..4c889bf
--- /dev/null
+++ b/src/leon/src/addsgen.c
@@ -0,0 +1,59 @@
+/* File addsgen.c.  Contains function addStrongGenerator, which may be used
+   to adjoin a new strong generator to a permutation group. */
+
+#include <stddef.h>
+
+#include "group.h"
+
+#include "essentia.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "cstborb.h"
+
+CHECK( addsge)
+
+/*-------------------------- addStrongGenerator ---------------------------*/
+
+/* This function may be used to adjoin a new strong generator to a
+   permutation group.  The new strong generator must move a base point
+   (This is not checked.), and it should extend the basic orbit at its level (If
+   not, no error occurs, but the new generator is always marked as essential
+   at its level.).  The inverse image of the new generator, if absent, will be
+   appended.  Schreier vectors are reconstructed as necessary. */
+
+
+
+void addStrongGenerator(
+   PermGroup *G,              /* Group to which strong gen is adjoined. */
+   Permutation *newGen,       /* The new strong generator. It must move
+                                 a base point (not checked). */
+   BOOLEAN essentialAtOne)    /* Should the new generator be marked as essential
+                                 at level 1. */
+{
+   Unsigned i;
+   /* Append inverse image of new strong generator, if absent. */
+   if ( !newGen->invImage )
+      adjoinInvImage( newGen);
+
+   /* Find level of new strong generator, and mark it essential at this
+      level. */
+   newGen->level = levelIn( G, newGen);
+   MAKE_NOT_ESSENTIAL_ALL( newGen);
+   MAKE_ESSENTIAL_AT_LEVEL( newGen, newGen->level);
+
+   /* Add the generator. */
+   if ( G->generator )
+      G->generator->last = newGen;
+   newGen->last = NULL;
+   newGen->next = G->generator;
+   G->generator = newGen;
+
+   /* Rebuild the Schreier vectors and basic orbits. */
+   constructBasicOrbit( G, newGen->level, "KnownEssential");
+   for ( i = newGen->level - 1 ; i >= (essentialAtOne ? 1 : 2) ; --i ) {
+      MAKE_ESSENTIAL_AT_LEVEL(newGen,i);
+      if ( !fixesBasicOrbit( G, i, newGen) )
+         constructBasicOrbit( G, i, "FindEssential");
+   }
+}
+
diff --git a/src/leon/src/addsgen.h b/src/leon/src/addsgen.h
new file mode 100644
index 0000000..cf231f6
--- /dev/null
+++ b/src/leon/src/addsgen.h
@@ -0,0 +1,12 @@
+#ifndef ADDSGEN
+#define ADDSGEN
+
+extern void addStrongGenerator(
+   PermGroup *G,              /* Group to which strong gen is adjoined. */
+   Permutation *newGen,       /* The new strong generator. It must move
+                                 a base point (not checked). */
+   BOOLEAN essentialAtOne)    /* Should the new generator be marked as essential
+                                 at level 1. */
+;
+
+#endif
diff --git a/src/leon/src/bitmanp.c b/src/leon/src/bitmanp.c
new file mode 100644
index 0000000..2be3843
--- /dev/null
+++ b/src/leon/src/bitmanp.c
@@ -0,0 +1,26 @@
+/* File bitmanp.c.  Declares two unsigned long arrays useful for bit
+   manipulation, as follows:
+
+      bitSetAt:     For i = 0,1,...,31, bitSetAt[i] has 1 in bit i and 0
+                    elsewhere.
+      bitSetBelow:  For i = 0,1,...,32, bitSetBelow[i] has 1 in bits
+                    0,1,...,i-1 and 0 elsewhere. */
+
+#include "group.h"
+
+CHECK( bitman)
+
+unsigned long bitSetAt[32] =
+     {1, 2, 4, 8, 16, 32, 64, 128,
+      256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
+      65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
+      16777216, 33554432, 67108864, 134217728,
+      268435456, 536870912, 1073741824, 0x80000000};
+
+unsigned long bitSetBelow[33] =
+      {0, 1, 3, 7, 15, 31, 63, 127,
+      255, 511, 1023, 2047, 4095, 8191, 16383, 32767,
+      65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607,
+      16777215, 33554431, 67108863, 134217727,
+      268435455, 536870911, 1073741823, 2147483647, 0xffffffff};
+
diff --git a/src/leon/src/bitmanp.h b/src/leon/src/bitmanp.h
new file mode 100644
index 0000000..bd3b072
--- /dev/null
+++ b/src/leon/src/bitmanp.h
@@ -0,0 +1,4 @@
+#ifndef BITMANP
+#define BITMANP
+
+#endif
diff --git a/src/leon/src/ccent.c b/src/leon/src/ccent.c
new file mode 100644
index 0000000..7e8957a
--- /dev/null
+++ b/src/leon/src/ccent.c
@@ -0,0 +1,1066 @@
+/* File ccent.c.  Contains functions centralizer and conjugatingElement, that
+   may be used to compute centralizer and conjugacy of elements in permutation
+   groups.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "group.h"
+
+#include "compcrep.h"
+#include "compsg.h"
+#include "cparstab.h"
+#include "errmesg.h"
+#include "inform.h"
+#include "new.h"
+#include "orbrefn.h"
+#include "permut.h"
+#include "randgrp.h"
+#include "storage.h"
+
+CHECK( ccent)
+
+extern GroupOptions options;
+
+/* Forward declarations of functions. */
+static RefinementMapping centRefine;
+static ReducChkFn isCentReducible;
+static void initializeCentRefine( Permutation *e);
+static Partition *cycleLengthPartn(
+   const Permutation *const e,
+   UnsignedS *const cycleLen,
+   UnsignedS *const cycleStructure);
+static Partition *multipleCycleLengthPartn(
+   const Permutation *const ex[]);
+
+
+/* The following functions are used to check the centralizer or conjugacy
+   property.  Pointers to them are passed to computeSubgroup or 
+   computeCosetRep. */
+
+static const Permutation *ee, *ff;
+static const PermGroup *EE;
+static BOOLEAN longCycleFlag;
+static UnsignedS *cycleLen, *cycleStructure;
+
+static BOOLEAN centralizesE(
+   const Permutation *const s)
+{
+   return checkConjugacy( ee, ee, s);
+}
+
+static BOOLEAN conjugatesEToF(
+   const Permutation *const s)
+{
+   return checkConjugacy( ee, ff, s);
+}
+
+static BOOLEAN centralizesGroupE(
+   const Permutation *const s)
+{
+   Permutation *gen;
+   for ( gen = EE->generator ; gen ; gen = gen->next )
+      if ( !checkConjugacy( gen, gen, s) )
+         return FALSE;
+   return TRUE;
+}
+
+   
+extern UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack);
+
+
+static UnsignedS nextBasePointEltCent(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack)
+{
+   const Unsigned    degree = UpsilonStack->degree;
+   const UnsignedS   *const cellNumber = UpsilonStack->cellNumber,
+                     *const cellSize = UpsilonStack->cellSize;
+   Unsigned alpha, pt, cSize, shortPriority;
+   unsigned long priority, minPriority;
+
+   alpha = 0;
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      if ( (cSize = cellSize[cellNumber[pt]]) > 1 ) {
+         if ( longCycleFlag )
+            priority = 2000000000ul - (unsigned long) MIN(cycleLen[pt],1000) << 20 
+                       + cSize;
+         else
+            if ( cycleLen[pt] == 1 ) 
+               priority = cSize;
+            else {
+               shortPriority = 2;
+               cSize >>= 1;
+               while ( (cSize >>= 2) > 0 ) 
+                  shortPriority <<= 1;
+               shortPriority /= (cycleLen[pt] - 1);
+               priority = (unsigned long) shortPriority + 1;
+            }
+         if ( alpha == 0 || priority < minPriority ) {
+            alpha = pt;
+            minPriority = priority;
+         }
+      }
+   return alpha;
+}                                                   
+
+
+
+/*-------------------------- centralizer ----------------------------------*/
+
+/* Function centralizer.  Returns a new permutation group representing the
+   centralizer in a permutation group G of an element e. The algorithm is 
+   based on Figure 9 in the paper "Permutation group algorithms based on 
+   partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *centralizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Permutation *const e,    /* The point set to be stabilized. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   const BOOLEAN noPartn,         /* If true, suppresses use of ordered 
+                                     partition based on cycle size. */
+   const BOOLEAN longCycleOption, /* Always choose next base point in longest
+                                     cycle; however, at present, all cycles
+                                     of length 5 or greater are treated as
+                                     having the same length. */
+   const BOOLEAN stdRBaseOption)  /* Use std base selection algorithm, ignoring
+                                     cycle lengths. */
+{
+   RefinementFamily OOO_G, CCC_e, SSS_eCycle;
+   RefinementFamily  *refnFamList[4];
+   ReducChkFn  *reducChkList[4];
+   SpecialRefinementDescriptor *specialRefinement[4];
+   ExtraDomain *extra[1];
+   Partition *eCyclePartn = NULL;
+   Unsigned refnCount = 0;
+   PermGroup *G_return;
+
+   /* Orbit refinement (unless G is symmetric). */
+   if ( ! IS_SYMMETRIC(G) ) {
+      OOO_G.refine = orbRefine;
+      OOO_G.familyParm[0].ptrParm = G;
+      refnFamList[refnCount] = &OOO_G;
+      reducChkList[refnCount] = isOrbReducible;
+      specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) );
+      specialRefinement[refnCount]->refnType = 'O';
+      specialRefinement[refnCount]->leftGroup = G;
+      specialRefinement[refnCount]->rightGroup = G;
+      initializeOrbRefine( G);
+      ++refnCount;
+   }
+
+   /* Centralizer refinement. */
+   CCC_e.refine = centRefine;
+   CCC_e.familyParm[0].ptrParm = e;
+   refnFamList[refnCount] = &CCC_e;
+   reducChkList[refnCount] = isCentReducible;
+   specialRefinement[refnCount] = NULL;
+   initializeCentRefine( e);
+   ee = e;
+   ++refnCount;
+
+   /* Cycle length partition refinement. */
+   cycleLen = allocIntArrayDegree();
+   cycleStructure = allocIntArrayDegree();
+   eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure);
+   
+   if ( !noPartn && eCyclePartn ) {
+      SSS_eCycle.refine = partnStabRefine;
+      SSS_eCycle.familyParm[0].ptrParm = (void *) eCyclePartn;
+      refnFamList[refnCount] = &SSS_eCycle;
+      reducChkList[refnCount] = isPartnStabReducible;
+      specialRefinement[refnCount] = NULL;
+      initializePartnStabRefn();
+      ++refnCount;
+   }
+
+   /* Terminators. */
+   refnFamList[refnCount] = NULL;
+   reducChkList[refnCount] = NULL;
+   specialRefinement[refnCount] = NULL;
+
+   extra[0] = NULL;
+
+   chooseNextBasePoint = ( stdRBaseOption ) ? NULL : nextBasePointEltCent;
+   longCycleFlag = longCycleOption;
+
+   G_return = computeSubgroup( G, centralizesE, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+   if ( ! IS_SYMMETRIC(G) ) {
+      if ( !noPartn && eCyclePartn )
+         free(specialRefinement[refnCount - 3]);
+      else
+         free(specialRefinement[refnCount - 2]);
+   }
+   freePartition( eCyclePartn ); // will this break anything?
+   return G_return;
+}
+#undef familyParm
+
+
+/*-------------------------- conjugatingElement ---------------------------*/
+
+/* Function conjugatingElement.  Returns a permutation in a given group G
+   mapping a given permutation e (not necessarily in G) to another given
+   permutation f, or returns NULL if e and f are not conjugate in G.  The 
+   algorithm is based on Figure 9 in the paper "Permutation group algorithms 
+   based on partitions" by the author. */
+
+Permutation *conjugatingElement(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Permutation *const e,    /* One of the elements. */
+   const Permutation *const f,    /* The other element. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     centralizer in G of e.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R,          /* A (possibly trivial) known subgroup of the
+                                     centralizer in G of f.  (A null pointer
+                                     designates a trivial group.) */
+   const BOOLEAN noPartn,         /* If true, suppresses use of ordered 
+                                     partition based on cycle size. */
+   const BOOLEAN longCycleOption, /* Always choose next base point in longest
+                                     cycle; however, at present, all cycles
+                                     of length 5 or greater are treated as
+                                     having the same length. */
+   const BOOLEAN stdRBaseOption)  /* Use std base selection algorithm, ignoring
+                                     cycle lengths. */
+{
+   RefinementFamily OOO_G, CCC_ef, SSS_efCycle;
+   RefinementFamily  *refnFamList[4];
+   ReducChkFn  *reducChkList[4];
+   SpecialRefinementDescriptor *specialRefinement[4];
+   ExtraDomain *extra[1];
+   Partition *eCyclePartn = NULL, *fCyclePartn = NULL;
+   Unsigned refnCount = 0, i;
+   UnsignedS *cycleLen1, *cycleStructure1;
+   Permutation *y;
+
+   /* Handle symmetric group using trivial algorithm.  Note this does not
+      necessarily produce the lexicographically first conjugating 
+      permutation. */
+   if ( IS_SYMMETRIC(G) ) {
+      cycleLen = allocIntArrayDegree();
+      cycleStructure = allocIntArrayDegree();
+      cycleLen1 = allocIntArrayDegree();
+      cycleStructure1 = allocIntArrayDegree();
+      eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure);
+      fCyclePartn = cycleLengthPartn( f, cycleLen1, cycleStructure1);
+      y = newUndefinedPerm( G->degree);
+      for ( i = 1 ; i <= G->degree && y ; ++i ) 
+         if ( cycleLen[cycleStructure[i]] == cycleLen1[cycleStructure1[i]] )
+            y->image[cycleStructure[i]] = cycleStructure1[i];
+         else
+            y = NULL;
+      freeIntArrayDegree( cycleLen);
+      freeIntArrayDegree( cycleStructure);
+      freeIntArrayDegree( cycleLen1);
+      freeIntArrayDegree( cycleStructure1);
+      if ( eCyclePartn )
+         deletePartition( eCyclePartn);
+      if ( fCyclePartn )
+         deletePartition( fCyclePartn);
+      if ( y ) 
+         adjoinInvImage( y);
+      if ( options.inform )
+         informCosetRep( y);
+      return y;
+   }
+      
+   /* Orbit refinement. */
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm_L[0].ptrParm = G;
+   OOO_G.familyParm_R[0].ptrParm = G;
+   refnFamList[refnCount] = &OOO_G;
+   reducChkList[refnCount] = isOrbReducible;
+   specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[refnCount]->refnType = 'O';
+   specialRefinement[refnCount]->leftGroup = G;
+   specialRefinement[refnCount]->rightGroup = G;
+   initializeOrbRefine( G);
+   ++refnCount;
+
+   /* Centralizer refinement. */
+   CCC_ef.refine = centRefine;
+   CCC_ef.familyParm_L[0].ptrParm = e;
+   CCC_ef.familyParm_R[0].ptrParm = f;
+   refnFamList[refnCount] = &CCC_ef;
+   reducChkList[refnCount] = isCentReducible;
+   specialRefinement[refnCount] = NULL;
+   initializeCentRefine( e);
+   ee = e;
+   ff = f;
+   ++refnCount;
+
+   /* Cycle length partition refinement. */
+   cycleLen = allocIntArrayDegree();
+   cycleStructure = allocIntArrayDegree();
+   cycleLen1 = allocIntArrayDegree();
+   cycleStructure1 = allocIntArrayDegree();
+   eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure);
+   fCyclePartn = cycleLengthPartn( f, cycleLen1, cycleStructure1);
+
+   /* If cycle structure is not the same, elements are not conjugate, so
+      return immediately. */
+   for ( i = 1 ; i <= G->degree ; ++i )
+      if ( cycleLen[cycleStructure[i]] != cycleLen1[cycleStructure1[i]] ) {
+         freeIntArrayDegree( cycleLen);
+         freeIntArrayDegree( cycleStructure);
+         freeIntArrayDegree( cycleLen1);
+         freeIntArrayDegree( cycleStructure1);
+         if ( eCyclePartn )
+            deletePartition( eCyclePartn);
+         if ( fCyclePartn )
+            deletePartition( fCyclePartn);
+         if ( options.inform )
+            informCosetRep( NULL);
+         return NULL;
+      }
+   /* Continue with cycle length partition refinement. */         
+   if ( !noPartn && eCyclePartn ) {
+      SSS_efCycle.refine = partnStabRefine;
+      SSS_efCycle.familyParm_L[0].ptrParm = (void *) eCyclePartn;
+      SSS_efCycle.familyParm_R[0].ptrParm = (void *) fCyclePartn;
+      refnFamList[refnCount] = &SSS_efCycle;
+      reducChkList[refnCount] = isPartnStabReducible;
+      specialRefinement[refnCount] = NULL;
+      initializePartnStabRefn();
+      ++refnCount;
+   }
+
+   /* Terminators. */
+   refnFamList[refnCount] = NULL;
+   reducChkList[refnCount] = NULL;
+   specialRefinement[refnCount] = NULL;
+
+   extra[0] = NULL;
+
+   chooseNextBasePoint = ( stdRBaseOption ) ? NULL : nextBasePointEltCent;
+   longCycleFlag = longCycleOption;
+
+   return  computeCosetRep( G, conjugatesEToF, refnFamList, reducChkList,
+                            specialRefinement, extra, L_L, L_R);
+}
+
+
+/*-------------------------- groupCentralizer -----------------------------*/
+
+/* Function groupCentralizer.   Returns a new permutation group representing 
+   the centralizer in a permutation group G of another permutation group E.
+   The algorithm is based on Figure 9 in the paper "Permutation group algorithms 
+   based on partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *groupCentralizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PermGroup *const E,      /* The point set to be stabilized. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   const Unsigned centPartnCount,  
+   const Unsigned centGenCount)
+{
+   RefinementFamily OOO_G, CCC_e[17], SSS_eCycle;
+   RefinementFamily  *refnFamList[20];
+   ReducChkFn  *reducChkList[20];
+   SpecialRefinementDescriptor *specialRefinement[20];
+   ExtraDomain *extra[1];
+   Partition *eCyclePartn = NULL;
+   Unsigned i;
+   unsigned long seed = 47;
+   Permutation *e, *ex[20];
+   Unsigned refnCount = 0;
+
+   /* Orbit refinement (unless G is symmetric). */
+   if ( ! IS_SYMMETRIC(G) ) {
+      OOO_G.refine = orbRefine;
+      OOO_G.familyParm[0].ptrParm = G;
+      refnFamList[refnCount] = &OOO_G;
+      reducChkList[refnCount] = isOrbReducible;
+      specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) );
+      specialRefinement[refnCount]->refnType = 'O';
+      specialRefinement[refnCount]->leftGroup = G;
+      specialRefinement[refnCount]->rightGroup = G;
+      initializeOrbRefine( G);
+      ++refnCount;
+   }
+
+   initializeSeed( seed);
+   for ( i = 1 ; i <= MAX(centGenCount,centPartnCount) ; ++i ) {
+      e = randGroupPerm( E, 1);
+      if ( i <= centGenCount ) {
+         CCC_e[refnCount].refine = centRefine;
+         CCC_e[refnCount].familyParm[0].ptrParm = e;
+         refnFamList[refnCount] = &CCC_e[refnCount];
+         reducChkList[refnCount] = isCentReducible;
+         specialRefinement[refnCount] = NULL;
+         initializeCentRefine( e);
+         ++refnCount;
+      }
+      if ( i <= centPartnCount )
+         ex[i] = e;
+   }
+
+   eCyclePartn = NULL;
+   if ( centPartnCount > 0 ) {
+      ex[centPartnCount+1] = NULL;
+      eCyclePartn = multipleCycleLengthPartn( ex);
+   }
+   else
+      eCyclePartn = NULL;
+
+   if ( eCyclePartn ) {
+      SSS_eCycle.refine = partnStabRefine;
+      SSS_eCycle.familyParm[0].ptrParm = (void *) eCyclePartn;
+      refnFamList[refnCount] = &SSS_eCycle;
+      reducChkList[refnCount] = isPartnStabReducible;
+      specialRefinement[refnCount] = NULL;
+      initializePartnStabRefn();
+      ++refnCount;
+   }
+
+   /* Terminators. */
+   refnFamList[refnCount] = NULL;
+   reducChkList[refnCount] = NULL;
+   specialRefinement[refnCount] = NULL;
+
+   extra[0] = NULL;
+
+   EE = E;
+
+   return  computeSubgroup( G, centralizesGroupE, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
+
+/*------------------------------------------------------------------------*/
+
+#define HASH( i, j)  ( (7L * i + j) % hashTableSize )
+
+typedef struct RefnListEntry {
+   Unsigned i;                     /* Cell number in UpsilonTop to split. */
+   Unsigned j;                     /* Orbit number of G^(level) in split. */
+   Unsigned newCellSize;           /* Size of new cell created by split. */
+   struct RefnListEntry *hashLink; /* List of refns with same hash value. */
+   struct RefnListEntry *next;     /* Next refn on list of all refinements. */
+   struct RefnListEntry *last;     /* Last refn on list of all refinements. */
+} RefnListEntry;
+
+static struct {
+   Unsigned elementCount;
+   Permutation *element[17];
+   RefnListEntry **hashTable[17];
+   RefnListEntry *refnList[17];
+   RefnListEntry *freeListHeader[17];
+   RefnListEntry *inUseListHeader[17];
+} refnData = {0};
+
+static Unsigned trueElementCount, hashTableSize;
+static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader;
+
+static UnsignedS *pt = NULL, *freq = NULL;
+
+
+
+/*-------------------------- initializeCentRefine -------------------------*/
+
+static void initializeCentRefine( Permutation *e)
+{
+   int i;
+
+   /* Compute hash table size. */
+   if ( refnData.elementCount == 0 ) {
+      hashTableSize = e->degree;
+      while ( hashTableSize > 11 &&
+              (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 ||
+              hashTableSize % 5 == 0 || hashTableSize % 7 == 0) )
+         --hashTableSize;
+   }
+
+   if ( refnData.elementCount < 9) {
+      refnData.element[refnData.elementCount] = e;
+      refnData.hashTable[refnData.elementCount] = allocPtrArrayDegree();
+      refnData.refnList[refnData.elementCount] =
+                    malloc( e->degree * (sizeof(RefnListEntry)+2) );
+      if ( !refnData.refnList[refnData.elementCount] )
+         ERROR( "initializeCentRefine", "Memory allocation error.")
+      ++refnData.elementCount;
+      trueElementCount = refnData.elementCount;
+   }
+   else
+      ERROR( "initializeCentRefine", "Centralizer refinement limited to ten elements.")
+
+   /* Alloc (outer level) freq and pt, and nitialize array freq. */
+   pt = allocIntArrayDegree();
+   freq = allocIntArrayDegree();
+   for ( i = 1 ; i <= e->degree ; ++i )
+      freq[i] = 0;
+}
+
+
+/*-------------------------- centRefine -----------------------------------*/
+
+/* This function implements the refinement family CCC_e.  This family consists 
+   of the elementary refinements ccC_{e,i,j}, where e fixed.  (It is the 
+   element to be stabilized) and where 1 <= i, j <= degree.  Application of 
+   ccC_sSS_{e,i,j} to UpsilonStack splits off from UpsilonTop the intersection 
+   of the i'th cell of UpsilonTop and the j'th cell of UpsilonTop^e and pushes 
+   the resulting partition onto UpsilonStack, unless sSS_{e,i,j} acts
+   trivially on UpsilonTop, in which case UpsilonStack remains unchanged.
+
+   The family parameter is:
+         familyParm[0].ptrParm:  e      
+   The refinement parameters are:
+         refnParm[0].intParm:    i
+         refnParm[1].intParm:    j.
+*/
+
+
+static SplitSize centRefine(
+   const RefinementParm familyParm[],      /* Family parm: e. */
+   const RefinementParm refnParm[],        /* Refinement parms: i, j. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   const Permutation *const e = familyParm[0].ptrParm;
+   const Unsigned cellToSplit = refnParm[0].intParm,
+                  otherCell = refnParm[1].intParm;
+   Unsigned  m, last, i, j, temp, startNewCell,
+             inNewCellCount = 0,
+             outNewCellCount = 0;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   SplitSize  split;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ;
+         m < last && (inNewCellCount == 0 || outNewCellCount == 0) ; ++m )
+      if ( cellNumber[e->invImage[pointList[m]]] == otherCell )
+         ++inNewCellCount;
+      else
+         ++outNewCellCount;
+   if ( inNewCellCount == 0 || outNewCellCount == 0 ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   if ( cellSize[cellToSplit] <= cellSize[otherCell] ) {
+      i = startCell[cellToSplit]-1;
+      j = last;
+      while ( i < j ) {
+         while ( cellNumber[e->invImage[pointList[++i]]] != otherCell )
+            ;
+         while ( cellNumber[e->invImage[pointList[--j]]] == otherCell )
+            ;
+         if ( i < j ) {
+            EXCHANGE( pointList[i], pointList[j], temp)
+            EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], 
+                      temp)
+         }
+      }
+      startNewCell = i;
+   }
+   else {
+      startNewCell = startCell[cellToSplit] + cellSize[cellToSplit];
+      for ( i = startCell[otherCell] , last = i + cellSize[otherCell] ;
+            i < last ; ++i )
+         if ( cellNumber[e->image[pointList[i]]] == cellToSplit ) {
+            --startNewCell;
+            m = invPointList[e->image[pointList[i]]];
+            EXCHANGE( pointList[m], pointList[startNewCell], temp);
+            EXCHANGE( invPointList[pointList[m]], invPointList[pointList[startNewCell]],
+                      temp);
+         }
+   }
+         
+   ++UpsilonStack->height;
+   for ( m = startNewCell , last = startCell[cellToSplit] + 
+         cellSize[cellToSplit] ; m < last ; ++m )
+      cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = startNewCell;
+   parent[UpsilonStack->height] = cellToSplit;
+   cellSize[UpsilonStack->height] = last - startNewCell;
+   cellSize[cellToSplit] -= (last - startNewCell);
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+}
+
+
+/*-------------------------- deleteRefnListEntry --------------------------*/
+
+static void deleteRefnListEntry(
+   RefnListEntry *entryToDelete,
+   Unsigned hashPosition,             /* hashTableSize+1 indicates unknown */
+   RefnListEntry *prevHashListEntry)
+{
+   if ( hashPosition > hashTableSize ) {
+      hashPosition = HASH( entryToDelete->i, entryToDelete->j);
+      if ( hashTable[hashPosition] == entryToDelete )
+         prevHashListEntry = NULL;
+      else {
+         prevHashListEntry = hashTable[hashPosition];
+         while ( prevHashListEntry->hashLink != entryToDelete )
+             prevHashListEntry = prevHashListEntry->hashLink;
+      }
+   }
+   if ( prevHashListEntry )
+      prevHashListEntry->hashLink = entryToDelete->hashLink;
+   else
+      hashTable[hashPosition] = entryToDelete->hashLink;
+   if ( entryToDelete->last )
+      entryToDelete->last->next = entryToDelete->next;
+   else
+      inUseListHeader = entryToDelete->next;
+   if ( entryToDelete->next )
+      entryToDelete->next->last = entryToDelete->last;
+   entryToDelete->next = freeListHeader;
+   freeListHeader = entryToDelete;
+}
+
+
+/*-------------------------- isCentReducible ------------------------------*/
+
+static RefinementPriorityPair isCentReducible(
+   const RefinementFamily *family,        /* The refinement family mapping
+                                             must be centRefine; family parm[0]
+                                             is the centralizing element. */
+   const PartitionStack *const UpsilonStack)
+{
+   BOOLEAN cellWillSplit;
+   Unsigned  i, j, m, elementNumber, hashPosition, newCellNumber, oldCellNumber,
+             count, splittingCell, cSize, temp, previousJ;
+   unsigned long minPriority, thisPriority;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   Permutation *e = family->familyParm_L[0].ptrParm;
+   RefinementPriorityPair reducingRefn;
+   RefnListEntry *refnList;
+   RefnListEntry *p, *oldP, *position, *minPosition;
+
+   /* Check that the refinement mapping really is centRefine, as required,
+      and that the element is one for which initializeCentRefine has been
+      called. */
+   if ( family->refine != centRefine )
+      ERROR( "isCentReducible", "Error: incorrect refinement mapping");
+   for ( elementNumber = 0 ; elementNumber < refnData.elementCount &&
+                           refnData.element[elementNumber] != e ;
+                           ++elementNumber )
+      ;
+   if ( elementNumber >= refnData.elementCount )
+      ERROR( "isCentReducible", "Routine not initialized for element.")
+   hashTable = refnData.hashTable[elementNumber];
+   refnList = refnData.refnList[elementNumber];
+
+   /* If this is the first call (UpsilonStack has height 1), we create a new
+      empty refinement list. */
+   if ( UpsilonStack->height == 1) {
+      for ( i = 0 ; i < hashTableSize ; ++i )
+         hashTable[i] = NULL;
+      freeListHeader = &refnList[0];
+      inUseListHeader = NULL;
+      for ( i = 0 ; i < e->degree ; ++i)
+         refnList[i].next = &refnList[i+1];
+      refnList[e->degree].next = NULL;
+   }
+
+   /* If this is not a new level, we merely fix up the old list.  The entries
+      for the new cell must be created and those for its parent must be
+      adjusted. */
+   else {
+      freeListHeader = refnData.freeListHeader[elementNumber];
+      inUseListHeader = refnData.inUseListHeader[elementNumber];
+      newCellNumber = UpsilonStack->height;
+      oldCellNumber = UpsilonStack->parent[UpsilonStack->height];
+      
+      /* First we make adjustments corresponding to splitting the new
+         partition using the old. */
+      for ( m = startCell[newCellNumber] , cellWillSplit = FALSE , previousJ = 0 ;
+            m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) {
+         j = cellNumber[e->invImage[pointList[m]]];
+         if ( j == newCellNumber )
+            j = oldCellNumber;
+         if ( previousJ != 0 && previousJ != j )
+            cellWillSplit = TRUE;
+         previousJ = j;
+         hashPosition = HASH( oldCellNumber, j);
+         p = hashTable[hashPosition];
+         oldP = NULL;
+         while ( p && (p->i != oldCellNumber || p->j != j) ) {
+            oldP = p;
+            p = p->hashLink;
+         }
+         if ( p ) {
+            --p->newCellSize;
+            if ( p->newCellSize == 0 )
+               deleteRefnListEntry( p, hashPosition, oldP);
+         }
+      }
+      if ( cellWillSplit )
+         for ( m = startCell[newCellNumber] ; m < startCell[newCellNumber] + 
+               cellSize[newCellNumber] ; ++m ) {
+            j = cellNumber[e->invImage[pointList[m]]];
+            if ( j == newCellNumber )
+               j = oldCellNumber;
+            hashPosition = HASH( newCellNumber, j);
+            p = hashTable[hashPosition];
+            while ( p && (p->i != newCellNumber || p->j != j) )
+               p = p->hashLink;
+            if ( p )
+               ++p->newCellSize;
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isCentReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = newCellNumber;
+               p->j = j;
+               p->newCellSize = 1;
+            }
+         }
+
+      /* Now we make adjustments corresponding to changing the second partition
+         from the old to the new. */
+      cSize = 0;
+      for ( m = startCell[newCellNumber] ; m < startCell[newCellNumber] + 
+            cellSize[newCellNumber] ; ++m ) {
+         pt[++cSize] = temp = e->image[pointList[m]];
+         ++freq[cellNumber[temp]];   /* MUST BE ZERO INITIALLY. */
+      }
+      for ( m = 1 ; m <= cSize ; ++m ) {
+         splittingCell = cellNumber[pt[m]];
+         if ( freq[splittingCell] > 0 && freq[splittingCell] < 
+              cellSize[splittingCell] ) {             /* i.e, cell splits */
+            /* Add entry that cell newCellNumber splits cell splittingCell. */
+            hashPosition = HASH( splittingCell, newCellNumber);
+            p = hashTable[hashPosition];
+            oldP = NULL;
+            while ( p && (p->i != splittingCell || p->j != newCellNumber) ) {
+               oldP = p;
+               p = p->hashLink;
+            }
+            if ( !freeListHeader )
+               ERROR( "isCentReducible",
+                      "Refinement list exceeded bound (should not occur).")
+            p = freeListHeader;
+            freeListHeader = freeListHeader->next;
+            p->next = inUseListHeader;
+            if ( inUseListHeader )
+               inUseListHeader->last = p;
+            p->last = NULL;
+            inUseListHeader = p;
+            p->hashLink = hashTable[hashPosition];
+            hashTable[hashPosition] = p;
+            p->i = splittingCell;
+            p->j = newCellNumber;
+            p->newCellSize = freq[splittingCell];
+            /* Check if cell oldCellNumber split cell splittingCell.  If so,
+               adjust its count, and eliminate its entry if count reaches 0.
+               If not, then it now must, so add it. */
+            hashPosition = HASH( splittingCell, oldCellNumber);
+            p = hashTable[hashPosition];
+            oldP = NULL;
+            while ( p && (p->i != splittingCell || p->j != oldCellNumber) ) {
+               oldP = p;
+               p = p->hashLink;
+            }
+            if ( p ) {
+               p->newCellSize -= freq[splittingCell];
+               if ( p->newCellSize == 0 )
+                  deleteRefnListEntry( p, hashPosition, oldP);
+            }
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isCentReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = splittingCell;
+               p->j = oldCellNumber;
+               p->newCellSize = cellSize[splittingCell] - freq[splittingCell];
+            }
+         }
+         freq[splittingCell] = 0;
+      }
+   }
+
+   /* Now we return a refinement of minimal priority.  While searching the
+      list, we also check for refinements invalidated by previous splittings. */
+   minPosition = inUseListHeader;
+   minPriority = ULONG_MAX;
+   count = 1;
+   for ( position = inUseListHeader ; position && count < 100 ;
+         position = position->next , ++count ) {
+      while ( position && position->newCellSize == cellSize[position->i] ) {
+         p = position;
+         position = position->next;
+         deleteRefnListEntry( p, hashTableSize+1, NULL);
+      }
+      if ( !position )
+         break;
+      if ( (thisPriority = (unsigned long) position->newCellSize +
+           MIN( cellSize[position->i], cellSize[position->j] )) <
+           minPriority ) {
+         minPriority = thisPriority;
+         minPosition = position;
+      }
+   }
+   if ( minPriority == ULONG_MAX )
+      reducingRefn.priority = IRREDUCIBLE;
+   else {
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = minPosition->i;
+      reducingRefn.refn.refnParm[1].intParm = minPosition->j;
+      reducingRefn.priority = thisPriority;
+   }
+
+   /* If this is the last call to isOrbReducible for this element (UpsilonStack
+      has height degree-1), free memory and reinitialize. */
+   if ( UpsilonStack->height == e->degree - 1 ) {
+      freePtrArrayDegree( refnData.hashTable[elementNumber]);
+      free( refnData.refnList[elementNumber]);
+      refnData.element[elementNumber] = NULL;
+      --trueElementCount;
+      if ( trueElementCount == 0 )
+         refnData.elementCount = 0;
+   }
+
+   refnData.freeListHeader[elementNumber] = freeListHeader;
+   refnData.inUseListHeader[elementNumber] =inUseListHeader;
+   return reducingRefn;
+}
+
+
+/*-------------------------- cycleLengthPartn -----------------------------*/
+
+/* This function returns a new partition in which each cell represents the
+   points lying in cycles of a fixed size of a permutation e.  However,
+   if the partition would have just one cell, no partition is created, and
+   a null pointer is returned instead.  It also fills in an array
+   cycleLen so as to make cycleLen[pt] the length of the cycle containing
+   point, as well as an array cycleStructure which consists of the list of
+   points sorted by cycle length, such that all points a fixed cycle appear
+   together, in order that they appear in a cycle.  At the end, pointList 
+   is such that the points appear in increasing cycle length. */
+
+Partition *cycleLengthPartn(
+   const Permutation *const e,
+   UnsignedS *const cycleLen,
+   UnsignedS *const cycleStructure)
+{
+   Unsigned i, j, pt, img, len, cellCount;
+   const Unsigned degree = e->degree;
+   UnsignedS *const sortedCycleLen = allocIntArrayDegree();
+   UnsignedS *const freq = allocIntArrayDegree();
+   UnsignedS *const pointList = allocIntArrayDegree();
+   Partition *cPartn;
+   char *found;
+
+   /* For each point pt, set cycleLen[pt] to the length of the e-cycle
+      containing pt. */
+   for ( pt = 1 ; pt <= degree ; ++pt)
+      cycleLen[pt] = 0;
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      if ( cycleLen[pt] == 0 ) {
+         for ( len = 1 , img = e->image[pt] ; img != pt ; 
+                                              img = e->image[img] , ++len )
+            ;
+         for ( img = e->image[pt] ; img != pt ; img = e->image[img] )
+            cycleLen[img] = len;
+         cycleLen[pt] = len;
+      }
+   
+   /* Now set pointList to a list of points sorted by cycle length. */
+   for ( i = 0 ; i <= degree ; ++i )
+      freq[i] = 0;
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      ++freq[cycleLen[pt]];
+   freq[0] = 0;
+   for ( i = 1 ; i <= degree ; ++i )
+      freq[i] += freq[i-1];
+   for ( i = 1 ; i <= degree ; ++i ) {
+      pointList[++freq[cycleLen[i]-1]] = i;   
+      sortedCycleLen[freq[cycleLen[i]-1]] = cycleLen[i];
+   }
+
+   /* Now construct cycleStructure. */
+   found = allocBooleanArrayDegree();
+   for ( pt = 1 ; pt <= degree ; ++pt)
+      found[pt] = FALSE;
+   j = 0;
+   for ( i = 1 ; i <= degree ; ++i )
+      if ( !found[ pt=pointList[i] ] )  {
+         img = pt;
+         do {
+            found[img] = TRUE;
+            cycleStructure[++j] = img;
+            img = e->image[img];
+         } while ( img != pt );
+      }
+   freeBooleanArrayDegree( found);
+
+   /* If there is only one cycle, free heap storage and return NULL> */
+   if ( cycleLen[pointList[1]] == cycleLen[pointList[degree]] ) {
+      freeIntArrayDegree( sortedCycleLen);
+      freeIntArrayDegree( freq);
+      freeIntArrayDegree( pointList);
+      return NULL;
+   }
+
+   /* Otherwise construct the partition and return it. */
+   else {
+      cellCount = 0;
+      cPartn = allocPartition();
+      cPartn->degree = degree;
+      cPartn->pointList = pointList;
+      cPartn->invPointList = freq;       /* Just to reuse storage. */
+      cPartn->cellNumber = cycleLen;     /* Just to reuse storage. */
+      cPartn->startCell = allocIntArrayDegree();
+      for ( i = 1 ; i <= degree ; ++i ) {
+         cPartn->invPointList[cPartn->pointList[i]] = i;
+         if ( i == 1 || sortedCycleLen[i] != sortedCycleLen[i-1] )
+            cPartn->startCell[++cellCount] = i;
+         cPartn->cellNumber[cPartn->pointList[i]] = cellCount;
+      }
+      cPartn->startCell[cellCount+1] = degree+1;
+      freeIntArrayDegree( sortedCycleLen);
+      return cPartn;
+   }
+}
+
+
+
+
+
+/*-------------------------- multipleCycleLengthPartn ----------------------*/
+
+/* This function returns a new partition in which each cell represents the
+   points lying in cycles of a fixed size of each partition ex[1], ex[2], ...
+   (list null-terminated).  However, if the partition would have just one cell, 
+   no partition is created, and a null pointer is returned instead. */
+
+Partition *multipleCycleLengthPartn(
+   const Permutation *const ex[])
+{
+   Unsigned i, pt, img, len, cellCount, permNumber, OldNumberPreviousCell;
+   const Unsigned degree = ex[1]->degree;
+   UnsignedS *const cycleLen = allocIntArrayDegree();
+   UnsignedS *const freq = allocIntArrayDegree();
+   UnsignedS *pointList = allocIntArrayDegree();
+   UnsignedS *newPointList = allocIntArrayDegree();
+   UnsignedS *const cellNumber = allocIntArrayDegree();
+   UnsignedS *temp;
+   Partition *cPartn;
+
+   for ( i = 1 ; i <= degree ; ++i ) {
+      pointList[i] = i;
+      cellNumber[i] = 1;
+   }
+
+   for ( permNumber = 1 ; ex[permNumber] ; ++permNumber ) {
+
+      /* For each point pt, set cycleLen[pt] to the length of the ex[i]-cycle
+         containing pt. */
+      for ( pt = 1 ; pt <= degree ; ++pt)
+         cycleLen[pt] = 0;
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         if ( cycleLen[pt] == 0 ) {
+            for ( len = 1 , img = ex[permNumber]->image[pt] ; img != pt ; 
+                                     img = ex[permNumber]->image[img] , ++len )
+               ;
+            for ( img = ex[permNumber]->image[pt] ; img != pt ; 
+                               img = ex[permNumber]->image[img] )
+               cycleLen[img] = len;
+            cycleLen[pt] = len;
+         }
+   
+      /* Now we sort the points by cycle length, using a stable sort. */
+      for ( i = 0 ; i <= degree ; ++i )
+         freq[i] = 0;
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         ++freq[cycleLen[pt]];
+      freq[0] = 0;
+      for ( i = 1 ; i <= degree ; ++i )
+         freq[i] += freq[i-1];
+      for ( i = 1 ; i <= degree ; ++i ) 
+         newPointList[++freq[cycleLen[pointList[i]]-1]] = pointList[i];
+      EXCHANGE( pointList, newPointList, temp);   
+
+      /* Now compute cellNumber for the new partition. */
+      OldNumberPreviousCell = cellNumber[pointList[1]];
+      cellNumber[pointList[1]] = 1;
+      for ( i = 2 ; i <= degree ; ++i ) {
+         if ( cellNumber[pointList[i]] != OldNumberPreviousCell ||
+                     cycleLen[pointList[i]] != cycleLen[pointList[i-1]] ) {
+             OldNumberPreviousCell = cellNumber[pointList[i]];
+             cellNumber[pointList[i]] = 1 + cellNumber[pointList[i-1]];
+         }
+         else {
+             OldNumberPreviousCell = cellNumber[pointList[i]];
+             cellNumber[pointList[i]] = cellNumber[pointList[i-1]];
+         }
+      }
+   }
+
+   /* If there is only one cycle, free heap storage and return NULL> */
+   if ( cellNumber[pointList[degree]] == 1 ) {
+      freeIntArrayDegree( cycleLen);
+      freeIntArrayDegree( freq);
+      freeIntArrayDegree( pointList);
+      freeIntArrayDegree( newPointList);
+      freeIntArrayDegree( cellNumber);
+      return NULL;
+   }
+
+   /* Otherwise construct the partition and return it. */
+   else {
+      cellCount = 0;
+      cPartn = allocPartition();
+      cPartn->degree = degree;
+      cPartn->pointList = pointList;
+      cPartn->cellNumber = cellNumber;
+      cPartn->invPointList = freq;       /* Just to reuse storage. */
+      cPartn->startCell = newPointList;  /* Just to reuse space. */
+      for ( i = 1 ; i <= degree ; ++i ) {
+         cPartn->invPointList[cPartn->pointList[i]] = i;
+         if ( i == 1 || cellNumber[pointList[i]] != cellNumber[pointList[i-1]] )
+            cPartn->startCell[++cellCount] = i;
+      }
+      cPartn->startCell[cellCount+1] = degree+1;
+      freeIntArrayDegree( cycleLen);
+      return cPartn;
+   }
+}
diff --git a/src/leon/src/ccent.h b/src/leon/src/ccent.h
new file mode 100644
index 0000000..e69bf9f
--- /dev/null
+++ b/src/leon/src/ccent.h
@@ -0,0 +1,60 @@
+#ifndef CCENT
+#define CCENT
+
+extern PermGroup *centralizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Permutation *const e,    /* The point set to be stabilized. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   const BOOLEAN noPartn,         /* If true, suppresses use of ordered
+                                     partition based on cycle size. */
+   const BOOLEAN longCycleOption, /* Always choose next base point in longest
+                                     cycle; however, at present, all cycles
+                                     of length 5 or greater are treated as
+                                     having the same length. */
+   const BOOLEAN stdRBaseOption)  /* Use std base selection algorithm, ignoring
+                                     cycle lengths. */
+;
+
+extern Permutation *conjugatingElement(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Permutation *const e,    /* One of the elements. */
+   const Permutation *const f,    /* The other element. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     centralizer in G of e.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R,          /* A (possibly trivial) known subgroup of the
+                                     centralizer in G of f.  (A null pointer
+                                     designates a trivial group.) */
+   const BOOLEAN noPartn,         /* If true, suppresses use of ordered
+                                     partition based on cycle size. */
+   const BOOLEAN longCycleOption, /* Always choose next base point in longest
+                                     cycle; however, at present, all cycles
+                                     of length 5 or greater are treated as
+                                     having the same length. */
+   const BOOLEAN stdRBaseOption)  /* Use std base selection algorithm, ignoring
+                                     cycle lengths. */
+;
+
+extern PermGroup *groupCentralizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PermGroup *const E,      /* The point set to be stabilized. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   const Unsigned centPartnCount,
+   const Unsigned centGenCount)
+;
+
+extern Partition *cycleLengthPartn(
+   const Permutation *const e,
+   UnsignedS *const cycleLen,
+   UnsignedS *const cycleStructure)
+;
+
+extern Partition *multipleCycleLengthPartn(
+   const Permutation *const ex[])
+;
+
+#endif
diff --git a/src/leon/src/ccommut.c b/src/leon/src/ccommut.c
new file mode 100644
index 0000000..6bd14f5
--- /dev/null
+++ b/src/leon/src/ccommut.c
@@ -0,0 +1,97 @@
+/* File ccommut.c.  Contains function commutatorGroup, which computes the
+   commutator [G,H] of a group G and a (not necessarily normal) subgroup
+   H. */
+
+#include <stddef.h>
+
+#include "group.h"
+
+#include "addsgen.h"
+#include "copy.h"
+#include "chbase.h"
+#include "new.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "storage.h"
+
+CHECK( ccommu)
+
+
+
+/*-------------------------- commutatorGroup -----------------------------*/
+
+/* The function commutatorGroup( G, H) returns a new permutation group
+   equal to the commutator [G,H].  H must be a subgroup of G, though it
+   need not be normal.  G must already have a base and strong generating
+   set, but H need not have one. */
+
+PermGroup *commutatorGroup(
+   const PermGroup *const G,
+   const PermGroup *const H)
+{
+   PermGroup *C = newTrivialPermGroup( G->degree);
+   Permutation *a, *b, *x, *newGen;
+   Unsigned i;
+   UnsignedS *img = allocIntArrayBaseSize();
+
+   G->base[G->baseSize+1] = 0;
+   changeBase( C, G->base);
+   for ( a = G->generator ; a ; a = a->next )
+      for ( b = (H == G ? a->next : H->generator) ; b ; b = b->next )
+         for ( x = G->generator ; x ; x = x->next ) {
+            for ( i = 1 ; i <= G->baseSize ; ++i ) {
+               img[i] = b->invImage[a->invImage[x->invImage[G->base[i]]]];
+               img[i] = x->image[b->image[a->image[img[i]]]];
+            }
+            if ( !isBaseImage( C, img) ) {
+               newGen = newIdentityPerm( G->degree);
+               rightMultiplyInv( newGen, x);
+               rightMultiplyInv( newGen, a);
+               rightMultiplyInv( newGen, b);
+               rightMultiply( newGen, a);
+               rightMultiply( newGen, b);
+               rightMultiply( newGen, x);
+               reduceWrtGroup( C, newGen, NULL);
+               addStrongGenerator( C, newGen, TRUE);
+            }
+         }
+   freeIntArrayBaseSize( img);
+   return C;
+}
+
+
+/*-------------------------- normalClosure -------------------------------*/
+
+/* The function normalClosure( G, H) returns a new permutation group
+   equal to the normal closure of H in G.  H must be a subgroup of G (not
+   checked).  G must already have a base and strong generating set, but
+   H need not have one. */
+
+PermGroup *normalClosure(
+   const PermGroup *const G,
+   const PermGroup *const H)
+{
+   PermGroup *N = copyOfPermGroup( H);
+   Permutation *a, *b, *newGen;
+   Unsigned i;
+   UnsignedS *img = allocIntArrayBaseSize();
+
+   G->base[G->baseSize+1] = 0;
+   changeBase( N, G->base);
+   for ( a = G->generator ; a ; a = a->next )
+      for ( b = H->generator ; b ; b = b->next ) {
+         for ( i = 1 ; i <= G->baseSize ; ++i ) 
+            img[i] = a->image[b->image[a->invImage[G->base[i]]]];
+         if ( !isBaseImage( N, img) ) {
+            newGen = newIdentityPerm( G->degree);
+            rightMultiplyInv( newGen, a);
+            rightMultiply( newGen, b);
+            rightMultiply( newGen, a);
+            reduceWrtGroup( N, newGen, NULL);
+            addStrongGenerator( N, newGen, TRUE);
+         }
+      }
+
+   freeIntArrayBaseSize( img);
+   return N;
+}
diff --git a/src/leon/src/ccommut.h b/src/leon/src/ccommut.h
new file mode 100644
index 0000000..2d5b70d
--- /dev/null
+++ b/src/leon/src/ccommut.h
@@ -0,0 +1,14 @@
+#ifndef CCOMMUT
+#define CCOMMUT
+
+extern PermGroup *commutatorGroup(
+   const PermGroup *const G,
+   const PermGroup *const H)
+;
+
+extern PermGroup *normalClosure(
+   const PermGroup *const G,
+   const PermGroup *const H)
+;
+
+#endif
diff --git a/src/leon/src/cdesauto.c b/src/leon/src/cdesauto.c
new file mode 100644
index 0000000..1a85563
--- /dev/null
+++ b/src/leon/src/cdesauto.c
@@ -0,0 +1,721 @@
+/* File cdesauto.c.  Contains functions designAutoGroup and designIsomorphism,
+   the main function the design automorphism group and design isomorphism
+   programs.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "code.h"
+#include "compcrep.h"
+#include "compsg.h"
+#include "errmesg.h"
+#include "matrix.h"
+#include "new.h"
+#include "readgrp.h"
+#include "storage.h"
+
+CHECK( cdesau)
+
+extern GroupOptions options;
+
+static RefinementMapping setStabRefine;
+static ReducChkFn isSetStabReducible;
+static void initializeSetStabRefn(void);
+static RefinementMapping rowVsColRefine;
+static ReducChkFn isRowVsColReducible;
+
+static PointSet *knownIrreducible[10]  /* Null terminated 0-base list of */
+                = {NULL};              /*  point sets Lambda for which top */
+                                       /*  partition on UpsilonStack is */
+                                       /*  known to be SSS_Lambda irred. */
+
+static Matrix_01 *DD, *DD_L, *DD_R;
+static Code *CC, *CC_L, *CC_R;
+static BOOLEAN informCols;
+
+
+static BOOLEAN matrix01AutoProperty(
+   Permutation *s )
+{
+   return isMatrix01Isomorphism( DD, DD, s, FALSE);
+}
+
+
+static BOOLEAN matrix01IsoProperty(
+   Permutation *s )
+{
+   return isMatrix01Isomorphism( DD_L, DD_R, s, FALSE);
+}
+
+
+static BOOLEAN codeAutoProperty(
+   Permutation *s )
+{
+   return isCodeIsomorphism( CC, CC, s);
+}
+
+
+static BOOLEAN codeIsoProperty(
+   Permutation *s )
+{
+   return isCodeIsomorphism( CC_L, CC_R, s);
+}
+
+static void informDesignIsoPtBlk(
+   Permutation *perm);
+
+
+/*-------------------------- designAutoGroup ------------------------------*/
+
+/* Function designAutoGroup.  Returns a new permutation group representing 
+   the automorphism group of the matrix/design D.  The algorithm is based 
+   on Figure 9 in the paper "Permutation group algorithms based on partitions" by the 
+   author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *designAutoGroup(
+   Matrix_01 *const D,            /* The matrix whose group is to be found. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     automorphism group of D.  (A null pointer
+                                     designates a trivial group.) */
+   Code *const C)                 /* If nonnull, the auto grp of the code C is
+                                     computed, assuming its group is contained
+                                     in that of the design. */
+{
+   RefinementFamily SSS_Lambda, III_D;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+   PointSet *Lambda = allocPointSet();                   /* Set of rows. */
+   PermGroup *G;
+   Unsigned degree = D->numberOfRows + D->numberOfCols;
+   Unsigned i;
+   Property *pp;
+
+   /* Construct the symmetric group G of degree rows+cols. */
+   G = allocPermGroup();
+   sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree);
+   G->degree = degree;
+   G->baseSize = 0;
+
+   /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows}. */
+   Lambda->degree = degree;
+   Lambda->size = D->numberOfRows;
+   Lambda->pointList = allocIntArrayDegree();
+   for ( i = 1 ; i <= D->numberOfRows ; ++i )
+      Lambda->pointList[i] = i;
+   Lambda->pointList[D->numberOfRows+1] = 0;
+   Lambda->inSet = allocBooleanArrayDegree();
+   for ( i = 1 ; i <= degree ; ++i )
+      Lambda->inSet[i] = ( i <= D->numberOfRows);
+
+   SSS_Lambda.refine = setStabRefine;
+   SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda;
+
+   III_D.refine = rowVsColRefine;
+   III_D.familyParm[0].ptrParm = (void *) D;
+
+   refnFamList[0] = &SSS_Lambda;
+   refnFamList[1] = &III_D;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isSetStabReducible;
+   reducChkList[1] = isRowVsColReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = NULL;
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeSetStabRefn();
+
+   if ( C ) {
+      CC = C;
+      pp = codeAutoProperty;
+   }
+   else {
+      DD = D;
+      pp = matrix01AutoProperty;
+   }
+   
+
+   return  computeSubgroup( G, pp, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
+/*-------------------------- designIsomorphism ----------------------------*/
+
+/* Function designIsomorphism.  Returns a permutation mapping one specified   
+   matrix/design D_L to another matrix/design D_R.  The two matrices must have
+   the same number of rows and the same number of columns.  The algorithm is 
+   based on Figure 9 in the paper "Permutation group algorithms based on 
+   partitions" by the author. */
+
+Permutation *designIsomorphism(
+   Matrix_01 *const D_L,          /* The first design. */
+   Matrix_01 *const D_R,          /* The second design. */
+   PermGroup *const L_L,          /* A known subgroup of Aut(D_L), or NULL. */
+   PermGroup *const L_R,          /* A known subgroup of Aut(D_R), or NULL. */
+   Code *const C_L,               /* If nonnull, C_R must also be nonull, and */
+   Code *const C_R,               /*   any isomorphism of C_L to C_R must map */
+                                  /*   D_L to D_R.  A code isomorphism is     */
+                                  /*   computed.  */  
+   const BOOLEAN colInformFlag)
+{
+   RefinementFamily SSS_Lambda_Lambda, III_DL_DR;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+   PointSet *Lambda = allocPointSet();                   /* Set of rows. */
+   PermGroup *G;
+   Unsigned degree = D_L->numberOfRows + D_L->numberOfCols;
+   Unsigned i;
+   Property *pp;
+
+   /* Construct the symmetric group G of degree rows+cols. */
+   G = allocPermGroup();
+   sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree);
+   G->degree = degree;
+   G->baseSize = 0;
+
+   /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows}. */
+   Lambda->degree = degree;
+   Lambda->size = D_L->numberOfRows;
+   Lambda->pointList = allocIntArrayDegree();
+   for ( i = 1 ; i <= D_L->numberOfRows ; ++i )
+      Lambda->pointList[i] = i;
+   Lambda->pointList[D_L->numberOfRows+1] = 0;
+   Lambda->inSet = allocBooleanArrayDegree();
+   for ( i = 1 ; i <= degree ; ++i )
+      Lambda->inSet[i] = ( i <= D_L->numberOfRows);
+
+   SSS_Lambda_Lambda.refine = setStabRefine;
+   SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Lambda;
+   SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Lambda;
+
+   III_DL_DR.refine = rowVsColRefine;
+   III_DL_DR.familyParm_L[0].ptrParm = (void *) D_L;
+   III_DL_DR.familyParm_R[0].ptrParm = (void *) D_R;
+
+   refnFamList[0] = &SSS_Lambda_Lambda;
+   refnFamList[1] = &III_DL_DR;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isSetStabReducible;
+   reducChkList[1] = isRowVsColReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = NULL;
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeSetStabRefn();
+   if ( C_L ) {
+      CC_L = C_L;
+      CC_R = C_R;
+      pp = codeIsoProperty;
+   }
+   else {
+      DD_L = D_L;
+      DD_R = D_R;
+      pp = matrix01IsoProperty;
+      options.altInformCosetRep = (colInformFlag ? &informDesignIsoPtBlk
+                                                 : NULL);
+   }
+   informCols = colInformFlag;
+
+   return  computeCosetRep( G, pp, refnFamList, reducChkList,
+                            specialRefinement, extra, L_L, L_R);
+}
+
+
+/*-------------------------- initializeSetStabRefn ------------------------*/
+
+static void initializeSetStabRefn( void)
+{
+   knownIrreducible[0] = NULL;
+}
+
+/*-------------------------- setStabRefine --------------------------------*/
+
+/* The function implements the refinement family setStabRefine (denoted
+   SSS_Lambda in the reference).  This family consists of the elementary
+   refinements ssS_{Lambda,i}, where Lambda fixed.  (It is the set to be
+   stabilized) and where 1 <= i <= degree.  Application of sSS_{Lambda,i} to
+   UpsilonStack splits off from UpsilonTop the intersection of Lambda and the
+   i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and
+   pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts
+   trivially on UpsilonTop, in which case UpsilonStack remains unchanged.
+
+   The family parameter is:
+         familyParm[0].ptrParm:  Lambda
+   The refinement parameters are:
+         refnParm[0].intParm:    i.
+
+   In the expectation that this refinement will be applied only a small number
+   of times, no attempt has been made to optimize this procedure. */
+
+
+static SplitSize setStabRefine(
+   const RefinementParm familyParm[],      /* Family parm: Lambda. */
+   const RefinementParm refnParm[],        /* Refinement parm: i. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   PointSet *Lambda = familyParm[0].ptrParm;
+   Unsigned  cellToSplit = refnParm[0].intParm;
+   Unsigned  m, last, i, j, temp,
+             inLambdaCount = 0,
+             outLambdaCount = 0;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+   SplitSize  split;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ;
+         m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m )
+      if ( inSet[pointList[m]] )
+         ++inLambdaCount;
+      else
+         ++outLambdaCount;
+   if ( inLambdaCount == 0 || outLambdaCount == 0 ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   i = startCell[cellToSplit]-1;
+   j = last;
+   while ( i < j ) {
+      while ( !inSet[pointList[++i]] );
+      while (  inSet[pointList[--j]] );
+      if ( i < j ) {
+         EXCHANGE( pointList[i], pointList[j], temp)
+         EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp)
+      }
+   }
+   ++UpsilonStack->height;
+   for ( m = i ; m < last ; ++m )
+      cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = i;
+   parent[UpsilonStack->height] = cellToSplit;
+   cellSize[UpsilonStack->height] = last - i;
+   cellSize[cellToSplit] -= (last - i);
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+}
+
+
+/*-------------------------- isSetStabReducible ---------------------------*/
+
+/* The function isSetStabReducible checks whether the top partition on a given
+   partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If
+   so, it returns a pair consisting of a refinement acting nontrivially on
+   the top partition and a priority.  Otherwise it returns a structure of
+   type RefinementPriorityPair in which the priority field is IRREDUCIBLE.  Assuming
+   that a reducing refinement is found, the (reverse) priority is set very
+   low (1).  Note that, once this function returns negative in the priority
+   field once, it will do so on all subsequent calls.  (The static variable
+   knownIrreducible is set to true in this situation.)  Again, no attempt
+   at efficiency has been made.  */
+
+static RefinementPriorityPair isSetStabReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   PointSet *Lambda = family->familyParm_L[0].ptrParm;
+   Unsigned    i, cellNo, position;
+   BOOLEAN ptsInLambda, ptsNotInLambda;
+   RefinementPriorityPair reducingRefn;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+
+   /* Check that the refinement mapping really is setStabRefn, as required. */
+   if ( family->refine != setStabRefine )
+      ERROR( "isSetStabReducible", "Error: incorrect refinement mapping");
+
+   /* If the top partition has previously been found to be SSS-irreducible, we
+      return immediately. */
+   for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i )
+      ;
+   if ( knownIrreducible[i] ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* If we reach here, the top partition has not been previously found to be
+      SSS-irreducible.  We check each cell in turn to see if it intersects both
+      Lambda and Omega - Lambda.  If such a cell is found, we return
+      immediately. */
+   for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) {
+      ptsInLambda = ptsNotInLambda = FALSE;
+      for ( position = startCell[cellNo] ; position < startCell[cellNo] +
+                                           cellSize[cellNo] ; ++position ) {
+         if ( inSet[pointList[position]] )
+            ptsInLambda = TRUE;
+         else
+            ptsNotInLambda = TRUE;
+         if ( ptsInLambda && ptsNotInLambda ) {
+            reducingRefn.refn.family = family;
+            reducingRefn.refn.refnParm[0].intParm = cellNo;
+            reducingRefn.priority = 1;
+            return reducingRefn;
+         }
+      }
+   }
+
+   /* If we reach here, we have found the top partition to be SSS_Lambda
+      irreducible, so we add Lambda to the list knownIrreducible and return. */
+   for ( i = 0 ; knownIrreducible[i] ; ++i )
+      ;
+   if ( i < 9 ) {
+      knownIrreducible[i] = Lambda;
+      knownIrreducible[i+1] = NULL;
+   }
+   else
+      ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.")
+
+   reducingRefn.priority = IRREDUCIBLE;
+   return reducingRefn;
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+/* Static variables shared by rowVsColRefine and isRowVsColReducible.  Note
+   they are modified only by rowVsColRefine.  */
+
+   static Unsigned *header = NULL;
+   static Unsigned *nonZeroPosition;
+   static Unsigned nonZeroCount;
+   typedef struct {
+      Unsigned rowOrCol;
+      Unsigned link;
+   } Node;
+   static Node *node;
+   static BOOLEAN skipFlag = FALSE;
+
+
+/*-------------------------- rowVsColRefine --------------------------------*/
+
+/* The function implements the refinement families III_RC and III_CR.  Here
+   III_RC consists of the elementary refinements IIi_RC_{D,i,j,m}, where 
+   IIi_RC_{D,i,j,m} splits from row cell i those rows that have m ones in 
+   column cell j, and IIi_CR_{D,i,j,m} splits from column cell i those columns
+   that have m ones in row cell j.  Note that from i and j the routine can
+   tell whether III_RC or III_CR should be applied.
+  
+   The family parameter is:
+         familyParm[0].ptrParm:  D (the matrix)
+   The refinement parameters are:
+         refnParm[0].intParm:    i.
+         refnParm[1].intParm:    j.
+         refnParm[2].intParm:    m.
+
+   As a special convention, j = 0 signifies the same i and j as before,
+   with the sums across row or column cells already computed.
+*/
+
+static SplitSize rowVsColRefine(
+   const RefinementParm familyParm[],      /* Family parm: D. */
+   const RefinementParm refnParm[],        /* Refinement parm: i,j,m. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   Matrix_01 *D = familyParm[0].ptrParm;
+   Unsigned  i = refnParm[0].intParm,
+             j = refnParm[1].intParm,
+             m = refnParm[2].intParm;
+   Unsigned  nRows = D->numberOfRows;
+   Unsigned  degree = UpsilonStack->degree;
+   Unsigned  lastRow, lastCol, k, p, r, t, cnt, last, last1, rowOrCol, 
+             rowOrColSum;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   SplitSize  split;
+   enum {RC, CR} familySelector;
+   static Unsigned numberOfSubcells;
+
+   /* Allocate header, etc, if not already done. */
+   if ( !header ) {
+      header = allocIntArrayDegree();
+      for ( k = 0 ; k <= degree+1 ; ++k )      /* Note degree+1 needed */
+         header[k] = 0;
+      nonZeroPosition = allocIntArrayDegree();
+      nonZeroCount = 0;
+      node = (Node *) malloc( (degree+2) * sizeof(Node) );
+   }
+
+   /* First we check whether we need to compute row/col sums across cells,
+      or whether this was already done on a previous call.  If so, we first
+      clear the array header. */
+   if ( j != 0 && !skipFlag ) {
+      for ( k = 1 ; k <= nonZeroCount ; ++k )
+         header[nonZeroPosition[k]] = 0;
+      nonZeroCount = 0;
+      familySelector = (pointList[startCell[i]] <= nRows ) ? RC : CR;
+      for ( k = startCell[i] , last = k + cellSize[i] , cnt = 1; k < last ; 
+                                                               ++k , ++cnt ) {
+         rowOrCol = pointList[k];
+         rowOrColSum = 0;
+         switch( familySelector ) {
+            case RC:
+               for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; 
+                                                                  ++t )
+                  rowOrColSum += D->entry[rowOrCol][pointList[t]-nRows];
+               break;
+            case CR:
+               for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; 
+                                                                  ++t )
+                  rowOrColSum += D->entry[pointList[t]][rowOrCol-nRows];
+               break;
+         }
+         node[cnt].rowOrCol = rowOrCol;
+         node[cnt].link = header[rowOrColSum];
+         if ( header[rowOrColSum] == 0 ) 
+            nonZeroPosition[++nonZeroCount] = rowOrColSum;
+         header[rowOrColSum] = cnt;
+      }
+      numberOfSubcells = nonZeroCount;
+   }
+   skipFlag = FALSE;
+   
+   /* If cell i does not split, return at once. */
+   if ( header[m] == 0 || numberOfSubcells == 1 ) {
+      split.oldCellSize = cellSize[i];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell i. */
+   last = startCell[i] + cellSize[i];
+   for ( k = last-1 , p = header[m] ; p != 0 ; --k , p = node[p].link ) {
+      t = node[p].rowOrCol;
+      r = invPointList[t];
+      pointList[r] = pointList[k];
+      pointList[k] = t;
+      invPointList[t] = k;
+      invPointList[pointList[r]] = r; 
+   }
+
+   ++k;
+   ++UpsilonStack->height;
+   for ( r = k ; r < last ; ++r )
+      cellNumber[pointList[r]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = k;
+   parent[UpsilonStack->height] = i;
+   cellSize[UpsilonStack->height] = last - k;
+   cellSize[i] -= (last - k);
+   split.oldCellSize = cellSize[i];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   --numberOfSubcells;
+   return split;
+}
+
+
+/*-------------------------- isRowVsColReducible ---------------------------*/
+
+#define familyParm familyParm_L
+
+#define CELL_TYPE(k) (pointList[startCell[k]] <= D_L->numberOfRows ? ROW : COL)
+
+static RefinementPriorityPair isRowVsColReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   typedef enum{ ROW, COL} CellType;
+   Matrix_01 *D_L = family->familyParm_L[0].ptrParm;
+   RefinementPriorityPair reducingRefn;
+   static Unsigned processingCell = 0, opposingCell = 0;
+   static Unsigned listSize = 0;
+   static UnsignedS *list = NULL;
+   static UnsignedS *freq = NULL;
+   Unsigned i, k, p, maxPos;
+   static Unsigned firstRowCell = 0, firstColCell = 0,
+                   lastRowCell = 0, lastColCell = 0;
+   static UnsignedS *nextCellSameType = NULL;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell;
+
+   /* Allocate list, freq, and nextCellSameType the first time. */
+   if ( !list )
+      list = allocIntArrayDegree();
+   if ( !freq )
+      freq = allocIntArrayDegree();
+   if ( !nextCellSameType ) {
+      nextCellSameType = allocIntArrayDegree();
+      nextCellSameType[0] = 0;
+   }
+
+   /* Check that the refinement mapping really is rowVsColRefine, as 
+      required. */
+   if ( family->refine != rowVsColRefine )
+      ERROR( "isRowVsColReducible", "Error: incorrect refinement mapping");
+
+   /* If the height is 1 (row/col split not yet performed), return 
+      irreducible. */
+   if ( UpsilonStack->height == 1 ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* When the stack height reaches 2 (1 row cell, 1 col cell), perform
+      initializations for nextCellSameType, etc. */
+   if ( UpsilonStack->height == 2 ) {
+      firstRowCell = (CELL_TYPE(1) == ROW) ? 1 : 2;
+      firstColCell = 3 - firstRowCell;
+      lastRowCell = firstRowCell;
+      lastColCell = firstColCell;
+      nextCellSameType[1] = nextCellSameType[2] = 0;
+   }
+
+   /* If we can split the same cell as before using a different intersection
+      count, do so immediately (priority 1). */
+   if ( listSize > 0 ) {
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = 0;
+      reducingRefn.refn.refnParm[2].intParm = list[listSize--];
+      reducingRefn.priority = 1;
+      skipFlag = TRUE;
+      return reducingRefn;
+   }
+
+   /* Consider the next opposing cell for the cell being processed, or the
+      next cell to be processed if there are no more opposing cells.  First
+      we update nextCellSameType  (Note this must be done only here). */
+   for (;;) {
+      if ( nextCellSameType[opposingCell] != 0 )
+         opposingCell = nextCellSameType[opposingCell];
+      else if ( processingCell < UpsilonStack->height ) {
+         ++processingCell;
+         for ( i = MAX(lastRowCell,lastColCell)+1 ; i <= UpsilonStack->height ;
+                                                    ++i ) 
+            switch( CELL_TYPE(i) ) {
+               case ROW:
+                  nextCellSameType[lastRowCell] = i;
+                  lastRowCell = i;
+                  nextCellSameType[i] = 0;
+                  break;
+               case COL:
+                  nextCellSameType[lastColCell] = i;
+                  lastColCell = i;
+                  nextCellSameType[i] = 0;
+                  break;
+            }
+         opposingCell = ( CELL_TYPE(processingCell) == ROW) ? firstColCell:
+                                                              firstRowCell;
+      }
+      else {
+         reducingRefn.priority = IRREDUCIBLE;
+         return reducingRefn;
+      }
+
+      /* Now we try to split opposingCell using processingCell, and an 
+      intersectionCount that guarantees failure.  (This forces rowVsColRefine 
+      to compute the header, etc). */
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = processingCell;
+      reducingRefn.refn.refnParm[2].intParm = UpsilonStack->degree + 1;
+      rowVsColRefine( family->familyParm, reducingRefn.refn.refnParm, 
+                      UpsilonStack);
+                                                  
+      /* If no splitting occured of opposing cell via processing cell is 
+          possible, nonZeroCount will be 1.  If this occurs, skip to the next 
+          pair (processingCell,opposingCell). */
+      if ( nonZeroCount == 1 )
+         continue;
+
+      /* Now we consider all the possible splittings of opposingCell, reject
+         that giving the largest new cell, and put the others on the list. */
+      for ( k = 1 ; k <= nonZeroCount ; ++k) {
+         freq[k] = 1;
+         p = header[nonZeroPosition[k]];
+         while ( node[p].link != 0 ) {
+            ++freq[k];
+            p = node[p].link;
+         }
+      }
+      maxPos = 1;
+      for ( k = 2 ; k <= nonZeroCount ; ++k )
+         if ( freq[k] > freq[maxPos] )
+            maxPos = k;
+      listSize = 0;
+      for ( k = 1 ; k <= nonZeroCount ; ++k )
+         if ( k != maxPos )
+            list[++listSize] = nonZeroPosition[k];
+
+      /* Finally return the first entry on the list. */
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = processingCell;
+      reducingRefn.refn.refnParm[2].intParm = list[listSize--];
+      reducingRefn.priority = 1;    
+      skipFlag = TRUE;
+      return reducingRefn;
+   }
+}   
+      
+#undef familyParm
+
+
+
+
+/*-------------------------- informDesignIsoPtBlk ------------------------*/
+
+static void informDesignIsoPtBlk(
+   Permutation *perm)
+{
+   Unsigned trueDegree = perm->degree, i;
+   Permutation *shiftPerm;
+
+   if ( DD_L->numberOfRows + informCols * DD_L->numberOfCols > 
+                                        options.writeConjPerm ) {
+      printf( "     <permutation written to library file>");
+      return;
+   }
+   
+   perm->degree = DD_L->numberOfRows;
+   printf( "   points: ");
+   writeCyclePerm( perm, 12, 12, 72);
+   perm->degree = trueDegree;
+
+   if ( informCols ) {
+      shiftPerm = newUndefinedPerm( perm->degree);
+      shiftPerm->degree = DD_L->numberOfCols;
+      for ( i = 1 ; i <= DD_L->numberOfCols ; ++i )
+         shiftPerm->image[i] = perm->image[i+DD_L->numberOfRows] - 
+                               DD_L->numberOfRows;
+      printf( "\n\n   blocks: ");
+      writeCyclePerm( shiftPerm, 12, 12, 72);
+      shiftPerm->degree = trueDegree;
+      deletePermutation( shiftPerm);
+   }
+}
+   
diff --git a/src/leon/src/cdesauto.h b/src/leon/src/cdesauto.h
new file mode 100644
index 0000000..9301fad
--- /dev/null
+++ b/src/leon/src/cdesauto.h
@@ -0,0 +1,26 @@
+#ifndef CDESAUTO
+#define CDESAUTO
+
+extern PermGroup *designAutoGroup(
+   Matrix_01 *const D,            /* The matrix whose group is to be found. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     automorphism group of D.  (A null pointer
+                                     designates a trivial group.) */
+   Code *const C)                 /* If nonnull, the auto grp of the code C is
+                                     computed, assuming its group is contained
+                                     in that of the design. */
+;
+
+extern Permutation *designIsomorphism(
+   Matrix_01 *const D_L,          /* The first design. */
+   Matrix_01 *const D_R,          /* The second design. */
+   PermGroup *const L_L,          /* A known subgroup of Aut(D_L), or NULL. */
+   PermGroup *const L_R,          /* A known subgroup of Aut(D_R), or NULL. */
+   Code *const C_L,               /* If nonnull, C_R must also be nonull, and */
+   Code *const C_R,               /*   any isomorphism of C_L to C_R must map */
+                                  /*   D_L to D_R.  A code isomorphism is     */
+                                  /*   computed.  */
+   const BOOLEAN colInformFlag)
+;
+
+#endif
diff --git a/src/leon/src/cent.c b/src/leon/src/cent.c
new file mode 100644
index 0000000..b882c56
--- /dev/null
+++ b/src/leon/src/cent.c
@@ -0,0 +1,625 @@
+/* File cent.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/*  Main program for element centralizer and conjugacy commands.
+   The formats for the commands are:
+
+      cent        <options> <permGroup> <element> <centGroup>
+      cent -conj  <options> <permGroup> <element1> <element2> <conjElement>
+      cent -group <options> <permGroup> <groupToCent> <centGroup>
+
+   where the meaning of the parameters is as follows:
+
+      <permGroup>: The name of the file containing the permutation group G,
+                   or the Cayley library name in which the permutation group
+                   G is defined.  Except in the case of a Cayley library,
+                   a file type of GRP is appended.
+      <pointSet>:  The name of the file containing the point set Lambda, or the
+                   Cayley library name in which the point set Lambda is defined.
+                   Except in the case of a Cayley library, a file type of PTS
+                   is appended.
+      <stabGroup>: The name of the file in which the set stabilizer G_Lambda
+                   is written, or the Cayley library name to which the
+                   definition of G_Lambda is written.  Except in the case of
+                   a Cayley library, a file type of PTS is appended.
+
+   The options are as follows:
+
+      -a          If the output file exists, it will be appended to rather than
+                  overwritten.  (A Cayley library is always appended to rather
+                  than overwritten.)
+
+      -b:<int>    Base change in the subgroup being computed will be performed
+                  at levels fm, fm+1,...,fm+<int>-1 only, where fm is the level
+                  of the first base point (of the subgroup) moved by the current
+                  permutation.  Values below 1 will be raised to 1; those above
+                  the base size will be reduced to the base size.
+
+      -c          Compress the group G after an R-base has been constructed.
+                  This saves a moderate amount of memory at the cost of
+                  relatively little CPU time, but the group (in memory) is
+                  effectively destroyed.
+
+      -crl:<name> The definition of the group G and point set Lambda should be
+                  read from Cayley library <permGroup> in library file <name>.
+
+      -cwl:<name> The definition for the group G_Lambda should be written to
+                  Cayley library <stabGroup> library file <name>.
+
+      -g:<int>    The maximum number of strong generators for the containing
+                  group G.  If, after construction of a base and strong
+                  generating set for G, the number of strong generators is
+                  less than this number, additional strong generators will be
+                  added, chosen to reduce the length of the coset
+                  representatives (as words).   A larger value may increase
+                  speed of computation slightly at the cost of extra space.
+                  If, after construction of the base and strong generating set,
+                  the number of strong generators exceeds this number, at
+                  present strong generators are not removed.
+
+      -gn:<str>   (Set stabilizer only).  The generators for the newly-created
+                  group created are given names <str>01, <str>02, ...  .  If
+                  omitted, the new generators are unnamed.
+
+      -i          The generators of <stabGroup> are to be written in image format.
+
+      -n:<name>   The name for the set stabilizer or coset rep being computed.
+                  (Default: the file name <stabGroup> -- file type omitted)
+
+      -q          As the computation proceeds, writing of information about
+                  the current state to standard output is suppressed.
+
+      -s:<name>   A known subgroup of the set stabilizer being computed.
+                  (Default: no subgroup known)
+
+       -r:<int>   During base change, if insertion of a new base point
+                  expands the size of the strong generating set above
+                  <int> gens (not counting inverses), redundant strong
+                  generators are trimmed from the strong generating set.
+                  (Default 25).
+
+      -t          Upon conclusion, statistics regarding the number of nodes
+                  of the backtrack search tree traversed is written to the
+                  standard output.
+
+      -v          Verify that all files were compiled with the same compile-
+                  time parameters and stop.
+
+      -w:<int>    For set or partition image computations in which the sets
+                  or partitions turn out to be equivalent, a permutation
+                  mapping one to the other is written to the standard output,
+                  as well as a disk file, provided the degree is at most <int>.
+                  (The option is ignored if -q is in effect.)  Default: 100
+
+      -x:<int>    The ideal size for basic cells is set to <int>.
+
+      -z          Subject to the restrictions imposed by the -b option above,
+                  check Prop. 8.3 in "Permutation group algorithms based on
+                  partitions".
+
+   If a base for <permGroup> is not available, one will be computed.  In any
+   the base and strong generating set for <permGroup> will be changed during
+   the computation.
+
+   The return code for set or partition stabilizer computations is as follows:
+      0: computation successful,
+      2: computation terminated due to error.
+   The return code for set or partition image computations is as follows:
+      0: computation successful; sets or partitions are equivalent,
+      1: computation successful; sets or partitions are not equivalent,
+      255: computation terminated due to error.
+*/
+
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "ccent.h"
+#include "errmesg.h"
+#include "permgrp.h"
+#include "readgrp.h"
+#include "readper.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+
+GroupOptions options;
+
+UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack);
+
+static void verifyOptions(void);
+
+int main( int argc, char *argv[])
+{
+   char permGroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        eltOrGrpFileName[MAX_FILE_NAME_LENGTH] = "",
+        *element_L_FileName = eltOrGrpFileName,
+        element_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_Specifier = knownSubgroupSpecifier,
+        knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_FileName = knownSubgroupFileName,
+        knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        outputFileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1, centPartnCount, centGenCount, startOptions;
+   char outputObjectName[MAX_NAME_LENGTH+1] = "",
+        outputLibraryName[MAX_NAME_LENGTH+1] = "",
+        permGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        eltOrGrpLibraryName[MAX_NAME_LENGTH+1] = "",
+        knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        *element_L_LibraryName = eltOrGrpLibraryName,
+        element_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        *knownSubgroup_L_LibraryName = knownSubgroupLibraryName,
+        knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH];
+   PermGroup *G, *G_pP, *L = NULL, *L_L = NULL, *L_R = NULL, *E;
+   Permutation *y;
+   Permutation *e, *f;
+   BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE, noPartn = FALSE,
+           longCycleOption, stdRBaseOption;
+   Unsigned symmetricDegree = 0;
+   char tempArg[8], *nextChar;
+   enum { ELT_CENTRALIZER, ELT_CONJUGATE, GROUP_CENTRALIZER} computationType =
+                                                             ELT_CENTRALIZER;
+   char comment[100];
+
+   /* Check whether the first parameter is conj or group.  If so, a conjugacy
+      (rather than centralizer) or group centralizer computation will be
+      performed, and the valid remaining parameters will be different. */
+   if ( argc > 1 ) {
+      strncpy( tempArg, argv[1], 8);
+      tempArg[7] = '\0';
+      lowerCase( tempArg);
+      if ( strcmp( tempArg, "-conj") == 0 ) {
+         computationType = ELT_CONJUGATE;
+         imageFlag = TRUE;
+         startOptions = 2;
+      }
+      else if ( strcmp( tempArg, "-group") == 0 ) {
+         computationType = GROUP_CENTRALIZER;
+         imageFlag = FALSE;
+         startOptions = 2;
+      }
+      else {
+         computationType = ELT_CENTRALIZER;
+         imageFlag = FALSE;
+         startOptions = 1;
+      }
+   }
+   else
+      startOptions = 1;
+
+   /* Provide help if no arguments are specified. Note i and j must be as
+      described above. */
+   if ( startOptions == argc ) {
+      switch( computationType ) {
+         case ELT_CENTRALIZER:  
+             printf( "\nUsage:  cent [options] permGroup permutation centralizerSubgroup\n");
+             break;
+         case GROUP_CENTRALIZER:  
+             printf( "\nUsage:  gcent [options] permGroup1 permGroup2 centralizerSubgroup\n");
+             break;
+         case ELT_CONJUGATE:  
+             printf( "\nUsage:  conj [options] permGroup permutation1 permutation2 conjugatingElement\n");
+             break;
+      }
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position i (i as above) give
+      limits and return. */
+   if ( startOptions < argc && (strcmp(argv[startOptions], "-l") == 0 || 
+                                strcmp(argv[startOptions], "-L") == 0) ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( startOptions < argc && (strcmp(argv[startOptions], "-v") == 0 || 
+                                strcmp(argv[startOptions], "-V") == 0) )
+      verifyOptions();
+   if ( argc < 4 )
+      ERROR( "main (cent)", "Too few parameters.")
+
+   /* Check for exactly 3 (centralizer) or 4 (conjugate) parameters
+      following options.  Note i must be as above. */
+   for ( optionCountPlus1 = startOptions ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 != 3 + imageFlag ) {
+      ERROR1i( "Centralizer", "Exactly ", 3+imageFlag,
+               " non-option parameters are required.");
+      exit(ERROR_RETURN_CODE);
+   }
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.statistics = FALSE;
+   options.inform = TRUE;
+   options.compress = TRUE;
+   options.maxBaseChangeLevel = UNKNOWN;
+   options.maxStrongGens = 70;
+   options.idealBasicCellSize = 4;
+   options.trimSGenSetToSize = 35;
+   options.strongMinDCosetCheck = FALSE;
+   options.writeConjPerm = MAX_COSET_REP_PRINT;
+   options.restrictedDegree = 0;
+   options.alphaHat1 = 0;
+   parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName,
+                     outputLibraryName);
+   strncpy( options.genNamePrefix, outputLibraryName, 4);
+   options.genNamePrefix[4] = '\0';
+   strcpy( options.outputFileMode, "w");
+   centPartnCount = 10;
+   centGenCount = 3;
+   longCycleOption = FALSE;
+   stdRBaseOption = FALSE;
+
+   /* Note i must still be as above. */
+   for ( i = startOptions ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp( argv[i], "-a1:", 4) == 0 &&
+                (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-b:", 3) == 0 &&
+                (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-g:", 3) == 0 &&
+                (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (setstab)", "Invalid value for -gn option")
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( outputObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (setstab)", "Invalid name ", outputObjectName,
+                     " for stabilizer group or coset rep.")
+      else if ( strcmp( argv[i], "-np") == 0 )
+         noPartn = TRUE;
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strncmp( argv[i], "-r:", 3) == 0 &&
+                (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 )
+         strcpy( knownSubgroupSpecifier, argv[i]+3);
+      else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 )
+         strcpy( knownSubgroup_L_Specifier, argv[i]+4);
+      else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 )
+         strcpy( knownSubgroup_R_Specifier, argv[i]+4);
+      else if ( strcmp( argv[i], "-s") == 0 )
+         options.statistics = TRUE;
+      else if ( strncmp( argv[i], "-w:", 3) == 0 &&
+                (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-x:", 3) == 0 &&
+                (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-z") == 0 )
+         options.strongMinDCosetCheck = TRUE;
+      else if ( strncmp( argv[i], "-cp:", 4) == 0 &&
+                (centPartnCount = (Unsigned) strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-cg:", 4) == 0 &&
+                (centGenCount = (Unsigned) strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-lc" ) == 0 )
+         longCycleOption = TRUE;
+      else if ( strcmp( argv[i], "-srb" ) == 0 )
+         stdRBaseOption = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute names for files and name for set stabilizer or coset rep. */
+   if ( argv[optionCountPlus1][0] == SYMMETRIC_GROUP_CHAR ) {
+      errno = 0;
+      symmetricDegree = (Unsigned) strtol(argv[i]+1,&nextChar,0);
+      if ( errno != 0 || symmetricDegree < 1 || symmetricDegree > options.maxDegree ||
+                         (*nextChar != ' ' && *nextChar != '\0') )
+         ERROR( "main (compute subgroup)", "Invalid symmetric group")
+   }
+   else
+      parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                        permGroupFileName, permGroupLibraryName);
+   switch( computationType) {
+      case ELT_CENTRALIZER:
+      case GROUP_CENTRALIZER:
+         parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                           eltOrGrpFileName, eltOrGrpLibraryName);
+         parseLibraryName( argv[optionCountPlus1+2], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroupSpecifier[0] != '\0' )
+            parseLibraryName( knownSubgroupSpecifier, prefix, suffix,
+                              knownSubgroupFileName, knownSubgroupLibraryName);
+         break;
+      case ELT_CONJUGATE:
+         parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                           element_L_FileName, element_L_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+2], prefix, suffix,
+                           element_R_FileName, element_R_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+3], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroup_L_Specifier[0] != '\0' )
+            parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix,
+                              knownSubgroup_L_FileName, knownSubgroup_L_LibraryName);
+         if ( knownSubgroup_R_Specifier[0] )
+            parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix,
+                              knownSubgroup_R_FileName, knownSubgroup_R_LibraryName);
+   }
+
+   /* Read in the containing group G. */
+   if ( symmetricDegree == 0 )
+      G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate");
+   else {
+      G = allocPermGroup();
+      sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, symmetricDegree);
+      G->degree = symmetricDegree;
+      G->baseSize = 0;
+   }
+
+   /* Read in the known subgroups, if present. */
+   switch ( computationType ) {
+      case ELT_CENTRALIZER:
+      case GROUP_CENTRALIZER:
+         if ( knownSubgroupSpecifier[0] )
+            L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName,
+                               G->degree, "Generate");
+         break;
+      case ELT_CONJUGATE:
+         if ( knownSubgroup_L_Specifier[0] )
+            L_L = readPermGroup( knownSubgroup_L_FileName,
+                       knownSubgroup_L_LibraryName, G->degree, "Generate");
+         if ( knownSubgroup_R_Specifier[0] )
+            L_R = readPermGroup( knownSubgroup_R_FileName,
+                       knownSubgroup_R_LibraryName, G->degree, "Generate");
+         break;
+   }
+
+   /* Read in the element to be centralized, the group to be centralized, or
+      the elements for which to check conjugacy. */
+   switch ( computationType ) {
+      case ELT_CENTRALIZER:
+         e = readPermutation( eltOrGrpFileName, eltOrGrpLibraryName, G->degree,
+                              TRUE);
+         break;
+      case GROUP_CENTRALIZER:
+         E = readPermGroup( eltOrGrpFileName, eltOrGrpLibraryName, G->degree,
+                            "Generate");
+         break;
+      case ELT_CONJUGATE:
+         e = readPermutation( element_L_FileName, element_L_LibraryName,
+                                G->degree, TRUE);
+         f = readPermutation( element_R_FileName, element_R_LibraryName,
+                                G->degree, TRUE);
+         break;
+   }
+
+   /* Compute maximum base change level if not specified as option. */
+   if ( options.maxBaseChangeLevel == UNKNOWN )
+      options.maxBaseChangeLevel =
+         isDoublyTransitive(G) ?
+            ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) :
+            ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6));
+
+   /* Compute the centralizer or conjugating element and write it out. */
+   switch ( computationType ) {
+      case ELT_CENTRALIZER:
+         if ( options.inform ) {
+            printf( "\n\n               Element Centralizer Program:  "
+                    "Group %s, Element %s\n\n", G->name, e->name);
+            if ( L )
+               printf( "\nKnown Subgroup: %s\n", L->name);
+         }
+         options.groupOrderMessage = "Centralizer";
+         G_pP = centralizer( G, e, L, noPartn, longCycleOption,
+                             stdRBaseOption);
+         strcpy( G_pP->name, outputObjectName);
+         G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         sprintf( comment,
+                 "The centralizer in permutation group %s of permutation %s.",
+                 G->name, e->name);
+         writePermGroup( outputFileName, outputLibraryName, G_pP, comment);
+         break;
+      case GROUP_CENTRALIZER:
+         if ( options.inform ) {
+            printf( "\n\n               Group Centralizer Program:  "
+                    "Centralizer in %s of %s\n\n", G->name, E->name);
+            if ( L )
+               printf( "\nKnown Subgroup: %s\n", L->name);
+         }
+         options.groupOrderMessage = "Group centralizer";
+         G_pP = groupCentralizer( G, E, L, centPartnCount, centGenCount);
+         strcpy( G_pP->name, outputObjectName);
+         G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         sprintf( comment,
+                 "The centralizer in permutation group %s of permutation group %s.",
+                 G->name, E->name);
+         writePermGroup( outputFileName, outputLibraryName, G_pP, comment);
+         break;
+      case ELT_CONJUGATE:
+         if ( options.inform ) {
+            printf( "\n\n\n         Element Conjugacy Program:  "
+                    "Group %s, Elements %s and %s\n\n", G->name,
+                    e->name, f->name);
+            if ( L_L )
+               printf( "\nKnown Subgroup (left):  %s", L_L->name);
+            if ( L_R )
+               printf( "\nKnown Subgroup (right): %s", L_R->name);
+            if ( L_L || L_R )
+               printf( "\n");
+         }
+         options.cosetRepMessage = 
+             "The first permutation is conjugated to the second by group element:";
+         options.noCosetRepMessage = 
+             "The two permutations are not conjugate under the group.";
+         y = conjugatingElement( G, e, f, L_L, L_R, noPartn, longCycleOption,
+                                 stdRBaseOption);
+         if ( y ) {
+            strcpy( y->name, outputObjectName);
+            sprintf( comment,
+               "A permutation in group %s mapping permutation %s to permutation %s.",
+                     G->name, e->name, f->name);
+            if ( imageFormatFlag )
+               writePermutation( outputFileName, outputLibraryName, y, "image", comment);
+            else
+               writePermutation( outputFileName, outputLibraryName, y, "", comment);
+         }
+         break;
+   }
+
+   freePermGroup(G);
+
+   /* Return to caller. */
+   if ( !imageFlag || y )
+      return 0;
+   else
+      return 1;
+}
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xccent ( CompileOptions *cOpts);
+   extern void xchbase( CompileOptions *cOpts);
+   extern void xcompcr( CompileOptions *cOpts);
+   extern void xcompsg( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xcstrba( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xinform( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xoptsve( CompileOptions *cOpts);
+   extern void xorbit ( CompileOptions *cOpts);
+   extern void xorbref( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xptstbr( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xrpriqu( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xccent ( &mainOpts);
+   xchbase( &mainOpts);
+   xcompcr( &mainOpts);
+   xcompsg( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xcstrba( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xinform( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xoptsve( &mainOpts);
+   xorbit ( &mainOpts);
+   xorbref( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xptstbr( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpe( &mainOpts);
+   xrpriqu( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/cent.h b/src/leon/src/cent.h
new file mode 100644
index 0000000..fac1663
--- /dev/null
+++ b/src/leon/src/cent.h
@@ -0,0 +1,7 @@
+#ifndef CENT
+#define CENT
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/chbase.c b/src/leon/src/chbase.c
new file mode 100644
index 0000000..c2ee124
--- /dev/null
+++ b/src/leon/src/chbase.c
@@ -0,0 +1,561 @@
+/* File chbase.c.  Contains functions performing base changes in permutation
+   groups, as follows:
+
+      insertBasePoint:   Insert a new point at specified level into the
+                         base for a permutation group.
+
+      changeBase:        Change the base for a permutation group. */
+
+#include <stddef.h>
+
+#include "group.h"
+
+#include "addsgen.h"
+#include "cstborb.h"
+#include "errmesg.h"
+#include "essentia.h"
+#include "factor.h"
+#include "new.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "randgrp.h"
+#include "storage.h"
+
+#include "repinimg.h"
+#include "settoinv.h"
+
+extern GroupOptions options;
+
+CHECK( chbase)
+
+#define MAX_CONJ_LEVEL 4
+
+
+/*-------------------------- insertBasePoint ------------------------------*/
+
+/* The function insertBasePoint may be used to insert a new point into the
+   base for a permutation group at a specified level.  Base points at a
+   lower level are unchanged.  At a higher level, the new base points are
+   arbitrary; redundant base points at a higher level are removed.  It is
+   assumed that the base point to be inserted differs from all base points
+   at a higher level.  A random Schreier approach is used.  Currently all
+   words are multiplied out at generated.
+
+   Note: insertBasePoint does not work for groups that have been compressed
+         nor on groups for which inverse permutations exist. */
+
+
+void insertBasePoint(
+   PermGroup *G,           /* The permutation group (base and sgs known). */
+   Unsigned newLevel,      /* If newLevel = i and newBasePoint = b, the   */
+   Unsigned newBasePoint)  /*   base for G is changed from (b[1],...,     */
+                           /*   b(i-1),...) to (b[1],...,b[i-1],b,...).   */
+{
+    Unsigned level, pt, image, i, uTemp1, uTemp2, uTemp3;
+    UnsignedS *conjugateMap, *conjugateMapInv, *tempImg;
+    UnsignedS *temp1, *temp2, *temp3, *temp4;
+    FactoredInt oldOrder, oldLen;
+    Permutation *gen, *tempGen, *randGen;
+    Permutation **svec, **tempSVec, **temp5;
+    UnsignedS *oldBasicOrbLen = allocIntArrayBaseSize();
+    UnsignedS **oldBasicOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+    Permutation ***oldSchreierVec = (Permutation ***) allocPtrArrayBaseSize();
+    char *isGenAtLevel = allocBooleanArrayBaseSize();
+    unsigned loopCount = 0;   /* For bug fix wrt random number generator. */
+
+    /* First we handle the trivial case in which newLevel == G->baseSize+1
+       (The largest value it should ever have).  Here we just extend
+       the base. */
+    if ( newLevel == G->baseSize+1 ) {
+       G->base[++G->baseSize] = newBasePoint;
+       G->basicOrbLen[G->baseSize] = 1;
+       G->basicOrbit[G->baseSize] = allocIntArrayDegree();
+       G->basicOrbit[G->baseSize][1] = G->base[G->baseSize];
+       G->schreierVec[G->baseSize] = allocPtrArrayDegree();
+       for ( i = 1 ; i <= G->degree ; ++i )
+          G->schreierVec[G->baseSize][i] = NULL;
+       G->schreierVec[G->baseSize][G->base[G->baseSize]] = FIRST_IN_ORBIT;
+       freeIntArrayBaseSize( oldBasicOrbLen);
+       freePtrArrayBaseSize( oldBasicOrbit);
+       freePtrArrayBaseSize( oldSchreierVec);
+       freeBooleanArrayBaseSize( isGenAtLevel);
+       return;
+    }
+
+   /* If the base point is already present at the correct level, there is
+      nothing to do, so return. */
+   if ( G->base[newLevel] == newBasePoint ) {
+      freeIntArrayBaseSize( oldBasicOrbLen);
+      freePtrArrayBaseSize( oldBasicOrbit);
+      freePtrArrayBaseSize( oldSchreierVec);
+      freeBooleanArrayBaseSize( isGenAtLevel);
+      return;
+   }
+
+   /* If the new base point is conjugate in G^(newLevel) to the old, and if
+      newLevel <= MAX_CONJ_LEVEL, we merely conjugate the old base and
+      return. */
+   if ( newLevel <= MAX_CONJ_LEVEL && G->schreierVec[newLevel][newBasePoint] ) {
+      conjugateMapInv = allocIntArrayDegree();
+      conjugateMap = allocIntArrayDegree();
+      tempSVec = allocPtrArrayDegree();
+      for ( pt = 1 ; pt <= G->degree ; ++pt )
+         conjugateMapInv[pt] =
+                  G->schreierVec[newLevel][newBasePoint]->invImage[pt];
+      image = conjugateMapInv[newBasePoint];
+      while ( image != G->base[newLevel] ) {
+         REPLACE_BY_INV_IMAGE( conjugateMapInv, G->schreierVec[newLevel][image],
+            G->degree, temp1, temp2, temp3, temp4)
+         image = conjugateMapInv[newBasePoint];
+      }
+      SET_TO_INVERSE( conjugateMapInv, conjugateMap, G->degree,
+                      temp1, temp2, uTemp1, uTemp2, uTemp3)
+      for ( level = 1 ; level <= G->baseSize ; ++level ) {
+         G->base[level] = conjugateMap[G->base[level]];
+         for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i )
+            G->basicOrbit[level][i] = conjugateMap[G->basicOrbit[level][i]];
+         for ( pt = 1 ; pt <= G->degree ; ++pt )
+            tempSVec[conjugateMap[pt]] = G->schreierVec[level][pt];
+         EXCHANGE( G->schreierVec[level], tempSVec, temp5)
+      }
+      tempImg = conjugateMapInv;
+      for ( gen = G->generator ; gen ; gen = gen->next ) {
+         for ( pt = 1 ; pt <= G->degree ; ++pt )
+            tempImg[conjugateMap[pt]] = conjugateMap[gen->image[pt]];
+         EXCHANGE( gen->image, tempImg, temp4);
+         if ( gen->invImage == tempImg )
+            gen->invImage = gen->image;
+         else {
+            SET_TO_INVERSE( gen->image, gen->invImage, G->degree,
+                            temp1, temp2, uTemp1, uTemp2, uTemp3)
+         }
+      }
+      freeIntArrayDegree( conjugateMap);
+      freeIntArrayDegree( tempImg);
+      freePtrArrayDegree( tempSVec);
+      freeIntArrayBaseSize( oldBasicOrbLen);
+      freePtrArrayBaseSize( oldBasicOrbit);
+      freePtrArrayBaseSize( oldSchreierVec);
+      freeBooleanArrayBaseSize( isGenAtLevel);
+      return;
+   }
+
+   /* ??????????  probably not needed
+      If the new base point is present at a higher level, we record that level
+      in variable oldLevel.  Otherwise set oldLevel to G->baseSize+1.
+      for ( oldLevel = newLevel+1 ; oldLevel <= G->baseSize &&
+            G->base[oldLevel] != newBasePoint ; ++oldLevel )
+         ;
+   */
+
+   /* Now we insert the new base point into the base for G.  Note the base point
+      may be duplicated at a higher level.  This shouldn't cause a problem, and
+      later it will be deleted as redundant.  At this point, we don't allocate
+      another basic orbit vector or Schreier vector. */
+   randGen = newIdentityPerm(G->degree);
+   ++G->baseSize;
+   if ( G->baseSize > options.maxBaseSize )
+      ERROR1i( "insertBasePoint", "Base size exceeded maximum of ",
+                options.maxBaseSize, ".  Rerun with -mb option.");
+   for ( level = G->baseSize ; level > newLevel ; --level )
+      G->base[level] = G->base[level-1];
+   G->base[newLevel] = newBasePoint;
+
+   /* Here we allocate new basic-orbit vectors and Schreier vectors for G
+      at levels newLevel and higher.  (The old basic-orbit vectors and
+      Schreier vectors at these levels must preserved at this point; this will
+      be done in arrays oldBasicOrbit and oldSchreierVec, and the old
+      basic orbit lengths at levels newLevel and higher will be preserved in
+      oldBasicOrbLen.) */
+   for ( level = newLevel ; level <= G->baseSize ; ++level ) {
+      oldBasicOrbLen[level] = G->basicOrbLen[level];
+      oldBasicOrbit[level] = G->basicOrbit[level];
+      oldSchreierVec[level] = G->schreierVec[level];
+      G->basicOrbit[level] = allocIntArrayDegree();
+      G->schreierVec[level] = allocPtrArrayDegree();
+   }
+
+   /* Here we record the order of G, and then modify it to remove the
+      contribution of the basic orbits at levels newLevel and above.  We
+      also set these basic orbit lengths to 1. */
+   oldOrder = *G->order;
+   for ( level = newLevel ; level < G->baseSize ; ++level ) {
+      oldLen = factorize( oldBasicOrbLen[level]);
+      factDivide( G->order, &oldLen);
+      G->basicOrbLen[level] = 1;
+   }
+   G->basicOrbLen[G->baseSize] = 1;
+
+   /* Here we adjust the levels of the generators of G.  Generators not
+      essential at some level less than newLevel are flagged for later
+      removal by setting their level to 0.  These generators cannot be
+      deleted now because their invImage fields are still needed below.
+      However, the image field will be deleted now unless it is the
+      invImage field of another generator (i.e., unless the
+      inversePermutation field is nonnull.  (Note that temporarily
+      we have an invalid data structure for permutations.)  We also flag
+      those integers i with i >= newLevel for which there remains a
+      generator at level i. */
+   for ( level = newLevel ; level <= G->baseSize ; ++level )
+      isGenAtLevel[level] = FALSE;
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( ESSENTIAL_BELOW_LEVEL(gen,newLevel) ) {
+         if ( gen->level >= newLevel ) {
+            gen->level = (gen->image[newBasePoint] != newBasePoint ) ?
+                         newLevel : (gen->level + 1);
+            isGenAtLevel[gen->level] = TRUE;
+         }
+      }
+      else {
+         gen->level = 0;
+         if ( gen->image != gen->invImage ) {
+            freeIntArrayDegree( gen->image);
+            gen->image = NULL;
+         }
+         MAKE_NOT_ESSENTIAL_ALL( gen);
+      }
+
+   /* Now we construct the initial basic orbits at levels newLevel and
+      higher, using any old generators retained because they were
+      essential at a higher level. Note constructBasicOrbit must
+      must flag essential generators.  We also adjust the order of G*/
+   for ( level = newLevel ; level <= G->baseSize ; ++level )
+      if ( isGenAtLevel[level] )
+         constructBasicOrbit( G, level, "FindEssential");
+      else {
+         G->basicOrbit[level][1] = G->base[level];
+         for ( pt = 1 ; pt <= G->degree ; ++pt )
+            G->schreierVec[level][pt] = NULL;
+         G->schreierVec[level][G->base[level]] = FIRST_IN_ORBIT;
+      }
+
+   /* Now we repeatedly construct and test random elements of G^(newLevel)
+      until the product of the basic orbit lengths is large enough, i.e.,
+      until newOrder = oldOrder. */
+   while ( !factEqual( &oldOrder, G->order) ) {
+
+      /* Set randGen to a random permutation of G^(newLevel). */
+      for ( i = 1 ; i <= G->degree ; ++i )
+         randGen->image[i] = i;
+      for ( level = newLevel ; level < G->baseSize ; ++level ) {
+         ++loopCount;                       /* These four lines shouldn't */
+         if ( loopCount % 37 == 0  ||       /* be needed.  They overcome */
+              loopCount % 181 == 0 )        /* a deficiency in the random */
+            randInteger(1,2);               /* number generator. */
+         pt = oldBasicOrbit[level][ randInteger(1,oldBasicOrbLen[level]) ];
+         svec = oldSchreierVec[level];
+         while ( svec[pt] != FIRST_IN_ORBIT ) {
+            REPLACE_BY_INV_IMAGE( randGen->image, svec[pt], G->degree,
+                                  temp1, temp2, temp3, temp4)
+            pt = svec[pt]->invImage[pt];
+         }
+      }
+
+      /* Attempt to factor randGen in terms of the new base.  The loop
+         terminates normally with level == G->baseSize+1 if g can be factored,
+         and it terminates via the exit statement with level <= G->baseSize
+         otherwise. */
+      for ( level = newLevel ; level <= G->baseSize ; ++level ) {
+         if ( G->schreierVec[level][randGen->image[G->base[level]]] == NULL )
+            break;
+         while ( randGen->image[G->base[level]] != G->base[level] ) {
+            REPLACE_BY_INV_IMAGE( randGen->image,
+                           G->schreierVec[level][randGen->image[G->base[level]]],
+                           G->degree, temp1, temp2, temp3, temp4)
+         }
+      }
+
+      /* If randGen could not be factored, we adjoin it (as modified above)
+         as a strong generator relative to the new base.  Note that the level of
+         randGen is the current value of the variable level.  If randperm is
+         added, we reallocate it. */
+      if ( level <= G->baseSize ) {
+         if ( isInvolution( randGen) ) {
+            if ( randGen->image != randGen->invImage )
+               freeIntArrayDegree( randGen->invImage);
+            randGen->invImage = randGen->image;
+         }
+         else {
+            if ( randGen->image == randGen->invImage )
+               randGen->invImage = allocIntArrayDegree();
+            SET_TO_INVERSE( randGen->image, randGen->invImage, G->degree,
+                            temp1, temp2, uTemp1, uTemp2, uTemp3)
+         }
+         addStrongGenerator( G, randGen, newLevel==1);
+         randGen = newIdentityPerm( G->degree);
+      }
+   }
+
+   /* Now we free the old basic orbit vectors and Schreier vectors, as well as
+      the permutation randGen. */
+   for ( level = newLevel ; level < G->baseSize ; ++level ) {
+      freeIntArrayDegree( oldBasicOrbit[level]);
+      freePtrArrayDegree( oldSchreierVec[level]);
+   }
+   deletePermutation( randGen);
+
+   /* Now we remove generators flagged for removal above.  Note we cannot
+      employ deletePermutation because we do not have a valid permutation
+      data structure, as noted above.  */
+   gen = G->generator;
+   while ( gen )
+      if ( gen->level == 0 ) {
+         if ( gen->last )
+            gen->last->next = gen->next;
+         else
+            G->generator = gen->next;
+         if ( gen->next )
+            gen->next->last = gen->last;
+         tempGen = gen;
+         gen = gen->next;
+         freeIntArrayDegree( tempGen->invImage);
+         freePermutation( tempGen);
+      }
+      else
+         gen = gen->next;
+
+   /* Finally we remove redundant base points at level newLevel+1 or greater. */
+   for ( level = newLevel+1 ; level <= G->baseSize ; ++level )
+      if ( G->basicOrbLen[level] == 1 ) {
+         --G->baseSize;
+         freeIntArrayDegree( G->basicOrbit[level]);
+         freePtrArrayDegree( G->schreierVec[level]);
+         for ( i = level ; i <= G->baseSize ; ++i ) {
+            G->base[i] = G->base[i+1];
+            G->basicOrbLen[i] = G->basicOrbLen[i+1];
+            G->basicOrbit[i] = G->basicOrbit[i+1];
+            G->schreierVec[i] = G->schreierVec[i+1];
+         }
+         for ( gen = G->generator ; gen ; gen = gen->next )
+            if ( gen->level > level ) {
+               --gen->level;
+               for ( i = level ; i <= G->baseSize ; ++i )
+                  if ( ESSENTIAL_AT_LEVEL(gen,i+1) )
+                     MAKE_ESSENTIAL_AT_LEVEL(gen,i);
+                  else
+                     MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,i);
+               MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,G->baseSize+1);
+            }
+         --level;
+      }
+
+   freeIntArrayBaseSize( oldBasicOrbLen);
+   freePtrArrayBaseSize( oldBasicOrbit);
+   freePtrArrayBaseSize( oldSchreierVec);
+   freeBooleanArrayBaseSize( isGenAtLevel);
+}
+
+
+/*-------------------------- changeBase -----------------------------------*/
+
+/* The function changeBase changes the base (and updates the strong
+   generating set) for a permutation group with known base and strong
+   generating set. */
+
+void changeBase(
+   PermGroup *G,        /* The permutation group. */
+   UnsignedS *newBase)  /* An origin-1 null-terminated sequence of points. */
+                        /*   The new base will consist of newBase, followed */
+                        /*   by arbitrary extra points as needed.  Redundant */
+                        /*   base points will not be deleted from newBase,  */
+                        /*   but no redundant points will be adjoined.      */
+{
+   Unsigned level;
+
+   for ( level = 1 ; newBase[level] ; ++level )
+      if ( level > G->baseSize || G->base[level] != newBase[level] )
+         insertBasePoint( G, level, newBase[level]);
+}
+
+
+/*-------------------------- constructCandidateList -----------------------*/
+
+/* This static function constructCandidateList( G, level) is called only by
+   function removeRedunSGens.  It constructs and returns an xNext-linked list
+   of all generators of G at level level or above, ordered so that presumably
+   "desirable" generators occur first.  The ordering is as follows:
+      0)  Generators essential at levels level-1 or higher come first.
+      1)  A single generator at level level, if not present in (1) above, comes
+          next.
+      2)  Generators essential at levels level+1,..,G->baseSize come next.
+      3)  Any remaining generators at level level come next.
+      4)  Finally, any remaining generators at levels level+1,...,G->baseSize
+          come last.
+   At a given level, involutory generators precede noninvolutory ones.
+   Note the xLast field is used as a flag here; a null value signifies that
+   the generator is not to be considered for addition to the list, either
+   because it has level below level or it is already on the list. */
+
+#define ADD_TO_LIST(i)    \
+      (gen->xLast = NULL , gen->image == gen->invImage) ?    \
+         ( gen->xNext = listHeader[2*i] , listHeader[2*i] = gen ) :   \
+         ( gen->xNext = listHeader[2*i+1]   , listHeader[2*i+1]   = gen )
+
+
+static Permutation *constructCandidateList(
+   PermGroup *G,
+   const Unsigned level)
+{
+   Unsigned m;
+   Permutation *listHeader[10] = {NULL}, *combinedList, *endPreviousList, *gen;
+   BOOLEAN     genAtLevelAdded = FALSE;
+
+   /* Initializer xLast, as above. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      gen->xLast =  ( gen->level >= level ) ? (Permutation *) TRUE : NULL;
+
+   /* First we add any generators in class (0) above. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->xLast && ESSENTIAL_BELOW_LEVEL(gen,level) ) {
+         ADD_TO_LIST(0);
+         if ( gen->level == level )
+            genAtLevelAdded = TRUE;
+      }
+
+   /* Next we add a possible generator in class (1) above. */
+   if ( !genAtLevelAdded )
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         if ( gen->xLast && gen->level == level ) {
+            ADD_TO_LIST(1);
+            break;
+         }
+
+   /* Next we add any generators in class (2) above. */
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         if ( gen->xLast && ESSENTIAL_ABOVE_LEVEL(gen,level) )
+            ADD_TO_LIST(2);
+
+   /* Next we add any generators in class (3) above. */
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         if ( gen->xLast && gen->level == level )
+            ADD_TO_LIST(3);
+
+   /* Finally we add any generators in class (4) above. */
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         if ( gen->xLast )
+            ADD_TO_LIST(4);
+
+   /* Finally we concatenate the lists. */
+   combinedList = NULL;
+   endPreviousList = NULL;
+   for ( m = 0 ; m <= 9 ; ++ m )
+      if ( listHeader[m] ) {
+         if ( endPreviousList )
+            endPreviousList->xNext = listHeader[m];
+         else
+            combinedList = listHeader[m];
+         for ( endPreviousList = listHeader[m] ;
+               endPreviousList->xNext ;
+               endPreviousList = endPreviousList->xNext )
+            ;
+         endPreviousList->xNext = NULL;
+      }
+
+   /* Return a pointer to the list. */
+   return combinedList;
+}
+
+
+/*-------------------------- removeRedunSGens -----------------------------*/
+
+/* The function removeRedunSGens( G, startLevel) removes redundant strong
+   generators from the group G at levels startLevel,startLevel+1,..,G->baseSize.
+   The essential fields at levels 1,...,startLevel-1 must be set; the function
+   sets those at other levels.  Inverse permutations must not yet have been
+   added.  The function returns the number of generators removed. */
+
+Unsigned removeRedunSGens(
+   PermGroup *G,
+   Unsigned startLevel)
+{
+   Unsigned level, correctOrbLen, pt;
+   Unsigned removalCount = 0;
+   Permutation *gen, *firstGen, *newGen, *tempGen;
+   FactoredInt factoredOrbLen;
+
+   /* Flag all generators as nonessential at levels startLevel,startLevel+1,...,
+      G->baseSize. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      MAKE_NOT_ESSENTIAL_ATABOV_LEVEL( gen, startLevel);
+
+   /* Reconstruct basic orbits and Schreier vectors at levels G->baseSize,...,
+      startLevel until each orbit has correct length. */
+   for ( level = G->baseSize ; level >= startLevel ; --level ) {
+      correctOrbLen = G->basicOrbLen[level];
+      firstGen = constructCandidateList( G, level);
+      factoredOrbLen = factorize( G->basicOrbLen[level]);
+      factDivide( G->order, &factoredOrbLen);
+      G->basicOrbLen[level] = 1;
+      G->basicOrbit[level][1] = G->base[level];
+      for ( pt = 1 ; pt <= G->degree ; ++pt )
+         G->schreierVec[level][pt] = NULL;
+      G->schreierVec[level][G->base[1]] = FIRST_IN_ORBIT;
+      while ( G->basicOrbLen[level] < correctOrbLen ) {
+         newGen = genExpandingBasicOrbit( &firstGen, G->basicOrbLen[level],
+                                G->basicOrbit[level], G->schreierVec[level]);
+         MAKE_ESSENTIAL_AT_LEVEL(newGen,level);
+         constructBasicOrbit( G, level, "KnownEssential" );
+      }
+   }
+
+   /* Free generators that are not essential at any level. */
+   gen = G->generator;
+   while ( gen )
+      if ( ! ESSENTIAL_BELOW_LEVEL(gen,G->baseSize+1 ) ) {
+         if ( gen->last )
+            gen->last->next = gen->next;
+         else
+            G->generator = gen->next;
+         if ( gen->next )
+            gen->next->last = gen->last;
+         tempGen = gen;
+         gen = gen->next;
+         deletePermutation( tempGen);
+         ++removalCount;
+      }
+      else
+         gen = gen->next;
+
+   /* Return to caller. */
+   return removalCount;
+}
+
+
+/*-------------------------- restrictBasePoints ---------------------------*/
+
+/* The function restrictBasePoints( G, acceptablePoint) attempts to change
+   the base for G so that all base points lie in the 1-based null-terminated
+   list acceptablePoint of points.  It produces a base of the form        
+   a[1],...,a[m],a[m+1],...,a[k], where a[1],...,a[m] lie in the list of
+   acceptable points and where any permutation in G^(m+1) fixes any point in 
+   the list.  It returns m. */
+
+Unsigned restrictBasePoints(
+   PermGroup *const G,
+   Unsigned *acceptablePoint)
+{
+   Unsigned level, i, pt;
+   char *isAcceptable;
+
+   isAcceptable = allocBooleanArrayDegree();
+   for ( i = 1 ; i <= G->degree ; ++i )
+      isAcceptable[i] = FALSE;
+   for ( i = 1 ; acceptablePoint[i] != 0 ; ++i )
+      isAcceptable[acceptablePoint[i]] = TRUE;
+      
+   for ( level = 1 ; level <= G->baseSize ; ++level ) 
+      if ( !isAcceptable[G->base[level]] )  {
+         for ( i = 1 ; (pt = acceptablePoint[i]) != 0 ; ++i ) 
+            if ( !isFixedPointOf( G, level, pt) ) {
+               insertBasePoint( G, level, pt);
+               break;
+            }
+         if ( pt == 0 ) {
+            freeBooleanArrayDegree( isAcceptable);
+            return level-1;
+         }
+      }
+
+   freeBooleanArrayDegree( isAcceptable);
+   return G->baseSize;
+}
diff --git a/src/leon/src/chbase.h b/src/leon/src/chbase.h
new file mode 100644
index 0000000..6b3cd1f
--- /dev/null
+++ b/src/leon/src/chbase.h
@@ -0,0 +1,30 @@
+#ifndef CHBASE
+#define CHBASE
+
+extern void insertBasePoint(
+   PermGroup *G,           /* The permutation group (base and sgs known). */
+   Unsigned newLevel,      /* If newLevel = i and newBasePoint = b, the   */
+   Unsigned newBasePoint)  /*   base for G is changed from (b[1],...,     */
+                           /*   b(i-1),...) to (b[1],...,b[i-1],b,...).   */
+;
+
+extern void changeBase(
+   PermGroup *G,        /* The permutation group. */
+   UnsignedS *newBase)  /* An origin-1 null-terminated sequence of points. */
+                        /*   The new base will consist of newBase, followed */
+                        /*   by arbitrary extra points as needed.  Redundant */
+                        /*   base points will not be deleted from newBase,  */
+                        /*   but no redundant points will be adjoined.      */
+;
+
+extern Unsigned removeRedunSGens(
+   PermGroup *G,
+   Unsigned startLevel)
+;
+
+extern Unsigned restrictBasePoints(
+   PermGroup *const G,
+   Unsigned *acceptablePoint)
+;
+
+#endif
diff --git a/src/leon/src/chbase.sh b/src/leon/src/chbase.sh
new file mode 100755
index 0000000..5149d73
--- /dev/null
+++ b/src/leon/src/chbase.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+orblist -chbase $* 
diff --git a/src/leon/src/cinter.c b/src/leon/src/cinter.c
new file mode 100644
index 0000000..e649345
--- /dev/null
+++ b/src/leon/src/cinter.c
@@ -0,0 +1,78 @@
+/* File cinter.c.  Contains function intersection, the main function for a
+   program that may be used to compute the intersection of two permutation
+   groups. */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "compcrep.h"
+#include "compsg.h"
+#include "errmesg.h"
+#include "orbrefn.h"
+
+CHECK( cinter)
+
+extern GroupOptions options;
+
+
+/*-------------------------- intersection ---------------------------------*/
+
+/* Function intersection.  Returns a new permutation group representing the
+   intersection of two permutation groups G and E on Omega. The algorithm is
+   based on Figure 9 in the paper "Permutation group algorithms based on
+   partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *intersection(
+   PermGroup *const G,            /* The first permutation group. */
+   PermGroup *const E,            /* The second permutation group. */
+   PermGroup *const L)            /* A (possibly trivial) known subgroup of the
+                                     intersection of G and E.  (A null pointer
+                                     designates a trivial group.) */
+{
+   RefinementFamily OOO_G, OOO_E;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm[0].ptrParm = G;
+
+   OOO_E.refine = orbRefine;
+   OOO_E.familyParm[0].ptrParm = E;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &OOO_E;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isOrbReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[1]->refnType = 'O';
+   specialRefinement[1]->leftGroup = E;
+   specialRefinement[1]->rightGroup = E;
+
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeOrbRefine( G);
+   initializeOrbRefine( E);
+
+   return  computeSubgroup( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
diff --git a/src/leon/src/cinter.h b/src/leon/src/cinter.h
new file mode 100644
index 0000000..f833aec
--- /dev/null
+++ b/src/leon/src/cinter.h
@@ -0,0 +1,12 @@
+#ifndef CINTER
+#define CINTER
+
+extern PermGroup *intersection(
+   PermGroup *const G,            /* The first permutation group. */
+   PermGroup *const E,            /* The second permutation group. */
+   PermGroup *const L)            /* A (possibly trivial) known subgroup of the
+                                     intersection of G and E.  (A null pointer
+                                     designates a trivial group.) */
+;
+
+#endif
diff --git a/src/leon/src/cjper.sh b/src/leon/src/cjper.sh
new file mode 100755
index 0000000..e13a9a0
--- /dev/null
+++ b/src/leon/src/cjper.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cjrndper -perm $*
diff --git a/src/leon/src/cjrndper.c b/src/leon/src/cjrndper.c
new file mode 100644
index 0000000..5acb371
--- /dev/null
+++ b/src/leon/src/cjrndper.c
@@ -0,0 +1,666 @@
+/* File cjrndper.c.  Main program for cjrndper command, which may be used
+   to conjugate a given point set, permutation, permutation group, partition,
+   design, or code by one of the following: (1) a random permutation from the
+   symmetric group, (2) a random permutation from a specified permutation group,
+   or (3) a specified permutation.  The syntax of the command is:
+
+      cjrndper <options> <objectType> <ObjectName> <conjObjectName> <permName>
+
+   where the meaning of the parameters is as follows:
+
+      <objectType>:     "group", "perm", "set", "partition", "design",
+                         "matrix", or "code"
+      <objectName>:     The point set or permutation to be conjugated.  The name
+                        must include the suffix.
+      <conjObjectName>: The name (excluding suffix) of the new object created by
+                        conjugating <fullObjectName> by a random element of
+                        <groupName>.  May be the same of <fullObjectName>.
+      <permName>:       (optional) Set to the conjugating permutation chosen at
+                         random from group <groupName>.  If omitted, the
+                         conjugating permutation is not saved.
+
+   The valid options are follows:
+      -g:<groupName>  The name of the permutation group from which the
+                      conjugating element is to be chosen.  If omitted, the
+                      symmetric group is used.  In case of input from a Cayley
+                      library, <groupName> is the name of the library block.
+      -i              Write permutations in image format.
+      -p:<permName>   The specific permutation to be used as the conjugating
+                      element.
+      -s:<integer>    Sets seed for random number generator to <integer>,
+      -d:<integer>    Degree for point sets, permutations, or partitions.
+      -b              Construct base and sgs for conjugated group. */
+
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "code.h"
+#include "copy.h"
+#include "errmesg.h"
+#include "field.h"
+#include "matrix.h"
+#include "new.h"
+#include "permut.h"
+#include "readdes.h"
+#include "randgrp.h"
+#include "readgrp.h"
+#include "readpar.h"
+#include "readper.h"
+#include "readpts.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+GroupOptions options;
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[]);
+
+static void verifyOptions(void);
+static void setToRandomMonomialPerm(
+   Permutation *const perm,
+   const Unsigned subDegree,
+   const Field *const field);
+
+
+int main(
+   int argc,
+   char *argv[])
+{
+   ObjectType objectType;
+   char inputFileName[60] = "",
+        inputLibraryName[MAX_NAME_LENGTH+1] = "",
+        outputFileName[60] = "",
+        outputLibraryName[MAX_NAME_LENGTH+1] = "",
+        outputObjectName[MAX_NAME_LENGTH+1] = "",
+        permGroupSpecifier[60] = "",
+        permGroupFileName[60] = "",
+        permGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        permFileName[60] = "",
+        permLibraryName[MAX_NAME_LENGTH+1] = "",
+        originalInputName[MAX_NAME_LENGTH+1],
+        prefix[60] = "",
+        suffix[MAX_NAME_LENGTH] = "";
+   Unsigned i, j, k, degree, temp, optionCountPlus1, nRows, nCols, m, lambda, 
+            mu, tau, fSize;
+   unsigned long seed;
+   PermGroup *G, *H, *HConjugated;
+   PointSet *Lambda;
+   Permutation *s, *t, *conjugatingPerm, *gen, *genConj;
+   Partition *partn;
+   Matrix_01 *matrix, *matrixConjugated;
+   Code *C, *CConjugated;
+   char comment[255];
+   BOOLEAN baseSgsFlag = FALSE, imageFormatFlag = FALSE, cjperFlag = FALSE,
+           monomialFlag = FALSE;
+   UnsignedS *newCellNumber;
+
+   /* If there are no options (except possibly -perm), provide usage
+      information and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  cjrndper [options] type object conjugateObject [conjugatingPerm]");
+      printf( "\n        (type = group, perm, set, partition, design, matrix, or code)\n");
+      return 0;
+   }
+   else if ( argc == 2 && strcmp(argv[1],"-perm") == 0 ) {
+      printf( "\nUsage:  cjrndper [options] type object conjugateObject conjugatingPerm");
+      printf( "\n        (type = group, perm, set, partition, design, matrix, or code)\n");
+      return 0;
+   }
+
+   /* Count the number of options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   /* Translate options to lower case. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+   }
+
+   if ( strcmp(argv[1],"-perm") ==  0 )
+      i = 2;
+   else
+      i = 1;
+
+   /* Check for limits option.  If present in position i (i as above) give
+      limits and return. */
+   if ( strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-V") == 0 ) 
+      verifyOptions();
+
+   /* Check for exactly 3 or 4 parameters following options. */
+      if ( argc - optionCountPlus1 != 3 && argc - optionCountPlus1 != 4 ) {
+         printf( "\n\nError: Exactly 3 or 4 non-option parameters are "
+                 "required.\n");
+         exit(ERROR_RETURN_CODE);
+      }
+
+   /* Process options. */
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   strcpy( options.outputFileMode, "w");
+   seed = 47;
+   degree = 0;
+   options.genNamePrefix[0] = '\0';
+   for ( i = 1 ; i < optionCountPlus1 ; ++i )
+      if ( strcmp(argv[i],"-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp(argv[i],"-d:",3) == 0 ) {
+         degree = strtol( argv[i]+3, NULL, 0);
+      }
+      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
+         errno = 0;
+         seed = strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (cjrndper command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-g:",3) == 0 )
+         strcpy( permGroupSpecifier, argv[i]+3);
+      else if ( strcmp(argv[i],"-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strcmp(argv[i],"-mm") == 0 )
+         monomialFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp(argv[i],"-n:",3) == 0 )
+         strcpy( outputObjectName, argv[i]+3);
+      else if ( strcmp(argv[i],"-perm") == 0 )
+         cjperFlag = TRUE;
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (orblist)", "Invalid value for -gn option")
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strcmp( argv[i], "-b" ) == 0 )
+         baseSgsFlag = TRUE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else
+         ERROR1s( "main (cjrndper command)", "Invalid option ", argv[i], ".")
+   if ( cjperFlag && permGroupSpecifier[0] )
+         ERROR( "main (cjrndper command)",
+                 "-g and -p are conflicting options.")
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   objectType =
+      strcmp( lowerCase(argv[optionCountPlus1]), "group") == 0 ? PERM_GROUP :
+      strcmp( lowerCase(argv[optionCountPlus1]), "perm") == 0 ? PERMUTATION :
+      strcmp( lowerCase(argv[optionCountPlus1]), "set") == 0 ? POINT_SET :
+      strcmp( lowerCase(argv[optionCountPlus1]), "partition") == 0 ? PARTITION :
+      strcmp( lowerCase(argv[optionCountPlus1]), "design") == 0 ? DESIGN :
+      strcmp( lowerCase(argv[optionCountPlus1]), "matrix") == 0 ? MATRIX_01 :
+      strcmp( lowerCase(argv[optionCountPlus1]), "code") == 0 ? BINARY_CODE :
+                                                    INVALID_OBJECT;
+   if ( objectType == INVALID_OBJECT )
+      ERROR( "main (chrndper command)",
+             "File type for object to be conjugated is invalid.")
+   if ( degree == 0 && (objectType == PERMUTATION || objectType == POINT_SET ||
+                        objectType == PARTITION)  )
+      ERROR( "main (cjrndper command)", "Degree must be specified.")
+
+   /* Compute file names. */
+   parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, inputFileName,
+                     inputLibraryName);
+   parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName,
+                     outputLibraryName);
+   if ( optionCountPlus1+3 < argc )
+      parseLibraryName( argv[optionCountPlus1+3], "", "", permFileName,
+                        permLibraryName);
+   else if ( cjperFlag )
+      ERROR( "main (cjrndper command)", "Conjugating permutation not specified.")
+   if ( permGroupSpecifier[0] )
+      parseLibraryName( permGroupSpecifier, prefix, suffix, permGroupFileName,
+                        permGroupLibraryName);
+
+   /* Set output object name, if not specified by -n option. */
+   if ( !outputObjectName[0] )
+      strcpy( outputObjectName, outputLibraryName);
+
+   /* Read in the object to be conjugated. */
+   switch( objectType ) {
+      case PERM_GROUP:
+         if ( baseSgsFlag ) {
+            H = readPermGroup( inputFileName, inputLibraryName, 0, "Generate");
+           initializeSeed( seed);
+         }
+         else
+            H = readPermGroup( inputFileName, inputLibraryName, 0, "");
+         degree = H->degree;
+         break;
+      case POINT_SET:
+         Lambda = readPointSet( inputFileName, inputLibraryName, degree);
+         break;
+      case PERMUTATION:
+         s = readPermutation( inputFileName, inputLibraryName, degree, TRUE);
+         degree = s->degree;
+         break;
+      case PARTITION:
+         partn = readPartition( inputFileName, inputLibraryName, degree);
+         degree = partn->degree;
+         break;
+      case DESIGN:
+      case MATRIX_01:
+         if ( objectType == DESIGN )
+            matrix = readDesign( inputFileName, inputLibraryName, 0, 0);
+         else
+            matrix = read01Matrix( inputFileName, inputLibraryName, FALSE,
+                                   FALSE, 0, 0, 0);
+         nRows = matrix->numberOfRows;
+         nCols = matrix->numberOfCols;
+         if ( monomialFlag ) {
+            matrix->field = buildField( matrix->setSize);
+            degree = (matrix->setSize - 1) * (nRows + nCols);
+         }
+         else
+            degree = nRows + nCols;
+         initializeStorageManager( degree);
+         break;
+      case BINARY_CODE:
+         C = readCode( inputFileName, inputLibraryName, FALSE, 0, 0, 0);
+         if ( C->fieldSize > 2 ) {
+            C->field = buildField( C->fieldSize);
+            degree = (C->fieldSize - 1) * C->length;
+         }
+         else
+            degree = C->length;
+         initializeStorageManager( degree);
+         break;
+   }
+
+   /* Initialize random number generator. */
+   initializeSeed( seed);
+
+   /* Read in the group, if provided and check its degree.  Then generate
+      either a random permutation in the group, or a random permutation from
+      the symmetric group. */
+   if ( cjperFlag )
+      conjugatingPerm = readPermutation( permFileName,
+                              permLibraryName, degree, TRUE);
+   else if ( permGroupFileName[0] ) {
+      G = readPermGroup( permGroupFileName, permGroupLibraryName, degree,
+                         "Generate");
+      initializeSeed( seed);
+      conjugatingPerm = randGroupPerm( G, 1);
+   }
+   else {
+      conjugatingPerm = newIdentityPerm( degree);
+      if ( objectType != DESIGN && objectType != MATRIX_01 ) 
+         if ( objectType != BINARY_CODE || C->fieldSize == 2 )
+            for ( i = 1 ; i < degree ; ++i ) {
+               j = randInteger( i, degree);
+               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
+            }
+         else
+            setToRandomMonomialPerm( conjugatingPerm, degree, C->field);
+      else 
+         if ( !monomialFlag ) {
+            for ( i = 1 ; i < nRows ; ++i ) {
+               j = randInteger( i, nRows);
+               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
+            }
+            for ( i = nRows+1 ; i < degree ; ++i ) {
+               j = randInteger( i, degree);
+               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
+            }
+         }
+         else
+            setToRandomMonomialPerm( conjugatingPerm, nRows*(matrix->setSize-1), 
+                                     matrix->field);
+      conjugatingPerm->invImage = NULL;
+      adjoinInvImage( conjugatingPerm);
+   }
+
+   /* Conjugate the object, write out conjugated object, and close its file. */
+   switch ( objectType ) {
+      case POINT_SET:
+         strcpy( originalInputName, Lambda->name);
+         for ( i = 1 ; i <= Lambda->size ; ++i )
+            Lambda->pointList[i] =
+                  conjugatingPerm->image[Lambda->pointList[i]];
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", Lambda->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", Lambda->name, G->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              Lambda->name);
+         strcpy( Lambda->name, outputObjectName);
+         writePointSet( outputFileName, outputLibraryName, comment, Lambda);
+         break;
+      case PARTITION:
+         /* Temporarily we use the invPointList field for another purpose.
+            It will be restored below. */
+         strcpy( originalInputName, partn->name);
+         newCellNumber = partn->invPointList;
+         for ( i = 1 ; i <= degree ; ++i )
+            newCellNumber[conjugatingPerm->image[partn->pointList[i]]] =
+               partn->cellNumber[partn->pointList[i]];
+         for ( i = 1 ; i <= degree ; ++i )
+            partn->cellNumber[i] = newCellNumber[i];
+         for ( i = 1 ; i <= degree ; ++i )
+            partn->pointList[i] = conjugatingPerm->image[partn->pointList[i]];
+         for ( i = 1 ; i <= degree ; ++i )
+            partn->invPointList[partn->pointList[i]] = i;
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", partn->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", partn->name, G->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              partn->name);
+         strcpy( partn->name, outputObjectName);
+         writePartition( outputFileName, outputLibraryName, comment, partn);
+         break;
+      case PERMUTATION:
+         strcpy( originalInputName, s->name);
+         t = newUndefinedPerm( degree);
+         t->degree = degree;
+         for ( i = 1 ; i <= degree ; ++i )
+            t->image[conjugatingPerm->image[i]] =
+                 conjugatingPerm->image[s->image[i]];
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", s->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", s->name, G->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              s->name);
+         strcpy( t->name, outputObjectName);
+         if ( imageFormatFlag )
+            writePermutation( outputFileName, outputLibraryName, t, "image",
+                              comment);
+         else
+            writePermutation( outputFileName, outputLibraryName, t, "",
+                              comment);
+         break;
+      case PERM_GROUP:
+         strcpy( originalInputName, H->name);
+         HConjugated = copyOfPermGroup( H);
+         for ( gen = H->generator , genConj = HConjugated->generator ;
+               gen ; gen = gen->next , genConj = genConj->next )
+            for ( i = 1 ; i <= degree ; ++i )
+               genConj->image[conjugatingPerm->image[i]] =
+                    conjugatingPerm->image[gen->image[i]];
+         if ( H->base )
+            for ( i = 1 ; i <= H->baseSize ; ++i )
+               HConjugated->base[i] = conjugatingPerm->image[H->base[i]];
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", H->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", H->name, G->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              H->name);
+         strcpy( HConjugated->name, outputObjectName);
+         HConjugated->printFormat = imageFormatFlag ? imageFormat : cycleFormat;
+         nameGenerators( HConjugated, options.genNamePrefix);
+         writePermGroup( outputFileName, outputLibraryName, HConjugated, comment);
+         break;
+      case DESIGN:
+      case MATRIX_01:
+         strcpy( originalInputName, matrix->name);
+         matrixConjugated = newZeroMatrix( matrix->setSize, nRows, nCols);
+         if ( !monomialFlag )
+            for ( i = 1 ; i <= nRows ; ++i )
+               for ( j = 1 ; j <= nCols ; ++j )
+                  matrixConjugated->entry[conjugatingPerm->image[i]]
+                                      [conjugatingPerm->image[j+nRows]-nRows] =
+                                                         matrix->entry[i][j];
+         else {
+            fSize = matrix->setSize - 1;
+            for ( i = 1 ; i <= nRows ; ++i ) {
+               /* Find k, lambda such that 1*i is mapped to lambda*k. */
+               k = (conjugatingPerm->image[fSize*(i-1)+1]-1) / fSize + 1;
+               lambda = (conjugatingPerm->image[fSize*(i-1)+1]-1) % fSize + 1;
+               for ( j = 1 ; j <= nCols ; ++j ) {
+                  /* Find m, mu such that 1*j is mapped to mu*m. */
+                  m = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) / fSize + 1 - 
+                                                            nRows;
+                  mu = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) % fSize + 1;
+                  tau = matrix->field->prod[lambda][mu];
+                  matrixConjugated->entry[k][m] =
+                         matrix->field->prod[tau][matrix->entry[i][j]];
+               }
+            }
+         }
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", matrix->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", matrix->name, G->name);
+         else if ( (objectType == MATRIX_01 && monomialFlag) )
+            sprintf( comment, "%s conjugated by a random monomial permutation.",
+                              matrix->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              matrix->name);
+         strcpy( matrixConjugated->name, outputObjectName);
+         if ( objectType == DESIGN )
+            writeDesign( outputFileName, outputLibraryName, matrixConjugated,
+                         comment);
+         else
+            write01Matrix( outputFileName, outputLibraryName, matrixConjugated,
+                         FALSE, comment);
+         break;
+      case BINARY_CODE:
+         strcpy( originalInputName, C->name);
+         CConjugated = (Code *) newZeroMatrix( C->fieldSize, C->dimension, C->length);
+         if ( C->fieldSize == 2 )
+            for ( j = 1 ; j <= C->length ; ++j )
+               for ( i = 1 ; i <= C->dimension ; ++i )
+                  CConjugated->basis[i][conjugatingPerm->image[j]] =
+                                                          C->basis[i][j];
+         else {
+            fSize = C->fieldSize - 1;
+            for ( j = 1 ; j <= C->length ; ++j ) {
+               /* Find m, mu such that 1*j is mapped to mu*m. */
+               m = (conjugatingPerm->image[fSize*(j-1)+1]-1) / fSize + 1;
+               mu = (conjugatingPerm->image[fSize*(j-1)+1]-1) % fSize + 1;
+               for ( i = 1 ; i <= C->dimension ; ++i )
+                  CConjugated->basis[i][m] =
+                                     C->field->prod[mu][C->basis[i][j]];
+            }
+         }
+         if ( cjperFlag )
+            sprintf( comment, "%s conjugated by %s.", C->name,
+                                                      conjugatingPerm->name);
+         else if ( permGroupFileName[0] )
+            sprintf( comment, "%s conjugated by a random permutation "
+                              "from group %s.", C->name, G->name);
+         else if ( C->fieldSize > 2 )
+            sprintf( comment, "%s conjugated by a random monomial permutation.",
+                              C->name);
+         else
+            sprintf( comment, "%s conjugated by a random permutation.",
+                              C->name);
+         strcpy( CConjugated->name, outputObjectName);
+         writeCode( outputFileName, outputLibraryName, CConjugated, comment);
+         break;
+   }
+
+   /* Write out the conjugating permutation, if requested, and close its file. */
+   if ( !cjperFlag && permFileName[0] ) {
+      if ( (objectType == MATRIX_01 && monomialFlag) ||
+           (objectType == BINARY_CODE && C->fieldSize > 2) )
+         sprintf( comment, "A monomial permutation mapping %s to %s.", 
+                  originalInputName, outputObjectName);
+      else if ( objectType != PERM_GROUP && 
+                objectType != PERMUTATION )
+         sprintf( comment, "A permutation mapping %s to %s.", 
+                  originalInputName, outputObjectName);
+      else
+         sprintf( comment, "A permutation conjugating %s to %s.", 
+                  originalInputName, outputObjectName);
+      if ( imageFormatFlag )
+         writePermutation( permFileName, permLibraryName, conjugatingPerm,
+                           "image", comment);
+      else
+         writePermutation( permFileName, permLibraryName, conjugatingPerm,
+                           "", comment);
+   }
+
+   /* Terminate. */
+   return 0;
+}
+
+
+/*--------------------------- setToRandomMonomialPerm ---------------------*/
+
+static void setToRandomMonomialPerm(
+   Permutation *const perm,               /* Must start as identity. */
+   const Unsigned subDegree,
+   const Field *const field)
+{
+   Unsigned i, j, k, delta, lambda, temp, m, mu;
+   const Unsigned fSize = field->size - 1;
+   const degree = perm->degree;
+
+   for ( i = 1 ; i <= degree ; i += fSize ) {
+      j = randInteger( i, (i <= subDegree) ? subDegree : degree);
+      delta = 0;
+      for ( k = 0 ; k < fSize ; ++k ) {
+         EXCHANGE( perm->image[i+k], 
+                   perm->image[j+k-delta], temp);
+         if ( (j+k) % fSize == 0 )
+            delta = fSize;
+      }
+      /* Find mu, m such that perm->image[i] = mu*m. 
+         Then perm->image[lambda*i] = (lambda*mu)*m. */
+      m = (perm->image[i] - 1 ) / fSize + 1;
+      mu = (perm->image[i] - 1 ) % fSize + 1;
+      for ( lambda = 2 ; lambda < field->size ; ++lambda )
+         perm->image[i+lambda-1] = 
+                           fSize*(m-1) + field->prod[lambda][mu];
+   }
+}
+
+
+/*-------------------------- nameGenerators ------------------------------*/
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[])
+{
+   Unsigned i;
+   Permutation *gen;
+
+   if ( genNamePrefix[0] == '\0' ) {
+      strncpy( genNamePrefix, H->name, 4);
+      genNamePrefix[4] = '\0';
+   }
+   for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) {
+      strcpy( gen->name, genNamePrefix);
+      sprintf( gen->name + strlen(gen->name), "%02d", i);
+   }
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xfield ( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadde( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpa( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xreadpt( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xfield ( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadde( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpa( &mainOpts);
+   xreadpe( &mainOpts);
+   xreadpt( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/cjrndper.h b/src/leon/src/cjrndper.h
new file mode 100644
index 0000000..0273b4f
--- /dev/null
+++ b/src/leon/src/cjrndper.h
@@ -0,0 +1,9 @@
+#ifndef CJRNDPER
+#define CJRNDPER
+
+extern int main(
+   int argc,
+   char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/cmatauto.c b/src/leon/src/cmatauto.c
new file mode 100644
index 0000000..9ba4b6d
--- /dev/null
+++ b/src/leon/src/cmatauto.c
@@ -0,0 +1,868 @@
+/* File cmatauto.c.  Contains functions matrixAutoGroup and matrixIsomorphism,
+   the main functions for computing automorphism groups of general and
+   monomial matrices.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "code.h"
+#include "compcrep.h"
+#include "compsg.h"
+#include "cparstab.h"
+#include "errmesg.h"
+#include "matrix.h"
+#include "new.h"
+#include "randgrp.h"
+#include "readgrp.h"
+#include "storage.h"
+
+CHECK( cmatau)
+
+extern GroupOptions options;
+
+static RefinementMapping setStabRefine;
+static ReducChkFn isSetStabReducible;
+static void initializeSetStabRefn(void);
+static RefinementMapping gRowVsColRefine;
+static ReducChkFn isGRowVsColReducible;
+
+static PointSet *knownIrreducible[10]  /* Null terminated 0-base list of */
+                = {NULL};              /*  point sets Lambda for which top */
+                                       /*  partition on UpsilonStack is */
+                                       /*  known to be SSS_Lambda irred. */
+
+static Matrix_01 *MM, *MM_L, *MM_R;
+static Code *CC, *CC_L, *CC_R;
+static BOOLEAN checkMonomialProperty;   /* Also needed by isGRowVsColReducible. */
+static BOOLEAN informCols;
+
+static BOOLEAN matrix01AutoProperty(
+   Permutation *s )
+{
+   return isMatrix01Isomorphism( MM, MM, s, checkMonomialProperty);
+}
+
+
+static BOOLEAN matrix01IsoProperty(
+   Permutation *s )
+{
+   return isMatrix01Isomorphism( MM_L, MM_R, s, checkMonomialProperty);
+}
+
+
+static BOOLEAN codeAutoProperty(
+   Permutation *s )
+{
+   return isCodeIsomorphism( CC, CC, s);
+}
+
+
+static BOOLEAN codeIsoProperty(
+   Permutation *s )
+{
+   return isCodeIsomorphism( CC_L, CC_R, s);
+}
+
+static void informMatrixIso(
+   Permutation *perm);
+
+static void informMatrixMonIso(
+   Permutation *perm);
+
+static void informCodeMonIso(
+   Permutation *perm);
+
+
+/*-------------------------- matrixAutoGroup ------------------------------*/
+
+/* Function matrixAutoGroup.  Returns a new permutation group representing 
+   the automorphism group of the matrix M.  If M is an (0,1)-matrix, the
+   function designAutoGroup should be invoked instead.  The algorithm is based 
+   on Figure 9 in the paper "Permutation group algorithms based on partitions" by the 
+   author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *matrixAutoGroup(
+   Matrix_01 *const M,            /* The matrix whose group is to be found. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     automorphism group of D.  (A null pointer
+                                     designates a trivial group.) */
+   Code *const C,                 /* If nonnull, the auto grp of the code C is */
+   const BOOLEAN monomialFlag)    /* computed, assuming its group is contained
+                                     in that of the design. */
+{
+   RefinementFamily SSS_Lambda, IIIg_M;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+   PointSet *Lambda;                     /* Set of rows. */
+   Partition *Pi;                        /* Rows, cols, identity cols. */
+   PermGroup *G;
+   Unsigned degree = M->numberOfRows + M->numberOfCols;
+   Unsigned i;
+   Property *pp;
+
+   /* Construct the symmetric group G of degree rows+cols. */
+   G = allocPermGroup();
+   sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree);
+   G->degree = degree;
+   G->baseSize = 0;
+
+   /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows} or
+      the partition Pi. */
+   if ( monomialFlag ) {
+      Pi = allocPartition();
+      Pi->degree = degree;
+      Pi->pointList = allocIntArrayDegree();
+      Pi->invPointList = allocIntArrayDegree();
+      Pi->cellNumber = allocIntArrayDegree();
+      Pi->startCell = allocIntArrayDegree();
+      for ( i = 1 ; i <= degree ; ++i ) {
+         Pi->pointList[i] = Pi->invPointList[i] = i;
+         Pi->cellNumber[i] = ( i <= M->numberOfRows) ? 1 :
+                             ( i <= degree - M->numberOfRows ) ? 2 : 3;
+      }
+      Pi->startCell[1] = 1;
+      Pi->startCell[2] = M->numberOfRows + 1;
+      Pi->startCell[3] = degree - M->numberOfRows + 1;
+      Pi->startCell[4] = degree + 1;;
+      SSS_Lambda.refine = partnStabRefine;
+      SSS_Lambda.familyParm[0].ptrParm = (void *) Pi;
+   }
+   else {
+      Lambda = allocPointSet();
+      Lambda->degree = degree;
+      Lambda->size = M->numberOfRows;
+      Lambda->pointList = allocIntArrayDegree();
+      for ( i = 1 ; i <= M->numberOfRows ; ++i )
+         Lambda->pointList[i] = i;
+      Lambda->pointList[M->numberOfRows+1] = 0;
+      Lambda->inSet = allocBooleanArrayDegree();
+      for ( i = 1 ; i <= degree ; ++i )
+         Lambda->inSet[i] = ( i <= M->numberOfRows);
+      SSS_Lambda.refine = setStabRefine;
+      SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda;
+   }
+
+   IIIg_M.refine = gRowVsColRefine;
+   IIIg_M.familyParm[0].ptrParm = (void *) M;
+
+   refnFamList[0] = &SSS_Lambda;
+   refnFamList[1] = &IIIg_M;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = (monomialFlag) ? isPartnStabReducible : isSetStabReducible;
+   reducChkList[1] = isGRowVsColReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = NULL;
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   if ( monomialFlag )
+      initializePartnStabRefn();
+   else
+      initializeSetStabRefn();
+
+   if ( C ) {
+      CC = C;
+      checkMonomialProperty = (C->fieldSize > 2);
+      pp = codeAutoProperty;
+   }
+   else {
+      MM = M;
+      checkMonomialProperty = monomialFlag;
+      pp = matrix01AutoProperty;
+   }
+   
+
+   return  computeSubgroup( G, pp, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
+/*-------------------------- matrixIsomorphism ----------------------------*/
+
+/* Function matrixIsomorphism.  Returns a permutation mapping one specified   
+   matrix M_L to another matrix M_R.  The two matrices must have
+   the same number of rows and the same number of columns.  The algorithm is 
+   based on Figure 9 in the paper "Permutation group algorithms based on 
+   partitions" by the author. */
+
+Permutation *matrixIsomorphism(
+   Matrix_01 *const M_L,          /* The first design. */
+   Matrix_01 *const M_R,          /* The second design. */
+   PermGroup *const L_L,          /* A known subgroup of Aut(M_L), or NULL. */
+   PermGroup *const L_R,          /* A known subgroup of Aut(M_R), or NULL. */
+   Code *const C_L,               /* If nonnull, C_R must also be nonull, and */
+   Code *const C_R,               /*   any isomorphism of C_L to C_R must map */
+   const BOOLEAN monomialFlag,    /*   M_L to M_R.  A code isomorphism is     */
+                                  /*   computed.  */  
+   const BOOLEAN colInformFlag)   /* Print iso on columns to std output. */
+{
+   RefinementFamily SSS_Lambda_Lambda, IIIg_ML_MR;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+   PointSet *Lambda;                     /* Set of rows. */
+   Partition *Pi;                        /* Rows, cols, identity cols. */
+   PermGroup *G;
+   Unsigned degree = M_L->numberOfRows + M_L->numberOfCols;
+   Unsigned i;
+   Property *pp;
+
+   /* Construct the symmetric group G of degree rows+cols. */
+   G = allocPermGroup();
+   sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree);
+   G->degree = degree;
+   G->baseSize = 0;
+
+   /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows} or
+      the partition Pi. */
+   if ( monomialFlag ) {
+      Pi = allocPartition();
+      Pi->degree = degree;
+      Pi->pointList = allocIntArrayDegree();
+      Pi->invPointList = allocIntArrayDegree();
+      Pi->cellNumber = allocIntArrayDegree();
+      Pi->startCell = allocIntArrayDegree();
+      for ( i = 1 ; i <= degree ; ++i ) {
+         Pi->pointList[i] = Pi->invPointList[i] = i;
+         Pi->cellNumber[i] = ( i <= M_L->numberOfRows) ? 1 :
+                             ( i <= degree - M_L->numberOfRows ) ? 2 : 3;
+      }
+      Pi->startCell[1] = 1;
+      Pi->startCell[2] = M_L->numberOfRows + 1;
+      Pi->startCell[3] = degree - M_L->numberOfRows + 1;
+      Pi->startCell[4] = degree + 1;;
+      SSS_Lambda_Lambda.refine = partnStabRefine;
+      SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Pi;
+      SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Pi;
+   }
+   else {
+      Lambda = allocPointSet();
+      Lambda->degree = degree;
+      Lambda->size = M_L->numberOfRows;
+      Lambda->pointList = allocIntArrayDegree();
+      for ( i = 1 ; i <= M_L->numberOfRows ; ++i )
+         Lambda->pointList[i] = i;
+      Lambda->pointList[M_L->numberOfRows+1] = 0;
+      Lambda->inSet = allocBooleanArrayDegree();
+      for ( i = 1 ; i <= degree ; ++i )
+         Lambda->inSet[i] = ( i <= M_L->numberOfRows);
+      SSS_Lambda_Lambda.refine = setStabRefine;
+      SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Lambda;
+      SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Lambda;
+   }
+
+   IIIg_ML_MR.refine = gRowVsColRefine;
+   IIIg_ML_MR.familyParm_L[0].ptrParm = (void *) M_L;
+   IIIg_ML_MR.familyParm_R[0].ptrParm = (void *) M_R;
+
+   refnFamList[0] = &SSS_Lambda_Lambda;
+   refnFamList[1] = &IIIg_ML_MR;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = (monomialFlag) ? isPartnStabReducible : isSetStabReducible;
+   reducChkList[1] = isGRowVsColReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = NULL;
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   if ( monomialFlag )
+      initializePartnStabRefn();
+   else
+      initializeSetStabRefn();
+
+   if ( C_L ) {
+      CC_L = C_L;
+      CC_R = C_R;
+      checkMonomialProperty = (C_L->fieldSize > 2);
+      pp = codeIsoProperty;
+      options.altInformCosetRep = (monomialFlag ? &informCodeMonIso 
+                                                : NULL);
+   }
+   else {
+      MM_L = M_L;
+      MM_R = M_R;
+      checkMonomialProperty = monomialFlag;
+      pp = matrix01IsoProperty;
+      options.altInformCosetRep = (monomialFlag ? &informMatrixMonIso 
+                                                : &informMatrixIso);
+   }
+   informCols = colInformFlag;
+
+
+   return  computeCosetRep( G, pp, refnFamList, reducChkList,
+                            specialRefinement, extra, L_L, L_R);
+}
+
+
+/*-------------------------- initializeSetStabRefn ------------------------*/
+
+static void initializeSetStabRefn( void)
+{
+   knownIrreducible[0] = NULL;
+}
+
+/*-------------------------- setStabRefine --------------------------------*/
+
+/* The function implements the refinement family setStabRefine (denoted
+   SSS_Lambda in the reference).  This family consists of the elementary
+   refinements ssS_{Lambda,i}, where Lambda fixed.  (It is the set to be
+   stabilized) and where 1 <= i <= degree.  Application of sSS_{Lambda,i} to
+   UpsilonStack splits off from UpsilonTop the intersection of Lambda and the
+   i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and
+   pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts
+   trivially on UpsilonTop, in which case UpsilonStack remains unchanged.
+
+   The family parameter is:
+         familyParm[0].ptrParm:  Lambda
+   The refinement parameters are:
+         refnParm[0].intParm:    i.
+
+   In the expectation that this refinement will be applied only a small number
+   of times, no attempt has been made to optimize this procedure. */
+
+
+static SplitSize setStabRefine(
+   const RefinementParm familyParm[],      /* Family parm: Lambda. */
+   const RefinementParm refnParm[],        /* Refinement parm: i. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   PointSet *Lambda = familyParm[0].ptrParm;
+   Unsigned  cellToSplit = refnParm[0].intParm;
+   Unsigned  m, last, i, j, temp,
+             inLambdaCount = 0,
+             outLambdaCount = 0;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+   SplitSize  split;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ;
+         m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m )
+      if ( inSet[pointList[m]] )
+         ++inLambdaCount;
+      else
+         ++outLambdaCount;
+   if ( inLambdaCount == 0 || outLambdaCount == 0 ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   i = startCell[cellToSplit]-1;
+   j = last;
+   while ( i < j ) {
+      while ( !inSet[pointList[++i]] );
+      while (  inSet[pointList[--j]] );
+      if ( i < j ) {
+         EXCHANGE( pointList[i], pointList[j], temp)
+         EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp)
+      }
+   }
+   ++UpsilonStack->height;
+   for ( m = i ; m < last ; ++m )
+      cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = i;
+   parent[UpsilonStack->height] = cellToSplit;
+   cellSize[UpsilonStack->height] = last - i;
+   cellSize[cellToSplit] -= (last - i);
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+}
+
+
+/*-------------------------- isSetStabReducible ---------------------------*/
+
+/* The function isSetStabReducible checks whether the top partition on a given
+   partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If
+   so, it returns a pair consisting of a refinement acting nontrivially on
+   the top partition and a priority.  Otherwise it returns a structure of
+   type RefinementPriorityPair in which the priority field is IRREDUCIBLE.  Assuming
+   that a reducing refinement is found, the (reverse) priority is set very
+   low (1).  Note that, once this function returns negative in the priority
+   field once, it will do so on all subsequent calls.  (The static variable
+   knownIrreducible is set to true in this situation.)  Again, no attempt
+   at efficiency has been made.  */
+
+static RefinementPriorityPair isSetStabReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   PointSet *Lambda = family->familyParm_L[0].ptrParm;
+   Unsigned    i, cellNo, position;
+   BOOLEAN ptsInLambda, ptsNotInLambda;
+   RefinementPriorityPair reducingRefn;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+
+   /* Check that the refinement mapping really is setStabRefn, as required. */
+   if ( family->refine != setStabRefine )
+      ERROR( "isSetStabReducible", "Error: incorrect refinement mapping");
+
+   /* If the top partition has previously been found to be SSS-irreducible, we
+      return immediately. */
+   for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i )
+      ;
+   if ( knownIrreducible[i] ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* If we reach here, the top partition has not been previously found to be
+      SSS-irreducible.  We check each cell in turn to see if it intersects both
+      Lambda and Omega - Lambda.  If such a cell is found, we return
+      immediately. */
+   for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) {
+      ptsInLambda = ptsNotInLambda = FALSE;
+      for ( position = startCell[cellNo] ; position < startCell[cellNo] +
+                                           cellSize[cellNo] ; ++position ) {
+         if ( inSet[pointList[position]] )
+            ptsInLambda = TRUE;
+         else
+            ptsNotInLambda = TRUE;
+         if ( ptsInLambda && ptsNotInLambda ) {
+            reducingRefn.refn.family = family;
+            reducingRefn.refn.refnParm[0].intParm = cellNo;
+            reducingRefn.priority = 1;
+            return reducingRefn;
+         }
+      }
+   }
+
+   /* If we reach here, we have found the top partition to be SSS_Lambda
+      irreducible, so we add Lambda to the list knownIrreducible and return. */
+   for ( i = 0 ; knownIrreducible[i] ; ++i )
+      ;
+   if ( i < 9 ) {
+      knownIrreducible[i] = Lambda;
+      knownIrreducible[i+1] = NULL;
+   }
+   else
+      ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.")
+
+   reducingRefn.priority = IRREDUCIBLE;
+   return reducingRefn;
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+/* Static variables shared by gRowVsColRefine and isGRowVsColReducible.  Note
+   they are modified only by gRowVsColRefine.  */
+
+   static Unsigned *header = NULL;
+   static Unsigned *nonZeroPosition;
+   static Unsigned nonZeroCount;
+   typedef struct {
+      Unsigned rowOrCol;
+      Unsigned link;
+   } Node;
+   static Node *node;
+   static BOOLEAN skipFlag = FALSE;
+
+   static Unsigned randBits;
+   static unsigned long twoExpRandBits;
+   static Unsigned randBitsFlag = 0;
+   static Unsigned *randArray = NULL;
+
+
+/*-------------------------- gRowVsColRefine --------------------------------*/
+
+/* The function implements the refinement families III_RC and III_CR.  Here
+   III_RC consists of the elementary refinements IIi_RC_{D,i,j,m}, where 
+   IIi_RC_{D,i,j,m} splits from row cell i those rows that have m ones in 
+   column cell j, and IIi_CR_{D,i,j,m} splits from column cell i those columns
+   that have m ones in row cell j.  Note that from i and j the routine can
+   tell whether III_RC or III_CR should be applied.
+  
+   The family parameter is:
+         familyParm[0].ptrParm:  D (the matrix)
+   The refinement parameters are:
+         refnParm[0].intParm:    i.
+         refnParm[1].intParm:    j.
+         refnParm[2].intParm:    m.
+
+   As a special convention, j = 0 signifies the same i and j as before,
+   with the sums across row or column cells already computed.
+*/
+
+static SplitSize gRowVsColRefine(
+   const RefinementParm familyParm[],      /* Family parm: D. */
+   const RefinementParm refnParm[],        /* Refinement parm: i,j,m. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   Matrix_01 *M = familyParm[0].ptrParm;
+   Unsigned  i = refnParm[0].intParm,
+             j = refnParm[1].intParm,
+             m = refnParm[2].intParm;
+   Unsigned  nRows = M->numberOfRows;
+   Unsigned  degree = UpsilonStack->degree;
+   Unsigned  k, p, r, t, cnt, last, last1, rowOrCol, 
+             rowOrColSum;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   SplitSize  split;
+   enum {RC, CR} familySelector;
+   static Unsigned numberOfSubcells;
+
+   /* Allocate header, etc, if not already done. */
+   if ( !header ) {
+      header = (Unsigned *) malloc( twoExpRandBits * sizeof(Unsigned));
+      for ( k = 0 ; k < twoExpRandBits ; ++k )      /* Note degree+1 needed */
+         header[k] = 0;
+      nonZeroPosition = allocIntArrayDegree();
+      nonZeroCount = 0;
+      node = (Node *) malloc( (degree+2) * sizeof(Node) );
+   }
+
+   /* First we check whether we need to compute row/col sums across cells,
+      or whether this was already done on a previous call.  If so, we first
+      clear the array header. */
+   if ( j != 0 && !skipFlag ) {
+      for ( k = 1 ; k <= nonZeroCount ; ++k )
+         header[nonZeroPosition[k]] = 0;
+      nonZeroCount = 0;
+      familySelector = (pointList[startCell[i]] <= nRows ) ? RC : CR;
+      for ( k = startCell[i] , last = k + cellSize[i] , cnt = 1; k < last ; 
+                                                               ++k , ++cnt ) {
+         rowOrCol = pointList[k];
+         rowOrColSum = 0;
+         switch( familySelector ) {
+            case RC:
+               for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; 
+                                                                  ++t )
+                  rowOrColSum += randArray[M->entry[rowOrCol][pointList[t]-nRows]];
+               break;
+            case CR:
+               for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; 
+                                                                  ++t )
+                  rowOrColSum += randArray[M->entry[pointList[t]][rowOrCol-nRows]];
+               break;
+         }
+         rowOrColSum &= randBitsFlag;
+         node[cnt].rowOrCol = rowOrCol;
+         node[cnt].link = header[rowOrColSum];
+         if ( header[rowOrColSum] == 0 ) 
+            nonZeroPosition[++nonZeroCount] = rowOrColSum;
+         header[rowOrColSum] = cnt;
+      }
+      numberOfSubcells = nonZeroCount;
+   }
+   skipFlag = FALSE;
+   
+   /* If cell i does not split, return at once. */
+   if ( m == UNKNOWN || header[m] == 0 || numberOfSubcells == 1 ) {
+      split.oldCellSize = cellSize[i];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell i. */
+   last = startCell[i] + cellSize[i];
+   for ( k = last-1 , p = header[m] ; p != 0 ; --k , p = node[p].link ) {
+      t = node[p].rowOrCol;
+      r = invPointList[t];
+      pointList[r] = pointList[k];
+      pointList[k] = t;
+      invPointList[t] = k;
+      invPointList[pointList[r]] = r; 
+   }
+
+   ++k;
+   ++UpsilonStack->height;
+   for ( r = k ; r < last ; ++r )
+      cellNumber[pointList[r]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = k;
+   parent[UpsilonStack->height] = i;
+   cellSize[UpsilonStack->height] = last - k;
+   cellSize[i] -= (last - k);
+   split.oldCellSize = cellSize[i];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   --numberOfSubcells;
+   return split;
+}
+
+
+/*-------------------------- isGRowVsColReducible ---------------------------*/
+
+#define familyParm familyParm_L
+
+#define CELL_TYPE(k) (pointList[startCell[k]] <= M_L->numberOfRows ? ROW : COL)
+
+static RefinementPriorityPair isGRowVsColReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   typedef enum{ ROW, COL} CellType;
+   Matrix_01 *M_L = family->familyParm_L[0].ptrParm;
+   RefinementPriorityPair reducingRefn;
+   static Unsigned processingCell = 0, opposingCell = 0;
+   static Unsigned listSize = 0;
+   static UnsignedS *list = NULL;
+   static UnsignedS *freq = NULL;
+   Unsigned i, k, p, maxPos;
+   static Unsigned firstRowCell = 0, firstColCell = 0,
+                   lastRowCell = 0, lastColCell = 0;
+   static UnsignedS *nextCellSameType = NULL;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell;
+   unsigned long initialSeed = 47;
+   SplitSize dummySplit;
+
+   /* Allocate and construct randArray the first time. */
+   if ( !randArray ) {
+      initializeSeed( initialSeed);
+      randBits = 6;
+      twoExpRandBits = 64;
+      while ( randBits < INT_SIZE && twoExpRandBits <  
+                 (unsigned long) UpsilonStack->degree + M_L->setSize ) {
+         ++randBits;
+         twoExpRandBits <<=1;
+      }
+      for ( i = 0 ; i < randBits ; ++ i)
+         randBitsFlag |= (1u << i);
+      randArray = (Unsigned *) malloc( sizeof(Unsigned *) * M_L->setSize);
+      for ( i = 0 ; i < M_L->setSize ; ++i ) 
+         randArray[i] = 2 * randInteger( 1, twoExpRandBits>>1) - 1;
+   }
+
+   /* Allocate list, freq, and nextCellSameType the first time. */
+   if ( !list )
+      list = allocIntArrayDegree();
+   if ( !freq )
+      freq = allocIntArrayDegree();
+   if ( !nextCellSameType ) {
+      nextCellSameType = allocIntArrayDegree();
+      nextCellSameType[0] = 0;
+   }
+
+   /* Check that the refinement mapping really is rowVsColRefine, as 
+      required. */
+   if ( family->refine != gRowVsColRefine )
+      ERROR( "isGRowVsColReducible", "Error: incorrect refinement mapping");
+
+   /* If the height is 1 (row/col split not yet performed), for regular
+      matrices, or 1 or 2, for monomial matrices, return irreducible. */
+   if ( UpsilonStack->height <= 1 + checkMonomialProperty ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* When the stack height reaches 2 (1 row cell, 1 col cell), for normal
+      matrices, or 3 (1 row cell, 2 col cells), for monomial matrices, perform
+      initializations for nextCellSameType, etc. */
+   if ( UpsilonStack->height == 2 + checkMonomialProperty ) {
+      firstRowCell = (CELL_TYPE(1) == ROW) ? 1 : 2;
+      firstColCell = 3 - firstRowCell;
+      lastRowCell = firstRowCell;
+      lastColCell = firstColCell;
+      nextCellSameType[1] = nextCellSameType[2] = 0;
+   }
+
+   /* If we can split the same cell as before using a different weighted
+      sum, do so immediately (priority 1). */
+   if ( listSize > 0 ) {
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = 0;
+      reducingRefn.refn.refnParm[2].intParm = list[listSize--];
+      reducingRefn.priority = 1;
+      skipFlag = TRUE;
+      return reducingRefn;
+   }
+
+   /* Consider the next opposing cell for the cell being processed, or the
+      next cell to be processed if there are no more opposing cells.  First
+      we update nextCellSameType  (Note this must be done only here). */
+   for (;;) {
+      if ( nextCellSameType[opposingCell] != 0 )
+         opposingCell = nextCellSameType[opposingCell];
+      else if ( processingCell < UpsilonStack->height ) {
+         ++processingCell;
+         for ( i = MAX(lastRowCell,lastColCell)+1 ; i <= UpsilonStack->height ;
+                                                    ++i ) 
+            switch( CELL_TYPE(i) ) {
+               case ROW:
+                  nextCellSameType[lastRowCell] = i;
+                  lastRowCell = i;
+                  nextCellSameType[i] = 0;
+                  break;
+               case COL:
+                  nextCellSameType[lastColCell] = i;
+                  lastColCell = i;
+                  nextCellSameType[i] = 0;
+                  break;
+            }
+         opposingCell = ( CELL_TYPE(processingCell) == ROW) ? firstColCell:
+                                                              firstRowCell;
+      }
+      else {
+         reducingRefn.priority = IRREDUCIBLE;
+         return reducingRefn;
+      }
+
+      /* Now we try to split opposingCell using processingCell, and an 
+      intersectionCount that guarantees failure.  (This forces rowVsColRefine 
+      to compute the header, etc). */
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = processingCell;
+      reducingRefn.refn.refnParm[2].intParm = UNKNOWN;
+      dummySplit = gRowVsColRefine( family->familyParm, reducingRefn.refn.refnParm, 
+                      UpsilonStack);
+                                                  
+      /* If no splitting occured of opposing cell via processing cell is 
+          possible, nonZeroCount will be 1.  If this occurs, skip to the next 
+          pair (processingCell,opposingCell). */
+      if ( nonZeroCount == 1 )
+         continue;
+
+      /* Now we consider all the possible splittings of opposingCell, reject
+         that giving the largest new cell, and put the others on the list. */
+      for ( k = 1 ; k <= nonZeroCount ; ++k) {
+         freq[k] = 1;
+         p = header[nonZeroPosition[k]];
+         while ( node[p].link != 0 ) {
+            ++freq[k];
+            p = node[p].link;
+         }
+      }
+      maxPos = 1;
+      for ( k = 2 ; k <= nonZeroCount ; ++k )
+         if ( freq[k] > freq[maxPos] )
+            maxPos = k;
+      listSize = 0;
+      for ( k = 1 ; k <= nonZeroCount ; ++k )
+         if ( k != maxPos )
+            list[++listSize] = nonZeroPosition[k];
+
+      /* Finally return the first entry on the list. */
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = opposingCell;
+      reducingRefn.refn.refnParm[1].intParm = processingCell;
+      reducingRefn.refn.refnParm[2].intParm = list[listSize--];
+      reducingRefn.priority = 1;    
+      skipFlag = TRUE;
+      return reducingRefn;
+   }
+}   
+      
+#undef familyParm
+
+
+
+/*-------------------------- informMatrixIso -----------------------------*/
+
+static void informMatrixIso(
+   Permutation *perm)
+{
+   Unsigned trueDegree = perm->degree, i;
+   Permutation *shiftPerm;
+
+   if ( MM_L->numberOfRows + informCols * MM_L->numberOfCols > 
+                                        options.writeConjPerm ) {
+      printf( "     <permutation written to library file>");
+      return;
+   }
+   
+   perm->degree = MM_L->numberOfRows;
+   printf( "   rows: ");
+   writeCyclePerm( perm, 10, 10, 72);
+   perm->degree = trueDegree;
+
+   if ( informCols ) {
+      shiftPerm = newUndefinedPerm( perm->degree);
+      shiftPerm->degree = MM_L->numberOfCols;
+      for ( i = 1 ; i <= MM_L->numberOfCols ; ++i )
+         shiftPerm->image[i] = perm->image[i+MM_L->numberOfRows] - 
+                               MM_L->numberOfRows;
+      printf( "\n\n   cols: ");
+      writeCyclePerm( shiftPerm, 10, 10, 72);
+      shiftPerm->degree = trueDegree;
+      deletePermutation( shiftPerm);
+   }
+}
+   
+
+/*-------------------------- informMatrixMonIso --------------------------*/
+
+static void informMatrixMonIso(
+   Permutation *perm)
+{
+   Unsigned trueDegree = perm->degree, i;
+   Permutation *shiftPerm;
+
+   if ( (MM_L->numberOfRows+informCols*MM_L->numberOfCols) / (MM_L->setSize-1) > 
+                                        options.writeConjPerm ) {
+      printf( "     <permutation written to library file>");
+      return;
+   }
+
+   perm->degree = MM_L->numberOfRows;
+   printf( "  rows: ");
+   writeImageMonomialPerm( perm, MM_L->setSize, 10);
+   perm->degree = trueDegree;
+
+   if ( informCols ) {
+      shiftPerm = newUndefinedPerm( perm->degree);
+      shiftPerm->degree = MM_L->numberOfCols - MM_L->numberOfRows;
+      for ( i = 1 ; i <= shiftPerm->degree ; ++i )
+         shiftPerm->image[i] = perm->image[i+MM_L->numberOfRows] - 
+                               MM_L->numberOfRows;
+      printf( "\n\n  cols: ");
+      writeImageMonomialPerm( shiftPerm, MM_L->setSize, 10);
+      shiftPerm->degree = trueDegree;
+      deletePermutation( shiftPerm);
+   }
+}
+
+
+/*-------------------------- informCodeMonIso ----------------------------*/
+
+static void informCodeMonIso(
+   Permutation *perm)
+{
+   Unsigned trueDegree = perm->degree;
+
+   if ( CC_L->length > options.writeConjPerm ) {
+      printf( "     <permutation written to library file>");
+      return;
+   }
+
+   perm->degree = CC_L->length * (CC_L->fieldSize-1) ;
+   printf( "   ");
+   writeImageMonomialPerm( perm, CC_L->fieldSize, 5);
+   perm->degree = trueDegree;
+
+}
diff --git a/src/leon/src/cmatauto.h b/src/leon/src/cmatauto.h
new file mode 100644
index 0000000..9001867
--- /dev/null
+++ b/src/leon/src/cmatauto.h
@@ -0,0 +1,26 @@
+#ifndef CMATAUTO
+#define CMATAUTO
+
+extern PermGroup *matrixAutoGroup(
+   Matrix_01 *const M,            /* The matrix whose group is to be found. */
+   PermGroup *const L,            /* A (possibly trivial) known subgroup of the
+                                     automorphism group of D.  (A null pointer
+                                     designates a trivial group.) */
+   Code *const C,                 /* If nonnull, the auto grp of the code C is */
+   const BOOLEAN monomialFlag)    /* computed, assuming its group is contained
+                                     in that of the design. */
+;
+
+extern Permutation *matrixIsomorphism(
+   Matrix_01 *const M_L,          /* The first design. */
+   Matrix_01 *const M_R,          /* The second design. */
+   PermGroup *const L_L,          /* A known subgroup of Aut(M_L), or NULL. */
+   PermGroup *const L_R,          /* A known subgroup of Aut(M_R), or NULL. */
+   Code *const C_L,               /* If nonnull, C_R must also be nonull, and */
+   Code *const C_R,               /*   any isomorphism of C_L to C_R must map */
+   const BOOLEAN monomialFlag,    /*   M_L to M_R.  A code isomorphism is     */
+                                  /*   computed.  */
+   const BOOLEAN colInformFlag)   /* Print iso on columns to std output. */
+;
+
+#endif
diff --git a/src/leon/src/code.c b/src/leon/src/code.c
new file mode 100644
index 0000000..9a6201d
--- /dev/null
+++ b/src/leon/src/code.c
@@ -0,0 +1,148 @@
+/* File code.c.  Contains miscellaneous functions for computations with
+   binary codes. */
+
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "errmesg.h"
+#include "storage.h"
+
+CHECK( code)
+
+
+/*-------------------------- reduceBasis ----------------------------------*/
+
+/* The function reduceBasis allocates an infoSet for a code (unless one is
+   already allocated -- if so, it must have the right size) and then performs
+   elementary row operations on the generator matrix in order to make
+   entry infoSet[j],i equal to delta(i,j). */
+
+void reduceBasis(
+   Code *const C)
+{
+   Unsigned row, col, i, j, mu;
+
+   if ( !C->infoSet )
+      C->infoSet = malloc( (C->dimension+2) * sizeof(Unsigned) );
+   for ( row = 1 ; row <= C->dimension ; ++row ) {
+      for ( col = 1 ; col <= C->length && C->basis[row][col] == 0; ++col )
+         ;
+      if ( col > C->length )
+         ERROR( "reduceBasis", "Basis vectors not independent.")
+      C->infoSet[row] = col;
+      if ( C->fieldSize == 2 )
+         for ( i = 1 ; i <= C->dimension ; ++i )
+            if ( i != row && C->basis[i][col] != 0 )
+               for ( j = 1 ; j <= C->length ; ++j )
+                  C->basis[i][j] ^= C->basis[row][j];
+            else
+               ;
+      else {
+         mu = C->field->inv[C->basis[row][col]];
+         for ( j = 1 ; j <= C->length ; ++j )
+            C->basis[row][j] = C->field->prod[mu][C->basis[row][j]];
+         for ( i = 1 ; i <= C->dimension ; ++i )
+            if ( i != row && C->basis[i][col] != 0 ) {
+               mu = C->basis[i][col];
+               for ( j = 1 ; j <= C->length ; ++j )
+                  C->basis[i][j] = C->field->dif[C->basis[i][j]]
+                                     [C->field->prod[mu][C->basis[row][j]]];
+            }
+      }
+   }
+}
+
+
+/*-------------------------- codeContainsVector ----------------------------*/
+
+/* The function codeContainsVector( C, v) returns true is the vector v is
+   contained in the code C and false otherwise.  The vector v is destroyed.
+   Here a vector is simply an array of characters.  If C does not have a
+   canonical basis, one is constructed. */
+
+BOOLEAN codeContainsVector(
+   Code *const C,
+   char *const v)
+{
+   Unsigned i, j, col, mu;
+
+   /* If a canonical basis is not available for C, construct one. */
+   if ( !C->infoSet )
+      reduceBasis( C);
+
+   /* Try to reduce v. */
+   for ( i = 1 ; i <= C->dimension ; ++i ) {
+      col = C->infoSet[i];
+      if ( C->fieldSize == 2 ) {
+         if ( v[col] != 0 )
+            for ( j = 1 ; j <= C->length ; ++j )
+               v[j] ^= C->basis[i][j];
+      }
+      else
+         if ( v[col] != 0 ) {
+            mu = C->basis[i][col];
+            for ( j = 1 ; j <= C->length ; ++j )
+               v[j] = C->field->dif[v[j]][C->field->prod[mu][C->basis[i][j]]];
+         }
+   }
+
+   /* Check if reduction gave the zero vector. */
+   for ( j = 1 ; j <= C->length ; ++j )
+      if ( v[j] != 0 )
+         return FALSE;
+
+   return TRUE;
+}
+
+
+/*-------------------------- isCodeIsomorphism ----------------------------*/
+
+/* The function isCodeIsomorphism( C1, C2, s) returns TRUE if permutation s
+   is an isomorphism of code C1 to code C2 and returns false otherwise. */
+
+BOOLEAN isCodeIsomorphism(
+   Code *const C1,
+   Code *const C2,
+   const Permutation *const s)
+{
+   char *tempVec = allocBooleanArrayDegree();
+   Unsigned i, j, temp, mu, lambda; 
+   Unsigned collapsedDegree;
+
+   if ( C1->length != C2->length || C1->dimension != C2->dimension ||
+        C1->length > s->degree )
+      ERROR( "isCodeIsomorphism", "Lengths or degrees not compatible.")
+
+
+   /* If the field size exceeds 2, check that s satisfies monomial property. */
+   if ( C1->fieldSize > 2 ) {
+      collapsedDegree = C1->length / (C1->fieldSize-1);      
+      for ( i = 1 ; i <= collapsedDegree ; ++i ) {
+         /* Find mu,j such that s(1*i) = mu*j. */
+         temp = s->image[(C1->fieldSize-1)*(i-1)+1];
+         j = (temp-1) / (C1->fieldSize-1) + 1;
+         mu = (temp-1) % (C1->fieldSize-1) + 1;
+         for ( lambda = 2 ; lambda < C1->fieldSize ; ++lambda )
+            if ( s->image[(C1->fieldSize-1)*(i-1)+lambda] !=
+                 (C1->fieldSize-1)*(j-1) + C1->field->prod[lambda][mu] ) {
+               freeBooleanArrayDegree( tempVec);
+               return FALSE;
+            }
+      }
+   }
+
+   /* Now check that each basis vector of C1 lies in C2. */
+   for ( i = 1 ; i <= C1->dimension ; ++i ) {
+      for ( j = 1 ; j <= C1->length ; ++j )
+         tempVec[s->image[j]] = C1->basis[i][j];
+      if ( !codeContainsVector(C2,tempVec) ) {
+         freeBooleanArrayDegree( tempVec);
+         return FALSE;
+      }
+   }
+
+   freeBooleanArrayDegree( tempVec);
+   return TRUE;
+}
+
diff --git a/src/leon/src/code.h b/src/leon/src/code.h
new file mode 100644
index 0000000..f27ff84
--- /dev/null
+++ b/src/leon/src/code.h
@@ -0,0 +1,19 @@
+#ifndef CODE
+#define CODE
+
+extern void reduceBasis(
+   Code *const C)
+;
+
+extern BOOLEAN codeContainsVector(
+   Code *const C,
+   char *const v)
+;
+
+extern BOOLEAN isCodeIsomorphism(
+   Code *const C1,
+   Code *const C2,
+   const Permutation *const s)
+;
+
+#endif
diff --git a/src/leon/src/codeauto.sh b/src/leon/src/codeauto.sh
new file mode 100755
index 0000000..5e0c65f
--- /dev/null
+++ b/src/leon/src/codeauto.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+desauto -code $*
diff --git a/src/leon/src/codeiso.sh b/src/leon/src/codeiso.sh
new file mode 100755
index 0000000..0d3d383
--- /dev/null
+++ b/src/leon/src/codeiso.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+desauto -iso -code $*
diff --git a/src/leon/src/commut.c b/src/leon/src/commut.c
new file mode 100644
index 0000000..252f8e7
--- /dev/null
+++ b/src/leon/src/commut.c
@@ -0,0 +1,288 @@
+/* File commut.c.  Main program for program to compute commutator subgroups.
+   Specifically, if H is a subgroup of G, the program computes the commutator
+   group [G,H].  The formats for the command is
+
+      commut  <options>  <group>  <subgroup>  <commutator>
+   or
+      commut  <options>  <group>  <commutator>
+
+   where in the second case it is understood that <subgroup> equals <group>.
+
+   The meaning of the parameters is as follows:
+
+      <group>:      The group referred to as G above.
+
+      <subgroup>:   The group referred to as H above.  Defaults to G.
+
+      <commutator>: Set to the commutator group [G,H].
+
+   The options are as follows:
+
+      -i          The generators of <commutator> are to be written in image format.
+
+      -overwrite: If the Cayley library file for <commutator> exists, it will
+                  be overwritten to rather than appended to.
+
+   The return code for set or partition stabilizer computations is as follows:
+      0: computation successful,
+      1: computation terminated due to error.
+*/
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "ccommut.h"
+#include "errmesg.h"
+#include "factor.h"
+#include "permgrp.h"
+#include "readgrp.h"
+#include "readper.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+GroupOptions options;
+
+static void verifyOptions(void);
+
+int main( int argc, char *argv[])
+{
+   char groupFileName[MAX_FILE_NAME_LENGTH] = "",
+        subgroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        commutatorFileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1;
+   char groupLibraryName[MAX_NAME_LENGTH+1] = "",
+        subgroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        commutatorLibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH+1] = "",
+        suffix[MAX_NAME_LENGTH+1] = "",
+        commutatorName[MAX_NAME_LENGTH+1] = "";
+   PermGroup *G, *H, *C;
+   BOOLEAN imageFormatFlag = FALSE, HnotequalG, quietFlag, normalClosureFlag;
+   char comment[100];
+
+   /* If no arguments (except possibly -ncl) are given, provide help and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  commut [options] group subgroup commutatorGroup\n");
+      return 0;
+   }
+   else if ( argc == 2 && strcmp(argv[1],"-ncl") == 0 ) {
+      printf( "\nUsage:  ncl [options] group subgroup normalClosure\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1, give limits and
+      return. */
+   if ( argc > 1 && (strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0) ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position 1, perform verify
+      (Note verifyOptions terminates program). */
+   if ( argc > 1 && (strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0) ) 
+      verifyOptions();
+
+   /* Check for exactly 2 or 3 parameters following options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 < 2 || argc - optionCountPlus1 > 3 )
+      ERROR( "main (commut)", "Exactly 2 or 3 parameters are required.")
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   imageFormatFlag = FALSE;
+   quietFlag = FALSE;
+   normalClosureFlag = FALSE;
+   strcpy( options.outputFileMode, "w");
+
+   /* Process options. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( commutatorName, argv[i]+3);
+         else
+            ERROR1s( "main (commut)", "Invalid name ", commutatorName,
+                     " for commutator group.")
+      else if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strcmp( argv[i], "-q") == 0 )
+         quietFlag = TRUE;
+      else if ( strcmp( argv[i], "-ncl") == 0 )
+         normalClosureFlag = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   HnotequalG = (argc - optionCountPlus1 == 3);
+   if ( normalClosureFlag && !HnotequalG )
+      ERROR( "main (commut)", "Invalid number of arguments for normal closure")
+
+   /* Compute names for files and libraries. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                     groupFileName, groupLibraryName);
+   if ( HnotequalG )
+      parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                        subgroupFileName, subgroupLibraryName);
+   parseLibraryName( argv[optionCountPlus1+1+HnotequalG], "", "",
+                     commutatorFileName, commutatorLibraryName);
+
+   /* Read in the groups G and H. */
+   G = readPermGroup( groupFileName, groupLibraryName, 0, "Generate");
+   if ( HnotequalG )
+      if ( normalClosureFlag )
+         H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree,
+                         "Generate");
+      else
+         H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree,
+                         "");
+   else
+      H = G;
+
+   /* Now we set C to the commutator of [G,H] of G and H, and write out C. */
+   if ( normalClosureFlag )
+      C = normalClosure( G, H);
+   else
+      C = commutatorGroup( G, H);
+   if ( commutatorName[0] != '\0' )
+      strcpy( C->name, commutatorName);
+   else
+      strcpy( C->name, commutatorLibraryName);
+   C->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+   if ( normalClosureFlag )
+      sprintf( comment, "The normal closure in %s of %s.", G->name, H->name);
+   else
+      sprintf( comment, "The commutator group [%s,%s].", G->name, H->name);
+   writePermGroup( commutatorFileName, commutatorLibraryName, C, comment);
+
+   /* Write commutator group order to std output. */
+   if ( !quietFlag ) {
+      if ( normalClosureFlag )
+         printf( "\nNormal closure %s of %s in %s has order ", C->name,
+                  H->name, G->name);
+      else
+         printf( "\nCommutator group %s = [%s,%s] has order ", C->name,
+                  G->name, H->name);
+      if ( C->order->noOfFactors == 0 )
+         printf( "%d", 1);
+      else
+         for ( i = 0 ; i < C->order->noOfFactors ; ++i ) {
+            if ( i > 0 )
+               printf( " * ");
+            printf( "%u", C->order->prime[i]);
+            if ( C->order->exponent[i] > 1 )
+               printf( "^%u", C->order->exponent[i]);
+         }
+      printf( "  (random Schreier)\n");
+   }
+
+   /* Return to caller. */
+   if ( normalClosureFlag )
+      return 0;
+   else if ( C->order->noOfFactors == 0 )
+      return 0;
+   else if ( H->order )
+      if ( factEqual( H->order, C->order) )
+         return 3;
+      else
+         return 2;
+   else
+      return 4;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xccommu( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xccommu( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xstorag( &mainOpts);
+   xutil  ( &mainOpts);
+}
+
+
+
diff --git a/src/leon/src/commut.h b/src/leon/src/commut.h
new file mode 100644
index 0000000..227c99b
--- /dev/null
+++ b/src/leon/src/commut.h
@@ -0,0 +1,7 @@
+#ifndef COMMUT
+#define COMMUT
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/compcrep.c b/src/leon/src/compcrep.c
new file mode 100644
index 0000000..7482b7e
--- /dev/null
+++ b/src/leon/src/compcrep.c
@@ -0,0 +1,499 @@
+/* File compcrep.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/* Contains function computeCosetRep, which may be used to
+   solve coset-type problems.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "group.h"
+
+/* Bug fix for Waterloo C (IBM 370). */
+#if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE)
+#define FIXUP (unsigned short)
+#define FIXUP1 short
+#else
+#define FIXUP
+#define FIXUP1 Unsigned
+#endif
+
+#ifdef ALT_TIME_HEADER
+#include "cputime.h"
+#endif
+
+#include "chbase.h"
+#include "cstrbas.h"
+#include "errmesg.h"
+#include "inform.h"
+#include "new.h"
+#include "optsvec.h"
+#include "orbit.h"
+#include "orbrefn.h"
+#include "partn.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "rprique.h"
+#include "storage.h"
+
+CHECK( compcr)
+
+extern GroupOptions options;
+extern RefinementFamily ptStabFamily;
+
+#define BACKTRACK  \
+   {if ( options.statistics )  \
+      ++nodesPruned[d];  \
+   while ( d > 0 && RPQ_SIZE(Gamma[d]) < (L_L ? L_L->basicOrbLen[d] : 1) ) { \
+      if ( options.statistics ) {  \
+         nodesVisited[d] += RPQ_SIZE(Gamma[d]);  \
+         nodesPruned[d] += RPQ_SIZE(Gamma[d]);  \
+      }  \
+      --d;  \
+   }  \
+   h = AAA->n_[d];  \
+   if ( d > 0 ) {  \
+      popToHeight( UpsilonStack, AAA->n_[d]);  \
+      f = AAA->invOmega[AAA->alphaHat[d]] - 1;  \
+      for ( m = 0 ; m < orbRefnCount ; ++m )  {  \
+         e[m] = q_[m][d] - 1;  \
+         tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d-1]] = NULL;  \
+         tHatWord[m].revWord = initialRevWord[m] -   \
+                  tHatWord[m].lengthAtLevel[d-1];  \
+      }   \
+   }  \
+   continue;}
+
+
+static void buildDeltaList(
+   PermGroup  *G,                   /* The perm group (base/sgs known). */
+   UnsignedS  *DeltaList[]);        /* Set to the list that is constructed. */
+
+
+/*-------------------------- computeCosetRep ------------------------------*/
+
+/* Given a permutation group G and a property pP such that G_pP (the subset
+   of G consisting of those elements satisfying pP) is a subgroup of G, this
+   function computes and returns a new permutation group equal to G_pP.  In
+   addition to G and pP, a family RRR of pP-refinement processes must be
+   supplied as input to the function.  This is supplied in the form of three
+   array parameters: rRR, isReducible, and orbRefnGroup.  Here
+   *rRR[1],*rRR[2],... are families of pP-refinement processes.  (See file
+   group.h for representation of a refinement family.), and
+   *isReducible[1],*isReducible[2],... are functions taking a partition
+   stack UpsilonStack and a refinement family (with fixed refinement mapping)
+   as parameters such that isReducible[i] a refinement-priority pair:  If the
+   top partition UpsilonTop on UpsilonStack is RRR-irreducible, a priority of
+   IRREDUCIBLE is returned; otherwise a refinement acting nontrivially on
+   UpsilonTop and a priority indicated the relative desirability of this
+   refinement are returned.  For most refinement families, orbRefnGroup will be
+   NULL; when orbRefnGroup[i] is nonnull, computeSubgroup will pass extra
+   information to the refinement rRR[i] and reducibility-check functions
+   isReducible[i]. */
+
+Permutation *computeCosetRep(
+   PermGroup *const G,        /* The permutation group, as above.  A base/sgs
+                                 must be known (unless name is "symmetric"). */
+   Property *const pP,        /* The subgroup-type property, as above.  A value
+                                 of NULL may be used to suppress checking pP.*/
+   RefinementFamily           /* (Ptr to) null-terminated list of refinement */
+           *const RRR[],      /*    family pointers (List starts rrR[1].) */
+   ReducChkFn *const          /* (Ptr to) null-terminated list of pointers */
+           isReducible[],     /*    to functions checking rRR-reducibility. */
+   SpecialRefinementDescriptor
+       *const
+       specialRefinement[],   /*   (Ptr to) list of permutation pointers, */
+                              /*   some possibly null.  For nonnull pointers, */
+                              /*   computeCosetRep will keep track of perm t. */
+   ExtraDomain *extra[],
+   PermGroup *const L_L,      /* A known (possibly trivial) subgroup of G_pP_L.
+                                 (Null pointer signifies a trivial group.) */
+   PermGroup *const L_R)       /* A known (possibly trivial) subgroup of G_pP_R.
+                                 (Null pointer signifies a trivial group.) */
+{
+   Permutation    *newPerm = NULL;
+   RBase          *AAA;
+   PartitionStack *UpsilonStack;
+   THatWordType   tHatWord[4];
+   UnsignedS      **initialRevWord[4], **beginRevWord[4];
+   UnsignedS      *betaHat = allocIntArrayBaseSize();
+   RPriorityQueue **Gamma = (RPriorityQueue **) allocPtrArrayBaseSize();
+   UnsignedS      **DeltaList =           /* DeltaList[d][1..] is a null-   */
+                    allocPtrArrayBaseSize();    /* terminated list of points i with */
+                                          /*  alphahat[d] in Delta[i](K)    */
+   Unsigned       d, f, h, i, j, m, pt, delta, oldF, firstMoved;
+   UnsignedS      e[4];
+   UnsignedS      *eta = allocIntArrayDegree();
+   UnsignedS*     q_[4];            /* alloc (mbs+2)*sizeof(UnsignedS) each */
+   BOOLEAN        backtrackFlag;
+   UnsignedS      *pp;
+   UnsignedS      **p;
+   Unsigned       maxBaseChangeLevel;
+   SplitSize      split;
+   UnsignedS      **minPointOfOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+   UnsignedS      **minPointKnown = (UnsignedS **) allocPtrArrayBaseSize();
+   UnsignedS      *minPointKnownCount = allocIntArrayBaseSize();
+   unsigned long  *nodesVisited = allocLongArrayBaseSize();
+   unsigned long  *nodesPruned = allocLongArrayBaseSize();
+   unsigned long  *nodesEssential = allocLongArrayBaseSize();
+   Permutation    *gen;
+   UnsignedS      *longRepLen = allocIntArrayBaseSize();
+   clock_t        RBaseTime, optGroupTime, backtrackTime, startTime;
+   Unsigned       orbRefnCount;
+   UnsignedS      *basicCellSize = allocIntArrayBaseSize();
+
+   /* Allocate q_. */
+   for ( i = 0 ; i <= 3 ; ++i )
+      q_[i] = allocIntArrayDegree();
+
+   /* Initialize nodesVisited and nodesPruned. */
+   for ( i = 0 ; i <= options.maxBaseSize+1 ; ++i ) 
+      nodesVisited[i] = nodesPruned[i] = 0;
+   nodesVisited[0] = 1;
+
+   /* Set orbRefnCount. */
+   for ( i = 0 ; specialRefinement[i] &&
+                 specialRefinement[i]->refnType == 'O' ; ++i ) ;
+   orbRefnCount = i;
+
+   if ( options.inform ) {
+      informOptions();
+      informGroup( G);
+   }
+
+   /* Figure 9, lines 3-4.  These lines construct an rRR-base AAA for G.  (The
+      base and strong generating sets for G itself are changed.  The bases for
+      L_L and L_R are not changed to alphaHat.  A null terminator is added to
+      base of the containing groups.  */
+   startTime = CPU_TIME();
+   AAA = constructRBase( G, RRR, isReducible, specialRefinement,
+                         basicCellSize, extra);
+   for ( m = 0 ; specialRefinement[m] ; ++m )
+      specialRefinement[m]->leftGroup->base
+                    [specialRefinement[m]->leftGroup->baseSize+1] = 0;
+   deletePartitionStack( AAA->PsiStack);
+   AAA->PsiStack = NULL;
+
+   RBaseTime = CPU_TIME();
+   /* Now compression is done by level in constructRBase.
+   if ( options.compress )
+      compressGroup( G); */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      adjoinInverseGen( G, gen);
+   for ( i = 1 ; i <= G->baseSize ; ++i )
+      longRepLen[i] = reconstructBasicOrbit( G, i);
+   if ( options.inform )
+      meanCosetRepLen( G);
+   expandSGS( G, longRepLen, basicCellSize, AAA->ell);
+   if ( options.inform )
+      meanCosetRepLen( G);
+   optGroupTime = CPU_TIME();
+
+   /* Here we adjust each generator of G such that it maps 0 to 0 and
+      degree+1 to degree+1.  This is necessary for the procedure
+      orbRefine. */
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      gen->image[0] = gen->invImage[0] = 0;
+      gen->image[G->degree+1] = gen->invImage[G->degree+1] = G->degree+1;
+   }
+
+   maxBaseChangeLevel = MAX( 0, MIN( options.maxBaseChangeLevel, AAA->ell) );
+   firstMoved = AAA->ell + 1;
+   if ( options.statistics )
+      for ( i = 0 ; i <= AAA->ell ; ++i ) {
+         nodesEssential[i] = 0;
+      }
+
+   /* Here we build an array q_[0][1],...,q_[orbRefnCount-1][AAA->ell] such that
+      alphaHat[d] = specialRefinement[m]->leftGroup->base[q_[d]].  Here
+      the array e is used as a temporary variable. */
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      j = 1;
+      for ( i = 1 ; i <= specialRefinement[m]->leftGroup->baseSize ; ++i )
+         if ( specialRefinement[m]->leftGroup->base[i] == AAA->alphaHat[j] )
+            q_[m][j++] = i;
+   }
+
+   if ( L_L )
+      changeBase( L_L, AAA->alphaHat );
+   if ( L_R )
+      changeBase( L_R, AAA->alphaHat );
+
+   /* Create the group K and initialize it to L (with base alphaHat).
+      Also, if K is nontrivial, build its initial Delta-List. */
+   for ( i = 1 ; i <= AAA->ell+1 ; ++i )
+      DeltaList[i] = allocIntArrayBaseSize();
+   if ( L_L )
+      buildDeltaList( L_L, DeltaList);
+   else
+      for ( i = 1 ; i <= AAA->ell ; ++i ) {
+         DeltaList[i][1] = i;
+         DeltaList[i][2] = 0;
+      }
+
+   /* Allocate the R-Priority queues Gamma[1],...,Gamma[ell] and the
+      permutations tHatWord[i], 0 <= i < orbRefnCount,
+      and initialized to the identity below. */
+   for ( i = 1 ; i <= AAA->ell ; ++i )
+      Gamma[i] = newRPriorityQueue( G->degree, basicCellSize[i]);
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      beginRevWord[m] = (UnsignedS **) malloc( (options.maxWordLength+2) * sizeof(UnsignedS**));
+      tHatWord[m].lengthAtLevel = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(Unsigned *) );
+      tHatWord[m].revWord = initialRevWord[m] = beginRevWord[m] + options.maxWordLength - 1;
+      tHatWord[m].invWord = (UnsignedS **) malloc((options.maxWordLength+1) * sizeof(UnsignedS**));
+      if ( !tHatWord[m].lengthAtLevel || !beginRevWord[m] || !tHatWord[m].invWord )
+         ERROR( "computeSubgroup", "Out of memory.")
+      tHatWord[m].revWord[0] = NULL;
+      tHatWord[m].invWord[0] = NULL;
+      for ( i = 0 ; i <= AAA->ell ; ++i )
+         tHatWord[m].lengthAtLevel[i] = 0;
+   }
+
+   /* Allocate and initialize the arrays used to keep track of which points
+      are minimal in their K_betaHat[1..d-1] orbits. */
+   for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) {
+      minPointOfOrbit[i] = allocIntArrayDegree();
+      for ( pt = 1 ; pt <= G->degree ; ++pt )
+         minPointOfOrbit[i][pt] = 0;
+      minPointKnownCount[i] = 0;
+      minPointKnown[i] = allocIntArrayDegree();
+   }
+
+   /* Figure 9, lines 5-12.  The following lines perform initializations
+      corresponding to starting at the root of the tree. */
+   UpsilonStack = newPartitionStack( G->degree);
+   h = 1;
+   f = 0;
+   for ( i = 0 ; specialRefinement[i] ; ++i )
+      e[i] = 0;
+   if ( AAA->n_[1] == 1 ) {
+      d = 1;
+      initFromPartnStack( Gamma[1], UpsilonStack, 1, AAA);
+   }
+   else
+      d = 0;
+
+   /* Figure 9, line 13.  The main loop begins here.  On each pass, the
+      elementary P-refinement aAA[h] is applied to the top partition on
+      UpsilonStack. */
+   while ( h > 0 ) {
+
+      /* Figure 9, lines 14-21.  The code which follows is executed whenever
+         a node is entered, either by descending from its parent or after
+         backtracking from a descendant of a sibling. */
+
+      if ( h == AAA->n_[d] ) {
+         if ( options.statistics )
+            ++nodesVisited[d];
+         betaHat[d] = removeMin( Gamma[d] );
+         if ( d < firstMoved && betaHat[d] != AAA->alphaHat[d] ) {
+            firstMoved = d;
+            for ( i = (L_R ? 0 : 1) ; i <= maxBaseChangeLevel ; ++i ) {
+               for ( j = 1 ; j <= minPointKnownCount[i] ; ++j )
+                  minPointOfOrbit[i][minPointKnown[i][j]] = 0;
+               minPointKnownCount[i] = 0;
+            }
+         }
+         if ( L_L || L_R ) {
+            backtrackFlag = FALSE ;
+            for ( pp = DeltaList[d]+1 ; *pp ; ++pp )
+               if ( L_R && *pp <= firstMoved + maxBaseChangeLevel && *pp >= firstMoved)
+                  if ( AAA->invOmega[betaHat[*pp]] >
+                            AAA->invOmega[ FIXUP minimalPointOfOrbit( L_R, *pp ,
+                            betaHat[d], minPointOfOrbit[*pp-firstMoved],
+                            minPointKnown[*pp-firstMoved],
+                            &minPointKnownCount[*pp-firstMoved],
+                            AAA->invOmega) ] ) {
+                     backtrackFlag = TRUE;
+                     break;
+                  }
+                  else
+                     ;
+               else
+                  if (AAA->invOmega[betaHat[*pp]] > AAA->invOmega[betaHat[d]]) {
+                     backtrackFlag = TRUE;
+                     break;
+                  }
+         if ( backtrackFlag )
+            BACKTRACK
+         }
+      }
+
+      /* Figure 9, line 22.  Now aAA[h] is applied to the top partition
+         on UpsilonStack, and the result is pushed onto UpsilonStack. */
+      if ( h == AAA->n_[d] )
+         AAA->aAA[h].refnParm[0].intParm = betaHat[d];
+      else if ( AAA->aAA[h].family->refine == orbRefine ) {
+         for ( m = 0 ; AAA->aAA[h].family->familyParm_R[0].ptrParm !=
+                       specialRefinement[m]->rightGroup ; ++m )
+            ;
+         AAA->aAA[h].family->familyParm_R[1].intParm = e[m] + 1;
+         AAA->aAA[h].family->familyParm_R[2].ptrParm = &tHatWord[m];
+      }
+      split = (AAA->aAA[h].family->refine)( AAA->aAA[h].family->familyParm_R,
+                             AAA->aAA[h].refnParm, UpsilonStack );
+
+      /* Figure 9, lines 23-32.  The following lines attempt to prune the
+         current node using Prop. 7(c). */
+      if ( split.newCellSize != AAA->a_[h] )
+         BACKTRACK
+      else
+         ++h;
+
+      oldF = f;
+      if ( split.newCellSize == 1 )
+         eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[h]];
+      if ( split.oldCellSize == 1 )
+         eta[++f] =
+               UpsilonStack->pointList[UpsilonStack->startCell[AAA->b_[h-1]]];
+      for ( i = oldF+1 , backtrackFlag = FALSE ; i <= f ; ++i ) {
+         for ( m = 0 ; m < orbRefnCount ; ++m ) {
+            if ( AAA->omega[i] ==
+                 specialRefinement[m]->leftGroup->base[e[m]+1] ) {
+               ++e[m];
+               delta = eta[i];
+               for ( p = tHatWord[m].invWord ; *p ; ++p )
+                  delta = (*p)[delta];
+               if ( specialRefinement[m]->rightGroup->
+                                          schreierVec[e[m]][delta] )
+                  while ( (gen = specialRefinement[m]->rightGroup->
+                           schreierVec[e[m]][delta]) != FIRST_IN_ORBIT ) {
+                     *p = gen->invImage;
+                     *(--tHatWord[m].revWord) = gen->image;
+                     delta = (*p++)[delta];
+                     *p = NULL;
+                  }
+               else {
+                  backtrackFlag = TRUE;
+                  break;
+               }
+            }
+            else {
+               delta = eta[i];
+               for ( p = tHatWord[m].invWord ; *p ; ++p )
+                  delta = (*p)[delta];
+               if ( delta != AAA->omega[i] ) {
+                  backtrackFlag = TRUE;
+                  break;
+               }
+            }
+            if ( backtrackFlag )
+               break;
+         }
+         if ( backtrackFlag )
+            break;
+      }
+      if ( backtrackFlag)
+         BACKTRACK
+
+      if ( h == G->degree ) {
+
+         /* Figure 9, lines 34-40.  The following lines add a new strong
+            generator, if appropriate. */
+         newPerm = permMapping( G->degree, AAA->omega, eta);
+         if ( !pP || pP(newPerm) ) {
+            for ( i = 0 ; i <= AAA->ell ; ++i )
+               nodesEssential[i] = 1;
+            break;
+         }
+         deletePermutation( newPerm);
+         newPerm = NULL;   
+         BACKTRACK
+      }
+
+      else if ( h == AAA->n_[d+1] ) {
+
+         /* The following lines compute the set Gamma[d+1] of values of
+            betaHat[d+1] corresponding to possible children of the current
+            node, and then descend to the leftmost child. */
+         if ( d >= firstMoved && d < firstMoved+maxBaseChangeLevel ) {
+            if ( L_R )
+               insertBasePoint( L_R, d, betaHat[d] );
+            for ( i = d+1-firstMoved ; i <= maxBaseChangeLevel ; ++i ) {
+               for ( j = 1 ; j <= minPointKnownCount[i] ; ++j )
+                  minPointOfOrbit[i][minPointKnown[i][j]] = 0;
+               minPointKnownCount[i] = 0;
+            }
+         }
+         for ( m = 0 ; m < orbRefnCount ; ++m ) {
+            if ( d > 0 )
+               tHatWord[m].lengthAtLevel[d] = tHatWord[m].lengthAtLevel[d-1];
+            else
+               tHatWord[m].lengthAtLevel[0] = 0;
+            while ( tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d]] )
+               ++tHatWord[m].lengthAtLevel[d];
+         }
+         ++d;
+         initFromPartnStack( Gamma[d], UpsilonStack, AAA->p_[d], AAA);
+      }
+   }
+
+   /* Free temporary storage. */
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      /*DEBUG -- Following code temporarily commented out because it corrupts
+        the heap.
+      free( tHatWord[m].invWord);
+      free( beginRevWord[m]);
+      END DEBUG*/
+   }
+   for ( i = 1 ; i <= AAA->ell ; ++i)
+      deleteRPriorityQueue( Gamma[i]);
+
+   /* Write summary information for subgroup computed, if requested. */
+   backtrackTime = CPU_TIME();
+   if ( options.inform ) {
+      informCosetRep( newPerm);
+      informTime( startTime, RBaseTime, optGroupTime, backtrackTime);
+   }
+
+   /* Write statistics to standard output, if requested. */
+   if ( options.statistics )
+      informStatistics( AAA->ell, nodesVisited, nodesPruned, nodesEssential);
+
+   /* Free pseudo-stack storage. */
+   freeIntArrayBaseSize( betaHat);
+   freePtrArrayBaseSize( Gamma);
+   freePtrArrayBaseSize( DeltaList);          
+   freeIntArrayDegree( eta);
+   freePtrArrayBaseSize( minPointOfOrbit);
+   freePtrArrayBaseSize( minPointKnown);
+   freeIntArrayBaseSize( minPointKnownCount);
+   freeLongArrayBaseSize( nodesVisited);
+   freeLongArrayBaseSize( nodesPruned);
+   freeLongArrayBaseSize( nodesEssential);
+   freeIntArrayBaseSize( longRepLen);
+   freeIntArrayBaseSize( basicCellSize);
+   for ( i = 0 ; i <= 3 ; ++i )
+      freeIntArrayDegree( q_[i]);
+
+   /* Return to caller. */
+   return newPerm;
+}
+
+
+
+/*-------------------------- buildDeltaList -------------------------------*/
+
+/* The function buildDeltaList may be used to construct a two-dimensional
+   array DeltaList, such that DeltaList[d][1..] is the null-terminated list
+   of those integers i with i <= d such that the d'th base point of the group G
+   lies in the i'th basic orbit.  */
+
+static void buildDeltaList(
+   PermGroup *G,                   /* The perm group (base/sgs known). */
+   UnsignedS *DeltaList[])         /* Set to the list that is constructed. */
+{
+   Unsigned  d, i, listLen, basePt;
+   for ( d = 1 ; d <= G->baseSize ; ++d)  {
+      listLen = 0;
+      basePt = G->base[d];
+      for ( i = 1 ; i <= d ; ++i )
+         if ( G->schreierVec[i][basePt] )
+            DeltaList[d][++listLen] = i;
+      DeltaList[d][++listLen] = 0;
+   }
+}
diff --git a/src/leon/src/compcrep.h b/src/leon/src/compcrep.h
new file mode 100644
index 0000000..7a3ad2b
--- /dev/null
+++ b/src/leon/src/compcrep.h
@@ -0,0 +1,25 @@
+#ifndef COMPCREP
+#define COMPCREP
+
+extern Permutation *computeCosetRep(
+   PermGroup *const G,        /* The permutation group, as above.  A base/sgs
+                                 must be known (unless name is "symmetric"). */
+   Property *const pP,        /* The subgroup-type property, as above.  A value
+                                 of NULL may be used to suppress checking pP.*/
+   RefinementFamily           /* (Ptr to) null-terminated list of refinement */
+           *const RRR[],      /*    family pointers (List starts rrR[1].) */
+   ReducChkFn *const          /* (Ptr to) null-terminated list of pointers */
+           isReducible[],     /*    to functions checking rRR-reducibility. */
+   SpecialRefinementDescriptor
+       *const
+       specialRefinement[],   /*   (Ptr to) list of permutation pointers, */
+                              /*   some possibly null.  For nonnull pointers, */
+                              /*   computeCosetRep will keep track of perm t. */
+   ExtraDomain *extra[],
+   PermGroup *const L_L,      /* A known (possibly trivial) subgroup of G_pP_L.
+                                 (Null pointer signifies a trivial group.) */
+   PermGroup *const L_R)       /* A known (possibly trivial) subgroup of G_pP_R.
+                                 (Null pointer signifies a trivial group.) */
+;
+
+#endif
diff --git a/src/leon/src/compgrp.c b/src/leon/src/compgrp.c
new file mode 100644
index 0000000..61258e2
--- /dev/null
+++ b/src/leon/src/compgrp.c
@@ -0,0 +1,483 @@
+/* File compgrp.c.  Contains main program for command compgrp, which can be
+   used to compare two groups.  The command format is
+
+      compgrp  <options>  <group1>  <group2>
+
+   where <group1> and <group2> are the permutation groups to be compared.
+   The command prints one of the following messages:
+
+      i)   <group1> and <group2> are equal.
+      ii)  <group1> is properly contained in <group2>.
+      iii) <group2> is properly contained in <group1>.
+      iv)  Neither of <group1> or <group2> is contained in the other.
+
+   The return value is 0, 1, 2, or 3 depending on whether (i), (ii), (iii),
+   or (iv) above hold, respectively.  If an error occurs, the return code
+   is 4.
+
+   The only options are -c and -n (and the special options -l and -v, which
+   have their standard meaning).  If -c is specified, the program checks
+   whether the two groups centralize each other.  If -n is specified, it
+   checks whether either group normalizes the other.
+*/
+
+#include <errno.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "errmesg.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "readgrp.h"
+#include "readpar.h"
+#include "readper.h"
+#include "readpts.h"
+#include "util.h"
+
+/* Nonstandard error return code. */
+#undef ERROR_RETURN_CODE
+#define ERROR_RETURN_CODE 4
+
+static int comparePerm(
+   const Permutation *const perm1,
+   const Permutation *const perm2);
+static int comparePointSet(
+   const PointSet *const set1,
+   const PointSet *const set2);
+static int comparePartition(
+   const Partition *const partn1,
+   const Partition *const partn2);
+static void verifyOptions(void);
+
+GroupOptions options;
+
+
+int main( int argc, char *argv[])
+{
+   char group1FileName[MAX_FILE_NAME_LENGTH] = "",
+        group2FileName[MAX_FILE_NAME_LENGTH] = "",
+        group1LibraryName[MAX_NAME_LENGTH] = "",
+        group2LibraryName[MAX_NAME_LENGTH] = "",
+        prefix[MAX_FILE_NAME_LENGTH] = "",
+        suffix[MAX_NAME_LENGTH] = "";
+   PermGroup *group1, *group2 = NULL;
+   Permutation *perm1, *perm2 = NULL;
+   Partition *partn1, *partn2 = NULL;
+   PointSet *set1, *set2 = NULL;
+   Unsigned optionCountPlus1, i, j;
+   Unsigned normalizeFlag = FALSE, centralizeFlag = FALSE,
+            skipNormalize = FALSE, returnCode, degree;
+   BOOLEAN comparePermFlag = FALSE, comparePointSetFlag = FALSE,
+           comparePartitionFlag = FALSE;
+
+   /* If there are no options, provide usage information and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  compgrp [-n] [-c] permGroup1 [permGroup2]\n");
+      return 0;
+   }
+   if ( argc == 2 && strncmp( argv[1], "-perm:", 6) == 0 ) {
+      printf( "\nUsage:  compper degree permutation1 [permutation2]\n");
+      return 0;
+   }
+   if ( argc == 2 && strncmp( argv[1], "-set:", 5) == 0 ) {
+      printf( "\nUsage:  compset degree set1 [set2]\n");
+      return 0;
+   }
+   if ( argc == 2 && strncmp( argv[1], "-partition:", 11 ) == 0 ) {
+      printf( "\nUsage:  comppar degree partition1 [partition2]\n");
+      return 0;
+   }
+
+   /* Count the number of options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   /* Translate options to lower case. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+   }
+
+   /* Check for limits option.  If present in position 1, give limits and
+      return. */
+   if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 )
+      verifyOptions();
+
+   /* Check for at most 2 parameters following options. */
+   if ( argc - optionCountPlus1 > 2 )
+      ERROR( "Compgrp", "Exactly 2 non-option parameters are required.")
+
+   /* Process options. */
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.inform = TRUE;
+   for ( i = 1 ; i < optionCountPlus1 ; ++i )
+      if ( strcmp(argv[i],"-c") == 0 )
+         centralizeFlag = TRUE;
+      else if ( strcmp(argv[i],"-n") == 0 )
+         normalizeFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-perm:", 6) == 0 ) {
+         errno = 0;
+         degree = (Unsigned) strtol(argv[i]+6,NULL,0);
+         comparePermFlag = TRUE;
+         if ( errno )
+            ERROR( "main (compgrp)", "Invalid syntax for -perm option")
+      }
+      else if ( strncmp( argv[i], "-set:", 5) == 0 ) {
+         errno = 0;
+         degree = (Unsigned) strtol(argv[i]+5,NULL,0);
+         comparePointSetFlag = TRUE;
+         if ( errno )
+            ERROR( "main (compgrp)", "Invalid syntax for -set option")
+      }
+      else if ( strncmp( argv[i], "-partition:", 11) == 0 ) {
+         errno = 0;
+         degree = (Unsigned) strtol(argv[i]+11,NULL,0);
+         comparePartitionFlag = TRUE;
+         if ( errno )
+            ERROR( "main (compgrp)", "Invalid syntax for -partition option")
+      }
+      else
+         ERROR1s( "main (compgrp command)", "Invalid option ", argv[i], ".")
+
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute file and library names. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                     group1FileName, group1LibraryName);
+   parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                     group2FileName, group2LibraryName);
+
+   /* Read in groups.  For types other than permutation groups, call special
+      function to perform comparison. */
+   if ( comparePermFlag ) {
+      perm1 = readPermutation( group1FileName, group1LibraryName, degree, FALSE);
+      if ( argc > optionCountPlus1+1 )
+         perm2 = readPermutation( group2FileName, group2LibraryName, degree, FALSE);
+      return comparePerm( perm1, perm2);
+   }
+   else if ( comparePointSetFlag ) {
+      set1 = readPointSet( group1FileName, group1LibraryName, degree);
+      if ( argc > optionCountPlus1+1 )
+         set2 = readPointSet( group2FileName, group2LibraryName, degree);
+      return comparePointSet( set1, set2);
+   }
+   else if ( comparePartitionFlag) {
+      partn1 = readPartition( group1FileName, group1LibraryName, degree);
+      if ( argc > optionCountPlus1+1 )
+         partn2 = readPartition( group2FileName, group2LibraryName, degree);
+      return comparePartition( partn1, partn2);
+   }
+   else {
+      group1 = readPermGroup( group1FileName, group1LibraryName, 0, "Generate");
+      if ( argc > optionCountPlus1+1 )
+         group2 = readPermGroup( group2FileName, group2LibraryName, group1->degree,
+                                                              "Generate");
+   }
+
+   /* If second group is omitted, check if first group is the identity. */
+   if ( !group2 )
+      if ( group1->order->noOfFactors == 0 ) {
+         if ( options.inform )
+            printf( "\n  %s is the identity.\n", group1->name);
+         return 0;
+      }
+      else {
+         if ( options.inform )
+            printf( "\n  %s is not the identity.\n", group1->name);
+         return 1;
+      }
+
+   /* Check containment. */
+   if ( isSubgroupOf(group1,group2) )
+      if ( isSubgroupOf(group2,group1) ) {
+         if ( options.inform )
+            printf( "\n  %s and %s are equal.\n", group1->name, group2->name);
+         if ( centralizeFlag )
+            if ( isCentralizedBy(group1,group2) ) {
+               printf( "  %s and %s centralize each other.\n",
+                       group1->name, group2->name);
+               skipNormalize = TRUE;
+            }
+            else
+               printf( "  %s and %s do not centralize each other.\n",
+                       group1->name, group2->name);
+         returnCode = 0;
+      }
+      else {
+         if ( options.inform )
+            printf( "\n  %s is properly contained in %s.\n", group1->name,
+                                                        group2->name);
+         if ( centralizeFlag )
+            if ( isCentralizedBy(group1,group2) ) {
+               printf( "  %s and %s centralize each other.\n",
+                       group1->name, group2->name);
+               skipNormalize = TRUE;
+            }
+            else
+               printf( "  %s and %s do not centralize each other.\n",
+                       group1->name, group2->name);
+         if ( normalizeFlag && !skipNormalize )
+            if ( isNormalizedBy(group1,group2) )
+               printf( "  %s is normal in %s.\n", group1->name,
+                                                    group2->name);
+            else
+               printf( "  %s is not normal in %s.\n", group1->name,
+                                                    group2->name);
+         returnCode = 1;
+      }
+   else
+      if ( isSubgroupOf(group2,group1) ) {
+         if ( options.inform )
+            printf( "\n  %s is properly contained in %s.\n", group2->name,
+                                                        group1->name);
+         if ( centralizeFlag )
+            if ( isCentralizedBy(group1,group2) ) {
+               printf( "  %s and %s centralize each other.\n",
+                       group1->name, group2->name);
+               skipNormalize = TRUE;
+            }
+            else
+               printf( "  %s and %s do not centralize each other.\n",
+                       group1->name, group2->name);
+         if ( normalizeFlag && !skipNormalize )
+            if ( isNormalizedBy( group2, group1) )
+               printf( "  %s is normal in %s.\n", group2->name,
+                                                    group1->name);
+            else
+               printf( "  %s is not normal in %s.\n", group2->name,
+                                                    group1->name);
+         returnCode = 2;
+      }
+      else {
+         if ( options.inform )    
+            printf( "\n  Neither of %s or %s is contained in the other.\n",
+                                          group1->name, group2->name);
+         if ( centralizeFlag )
+            if ( isCentralizedBy(group1,group2) ) {
+               printf( "  %s and %s centralize each other.\n",
+                       group1->name, group2->name);
+               skipNormalize = TRUE;
+            }
+            else
+               printf( "  %s and %s do not centralize each other.\n",
+                       group1->name, group2->name);
+         if ( normalizeFlag && !skipNormalize ) {
+            if ( isNormalizedBy( group1, group2) )
+               printf( "  %s is normalized by %s.\n", group1->name,
+                                                    group2->name);
+            else
+               printf( "  %s is not normalized by %s.\n", group1->name,
+                                                    group2->name);
+            if ( isNormalizedBy( group2, group1) )
+               printf( "  %s is normalized by %s.\n", group2->name,
+                                                    group1->name);
+            else
+               printf( "  %s is not normalized by %s.\n", group2->name,
+                                                    group1->name);
+         }
+         returnCode = 3;
+      }
+
+   return returnCode;
+}
+
+
+
+/*-------------------------- comparePerm ---------------------------------*/
+
+static int comparePerm(
+   const Permutation *const perm1,
+   const Permutation *const perm2)
+{
+   Unsigned pt;
+
+   if ( perm2 ) {
+      for ( pt = 1 ; pt <= perm1->degree ; ++pt )
+         if ( perm1->image[pt] != perm2->image[pt] ) {
+            if ( options.inform )
+               printf( "\n  %s and %s are not equal.\n", perm1->name,
+                       perm2->name);
+            return 1;
+         }
+      if ( options.inform )
+         printf( "\n  %s and %s are equal.\n", perm1->name, perm2->name);
+      return 0;
+   }
+   else {
+      for ( pt = 1 ; pt <= perm1->degree ; ++pt )
+         if ( perm1->image[pt] != pt ) {
+            if ( options.inform )
+               printf( "\n  %s is not the identity.\n", perm1->name);
+            return 1;
+         }
+      if ( options.inform )
+         printf( "\n  %s is the identity.\n", perm1->name);
+      return 0;
+   }
+}
+
+
+
+
+/*-------------------------- comparePointSet -------------------------------*/
+
+static int comparePointSet(
+   const PointSet *const set1,
+   const PointSet *const set2)
+{
+   Unsigned i;
+   BOOLEAN set1InSet2 = TRUE, set2InSet1 = TRUE;
+
+   if ( set2 ) {
+      for ( i = 1 ; i <= set1->size ; ++i )
+         if ( !set2->inSet[set1->pointList[i]] ) {
+            set1InSet2 = FALSE;
+            break;
+         }
+      for ( i = 1 ; i <= set2->size ; ++i )
+         if ( !set1->inSet[set2->pointList[i]] ) {
+            set2InSet1 = FALSE;
+            break;
+         }
+      if ( set1InSet2 && set2InSet1 ) {
+         if ( options.inform )
+            printf( "\n  Sets %s and %s are equal.\n", set1->name, set2->name);
+         return 0;
+      }
+      else if ( set1InSet2 ) {
+         if ( options.inform )
+            printf( "\n  Set %s is properly contained in set %s.\n", set1->name, 
+                    set2->name);
+         return 1;
+      }
+      else if ( set2InSet1 ) {
+         if ( options.inform )
+            printf( "\n  Set %s is properly contained in set %s.\n", set2->name, 
+                    set1->name);
+         return 2;
+      }
+      else {
+         if ( options.inform )
+            printf( "\n  Neither set %s or set %s is contained in the other.\n", 
+                    set1->name, set2->name);
+         return 3;
+      }
+   }
+   else {
+      if ( set1->size == 0 ) {
+         if ( options.inform ) 
+            printf( "\n  %s is empty.\n", set1->name);
+         return 0;
+      }
+      else {
+         if ( options.inform ) 
+            printf( "\n  %s is not empty.\n", set1->name);
+         return 1;
+      }
+   }
+}
+
+
+/*-------------------------- comparePartition ----------------------------*/
+
+static int comparePartition(
+   const Partition *const partn1,
+   const Partition *const partn2)
+{
+   ERROR( "comparePartition", "Comparison of partitions not yet implemented")
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpe( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/compgrp.h b/src/leon/src/compgrp.h
new file mode 100644
index 0000000..9bd67d7
--- /dev/null
+++ b/src/leon/src/compgrp.h
@@ -0,0 +1,7 @@
+#ifndef COMPGRP
+#define COMPGRP
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/compper.sh b/src/leon/src/compper.sh
new file mode 100755
index 0000000..d1cd73c
--- /dev/null
+++ b/src/leon/src/compper.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+compgrp -perm:$1 $2 $3
diff --git a/src/leon/src/compset.sh b/src/leon/src/compset.sh
new file mode 100755
index 0000000..3f66b1d
--- /dev/null
+++ b/src/leon/src/compset.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+compgrp -set:$1 $2 $3
+
diff --git a/src/leon/src/compsg.c b/src/leon/src/compsg.c
new file mode 100644
index 0000000..51841d4
--- /dev/null
+++ b/src/leon/src/compsg.c
@@ -0,0 +1,603 @@
+/* File compsg.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/* Contains function computeSubgroup, which may be used to
+   compute the subgroup G_pP a specified group G (with known base and strong
+   generating set) consisting of those elements satisfying a specified
+   subgroup-type property pP.  One or more  families RRR of pP-refinement
+   processes must be supplied as input.  One of these families should be the
+   family OOO_G based on the orbit structure of G (unless G is the symmetric
+   group of a very large subgroup of it).  If a known subgroup L of G_pP is
+   known in advance, the algorithm takes advantage of it. The function returns
+   a newly-created group equal to G_pP. */
+
+/* Since refinements are symmetric here, we define the following. */
+#define familyParm familyParm_L
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "group.h"
+
+/* Bug fix for Waterloo C (IBM 370). */
+#if defined(IBMCMSWC) && !defined(SIGNED) && !defined(EXTRA_LARGE)
+#define FIXUP (unsigned short)
+#define FIXUP1 short
+#else
+#define FIXUP
+#define FIXUP1 Unsigned
+#endif
+
+#ifdef ALT_TIME_HEADER
+#include "cputime.h"
+#endif
+
+#include "addsgen.h"
+#include "chbase.h"
+#include "copy.h"
+#include "cstrbas.h"
+#include "errmesg.h"
+#include "inform.h"
+#include "new.h"
+#include "optsvec.h"
+#include "orbit.h"
+#include "orbrefn.h"
+#include "partn.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "ptstbref.h"
+#include "rprique.h"
+#include "storage.h"
+
+CHECK( compsg)
+
+extern GroupOptions options;
+RefinementFamily ptStabFamily = {pointStabRefine};
+
+#define BACKTRACK  \
+   {if ( options.statistics )  \
+      ++nodesPruned[d];  \
+   while ( d > 0 && RPQ_SIZE(Gamma[d]) < K->basicOrbLen[d] ) { \
+      if ( options.statistics ) {  \
+         nodesVisited[d] += RPQ_SIZE(Gamma[d]);  \
+         nodesPruned[d] += RPQ_SIZE(Gamma[d]);  \
+      }  \
+      --d;  \
+   }  \
+   h = AAA->n_[d];  \
+   if ( d > 0 ) {  \
+      popToHeight( UpsilonStack, AAA->n_[d]);  \
+      for ( m = 0 ; extra[m] ; ++m )  \
+         xPopToLevel( extra[m]->xUpsilonStack,  \
+                      extra[m]->applyAfter, AAA->n_[d]);  \
+      f = AAA->invOmega[AAA->alphaHat[d]] - 1;  \
+      for ( m = 0 ; m < orbRefnCount ; ++m )  {  \
+         e[m] = q_[m][d] - 1;  \
+         tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d-1]] = NULL;  \
+         tHatWord[m].revWord = initialRevWord[m] -   \
+                  tHatWord[m].lengthAtLevel[d-1];  \
+      }   \
+   }  \
+   continue;}
+
+
+static void buildDeltaList(
+   PermGroup *G,                   /* The perm group (base/sgs known). */
+   UnsignedS *DeltaList[]);        /* Set to the list that is constructed. */
+
+
+/*-------------------------- Compute Subgroup -----------------------------*/
+
+/* Given a permutation group G and a property pP such that G_pP (the subset
+   of G consisting of those elements satisfying pP) is a subgroup of G, this
+   function computes and returns a new permutation group equal to G_pP.  In
+   addition to G and pP, a family RRR of pP-refinement processes must be
+   supplied as input to the function.  This is supplied in the form of three
+   array parameters: rRR, isReducible, and orbRefnGroup.  Here
+   *rRR[1],*rRR[2],... are families of pP-refinement processes.  (See file
+   group.h for representation of a refinement family.), and
+   *isReducible[1],*isReducible[2],... are functions taking a partition
+   stack UpsilonStack and a refinement family (with fixed refinement mapping)
+   as parameters such that isReducible[i] a refinement-priority pair:  If the
+   top partition UpsilonTop on UpsilonStack is RRR-irreducible, a priority of
+   IRREDUCIBLE is returned; otherwise a refinement acting nontrivially on
+   UpsilonTop and a priority indicated the relative desirability of this
+   refinement are returned.  For most refinement families, orbRefnGroup will be
+   NULL; when orbRefnGroup[i] is nonnull, computeSubgroup will pass extra
+   information to the refinement rRR[i] and reducibility-check functions
+   isReducible[i]. */
+
+PermGroup *computeSubgroup(
+   PermGroup *const G,        /* The permutation group, as above.  A base/sgs
+                                 must be known (unless name is "symmetric"). */
+   Property *const pP,        /* The subgroup-type property, as above.  A value
+                                 of NULL may be used to suppress checking pP.*/
+   RefinementFamily           /* (Ptr to) null-terminated list of refinement */
+       *const RRR[],          /*    family pointers (List starts rrR[1].) */
+   ReducChkFn *const          /* (Ptr to) null-terminated list of pointers */
+       isReducible[],         /*    to functions checking rRR-reducibility. */
+   SpecialRefinementDescriptor
+       *const
+       specialRefinement[],   /*   (Ptr to) list of permutation ptrs, some */
+                              /*   possibly null.  For nonnull pointers, */
+                              /*   computeSubgroup will keep track of perm t. */
+   ExtraDomain *extra[],      /* extra[1], extra[2], ... are extra domains.
+                                 pointer terminates list. */
+   PermGroup *const L)        /* A known (possibly trivial) subgroup of G_pP.
+                                 (Null pointer signifies a trivial group.) */
+
+{
+   PermGroup      *K, *altK;
+   RBase          *AAA;
+   PartitionStack *UpsilonStack;
+   THatWordType   tHatWord[4];
+   UnsignedS      **initialRevWord[4], **beginRevWord[4];
+   UnsignedS      *betaHat = allocIntArrayBaseSize();
+   RPriorityQueue **Gamma = (RPriorityQueue **) allocPtrArrayBaseSize();
+   UnsignedS      **DeltaList =           /* DeltaList[d][1..] is a null-   */
+                    allocPtrArrayBaseSize();    /* terminated list of points i with */
+                                          /*  alphahat[d] in Delta[i](K)    */
+   Unsigned       d, f, h, i, j, m, pt, delta, oldF, firstMoved;
+   UnsignedS      e[4];
+   UnsignedS      *eta = allocIntArrayDegree();
+   UnsignedS*     q_[4];            /* alloc (mbs+2)*sizeof(UnsignedS) each */
+   BOOLEAN        backtrackFlag;
+   UnsignedS      *pp;
+   UnsignedS      **p;
+   Unsigned       maxBaseChangeLevel;
+   SplitSize      split, xSplit;
+   UnsignedS      **minPointOfOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+   UnsignedS      **minPointKnown = (UnsignedS **) allocPtrArrayBaseSize();
+   UnsignedS      *minPointKnownCount = allocIntArrayBaseSize();
+   unsigned long  *nodesVisited = allocLongArrayBaseSize();
+   unsigned long  *nodesPruned = allocLongArrayBaseSize();
+   unsigned long  *nodesEssential = allocLongArrayBaseSize();
+   UnsignedS      *lastGeneratorBaseImage = allocIntArrayBaseSize();
+   Permutation    *gen, *newPerm;
+   clock_t        RBaseTime, optGroupTime, backtrackTime, startTime;
+   Unsigned       orbRefnCount;
+   UnsignedS      *longRepLen = allocIntArrayBaseSize();
+   Unsigned       newGenCount = 0;
+   UnsignedS      *basicCellSize = allocIntArrayBaseSize();
+   ExtraDomain    *ex;
+
+   /* Allocate q_. */
+   for ( i = 0 ; i <= 3 ; ++i )
+      q_[i] = allocIntArrayDegree();
+
+   /* Initialize nodesVisited and nodesPruned. */
+   for ( i = 0 ; i <= options.maxBaseSize+1 ; ++i )
+      nodesVisited[i] = nodesPruned[i] = 0;
+   nodesVisited[0] = 1;
+
+   /* Set orbRefnCount.  */
+   for ( i = 0 ; specialRefinement[i] && specialRefinement[i]->refnType == 'O' ;
+         ++i )
+      ;
+   orbRefnCount = i;
+
+   if ( options.inform ) {
+      informOptions();
+      informGroup( G);
+   }
+
+   /* Figure 9, lines 3-4.  These lines construct an rRR-base AAA for G.  (The
+      base and strong generating sets for G itself are changed.  The base for L
+      is not changed to alphaHat.  A null terminator is added to base of
+      the containing groups.  */
+   startTime = CPU_TIME();
+   AAA = constructRBase( G, RRR, isReducible, specialRefinement,
+         basicCellSize, extra);
+   for ( m = 0 ; specialRefinement[m] ; ++m )
+      specialRefinement[m]->leftGroup->base
+                    [specialRefinement[m]->leftGroup->baseSize+1] = 0;
+   deletePartitionStack( AAA->PsiStack);
+   AAA->PsiStack = NULL;
+
+   RBaseTime = CPU_TIME();
+   /* Now compression is done by level in constructRBase.
+   if ( options.compress )
+      compressGroup( G); */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      adjoinInverseGen( G, gen);
+   for ( i = 1 ; i <= G->baseSize ; ++i )
+      longRepLen[i] = reconstructBasicOrbit( G, i);
+   if ( options.inform )
+      meanCosetRepLen( G);
+   expandSGS( G, longRepLen, basicCellSize, AAA->ell);
+   if ( options.inform )
+      meanCosetRepLen( G);
+   optGroupTime = CPU_TIME();
+
+   /* Here we adjust each generator of G such that it maps 0 to 0 and
+      degree+1 to degree+1.  This is necessary for the procedure
+      orbRefine. */
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      gen->image[0] = gen->invImage[0] = 0;
+      gen->image[G->degree+1] = gen->invImage[G->degree+1] = G->degree+1;
+   }
+
+   maxBaseChangeLevel = MAX( 0, MIN( options.maxBaseChangeLevel, AAA->ell) );
+   firstMoved = AAA->ell + 1;
+   if ( options.statistics )
+      for ( i = 0 ; i <= AAA->ell ; ++i ) {
+         nodesEssential[i] = 1;
+         lastGeneratorBaseImage[i] = AAA->alphaHat[i];
+      }
+
+   /* Here we build an array q_[0][1],...,q_[orbRefnCount-1][AAA->ell] such that
+      alphaHat[d] = specialRefinement[m]->leftGroup->base[q_[d]].  Here
+      the array e is used as a temporary variable. */
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      j = 1;
+      for ( i = 1 ; i <= specialRefinement[m]->leftGroup->baseSize ; ++i )
+         if ( specialRefinement[m]->leftGroup->base[i] == AAA->alphaHat[j] )
+            q_[m][j++] = i;
+   }
+
+   if ( L )
+      changeBase( L, AAA->alphaHat );
+
+   /* Create the group K and initialize it to L (with base alphaHat).
+      Also, if K is nontrivial, build its initial Delta-List. */
+   if ( L )
+      K = L;
+   else {
+      K = newTrivialPermGroup( G->degree);
+      changeBase( K, AAA->alphaHat);
+   }
+   for ( i = 1 ; i <= AAA->ell+1 ; ++i )
+      DeltaList[i] = allocIntArrayBaseSize();
+   if ( isNontrivialGroup(K) )
+      buildDeltaList( K, DeltaList);
+
+   /* Allocate the R-Priority queues Gamma[1],...,Gamma[ell] and the
+      permutations tHatWord[i], 0 <= i < orbRefnCount,
+      and initialized to the identity below. */
+   for ( i = 1 ; i <= AAA->ell ; ++i )
+      Gamma[i] = newRPriorityQueue( G->degree, basicCellSize[i]);
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      beginRevWord[m] = (UnsignedS **) malloc( (options.maxWordLength+7) * sizeof(UnsignedS**));
+      tHatWord[m].lengthAtLevel = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(Unsigned *) );
+      tHatWord[m].revWord = initialRevWord[m] = beginRevWord[m] + options.maxWordLength-1;
+      tHatWord[m].invWord = (UnsignedS **) malloc((options.maxWordLength+2) * sizeof(UnsignedS**));
+      if ( ! tHatWord[m].lengthAtLevel || !beginRevWord[m] || !tHatWord[m].invWord )
+         ERROR( "computeSubgroup", "Out of memory.")
+      tHatWord[m].revWord[0] = NULL;
+      tHatWord[m].invWord[0] = NULL;
+      for ( i = 0 ; i <= AAA->ell ; ++i )
+         tHatWord[m].lengthAtLevel[i] = 0;
+   }
+
+   /* Allocate and initialize the arrays used to keep track of which points
+      are minimal in their K_betaHat[1..d-1] orbits.  In general,
+      minPointOfOrbit[i][..] will keep track of the orbits of
+      K'^(i+firstMoved), 0 <= i <= maxBaseChangeLevel, where the ' indicates
+      the alternate base betaHat[1..]. */
+   for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) {
+      minPointOfOrbit[i] = allocIntArrayDegree();
+      for ( pt = 1 ; pt <= G->degree ; ++pt )
+         minPointOfOrbit[i][pt] = 0;
+      minPointKnownCount[i] = 0;
+      minPointKnown[i] = allocIntArrayDegree();
+   }
+
+   /* Figure 9, lines 5-12.  The following lines perform initializations
+      corresponding to starting at the root of the tree. */
+   if ( maxBaseChangeLevel > 0 )
+      altK = copyOfPermGroup( K);
+   else
+      altK = K;
+   UpsilonStack = newPartitionStack( G->degree);
+   h = 1;
+   f = 0;
+   for ( i = 0 ; specialRefinement[i] ; ++i )
+      e[i] = 0;
+   if ( AAA->n_[1] == 1 ) {
+      d = 1;
+      initFromPartnStack( Gamma[1], UpsilonStack, 1, AAA);
+   }
+   else
+      d = 0;
+
+   backtrackFlag = FALSE;
+   for ( m = 0 ; extra[m] ; ++m ) {
+      ex = extra[m];
+      while ( ex->applyAfter[i = ex->xUpsilonStack->height] == 0 ) {
+  /*     xSplit = (ex->xRRR[i].family->refine)(
+                          ex->xRRR[i].family->familyParm,
+                          ex->xRRR[i].refnParm,
+                          ex->xUpsilonStack); */
+         if ( xSplit.newCellSize != ex->xA_[i] ) {
+            backtrackFlag = TRUE;
+            break;
+         }
+      }
+      if ( backtrackFlag )
+         break;
+   }
+   if ( backtrackFlag )
+      h = 0;
+
+   /* Figure 9, line 13.  The main loop begins here.  On each pass, the
+      elementary P-refinement aAA[h] is applied to the top partition on
+      UpsilonStack. */
+   while ( h > 0 ) {
+
+      /* Figure 9, lines 14-21.  The code which follows is executed whenever
+         a node is entered, either by descending from its parent or after
+         backtracking from a descendant of a sibling. */
+
+      if ( h == AAA->n_[d] ) {
+         if ( options.statistics )
+            ++nodesVisited[d];
+         betaHat[d] = removeMin( Gamma[d] );
+         if ( d < firstMoved && betaHat[d] != AAA->alphaHat[d] ) {
+            firstMoved = d;
+            for ( i = (L ? 0 : 1) ; i <= maxBaseChangeLevel ; ++i ) {
+               for ( j = 1 ; j <= minPointKnownCount[i] ; ++j )
+                  minPointOfOrbit[i][minPointKnown[i][j]] = 0;
+               minPointKnownCount[i] = 0;
+            }
+         }
+         /* In the following, should we check K^(firstMoved) in place of K? */
+         if ( K->order->noOfFactors > 0 ) {
+            backtrackFlag = FALSE ;
+            for ( pp = DeltaList[d]+1 ; *pp ; ++pp )
+               /* In the following line, the second condition is always true
+                  if L is trivial.  Otherwise ???. */
+               if ( *pp <= firstMoved + maxBaseChangeLevel &&
+                                            *pp >= firstMoved )
+                  if ( AAA->invOmega[betaHat[*pp]] >
+                       AAA->invOmega[ FIXUP minimalPointOfOrbit( altK, *pp ,
+                                      betaHat[d],
+                                      minPointOfOrbit[*pp-firstMoved],
+                                      minPointKnown[*pp-firstMoved],
+                                      &minPointKnownCount[*pp-firstMoved],
+                                      AAA->invOmega) ] ) {
+                     backtrackFlag = TRUE;
+                     break;
+                  }
+                  else
+                     ;
+               else
+                  if (AAA->invOmega[betaHat[*pp]] > AAA->invOmega[betaHat[d]]) {
+                     backtrackFlag = TRUE;
+                     break;
+                  }
+         if ( backtrackFlag )
+            BACKTRACK
+         }
+      }
+
+      /* Figure 9, line 22.  Now aAA[h] is applied to the top partition
+         on UpsilonStack, and the result is pushed onto UpsilonStack. */
+      if ( h == AAA->n_[d] )
+         AAA->aAA[h].refnParm[0].intParm = betaHat[d];
+      else if ( AAA->aAA[h].family->refine == orbRefine ) {
+         for ( m = 0 ; AAA->aAA[h].family->familyParm[0].ptrParm !=
+                       specialRefinement[m]->rightGroup ; ++m )
+            ;
+         AAA->aAA[h].family->familyParm[1].intParm = e[m] + 1;
+         AAA->aAA[h].family->familyParm[2].ptrParm = &tHatWord[m];
+      }
+      split = (AAA->aAA[h].family->refine)( AAA->aAA[h].family->familyParm,
+                             AAA->aAA[h].refnParm, UpsilonStack );
+
+      /* Figure 9, lines 23-32.  The following lines attempt to prune the
+         current node using Prop. 7(c). */
+      if ( split.newCellSize != AAA->a_[h] )
+         BACKTRACK
+      else
+         ++h;
+
+      oldF = f;
+      if ( split.newCellSize == 1 )
+         eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[h]];
+      if ( split.oldCellSize == 1 )
+         eta[++f] =
+                UpsilonStack->pointList[UpsilonStack->startCell[AAA->b_[h-1]]];
+      for ( i = oldF+1 , backtrackFlag = FALSE ; i <= f ; ++i ) {
+         for ( m = 0 ; m < orbRefnCount ; ++m ) {
+            if ( AAA->omega[i] ==
+                         specialRefinement[m]->leftGroup->base[e[m]+1] ) {
+               ++e[m];
+               delta = eta[i];
+               for ( p = tHatWord[m].invWord ; *p ; ++p )
+                  delta = (*p)[delta];
+               if (specialRefinement[m]->leftGroup->schreierVec[e[m]][delta])
+                  while ( (gen = specialRefinement[m]->leftGroup->
+                           schreierVec[e[m]][delta]) != FIRST_IN_ORBIT ) {
+                     *p = gen->invImage;
+                     *(--tHatWord[m].revWord) = gen->image;
+                     delta = (*p++)[delta];
+                     *p = NULL;
+                  }
+               else {
+                  backtrackFlag = TRUE;
+                  break;
+               }
+            }
+            else {
+               delta = eta[i];
+               for ( p = tHatWord[m].invWord ; *p ; ++p )
+                  delta = (*p)[delta];
+               if ( delta != AAA->omega[i] ) {
+                  backtrackFlag = TRUE;
+                  break;
+               }
+            }
+            if ( backtrackFlag )
+               break;
+         }
+         if ( backtrackFlag )
+            break;
+      }
+      if ( backtrackFlag)
+         BACKTRACK
+
+      for ( m = 0 ; extra[m] ; ++m ) {
+         ex = extra[m];
+         while ( ex->applyAfter[i = ex->xUpsilonStack->height] == h-1 ) {
+      /*    xSplit = (ex->xRRR[i].family->refine)(
+                             ex->xRRR[i].family->familyParm,
+                             ex->xRRR[i].refnParm,
+                             ex->xUpsilonStack); */
+            if ( xSplit.newCellSize != ex->xA_[i] ) {
+               backtrackFlag = TRUE;
+               break;
+            }
+         }
+         if ( backtrackFlag )
+            break;
+      }
+
+      if ( h == G->degree ) {
+
+         /* Figure 9, lines 34-40.  The following lines add a new strong
+            generator, if appropriate. */
+         newPerm = permMapping( G->degree, AAA->omega, eta);
+         if ( (!pP || pP( newPerm)) &&
+               !isIdentityElt( G, newPerm) ) {
+            if ( options.genNamePrefix[0] != '\0' ) {
+               strcpy( newPerm->name, options.genNamePrefix);
+               sprintf( newPerm->name + strlen(newPerm->name), "%02u",
+                        ++newGenCount);
+            }
+            addStrongGenerator( K, newPerm, TRUE );
+            if ( options.inform )
+               informNewGenerator( K, firstMoved );
+            if ( maxBaseChangeLevel > 0 ) {
+               deletePermGroup( altK);
+               altK = copyOfPermGroup( K);
+               betaHat[AAA->ell+1] = 0;
+               conjugateGroupByPerm( altK, newPerm);
+            }
+            /* Can the following be done only for i = 0? */
+            for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) {
+               for ( j = 1 ; j <= minPointKnownCount[i] ; ++j )
+                  minPointOfOrbit[i][minPointKnown[i][j]] = 0;
+               minPointKnownCount[i] = 0;
+            }
+            buildDeltaList( K, DeltaList);
+            for ( i = firstMoved + 1 ; i <= AAA->ell ; ++i )
+               makeEmpty( Gamma[i] );
+            if ( options.statistics ) {
+               --nodesPruned[AAA->ell];
+               for ( i = 1 ; i <= AAA->ell &&
+                             newPerm->image[AAA->alphaHat[i]] ==
+                             lastGeneratorBaseImage[i] ; ++i )
+                  ;
+               for ( j = i ; j <= AAA->ell ; ++j ) {
+                  lastGeneratorBaseImage[i] = newPerm->image[AAA->alphaHat[i]];
+                  ++nodesEssential[j];
+               }
+            }
+         }
+         else
+            deletePermutation( newPerm);
+         BACKTRACK
+      }
+
+      else if ( h == AAA->n_[d+1] ) {
+
+         /* The following lines compute the set Gamma[d+1] of values of
+            betaHat[d+1] corresponding to possible children of the current
+            node, and then descend to the leftmost child. */
+         if ( d >= firstMoved && d < firstMoved+maxBaseChangeLevel ) {
+            insertBasePoint( altK, d, betaHat[d] );
+            for ( i = d+1-firstMoved ; i <= maxBaseChangeLevel ; ++i ) {
+               for ( j = 1 ; j <= minPointKnownCount[i] ; ++j )
+                  minPointOfOrbit[i][minPointKnown[i][j]] = 0;
+               minPointKnownCount[i] = 0;
+            }
+         }
+         for ( m = 0 ; m < orbRefnCount ; ++m ) {
+            if ( d > 0 )
+               tHatWord[m].lengthAtLevel[d] = tHatWord[m].lengthAtLevel[d-1];
+            else
+               tHatWord[m].lengthAtLevel[0] = 0;
+            while ( tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d]] )
+               ++tHatWord[m].lengthAtLevel[d];
+         }
+         ++d;
+         initFromPartnStack( Gamma[d], UpsilonStack, AAA->p_[d], AAA);
+      }
+   }
+
+   /* Free temporary storage. */
+   if ( maxBaseChangeLevel > 0 )
+      deletePermGroup( altK);
+   for ( m = 0 ; m < orbRefnCount ; ++m ) {
+      /*DEBUG -- Following code temporarily commented out because it corrupts
+        the heap.
+      free( tHatWord[m].invWord);
+      free( beginRevWord[m]);
+      END DEBUG*/
+   }
+   for ( i = 1 ; i <= AAA->ell ; ++i)
+      deleteRPriorityQueue( Gamma[i]);
+
+   /* Write summary information for subgroup computed, if requested. */
+   backtrackTime = CPU_TIME();
+   if ( options.inform ) {
+      informSubgroup( K);
+      informTime( startTime, RBaseTime, optGroupTime, backtrackTime);
+   }
+
+   /* Write statistics to standard output, if requested. */
+   if ( options.statistics ) {
+      --nodesPruned[AAA->ell];    /* identity node not counted as pruned. */
+      informStatistics( AAA->ell, nodesVisited, nodesPruned, nodesEssential);
+   }
+
+   /* Free pseudo-stack storage. */
+   freeIntArrayBaseSize( betaHat);
+   freePtrArrayBaseSize( Gamma);
+   freePtrArrayBaseSize( DeltaList);
+   freeIntArrayDegree( eta);
+   freePtrArrayBaseSize( minPointOfOrbit);
+   freePtrArrayBaseSize( minPointKnown);
+   freeIntArrayBaseSize( minPointKnownCount);
+   freeLongArrayBaseSize( nodesVisited);
+   freeLongArrayBaseSize( nodesPruned);
+   freeLongArrayBaseSize( nodesEssential);
+   freeIntArrayBaseSize( lastGeneratorBaseImage);
+   freeIntArrayBaseSize( longRepLen);
+   freeIntArrayBaseSize( basicCellSize);
+   for ( i = 0 ; i <= 3 ; ++i )
+      freeIntArrayDegree( q_[i]);
+
+   /* Return to caller. */
+   return K;
+}
+
+
+
+/*-------------------------- buildDeltaList -------------------------------*/
+
+/* The function buildDeltaList may be used to construct a two-dimensional
+   array DeltaList, such that DeltaList[d][1..] is the null-terminated list
+   of those integers i with i <= d such that the d'th base point of the group G
+   lies in the i'th basic orbit. */
+
+static void buildDeltaList(
+   PermGroup *G,                   /* The perm group (base/sgs known). */
+   UnsignedS *DeltaList[])         /* Set to the list that is constructed. */
+{
+   Unsigned  d, i, listLen, basePt;
+   for ( d = 1 ; d <= G->baseSize ; ++d) {
+      listLen = 0;
+      basePt = G->base[d];
+      for ( i = 1 ; i <= d ; ++i )
+         if ( G->schreierVec[i][basePt] )
+            DeltaList[d][++listLen] = i;
+      DeltaList[d][++listLen] = 0;
+   }
+}
diff --git a/src/leon/src/compsg.h b/src/leon/src/compsg.h
new file mode 100644
index 0000000..15e2a95
--- /dev/null
+++ b/src/leon/src/compsg.h
@@ -0,0 +1,25 @@
+#ifndef COMPSG
+#define COMPSG
+
+extern PermGroup *computeSubgroup(
+   PermGroup *const G,        /* The permutation group, as above.  A base/sgs
+                                 must be known (unless name is "symmetric"). */
+   Property *const pP,        /* The subgroup-type property, as above.  A value
+                                 of NULL may be used to suppress checking pP.*/
+   RefinementFamily           /* (Ptr to) null-terminated list of refinement */
+       *const RRR[],          /*    family pointers (List starts rrR[1].) */
+   ReducChkFn *const          /* (Ptr to) null-terminated list of pointers */
+       isReducible[],         /*    to functions checking rRR-reducibility. */
+   SpecialRefinementDescriptor
+       *const
+       specialRefinement[],   /*   (Ptr to) list of permutation ptrs, some */
+                              /*   possibly null.  For nonnull pointers, */
+                              /*   computeSubgroup will keep track of perm t. */
+   ExtraDomain *extra[],      /* extra[1], extra[2], ... are extra domains.
+                                 pointer terminates list. */
+   PermGroup *const L)        /* A known (possibly trivial) subgroup of G_pP.
+                                 (Null pointer signifies a trivial group.) */
+
+;
+
+#endif
diff --git a/src/leon/src/conj.sh b/src/leon/src/conj.sh
new file mode 100755
index 0000000..42c4043
--- /dev/null
+++ b/src/leon/src/conj.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cent -conj $*
diff --git a/src/leon/src/copy.c b/src/leon/src/copy.c
new file mode 100644
index 0000000..52f483a
--- /dev/null
+++ b/src/leon/src/copy.c
@@ -0,0 +1,169 @@
+/* File copy.c.  Contains functions to create copies of objects.  Each
+   function allocates storage for a new object, which is totally disjoint
+   from the object being copies (i.e., the existing object and the new
+   copy do not contain direct or indirect pointers to common objects, and
+   it returns a pointer to the new object.  The functions are:
+
+      copyOfPermGroup:  create a new copy of a permutation group. */
+
+#include <stddef.h>
+#include <string.h>
+
+#include "group.h"
+
+#include "essentia.h"
+#include "storage.h"
+
+CHECK( copy)
+
+/*-------------------------- copyOfPermutation ----------------------------*/
+
+/* This function creates a new copy of an existing permutation, and it
+   returns a pointer to the new permutation.  The link fields of the new
+   permutation are not copied, or otherwise initialized, and currently the
+   word field is not supported. */
+
+Permutation *copyOfPermutation(
+   Permutation *oldPerm)         /* The permutation to be copied. */
+{
+   Unsigned pt;
+   Permutation *newPerm = allocPermutation();
+
+   strcpy( newPerm->name, oldPerm->name);
+   newPerm->degree = oldPerm->degree;
+
+   if ( oldPerm->image ) {
+      newPerm->image = allocIntArrayDegree();
+      for ( pt = 1 ; pt <= oldPerm->degree+1 ; ++pt )
+         newPerm->image[pt] = oldPerm->image[pt];
+   }
+   else
+      newPerm->image = NULL;
+
+   if ( oldPerm->invImage ) {
+      if ( oldPerm->invImage == oldPerm->image )
+         newPerm->invImage = newPerm->image;
+      else {
+         newPerm->invImage = allocIntArrayDegree();
+         for ( pt = 1 ; pt <= oldPerm->degree+1 ; ++pt )
+            newPerm->invImage[pt] = oldPerm->invImage[pt];
+      }
+   }
+   newPerm->level = oldPerm->level;
+   COPY_ESSENTIAL( newPerm, oldPerm);
+
+   return newPerm;
+}
+
+
+/*-------------------------- copyOfPermGroup ------------------------------*/
+
+/* This function creates a new copy of an existing permutation group, and it
+   returns a pointer to the new group.  Note the word field of the
+   generating permutations is not currently supported.  The xNext field
+   of the generators of the old group is modified. */
+
+PermGroup *copyOfPermGroup(
+   PermGroup *oldGroup)          /* The group being copied. */
+{
+   Unsigned i, level, pt;
+   Permutation *oldGen, *newGen, *previousGen, *temp;
+   PermGroup *newGroup = allocPermGroup();
+
+   /* Copy name, degree, base size, base, and basic orbit lengths. */
+   strcpy( newGroup->name, oldGroup->name);
+   newGroup->degree = oldGroup->degree;
+
+   /* Copy the base size, base, and basic orbit lengths, if present in the
+      old group. */
+   if ( oldGroup->base ) {
+      newGroup->baseSize = oldGroup->baseSize;
+      newGroup->base = allocIntArrayBaseSize();
+      for ( i = 1 ; i <= oldGroup->baseSize+1 ; ++i )
+         newGroup->base[i] = oldGroup->base[i];
+      newGroup->basicOrbLen = allocIntArrayBaseSize();
+      for ( i = 1 ; i <= oldGroup->baseSize ; ++i )
+         newGroup->basicOrbLen[i] = oldGroup->basicOrbLen[i];
+   }
+
+   /* Copy the order, if present. */
+   if ( oldGroup->order ) {
+      newGroup->order = allocFactoredInt();
+      newGroup->order->noOfFactors = oldGroup->order->noOfFactors;
+      for ( i = 0 ; i < oldGroup->order->noOfFactors ; ++i ) {
+         newGroup->order->prime[i] = oldGroup->order->prime[i];
+         newGroup->order->exponent[i] = oldGroup->order->exponent[i];
+      }
+   }
+
+   /* Copy basic orbits. */
+   if ( oldGroup->base && oldGroup->basicOrbit ) {
+      newGroup->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+      for ( level = 1 ; level <= oldGroup->baseSize ; ++level ) {
+         newGroup->basicOrbit[level] = allocIntArrayDegree();
+         for ( i = 1 ; i <= oldGroup->basicOrbLen[level]+1 ; ++i )
+            newGroup->basicOrbit[level][i] = oldGroup->basicOrbit[level][i];
+      }
+   }
+
+   /* Copy generators.  The xNext field of each old generator is set to
+      point to the corresponding new generator (for use in Schreier vector
+      construction. */
+   newGroup->generator = previousGen = NULL;
+   for ( oldGen = oldGroup->generator ; oldGen ; oldGen = oldGen->next ) {
+      newGen = copyOfPermutation( oldGen);
+      if ( previousGen ) {
+         previousGen->next = newGen;
+         newGen->last = previousGen;
+      }
+      else {
+         newGroup->generator = newGen;
+         newGen->last = NULL;
+      }
+      newGen->next = NULL;
+      oldGen->xNext = newGen;
+      previousGen = newGen;
+   }
+
+   /* Copy the Schreier vectors. */
+   if ( oldGroup->base && oldGroup->schreierVec ) {
+      newGroup->schreierVec = (Permutation ***) allocPtrArrayBaseSize();
+      for ( level = 1 ; level <= oldGroup->baseSize ; ++level ) {
+         newGroup->schreierVec[level] = (Permutation **) allocPtrArrayDegree();
+         for ( i = 1 ; i <= oldGroup->degree ; ++i )
+            if ( (temp = oldGroup->schreierVec[level][i]) == NULL ||
+                 temp == FIRST_IN_ORBIT )
+               newGroup->schreierVec[level][i] = temp;
+            else
+               newGroup->schreierVec[level][i]  =temp->xNext;
+      }
+   }
+
+   /* Copy the list of points. */
+   if ( oldGroup->omega ) {
+      newGroup->omega = allocIntArrayDegree();
+      for ( pt =1 ; pt <= oldGroup->degree ; ++pt )
+         newGroup->omega[pt] = oldGroup->omega[pt];
+   }
+   else
+      newGroup->omega = NULL;
+
+   if ( oldGroup->invOmega ) {
+      newGroup->invOmega = allocIntArrayDegree();
+      for ( pt =1 ; pt <= oldGroup->degree ; ++pt )
+         newGroup->invOmega[pt] = oldGroup->invOmega[pt];
+   }
+   else
+      newGroup->invOmega = NULL;
+
+   return newGroup;
+}
+
+
+
+
+
+
+
+
+
diff --git a/src/leon/src/copy.h b/src/leon/src/copy.h
new file mode 100644
index 0000000..341b231
--- /dev/null
+++ b/src/leon/src/copy.h
@@ -0,0 +1,12 @@
+#ifndef COPY
+#define COPY
+
+extern Permutation *copyOfPermutation(
+   Permutation *oldPerm)         /* The permutation to be copied. */
+;
+
+extern PermGroup *copyOfPermGroup(
+   PermGroup *oldGroup)          /* The group being copied. */
+;
+
+#endif
diff --git a/src/leon/src/cparstab.c b/src/leon/src/cparstab.c
new file mode 100644
index 0000000..9487994
--- /dev/null
+++ b/src/leon/src/cparstab.c
@@ -0,0 +1,303 @@
+/* File cparstab.c.  Contains function partnStabilizer, the main function for a
+   program that may be used to compute the stabilizer in a permutation group
+   of an ordered partition.  Also contains functions as follows:
+
+      parStabRefnInitialize:  Initialize set stabilizer refinement functions.
+      setStabRefine:          A refinement family based on the set stabilizer
+                              property.
+      isSetStabReducible:     A function to check SSS-reducibility. */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "compcrep.h"
+#include "compsg.h"
+#include "errmesg.h"
+#include "orbrefn.h"
+
+CHECK( cparst)
+
+RefinementMapping partnStabRefine;
+ReducChkFn isPartnStabReducible;
+ void initializePartnStabRefn(void);
+
+static Partition *knownIrreducible[10]  /* Null terminated 0-base list of */
+                = {NULL};               /*  point sets Lambda for which top */
+                                        /*  partition on UpsilonStack is */
+                                        /*  known to be SSS_Lambda irred. */
+
+
+/*-------------------------- partnStabilizer ------------------------------*/
+
+/* Function partnStabilizer.  Returns a new permutation group representing the
+   stabilizer in a permutation group G of an ordered partition Lambda of the
+   point set Omega.  The algorithm is based on Figure 9 in the paper
+   "Permutation group algorithms based on partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *partnStabilizer(
+   PermGroup *const G,             /* The containing permutation group. */
+   const Partition *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)             /* A (possibly trivial) known subgroup of the
+                                      stabilizer in G of Lambda.  (A null pointer
+                                      designates a trivial group.) */
+{
+   RefinementFamily OOO_G, SSS_Lambda;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm[0].ptrParm = G;
+
+   SSS_Lambda.refine = partnStabRefine;
+   SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isPartnStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeOrbRefine( G);
+   initializePartnStabRefn();
+
+   return  computeSubgroup( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
+/*-------------------------- partnImage -----------------------------------*/
+
+/* Function partnImage.  Returns a new permutation in a specified group G mapping
+   a specified partition Lambda to a specified partition Xi.  The algorithm is
+   based on Figure 9 in the paper "Permutation group algorithms based on
+   partitions" by the author. */
+
+Permutation *partnImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Partition *const Lambda,  /* One of the partitions. */
+   const Partition *const Xi,      /* The other partition. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+{
+   RefinementFamily OOO_G, SSS_Lambda_Xi;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm_L[0].ptrParm = G;
+   OOO_G.familyParm_R[0].ptrParm = G;
+
+   SSS_Lambda_Xi.refine = partnStabRefine;
+   SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda;
+   SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda_Xi;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isPartnStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeOrbRefine( G);
+   initializePartnStabRefn();
+
+   return  computeCosetRep( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L_L, L_R);
+}
+
+
+/*-------------------------- initializePartnStabRefn ----------------------*/
+
+void initializePartnStabRefn( void)
+{
+   knownIrreducible[0] = NULL;
+}
+
+
+/*-------------------------- partnStabRefine ------------------------------*/
+
+/* The function implements the refinement family partnStabRefine (denoted
+   SSS_Lambda in the reference).  This family consists of the elementary
+   refinements ssS_{Lambda,i,j}, where Lambda fixed.  (It is the partition to
+   be stabilized) and where 1 <= i, j <= degree.  Application of
+   sSS_{Lambda,i,j} to UpsilonStack splits off from UpsilonTop the intersection
+   of the j'th cell of Lambda and the i'th cell of UpsilonTop from cell i of
+   the top partition of UpsilonStack and pushes the resulting partition onto
+   UpsilonStack, unless sSS_{Lambda,i,j} acts trivially on UpsilonTop, in
+   which case UpsilonStack remains unchanged.
+
+   The family parameter is:
+         familyParm[0].ptrParm:  Lambda
+   The refinement parameters are:
+         refnParm[0].intParm:    i,
+         refnParm[1].intParm:    j.
+
+   In the expectation that this refinement will be applied only a small number
+   of times, no attempt has been made to optimize this procedure. */
+
+
+SplitSize partnStabRefine(
+   const RefinementParm familyParm[],      /* Family parm: Lambda. */
+   const RefinementParm refnParm[],        /* Refinement parm: i. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   Partition *Lambda = familyParm[0].ptrParm;
+   Unsigned  cellToSplit = refnParm[0].intParm,
+             LambdaCellToUse = refnParm[1].intParm;
+   Unsigned  m, last, i, j, temp;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   SplitSize  split;
+   BOOLEAN cellSplits;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   cellSplits = FALSE;
+   for ( m = startCell[cellToSplit]+1 , last = m -1 + cellSize[cellToSplit] ;
+         m < last ; ++m )
+      if ( (Lambda->cellNumber[pointList[m]] == LambdaCellToUse) !=
+           (Lambda->cellNumber[pointList[m-1]] == LambdaCellToUse) ) {
+         cellSplits = TRUE;
+         break;
+      }
+   if ( !cellSplits ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   i = startCell[cellToSplit]-1;
+   j = last;
+   while ( i < j ) {
+      while ( Lambda->cellNumber[pointList[++i]] != LambdaCellToUse ) ;
+      while ( Lambda->cellNumber[pointList[--j]] == LambdaCellToUse ) ;
+      if ( i < j ) {
+         EXCHANGE( pointList[i], pointList[j], temp)
+         EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp)
+      }
+   }
+   ++UpsilonStack->height;
+   for ( m = i ; m < last ; ++m )
+      UpsilonStack->cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = i;
+   parent[UpsilonStack->height] = cellToSplit;
+   cellSize[UpsilonStack->height] = last - i;
+   cellSize[cellToSplit] -= (last - i);
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+}
+
+
+/*-------------------------- isPartnStabReducible -------------------------*/
+
+/* The function isPartnStabReducible checks whether the top partition on a
+   given partition stack is SSS_Lambda-reducible, where Lambda is a fixed
+   ordered partition.   If so, it returns a pair consisting of a refinement
+   acting nontrivially on the top partition and a priority.  Otherwise it
+   returns a structure of type RefinementPriorityPair in which the priority
+   field is IRREDUCIBLE.  Assuming
+   that a reducing refinement is found, the (reverse) priority is set very
+   low (1).  Note that, once this function returns negative in the priority
+   field once, it will do so on all subsequent calls.  (The static variable
+   knownIrreducible is set to true in this situation.)  Again, no attempt
+   at efficiency has been made.  */
+
+RefinementPriorityPair isPartnStabReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   Partition *Lambda = family->familyParm_L[0].ptrParm;
+   Unsigned    i, cellNo, position;
+   RefinementPriorityPair reducingRefn;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+
+   /* Check that the refinement mapping really is partnStabRefn, as required. */
+   if ( family->refine != partnStabRefine )
+      ERROR( "isPartnStabReducible", "Error: incorrect refinement mapping");
+
+   /* If the top partition has previously been found to be SSS-irreducible, we
+      return immediately. */
+   for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i )
+      ;
+   if ( knownIrreducible[i] ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* If we reach here, the top partition has not been previously found to be
+      SSS-irreducible.  We check each cell in turn to see if it intersects at
+      least two cells of Lambda.  If such a cell is found, we return
+      immediately. */
+   for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) {
+      for ( position = startCell[cellNo]+1 ; position < startCell[cellNo] +
+                                           cellSize[cellNo] ; ++position )
+         if ( Lambda->cellNumber[pointList[position]] !=
+              Lambda->cellNumber[pointList[position-1]] ) {
+            reducingRefn.refn.family = family;
+            reducingRefn.refn.refnParm[0].intParm = cellNo;
+            reducingRefn.refn.refnParm[1].intParm =
+                                     Lambda->cellNumber[pointList[position]];
+            reducingRefn.priority = 1;
+            return reducingRefn;
+         }
+
+   }
+
+   /* If we reach here, we have found the top partition to be SSS_Lambda
+      irreducible, so we add Lambda to the list knownIrreducible and return. */
+   for ( i = 0 ; knownIrreducible[i] ; ++i )
+      ;
+   if ( i < 9 ) {
+      knownIrreducible[i] = Lambda;
+      knownIrreducible[i+1] = NULL;
+   }
+   else
+      ERROR( "isPartnStabReducible", "Number of point sets exceeded max of 9.")
+
+   reducingRefn.priority = IRREDUCIBLE;
+   return reducingRefn;
+}
diff --git a/src/leon/src/cparstab.h b/src/leon/src/cparstab.h
new file mode 100644
index 0000000..4b6a719
--- /dev/null
+++ b/src/leon/src/cparstab.h
@@ -0,0 +1,38 @@
+#ifndef CPARSTAB
+#define CPARSTAB
+
+extern PermGroup *partnStabilizer(
+   PermGroup *const G,             /* The containing permutation group. */
+   const Partition *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)             /* A (possibly trivial) known subgroup of the
+                                      stabilizer in G of Lambda.  (A null pointer
+                                      designates a trivial group.) */
+;
+
+extern Permutation *partnImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Partition *const Lambda,  /* One of the partitions. */
+   const Partition *const Xi,      /* The other partition. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+;
+
+extern void initializePartnStabRefn( void)
+;
+
+extern SplitSize partnStabRefine(
+   const RefinementParm familyParm[],      /* Family parm: Lambda. */
+   const RefinementParm refnParm[],        /* Refinement parm: i. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+;
+
+extern RefinementPriorityPair isPartnStabReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+;
+
+#endif
diff --git a/src/leon/src/cputime.c b/src/leon/src/cputime.c
new file mode 100644
index 0000000..7e4bf79
--- /dev/null
+++ b/src/leon/src/cputime.c
@@ -0,0 +1,29 @@
+/* File cputime.c.  Contain Unix function cpuTime returning the CPU
+   time in  milliseconds (user+system) used by the current program. 
+   Works at least on Sun/3 and Sun/4. */
+
+#include <time.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#ifndef TICK
+  #error TICK must be defined.
+#endif
+
+#if TICK != 1000
+  #error TICK must have value 1000
+#endif
+
+#undef CLK_TCK
+#define CLK_TCK 1000
+
+clock_t cpuTime(void)
+{
+   struct rusage usage;
+
+   getrusage( RUSAGE_SELF, &usage);
+   return (clock_t) ( usage.ru_utime.tv_usec / 1000 +
+                      usage.ru_utime.tv_sec * 1000  +
+                      usage.ru_stime.tv_usec / 1000 +
+                      usage.ru_stime.tv_sec * 1000 );
+}
diff --git a/src/leon/src/cputime.h b/src/leon/src/cputime.h
new file mode 100644
index 0000000..e73f1f6
--- /dev/null
+++ b/src/leon/src/cputime.h
@@ -0,0 +1,12 @@
+#ifndef CPUTIME
+#define CPUTIME
+
+#ifdef CLK_TCK
+  #undef CLK_TCK
+#endif
+#define CLK_TCK 1000
+
+extern clock_t cpuTime(void)
+;
+
+#endif
diff --git a/src/leon/src/csetstab.c b/src/leon/src/csetstab.c
new file mode 100644
index 0000000..82cba0f
--- /dev/null
+++ b/src/leon/src/csetstab.c
@@ -0,0 +1,305 @@
+/* File csetstab.c.  Contains function setStabilizer, the main function for a
+   program that may be used to compute the stabilizer in a permutation group
+   of a subset of the set of points.  Also contains functions as follows:
+
+      setStabRefnInitialize:  Initialize set stabilizer refinement functions.
+      setStabRefine:          A refinement family based on the set stabilizer
+                              property.
+      isSetStabReducible:     A function to check SSS-reducibility. */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "compcrep.h"
+#include "compsg.h"
+#include "errmesg.h"
+#include "orbrefn.h"
+
+CHECK( csetst)
+
+extern GroupOptions options;
+
+static RefinementMapping setStabRefine;
+static ReducChkFn isSetStabReducible;
+static void initializeSetStabRefn(void);
+
+static PointSet *knownIrreducible[10]  /* Null terminated 0-base list of */
+                = {NULL};              /*  point sets Lambda for which top */
+                                       /*  partition on UpsilonStack is */
+                                       /*  known to be SSS_Lambda irred. */
+
+
+/*-------------------------- setStabilizer --------------------------------*/
+
+/* Function setStabilizer.  Returns a new permutation group representing the
+   stabilizer in a permutation group G of a subset Lambda of the point set
+   Omega.  The algorithm is based on Figure 9 in the paper "Permutation
+   group algorithms based on partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *setStabilizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PointSet *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+{
+   RefinementFamily OOO_G, SSS_Lambda;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm[0].ptrParm = G;
+
+   SSS_Lambda.refine = setStabRefine;
+   SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isSetStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeOrbRefine( G);
+   initializeSetStabRefn();
+
+   return  computeSubgroup( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+}
+#undef familyParm
+
+
+/*-------------------------- setImage -------------------------------------*/
+
+/* Function setImage.  Returns a new permutation in a specified group G mapping
+   a specified point set Lambda to a specified point set Xi.  The algorithm is
+   based on Figure 9 in the paper "Permutation group algorithms based on
+   partitions" by the author. */
+
+Permutation *setImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PointSet *const Lambda,  /* One of the point sets. */
+   const PointSet *const Xi,      /* The other point set. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+{
+   RefinementFamily OOO_G, SSS_Lambda_Xi;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain *extra[1];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm_L[0].ptrParm = G;
+   OOO_G.familyParm_R[0].ptrParm = G;
+
+   SSS_Lambda_Xi.refine = setStabRefine;
+   SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda;
+   SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda_Xi;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isSetStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   extra[0] = NULL;
+
+   initializeOrbRefine( G);
+   initializeSetStabRefn();
+
+   return  computeCosetRep( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L_L, L_R);
+}
+
+
+/*-------------------------- initializeSetStabRefn ------------------------*/
+
+static void initializeSetStabRefn( void)
+{
+   knownIrreducible[0] = NULL;
+}
+
+/*-------------------------- setStabRefine --------------------------------*/
+
+/* The function implements the refinement family setStabRefine (denoted
+   SSS_Lambda in the reference).  This family consists of the elementary
+   refinements ssS_{Lambda,i}, where Lambda fixed.  (It is the set to be
+   stabilized) and where 1 <= i <= degree.  Application of sSS_{Lambda,i} to
+   UpsilonStack splits off from UpsilonTop the intersection of Lambda and the
+   i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and
+   pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts
+   trivially on UpsilonTop, in which case UpsilonStack remains unchanged.
+
+   The family parameter is:
+         familyParm[0].ptrParm:  Lambda
+   The refinement parameters are:
+         refnParm[0].intParm:    i.
+
+   In the expectation that this refinement will be applied only a small number
+   of times, no attempt has been made to optimize this procedure. */
+
+
+static SplitSize setStabRefine(
+   const RefinementParm familyParm[],      /* Family parm: Lambda. */
+   const RefinementParm refnParm[],        /* Refinement parm: i. */
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+   PointSet *Lambda = familyParm[0].ptrParm;
+   Unsigned  cellToSplit = refnParm[0].intParm;
+   Unsigned  m, last, i, j, temp,
+             inLambdaCount = 0,
+             outLambdaCount = 0;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+   SplitSize  split;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ;
+         m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m )
+      if ( inSet[pointList[m]] )
+         ++inLambdaCount;
+      else
+         ++outLambdaCount;
+   if ( inLambdaCount == 0 || outLambdaCount == 0 ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   i = startCell[cellToSplit]-1;
+   j = last;
+   while ( i < j ) {
+      while ( !inSet[pointList[++i]] );
+      while (  inSet[pointList[--j]] );
+      if ( i < j ) {
+         EXCHANGE( pointList[i], pointList[j], temp)
+         EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp)
+      }
+   }
+   ++UpsilonStack->height;
+   for ( m = i ; m < last ; ++m )
+      cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = i;
+   parent[UpsilonStack->height] = cellToSplit;
+   cellSize[UpsilonStack->height] = last - i;
+   cellSize[cellToSplit] -= (last - i);
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+}
+
+
+/*-------------------------- isSetStabReducible ---------------------------*/
+
+/* The function isSetStabReducible checks whether the top partition on a given
+   partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If
+   so, it returns a pair consisting of a refinement acting nontrivially on
+   the top partition and a priority.  Otherwise it returns a structure of
+   type RefinementPriorityPair in which the priority field is IRREDUCIBLE.  Assuming
+   that a reducing refinement is found, the (reverse) priority is set very
+   low (1).  Note that, once this function returns negative in the priority
+   field once, it will do so on all subsequent calls.  (The static variable
+   knownIrreducible is set to true in this situation.)  Again, no attempt
+   at efficiency has been made.  */
+
+static RefinementPriorityPair isSetStabReducible(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack)
+{
+   PointSet *Lambda = family->familyParm_L[0].ptrParm;
+   Unsigned    i, cellNo, position;
+   BOOLEAN ptsInLambda, ptsNotInLambda;
+   RefinementPriorityPair reducingRefn;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   char *inSet = Lambda->inSet;
+
+   /* Check that the refinement mapping really is setStabRefn, as required. */
+   if ( family->refine != setStabRefine )
+      ERROR( "isSetStabReducible", "Error: incorrect refinement mapping");
+
+   /* If the top partition has previously been found to be SSS-irreducible, we
+      return immediately. */
+   for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i )
+      ;
+   if ( knownIrreducible[i] ) {
+      reducingRefn.priority = IRREDUCIBLE;
+      return reducingRefn;
+   }
+
+   /* If we reach here, the top partition has not been previously found to be
+      SSS-irreducible.  We check each cell in turn to see if it intersects both
+      Lambda and Omega - Lambda.  If such a cell is found, we return
+      immediately. */
+   for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) {
+      ptsInLambda = ptsNotInLambda = FALSE;
+      for ( position = startCell[cellNo] ; position < startCell[cellNo] +
+                                           cellSize[cellNo] ; ++position ) {
+         if ( inSet[pointList[position]] )
+            ptsInLambda = TRUE;
+         else
+            ptsNotInLambda = TRUE;
+         if ( ptsInLambda && ptsNotInLambda ) {
+            reducingRefn.refn.family = family;
+            reducingRefn.refn.refnParm[0].intParm = cellNo;
+            reducingRefn.priority = 1;
+            return reducingRefn;
+         }
+      }
+   }
+
+   /* If we reach here, we have found the top partition to be SSS_Lambda
+      irreducible, so we add Lambda to the list knownIrreducible and return. */
+   for ( i = 0 ; knownIrreducible[i] ; ++i )
+      ;
+   if ( i < 9 ) {
+      knownIrreducible[i] = Lambda;
+      knownIrreducible[i+1] = NULL;
+   }
+   else
+      ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.")
+
+   reducingRefn.priority = IRREDUCIBLE;
+   return reducingRefn;
+}
diff --git a/src/leon/src/csetstab.h b/src/leon/src/csetstab.h
new file mode 100644
index 0000000..918ce25
--- /dev/null
+++ b/src/leon/src/csetstab.h
@@ -0,0 +1,24 @@
+#ifndef CSETSTAB
+#define CSETSTAB
+
+extern PermGroup *setStabilizer(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PointSet *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)            /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+;
+
+extern Permutation *setImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const PointSet *const Lambda,  /* One of the point sets. */
+   const PointSet *const Xi,      /* The other point set. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+;
+
+#endif
diff --git a/src/leon/src/cstborb.c b/src/leon/src/cstborb.c
new file mode 100644
index 0000000..6061811
--- /dev/null
+++ b/src/leon/src/cstborb.c
@@ -0,0 +1,390 @@
+/* File cstborb.c.  Contains functions to construct and extend basic orbits
+   in permutation groups, as follows:
+
+      constructBasicOrbit:   Constructs the basic orbit and (incomplete)
+                             Schreier vector at a given level in a
+                             permutation group.
+
+      extendBasicOrbit:      Extends the basic orbit and Schreier vector at
+                             a given level corresponding to inclusion of a
+                             new generator.  ????? inverse
+
+      constructAllOrbitInfo: Constructs complete orbit lists and Schreier
+                             vectors at a designated level. */
+
+#include <stddef.h>
+#include <string.h>
+
+#include "group.h"
+
+#include "errmesg.h"
+#include "essentia.h"
+#include "factor.h"
+#include "storage.h"
+
+extern GroupOptions options;
+
+CHECK( cstbor)
+
+
+/*-------------------------- linkGensAtLevel ------------------------------*/
+
+/* This function creates a (forward) linked list of the generators of a
+   permutation group having level equal to or greater than a given value.
+   The xNext field of each permutation is used for the links.  The function
+   returns a pointer to the first permutation in the list.  The level fields
+   of the generating permutations must be filled at before the function is
+   invoked. */
+
+Permutation *linkGensAtLevel(
+   PermGroup *G,                      /* The permutation group. */
+   Unsigned level)                    /* Permutations at or above this level
+                                         will be included. */
+{
+   Permutation *gen, *listHeader = NULL, *currentListEntry;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->level >= level )   {
+         if ( !listHeader )
+            listHeader = gen;
+         else
+            currentListEntry->xNext = gen;
+         currentListEntry = gen;
+      }
+   if ( listHeader )
+      currentListEntry->xNext = NULL;
+   return listHeader;
+}
+
+
+/*-------------------------- linkEssentialGensAtLevel ---------------------*/
+
+/* This function creates a (forward) linked list of the generators of a
+   permutation group having level equal to or greater than a given value and
+   which are flagged as essential at that value.  The xNext field of each
+   permutation is used for the links.  The function returns a pointer to the
+   first permutation in the list.  The level fields of the generating
+   permutations must be filled at before the function is invoked. */
+
+Permutation *linkEssentialGensAtLevel(
+   PermGroup *G,                      /* The permutation group. */
+   Unsigned level)                    /* Permutations at or above this level
+                                         will be included if they are essential
+                                         at this level. */
+{
+   Permutation *gen, *listHeader = NULL, *currentListEntry;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->level >= level && ESSENTIAL_AT_LEVEL(gen,level) ) {
+         if ( !listHeader )
+            listHeader = gen;
+         else
+            currentListEntry->xNext = gen;
+         currentListEntry = gen;
+      }
+   if ( listHeader )
+      currentListEntry->xNext = NULL;
+   return listHeader;
+}
+
+
+/*-------------------------- genExpandingBasicOrbit -----------------------*/
+
+/* This function returns the first generator on the list *firstGen (xNext
+   linked) that fails to fix orbit[1..orbitLen] setwise, or NULL if no such
+   permutation exists.  Note svec is the Schreier vector for the orbit.  The
+   function also delinks the permutation returned from the (xNext-linked)
+   list *firstGen. */
+
+Permutation *genExpandingBasicOrbit(
+   Permutation **firstGen,
+   const Unsigned orbitLen,
+   UnsignedS *orbit,
+   Permutation **svec)
+{
+   Permutation *gen, *lastGen = NULL;
+   Unsigned i;
+
+   for ( gen = *firstGen ; gen ; gen = gen->xNext ) {
+      for ( i = 1 ; i <= orbitLen ; ++i )
+         if ( !svec[gen->image[orbit[i]]] ) {
+            if ( lastGen )
+               lastGen->xNext = gen->xNext;
+            else
+               *firstGen = gen->xNext;
+            return gen;
+         }
+      lastGen = gen;
+   }
+
+   return NULL;
+}
+
+/*-------------------------- constructBasicOrbit --------------------------*/
+
+/* This function constructs the basic orbit vector and Schreier vector at a
+   specified level in a permutation group.   Storage for the basic orbit
+   and Schreier vector must have been allocated prior to invocation of this
+   function, and the level field in each generating permutation for the
+   group must be filled in.  Inverses of generators will be used only if
+   there is a separate structure (type Permutation) for the inverse.
+
+   There are three options, which determine which generators are used in
+   constructing the Schreier vectors:
+     "AllGensAtLevel":  All generators at or above the specified level are used
+                        in constructing the Schreier vector, and all are
+                        flagged as essential at this level.
+     "KnownEssential":  Only generators previously flagged as essential at this
+                        level are used, and the essential flags are not
+                        modified.  (CAUTION: The essential flags MUST be
+                        correct.)
+     "FindEssential":   An attempt is made to use as few generators as possible
+                        in the Schreier vector construction, and all generators
+                        at or above the level are marked as essential or not
+                        essential at this level, depending on whether or not
+                        they are used in the Schreier vector. */
+
+void constructBasicOrbit(
+   PermGroup *const G,       /* The permutation group. */
+   const Unsigned level,     /* The level of the basic orbit to build. */
+   char *option)             /* One of the three options above. */
+{
+   typedef enum{ all, known, find} Option;
+   Option svecOption;
+   FactoredInt factoredOrbLen;
+   Permutation **svec = G->schreierVec[level];
+   Unsigned  i;
+   UnsignedS *orbit = G->basicOrbit[level];
+   Unsigned  found = 1, processed = 0, pt, img;
+   Permutation *gen, *firstGen, *gensUsed, *newEssentialGen;
+
+   /* Find option.  Terminate if invalid.  */
+   if ( strcmp( option, "AllGensAtLevel") == 0 )
+      svecOption = all;
+   else if ( strcmp( option, "KnownEssential") == 0 )
+      svecOption = known;
+   else if ( strcmp( option, "FindEssential") == 0 )
+      svecOption = find;
+   else
+      ERROR1s( "constructBasicOrbit", "Invalid option ", option, ".");
+
+   /* Using xNext, form linked list of generators (or essential generators at
+      level, if KnownEssential option is specified) at or above specified
+      level. */
+   switch( svecOption) {
+      case all:
+         firstGen = linkGensAtLevel( G, level);
+         for ( gen = firstGen ; gen ; gen = gen->xNext )
+            MAKE_ESSENTIAL_AT_LEVEL(gen,level);
+         break;
+      case known:
+         firstGen = linkEssentialGensAtLevel( G, level);
+         break;
+      case find:
+         firstGen = linkGensAtLevel( G, level);
+         break;
+   }
+
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      svec[pt] = NULL;
+   orbit[1] = G->base[level];
+   svec[orbit[1]] = FIRST_IN_ORBIT;
+
+   switch( svecOption) {
+
+      case all:
+      case known:
+         while ( processed < found ) {
+            pt = orbit[++processed];
+            for ( gen = firstGen ; gen ; gen = gen->xNext ) {
+               img = gen->image[pt];
+               if ( !svec[img] ) {
+                  svec[img] = gen;
+                  orbit[++found] = img;
+               }
+            }
+         }
+         break;
+
+      case find:
+         gensUsed = NULL;
+         while ( newEssentialGen = genExpandingBasicOrbit( &firstGen, found,
+                                                          orbit, svec) ) {
+            newEssentialGen->xNext = gensUsed;
+            gensUsed = newEssentialGen;
+
+            for ( i = 1 ; i <= found ; ++i ) {
+               img = newEssentialGen->image[orbit[i]];
+               if ( !svec[img] ) {
+                  orbit[++found] = img;
+                  svec[img] = newEssentialGen;
+               }
+            }
+
+            while ( processed < found ) {
+               pt = orbit[++processed];
+               for ( gen = gensUsed ; gen ; gen = gen->xNext ) {
+                  img = gen->image[pt];
+                  if ( !svec[img] ) {
+                     svec[img] = gen;
+                     orbit[++found] = img;
+                  }
+               }
+            }
+         }
+
+         for ( gen = gensUsed ; gen ; gen = gen->xNext )
+            MAKE_ESSENTIAL_AT_LEVEL(gen,level);
+         for ( gen = firstGen ; gen ; gen = gen->xNext )
+            MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,level);
+         break;
+   }
+
+   factoredOrbLen = factorize( found);
+   factMultiply( G->order, &factoredOrbLen);
+   factoredOrbLen = factorize( G->basicOrbLen[level]);
+   factDivide( G->order, &factoredOrbLen);
+   G->basicOrbLen[level] = found;
+}
+
+
+/*-------------------------- extendBasicOrbit -----------------------------*/
+
+/* This function may be used to extend a basic orbit and Schreier vector
+   at a given level, corresponding to inclusion of a new generator (assumed
+   to be) at a given level.  It returns the number of additional points in
+   the basic orbit.  First the new generator is applied to all points in
+   the basic orbit.  Then, if any new points are found, the construction of
+   the Schreier vector continues in the usual manner. */
+
+Unsigned extendBasicOrbit(
+   PermGroup *G,            /* The permutation group. */
+   Unsigned level,          /* The level of the basic orbit to extend. */
+   Permutation *newGen)     /* The new generator not previously included
+                               the Schreier vector. */
+{
+   Permutation **svec = G->schreierVec[level];
+   UnsignedS   *orbit = G->basicOrbit[level];
+   Unsigned    found = G->basicOrbLen[level], processed = found, pt, img,
+               oldLength, i;
+   Permutation *gen, *firstGen;
+
+   for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) {
+      img = newGen->image[orbit[i]];
+      if ( !svec[img] ) {
+         svec[img] = newGen;
+         orbit[++found] = img;
+      }
+   }
+
+   if ( found > G->basicOrbLen[level] ) {
+      firstGen = linkGensAtLevel( G, level);
+      while ( processed < found ) {
+         pt = orbit[++processed];
+         for ( gen = firstGen ; gen ; gen = gen->xNext ) {
+            img = gen->image[pt];
+            if ( !svec[img] ) {
+               svec[img] = gen;
+               orbit[++found] = img;
+            }
+         }
+      }
+   }
+
+   oldLength = G->basicOrbLen[level];
+   G->basicOrbLen[level] = found;
+   return  found - oldLength;
+
+}
+
+
+/*-------------------------- constructAllOrbitInfo ------------------------*/
+
+/* This function constructs complete orbit information for a group at a given
+   level.  Specifically, it fills in the completeOrbit, orbNumberOfPt, and
+   startOfOrbitNo fields.  (Note fields schreierVec and basicOrbit are not
+   modified; in particular, this routine will normally be used in addition to,
+   rather that as an alternative to, routine cstborb.  Note
+   startOfOrbitNo[orbitCount+1] is set to degree+1, in order to facilitate
+   computation of orbit lengths. */
+
+void constructAllOrbitInfo(
+   PermGroup *const G,
+   const Unsigned level)
+{
+   UnsignedS *completeOrbit, *orbNumberOfPt, *startOfOrbitNo;
+   Unsigned  found = 0,
+             processed = 0,
+             orbitCount = 0,
+             pt, img, orbRep, i;
+   Permutation *gen, *firstGen;
+
+   /* Here we allocate completeOrbit, orbNumberOfPt and startOfOrbitNo, if
+      absent. */
+   if ( !G->completeOrbit ) {
+      G->completeOrbit = allocPtrArrayBaseSize();
+      for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt )
+         G->completeOrbit[pt] = NULL;
+   }
+   if ( !G->orbNumberOfPt ) {
+      G->orbNumberOfPt = allocPtrArrayBaseSize();
+      for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt )
+         G->orbNumberOfPt[pt] = NULL;
+   }
+   if ( !G->startOfOrbitNo ) {
+      G->startOfOrbitNo = allocPtrArrayBaseSize();
+      for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt )
+         G->startOfOrbitNo[pt] = NULL;
+   }
+
+   if ( !G->completeOrbit[level] )
+      G->completeOrbit[level] = allocIntArrayDegree();
+   if ( !G->orbNumberOfPt[level] )
+      G->orbNumberOfPt[level] = allocIntArrayDegree();
+   if ( !G->startOfOrbitNo[level] )
+      G->startOfOrbitNo[level] = allocIntArrayDegree();
+
+   /* Abbreviations. */
+   completeOrbit = G->completeOrbit[level];
+   orbNumberOfPt = G->orbNumberOfPt[level];
+   startOfOrbitNo = G->startOfOrbitNo[level];
+
+   /* The trivial case level>baseSize is handled here. */
+   if ( level > G->baseSize ) {
+      for ( pt = i = 1 ; pt <= G->degree ; ++pt , ++i ) {
+         orbNumberOfPt[pt] = i;
+         startOfOrbitNo[i] = i;
+         completeOrbit[i] = pt;
+      }
+      startOfOrbitNo[G->degree+1] = G->degree+1;
+      return;
+   }
+
+   /* Initially all points are flagged as not found. */
+   for ( pt = 1 ; pt <= G->degree ; ++pt)
+      orbNumberOfPt[pt] = 0;
+
+   /* Construct a linked list of the generators at the appropriate level.
+      Should only essential generators be used? */
+   firstGen = linkGensAtLevel( G, level);
+
+   /* Construct the orbits, one by one in order. */
+   for ( orbRep = 1 ; orbRep <= G->degree ; ++orbRep )
+      if ( !orbNumberOfPt[orbRep] ) {
+         completeOrbit[++found] = orbRep;
+         startOfOrbitNo[++orbitCount] = found;
+         orbNumberOfPt[orbRep] = orbitCount;
+         while ( processed < found ) {
+            pt = completeOrbit[++processed];
+            for ( gen = firstGen ; gen ; gen = gen->xNext ) {
+               img = gen->image[pt];
+               if ( !orbNumberOfPt[img] ) {
+                  completeOrbit[++found] = img;
+                  orbNumberOfPt[img] = orbitCount;
+               }
+            }
+         }
+      }
+
+   startOfOrbitNo[orbitCount+1] = G->degree+1;
+}
diff --git a/src/leon/src/cstborb.h b/src/leon/src/cstborb.h
new file mode 100644
index 0000000..0228f71
--- /dev/null
+++ b/src/leon/src/cstborb.h
@@ -0,0 +1,42 @@
+#ifndef CSTBORB
+#define CSTBORB
+
+extern Permutation *linkGensAtLevel(
+   PermGroup *G,                      /* The permutation group. */
+   Unsigned level)                    /* Permutations at or above this level
+                                         will be included. */
+;
+
+extern Permutation *linkEssentialGensAtLevel(
+   PermGroup *G,                      /* The permutation group. */
+   Unsigned level)                    /* Permutations at or above this level
+                                         will be included if they are essential
+                                         at this level. */
+;
+
+extern Permutation *genExpandingBasicOrbit(
+   Permutation **firstGen,
+   const Unsigned orbitLen,
+   UnsignedS *orbit,
+   Permutation **svec)
+;
+
+extern void constructBasicOrbit(
+   PermGroup *const G,       /* The permutation group. */
+   const Unsigned level,     /* The level of the basic orbit to build. */
+   char *option)             /* One of the three options above. */
+;
+
+extern Unsigned extendBasicOrbit(
+   PermGroup *G,            /* The permutation group. */
+   Unsigned level,          /* The level of the basic orbit to extend. */
+   Permutation *newGen)     /* The new generator not previously included
+                               the Schreier vector. */
+;
+
+extern void constructAllOrbitInfo(
+   PermGroup *const G,
+   const Unsigned level)
+;
+
+#endif
diff --git a/src/leon/src/cstrbas.c b/src/leon/src/cstrbas.c
new file mode 100644
index 0000000..f2389a3
--- /dev/null
+++ b/src/leon/src/cstrbas.c
@@ -0,0 +1,242 @@
+/* File cstrbas.c.  Contains function constructRBase, which may be used to
+   construct an RRR-base.  Also contains function getOptimInfo, which may
+   invoked during RRR-base construction by functions that check
+   RRR-reducbility. */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "group.h"
+
+/* Bug fix for Waterloo C (IBM 370). */
+#if defined(IBMCMSWC) && !defined(SIGNED) && !defined(EXTRA_LARGE)
+#define FIXUP1 short
+#else
+#define FIXUP1 Unsigned
+#endif
+
+#include "chbase.h"
+#include "cstborb.h"
+#include "inform.h"
+#include "new.h"
+#include "orbrefn.h"
+#include "permgrp.h"
+#include "ptstbref.h"
+#include "optsvec.h"
+#include "storage.h"
+
+CHECK( cstrba)
+
+extern GroupOptions options;
+extern RefinementFamily ptStabFamily;
+
+
+/*-------------------------- constructRBase -------------------------------*/
+
+/* This function allocates and constructs an RRR-base for a permutation group,
+   and it returns a pointer to the R-base that is constructed.  The parameters
+   are as follows:
+
+         G:           The permutation group (pointer) for which the RRR-base is
+                      to be constructed.  A base and strong generating set must
+                      be known.  Note that the base and strong generating set
+                      for G will be changed to that in the RRR-base.
+         RRR:         A null terminated list of refinement family pointers (zero
+                      based).  These describe the refinement families that
+                      compose the superfamily RRR.
+         isReducible: A null terminated list of functions that check
+                      reducibility (zero-based).  Specifically, for each i the
+                      function *isReducible[i] checks RRR[i]-reducibility.
+          L:          A known subgroup (pointer)of the group G_pP that is to be
+                      constructed.  A base and strong generating set must be
+                      known.  Optionally, if L = 1, the argument may be NULL.
+                      Note that L the base and strong generating set for L will
+                      be changed to that the base is AlphaHat (in the RRR-base).
+
+   The line numbers referred to below are those in Figure 10 of "Permutation
+   group algorithms based on Partitions" by J. Leon. */
+
+RBase *constructRBase(
+   PermGroup *const G,
+   RefinementFamily *const RRR[],
+   ReducChkFn *const isReducible[],
+   SpecialRefinementDescriptor *const specialRefinement[],
+   UnsignedS basicCellSize[],
+   ExtraDomain *extra[] )
+{
+   Unsigned f, h, i, m, pt, sGenCount;
+   unsigned long minPriority;
+   UnsignedS k[10];
+   SplitSize split;
+   RefinementPriorityPair refPriPair;
+   Refinement bestRefinement;
+   RBase *AAA = newRBase( G->degree);
+   UnsignedS *const startCell = AAA->PsiStack->startCell,
+             *const pointList = AAA->PsiStack->pointList,
+             *const omega = AAA->omega;
+   Permutation *gen;
+   THatWordType tHatWord;
+
+   /* Set tHatWord to a trivial word. */
+   tHatWord.invWord = malloc( 8 * sizeof(UnsignedS *) );
+   tHatWord.revWord = malloc( 8 * sizeof(UnsignedS *) );
+   tHatWord.invWord[0] = tHatWord.revWord[0] = NULL;
+
+
+   /* Here we trim unnecessary strong generators if so requested. */
+   for ( sGenCount = 0 , gen = G->generator ; gen ;
+         gen = gen->next )
+      ++sGenCount;
+   if ( sGenCount > options.trimSGenSetToSize )
+        removeRedunSGens( G, 1);
+
+   /* Here we construct the complete orbit structure at the top level. */
+   for ( m = 0 ; specialRefinement[m] ; ++m )
+      constructAllOrbitInfo( specialRefinement[m]->leftGroup, 1);
+
+   /* Figure 10, lines 3-5. Note newRBase above already initialized
+      AAA->PsiStack. */
+   for ( i = 0 ; specialRefinement[i] ; ++i )
+      k[i] = 0;
+   AAA->ell = 0;
+   f = 0;
+   AAA->n_[0] = 0;
+   /* Array f_ not needed.
+   AAA->f_[0] = 0;
+   AAA->f_[1] = 0; */
+
+      
+   for ( m = 0 ; extra[m] ; ++m ) {
+      extra[m]->cstExtraRBase( 0);
+   }
+
+   /* Figure 10, line 6. */
+   for ( h = 1 ; h <= G->degree-1 ; ++ h ) {
+
+      /* Figure 10, line 7. */
+      for ( i = 0 , minPriority = IRREDUCIBLE ; isReducible[i] != NULL; ++i ) {
+         if ( RRR[i]->refine == orbRefine ) {
+            RRR[i]->familyParm_L[1].intParm = k[i] + 1;
+            RRR[i]->familyParm_L[2].ptrParm = &tHatWord;
+         }
+         refPriPair = (isReducible[i])( RRR[i], AAA->PsiStack);
+         if ( refPriPair.priority != IRREDUCIBLE && ( refPriPair.priority <
+                                minPriority || minPriority == IRREDUCIBLE ) ) {
+            minPriority = refPriPair.priority;
+            bestRefinement = refPriPair.refn;
+         }
+      }
+      if ( minPriority != IRREDUCIBLE )
+
+         /* Figure 10, lines 8-9. */
+         AAA->aAA[h] = bestRefinement;
+
+      /* Figure 10, line 10. */
+      else {
+
+         /* Figure 10, lines 12-14.  Line 11 is omitted since an explicit
+            representation of Pi is not maintained; note Pi_i = Psi_{n_{i+1}}.*/
+         ++AAA->ell;
+         AAA->n_[AAA->ell] = h;
+
+         /* Figure 10, lines 15-17.  CAUTION: Note that the second and third
+            lines below depend on the numbering of the refinement parameters
+            in function pointStabRefine. */
+         refPriPair = isPointStabReducible( &ptStabFamily,
+                                            AAA->PsiStack, G, AAA, k[0]+1);
+         AAA->alphaHat[AAA->ell] = refPriPair.refn.refnParm[0].intParm;
+         AAA->p_[AAA->ell] = refPriPair.refn.refnParm[1].intParm;
+         AAA->aAA[h] = refPriPair.refn;
+         basicCellSize[AAA->ell] =
+                 AAA->PsiStack->cellSize[ refPriPair.refn.refnParm[1].intParm ];
+      }
+
+      /* Figure 10, line 19. */
+      if ( AAA->aAA[h].family->refine == orbRefine ) {
+         for ( i = 0 ; specialRefinement[i]->leftGroup !=
+               AAA->aAA[h].family->familyParm_L[0].ptrParm ; ++i )
+            ;
+         AAA->aAA[h].family->familyParm_L[1].intParm = k[i] + 1;
+         AAA->aAA[h].family->familyParm_L[2].ptrParm = &tHatWord;
+      }
+      split = AAA->aAA[h].family->refine( AAA->aAA[h].family->familyParm_L,
+                                          AAA->aAA[h].refnParm,
+                                          AAA->PsiStack);
+
+      /* Figure 10, lines 20-21. */
+      AAA->a_[h] = split.newCellSize;
+      AAA->b_[h] = AAA->PsiStack->parent[h+1];
+
+      /* Figure 10, lines 22-27. */
+      if ( split.newCellSize == 1 ) {
+         omega[++f] = pointList[startCell[h+1]];
+         for ( m = 0 ; specialRefinement[m] ; ++m )
+            if ( !isFixedPointOf( specialRefinement[m]->leftGroup, k[m]+1,
+                                  omega[f]) ) {
+               ++k[m];
+               insertBasePoint( specialRefinement[m]->leftGroup, k[m],
+                                omega[f] );
+               for ( sGenCount = 0 , gen = G->generator ; gen ;
+                     gen = gen->next )
+                  ++sGenCount;
+               if ( sGenCount > options.trimSGenSetToSize )
+                  removeRedunSGens( G, 1);
+               constructAllOrbitInfo( specialRefinement[m]->leftGroup,
+                                      k[m] + 1);
+               if ( options.compress )
+                  compressAtLevel( specialRefinement[m]->leftGroup, k[m]);
+            }
+      }
+      if ( split.oldCellSize == 1 ) {
+         omega[++f] = pointList[startCell[AAA->b_[h]]];
+         for ( m = 0 ; specialRefinement[m] ; ++m )
+            if ( !isFixedPointOf( specialRefinement[m]->leftGroup, k[m]+1,
+                                  omega[f]) ) {
+               ++k[m];
+               insertBasePoint( specialRefinement[m]->leftGroup, k[m],
+                                omega[f] );
+               for ( sGenCount = 0 , gen = G->generator ; gen ;
+                     gen = gen->next )
+                  ++sGenCount;
+               if ( sGenCount > options.trimSGenSetToSize )
+                  removeRedunSGens( G, 1);
+               constructAllOrbitInfo( specialRefinement[m]->leftGroup,
+                                      k[m] + 1);
+               if ( options.compress )
+                  compressAtLevel( specialRefinement[m]->leftGroup, k[m]);
+            }
+      }
+      
+      for ( m = 0 ; extra[m] ; ++m ) {
+         extra[m]->cstExtraRBase( h);
+      }
+
+      /* Figure 10, line 28. */
+      /* Array f_ not needed.
+      AAA->f_[h+1] = f;  */
+   }
+
+   /* Figure 10, line 30. */
+   AAA->n_[AAA->ell+1] = G->degree;
+
+   AAA->k = k[0];
+
+   /* Create the inverse point list invOmega. */
+   AAA->invOmega = allocIntArrayDegree();
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      AAA->invOmega[omega[pt]] = pt;
+
+   /* Add null terminator to alphaHat. */
+   AAA->alphaHat[AAA->ell+1] = 0;
+
+   /* Print summary information about R-Base if requested. */
+   if ( options.inform )
+      informRBase( G, AAA, basicCellSize);
+
+   free(tHatWord.invWord);
+   free(tHatWord.revWord);
+
+   /* Return RRR-Base to caller. */
+   return AAA;
+}
diff --git a/src/leon/src/cstrbas.h b/src/leon/src/cstrbas.h
new file mode 100644
index 0000000..c0677e6
--- /dev/null
+++ b/src/leon/src/cstrbas.h
@@ -0,0 +1,13 @@
+#ifndef CSTRBAS
+#define CSTRBAS
+
+extern RBase *constructRBase(
+   PermGroup *const G,
+   RefinementFamily *const RRR[],
+   ReducChkFn *const isReducible[],
+   SpecialRefinementDescriptor *const specialRefinement[],
+   UnsignedS basicCellSize[],
+   ExtraDomain *extra[] )
+;
+
+#endif
diff --git a/src/leon/src/cuprstab.c b/src/leon/src/cuprstab.c
new file mode 100644
index 0000000..b72dc29
--- /dev/null
+++ b/src/leon/src/cuprstab.c
@@ -0,0 +1,732 @@
+/* File cuprstab.c.  Contains function uPartnStabilizer, the main function for a
+   program that may be used to compute the stabilizer in a permutation group
+   of an unordered partition.  Also contains functions as follows:
+
+      uParStabRefnInitialize:  Initialize set stabilizer refinement functions.
+      setStabRefine:          A refinement family based on the set stabilizer
+                              property.
+      isSetStabReducible:     A function to check SSS-reducibility. */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "compcrep.h"
+#include "compsg.h"
+#include "errmesg.h"
+#include "orbrefn.h"
+
+CHECK( cuprst)
+
+extern GroupOptions options;
+
+static RefinementMapping uPartnStabRefine;
+static ReducChkFn isUPartnStabReducible;
+static void initializeUPartnStabRefn( Unsigned xDegree);
+
+static Partition *knownIrreducible[10]  /* Null terminated 0-base list of */
+                = {NULL};               /*  point sets Lambda for which top */
+                                        /*  partition on UpsilonStack is */
+                                        /*  known to be SSS_Lambda irred. */
+
+/* COPIED FROM ORBREFN */
+#define HASH( i, j)  ( (7L * i + j) % hashTableSize )
+
+typedef struct RefnListEntry {
+   Unsigned i;                     /* Cell number in UpsilonTop to split. */
+   Unsigned j;                     /* Orbit number of G^(level) in split. */
+   Unsigned newCellSize;           /* Size of new cell created by split. */
+   struct RefnListEntry *hashLink; /* List of refns with same hash value. */
+   struct RefnListEntry *next;     /* Next refn on list of all refinements. */
+   struct RefnListEntry *last;     /* Last refn on list of all refinements. */
+} RefnListEntry;
+
+static struct {
+   Unsigned groupCount;
+   PermGroup *group[10];
+   RefnListEntry **hashTable[10];
+   RefnListEntry *refnList[10];
+   Unsigned oldLevel[10];
+   RefnListEntry *freeListHeader[10];
+   RefnListEntry *inUseListHeader[10];
+} refnData = {0};
+
+static Unsigned trueGroupCount, hashTableSize;
+static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader;
+/* END COPIED CODE. */
+
+static Unsigned currentZDepth[10];
+
+static Unsigned *totalSize;
+
+
+/*-------------------------- uPartnStabilizer ------------------------------*/
+
+/* Function uPartnStabilizer.  Returns a new permutation group representing the
+   stabilizer in a permutation group G of an unordered partition Lambda of the
+   point set Omega.  The algorithm is based on Figure 9 in the paper
+   "Permutation group algorithms based on partitions" by the author.  */
+
+#define familyParm familyParm_L
+
+PermGroup *uPartnStabilizer(
+   PermGroup *const G,             /* The containing permutation group. */
+   const Partition *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)             /* A (possibly trivial) known subgroup of the
+                                      stabilizer in G of Lambda.  (A null pointer
+                                      designates a trivial group.) */
+{
+#ifdef xxxx
+   RefinementFamily OOO_G, SSS_Lambda;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+   ExtraDomain* extra[2];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm[0].ptrParm = G;
+
+   SSS_Lambda.refine = uPartnStabRefine;
+   SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isUPartnStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   initializeOrbRefine( G);
+   initializeUPartnStabRefn();
+
+   ex = extra[0] = allocExtraDomain();
+   xDegree = extra->xDegree[0] = numberOfCells( Lambda);
+   ex->xPsiStack = newCellPartitionStack( xDegree);
+   ex->xUpsilonStack = newCellPartitionStack( xDegree);
+   ex->xRRR = (Refinement *) malloc( (xDegree+2) * sizeof(Refinement) );
+   ex->applyAfter =
+         (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) );
+   ex->xA_ =
+         (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) );
+   ex->xB_ =
+         (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) );
+   extra[1] = NULL;
+
+   return  computeSubgroup( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, extra, L);
+#endif
+}
+#undef familyParm
+
+
+/*-------------------------- uPartnImage -----------------------------------*/
+
+/* Function uPartnImage.  Returns a new permutation in a specified group G mapping
+   a specified unordered partition Lambda to a specified unordered partition
+   Xi.  The algorithm is based on Figure 9 in the paper "Permutation group algorithms
+   based on partitions" by the author. */
+
+Permutation *uPartnImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Partition *const Lambda,  /* One of the partitions. */
+   const Partition *const Xi,      /* The other partition. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+{
+#ifdef XXXXXX
+   RefinementFamily OOO_G, SSS_Lambda_Xi;
+   RefinementFamily  *refnFamList[3];
+   ReducChkFn  *reducChkList[3];
+   SpecialRefinementDescriptor *specialRefinement[3];
+
+   OOO_G.refine = orbRefine;
+   OOO_G.familyParm_L[0].ptrParm = G;
+   OOO_G.familyParm_R[0].ptrParm = G;
+
+   SSS_Lambda_Xi.refine = uPartnStabRefine;
+   SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda;
+   SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi;
+
+   refnFamList[0] = &OOO_G;
+   refnFamList[1] = &SSS_Lambda_Xi;
+   refnFamList[2] = NULL;
+
+   reducChkList[0] = isOrbReducible;
+   reducChkList[1] = isUPartnStabReducible;
+   reducChkList[2] = NULL;
+
+   specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) );
+   specialRefinement[0]->refnType = 'O';
+   specialRefinement[0]->leftGroup = G;
+   specialRefinement[0]->rightGroup = G;
+
+   specialRefinement[1] = NULL;
+   specialRefinement[2] = NULL;
+
+   initializeOrbRefine( G);
+   initializeUPartnStabRefn();
+
+   return  computeCosetRep( G, NULL, refnFamList, reducChkList,
+                            specialRefinement, L_L, L_R);
+#endif
+}
+
+
+/*-------------------------- initializePartnStabRefn ----------------------*/
+
+static void initializePartnStabRefn(
+   Unsigned xDegree)
+{
+   knownIrreducible[0] = NULL;
+   currentZDepth[0] = 0;
+   totalSize = (UnsignedS *) malloc( xDegree * sizeof(UnsignedS) );
+   totalSize[1] = xDegree;
+}
+
+
+/*-------------------------- uPartnStabRefine ------------------------------*/
+
+/* The function implements the refinement family uPartnStabRefine.   Here
+   ssS_{Lambda,i,j,p} acting on Pi (the top partition of UpsilonStack) splits
+   from cell i of Pi those points lying in the union of the j'th cell group of
+   Pi^(p) (the top partition on extra[p]->xUpsilonStack) on Omega^(p).  Note
+   Lambda is the base partition for extra[p]->xUpsilonStack
+
+   The family parameter is:
+         familyParm[0].ptrParm:  extra[p]->xUpsilonStack
+   The refinement parameters are:
+         refnParm[0].intParm:    i,
+         refnParm[1].intParm:    j.
+*/
+
+static SplitSize uPartnStabRefine(
+   const RefinementParm familyParm[],
+   const RefinementParm refnParm[],
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+#ifdef xxxx
+   CellPartitionStack *xUpsilonStack = familyParm[0].ptrParm;
+   Partition *Lambda = xUpsilonStack->basePartn;
+   Unsigned  i = refnParm[0].intParm,
+             j = refnParm[1].intParm;
+   Unsigned  m, k, r, last, left, right, temp, startNewCell, pt, t;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const cellSize = UpsilonStack->cellSize,
+              *const xCellList = xUpsilonStack->cellList,
+              *const xCellGroupNumber = xUpsilonStack->cellGroupNumber,
+              *const xStartCellGroup = xUpsilonStack->startCellGroup,
+              *const xCellGroupSize = xUpsilonStack->cellGroupSize,
+              *const LambdaCellNumber = Lambda->cellNumber;
+   SplitSize  split;
+   BOOLEAN cellSplits;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   cellSplits = FALSE;
+   for ( m = startCell[cellToSplit]+1 , last = m -1 + cellSize[cellToSplit] ;
+         m < last ; ++m )
+      if ( (xCellGroupNumber[LambdaCellNumber[pointList[m]]] == j) !=
+           (xCellGroupNumber[LambdaCelllNumber[pointList[m-1]]] == j) ) {
+         cellSplits = TRUE;
+         break;
+      }
+   if ( !cellSplits ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   if ( cellSize[i] <= xUpsilonStack->totalGroupSize[j] ) {
+      left = startCell[i] - 1;
+      right = startCell[i] + cellSize[i];
+      while ( left < right ) {
+         while ( xCellGroupNumber[LambdaCellNumber[pointList[++left]]] != j )
+            ;
+         while ( xCellGroupNumber[LambdaCellNumber[pointList[--right]]] == j )
+            ;
+         if ( left < right ) {
+            EXCHANGE( pointList[left], pointList[right], temp)
+            EXCHANGE( invPointList[pointList[left]], invPointList[pointList[right]], temp)
+         }
+      }
+      startNewCell = left;
+   }
+   else {
+      startNewCell = startCell[i] + cellSize[i];
+      for ( k = xStartCellGroup[j] ; k < xStartCellGroup[j] +
+                                     xCellGroupSize[j] ; ++k ) {
+         t = xCellList[k];
+         for ( r = Lambda->startCell[t] ;
+               LambdaCellNumber[Lambda->pointList[r]] == t ; ++r) {
+            pt = Lambda->pointList[r];
+            if ( cellNumber[pt] == i ) {
+               --startNewCell;
+               m = invPointList[pt];
+               EXCHANGE( pointList[m], pointList[startNewCell], temp);
+               EXCHANGE( invPointList[pointList[m]], invPointList[pointList[startNewCell]],
+                         temp);
+            }
+         }
+      }
+   }
+
+   ++UpsilonStack->height;
+   for ( m = startNewCell ; m < last ; ++m )
+      cellNumber[pointList[m]] = UpsilonStack->height;
+   startCell[UpsilonStack->height] = startNewCell;
+   parent[UpsilonStack->height] = i;
+   cellSize[UpsilonStack->height] = last - startNewCell;
+   cellSize[cellToSplit] -= cellSize[UpsilonStack->height];
+   split.oldCellSize = cellSize[i];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+#endif
+}
+
+
+/*-------------------------- initializeUPartnStabRefine --------------------------*/
+
+void initializeUPartnStabRefine( PermGroup *G)
+{
+#ifdef xxxx
+   /* Compute hash table size. */
+   if ( refnData.groupCount == 0 ) {
+      hashTableSize = G->degree;
+      while ( hashTableSize > 11 &&
+              (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 ||
+              hashTableSize % 5 == 0 || hashTableSize % 7 == 0) )
+         --hashTableSize;
+   }
+
+   if ( refnData.groupCount < 9) {
+      refnData.group[refnData.groupCount] = G;
+      refnData.hashTable[refnData.groupCount] = allocPtrArrayDegree();
+      refnData.refnList[refnData.groupCount] =
+                    malloc( G->degree * (sizeof(RefnListEntry)+2) );
+      if ( !refnData.refnList[refnData.groupCount] )
+         ERROR( "initializeOrbRefine", "Memory allocation error.")
+      refnData.oldLevel[refnData.groupCount] = UNKNOWN;
+      ++refnData.groupCount;
+      trueGroupCount = refnData.groupCount;
+   }
+   else
+      ERROR( "initializeOrbRefine", "Orbit refinement limited to ten groups.")
+#endif
+}
+
+
+/*-------------------------- xPartnStabRefine ------------------------------*/
+
+#define RESTORE_ZERO for ( r = 1 ; r <= nonZeroCount ; ++r )  \
+                       zeroArray[nonZeroPosition[r]] = 0; \
+                       nonZeroCount = 0;
+
+/* The function implements the refinement family xPartnStabRefine.   Here
+   xssS_{Pi,i,j,m,p} acting on Pi^(p) (the top partition of PiStack^(p))
+   splits from cell group i of Pi^(p) those cells intersecting cell j of Pi
+   in exactly m points. /
+
+   The family parameter is:
+         familyParm[0].ptrParm:  extra[p]->xUpsilonStack
+   The refinement parameters are:
+         refnParm[0].intParm:    i,
+         refnParm[1].intParm:    j.
+         refnParm[2].intParm:    m.
+*/
+
+static SplitSize partnStabRefine(
+   const RefinementParm familyParm[],
+   const RefinementParm refnParm[],
+   PartitionStack *const UpsilonStack)     /* The partition stack to refine. */
+{
+#ifdef xxxx
+   static Unsigned zeroArrayDegree = 0;
+   static Unsigned nonZeroCount;
+   static UnsignedS *zeroArray = NULL;
+   static UnsignedS *nonZeroPosition = NULL;
+   PartitionStack *xUpsilonStack = familyParm[1].ptrParm;
+   Partition *Lambda = xUpsilonStack->basePartn;
+   Unsigned  i = refnParm[0].intParm,
+             j = refnParm[1].intParm,
+             m = refnParm[2].intParm;
+   Unsigned  t, last, k, r, temp, left, right, xStartNewCellGroup;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const invPointList = UpsilonStack->invPointList,
+              *const parent = UpsilonStack->parent,
+              *const startCell = UpsilonStack->startCell,
+              *const cellNumber = UpsilonStack->cellNumber,
+              *const cellSize = UpsilonStack->cellSize,
+              *const xCellList = xUpsilonStack->cellList,
+              *const xCellGroupNumber = xUpsilonStack->cellGroupNumber,
+              *const xStartCellGroup = xUpsilonStack->startCellGroup,
+              *const xCellGroupSize = xUpsilonStack->cellGroupSize,
+              *const LambdaCellNumber = Lambda->cellNumber;
+   SplitSize  split;
+   BOOLEAN splitFlag, noSplitFlag;
+
+   if ( zeroArrayDegree != Lambda->cellCount ) {
+      if ( zeroArrayDegree != 0 ) {
+         free( zeroArray );
+         free( nonZeroPosition);
+      }
+      zeroArrayDegree = Lambda->cellCount;
+      zeroArray = malloc( (zeroArrayDegree+2)*sizeof(UnsignedS) );
+      for ( r = 1 ; r <= zeroArrayDegree ; ++r )
+         zeroArrayDegree[r] = 0;
+      nonZeroPositionCount = 0;
+      nonZeroPosition = malloc( (zeroArrayDegree+2)*sizeof(UnsignedS) );
+   }
+
+   /* Here we set zeroArray[j] to the cardinality of
+      (cell j of UpsilonTop) intersect (cell k of Lambda) for each k in
+      cell group i of xUpsilonTop. */
+   if ( xUpsilonStack->totalGroupSize[i] <= cellSize[j] )
+      for ( k = xStartCellGroup[i] ; k < xStartCellGroup[i] +
+                                         xCellGroupSize[i] ; ++k ) {
+         for ( r = Lambda->startCell[k] ; r <= Lambda->startCell[k] +
+                                            Lambda->cellSize[k] ; ++ r ) {
+         if ( cellNumber[Lambda->pointList[r]] == j ) {
+            if ( zeroArray[k] == 0 )
+               nonZeroPosition[++nonZeroCount] = k;
+            ++zeroArray[k];
+         }
+      }
+   else
+      for ( r = startCell[j] ; r < startCell[j]+cellSize[j] ; ++j ) {
+         t = LambdaCellNumber[pointList[r]] );
+         if ( xCellGroupNumber[t] == i ) {
+            if ( zeroArray[t] == 0 )
+               nonZeroPosition[++nonZeroCount] = t;
+            ++zeroArray[t];
+         }
+      }
+
+   /* Now reset zeroArray and return immediately if the cell group does not
+      split. */
+   splitFlag = nonSplitFlag = FALSE;
+   if ( xUpsilonStack->cellCount > nonZeroCount )
+      if ( m == 0 )
+         splitFlag = TRUE;
+      else
+         nonSplitFlag = TRUE;
+   for ( r = 1 ; r <= nonZeroCount && !splitFlag ; ++r )
+      if ( zeroArray[nonZeroPosition[r]] == m )
+         splitFlag = TRUE;
+   for ( r = 1 ; r <= nonZeroCount && !nonSplitFlag ; ++r )
+      if ( zeroArray[nonZeroPosition[r]] != m )
+         nonSplitFlag = TRUE;
+   if ( !splitFlag || !nonSplitFlag ) {
+      RESTORE_ZERO
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell group i of xUpsilonTop.  A variation of the splitting
+      algorithm used in quicksort is applied. */
+   last = xStartCellGroup[i] + xCellGroupSize[i];
+   if ( xUpsilonStack->cellGroupSize[i] <= cellSize[j] ) {
+      left = xStartCellGroup[i] - 1;
+      right = xStartCellGroup[i] + xCellGroupSize[i];
+      while ( left < right ) {
+         while ( zeroArray[++left]) != m )
+            ;
+         while ( zeroArray[--right]) == m )
+            ;
+         if ( left < right ) {
+            EXCHANGE( xCellList[left], xCellList[right], temp)
+            EXCHANGE( xInvCellList[xCellList[left]],
+                      xInvCellList[xCellList[right]], temp)
+         }
+      xStartNewCellGroup = left;
+      }
+   }
+   else {
+      xStartNewCellGroup = last;
+      for ( r = startCell[j] ; r < startCell[j] + cellSize[j] ; ++r ) {
+         t = LambdaCellNumber[pointList[r]];
+         if ( zeroArray[t] == m ) {
+            zeroArray[t] = UNDEFINED;
+            --xStartNewCellGroup;
+            EXCHANGE( xCellList[t], xCellList[xStartNewCellGroup], temp)
+            EXCHANGE( xInvCellList[xCellList[t]],
+                      xInvCellList[xCellList[xStartNewCellGroup]], temp)
+         }
+      }
+   }
+
+   ++xUpsilonStack->height;
+   xUpsilonStack->totalGroupSize[xUpsilonStack->height] = 0;
+   for ( r = xStartNewCellGroup ; r < last ; ++m ) {
+      xCellGroupNumber[xCellList[r]] = xUpsilonStack->height;
+      xUpsilonStack->totalGroupSize[xUpsilonStack->height] +=
+         Lambda->cellSize[xCellList[r]];
+   xStartCellGroup[xUpsilonStack->height] = xStartNewCellGroup;
+   xUpsilonStack->parent[xUpsilonStack->height] = i;
+   xCellGroupSize[xUpsilonStack->height] = last - xStartNewCellGroup;
+   xCellGroupSize[i] -= (last - xStartNewCellGroup);
+   xUpsilonStack->totalGroupSize[i] -=
+      xUpsilonStack->totalGroupSize[xUpsilonStack->height]
+   RESTORE_ZERO;
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = cellSize[UpsilonStack->height];
+   return split;
+#endif
+}
+
+#ifdef xxxxxx
+/*-------------------------- deleteRefnListEntry --------------------------*/
+
+static void deleteRefnListEntry(
+   RefnListEntry *entryToDelete,
+   Unsigned hashPosition,             /* hashTableSize+1 indicates unknown */
+   RefnListEntry *prevHashListEntry)
+{
+   if ( hashPosition > hashTableSize ) {
+      hashPosition = HASH( entryToDelete->i, entryToDelete->j);
+      if ( hashTable[hashPosition] == entryToDelete )
+         prevHashListEntry = NULL;
+      else {
+         prevHashListEntry = hashTable[hashPosition];
+         while ( prevHashListEntry->hashLink != entryToDelete )
+             prevHashListEntry = prevHashListEntry->hashLink;
+      }
+   }
+   if ( prevHashListEntry )
+      prevHashListEntry->hashLink = entryToDelete->hashLink;
+   else
+      hashTable[hashPosition] = entryToDelete->hashLink;
+   if ( entryToDelete->last )
+      entryToDelete->last->next = entryToDelete->next;
+   else
+      inUseListHeader = entryToDelete->next;
+   if ( entryToDelete->next )
+      entryToDelete->next->last = entryToDelete->last;
+   entryToDelete->next = freeListHeader;
+   freeListHeader = entryToDelete;
+}
+
+
+/*-------------------------- isUPartnStabReducible ------------------------*/
+
+RefinementPriorityPair isOrbReducible(
+   const RefinementFamily *family,        /* The refinement family mapping
+                                             must be orbRefine; family parm[0]
+                                             is the group. */
+   const PartitionStack *const UpsilonStack)
+{
+   BOOLEAN cellWillSplit;
+   Unsigned  i, j, m, groupNumber, hashPosition, newCellNumber, oldCellNumber,
+             count;
+   unsigned long minPriority, thisPriority;
+   UnsignedS  *oldLevelAddr;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   PermGroup *G = family->familyParm_L[0].ptrParm;
+   Unsigned   level = family->familyParm_L[1].intParm;
+   UnsignedS  *orbNumberOfPt = G->orbNumberOfPt[level];
+   UnsignedS  *const startOfOrbitNo = G->startOfOrbitNo[level];
+   RefinementPriorityPair reducingRefn;
+   RefnListEntry *refnList;
+   RefnListEntry *p, *oldP, *position, *minPosition;
+
+   /* Check that the refinement mapping really is pointStabRefn, as required,
+      and that the group is one for which initializeOrbRefine has been
+      called. */
+   if ( family->refine != orbRefine )
+      ERROR( "isOrbReducible", "Error: incorrect refinement mapping");
+   for ( groupNumber = 0 ; groupNumber < refnData.groupCount &&
+                           refnData.group[groupNumber] != G ;
+                           ++groupNumber )
+      ;
+   if ( groupNumber >= refnData.groupCount )
+      ERROR( "isOrbReducible", "Routine not initialized for group.")
+   hashTable = refnData.hashTable[groupNumber];
+   refnList = refnData.refnList[groupNumber];
+   oldLevelAddr = &refnData.oldLevel[groupNumber];
+
+   /* If this is a new level, we reconstruct the list of potential refinements
+      from scratch.  */
+   if ( level != *oldLevelAddr ) {
+
+      /* Initialize data structures. */
+      *oldLevelAddr = level;
+      for ( i = 0 ; i < hashTableSize ; ++i )
+         hashTable[i] = NULL;
+      freeListHeader = &refnList[0];
+      inUseListHeader = NULL;
+      for ( i = 0 ; i < G->degree ; ++i)
+         refnList[i].next = &refnList[i+1];
+      refnList[G->degree].next = NULL;
+
+   /* Process the i'th cell of the top partition for i = 1,2,...., finding all
+      possible refinements. */
+      for ( i = 1 ; i <= UpsilonStack->height ; ++i ) {
+
+         /* First check if the i'th cell will split.  If not, proceed directly
+            to the next cell. */
+         for ( m = startCell[i]+1 , cellWillSplit = FALSE ;
+               m < startCell[i] + cellSize[i] && !cellWillSplit ; ++m )
+            if ( orbNumberOfPt[ pointList[m] ] !=
+                 orbNumberOfPt[ pointList[m-1] ] )
+               cellWillSplit = TRUE;
+         if ( !cellWillSplit )
+            continue;
+
+         /* Now find all splittings of the i'th cell and insert them into the
+            list in sorted order. */
+         for ( m = startCell[i] ; m < startCell[i]+cellSize[i] ; ++m ) {
+            j = orbNumberOfPt[pointList[m]];
+            hashPosition = HASH( i, j);
+            p = hashTable[hashPosition];
+            while ( p && (p->i != i || p->j != j) )
+               p = p->hashLink;
+            if ( p )
+               ++p->newCellSize;
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isOrbReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = i;
+               p->j = j;
+               p->newCellSize = 1;
+            }
+         }
+      }
+   }
+
+   /* If this is not a new level, we merely fix up the old list.  The entries
+      for the new cell must be created and those for its parent must be
+      adjusted. */
+   else {
+      freeListHeader = refnData.freeListHeader[groupNumber];
+      inUseListHeader = refnData.inUseListHeader[groupNumber];
+      newCellNumber = UpsilonStack->height;
+      oldCellNumber = UpsilonStack->parent[UpsilonStack->height];
+      for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ;
+            m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) {
+         if ( m > startCell[newCellNumber] &&
+              orbNumberOfPt[pointList[m]] != orbNumberOfPt[pointList[m-1]] )
+            cellWillSplit = TRUE;
+         j = orbNumberOfPt[pointList[m]];
+         hashPosition = HASH( oldCellNumber, j);
+         p = hashTable[hashPosition];
+         oldP = NULL;
+         while ( p && (p->i != oldCellNumber || p->j != j) ) {
+            oldP = p;
+            p = p->hashLink;
+         }
+         if ( p ) {
+            --p->newCellSize;
+            if ( p->newCellSize == 0 )
+               deleteRefnListEntry( p, hashPosition, oldP);
+         }
+      }
+      if ( cellWillSplit )
+         for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ;
+               m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) {
+            hashPosition = HASH( newCellNumber, j);
+            p = hashTable[hashPosition];
+            while ( p && (p->i != newCellNumber || p->j != j) )
+               p = p->hashLink;
+            if ( p )
+               ++p->newCellSize;
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isOrbReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = newCellNumber;
+               p->j = j;
+               p->newCellSize = 1;
+            }
+         }
+   }
+
+   /* Now we return a refinement of minimal priority.  While searching the
+      list, we also check for refinements invalidated by previous splittings. */
+   minPosition = inUseListHeader;
+   minPriority = ULONG_MAX;
+   count = 1;
+   for ( position = inUseListHeader ; position && count < 100 ;
+         position = position->next , ++count ) {
+      while ( position && position->newCellSize == cellSize[position->i] ) {
+         p = position;
+         position = position->next;
+         deleteRefnListEntry( p, hashTableSize+1, NULL);
+      }
+      if ( !position )
+         break;
+      if ( (thisPriority = (unsigned long) position->newCellSize +
+           MIN( cellSize[position->i], SIZE_OF_ORBIT(position->j) )) <
+           minPriority ) {
+         minPriority = thisPriority;
+         minPosition = position;
+      }
+   }
+   if ( minPriority == ULONG_MAX )
+      reducingRefn.priority = IRREDUCIBLE;
+   else {
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = minPosition->i;
+      reducingRefn.refn.refnParm[1].intParm = minPosition->j;
+      reducingRefn.priority = thisPriority;
+   }
+
+   /* If this is the last call to isOrbReducible for this group (UpsilonStack
+      has height degree-1), free memory and reinitialize. */
+   if ( UpsilonStack->height == G->degree - 1 ) {
+      freePtrArrayDegree( refnData.hashTable[groupNumber]);
+      free( refnData.refnList[groupNumber]);
+      refnData.group[groupNumber] = NULL;
+      --trueGroupCount;
+      if ( trueGroupCount == 0 )
+         refnData.groupCount = 0;
+   }
+
+   refnData.freeListHeader[groupNumber] = freeListHeader;
+   refnData.inUseListHeader[groupNumber] =inUseListHeader;
+   return reducingRefn;
+}
+
+
+cstExtraRBase()
+#endif
diff --git a/src/leon/src/cuprstab.h b/src/leon/src/cuprstab.h
new file mode 100644
index 0000000..792e7a9
--- /dev/null
+++ b/src/leon/src/cuprstab.h
@@ -0,0 +1,34 @@
+#ifndef CUPRSTAB
+#define CUPRSTAB
+
+extern PermGroup *uPartnStabilizer(
+   PermGroup *const G,             /* The containing permutation group. */
+   const Partition *const Lambda,  /* The point set to be stabilized. */
+   PermGroup *const L)             /* A (possibly trivial) known subgroup of the
+                                      stabilizer in G of Lambda.  (A null pointer
+                                      designates a trivial group.) */
+;
+
+extern Permutation *uPartnImage(
+   PermGroup *const G,            /* The containing permutation group. */
+   const Partition *const Lambda,  /* One of the partitions. */
+   const Partition *const Xi,      /* The other partition. */
+   PermGroup *const L_L,          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Lambda.  (A null pointer
+                                     designates a trivial group.) */
+   PermGroup *const L_R)          /* A (possibly trivial) known subgroup of the
+                                     stabilizer in G of Xi.  (A null pointer
+                                     designates a trivial group.) */
+;
+
+extern void initializeUPartnStabRefine( PermGroup *G)
+;
+
+extern RefinementPriorityPair isOrbReducible(
+   const RefinementFamily *family,        /* The refinement family mapping
+                                             must be orbRefine; family parm[0]
+                                             is the group. */
+   const PartitionStack *const UpsilonStack)
+;
+
+#endif
diff --git a/src/leon/src/desauto.c b/src/leon/src/desauto.c
new file mode 100644
index 0000000..1268618
--- /dev/null
+++ b/src/leon/src/desauto.c
@@ -0,0 +1,851 @@
+/* File desauto.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/*  Main program for design/matrix automorphism group and
+   isomorphism programs.   The formats for the commands are:
+
+      desauto       <options> <design> <autoGroup>
+      desauto -iso  <options> <design1> <design2> <isoPerm>
+
+   where the meaning of the parameters is as follows:
+
+      <design>:    The design whose automorphism group is to be computed.
+      <autoGroup>: Set to the automorphism group of <design>.  Depending on
+                   options, will be set to a permutation group on the set of
+                   a file type of GRP is appended.
+      <design1>:   The first of the two designs to be checked for isomorphism.
+      <design2>:   The second of the two designs to be checked for isomorphism.
+      <isoPerm>:   Set to a permutation mapping <design1> to <design2>, if one
+                   exists.  Not created otherwise.  Depending on the options,
+                   this will be set to a permutation on points only or on points                         
+                   The name of the file in which the set stabilizer G_Lambda
+                   and blocks.
+
+   The options are as follows:
+
+      -code:<c>   Finds the automorphism group of code c, assuming that
+                  it is included in the group of the design.
+      -codes:<c>,<d>  Checks isomorphism of codes <c> and <d>, assuming
+                  iso is in effect, and assuming any isomorphism must map
+                  <design1> to <design2>.
+
+      -a          If the output file exists, it will be appended to rather than
+                  overwritten.  (A Cayley library is always appended to rather
+                  than overwritten.)
+
+      -b:<int>    Base change in the subgroup being computed will be performed
+                  at levels fm, fm+1,...,fm+<int>-1 only, where fm is the level
+                  of the first base point (of the subgroup) moved by the current
+                  permutation.  Values below 1 will be raised to 1; those above
+                  the base size will be reduced to the base size.
+
+      -c          Compress the group G after an R-base has been constructed.
+                  This saves a moderate amount of memory at the cost of
+                  relatively little CPU time, but the group (in memory) is
+                  effectively destroyed.
+
+      -crl:<name> The definition of the group G and point set Lambda should be
+                  read from Cayley library <permGroup> in library file <name>.
+
+      -cwl:<name> The definition for the group G_Lambda should be written to
+                  Cayley library <stabGroup> library file <name>.
+
+      -g:<int>    The maximum number of strong generators for the containing
+                  group G.  If, after construction of a base and strong
+                  generating set for G, the number of strong generators is
+                  less than this number, additional strong generators will be
+                  added, chosen to reduce the length of the coset
+                  representatives (as words).   A larger value may increase
+                  speed of computation slightly at the cost of extra space.
+                  If, after construction of the base and strong generating set,
+                  the number of strong generators exceeds this number, at
+                  present strong generators are not removed.
+
+      -gn:<str>   (Set stabilizer only).  The generators for the newly-created
+                  group created are given names <str>01, <str>02, ...  .  If
+                  omitted, the new generators are unnamed.
+
+      -i          The generators of <stabGroup> are to be written in image format.
+
+      -n:<name>   The name for the set stabilizer or coset rep being computed.
+                  (Default: the file name <stabGroup> -- file type omitted)
+
+      -pb         Produces permutations on points and blocks.  Otherwise
+                  the automorphism group or isomorphism are given on
+                  points only.
+
+      -cv         Applicable to codes only.  Causes the automorphism group
+                  or isomorphism to be written as a permutation group on
+                  coordinates and invariant vectors, rather than
+                  coordinates only.
+
+      -q          As the computation proceeds, writing of information about
+                  the current state to standard output is suppressed.
+
+      -s:<name>   A known subgroup of the set stabilizer being computed.
+                  (Default: no subgroup known)
+
+       -r:<int>   During base change, if insertion of a new base point
+                  expands the size of the strong generating set above
+                  <int> gens (not counting inverses), redundant strong
+                  generators are trimmed from the strong generating set.
+                  (Default 25).
+
+      -t          Upon conclusion, statistics regarding the number of nodes
+                  of the backtrack search tree traversed is written to the
+                  standard output.
+
+      -v          Verify that all files were compiled with the same compile-
+                  time parameters and stop.
+
+      -w:<int>    For set or partition image computations in which the sets
+                  or partitions turn out to be equivalent, a permutation
+                  mapping one to the other is written to the standard output,
+                  as well as a disk file, provided the degree is at most <int>.
+                  (The option is ignored if -q is in effect.)  Default: 100
+
+      -x:<int>    The ideal size for basic cells is set to <int>.
+
+      -z          Subject to the restrictions imposed by the -b option above,
+                  check Prop. 8.3 in "Permutation group algorithms based on
+                  partitions".
+
+      -m          Read design in incidence matrix format: rows = point,
+                                                          cols = blocks.
+
+      -mt         Read design in transpose incidence matrix format:
+                                                          rows = blocks,
+                                                          cols = points.
+
+   The return code for the design group algorithm is as follows:
+      0: computation successful,
+      15: computation terminated due to error.
+   The return code for the design isomorphism algorithm is as follows:
+      0: computation successful; designs isomorphic,
+      1: computation successful; designs not isomorphic,
+      15: computation terminated due to error.
+*/
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "cdesauto.h"
+#include "cmatauto.h"
+#include "errmesg.h"
+#include "field.h"
+#include "matrix.h"
+#include "permgrp.h"
+#include "readdes.h"
+#include "readgrp.h"
+#include "readper.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+GroupOptions options;
+
+UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack) = NULL;
+
+static void verifyOptions(void);
+
+int main( int argc, char *argv[])
+{
+   char matrixFileName[MAX_FILE_NAME_LENGTH] = "",
+        outputFileName[MAX_FILE_NAME_LENGTH] = "",
+        *matrix_L_FileName = matrixFileName,
+        matrix_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_Specifier = knownSubgroupSpecifier,
+        knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_FileName = knownSubgroupFileName,
+        knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        codeFileName[MAX_FILE_NAME_LENGTH] = "",
+        *code_L_FileName = codeFileName,
+        code_R_FileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1, startOptions, degree;
+   char matrixLibraryName[MAX_NAME_LENGTH+1] = "",
+        outputLibraryName[MAX_NAME_LENGTH+1] = "",
+        *matrix_L_LibraryName = matrixLibraryName,
+        matrix_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        *knownSubgroup_L_LibraryName = knownSubgroupLibraryName,
+        knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        codeLibraryName[MAX_NAME_LENGTH+1] = "",
+        *code_L_LibraryName = codeLibraryName,
+        code_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH],
+        outputObjectName[MAX_NAME_LENGTH+1] = "";
+   Matrix_01 *matrix, *matrix_L, *matrix_R, *originalMatrix, *originalMatrix_L,
+             *originalMatrix_R;
+   PermGroup *A, *L = NULL, *L_L = NULL, *L_R = NULL;
+   Code *C = NULL, *C_L = NULL, *C_R = NULL;
+   Permutation *y;
+   BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE,
+           codeFlag = FALSE, transposeFlag = FALSE, pbFlag = FALSE,
+           monomialFlag = FALSE;
+   char tempArg[8];
+   enum { DESIGN_AUTO, DESIGN_ISO, MATRIX_AUTO, MATRIX_ISO, CODE_AUTO,
+          CODE_ISO} computationType = DESIGN_AUTO;
+   char comment[100];
+
+   /* Check whether the first parameters are iso, code, or matrix.
+      Set the computation type. */
+   j = 0;
+   for ( i = 1 ; i <= 2 && i < argc ; ++i ) {
+      strncpy( tempArg, argv[i], 8);
+      tempArg[7] = '\0';
+      lowerCase( tempArg);
+      if ( strcmp( tempArg, "-iso") == 0 )
+         j |= 4;
+      else if ( strcmp( tempArg, "-matrix") == 0 )
+         j |= 1;
+      else if ( strcmp( tempArg, "-code") == 0 )
+         j |= 2;
+      else
+         break;
+   }
+   switch( j ) {
+      case 0:  computationType = DESIGN_AUTO;  break;
+      case 1:  computationType = MATRIX_AUTO;  pbFlag = TRUE;  break;
+      case 2:  computationType = CODE_AUTO; codeFlag = TRUE;  break;
+      case 4:  computationType = DESIGN_ISO;  imageFlag = TRUE;  break;
+      case 5:  computationType = MATRIX_ISO;  imageFlag = TRUE;  pbFlag = TRUE;  break;
+      case 6:  computationType = CODE_ISO;  imageFlag = TRUE;  codeFlag = TRUE;  break;
+      default: ERROR( "main (desauto)", "Invalid options"); break;
+   }
+   startOptions = i;
+
+   /* Provide help if no arguments are specified. Note i and j must be as
+      described above. */
+   if ( startOptions == argc ) {
+      switch( computationType ) {
+         case DESIGN_AUTO:
+            printf( "\nUsage:  desauto [options] design autoGroup\n");
+            break;
+         case MATRIX_AUTO:
+            printf( "\nUsage:  matauto [options] matrix autoGroup\n");
+            break;
+         case CODE_AUTO:
+            printf( "\nUsage:  codeauto [options] code invarVectorss autoGroup\n");
+            break;
+         case DESIGN_ISO:
+            printf( "\nUsage:  desiso [options] design1 design2 isoPerm\n");
+            break;
+         case MATRIX_ISO:
+            printf( "\nUsage:  matiso [options] matrix1 matrix2 isoPerm\n");
+            break;
+         case CODE_ISO:
+            printf( "\nUsage:  codeiso [options] code1 code2 invarVectors1 invarVectors2 \n");
+            break;
+      }
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position startOptions give
+      limits and return. */
+   if ( startOptions < argc && (strcmp( argv[startOptions], "-l") == 0 ||
+                                strcmp( argv[startOptions], "-L") == 0) ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position startOptions, perform
+      verify.  (Note verifyOptions terminates program). */
+   if ( startOptions < argc && (strcmp( argv[startOptions], "-v") == 0 ||
+                                strcmp( argv[startOptions], "-V") == 0) )
+      verifyOptions();
+
+   /* Check for exactly 2 (design or matrix group), 3 (code group or design
+      or matrix iso), or 4 (code iso ) parameters following options. */
+   for ( optionCountPlus1 = startOptions ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 != 2 + imageFlag + codeFlag +
+                                   (imageFlag && codeFlag) ) {
+      ERROR1i( "main (design group)", "Exactly ", 2+imageFlag+codeFlag +
+               (imageFlag && codeFlag), " non-option parameters are required.");
+      exit(ERROR_RETURN_CODE);
+   }
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.statistics = FALSE;
+   options.inform = TRUE;
+   options.compress = TRUE;
+   options.maxBaseChangeLevel = UNKNOWN;
+   options.maxStrongGens = 70;
+   options.idealBasicCellSize = 4;
+   options.trimSGenSetToSize = 35;
+   options.strongMinDCosetCheck = FALSE;
+   options.writeConjPerm = MAX_COSET_REP_PRINT;
+   options.restrictedDegree = 0;
+   options.alphaHat1 = 0;
+   parseLibraryName( argv[optionCountPlus1+1], "", "", outputFileName,
+                     outputLibraryName);
+   strncpy( options.genNamePrefix, outputLibraryName, 4);
+   options.genNamePrefix[4] = '\0';
+   strcpy( options.outputFileMode, "w");
+
+   /* Translate options to lower case. */
+   for ( i = startOptions ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strncmp( argv[i], "-a1:", 4) == 0 &&
+                (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp( argv[i], "-b:", 3) == 0 &&
+                (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-g:", 3) == 0 &&
+                (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (design group)", "Invalid value for -gn option")
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strcmp( argv[i], "-mm") == 0 )
+         monomialFlag = TRUE;
+      else if ( strcmp( argv[i], "-pb") == 0 || strcmp( argv[i], "-cv") == 0 )
+         pbFlag = TRUE;
+      else if ( strcmp( argv[i], "-ro") == 0 )
+         pbFlag = FALSE;
+      else if ( strcmp( argv[i], "-tr") == 0 )
+         transposeFlag = TRUE;
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( outputObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (design group)", "Invalid name ", outputObjectName,
+                     " for stabilizer group or coset rep.")
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strncmp( argv[i], "-r:", 3) == 0 &&
+                (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 )
+         strcpy( knownSubgroupSpecifier, argv[i]+3);
+      else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 )
+         strcpy( knownSubgroup_L_Specifier, argv[i]+4);
+      else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 )
+         strcpy( knownSubgroup_R_Specifier, argv[i]+4);
+      else if ( strcmp( argv[i], "-s") == 0 )
+         options.statistics = TRUE;
+      else if ( strncmp( argv[i], "-w:", 3) == 0 &&
+                (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-x:", 3) == 0 &&
+                (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-z") == 0 )
+         options.strongMinDCosetCheck = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute file and library names. */
+   switch( computationType) {
+      case CODE_AUTO:
+         parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                           codeFileName, codeLibraryName);
+         /* Deliberate fall through to next case. */
+      case DESIGN_AUTO:
+      case MATRIX_AUTO:
+         parseLibraryName( argv[optionCountPlus1+codeFlag], prefix, suffix,
+                           matrixFileName, matrixLibraryName);
+         parseLibraryName( argv[optionCountPlus1+1+codeFlag], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroupSpecifier[0] != '\0' )
+            parseLibraryName( knownSubgroupSpecifier, prefix, suffix,
+                              knownSubgroupFileName, knownSubgroupLibraryName);
+         break;
+      case CODE_ISO:
+         parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                           code_L_FileName, code_L_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                           code_R_FileName, code_R_LibraryName);
+         /* Deliberate fall through to next case. */
+      case DESIGN_ISO:
+      case MATRIX_ISO:
+         parseLibraryName( argv[optionCountPlus1+2*codeFlag], prefix, suffix,
+                           matrix_L_FileName, matrix_L_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+1+2*codeFlag], prefix, suffix,
+                           matrix_R_FileName, matrix_R_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+2+2*codeFlag], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroup_L_Specifier[0] != '\0' )
+            parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix,
+                              knownSubgroup_L_FileName, knownSubgroup_L_LibraryName);
+         if ( knownSubgroup_R_Specifier[0] )
+            parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix,
+                              knownSubgroup_R_FileName, knownSubgroup_R_LibraryName);
+         break;
+   }
+
+   /* Read in the design(s), matrices, or codes, and compute the degree. */
+   switch ( computationType ) {
+      case DESIGN_AUTO:
+         matrix = readDesign( matrixFileName, matrixLibraryName, 0, 0);
+         degree = matrix->numberOfRows + matrix->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix->numberOfRows;
+         break;
+      case MATRIX_AUTO:
+         if ( transposeFlag )
+            matrix = read01Matrix( matrixFileName, matrixLibraryName, TRUE,
+                                   monomialFlag, 0, 0, 0);
+         else
+            matrix = read01Matrix( matrixFileName, matrixLibraryName, FALSE,
+                                   monomialFlag, 0, 0, 0);
+         if ( monomialFlag ) {
+            matrix->field = buildField( matrix->setSize);
+            originalMatrix = matrix;
+            matrix = augmentedMatrix( originalMatrix);
+         }
+         degree = matrix->numberOfRows + matrix->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix->numberOfRows;
+         else if ( monomialFlag )
+            options.restrictedDegree = matrix->numberOfCols;
+         break;
+      case CODE_AUTO:
+         C = readCode( codeFileName, codeLibraryName, TRUE, 0, 0, 0);
+         monomialFlag = (C->fieldSize > 2);
+         matrix = read01Matrix( matrixFileName, matrixLibraryName, TRUE,
+                                C->fieldSize > 2, C->fieldSize, C->length, 0);
+         if ( monomialFlag ) {
+            matrix->field = C->field;
+            originalMatrix = matrix;
+            matrix = augmentedMatrix( originalMatrix);
+         }
+         degree = matrix->numberOfRows + matrix->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix->numberOfRows;
+         else if ( monomialFlag )
+            options.restrictedDegree = matrix->numberOfCols;
+         break;
+      case DESIGN_ISO:
+         matrix_L = readDesign( matrix_L_FileName, matrix_L_LibraryName,
+                                0, 0);
+         matrix_R = readDesign( matrix_R_FileName, matrix_R_LibraryName,
+                                0, 0);
+         if ( matrix_L->numberOfRows != matrix_R->numberOfRows )
+            ERROR( "main (design group)",
+                    "Designs have different numbers of points.")
+         if ( matrix_L->numberOfCols != matrix_R->numberOfCols ) {
+            if ( options.inform )  {
+               printf( "\n\n%s and %s are not isomorphic.  ");
+               printf( "They have %u and %u blocks, respectively.\n\n",
+                       matrix_L->numberOfCols, matrix_R->numberOfCols);
+            }
+            return 1;
+         }
+         degree = matrix_L->numberOfRows + matrix_L->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix_L->numberOfRows;
+         break;
+      case MATRIX_ISO:
+         if ( transposeFlag ) {
+            matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, TRUE,
+                           monomialFlag, 0, 0, 0);
+            matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, TRUE,
+                           monomialFlag, matrix_L->setSize, matrix_L->numberOfRows, 
+                           matrix_L->numberOfCols - monomialFlag * 
+                           matrix_L->numberOfRows);
+         }
+         else {
+            matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, FALSE,
+                           monomialFlag, 0, 0, 0);
+            matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, FALSE,
+                           monomialFlag, matrix_L->setSize, matrix_L->numberOfRows, 
+                           matrix_L->numberOfCols - monomialFlag * 
+                           matrix_L->numberOfRows);
+         }
+         if ( monomialFlag ) {
+            matrix_L->field = matrix_R->field = buildField( matrix_L->setSize);
+            originalMatrix_L = matrix_L;
+            originalMatrix_R = matrix_R;
+            matrix_L = augmentedMatrix( originalMatrix_L);
+            matrix_R = augmentedMatrix( originalMatrix_R);
+         }
+         degree = matrix_L->numberOfRows + matrix_L->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix_L->numberOfRows;
+         else if ( monomialFlag )
+            options.restrictedDegree = matrix_L->numberOfCols;
+         break;
+      case CODE_ISO:
+         C_L = readCode( code_L_FileName, code_L_LibraryName, TRUE, 
+                           0, 0, 0);
+         C_R = readCode( code_R_FileName, code_R_LibraryName, TRUE, 
+                           C_L->fieldSize, 0, C_L->length);
+         monomialFlag = (C_L->fieldSize > 2);
+         matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, TRUE,
+                           C_L->fieldSize > 2, C_L->fieldSize, C_L->length, 0);
+         matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, TRUE,
+                           C_L->fieldSize > 2, C_L->fieldSize, C_L->length, 
+                           0);
+         if ( C_L->dimension != C_R->dimension ) {
+            if ( options.inform )  {
+               printf( "\n\n%s and %s are not isomorphic.  ");
+               printf( "They have dimension %u and %u, respectively.\n\n",
+                       C_L->dimension, C_R->dimension);
+            }
+            return 1;
+         }
+         if ( matrix_L->numberOfCols != matrix_R->numberOfCols ) {
+            if ( options.inform )  {
+               printf( "\n\n%s and %s are not isomorphic.  ");
+               printf( "The invariant vector sets have different sizes.\n");
+            }
+            return 1;
+         }
+         if ( monomialFlag ) {
+            matrix_L->field = matrix_R->field = C_L->field; 
+            originalMatrix_L = matrix_L;
+            originalMatrix_R = matrix_R;
+            matrix_L = augmentedMatrix( originalMatrix_L);
+            matrix_R = augmentedMatrix( originalMatrix_R);
+         }
+         degree = matrix_L->numberOfRows + matrix_L->numberOfCols;
+         if ( !pbFlag )
+            options.restrictedDegree = matrix_L->numberOfRows;
+         else if ( monomialFlag )
+            options.restrictedDegree = matrix_L->numberOfCols;
+         break;
+   }
+
+   /* Initialize storage manager. */
+   initializeStorageManager( degree);
+
+   /* Read in the known subgroups, if present, and the codes, if present. */
+   switch ( computationType ) {
+      case DESIGN_AUTO:
+      case MATRIX_AUTO:
+      case CODE_AUTO:
+         if ( knownSubgroupSpecifier[0] )
+            L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName,
+                               degree, "Generate");
+         break;
+      case DESIGN_ISO:
+      case MATRIX_ISO:
+      case CODE_ISO:
+         if ( knownSubgroup_L_Specifier[0] )
+            L_L = readPermGroup( knownSubgroup_L_FileName,
+                       knownSubgroup_L_LibraryName, degree, "Generate");
+         if ( knownSubgroup_R_Specifier[0] )
+            L_R = readPermGroup( knownSubgroup_R_FileName,
+                       knownSubgroup_R_LibraryName, degree, "Generate");
+         break;
+   }
+
+   /* Compute maximum base change level if not specified as option ??????. */
+   if ( options.maxBaseChangeLevel == UNKNOWN )
+      options.maxBaseChangeLevel = 0;
+
+   /* Compute the automorphism group or check isomorphism, and write out
+      the group or isomorphism permutation. */
+   switch ( computationType ) {
+      case DESIGN_AUTO:
+      case MATRIX_AUTO:
+      case CODE_AUTO:
+         if ( options.inform ) {
+            switch ( computationType ) {
+               case DESIGN_AUTO:
+                  printf( "\n\n            Design Automorphism Group Program:  "
+                          "Design %s\n\n", matrix->name);
+                  sprintf( comment, "The automorphism group of design %s.",
+                           matrix->name);
+                  options.groupOrderMessage = "Design automorphism group";
+                  break;
+               case MATRIX_AUTO:
+                  if ( monomialFlag ) {
+                     printf( "\n\n            Matrix Monomial Group Program:  "
+                             "Matrix %s\n\n", matrix->name);
+                     sprintf( comment, "The monomial group of matrix %s.",
+                              matrix->name);
+                     options.groupOrderMessage = 
+                              "Matrix monomial automorphism group";
+                  }
+                  else {
+                     printf( "\n\n            Matrix Automorphism Group Program:  "
+                             "Matrix %s\n\n", matrix->name);
+                     sprintf( comment, "The automorphism group of matrix %s.",
+                              matrix->name);
+                     options.groupOrderMessage = "Matrix automorphism group";
+                  }
+                  break;
+               case CODE_AUTO:
+                  printf( "\n\n      Code Automorphism Group Program:  "
+                          "Code %s, Invariant set %s\n\n", C->name, matrix->name);
+                  sprintf( comment, "The automorphism group of code %s.",
+                           C->name);
+                  options.groupOrderMessage = "Code automorphism group";
+                  break;
+            }
+            if ( L )
+               printf( "\nKnown Subgroup: %s\n", L->name);
+            printf( "\n");
+         }
+         if ( (computationType == MATRIX_AUTO && matrix->setSize > 2) ||
+              (computationType == CODE_AUTO && C->fieldSize > 2) )
+            A = matrixAutoGroup( matrix, L, C, monomialFlag);
+         else
+            A = designAutoGroup( matrix, L, C);
+         strcpy( A->name, outputObjectName);
+         A->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         if ( pbFlag )
+            if ( monomialFlag )
+               writePermGroupRestricted( outputFileName, outputLibraryName, A, 
+                                     comment, matrix->numberOfCols);
+            else 
+               writePermGroup( outputFileName, outputLibraryName, A, comment);
+         else
+            writePermGroupRestricted( outputFileName, outputLibraryName, A,
+                                      comment, matrix->numberOfRows);
+         break;
+      case DESIGN_ISO:
+      case MATRIX_ISO:
+      case CODE_ISO:
+         if ( options.inform ) {
+            switch ( computationType ) {
+               case DESIGN_ISO:
+                  printf( "\n\n         Design Isomorphism Program:  "
+                       "Designs %s and %s\n\n", matrix_L->name, matrix_R->name);
+                  sprintf( comment, "An isomorphism from design %s to design %s.",
+                        matrix_L->name, matrix_R->name);
+                  options.cosetRepMessage = 
+                     "The designs are isomorphic.  An isomorphism is:";
+                  options.noCosetRepMessage = 
+                     "The designs are not isomorphic.";
+                  break;
+               case MATRIX_ISO:
+                  if ( monomialFlag ) {
+                     printf( "\n\n         Matrix Monomial Isomorphism Program:  "
+                          "Matrices %s and %s\n\n", matrix_L->name, matrix_R->name);
+                     sprintf( comment, "An monomial isomorphism from matrix %s to matrix %s.",
+                           matrix_L->name, matrix_R->name);
+                     options.cosetRepMessage = 
+                        "The matrices are monomially isomorphic.  An isomorphism is:";
+                     options.noCosetRepMessage = 
+                        "The designs are not monomially isomorphic.";
+                  }
+                  else {
+                     printf( "\n\n         Matrix Isomorphism Program:  "
+                          "Matrices %s and %s\n\n", matrix_L->name, matrix_R->name);
+                     sprintf( comment, "An isomorphism from matrix %s to matrix %s.",
+                           matrix_L->name, matrix_R->name);
+                     options.cosetRepMessage = 
+                        "The matrices are isomorphic.  An isomorphism is:";
+                     options.noCosetRepMessage = 
+                        "The matrices are not isomorphic.";
+                  }  
+                  break;
+               case CODE_ISO:
+                  printf( "\n\n     Code Isomorphism Program:  "
+                       "Codes %s and %s, Invariant sets %s and %s\n\n",
+                        C_L->name, C_R->name, matrix_L->name, matrix_R->name);
+                  sprintf( comment, "An isomorphism from code %s to code %s.",
+                        C_L->name, C_R->name);
+                  options.cosetRepMessage = 
+                     "The codes are isomorphic.  An isomorphism is:";
+                  options.noCosetRepMessage = 
+                     "The codes are not isomorphic.";
+                  break;
+            }
+            if ( L_L )
+               printf( "\nKnown Subgroup (left):  %s", L_L->name);
+            if ( L_R )
+               printf( "\nKnown Subgroup (right): %s", L_R->name);
+            if ( L_L || L_R )
+               printf( "\n");
+         }
+         if ( (computationType == MATRIX_ISO && matrix_L->setSize > 2) ||
+              (computationType == CODE_ISO && C_L->fieldSize > 2) )
+            y = matrixIsomorphism( matrix_L, matrix_R, L_L, L_R, C_L, C_R, 
+                                   monomialFlag, pbFlag);
+         else
+            y = designIsomorphism( matrix_L, matrix_R, L_L, L_R, C_L, C_R, pbFlag);
+         if ( y ) {
+            strcpy( y->name, outputObjectName);
+            if ( pbFlag )
+               if ( monomialFlag )
+                  if ( imageFormatFlag )
+                     writePermutationRestricted( outputFileName, 
+                            outputLibraryName, y, "image", comment, 
+                            matrix_L->numberOfCols);
+                  else
+                     writePermutationRestricted( outputFileName, 
+                            outputLibraryName, y, "", comment, 
+                            matrix_L->numberOfCols);
+               else
+                  if ( imageFormatFlag )
+                     writePermutation( outputFileName, outputLibraryName, y, 
+                                       "image", comment);
+                  else
+                     writePermutation( outputFileName, outputLibraryName, y, 
+                                       "", comment);
+            else
+               if ( imageFormatFlag )
+                  writePermutationRestricted( outputFileName, outputLibraryName,
+                                       y, "image", comment, matrix_L->numberOfRows);
+               else
+                  writePermutationRestricted( outputFileName, outputLibraryName,
+                                       y, "", comment, matrix_L->numberOfRows);
+         }
+         break;
+   }
+
+   /* Return to caller. */
+   if ( !imageFlag || y )
+      return 0;
+   else
+      return 1;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcdesau( CompileOptions *cOpts);
+   extern void xchbase( CompileOptions *cOpts);
+   extern void xcmatau( CompileOptions *cOpts);
+   extern void xcompcr( CompileOptions *cOpts);
+   extern void xcompsg( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xcstrba( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xfield ( CompileOptions *cOpts);
+   extern void xinform( CompileOptions *cOpts);
+   extern void xmatrix( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xoptsve( CompileOptions *cOpts);
+   extern void xorbit ( CompileOptions *cOpts);
+   extern void xorbref( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xptstbr( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadde( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xrpriqu( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+   
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcdesau( &mainOpts);
+   xchbase( &mainOpts);
+   xcmatau( &mainOpts);
+   xcompcr( &mainOpts);
+   xcompsg( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xcstrba( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xfield ( &mainOpts);
+   xinform( &mainOpts);
+   xmatrix( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xoptsve( &mainOpts);
+   xorbit ( &mainOpts);
+   xorbref( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xptstbr( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadde( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpe( &mainOpts);
+   xrpriqu( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/desauto.h b/src/leon/src/desauto.h
new file mode 100644
index 0000000..7e62156
--- /dev/null
+++ b/src/leon/src/desauto.h
@@ -0,0 +1,7 @@
+#ifndef DESAUTO
+#define DESAUTO
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/desiso.sh b/src/leon/src/desiso.sh
new file mode 100755
index 0000000..080a87f
--- /dev/null
+++ b/src/leon/src/desiso.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+desauto -iso $*    
diff --git a/src/leon/src/enum.h b/src/leon/src/enum.h
new file mode 100644
index 0000000..0e04b69
--- /dev/null
+++ b/src/leon/src/enum.h
@@ -0,0 +1,61 @@
+
+#define HB 0x8000
+#define NHB 0x7fff
+
+typedef struct {
+   Word word;
+   Unsigned *image;
+} WordImagePair;
+
+typedef struct {
+   Unsigned pnt;
+   Unsigned img;
+   Permutation *gn;
+} Deduction;
+
+typedef struct {
+   Unsigned curSize;
+   Unsigned head;
+   Unsigned tail;
+   Deduction *deduc;
+} DeductionQueue;
+
+typedef struct {
+   Unsigned size;
+   Unsigned head;
+   Unsigned tail;
+   Unsigned *coset;
+   Unsigned *image;
+   Permutation **gen;
+} DefinitionList;
+
+typedef struct {
+   BOOLEAN initialize;
+   Unsigned maxDeducQueueSize;
+   Unsigned genOrderLimit;
+   Unsigned prodOrderLimit;
+   BOOLEAN alwaysRebuildSvec;
+   Unsigned maxExtraCosets;
+   Unsigned percentExtraCosets;
+} STCSOptions;
+
+
+#define MAKE_EMPTY( queue)  {queue->head = queue->tail = queue->curSize = 0;}
+
+#define ATTEMPT_ENQUEUE( queue, newDeduc)                  \
+   {if ( queue->curSize < sOptions.maxDeducQueueSize ) {   \
+       queue->deduc[queue->tail++] = newDeduc;             \
+       if ( queue->tail == sOptions.maxDeducQueueSize )    \
+          queue->tail = 0;                                 \
+       ++queue->curSize;                                   \
+    }}
+
+#define DEQUEUE( queue, deduc)             \
+   {deduc = queue->deduc[queue->head++];   \
+    if ( queue->head == sOptions.maxDeducQueueSize )     \
+       queue->head = 0;                                  \
+    --queue->curSize;}
+
+#define NOT_EMPTY( queue)  (queue->curSize != 0)
+
+
diff --git a/src/leon/src/errmesg.c b/src/leon/src/errmesg.c
new file mode 100644
index 0000000..bbecc0a
--- /dev/null
+++ b/src/leon/src/errmesg.c
@@ -0,0 +1,79 @@
+/* File errmesg.c.  Contains function errorMessage that is invoked when an
+   error occurs.  It prints a message and terminates the program. */
+
+#include "group.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+CHECK( errmes)
+
+
+/*-------------------------- isValidName ----------------------------------*/
+
+BOOLEAN isValidName(
+   char *name)               /* The name to be checked for validity. */
+{
+   Unsigned i;
+
+   if ( strlen(name) > MAX_NAME_LENGTH )
+      return FALSE;
+   if ( !isalpha(name[0]) && name[0] != '_' )
+      return FALSE;
+   for ( i = 1 ; i < strlen(name) ; ++i )
+      if ( !isalnum(name[i]) && name[i] != '_' )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- errorMessage ---------------------------------*/
+
+void errorMessage(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message)            /* The message to be printed.  It will be
+                                prefixed by "Error: ". */
+{
+   printf( "\n\n Error: %s\n"
+           " Program was executing function %s (line %d in file %s).",
+           message, function, line, file);
+   exit(ERROR_RETURN_CODE);
+}
+
+
+/*-------------------------- errorMessage1i -------------------------------*/
+
+void errorMessage1i(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message1,           /* The first part of the error message. */
+   Unsigned intParm,         /* The integer variable part of the message. */
+   char *message2)           /* The second part of the error message. */
+{
+   printf( "\n\n Error: %s%u%s\n"
+           " Program was executing function %s (line %d in file %s).",
+           message1, intParm, message2, function, line, file);
+   exit(ERROR_RETURN_CODE);
+}
+
+
+/*-------------------------- errorMessage1s -------------------------------*/
+
+void errorMessage1s(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message1,           /* The first part of the error message. */
+   char *strParm,            /* The integer variable part of the message. */
+   char *message2)           /* The second part of the error message. */
+{
+   printf( "\n\n Error: %s%s%s\n"
+           " Program was executing function %s (line %d in file %s).",
+           message1, strParm, message2, function, line, file);
+   exit(ERROR_RETURN_CODE);
+}
diff --git a/src/leon/src/errmesg.h b/src/leon/src/errmesg.h
new file mode 100644
index 0000000..b989de2
--- /dev/null
+++ b/src/leon/src/errmesg.h
@@ -0,0 +1,34 @@
+#ifndef ERRMESG
+#define ERRMESG
+
+extern BOOLEAN isValidName(
+   char *name)               /* The name to be checked for validity. */
+;
+
+extern void errorMessage(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message)            /* The message to be printed.  It will be
+                                prefixed by "Error: ". */
+;
+
+extern void errorMessage1i(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message1,           /* The first part of the error message. */
+   Unsigned intParm,         /* The integer variable part of the message. */
+   char *message2)           /* The second part of the error message. */
+;
+
+extern void errorMessage1s(
+   char *file,               /* The file in which the error occured. */
+   int  line,                /* The line before which the error occured. */
+   char *function,           /* The function in which the error occured. */
+   char *message1,           /* The first part of the error message. */
+   char *strParm,            /* The integer variable part of the message. */
+   char *message2)           /* The second part of the error message. */
+;
+
+#endif
diff --git a/src/leon/src/essentia.c b/src/leon/src/essentia.c
new file mode 100644
index 0000000..c3d353f
--- /dev/null
+++ b/src/leon/src/essentia.c
@@ -0,0 +1,109 @@
+/* File essentia.c.  Contains functions for testing and setting the
+   essential[] field of permutations. */
+
+#include <stddef.h>
+
+#include "group.h"
+
+extern GroupOptions options;
+
+CHECK( essent)
+
+
+BOOLEAN essentialAtLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+{
+   if ( level <= 31 )
+      return  (perm->essential[0] & bitSetAt[level]) != 0ul;
+   else
+      return  (perm->essential[level>>5] & bitSetAt[level&31]) != 0ul;
+}
+
+
+BOOLEAN essentialBelowLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+{
+   Unsigned i;
+   unsigned long t;
+   if ( level <= 31 )
+      return  (perm->essential[0] & bitSetBelow[level] & 0xFFFFFFFE) != 0;
+   else {
+      t = perm->essential[0] & 0xFFFFFFFE;
+      for ( i = 1 ; i < level>>5 ; ++i )
+         t |= perm->essential[i];
+      t |= perm->essential[level>>5] & bitSetBelow[level&31];
+      return  t != 0;
+   }
+}
+
+
+BOOLEAN essentialAboveLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+{
+   Unsigned i;
+   unsigned long t;
+   t = perm->essential[level>>5] &
+                   ~(bitSetAt[level&31] | bitSetBelow[level&31]);
+   for ( i = (level>>5)+1 ; i <= (options.maxBaseSize+1)/32 ; ++i )
+      t |= perm->essential[i];
+   return  t != 0;
+}
+
+
+void makeEssentialAtLevel(
+   Permutation *const perm,
+   const Unsigned level)
+{
+   perm->essential[level>>5] |= bitSetAt[level&31];
+}
+
+
+void makeNotEssentialAtLevel(
+   Permutation *const perm,
+   const Unsigned level)
+{
+   perm->essential[level>>5] &= ~bitSetAt[level&31];
+}
+
+
+void makeNotEssentialAtAboveLevel(
+   Permutation *const perm,
+   const Unsigned level)
+{
+   Unsigned i;
+   perm->essential[level>>5] &= bitSetBelow[level&31];
+   for ( i = (level>>5)+1 ; i <= (options.maxBaseSize+1)/32 ; ++i )
+      perm->essential[i] = 0;
+}
+
+
+void makeNotEssentialAll(
+   Permutation *const perm)
+{
+   Unsigned i;
+   for ( i = 0 ; i <= (options.maxBaseSize+1)/32 ; ++i )
+      perm->essential[i] = 0;
+}
+
+
+void makeUnknownEssential(
+   Permutation *const perm)
+{
+   Unsigned i;
+   perm->essential[0] = 0xFFFFFFFE;
+   for ( i = 1 ; i <= (options.maxBaseSize+1)/32 ; ++i )
+      perm->essential[i] = 0xFFFFFFFF;
+}
+
+
+void copyEssential(
+   Permutation *const newPerm,
+   const Permutation *const oldPerm)
+{
+   Unsigned i;
+   for ( i = 0 ; i <= (options.maxBaseSize+1)/32 ; ++i )
+      newPerm->essential[i] = oldPerm->essential[i];
+}
diff --git a/src/leon/src/essentia.h b/src/leon/src/essentia.h
new file mode 100644
index 0000000..aa002f5
--- /dev/null
+++ b/src/leon/src/essentia.h
@@ -0,0 +1,47 @@
+#ifndef ESSENTIA
+#define ESSENTIA
+
+extern BOOLEAN essentialAtLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+;
+
+extern BOOLEAN essentialBelowLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+;
+
+extern BOOLEAN essentialAboveLevel(
+   const Permutation *const perm,
+   const Unsigned level)
+;
+
+extern void makeEssentialAtLevel(
+   Permutation *const perm,
+   const Unsigned level)
+;
+
+extern void makeNotEssentialAtLevel(
+   Permutation *const perm,
+   const Unsigned level)
+;
+
+extern void makeNotEssentialAtAboveLevel(
+   Permutation *const perm,
+   const Unsigned level)
+;
+
+extern void makeNotEssentialAll(
+   Permutation *const perm)
+;
+
+extern void makeUnknownEssential(
+   Permutation *const perm)
+;
+
+extern void copyEssential(
+   Permutation *const newPerm,
+   const Permutation *const oldPerm)
+;
+
+#endif
diff --git a/src/leon/src/extname.h b/src/leon/src/extname.h
new file mode 100644
index 0000000..c0cf766
--- /dev/null
+++ b/src/leon/src/extname.h
@@ -0,0 +1,266 @@
+#define addOccurencesForRelator     AddOfR
+#define addRelatorSortedFromWord    AddRSW
+#define addStrongGenerator          AddSGn
+#define adjoinGenInverses           AdjGIv
+#define adjoinInvImage              AdjIIm
+#define adjoinInverseGen            AdjIGn
+#define allocBooleanArrayBaseSize   AlcBAB
+#define allocBooleanArrayDegree     AlcBAG
+#define allocFactoredInt            AlcFI
+#define allocField                  AlcFld
+#define allocIntArrayBaseSize       AlcIAB
+#define allocIntArrayDegree         AlcIAD
+#define allocLongArrayBaseSize      AlcLAB
+#define allocOccurenceOfGen         AlcOoG
+#define allocPartition              AlcPar
+#define allocPartitionStack         AlcPaS
+#define allocPermGroup              AlcPG
+#define allocPermutation            AlcPer
+#define allocPointSet               AlcPS
+#define allocPtrArrayBaseSize       AlcPAB
+#define allocPtrArrayDegree         AlcPAD
+#define allocPtrArrayWordSize       AlcPAW
+#define allocRBase                  AlcRB
+#define allocRelator                AlcRel
+#define allocRPriorityQueue         AlcRPQ
+#define allocRefinementArrayDegree  AlcRAD
+#define allocWord                   AlcWor
+#define augmentedMatrix             AugMat
+#define assignGenName               AsnGN
+#define bitSetAt                    BitStA
+#define bitSetBelow                 BitStB
+#define buildField                  BldFld
+#define cellNumberAtDepth           CelNAD
+#define centralizer                 centrl
+#define changeBase                  ChaBas
+#define checkCompileOptions         CkCpOp
+#define checkConjugacy              ChkCjg
+#define checkConjugacyInGroup       ChkCGp
+#define chooseNextBasePoint         CNxBPt
+#define codeContainsVector          CodCVe
+#define commutatorGroup             ComGrp
+#define compressAtLevel             CmprAL
+#define compressGroup               CmprGp
+#define computeCosetRep             CpCRep
+#define computeSchreierGen          CpShGn
+#define computeSubgroup             CpSG
+#define conjugateGroupByPerm        CjGrpP
+#define conjugatePermByGroup        CjPerG
+#define conjugatePermByPerm         CjPerP
+#define conjugatingElement          CnjElt
+#define constructAllOrbitInfo       CstAOI
+#define constructBasicOrbit         CstBO
+#define constructOrbitPartition     CstOP
+#define constructRBase              CstRB
+#define copyEssential               CopEss
+#define copyOfPermGroup             CopOPG
+#define copyOfPermutation           CopOP
+#define copyPermutation             CopPer
+#define currentExtraCosets          CuExCs
+#define deletePartition             DelPar
+#define deletePartitionStack        DelPS
+#define deletePermGroup             DelPG
+#define deletePermutation           DelPer
+#define deleteRBase                 DelRB
+#define deleteRPriorityQueue        DelRPQ
+#define depthGreaterThan            DepGt
+#define designAutoGroup             DesAGp
+#define designIsomorphism           DesIso
+#define equivCoset                  EqvCos
+#define errorMessage                ErrMes
+#define errorMessage1i              ErrM1i
+#define errorMessage1s              ErrM1s
+#define essentialAboveLevel         EssAbL
+#define essentialAtLevel            EssAtL
+#define essentialBelowLevel         EssBeL
+#define expandGenerators            ExpGen
+#define expandSGS                   ExpSGS
+#define extendBasicOrbit            ExtBO
+#define extraCosetsAtLevel          ExCsLv
+#define factDivide                  FacDiv
+#define factEqual                   FacEql
+#define factMultiply                FacMul
+#define factorize                   Factiz
+#define findConsequences            FnCnsq
+#define fixesBasicOrbit             FixBO
+#define forceCollapse               FCalps
+#define freeBooleanArrayBaseSize    FreBAB
+#define freeBooleanArrayDegree      FreBAD
+#define freeCosHeader               FreCsH
+#define freeFactoredInt             FreFI
+#define freeField                   FreFld
+#define freeIntArrayBaseSize        FreIAB
+#define freeIntArrayDegree          FreIAD
+#define freeLongArrayBaseSize       FreLAB
+#define freeOccurenceOfGen          FreOoG
+#define freePartition               FrePar
+#define freePartitionStack          FrePaS
+#define freePermGroup               FrePG
+#define freePermutation             FrePer
+#define freePointSet                FrePS
+#define freePtrArrayBaseSize        FrePAB
+#define freePtrArrayDegree          FrePAD
+#define freePtrArrayWordSize        FrePAW
+#define freeRBase                   FreRB
+#define freeRelator                 FreRel
+#define freeRPriorityQueue          FreRPQ
+#define freeRefinementArrayDegree   FreRAD
+#define freeWord                    FreWrd
+#define genCount                    GenCnt
+#define genExpandingBasicOrbit      GenEBO
+#define groupCentralizer            GpCent
+#define informCosetRep              InfCR
+#define informGroup                 InfGrp
+#define informNewGenerator          InfNG
+#define informNewRelator            InfNR
+#define informOptions               InfOpt
+#define informRBase                 InfRB
+#define informSTCSSummary           InfSTC
+#define informStatistics            InfStt
+#define informSubgroup              InfSG
+#define informTime                  IntTim
+#define initFromPartnStack          IniPaS
+#define initializeBase              IniBas 
+#define initializePartnStabRefn     IniPSR
+#define initializeOrbRefine         IniOR
+#define initializeSeed              IniSed
+#define initializeSetStabRefn       IniSSR
+#define initializeStorageManager    IniSM
+#define initializeUPartnStabRefine  IniUPS
+#define insertBasePoint             InsBP
+#define intersection                Inters
+#define isBaseImage                 IsBImg
+#define isCentralizedBy             IsCenB
+#define isCodeIsomorphism           IsCIso
+#define isDoublyTransitive          IsDbTr
+#define isElementOf                 IsEltO
+#define isFixedPointOf              IsFxP
+#define isIdentity                  IsIden
+#define isIdentityElt               IsIElt
+#define isInvolution                IsInvo
+#define isInvolutoryElt             IsIvEl
+#define isMatrix01Isomorphism       IsMIso
+#define isNontrivialGroup           IsNtGp
+#define isNormalizedBy              IsNorB
+#define isOrbReducible              IsOrRd
+#define isPartnStabReducible        IsPaRd
+#define isPointStabReducible        IsPSRd
+#define isSetStabReducible          IsSSRd
+#define isSubgroupOf                IsSGrp
+#define isValidName                 IsValN
+#define isValidPermutation          IsValP
+#define is_sSSPointReducible        IsSPRd
+#define is_sSSReducible             IsSRd
+#define leftMultiply                LftMul
+#define levelIn                     LevIn
+#define linkEssentialGens           LnkEG
+#define linkEssentialGensAtLevel    LnkEGL
+#define linkGensAtLevel             LnkGAL
+#define lowerCase                   LwrCas
+#define makeDefinition              MakDef
+#define makeEmpty                   MakEmp
+#define makeEssentialAtLevel        MEsAtL
+#define makeNotEssentialAll         MEsAll
+#define makeNotEssentialAtAboveLevel MEsAAL
+#define makeNotEssentialAtLevel     MNEAtL
+#define makeUnknownEssential        MUnkEs
+#define matrixAutoGroup             MatAut
+#define matrixIsomorphism           MatIso
+#define meanCosetRepLen             MenCRL
+#define minimalPointOfOrbit         MinPOO
+#define newCellPartitionStack       NewCPS
+#define newIdentityPerm             NewIP
+#define newPartitionStack           NewPaS
+#define newRBase                    NewRB
+#define newRelatorFromWord          NewRfW
+#define newRPriorityQueue           NewRPQ
+#define newTrivialPermGroup         NewTPG
+#define newTrivialWord              NewTW
+#define newUndefinedPerm            NewUP
+#define newZeroMatrix               NewZMa
+#define nkReadToken                 NkRedT
+#define normalClosure               NorCls
+#define numberOfCells               NoOCel
+#define onFreeList                  OnFreL
+#define orbRefine                   OrbRef
+#define parseLibraryName            ParsLN  
+#define partnStabilizer             ParStb
+#define partnStabRefine             PaStbR
+#define partnImage                  ParImg
+#define permMapping                 PerMap
+#define permOrder                   PerOrd
+#define pointMovedBy                PtMovB
+#define pointStabRefine             PtStbR
+#define popToHeight                 PopTHt
+#define primeList                   PrmLst
+#define processCoincidence          PrCoin
+#define prodOrderBounded            PrOrdB
+#define ptStabFamily                PtStFm
+#define raisePermToPower            RasPTP
+#define randGroupPerm               RandGP
+#define randGroupWord               RandGW
+#define randInteger                 RandIn
+#define randomSchreier              RandSh
+#define read01Matrix                Red01M
+#define readCode                    RedCod
+#define readCyclePerm               RedCyP
+#define readDesign                  RedDes
+#define readFactoredInt             RedFI
+#define readImagePerm               RedIP
+#define readPartition               RedPar
+#define readPerm                    RedPm
+#define readPermGroup               RedPG
+#define readPermutation             RedPer
+#define readPointList               RedPL
+#define readPointSet                RedPS
+#define readToken                   RedTok
+#define reconstructBasicOrbit       RecBO
+#define reduceBasis                 RedBas
+#define reduceWrtGroup              RedWGp
+#define relatorLevel                RelLev
+#define relatorSelection            RelSel
+#define removeIdentityGens          RmvIGn
+#define removeMin                   RmvMin
+#define removeRedunSGens            RmvRSG
+#define replaceByPower              RepPwr
+#define resetTable                  ResetT
+#define restrictBasePoints          ResBPt
+#define rightMultiply               RgtMul
+#define rightMultiplyInv            RgtMIv
+#define schreierToddCoxeterSims     SchTCS
+#define shiftPriority               SftPri
+#define shiftSelection              SftSel
+#define sReadToken                  SRdTok
+#define sSSPoint                    SSSPnt
+#define sSS_Partn                   SSSPar
+#define sUnreadToken                SUrTok
+#define setImage                    SetImg
+#define setInputFile                SetInF
+#define setInputString              SetInS
+#define setOutputFile               SetOtF
+#define setStabilizer               SetStb
+#define showLimits                  ShoLim
+#define symmetricLength             SymLen
+#define symmetricWordLength         SymWLn
+#define traceNewRelator             TrNRel
+#define unreadToken                 URdTok
+#define uPartnImage                 UPrImg 
+#define uPartnStabilizer            UprStb
+#define verifyCosetList             VerCLs
+#define write01Matrix               Wrt01M
+#define writeCode                   WrtCod
+#define writeCyclePerm              WrtCyP
+#define writeDesign                 WrtDes
+#define writeFactoredInt            WrtFI
+#define writeImagePerm              WrtIP
+#define writeImageMonomialPerm      WrtIMP
+#define writePartition              WrtPar
+#define writePermGroup              WrtPG
+#define writePermGroupRestricted    WrtPGR
+#define writePermutation            WrtPer
+#define writePermutationRestricted  WrtPRs
+#define writePointSet               WrtPS
+#define xComputeSchreierGen         XCpShG
+#define xFindConsequences           XFndCs
+#define xPopToLevel                 XPopLv
+#define xTraceNewRelator            XTrNRl
diff --git a/src/leon/src/factor.c b/src/leon/src/factor.c
new file mode 100644
index 0000000..9c272a3
--- /dev/null
+++ b/src/leon/src/factor.c
@@ -0,0 +1,158 @@
+/* File factor.c. */
+
+#include "group.h"
+#include "errmesg.h"
+
+CHECK( factor)
+
+extern Unsigned primeList[];
+
+
+/*-------------------------- gcd ------------------------------------------*/
+
+/* The function gcd( a, b) returns the greatest common divisor of log
+   integers a and b. */
+
+unsigned long gcd(
+   unsigned long a,
+   unsigned long b)
+{
+   unsigned long temp_a;
+
+   if (a < b)
+      {temp_a = a;  a = b;  b = temp_a;}
+   while (b != 0) {
+      temp_a = a;
+      a = b;
+      b = temp_a % b;
+   }
+   return a;
+}
+
+
+/*-------------------------- factMultiply ---------------------------------*/
+
+/* The function factMultiply multiplies two factored integers.  Specifically,
+   fmultiply( a, b) replaces a by the product a*b.  (b remains unchanged.) */
+
+void factMultiply(
+   FactoredInt *const a,
+   FactoredInt *const b)   /* a = a * b */
+{
+   Unsigned  aIndex = 0, bIndex = 0, i;
+   a->prime[a->noOfFactors] = b->prime[b->noOfFactors] = MAX_INT;
+   while ( a->prime[aIndex] < MAX_INT || b->prime[bIndex] < MAX_INT )
+      if ( a->prime[aIndex] < b->prime[bIndex] )
+         ++aIndex;
+      else if ( a->prime[aIndex] == b->prime[bIndex] )
+         a->exponent[aIndex++] += b->exponent[bIndex++];
+      else
+         if ( a->noOfFactors < MAX_PRIME_FACTORS ) {
+            for ( i = ++a->noOfFactors ; i > aIndex ; --i ) {
+               a->prime[i] = a->prime[i-1];
+               a->exponent[i] = a->exponent[i-1];
+            }
+            a->prime[aIndex] = b->prime[bIndex];
+            a->exponent[aIndex++] = b->exponent[bIndex++];
+         }
+         else
+            ERROR1i( "fMultiply", "Number of prime factored exceeded bound "
+                                  "of ", MAX_PRIME_FACTORS, ".")
+}
+
+
+
+/*-------------------------- factDivide -----------------------------------*/
+
+/* The function factDivide divides two factored integers.  Specifically,
+   fmultiply( a, b) replaces a by the quotient a/b.  (b remains unchanged.)
+   If b does not divide a, an error occurs. */
+
+void factDivide(
+   FactoredInt *const a,
+   FactoredInt *const b)   /* a = a / b */
+{
+   Unsigned  aIndex = 0, bIndex = 0, i;
+   a->prime[a->noOfFactors] = b->prime[b->noOfFactors] = MAX_INT;
+   while ( a->prime[aIndex] < MAX_INT && b->prime[bIndex] < MAX_INT )
+      if ( a->prime[aIndex] < b->prime[bIndex] )
+         ++aIndex;
+      else if ( a->prime[aIndex] == b->prime[bIndex] )
+         if ( a->exponent[aIndex] > b->exponent[bIndex] )
+            a->exponent[aIndex++] -= b->exponent[bIndex++];
+         else if ( a->exponent[aIndex] == b->exponent[bIndex] ) {
+            --a->noOfFactors;
+            for ( i = aIndex ; i <= a->noOfFactors ; ++i ) {
+               a->prime[i] = a->prime[i+1];
+               a->exponent[i] = a->exponent[i+1];
+            }
+            ++bIndex;
+         }
+         else
+            ERROR( "factDivide", "Divisor does not divide dividend in factored "
+                                 "integer division.")
+      else
+         ERROR( "factDivide", "Divisor does not divide dividend in factored "
+                              "integer division.")
+}
+
+
+/*-------------------------- factorize ------------------------------------*/
+
+FactoredInt factorize(
+   Unsigned n)
+{
+   FactoredInt  nFactored;
+   Unsigned  i = 0, lastPrime = 0;
+
+   nFactored.noOfFactors = 0;
+   while ( primeList[i] * primeList[i] <= n && primeList[i] )
+      if ( n % primeList[i] == 0 ) {
+         if ( primeList[i] == lastPrime )
+            ++nFactored.exponent[nFactored.noOfFactors-1];
+         else if ( nFactored.noOfFactors < MAX_PRIME_FACTORS ) {
+            nFactored.prime[nFactored.noOfFactors] = primeList[i];
+            nFactored.exponent[nFactored.noOfFactors++] = 1;
+            lastPrime = primeList[i];
+         }
+         else
+            ERROR1i( "factorize", "Number of prime factors exceeded "
+                                  "maximum of ", MAX_PRIME_FACTORS, ".")
+         n /= primeList[i];
+      }
+      else
+         ++i;
+
+   if ( primeList[i] == 0 )
+      ERROR( "factorize", "Prime number list overflow.")
+   else if ( n > 1)
+      if ( n == lastPrime )
+         ++nFactored.exponent[nFactored.noOfFactors-1];
+      else if ( nFactored.noOfFactors < MAX_PRIME_FACTORS ) {
+         nFactored.prime[nFactored.noOfFactors] = n;
+         nFactored.exponent[nFactored.noOfFactors++] = 1;
+      }
+      else
+         ERROR1i( "factorize", "Number of prime factors exceeded "
+                  "maximum of ", MAX_PRIME_FACTORS, ".")
+
+   return nFactored;
+}
+
+
+/*-------------------------- factEqual ------------------------------------*/
+
+BOOLEAN factEqual(
+   FactoredInt *a,
+   FactoredInt *b)
+{
+   Unsigned i;
+
+   if ( a->noOfFactors != b->noOfFactors )
+      return FALSE;
+   for ( i = 0 ; i < a->noOfFactors ; ++i )
+      if ( a->prime[i] != b->prime[i] || a->exponent[i] != b->exponent[i] )
+         return FALSE;
+
+   return TRUE;
+}
diff --git a/src/leon/src/factor.h b/src/leon/src/factor.h
new file mode 100644
index 0000000..7f201ce
--- /dev/null
+++ b/src/leon/src/factor.h
@@ -0,0 +1,28 @@
+#ifndef FACTOR
+#define FACTOR
+
+extern unsigned long gcd(
+   unsigned long a,
+   unsigned long b)
+;
+
+extern void factMultiply(
+   FactoredInt *const a,
+   FactoredInt *const b)   /* a = a * b */
+;
+
+extern void factDivide(
+   FactoredInt *const a,
+   FactoredInt *const b)   /* a = a / b */
+;
+
+extern FactoredInt factorize(
+   Unsigned n)
+;
+
+extern BOOLEAN factEqual(
+   FactoredInt *a,
+   FactoredInt *b)
+;
+
+#endif
diff --git a/src/leon/src/factoria.h b/src/leon/src/factoria.h
new file mode 100644
index 0000000..0476288
--- /dev/null
+++ b/src/leon/src/factoria.h
@@ -0,0 +1,3 @@
+#ifndef FACTORIA
+#define FACTORIA
+
diff --git a/src/leon/src/field.c b/src/leon/src/field.c
new file mode 100644
index 0000000..157d351
--- /dev/null
+++ b/src/leon/src/field.c
@@ -0,0 +1,98 @@
+/* File field.c.  Contains miscellaneous functions for computations with
+   fields.  At present, only field whose order is a prime number or 4 are
+   implemented. */
+
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "errmesg.h"
+#include "new.h"
+#include "primes.h"
+#include "storage.h"
+
+CHECK( field)
+
+
+/*-------------------------- newFieldTable --------------------------------*/
+
+static FieldElement **newFieldTable(
+   const Unsigned size)
+{
+   Unsigned i;
+   FieldElement **T;
+
+   T = (FieldElement **) malloc( size * sizeof(FieldElement *) );
+   if ( !T )
+      ERROR( "newFieldTable", "Out of memory.");
+   for ( i = 0 ; i < size ; ++i ) {
+      T[i] = (FieldElement *) malloc ( size * sizeof(FieldElement) );
+      if ( !T[i] )
+         ERROR( "newFieldTable", "Out of memory.");
+   }
+
+   return T;
+}
+
+
+/*-------------------------- buildField -----------------------------------*/
+
+Field *buildField(
+   Unsigned size)
+{
+   FieldElement lambda, mu;
+   const FieldElement gf4Sum[4][4] =  {0,1,2,3,
+                          1,0,3,2,
+                          2,3,0,1,
+                          3,2,1,0};
+   const FieldElement gf4Prod[4][4] = {0,0,0,0,
+                          0,1,2,3,
+                          0,2,3,1,
+                          0,3,1,2};
+   Field *F;
+
+   /* Check for valid field size. */
+   if ( size > 255 )
+      ERROR( "buildField", "Field sizes are restricted to 255.")
+   if ( size != 4 && !isPrime(size) )
+      ERROR( "buildField", "At present, field sizes must be prime or 4.")
+
+   /* Allocate field and fill in field size, characteristic, and exponent. */  
+   F = allocField();
+   F->size = size;
+   if ( size != 4 ) {
+      F->characteristic = size;
+      F->exponent = 1;
+   }
+   else {
+      F->characteristic = 2;
+      F->exponent = 2;
+   }
+
+   /* Allocate the arithmetic table arrays. */
+   F->sum = newFieldTable( size);
+   F->dif = newFieldTable( size);
+   F->prod = newFieldTable( size);
+   F->inv = malloc( size * sizeof(FieldElement) );
+   if ( !F->inv )
+      ERROR( "buildField", "Out of memory.");
+
+   /* Construct the field tables. */
+   for ( lambda = 0 ; lambda < size ; ++lambda)
+      for ( mu = 0 ; mu < size ; ++mu) {
+         if ( F->exponent == 1 ) {
+            F->sum[lambda][mu] =  ( lambda + mu) % size;
+            F->dif[lambda][mu] =  ( lambda - mu + size) % size;
+            F->prod[lambda][mu] = ( lambda * mu) % size;
+         }
+         else {
+            F->sum[lambda][mu] =  gf4Sum[lambda][mu];
+            F->dif[lambda][mu] =  gf4Sum[lambda][mu];
+            F->prod[lambda][mu] = gf4Prod[lambda][mu];
+         }
+         if ( F->prod[lambda][mu] == 1 )
+            F->inv[lambda] = mu;
+      }
+
+   return F;
+}
diff --git a/src/leon/src/field.h b/src/leon/src/field.h
new file mode 100644
index 0000000..22d6093
--- /dev/null
+++ b/src/leon/src/field.h
@@ -0,0 +1,8 @@
+#ifndef FIELD
+#define FIELD
+
+extern Field *buildField(
+   Unsigned size)
+;
+
+#endif
diff --git a/src/leon/src/fndelt.c b/src/leon/src/fndelt.c
new file mode 100644
index 0000000..e5cdd1b
--- /dev/null
+++ b/src/leon/src/fndelt.c
@@ -0,0 +1,338 @@
+/* File fndelt.c.  Main program for fndelt command, which may be used
+   to find semirandom elements of specified order (default 2) in a
+   permutation group and to find the orders of all products of these elements
+   or their number of fixed points.  Selected elements can be appended to a
+   Cayley library, either in permutation or permutation group format.
+   The format of the command is:
+
+>       fndelt <options> <permGroup> <count>  <elt1>  <elt2>  <elt3> ...
+
+   where the meaning of the parameters is as follows:
+
+            <permGroup>: the permutation group from which involutions are to
+                         be located.
+
+            <count>:     the number of involutions to be located.
+
+>           <invol1>:    (optional) First involution to be printed.
+
+   The options are as follows:
+
+      -o:n          Order of elements to find.
+
+      -po           Find orders of all products of involutions.
+
+      -f            Compute number of fixed points
+
+      -i            Write permutations in image format
+
+      -crl:<name>   Name of the Cayley library from which to read the group
+
+      -s:<integer>  Seed for random number generator.
+
+      -wg:<name>    Name of a Cayley library.  The group generated by the
+                    selected permutations will be written to this Cayley
+                    library.
+
+      -wp:<name>    Name of a Cayley library.  The first element will be
+                    be written to this Cayley library.   */
+
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "errmesg.h"
+#include "new.h"
+#include "oldcopy.h"
+#include "permut.h"
+#include "readgrp.h"
+#include "readper.h"
+#include "randgrp.h"
+#include "util.h"
+
+static void verifyOptions(void);
+
+GroupOptions options;
+
+int main( int argc, char *argv[])
+{
+   char permGroupFileName[MAX_FILE_NAME_LENGTH+1] = "",
+        permOutputFileName[MAX_FILE_NAME_LENGTH+1] = "",
+        groupOutputFileName[MAX_FILE_NAME_LENGTH+1] = "",
+        permGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        permOutputLibraryName[MAX_NAME_LENGTH+1] = "",
+        groupOutputLibraryName[MAX_NAME_LENGTH+1] = "",
+        permOutputName[MAX_FILE_NAME_LENGTH+1] = "",
+        groupOutputName[MAX_FILE_NAME_LENGTH+1] = "",
+        outputObjectName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH+1] = "",
+        suffix[MAX_NAME_LENGTH+1] = "";
+   char comment[60];
+   Unsigned f, i, j, optionCountPlus1, successCount, numberOfInvolsToFind,
+            orderToFind = 2, attemptCount, maxAttemptCount;
+   BOOLEAN orderOption;
+   unsigned long seed;
+   unsigned long order;
+   PermGroup *G, *involSubgroup;
+   Permutation *newPerm, *prodPerm, *invol[100];
+   BOOLEAN fixedPointsOption = FALSE, imageFormatFlag = FALSE;
+
+   /* If there are no options, provide usage information and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  fndelt [options] permGroup numberOfElts [saveElt]...\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position i (i as above) give
+      limits and return. */
+   if ( strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0 ) 
+      verifyOptions();
+
+   /* Check for at least two parameters following options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 < 2 ) {
+      printf( "\n\nError: At least 2 non-option parameters are required.\n");
+      exit(ERROR_RETURN_CODE);
+   }
+
+   /* Process options. */
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   orderOption = FALSE;
+   seed = 47;
+   maxAttemptCount = 200;
+   strcpy( options.outputFileMode, "w");
+   for ( i = 1 ; i < optionCountPlus1 ; ++i )
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strcmp( argv[i], "-f") == 0 )
+         fixedPointsOption = TRUE;
+      else if ( strcmp( argv[i], "-po") == 0 )
+         orderOption = TRUE;
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp(argv[i],"-m:",3) == 0 ) {
+         errno = 0;
+         maxAttemptCount = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-n:",3) == 0 )
+         strcpy( outputObjectName, argv[i]+3);
+      else if ( strncmp(argv[i],"-o:",3) == 0 ) {
+         errno = 0;
+         orderToFind = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
+         errno = 0;
+         seed = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-wp:",4) == 0 )
+         strcpy( permOutputName, argv[i]+4);
+      else if ( strncmp(argv[i],"-wg:",4) == 0 )
+         strcpy( groupOutputName, argv[i]+4);
+      else
+            ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".")
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Obtain number of involutions to find. */
+   errno = 0;
+   numberOfInvolsToFind = strtol( argv[optionCountPlus1+1], NULL, 0);
+   if ( errno || numberOfInvolsToFind > 99 )
+      ERROR1s( "main (fndinvol command)", "Invalid count ",
+               argv[optionCountPlus1+1], ".");
+
+   /* Compute file and library names. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                     permGroupFileName, permGroupLibraryName);
+   if ( permOutputName )
+      parseLibraryName( permOutputName, "", "",
+                        permOutputFileName, permOutputLibraryName);
+   if ( groupOutputName )
+      parseLibraryName( groupOutputName, "", "",
+                           groupOutputFileName, groupOutputLibraryName);
+
+   /* Read in group. */
+   G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate");
+
+   /* Repeatedly generate random group elements.  When possible, take power
+      to give desired order. */
+   successCount = 0;
+   attemptCount = 0;
+   initializeSeed( seed);
+   while ( successCount < numberOfInvolsToFind && ++attemptCount <= maxAttemptCount) {
+      newPerm = randGroupPerm( G, 1);
+      order = permOrder( newPerm);
+      if ( (order = permOrder(newPerm)) % orderToFind == 0 ) {
+         raisePermToPower( newPerm, order / orderToFind);
+         newPerm->name[0] = 'x';
+         invol[++successCount] = newPerm;
+         sprintf( newPerm->name+1, "%d", successCount);
+      }
+   }
+
+   /* Find the number of fixed points, if desired. */
+   if ( fixedPointsOption ) {
+      printf( "\n\n Number of fixed points.\n\n");
+      for ( i = 1 ; i <= successCount ; ++i ) {
+         f = 0;
+         for ( j = 1 ; j <= G->degree ; ++j )
+            f += (invol[i]->image[j] == j);
+         printf( " %-5s      %5d\n", invol[i]->name, f);
+      }
+   }
+
+   /* Find orders of products, if desired. */
+   if ( orderOption ) {
+      printf( "\n\n Orders of products.\n");
+      prodPerm = newUndefinedPerm( G->degree);
+      for ( i = 1 ; i < successCount ; ++i )
+         for ( j = i+1 ; j <= successCount ; ++j ) {
+            copyPermutation( invol[i], prodPerm);
+            rightMultiply( prodPerm, invol[j]);
+            printf( "\n    %-5s  %-5s %8ld", invol[i]->name, invol[j]->name,
+                                            permOrder( prodPerm) );
+         }
+   }
+
+   /* Print involutions if requested, and write out group. */
+   if ( groupOutputName[0] ) {
+      involSubgroup = newTrivialPermGroup( G->degree);
+      if ( outputObjectName[0] )
+         strcpy( involSubgroup->name, outputObjectName);
+      else
+         strcpy( involSubgroup->name, groupOutputLibraryName);
+      involSubgroup->base = NULL;
+      involSubgroup->order = NULL;
+      involSubgroup->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+      sprintf( comment, "Constructed by fndElt.  Generators have order %d.",
+               orderToFind);
+      for ( j = optionCountPlus1+2 ; j < argc ; ++j ) {
+         i = strtol(argv[j], NULL, 0);
+         if ( i > successCount ) {
+            printf( "\nFewer than %u permutations were found.\n", i);
+            continue;
+         }
+         strcpy( invol[i]->name, "x");
+         sprintf( invol[i]->name+1, "%d", i);
+         invol[i]->next = NULL;
+         if ( involSubgroup->generator )
+            invol[i]->next = involSubgroup->generator;
+         involSubgroup->generator = invol[i];
+      }
+      writePermGroup( groupOutputFileName, groupOutputLibraryName,
+                     involSubgroup, comment);
+   }
+
+   if ( permOutputName[0] && optionCountPlus1+2 < argc ) {
+      i = strtol(argv[optionCountPlus1+2], NULL, 0);
+      if ( i < successCount ) {
+         sprintf( comment, "Constructed by fndElt.  Seed %lu, permutation %d.",
+                  seed, i);
+         if ( outputObjectName[0] )
+            strcpy( invol[i]->name, outputObjectName);
+         else
+            strcpy( invol[i]->name, permOutputLibraryName);
+         writePermutation( permOutputFileName, permOutputLibraryName,
+                 invol[i], (imageFormatFlag ? "image" : "cycle"), comment);
+      }
+      else
+         printf( "\nFewer than %u permutations were found.\n", i);
+   }
+
+   /* Terminate. */
+   return 0;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpe( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
+
diff --git a/src/leon/src/fndelt.h b/src/leon/src/fndelt.h
new file mode 100644
index 0000000..35c901f
--- /dev/null
+++ b/src/leon/src/fndelt.h
@@ -0,0 +1,7 @@
+#ifndef FNDELT
+#define FNDELT
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/fndinvol.h b/src/leon/src/fndinvol.h
new file mode 100644
index 0000000..b21345a
--- /dev/null
+++ b/src/leon/src/fndinvol.h
@@ -0,0 +1,3 @@
+#ifndef FNDINVOL
+#define FNDINVOL
+
diff --git a/src/leon/src/gcent.sh b/src/leon/src/gcent.sh
new file mode 100755
index 0000000..3302245
--- /dev/null
+++ b/src/leon/src/gcent.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cent -group $*
diff --git a/src/leon/src/generate.c b/src/leon/src/generate.c
new file mode 100644
index 0000000..8f96564
--- /dev/null
+++ b/src/leon/src/generate.c
@@ -0,0 +1,597 @@
+/* File generate.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/*  Main program for generate command, which may be used
+   to find a base and strong generating set for a permutation group using
+   the random Schreier and/or Schreier-Todd-Coxeter-Sims methods.  The format
+   of the command is:
+
+      generate  <options>  <permGroup>  <generatedPermGroup>
+
+   where the meaning of the parameters is as follows:
+
+      <permGroup>:          the permutation group G for which a base and strong
+                            generating set is to be found.
+
+      <generatedPermGroup>: the same permutation group G with a base and strong
+                            generating set, depending on options, possibly a
+                            strong presentation.
+
+   The general options are as follows:
+
+      -nr            Omit random-Schreier phase.
+
+      -ns            Omit Schreier-Todd-Coxeter-Sims phase (automatically
+                     omitted if order is known in advance and random-Schreier
+                     phases generates full order, unless the -p option is given.
+
+      -p             Find a presentation.
+
+      -q             Don't write status information to standard output.
+
+      -in:<group>    Group G is contained in <group>.  Only base of <group> is
+                     used; <group> need not be valid as long as its base ,
+                     base size, and degree fields are filled in correctly.
+
+      -overwrite     Overwrite, rather than append to, the output file.
+
+      -i             Image format for output group.
+
+      -c             Cycle format for output group.
+
+      -gn:<name>
+
+   Options applicable specifically to the random-Schreier phase are:
+
+      -s:<integer>    Seed for random number generator.
+
+      -tr:<integer>   Random Schreier phase terminates after this many
+                      consecutive "successes" (quasi-random elements that
+                      are factorable).
+
+      -ti:<integer>   This many consecutive non-involutory generators will
+                      be rejected in an attempt to choose involutory generators.
+
+      -th:k           This many consecutive generators will be rejected in
+                      an attempt to choose a generator of order 3 (or less).
+
+      -nro            Suppress normal attempt to reduce generator order by
+                      replacing generators with powers.
+
+      -wi:w,x         Here w and x are integers with w <= x.  The word length
+                      increment will be random between w and x.
+
+      -z              Redundant strong generators will be removed after the
+                      algorithm completes..
+
+   Options applicable to the STCS phase are:
+
+      -go:m           Automatically include the order of each generator as a
+                      relator when the generator order does not exceed m
+                      (default 15).
+
+      -po:m           Automatically include the order of each product of
+                      generators as a relator when the product order does
+                      not exceed m (default 5).
+
+      -x2:m           If the STCS phase terminates with more than
+                      m generators (excluding inverses), redundant generators
+                      are removed.
+
+      -pr:a,b,c,d,e   Determines priority for relator selection.  The priority
+                      of a relator r is  a - b * (len+symLen)/2.  Relators are
+                      selected if their priority exceeds
+                      c + d * chosen - e * omitted, where chosen represents the
+                      number of relators chosen at this level and omitted
+                      represents the number not chosen.
+
+      -sh:i1,k1,i2..  Specifies which cyclic shifts of relators will be
+                      used in the Felsch enumeration.  Specifies that an
+                      i1 position shift will be used if the relator
+                      priority exceeds the selection priority by at least
+                      k1, etc.  By default, all shifts are always used.
+      -x:k            Specifies use of up to k extra cosets during enumeration
+                      (default 0).  When k > 0, a different procedure is
+                      used to check point stabilizers.
+
+      -y:m            The number of extra cosets used will be
+                      m/100 * degree (rounded up), but in no case more than
+                      k, as above  (default 10). */
+
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+#include "enum.h"
+#include "storage.h"
+
+#ifdef ALT_TIME_HEADER
+#include "cputime.h"
+#endif
+
+#ifdef TICK
+#undef CLK_TCK
+#define CLK_TCK TICK
+#endif
+
+#include "errmesg.h"
+#include "new.h"
+#include "readgrp.h"
+#include "randschr.h"
+#include "stcs.h"
+#include "util.h"
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[]);
+
+static void informGenerateTime(
+   clock_t startTime,
+   clock_t randSchrTime,
+   clock_t optGroupTime,
+   clock_t stcsTime);
+
+static void verifyOptions(void);
+
+GroupOptions options;
+STCSOptions sOptions;
+
+Unsigned relatorSelection[5] = {1000,0,800,0,0};
+Unsigned shiftSelection[11] = {UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,
+                               UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,
+                               UNKNOWN};
+Unsigned shiftPriority[11];
+
+
+int main( int argc, char *argv[])
+{
+   char groupFileName[MAX_FILE_NAME_LENGTH] = "",
+        genGroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        containingGroupFileName[MAX_FILE_NAME_LENGTH] = "";
+   char groupLibraryName[MAX_NAME_LENGTH+1] = "",
+        genGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        genGroupObjectName[MAX_NAME_LENGTH+1] = "",
+        containingGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH];
+   Unsigned i, j, optionCountPlus1, level;
+   BOOLEAN omitRandomSchreierOption, omitStcsOption, presentationOption,
+           quietOption, cycleFormatFlag, imageFormatFlag, removeRedunStrGens,
+           noBackupFlag;
+   Unsigned trimStrGenSet1, trimStrGenSet2;
+   PermGroup *G, *containingGroup;
+   char comment[60] = "";
+   UnsignedS *pointList = allocIntArrayBaseSize();
+   char tempStr[12];
+   char *strPtr, *commaPtr;
+   Unsigned *knownBase = allocIntArrayBaseSize();
+   RandomSchreierOptions rOptions = {47,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,
+                                     UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN};
+   clock_t        startTime, randSchrTime, optGroupTime, stcsTime;
+
+
+   /* Provide usage info if no arguments are specified. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  generate [options] originalPermGroup permGroupWithBaseSGS\n");
+      freeIntArrayBaseSize( pointList);
+      freeIntArrayBaseSize( knownBase);
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1 give limits and
+      return. */
+   if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
+      showLimits();
+      freeIntArrayBaseSize( pointList);
+      freeIntArrayBaseSize( knownBase);
+      return 0;
+   }
+
+   /* Check for verify option.  If present, perform verify (Note verifyOptions
+      terminates program). */
+   if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 )
+      verifyOptions();
+
+   /* Check for 1 or 2 parameters following options. */
+      for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+                 argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+         ;
+
+      if ( argc - optionCountPlus1 < 1 || argc - optionCountPlus1 > 2 ) {
+         printf( "\n\nError: 1 or 2 non-option parameters are required.\n");
+         exit(ERROR_RETURN_CODE);
+      }
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   sOptions.maxDeducQueueSize = UNKNOWN;
+   sOptions.genOrderLimit = 13;
+   sOptions.prodOrderLimit = 3;
+   sOptions.maxExtraCosets = 0;
+   sOptions.percentExtraCosets = 10;
+   omitRandomSchreierOption = FALSE;
+   omitStcsOption = TRUE;
+   presentationOption = FALSE;
+   rOptions.reduceGenOrder = TRUE;
+   rOptions.rejectNonInvols = 0;
+   removeRedunStrGens = FALSE;
+   quietOption = FALSE;
+   options.genNamePrefix[0] = '\0';
+   trimStrGenSet1 = 20;
+   trimStrGenSet2 = 20;
+   cycleFormatFlag = FALSE;
+   imageFormatFlag = FALSE;
+   noBackupFlag = FALSE;
+   strcpy( options.outputFileMode, "w");
+   strcpy( options.genNamePrefix, "");
+
+   for ( i = 1 ; i < optionCountPlus1 ; ++i )
+
+      /* General options. */
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strcmp( argv[i], "-c") == 0 )
+         cycleFormatFlag = TRUE;
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp(argv[i],"-n:",3) == 0 )
+         strcpy( genGroupObjectName, argv[i]+3);
+      else if ( strcmp( argv[i], "-nb") == 0 )
+         noBackupFlag = TRUE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strcmp( argv[i], "-q") == 0 )
+         quietOption = TRUE;
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strcmp( argv[i], "-z") == 0 ) {
+         removeRedunStrGens = TRUE;
+      }
+
+      /* Method selection options. */
+      else if ( strcmp( argv[i], "-nr") == 0 )
+         omitRandomSchreierOption = TRUE;
+      else if ( strcmp( argv[i], "-stcs") == 0 )
+         omitStcsOption = FALSE;
+
+      /* Random Schreier options. */
+      else if ( strcmp( argv[i], "-nro") == 0 )
+         rOptions.reduceGenOrder = FALSE;
+      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
+         errno = 0;
+         rOptions.initialSeed = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-ti:",4) == 0 ) {
+         errno = 0;
+         rOptions.rejectNonInvols = (unsigned long) strtol( argv[i]+4, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-tr:",4) == 0 ) {
+         errno = 0;
+         rOptions.stopAfter = (unsigned long) strtol( argv[i]+4, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp( argv[i], "-wi:", 4) == 0 ) {
+         errno = 0;
+         rOptions.minWordLengthIncrement = (unsigned long) strtol( argv[i]+4, &commaPtr, 0);
+         if ( errno || *commaPtr != ',' )
+            ERROR1s( "main (generate command)", "Invalid syntax in option ",
+                     argv[i], ".")
+         rOptions.maxWordLengthIncrement = (unsigned long) strtol( commaPtr+1, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid syntax in option ",
+                     argv[i], ".")
+      }
+
+      /* STCS options. */
+      else if ( strncmp( argv[i], "-in:", 4) == 0 ) {
+         parseLibraryName( argv[i]+4, "", "", containingGroupFileName,
+                                              containingGroupLibraryName);
+      }
+      else if ( strncmp(argv[i],"-pr:",4) == 0 ) {
+         errno = 0;
+         commaPtr = argv[i]+3;
+         for ( j = 0 ; j <= 4 ; ++j ) {
+            strPtr = commaPtr + 1;
+            relatorSelection[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0);
+            if ( errno || ( j < 4 && *commaPtr != ',') )
+               ERROR1s( "main (generate command)", "Invalid option ", argv[i],
+                        ".")
+         }
+      }
+      else if ( strncmp(argv[i],"-sh:",4) == 0 ) {
+         errno = 0;
+         commaPtr = argv[i]+3;
+         for ( j = 0 ; j < 10 && *commaPtr != '\0' ; ++j ) {
+            strPtr = commaPtr + 1;
+            shiftSelection[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0);
+            if ( errno || *commaPtr != ',' )
+               ERROR1s( "main (generate command)", "Invalid option ", argv[i],
+                        ".")
+            strPtr = commaPtr + 1;
+            shiftPriority[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0);
+            if ( errno || (*commaPtr != ',' && *commaPtr != '\0') )
+               ERROR1s( "main (generate command)", "Invalid option ", argv[i],
+                        ".")
+         }
+      }
+      else if ( strncmp(argv[i],"-th:",4) == 0 ) {
+         errno = 0;
+         rOptions.rejectHighOrder = (unsigned long) strtol( argv[i]+4, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-go:",4) == 0 ) {
+         errno = 0;
+         sOptions.genOrderLimit = (unsigned long) strtol( argv[i]+4, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-po:",4) == 0 ) {
+         errno = 0;
+         sOptions.prodOrderLimit = (unsigned long) strtol( argv[i]+4, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-x:",3) == 0 ) {
+         errno = 0;
+         sOptions.maxExtraCosets = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else if ( strncmp(argv[i],"-y:",3) == 0 ) {
+         errno = 0;
+         sOptions.percentExtraCosets = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+      }
+      else
+            ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".")
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+
+   /* Compute names for input and output groups. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix, groupFileName,
+                     groupLibraryName);
+   if ( argc - optionCountPlus1 == 2 )
+      parseLibraryName( argv[optionCountPlus1+1], "", "", genGroupFileName,
+                        genGroupLibraryName);
+   else {
+      strcpy( genGroupFileName, groupFileName);
+      strcpy( genGroupLibraryName, groupLibraryName);
+   }   
+
+   /* Set initialize option for STCS. */
+   sOptions.initialize = omitRandomSchreierOption;
+
+   /* Set default generator name prefix, if not specified. */
+   if ( options.genNamePrefix[0] == ' ' )
+      strncpy( options.genNamePrefix, genGroupLibraryName, 4);
+
+   /* Read in input group, and base for containing group, if requested. */
+   G = readPermGroup( groupFileName, groupLibraryName, 0, "");
+   if ( containingGroupFileName[0] ) {
+      containingGroup = readPermGroup( containingGroupFileName,
+                                 containingGroupLibraryName, G->degree, "");
+      for ( i = 1 ; i <= containingGroup->baseSize ; ++i )
+         knownBase[i] = containingGroup->base[i];
+      knownBase[containingGroup->baseSize+1] = 0;
+      deletePermGroup( containingGroup);
+   }
+
+   startTime = CPU_TIME();
+
+   /* Apply random Schreier algorithm. */
+   if ( !omitRandomSchreierOption ) {
+      /* SETUP OPTIONS STRING */
+      randomSchreier( G, rOptions);
+      if ( removeRedunStrGens )
+         removeRedunSGens( G, 1);
+   }
+   randSchrTime = CPU_TIME();
+
+   optGroupTime = CPU_TIME();
+
+   /* Apply Schreier-Todd-Coxeter-Sims algorithm, if appropriate. */
+   if ( !omitStcsOption /* FIX THIS */ )
+      schreierToddCoxeterSims( G, knownBase);
+   stcsTime = CPU_TIME();
+
+   if ( !quietOption ) {
+      informGroup(G);
+      printf( "\n  Base:               ");
+      for ( level = 1 ; level <= G->baseSize ; ++level )
+         printf( " %5u", G->base[level]);
+      printf(   "\n  Basic orbit lengths:");
+      for ( level = 1 ; level <= G->baseSize ; ++level )
+         printf( " %5u", G->basicOrbLen[level]);
+      printf( "\n");
+      informGenerateTime( startTime, randSchrTime, optGroupTime, stcsTime);
+   }
+
+   /* Write out the generated group. */
+   sprintf( comment, "The group %s, base and strong generating set constucted.",
+            G->name);
+   if ( cycleFormatFlag )
+      G->printFormat = cycleFormat;
+   if ( imageFormatFlag )
+      G->printFormat = imageFormat;
+   if ( genGroupObjectName[0] )
+      strcpy( G->name, genGroupObjectName);
+   if ( argc - optionCountPlus1 == 1 && !noBackupFlag ) 
+      if ( rename(groupFileName,"oldgroup") == -1 )
+         ERROR1s( "main (generate command)", "Original group ", groupFileName,
+                  " could not be renamed as oldgroup.")
+      
+   writePermGroup( genGroupFileName, genGroupLibraryName, G, comment);
+
+   /* Free pseudo-stack storage. */
+   freeIntArrayBaseSize( pointList);
+   freeIntArrayBaseSize( knownBase);
+
+   return 0;
+}
+
+
+/*-------------------------- nameGenerators ------------------------------*/
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[])
+{
+   Unsigned i;
+   Permutation *gen;
+
+   if ( genNamePrefix[0] == '\0' ) {
+      strncpy( genNamePrefix, H->name, 4);
+      genNamePrefix[4] = '\0';
+   }
+   for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) {
+      strcpy( gen->name, genNamePrefix);
+      sprintf( gen->name + strlen(gen->name), "%02d", i);
+   }
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xchbase( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xinform( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xrelato( CompileOptions *cOpts);
+   extern void xstcs  ( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xchbase( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xinform( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xrelato( &mainOpts);
+   xstcs  ( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
+
+
+/*-------------------------- informGenerateTime ----------------------------*/
+
+static void informGenerateTime(
+   clock_t startTime,
+   clock_t randSchrTime,
+   clock_t optGroupTime,
+   clock_t stcsTime)
+{
+   clock_t  totalTime;
+#ifdef NOFLOAT
+   unsigned long secs, hSecs;
+#endif
+
+   stcsTime -= optGroupTime;
+   optGroupTime -= randSchrTime;
+   randSchrTime -= startTime;
+   totalTime = randSchrTime + optGroupTime + stcsTime;
+
+#ifndef NOFLOAT
+   printf(   "\nTime:   Random Schreier:    %6.2lf sec",
+                        (double) randSchrTime / CLK_TCK);
+   printf(   "\n        Gen optimization:   %6.2lf sec",
+                        (double) optGroupTime / CLK_TCK);
+   printf(   "\n        Schr-Todd-Cox-Sims: %6.2lf sec",
+                        (double) stcsTime / CLK_TCK);
+   printf(   "\n        TOTAL:              %6.2lf sec",
+                        (double) totalTime / CLK_TCK);
+#endif
+
+#ifdef NOFLOAT
+   secs = randSchrTime / CLK_TCK;
+   hSecs = (randSchrTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\nTime:   Random Schreier:    %4lu.%02lu sec", secs, hSecs);
+   secs = optGroupTime / CLK_TCK;
+   hSecs = (optGroupTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        Gen optimization:   %4lu.%02lu sec", secs, hSecs);
+   secs = stcsTime / CLK_TCK;
+   hSecs = (stcsTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        Schr-Todd-Cox-Sims: %4lu.%02lu sec", secs, hSecs);
+   secs = totalTime / CLK_TCK;
+   hSecs = (totalTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        TOTAL:              %4lu.%02lu sec", secs, hSecs);
+#endif
+
+   printf(   "\n");
+}
diff --git a/src/leon/src/generate.h b/src/leon/src/generate.h
new file mode 100644
index 0000000..aa146b2
--- /dev/null
+++ b/src/leon/src/generate.h
@@ -0,0 +1,7 @@
+#ifndef GENERATE
+#define GENERATE
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/group.h b/src/leon/src/group.h
new file mode 100644
index 0000000..1e86e00
--- /dev/null
+++ b/src/leon/src/group.h
@@ -0,0 +1,514 @@
+#ifndef GROUP   
+#define GROUP
+
+/* File group.h.  File to be included with all permutation group theoretic
+   functions.  Defines constants and types relating to permutation groups.
+   Also defines some convenient macros.
+
+   Certain preprocessor symbols must, or may, be defined on the compilation
+   command line.  Of the symbols below, INT_SIZE is always required; the others
+   are sometime required, or desirable:
+
+      INT_SIZE  d             -- Here d is the number of bits in type int (usually
+                                 16 or 32).
+
+      EBCDIC                  -- Must be defined if the system uses EBCDIC (rather
+                                 than ASCII) to represent characters.
+
+      PERIOD_TO_BLANK         -- If defined, periods in a file name are translated
+                                 to blanks.  This option is present primarily
+                                 for use with CMS.  It allows, for example,
+                                 a file named PSP82 GROUP A1 to be entered
+                                 in the form PSP82.GROUP.A1.
+
+      LONG_EXTERNAL_NAMES     -- Should be defined if the compiler and linker
+                                 support external names (31 characters).
+
+      EXTRA_LARGE             -- If defined, the compiler represents points using
+                                 type int rather than type short or unsigned short.
+                                 This permits permutation groups of high degree but
+                                 increases memory requirements considerably.  This
+                                 option is intended for C compilers in which 
+                                 sizeof(int) = 4.
+                                   
+      SIGNED                  -- Assuming EXTRA_LARGE is not defined, defining
+                                 signed causes points to be represented using
+                                 type short rather than type unsigned short.  This
+                                 reduces the maximum degree for permutations groups
+                                 but speeds up the algorithm significantly on some
+                                 machines (e.g., IBM 3090).
+
+      NOFLOAT                 -- Causes generation of code performing no floating
+                                 point operations.  Useful primarily in cases
+                                 where the C compiler generates code requiring a
+                                 coprocessor when floating point arithmetic is
+                                 used.
+
+      TICK                    -- A value of CLK_TCK to be used in place of the
+                                 value defined in the header file time.h.  This
+                                 is needed in the NOFLOAT option is chosen and if
+                                 CLK_TCK is given as a floating point quantity
+                                 (e.g., 18.2 in Turbo C for the IBM PC).  It is
+                                 also needed if an alternate CPU time function
+                                 is specified.
+
+      CPU_TIME  timeFunc      -- If defined, timeFunc must be the name of a user-
+                                 supplied function for measuring CPU time.  If
+                                 not defined, the C function clock() is used.
+                                 (This function is required on the SUN/3 since
+                                 the clock function wraps around after less than
+                                 an hour.)
+
+      DEFAULT_MAX_BASE_SIZE b -- Here b is a default bound on the size of the base for
+                                 permutation groups.  It is 62 by default. Larger 
+                                 values of b increase memory requirements slightly
+                                 and may increase execution time very slightly.
+                                 This default value may be overridden by
+                                 means of the -mb option.
+
+      MAX_NAME_LENGTH  n      -- Here n is the number of characters allowed in
+                                 the name of a group, permutation, set, or
+                                 partition.  Default is 16.  Large values may
+                                 cause problems with output.
+
+      MAX_FILE_ NAME_LENGTH m -- Here m is the number of characters allowed in
+                                 any file name (including path information.
+                                 The default is 60.
+
+
+For some compilers, it may be necessary to insert code unique to that compiler.
+In this case, a special symbol identifying the machine and compiler
+(e.g., IBM_CMS_WATERLOOC for Waterloo C on the IBM 370) should be defined,
+and the special code should be in the body of an #if directive specifying
+that special symbol. */
+
+#include <limits.h>
+
+#include "leon_config.h"
+#define INT_SIZE SIZEOF_INT<<3
+
+#ifdef CPU_TIME
+#define ALT_TIME_HEADER
+#else
+#define CPU_TIME clock
+#endif
+
+#ifndef LONG_EXTERNAL_NAMES
+#include "extname.h"
+#endif
+
+#define Unsigned  unsigned
+#define UnsignedS unsigned
+#define MAX_INT   UINT_MAX
+#define SCANF_Int_FORMAT  "%u"
+
+#ifndef MAX_NAME_LENGTH
+#define MAX_NAME_LENGTH      64
+#endif
+
+#ifndef MAX_FILE_NAME_LENGTH
+#define MAX_FILE_NAME_LENGTH 60
+#endif
+
+#ifndef DEFAULT_MAX_BASE_SIZE
+#define DEFAULT_MAX_BASE_SIZE  62
+#endif
+
+
+#ifndef MAX_CODE_LENGTH
+#define MAX_CODE_LENGTH      128
+#endif
+
+#define MAX_REFINEMENT_PARMS 3
+#define MAX_FAMILY_PARMS     6
+#define MAX_PRIME_FACTORS    30
+#define MAX_EXTRA            10
+
+#define SYMMETRIC_GROUP_CHAR '#'
+#define IS_SYMMETRIC(g) ((g)->name[0] == SYMMETRIC_GROUP_CHAR)
+#define ERROR_RETURN_CODE  15
+#define MAX_COSET_REP_PRINT 300
+
+
+#define TRUE             1
+#define FALSE            0
+#define BOOLEAN          Unsigned
+
+#define IRREDUCIBLE      MAX_INT
+#define UNKNOWN          MAX_INT
+
+#define MIN(x,y)         ( ((x) < (y)) ? (x) : (y) )
+#define MAX(x,y)         ( ((x) > (y)) ? (x) : (y) )
+#define ABS(x)           ( ((x) < 0) ? (-(x)) : (x) )
+
+#define FIRST_IN_ORBIT  ((Permutation *) 1)
+
+#define EXCHANGE(x,y,temp)   {temp = x;  x = y;  y = temp;}
+
+#define ERROR(function,message)  \
+    errorMessage( __FILE__, __LINE__, function, message);
+
+#define ERROR1i(function,message1,intParm,message2)  \
+    errorMessage1i( __FILE__, __LINE__, function, message1, intParm, message2);
+
+#define ERROR1s(function,message1,strParm,message2)  \
+    errorMessage1s( __FILE__, __LINE__, function, message1, strParm, message2);
+
+
+#define ESSENTIAL_AT_LEVEL(perm,level)  essentialAtLevel( perm, level)
+#define ESSENTIAL_BELOW_LEVEL(perm,level)  essentialBelowLevel( perm, level)
+#define ESSENTIAL_ABOVE_LEVEL(perm,level)  essentialAboveLevel( perm, level)
+#define MAKE_ESSENTIAL_AT_LEVEL(perm,level)  makeEssentialAtLevel( perm, level)
+#define MAKE_NOT_ESSENTIAL_AT_LEVEL(perm,level)  \
+                            makeNotEssentialAtLevel( perm, level)
+#define MAKE_NOT_ESSENTIAL_ATABOV_LEVEL(perm,level)  \
+                            makeNotEssentialAtAboveLevel( perm, level)
+#define MAKE_NOT_ESSENTIAL_ALL(perm)  makeNotEssentialAll( perm)
+#define MAKE_UNKNOWN_ESSENTIAL(perm)  makeUnknownEssential( perm)
+#define COPY_ESSENTIAL(newPerm,oldPerm)  copyEssential( newPerm, oldPerm)
+
+#define RPQ_SIZE( rpq)   rpq->size
+#define RPQ_CLEAR( rpq)  rpq->size = 0;
+
+
+#ifdef EXTRA_LARGE
+#define XLARGE TRUE
+#endif
+#ifndef EXTRA_LARGE
+#define XLARGE FALSE
+#endif
+
+#ifdef  SIGNED
+#define SGND TRUE
+#endif
+#ifndef SIGNED
+#define SGND FALSE
+#endif
+
+#ifdef NOFLOAT
+#define NFLT TRUE
+#endif
+#ifndef NOFLOAT
+#define NFLT FALSE
+#endif
+
+#ifndef CLK_TCK
+#define CLK_TCK CLOCKS_PER_SEC
+#endif
+
+typedef struct {
+   int mbs, mnl, mpf, mrp, mfp, me, xl, sg, nf;
+} CompileOptions;
+
+#ifndef MAIN
+void checkCompileOptions(
+   char *localFileName,
+   CompileOptions *mainOpts,
+   CompileOptions *localOpts);
+#endif
+
+#define CHECK(fileName)  \
+      void x##fileName( CompileOptions *mainOptsPtr)  \
+      {  CompileOptions localOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,  \
+                                      MAX_PRIME_FACTORS,  \
+                                      MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,  \
+                                      MAX_EXTRA,  XLARGE, SGND, NFLT};  \
+         checkCompileOptions( __FILE__, mainOptsPtr, &localOpts);  \
+      }
+
+
+extern unsigned long bitSetAt[32];
+extern unsigned long bitSetBelow[33];
+
+
+typedef
+   enum {
+      PERM_GROUP, PERMUTATION, POINT_SET, PARTITION, DESIGN, MATRIX_01,
+      BINARY_CODE, INVALID_OBJECT
+   } ObjectType;
+
+typedef struct {
+   Unsigned noOfFactors;
+   UnsignedS prime[MAX_PRIME_FACTORS+1];
+   UnsignedS exponent[MAX_PRIME_FACTORS+1];
+} FactoredInt;
+
+struct Word;
+struct OccurenceOfGen;
+
+typedef
+   struct Permutation {
+      char name[MAX_NAME_LENGTH+1];
+      UnsignedS  degree;
+      UnsignedS  *image;               /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS  *invImage;            /* Alloc (degree+2)*sizeof(UnsignedS). */
+      Unsigned  level;
+      unsigned long *essential;
+      struct Permutation *invPermutation;
+      struct Permutation *next,
+                         *last;
+      struct Permutation *xNext,
+                         *xLast;
+      struct Word *word;             /* Alloc (MWLENGTH+2)*sizeof(Word *). */
+      struct OccurenceOfGen *occurHeader;
+   } Permutation;
+
+typedef
+   struct Word {
+      Unsigned length;
+      Permutation **position;
+   } Word;
+
+typedef
+   struct Relator {
+      Unsigned length;
+      Unsigned level;
+      Permutation **rel;
+      Unsigned **fRel;
+      Unsigned **bRel;
+      struct Relator *next;
+      struct Relator *last;
+   } Relator;
+
+typedef
+   struct OccurenceOfGen {
+      Relator *r;
+      Unsigned relLength;
+      Unsigned level;
+      Unsigned **fRelStart;
+      Unsigned **bRelFinish;
+      struct OccurenceOfGen *next;
+   } OccurenceOfGen;
+
+typedef
+   struct SplitSize {
+      Unsigned oldCellSize;
+      Unsigned newCellSize;
+   } SplitSize;
+
+typedef
+   enum {
+      cycleFormat,
+      imageFormat,
+      binaryFormat,
+      cayleyLibraryFormat,
+      cayleyReadFormat
+   } PermFormat;
+
+typedef                                        /* Note below MBS denotes */
+   struct PermGroup {                          /*  MAX_BASE_SIZE.        */
+      char name[MAX_NAME_LENGTH+1];
+      Unsigned degree;
+      Unsigned baseSize;
+      FactoredInt *order;           /* Alloc sizeof(FactoredInt). */
+      UnsignedS *base;              /* Alloc (MBS+2)*sizeof(UnsignedS). */
+      UnsignedS *basicOrbLen;       /* Alloc (MBS+2)*sizeof(UnsignedS). */
+      UnsignedS **basicOrbit;       /* Alloc (MBS+2)*sizeof(UnsignedS **). */
+      Permutation ***schreierVec;   /* Alloc (MBS+2)*sizeof(Permutation***).*/
+      UnsignedS **completeOrbit;    /* Alloc (MBS+2)*sizeof(UnsignedS **). */
+      UnsignedS **orbNumberOfPt;    /* Alloc (MBS+2)*sizeof(UnsignedS **). */
+      UnsignedS **startOfOrbitNo;   /* Alloc (MBS+2)*sizeof(UnsignedS **). */
+      Permutation *generator;
+      UnsignedS *omega;             /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *invOmega;          /* Alloc (degree+2)*sizeof(UnsignedS). */
+      PermFormat printFormat;
+      Relator *relator;
+   } PermGroup;
+
+typedef
+   struct Partition {
+      char name[MAX_NAME_LENGTH+1];
+      Unsigned degree;
+      UnsignedS *pointList;         /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *invPointList;      /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *cellNumber;        /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *startCell;         /* Alloc (degree+2)*sizeof(UnsignedS). */
+   } Partition;
+
+typedef
+   struct PartitionStack {
+      Unsigned height;
+      Unsigned degree;
+      UnsignedS *pointList;         /* Allocate (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *invPointList;      /* Allocate (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *cellNumber;        /* Allocate (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *parent;            /* Allocate (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *startCell;         /* Allocate (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *cellSize;          /* Allocate (degree+2)*sizeof(UnsignedS). */
+   } PartitionStack;
+
+typedef
+   struct CellPartitionStack {
+      Partition *basePartn;
+      Unsigned height;
+      Unsigned cellCount;
+      UnsignedS *cellList;          /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *invCellList;       /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *cellGroupNumber;   /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *parentGroup;       /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *startCellGroup;    /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *cellGroupSize;     /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+      UnsignedS *totalGroupSize;    /* Alloc (cellCount+2)*sizeof(UnsignedS). */
+   } CellPartitionStack;
+
+typedef
+   union {
+      Unsigned intParm;
+      void *ptrParm;
+   } RefinementParm;
+
+typedef SplitSize RefinementMapping(
+   const RefinementParm familyParm[],
+   const RefinementParm refnParm[],
+   PartitionStack *const UpsilonStack);
+
+typedef struct {
+   RefinementMapping *refine;
+   RefinementParm familyParm_L[MAX_FAMILY_PARMS];
+   RefinementParm familyParm_R[MAX_FAMILY_PARMS];
+} RefinementFamily;
+
+typedef struct {
+   RefinementFamily *family;
+   RefinementParm refnParm[MAX_REFINEMENT_PARMS];
+} Refinement;
+
+typedef struct {
+   Refinement refn;
+   long priority;
+} RefinementPriorityPair;
+
+typedef RefinementPriorityPair ReducChkFn(
+   const RefinementFamily *family,
+   const PartitionStack *const UpsilonStack);
+
+/* R-base notation is as in "Perm Grp Algs...".  Note fields omega, invOmega,
+   alpha are not included here, but are set in the structure for the
+   containing group. */
+typedef                                        /* Note below MBS denotes */
+   struct {                                    /*  MAX_BASE_SIZE.        */
+      Unsigned ell;
+      Unsigned k;
+      Unsigned degree;
+      Refinement *aAA;               /* Alloc (degree+2) * sizeof(Refinement).*/
+      PartitionStack *PsiStack;      /* Alloc sizeof(PartitionStack). */
+      UnsignedS *n_;                 /* Alloc (MBS+2)*sizeof(UnsignedS). */
+      UnsignedS *p_;                 /* Alloc (MBS+2)*sizeof(UnsignedS). */
+      UnsignedS *alphaHat;           /* Alloc (MBS+2)*sizeof(UnsignedS). */
+      UnsignedS *a_;                 /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *b_;                 /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *omega;              /* Alloc (degree+2)*sizeof(UnsignedS). */
+      UnsignedS *invOmega;           /* Alloc (degree+2)*sizeof(UnsignedS). */
+   } RBase;
+
+typedef
+   struct PointSet {
+      char name[MAX_NAME_LENGTH+1];
+      Unsigned size;
+      Unsigned degree;
+      UnsignedS *pointList;          /* Alloc (degree+2)*sizeof(UnsignedS). */
+      char *inSet;                   /* Alloc (degree+2)*sizeof(char) */
+   } PointSet;
+
+typedef
+   struct {
+      Unsigned size;
+      Unsigned degree;
+      Unsigned maxSize;
+      UnsignedS *pointList;         /* Alloc (maxSize+2)*sizeof(UnsignedS). */
+   } RPriorityQueue;
+
+typedef BOOLEAN Property( const Permutation *const);
+
+typedef struct {
+   Unsigned maxBaseSize;
+   Unsigned maxDegree;
+   Unsigned maxWordLength;
+   BOOLEAN  statistics;
+   BOOLEAN inform;
+   BOOLEAN strongMinDCosetCheck;
+   BOOLEAN compress;
+   Unsigned maxStrongGens;
+   Unsigned maxBaseChangeLevel;
+   Unsigned idealBasicCellSize;
+   Unsigned trimSGenSetToSize;
+   Unsigned writeConjPerm;
+   Unsigned restrictedDegree;                   /* For informCosetRep only. */
+   void (*altInformCosetRep)( Permutation *y);
+   Unsigned alphaHat1;
+   char genNamePrefix[8];
+   char outputFileMode[3];
+   char *groupOrderMessage;
+   char *cosetRepMessage;
+   char *noCosetRepMessage;
+} GroupOptions;
+
+typedef struct {
+   unsigned long initialSeed;
+   Unsigned minWordLengthIncrement;
+   Unsigned maxWordLengthIncrement;
+   Unsigned stopAfter;
+   BOOLEAN  reduceGenOrder;
+   Unsigned rejectNonInvols;
+   Unsigned rejectHighOrder;
+   BOOLEAN  onlyEssentialInitGens;
+   BOOLEAN  onlyEssentialAddedGens;
+} RandomSchreierOptions;
+
+typedef struct {
+   char refnType;
+   PermGroup *leftGroup;
+   PermGroup *rightGroup;
+} SpecialRefinementDescriptor;
+
+typedef struct {
+   UnsignedS **revWord;
+   UnsignedS **invWord;
+   UnsignedS *lengthAtLevel;    /* alloc (MAX_BASE_SIZE+2) * sizeof(UnsignedS) */
+} THatWordType;
+
+typedef char FieldElement;
+
+typedef struct {
+   char name[MAX_NAME_LENGTH+1];
+   Unsigned size;
+   Unsigned characteristic;
+   Unsigned exponent;
+   char **sum;
+   char **dif;
+   char **prod;
+   char *inv;
+} Field;
+
+typedef struct {
+   char name[MAX_NAME_LENGTH+1];
+   Unsigned setSize;
+   Field *field;
+   Unsigned numberOfRows;
+   Unsigned numberOfCols;
+   char **entry;
+   Unsigned *unused;
+} Matrix_01;
+
+typedef struct {
+   char name[MAX_NAME_LENGTH+1];
+   Unsigned fieldSize;
+   Field *field;
+   Unsigned dimension;
+   Unsigned length;
+   char **basis;
+   Unsigned *infoSet;
+} Code;
+
+typedef struct {
+   Unsigned cellCount;
+   CellPartitionStack *xPsiStack;
+   CellPartitionStack *xUpsilonStack;
+   Refinement *xRRR;
+   void (*cstExtraRBase)(Unsigned level);
+   UnsignedS *applyAfter;
+   UnsignedS *xA_;
+   UnsignedS *xB_;
+} ExtraDomain;
+
+#endif
diff --git a/src/leon/src/groupio.h b/src/leon/src/groupio.h
new file mode 100644
index 0000000..eaf3a9e
--- /dev/null
+++ b/src/leon/src/groupio.h
@@ -0,0 +1,22 @@
+#ifndef GROUPIO
+#define GROUPIO
+
+#define MAX_TOKEN_LENGTH 32
+
+typedef enum {
+   keyword, identifier, integer, floatingPt, leftParen, rightParen, leftBracket,
+   rightBracket, leftAngle, rightAngle, semicolon, equal, asterisk, caret,
+   comma, slash, period, colon, other, eof
+} TokenType;
+
+typedef struct {
+   TokenType type;
+   union {
+      char keyValue[MAX_TOKEN_LENGTH+1];
+      char identValue[MAX_TOKEN_LENGTH+1];
+      Unsigned  intValue;
+      char charValue;
+   } value;
+} Token;
+
+#endif
diff --git a/src/leon/src/inform.c b/src/leon/src/inform.c
new file mode 100644
index 0000000..41c389a
--- /dev/null
+++ b/src/leon/src/inform.c
@@ -0,0 +1,291 @@
+/* File inform.c. */
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#ifdef ALT_TIME_HEADER
+#include "cputime.h"
+#endif
+
+#ifdef TICK
+#undef CLK_TCK
+#define CLK_TCK TICK
+#endif
+
+#include "readgrp.h"
+
+CHECK( inform)
+
+extern GroupOptions options;
+
+void informStatistics(
+   Unsigned ell,
+   unsigned long nodesVisited[],
+   unsigned long nodesPruned[],
+   unsigned long nodesEssential[])
+{
+   Unsigned level;
+   unsigned long totalVisited = 0, totalPruned = 0, totalEssential = 0;
+
+   printf( "\n\nSummary of backtrack tree nodes traversed and pruned.");
+
+   printf( "\n\n   Level       Nodes        Nodes     Nodes non-    Pruning");
+   printf(   "\n              visited       pruned     essential   percentage\n");
+   for ( level = 0 ; level <= ell ; ++level ) {
+      if ( nodesEssential[level] < nodesVisited[level] )
+#ifndef NOFLOAT
+         printf( "\n    %3u   %10lu   %10lu   %10lu       %6.4f", level,
+                 nodesVisited[level], nodesPruned[level],
+                 nodesVisited[level] - nodesEssential[level],
+                 (float) nodesPruned[level] /
+                 (nodesVisited[level] - nodesEssential[level]) );
+#endif
+#ifdef NOFLOAT
+         printf( "\n    %3u   %10lu   %10lu   %10lu", level,
+                 nodesVisited[level], nodesPruned[level],
+                 nodesVisited[level] - nodesEssential[level]);
+#endif
+      else
+         printf( "\n    %3u   %10lu   %10lu   %10lu       ------", level,
+                nodesVisited[level], nodesPruned[level],
+                nodesVisited[level] - nodesEssential[level]);
+      totalVisited += nodesVisited[level];
+      totalPruned += nodesPruned[level];
+      totalEssential += nodesEssential[level];
+   }
+   if ( totalEssential < totalVisited )
+#ifndef NOFLOAT
+      printf( "\n   total  %10lu   %10lu   %10lu       %6.4f\n", totalVisited,
+              totalPruned, totalVisited - totalEssential, (float) totalPruned /
+              (totalVisited - totalEssential) );
+#endif
+#ifdef NOFLOAT
+      printf( "\n   total  %10lu   %10lu   %10lu\n", totalVisited, totalPruned);
+#endif
+   else
+      printf( "\n   total  %10lu   %10lu   %10lu       ------\n", totalVisited,
+              totalPruned, totalVisited - totalEssential);
+}
+
+
+/*-------------------------- informOptions ---------------------------------*/
+
+void informOptions(void)
+{
+   printf("\nOptions:  -b:%u  -g:%u  -r:%u  -mb:%u  -mw:%u\n",
+          (unsigned) options.maxBaseChangeLevel,
+          (unsigned) options.maxStrongGens,
+          (unsigned) options.trimSGenSetToSize,
+          (unsigned) options.maxBaseSize,
+          (unsigned) options.maxWordLength);
+}
+
+
+/*-------------------------- informGroup -----------------------------------*/
+
+void informGroup(
+   const PermGroup *const G)
+{
+   Unsigned i;
+
+   if ( IS_SYMMETRIC(G) ) {
+      printf( "\nGroup %s is symmetric of degree %d.\n ", G->name, G->degree);
+      return;
+   }
+
+   printf( "\nGroup %s has order ", G->name);
+
+   if ( G->order->noOfFactors == 0 )
+      printf( "%d", 1);
+   else
+      for ( i = 0 ; i < G->order->noOfFactors ; ++i ) {
+         if ( i > 0 )
+            printf( " * ");
+         printf( "%u", G->order->prime[i]);
+         if ( G->order->exponent[i] > 1 )
+            printf( "^%u", G->order->exponent[i]);
+      }
+   printf( "\n");
+}
+
+
+/*-------------------------- informRBase -----------------------------------*/
+
+void informRBase(
+   const PermGroup *const G,
+   const RBase *const AAA,
+   const UnsignedS basicCellSize[])
+{
+   Unsigned i, level;
+
+   printf( "\nR-base construction complete.");
+
+   printf( "\n\n  New base for group %s:", G->name);
+   for ( level = 1 ; level <= G->baseSize ; ++level )
+      printf( " %5u", G->base[level]);
+   printf(   "\n  Basic orbit lengths:");
+   for ( i = 1 ; i <= strlen(G->name) ; ++i )
+      printf( " ");
+   for ( level = 1 ; level <= G->baseSize ; ++level )
+      printf( " %5u", G->basicOrbLen[level]);
+
+   printf( "\n\n  Base for subgroup:  ");
+   for ( level = 1 ; level <= AAA->ell ; ++level )
+      printf( " %5u", AAA->alphaHat[level]);
+   printf(   "\n  Basic cell sizes:   ");
+   for ( level = 1 ; level <= AAA->ell ; ++level )
+      printf( " %5u", basicCellSize[level]);
+   printf( "\n\n");
+}
+
+
+/*-------------------------- informSubgroup --------------------------------*/
+
+void informSubgroup(
+   const PermGroup *const G_pP)
+{
+   Unsigned i, level;
+
+   if ( !options.groupOrderMessage )
+      options.groupOrderMessage = "Subgroup";
+   printf( "\n%s computation complete.", options.groupOrderMessage);
+
+   printf( "\n\n  %s has order ", options.groupOrderMessage);
+   if ( G_pP->order->noOfFactors > 0 )
+      for ( i = 0 ; i < G_pP->order->noOfFactors ; ++i ) {
+         if ( i > 0 )
+            printf( " * ");
+         printf( "%u", G_pP->order->prime[i]);
+         if ( G_pP->order->exponent[i] > 1 )
+            printf( "^%u", G_pP->order->exponent[i]);
+      }
+   else
+      printf( "1");
+   printf( ".");
+
+
+   printf( "\n\n  Base:               ");
+   for ( level = 1 ; level <= G_pP->baseSize ; ++level )
+      printf( " %5u", G_pP->base[level]);
+   printf(   "\n  Basic orbit lengths:");
+   for ( level = 1 ; level <= G_pP->baseSize ; ++level )
+      printf( " %5u", G_pP->basicOrbLen[level]);
+   printf( "\n");
+}
+
+
+/*-------------------------- informCosetRep --------------------------------*/
+
+void informCosetRep(
+   Permutation *y)
+{
+   Unsigned trueDegree;
+
+   if ( y ) {
+      trueDegree = y->degree;
+      if ( !options.cosetRepMessage )
+         options.cosetRepMessage = "Coset representative found:";
+      printf( "\n%s\n\n", options.cosetRepMessage);
+      if ( options.altInformCosetRep ) {
+         setOutputFile( stdout);
+         (*options.altInformCosetRep)( y);
+      }
+      else if ( (options.restrictedDegree ? options.restrictedDegree 
+                                    : y->degree) <= options.writeConjPerm ) {
+         setOutputFile( stdout);
+         if ( options.restrictedDegree != 0 ) {
+            printf("  ");
+            y->degree = options.restrictedDegree;
+            writeCyclePerm( y, 3, 5, 72);
+            y->degree = trueDegree;
+         }
+         else {
+            printf("  ");
+            writeCyclePerm( y, 3, 5, 72);
+         }
+      }
+      else
+         printf( "     <permutation written to library file>");
+   }
+   else {
+      if ( !options.noCosetRepMessage )
+         options.noCosetRepMessage = "Coset representative does not exist.";
+      printf( "\n%s\n", options.noCosetRepMessage);
+   }
+}
+
+
+/*-------------------------- informNewGenerator ----------------------------*/
+
+void informNewGenerator(
+   const PermGroup *const G_pP,
+   const Unsigned newLevel)
+{
+   Unsigned level;
+   static BOOLEAN firstCall = TRUE;
+
+   if ( firstCall ) {
+      printf("\n");
+      firstCall = FALSE;
+   }
+   printf( "New generator (level %u):  basic orbit lengths ", newLevel);
+   for ( level = 1 ; level <= G_pP->baseSize ; ++level )
+      printf( " %u ", G_pP->basicOrbLen[level]);
+   printf( "\n");
+}
+
+
+/*-------------------------- informTime ------------------------------------*/
+
+void informTime(
+   clock_t startTime,
+   clock_t RBaseTime,
+   clock_t optGroupTime,
+   clock_t backtrackTime)
+{
+   clock_t  totalTime;
+#ifdef NOFLOAT
+   unsigned long secs, hSecs;
+#endif
+
+   backtrackTime -= optGroupTime;
+   optGroupTime -= RBaseTime;
+   RBaseTime -= startTime;
+   totalTime = RBaseTime + optGroupTime + backtrackTime;
+
+#ifndef NOFLOAT
+   printf( "\n\nTime:   RBase construction: %6.2lf sec",
+                        (double) RBaseTime / CLK_TCK);
+   printf(   "\n        Group optimization: %6.2lf sec",
+                        (double) optGroupTime / CLK_TCK);
+   printf(   "\n        Backtrack search:   %6.2lf sec",
+                        (double) backtrackTime / CLK_TCK);
+   printf(   "\n        TOTAL:              %6.2lf sec",
+                        (double) totalTime / CLK_TCK);
+#endif
+
+#ifdef NOFLOAT
+   secs = RBaseTime / CLK_TCK;
+   hSecs = (RBaseTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf( "\n\nTime:   RBase construction: %4lu.%02lu sec", secs, hSecs);
+   secs = optGroupTime / CLK_TCK;
+   hSecs = (optGroupTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        Group optimization: %4lu.%02lu sec", secs, hSecs);
+   secs = backtrackTime / CLK_TCK;
+   hSecs = (backtrackTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        Backtrack search:   %4lu.%02lu sec", secs, hSecs);
+   secs = totalTime / CLK_TCK;
+   hSecs = (totalTime - secs * CLK_TCK) * 100;
+   hSecs /= CLK_TCK;
+   printf(   "\n        TOTAL:              %4lu.%02lu sec", secs, hSecs);
+#endif
+
+   printf(   "\n");
+}
diff --git a/src/leon/src/inform.h b/src/leon/src/inform.h
new file mode 100644
index 0000000..89f6b9f
--- /dev/null
+++ b/src/leon/src/inform.h
@@ -0,0 +1,44 @@
+#ifndef INFORM
+#define INFORM
+
+extern void informStatistics(
+   Unsigned ell,
+   unsigned long nodesVisited[],
+   unsigned long nodesPruned[],
+   unsigned long nodesEssential[])
+;
+
+extern void informOptions(void)
+;
+
+extern void informGroup(
+   const PermGroup *const G)
+;
+
+extern void informRBase(
+   const PermGroup *const G,
+   const RBase *const AAA,
+   const UnsignedS basicCellSize[])
+;
+
+extern void informSubgroup(
+   const PermGroup *const G_pP)
+;
+
+extern void informCosetRep(
+   Permutation *y)
+;
+
+extern void informNewGenerator(
+   const PermGroup *const G_pP,
+   const Unsigned newLevel)
+;
+
+extern void informTime(
+   clock_t startTime,
+   clock_t RBaseTime,
+   clock_t optGroupTime,
+   clock_t backtrackTime)
+;
+
+#endif
diff --git a/src/leon/src/install b/src/leon/src/install
new file mode 100644
index 0000000..bc6e024
--- /dev/null
+++ b/src/leon/src/install
@@ -0,0 +1,12 @@
+for file in setstab cent inter desauto cjrndper commut compgrp fndelt generate orbdes orblist randobj wtdist; do
+   if [ -f $file ]
+      then mv $file $1/$file
+   fi
+done
+
+for file in setimage parstab parimage conj gcent desiso matauto matiso codeauto codeiso cjper compper compset ncl chbase ptstab; do
+   if [ ! -f $1/$file ]
+      then cp $file.sh $1/$file
+   fi
+done
+   
diff --git a/src/leon/src/inter.c b/src/leon/src/inter.c
new file mode 100644
index 0000000..a7a3c19
--- /dev/null
+++ b/src/leon/src/inter.c
@@ -0,0 +1,428 @@
+/* File inter.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/*  Main program for group intersection command, which may be used
+   compute the intersection of two permutation groups G and E.  The format of
+   the command is:
+
+      inter <options> <permGroup1> <permGroup2> <intersection>
+
+   where the meaning of the parameters is as follows:
+
+      <permGroup>: The name of the file containing the permutation group G,
+                   or the Cayley library name in which the permutation group
+                   G is defined.  Except in the case of a Cayley library,
+                   a file type of GRP is appended.
+      <pointSet>:  The name of the file containing the point set Lambda, or the
+                   Cayley library name in which the point set Lambda is defined.
+                   Except in the case of a Cayley library, a file type of PTS
+                   is appended.
+      <stabGroup>: The name of the file in which the set stabilizer G_Lambda
+                   is written, or the Cayley library name to which the
+                   definition of G_Lambda is written.  Except in the case of
+                   a Cayley library, a file type of PTS is appended.
+
+   The options are as follows:
+
+      -a          If the output file exists, it will be appended to rather than
+                  overwritten.  (A Cayley library is always appended to rather
+                  than overwritten.)
+
+      -b:<int>    Base change in the subgroup being computed will be performed
+                  at levels fm, fm+1,...,fm+<int>-1 only, where fm is the level
+                  of the first base point (of the subgroup) moved by the current
+                  permutation.  Values below 1 will be raised to 1; those above
+                  the base size will be reduced to the base size.
+
+      -c          Compress the group G after an R-base has been constructed.
+                  This saves a moderate amount of memory at the cost of
+                  relatively little CPU time, but the group (in memory) is
+                  effectively destroyed.
+
+      -crl:<name> The definition of the group G and point set Lambda should be
+                  read from Cayley library <permGroup> in library file <name>.
+
+      -cwl:<name> The definition for the group G_Lambda should be written to
+                  Cayley library <stabGroup> library file <name>.
+
+      -g:<int>    The maximum number of strong generators for the containing
+                  group G.  If, after construction of a base and strong
+                  generating set for G, the number of strong generators is
+                  less than this number, additional strong generators will be
+                  added, chosen to reduce the length of the coset
+                  representatives (as words).   A larger value may increase
+                  speed of computation slightly at the cost of extra space.
+                  If, after construction of the base and strong generating set,
+                  the number of strong generators exceeds this number, at
+                  present strong generators are not removed.
+
+      -gn:<str>   (Set stabilizer only).  The generators for the newly-created
+                  group created are given names <str>01, <str>02, ...  .  If
+                  omitted, the new generators are unnamed.
+
+      -i          The generators of <stabGroup> are to be written in image format.
+
+      -n:<name>   The name for the set stabilizer or coset rep being computed.
+                  (Default: the file name <stabGroup> -- file type omitted)
+
+      -q          As the computation proceeds, writing of information about
+                  the current state to standard output is suppressed.
+
+      -s:<name>   A known subgroup of the set stabilizer being computed.
+                  (Default: no subgroup known)
+
+       -r:<int>   During base change, if insertion of a new base point
+                  expands the size of the strong generating set above
+                  <int> gens (not counting inverses), redundant strong
+                  generators are trimmed from the strong generating set.
+                  (Default 25).
+
+      -t          Upon conclusion, statistics regarding the number of nodes
+                  of the backtrack search tree traversed is written to the
+                  standard output.
+
+      -v          Verify that all files were compiled with the same compile-
+                  time parameters and stop.
+
+      -w:<int>    For set or partition image computations in which the sets
+                  or partitions turn out to be equivalent, a permutation
+                  mapping one to the other is written to the standard output,
+                  as well as a disk file, provided the degree is at most <int>.
+                  (The option is ignored if -q is in effect.)  Default: 100
+
+      -x:<int>    The ideal size for basic cells is set to <int>.
+
+      -z          Subject to the restrictions imposed by the -b option above,
+                  check Prop. 8.3 in "Permutation group algorithms based on
+                  partitions".
+
+   If a base for <permGroup> is not available, one will be computed.  In any
+   the base and strong generating set for <permGroup> will be changed during
+   the computation.
+
+   The return code for set or partition stabilizer computations is as follows:
+      0: computation successful,
+      15: computation terminated due to error.
+   The return code for set or partition image computations is as follows:
+      0: computation successful; sets or partitions are not equivalent,
+      1: computation successful; sets or partitions are equivalent,
+      15: computation terminated due to error.
+*/
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "cinter.h"
+#include "errmesg.h"
+#include "permgrp.h"
+#include "readgrp.h"
+#include "readper.h"
+#include "token.h"
+#include "util.h"
+
+
+GroupOptions options;
+
+UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack) = NULL;
+
+static void verifyOptions(void);
+
+int main( int argc, char *argv[])
+{
+   char permGroup1FileName[MAX_FILE_NAME_LENGTH] = "",
+        permGroup2FileName[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        outputFileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1;
+   char outputObjectName[MAX_NAME_LENGTH+1] = "",
+        outputLibraryName[MAX_NAME_LENGTH+1] = "",
+        permGroup1LibraryName[MAX_NAME_LENGTH+1] = "",
+        permGroup2LibraryName[MAX_NAME_LENGTH+1] = "",
+        knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH];
+   PermGroup *G, *E, *G_pP, *L = NULL;
+   BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE;
+   char comment[100];
+
+   /* Provide usage information if no options are specified. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  inter [options] permGroup1 permGroup2 intersection\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position i (i as above) give
+      limits and return. */
+   if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-L") == 0 )
+      verifyOptions();
+
+   if ( argc < 4 )
+      ERROR( "main (inter)", "Too few parameters.")
+
+   /* Check for exactly 3 parameters following options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 != 3 ) {
+      ERROR( "main (inter)", "Exactly 3 non-option parameters are required.")
+      exit(ERROR_RETURN_CODE);
+   }
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.statistics = FALSE;
+   options.inform = TRUE;
+   options.compress = TRUE;
+   options.maxBaseChangeLevel = UNKNOWN;
+   options.maxStrongGens = 70;
+   options.idealBasicCellSize = 4;
+   options.trimSGenSetToSize = 35;
+   options.strongMinDCosetCheck = FALSE;
+   options.writeConjPerm = MAX_COSET_REP_PRINT;
+   options.restrictedDegree = 0;
+   options.alphaHat1 = 0;
+   parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName,
+                     outputLibraryName);
+   strncpy( options.genNamePrefix, outputLibraryName, 4);
+   options.genNamePrefix[4] = '\0';
+   strcpy( options.outputFileMode, "w");
+
+   /* Note i must still be as above. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp( argv[i], "-a1:", 4) == 0 &&
+                (options.alphaHat1 = strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-b:", 3) == 0 &&
+                (options.maxBaseChangeLevel = strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-g:", 3) == 0 &&
+                (options.maxStrongGens = strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (inter)", "Invalid value for -gn option")
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (inter)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (inter)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( outputObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (inter)", "Invalid name ", outputObjectName,
+                     " for stabilizer group or coset rep.")
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strncmp( argv[i], "-r:", 3) == 0 &&
+                (options.trimSGenSetToSize = strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 )
+         strcpy( knownSubgroupFileName, argv[i]+3);
+      else if ( strcmp( argv[i], "-s") == 0 )
+         options.statistics = TRUE;
+      else if ( strncmp( argv[i], "-w:", 3) == 0 &&
+                (options.writeConjPerm = strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-x:", 3) == 0 &&
+                (options.idealBasicCellSize = strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-z") == 0 )
+         options.strongMinDCosetCheck = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute names for files and name for intersection. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                     permGroup1FileName, permGroup1LibraryName);
+   parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                     permGroup2FileName, permGroup2LibraryName);
+   parseLibraryName( argv[optionCountPlus1+2], "", "",
+                     outputFileName, outputLibraryName);
+   if ( outputObjectName[0] == '\0' )
+      strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+   if ( knownSubgroupSpecifier[0] != '\0' )
+      parseLibraryName( knownSubgroupSpecifier, prefix, suffix,
+                        knownSubgroupFileName, knownSubgroupLibraryName);
+
+   /* Read in the containing group G and the second group E, and verify that
+      the degrees are the same. */
+   G = readPermGroup( permGroup1FileName, permGroup1LibraryName, 0, "Generate");
+   E = readPermGroup( permGroup2FileName, permGroup2LibraryName, G->degree,
+                     "Generate");
+
+   /* Read in the known subgroup, if present. */
+   if ( knownSubgroupSpecifier[0] )
+      L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName,
+                         G->degree, "Generate");
+
+
+   /* Compute maximum base change level if not specified as option. */
+   if ( options.maxBaseChangeLevel == UNKNOWN )
+      options.maxBaseChangeLevel =
+         isDoublyTransitive(G) ?
+            ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) :
+            ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6));
+
+   /* Compute the set or partition stabilizer or coset rep and write it out. */
+   if ( options.inform ) {
+      printf( "\n\n               Group Intersection Program:  "
+              "Groups %s and %s\n\n", G->name, E->name);
+      if ( L )
+         printf( "\nKnown Subgroup: %s\n", L->name);
+   }
+   options.groupOrderMessage = "Intersection";
+   G_pP = intersection( G, E, L);
+   strcpy( G_pP->name, outputObjectName);
+   G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+   sprintf( comment,
+            "The intersection of permutation groups %s and %s.",
+            G->name, E->name);
+   writePermGroup( outputFileName, outputLibraryName, G_pP, comment);
+
+   /* Return to caller. */
+   return 0;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xchbase( CompileOptions *cOpts);
+   extern void xcinter( CompileOptions *cOpts);
+   extern void xcjrndp( CompileOptions *cOpts);
+   extern void xcompcr( CompileOptions *cOpts);
+   extern void xcompsg( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcputim( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xcstrba( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xinform( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xoptsve( CompileOptions *cOpts);
+   extern void xorbit ( CompileOptions *cOpts);
+   extern void xorbref( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xptstbr( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xrpriqu( CompileOptions *cOpts);
+   extern void xsetsta( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xchbase( &mainOpts);
+   xcinter( &mainOpts);
+   xcompcr( &mainOpts);
+   xcompsg( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xcstrba( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xinform( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xoptsve( &mainOpts);
+   xorbit ( &mainOpts);
+   xorbref( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xptstbr( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xrpriqu( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/inter.h b/src/leon/src/inter.h
new file mode 100644
index 0000000..7ae061e
--- /dev/null
+++ b/src/leon/src/inter.h
@@ -0,0 +1,7 @@
+#ifndef INTER
+#define INTER
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/leon_config.h b/src/leon/src/leon_config.h
new file mode 100644
index 0000000..7fc79c9
--- /dev/null
+++ b/src/leon/src/leon_config.h
@@ -0,0 +1,59 @@
+/* src/leon_config.h.  Generated by configure.  */
+/* src/leon_config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Name of package */
+#define PACKAGE "libleon"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "libleon"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "libleon 0.0.2"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "libleon"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.0.2"
+
+/* The size of a `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "0.0.2"
diff --git a/src/leon/src/leon_config.h.in b/src/leon/src/leon_config.h.in
new file mode 100644
index 0000000..8675c95
--- /dev/null
+++ b/src/leon/src/leon_config.h.in
@@ -0,0 +1,58 @@
+/* src/leon_config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
diff --git a/src/leon/src/matauto.sh b/src/leon/src/matauto.sh
new file mode 100755
index 0000000..8411988
--- /dev/null
+++ b/src/leon/src/matauto.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+desauto -matrix $*
diff --git a/src/leon/src/matiso.sh b/src/leon/src/matiso.sh
new file mode 100755
index 0000000..d558cc6
--- /dev/null
+++ b/src/leon/src/matiso.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+desauto -iso -matrix $*
diff --git a/src/leon/src/matrix.c b/src/leon/src/matrix.c
new file mode 100644
index 0000000..7917f5e
--- /dev/null
+++ b/src/leon/src/matrix.c
@@ -0,0 +1,94 @@
+/* File matrix.c.  Contains miscellaneous functions for computations with
+   (0,1) matrices. */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "group.h"
+
+#include "errmesg.h"
+#include "new.h"
+#include "storage.h"
+
+CHECK( matrix)
+
+
+      
+/*-------------------------- isMatrix01Isomorphism ------------------------*/
+
+/* The function isMatrix01Isomorphism( M1, M2, s) returns TRUE if permutation s
+   is an isomorphism of the (0,1) matrix M1 to the (0,1) matrix M2 and returns 
+   returns true otherwise. */
+
+BOOLEAN isMatrix01Isomorphism(
+   const Matrix_01 *const M1,
+   const Matrix_01 *const M2,
+   const Permutation *const s,
+   const Unsigned monomialFlag)         /* If TRUE, check that iso */
+                                        /* is monomial. */
+{                                               
+   Unsigned i, j, temp, mu, lambda, nRows = M1->numberOfRows; 
+   UnsignedS *image = s->image;
+   Unsigned collapsedDegree;
+
+   if ( M1->numberOfRows != M2->numberOfRows || M1->numberOfCols != 
+        M2->numberOfCols || M1->numberOfRows+M1->numberOfCols != s->degree )
+      ERROR( "isMatrix01Isomorphism", "Sizes or degrees not compatible.")
+
+   /* If requested, check that s satisfies the monomial property. */
+   if ( monomialFlag ) {
+      collapsedDegree = (M1->numberOfRows+M1->numberOfCols) / 
+                              (M1->setSize-1);      
+      for ( i = 1 ; i <= collapsedDegree ; ++i ) {
+         /* Find mu,j such that s(1*i) = mu*j. */
+         temp = s->image[(M1->setSize-1)*(i-1)+1];
+         j = (temp-1) / (M1->setSize-1) + 1;
+         mu = (temp-1) % (M1->setSize-1) + 1;
+         for ( lambda = 2 ; lambda < M1->setSize ; ++lambda )
+            if ( s->image[(M1->setSize-1)*(i-1)+lambda] !=
+                 (M1->setSize-1)*(j-1) + M1->field->prod[lambda][mu] )
+               return FALSE;
+      }
+   }
+
+   /* Now check that each M1^s = M2. */
+   for ( i = 1 ; i <= M1->numberOfRows ; ++i ) 
+      for ( j = 1 ; j <= M1->numberOfCols ; ++j )
+         if ( M1->entry[i][j] != 
+              M2->entry[image[i]][image[j+nRows]-nRows] )
+            return FALSE;
+
+   return TRUE;
+}
+
+
+/*-------------------------- augmentedMatrix ------------------------------*/
+
+Matrix_01 *augmentedMatrix(
+   const Matrix_01 *const M)
+{
+   const Unsigned setSize = M->setSize;
+   const Unsigned nRows = M->numberOfRows;
+   const Unsigned nCols = M->numberOfCols;
+   FieldElement **prod = M->field->prod;
+   FieldElement *inv = M->field->inv;
+   Unsigned i, j;
+   char lambda, mu;
+   Matrix_01 *MM;
+
+   MM = newZeroMatrix( M->setSize, (setSize-1)*nRows, (setSize-1)*nCols);
+   MM->field = M->field;
+   strcpy( MM->name, M->name);
+   for ( i = 1 ; i <= nRows ; ++i )
+      for ( j = 1 ; j <= nCols ; ++j )
+         for ( lambda = 1 ; lambda < setSize ; ++lambda )
+            for ( mu = 1 ; mu < setSize ; ++mu )
+/* Test: change matrix elts to inverses.   
+               MM->entry[(setSize-1)*(i-1)+lambda][(setSize-1)*(j-1)+mu] =
+                        prod[prod[lambda][mu]][M->entry[i][j]];
+*/
+               MM->entry[(setSize-1)*(i-1)+lambda][(setSize-1)*(j-1)+mu] =
+                        prod[inv[prod[lambda][mu]]][M->entry[i][j]];
+
+   return MM;
+}
diff --git a/src/leon/src/matrix.h b/src/leon/src/matrix.h
new file mode 100644
index 0000000..86c36d8
--- /dev/null
+++ b/src/leon/src/matrix.h
@@ -0,0 +1,16 @@
+#ifndef MATRIX
+#define MATRIX
+
+extern BOOLEAN isMatrix01Isomorphism(
+   const Matrix_01 *const M1,
+   const Matrix_01 *const M2,
+   const Permutation *const s,
+   const Unsigned monomialFlag)         /* If TRUE, check that iso */
+                                        /* is monomial. */
+;
+
+extern Matrix_01 *augmentedMatrix(
+   const Matrix_01 *const M)
+;
+
+#endif
diff --git a/src/leon/src/ncl.sh b/src/leon/src/ncl.sh
new file mode 100755
index 0000000..f09fd3f
--- /dev/null
+++ b/src/leon/src/ncl.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+commut -ncl $*
diff --git a/src/leon/src/new.c b/src/leon/src/new.c
new file mode 100644
index 0000000..d14b79a
--- /dev/null
+++ b/src/leon/src/new.c
@@ -0,0 +1,482 @@
+/* File new.c.  Contains functions to create new objects and delete objects
+   so created.  Actual allocation of memory is handled by invoking functions
+   from storage.c.  The functions included here are:
+
+                                               */
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "errmesg.h"
+#include "partn.h"
+#include "storage.h"
+
+CHECK( new)
+
+
+/*-------------------------- deletePartition ------------------------------*/
+
+void deletePartition(
+   Partition *partn)
+{
+   freeIntArrayDegree( partn->pointList);
+   freeIntArrayDegree( partn->invPointList);
+   freeIntArrayDegree( partn->cellNumber);
+   freeIntArrayDegree( partn->startCell);
+   freePartition( partn);
+}
+
+
+/*-------------------------- newPartitionStack ----------------------------*/
+
+/* This function creates a new partition stack of specified degree and
+   initializes it to a stack of height 1 in which the top (and only)
+   partition is trivial.  It returns a pointer to the new partition stack. */
+
+PartitionStack *newPartitionStack(
+   const Unsigned degree)             /* The degree for the partition stack. */
+{
+   PartitionStack *newStack = allocPartitionStack();
+   Unsigned i;
+
+   newStack->degree = degree;
+   newStack->height = 1;
+
+   newStack->pointList = allocIntArrayDegree();
+   newStack->invPointList = allocIntArrayDegree();
+   for ( i = 1 ; i <= degree ; ++i )
+      newStack->pointList[i] = newStack->invPointList[i] = i;
+   newStack->pointList[degree+1] = newStack->invPointList[degree+1] = 0;
+
+   newStack->cellNumber = allocIntArrayDegree();
+   for ( i = 1 ; i <= degree ; ++i )
+      newStack->cellNumber[i] = 1;
+
+   newStack->parent = allocIntArrayDegree();
+
+   newStack->startCell = allocIntArrayDegree();
+   newStack->startCell[1] = 1;
+
+   newStack->cellSize = allocIntArrayDegree();
+   newStack->cellSize[1] = degree;
+
+   return newStack;
+}
+
+
+/*-------------------------- deletePartitionStack -------------------------*/
+
+void deletePartitionStack(
+   PartitionStack *partnStack)
+{
+   freeIntArrayDegree( partnStack->pointList);
+   freeIntArrayDegree( partnStack->invPointList);
+   freeIntArrayDegree( partnStack->cellNumber);
+   freeIntArrayDegree( partnStack->parent);
+   freeIntArrayDegree( partnStack->startCell);
+   freeIntArrayDegree( partnStack->cellSize);
+   freePartitionStack( partnStack);
+}
+
+
+/*-------------------------- newCellPartitionStack ------------------------*/
+
+/* This function creates a new cell partition stack of based on a specified
+   partition and initializes it to a stack of height 1 in which each cell is
+   in its own cell group.  It returns a pointer to the new partition stack. */
+
+CellPartitionStack *newCellPartitionStack(
+   Partition *basePartn)             /* The base partition. */
+{
+   CellPartitionStack *newCellStack = (CellPartitionStack *) malloc(
+                                         sizeof(CellPartitionStack) );
+   Unsigned i, cellCount;
+
+   newCellStack->basePartn = basePartn;
+   newCellStack->height = 1;
+   newCellStack->cellCount = cellCount = numberOfCells( basePartn);
+
+   newCellStack->cellList = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   newCellStack->invCellList = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   for ( i = 1 ; i <= cellCount ; ++i )
+      newCellStack->cellList[i] = newCellStack->invCellList[i] = i;
+   newCellStack->cellList[cellCount+1] = 0;
+   newCellStack->invCellList[cellCount+1] = 0;
+
+   newCellStack->cellGroupNumber = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   for ( i = 1 ; i <= cellCount ; ++i )
+      newCellStack->cellGroupNumber[i] = 1;
+
+   newCellStack->parentGroup = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   newCellStack->parentGroup[1] = 0;
+
+   newCellStack->startCellGroup = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   newCellStack->startCellGroup[1] = 1;
+
+   newCellStack->cellGroupSize = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   newCellStack->cellGroupSize[1] = cellCount;
+   
+   newCellStack->totalGroupSize = malloc( (cellCount+2)*sizeof(UnsignedS) );
+   newCellStack->totalGroupSize[1] = basePartn->degree;
+
+   return newCellStack;
+}
+
+
+/*-------------------------- newIdentityPerm ------------------------------*/
+
+/* This function creates a new permutation of a specified degree and
+   initializes it to the identity.  The name is set to a null string.  The
+   returns a pointer to the permutation. */
+
+Permutation *newIdentityPerm(
+   Unsigned degree)                    /* The degree for the new permutation. */
+{
+   Permutation *newPerm = allocPermutation();
+   Unsigned pt;
+
+   newPerm->name[0] = '\0';
+   newPerm->degree = degree;
+   newPerm->invImage = newPerm->image = allocIntArrayDegree();
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      newPerm->image[pt] = pt;
+   newPerm->image[degree+1] = 0;
+   newPerm->word = NULL;
+
+   return newPerm;
+}
+
+
+/*-------------------------- newUndefinedPerm -----------------------------*/
+
+/*  This function creates a new permutation of specified degree.  Space is
+    allocated for the image array (It remains uninitialized), but not for the
+    inverse image array. The function returns a pointer to the new
+    permutation. */
+
+Permutation *newUndefinedPerm(
+   const Unsigned degree)             /* The degree for the new permutation. */
+{
+   Permutation *newPerm = allocPermutation();
+
+   newPerm->degree = degree;
+   newPerm->image = allocIntArrayDegree();
+   newPerm->image[degree+1] = 0;
+   newPerm->invImage = NULL;
+   newPerm->word = NULL;
+
+   return newPerm;
+}
+
+
+/*-------------------------- deletePermutation ----------------------------*/
+
+/*  This function deletes a permutation created with one of the functions
+    above. */
+
+void deletePermutation(
+   Permutation *oldPerm)         /* The permutation to be deleted. */
+{
+   if ( oldPerm->image ) {
+      freeIntArrayDegree( oldPerm->image);
+      if ( oldPerm->invImage != NULL &&
+           oldPerm->invImage != oldPerm->image )
+         freeIntArrayDegree( oldPerm->invImage);
+   }
+   freePermutation( oldPerm);
+}
+
+
+/*-------------------------- newTrivialPermGroup --------------------------*/
+
+/* This function creates a new permutation group of specified degree and sets
+   it to the group of order 1.  It returns a pointer to the new group. */
+
+PermGroup *newTrivialPermGroup(
+   Unsigned degree)                    /* The degree for the new group. */
+{
+   PermGroup *newGroup = allocPermGroup();
+
+   newGroup->name[0] = '\0';
+   newGroup->degree = degree;
+   newGroup->baseSize = 0;
+   newGroup->order = allocFactoredInt();
+   newGroup->order->noOfFactors = 0;
+   newGroup->base = allocIntArrayBaseSize();
+   newGroup->base[1] = 0;
+   newGroup->basicOrbLen = allocIntArrayBaseSize();
+   newGroup->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+   newGroup->schreierVec = (Permutation ***) allocPtrArrayBaseSize();
+   newGroup->generator = NULL;
+   newGroup->omega = NULL;
+
+   return newGroup;
+}
+
+
+/*-------------------------- deletePermGroup ------------------------------*/
+
+/* This function deletes a permutation group.  All memory occupied by
+   components of the group, including all generating permutations, is freed. */
+
+void deletePermGroup(
+   PermGroup *G)                  /* The permutation group to delete. */
+{
+   Unsigned i;
+   Permutation *gen, *genNext;
+
+   if ( G->order )
+      freeFactoredInt( G->order);
+   if ( G->base ) {
+      freeIntArrayBaseSize( G->base);
+      if ( G->basicOrbLen )
+         freeIntArrayBaseSize( G->basicOrbLen );
+      if ( G->basicOrbit ) {
+         for ( i = 1 ; i <= G->baseSize ; ++i )
+            if ( G->basicOrbit[i] )
+               freeIntArrayDegree( G->basicOrbit[i]);
+         freePtrArrayBaseSize( G->basicOrbit );
+      }
+      if ( G->schreierVec ) {
+         for ( i = 1 ; i <= G->baseSize ; ++i )
+            if ( G->schreierVec[i] )
+               freePtrArrayDegree( G->schreierVec[i]);
+         freePtrArrayBaseSize( G->schreierVec );
+      }
+      if ( G->completeOrbit ) {
+         for ( i = 1 ; i <= G->baseSize+1 ; ++i )
+            if ( G->completeOrbit[i] )
+               freeIntArrayDegree( G->completeOrbit[i]);
+         freePtrArrayBaseSize( G->completeOrbit );
+      }
+      if ( G->orbNumberOfPt ) {
+         for ( i = 1 ; i <= G->baseSize+1 ; ++i )
+            if ( G->orbNumberOfPt[i] )
+               freeIntArrayDegree( G->orbNumberOfPt[i]);
+         freePtrArrayBaseSize( G->orbNumberOfPt );
+      }
+      if ( G->startOfOrbitNo ) {
+         for ( i = 1 ; i <= G->baseSize ; ++i )
+            if ( G->startOfOrbitNo[i] )
+               freeIntArrayDegree( G->startOfOrbitNo[i]);
+         freePtrArrayBaseSize( G->startOfOrbitNo );
+      }
+   }
+   for ( gen = G->generator ; gen ; gen = genNext ) {
+      genNext = gen->next;
+      deletePermutation( gen);
+   }
+   if ( G->omega )
+      freeIntArrayDegree( G->invOmega);
+   if ( G->invOmega )
+      freeIntArrayDegree( G->invOmega);
+}
+
+
+/*-------------------------- newRBase -------------------------------------*/
+
+/* Note invOmega field is not allocated here. */
+
+RBase *newRBase(
+   const Unsigned degree)
+{
+   RBase *newBase = allocRBase();
+
+   newBase->k = 0;
+   newBase->ell = 0;
+   newBase->degree = degree;
+   newBase->PsiStack = newPartitionStack( degree);
+   newBase->aAA = allocRefinementArrayDegree();
+   newBase->n_ = allocIntArrayBaseSize();
+   newBase->p_ = allocIntArrayBaseSize();
+   newBase->alphaHat = allocIntArrayBaseSize();
+   newBase->a_ = allocIntArrayDegree();
+   newBase->b_ = allocIntArrayDegree();
+   newBase->omega = allocIntArrayDegree();
+   newBase->invOmega = allocIntArrayDegree();
+
+   return newBase;
+}
+
+
+/*-------------------------- deleteRbase ----------------------------------*/
+
+void deleteRBase(
+   RBase *oldBase)
+{
+   if ( oldBase->PsiStack )
+      deletePartitionStack( oldBase->PsiStack);
+   freeRefinementArrayDegree( oldBase->aAA);
+   freeIntArrayBaseSize( oldBase->n_);
+   freeIntArrayBaseSize( oldBase->p_);
+   freeIntArrayDegree( oldBase->alphaHat);
+   freeIntArrayDegree( oldBase->a_);
+   freeIntArrayDegree( oldBase->b_);
+
+   freeRBase( oldBase);
+}
+
+
+/*-------------------------- newRPriorityQueue-----------------------------*/
+
+/* This function creates a new, initially-empty R-Priority queue. */
+
+RPriorityQueue *newRPriorityQueue(
+   const Unsigned degree,
+   const Unsigned maxSize)
+{
+   RPriorityQueue *newRPriorityQueue = allocRPriorityQueue();
+
+   newRPriorityQueue->size = 0;
+   newRPriorityQueue->degree = degree;
+   newRPriorityQueue->maxSize = maxSize;
+   if ( maxSize > degree / 2 )
+      newRPriorityQueue->pointList = allocIntArrayDegree();
+   else {
+      newRPriorityQueue->pointList = malloc( (maxSize+2) * sizeof(Unsigned) );
+      if ( !newRPriorityQueue->pointList )
+         ERROR( "newRPriorityQueue", "Out of memory.")
+   }
+
+   return newRPriorityQueue;
+}
+
+
+/*-------------------------- deleteRPriorityQueue -------------------------*/
+
+void deleteRPriorityQueue(
+   RPriorityQueue *oldRPriorityQueue)
+{
+   if ( oldRPriorityQueue->pointList )
+   if ( oldRPriorityQueue->maxSize > oldRPriorityQueue->degree / 2 )
+      freeIntArrayDegree( oldRPriorityQueue->pointList);
+   else
+      free( oldRPriorityQueue->pointList );
+   freeRPriorityQueue( oldRPriorityQueue);
+}
+
+
+/*-------------------------- newTrivialWord -------------------------------*/
+
+Word *newTrivialWord( void)
+{
+   ERROR( "newTrivialWord", "Procedure not yet implemented.");
+}
+
+
+/*-------------------------- newZeroMatrix --------------------------------*/
+
+Matrix_01 *newZeroMatrix(
+   const Unsigned setSize,
+   const Unsigned numberOfRows,
+   const Unsigned numberOfCols)
+{
+   Matrix_01 *M;
+   Unsigned i, j;
+
+   M = (Matrix_01 *) malloc( sizeof(Matrix_01) );
+   if ( !M )
+      ERROR( "newZeroMatrix", "Out of memory.")
+
+   M->unused = NULL;
+   M->field = NULL;
+   M->entry = (char **) malloc( sizeof(char *) * (numberOfRows+2) );
+   if ( !M->entry )
+      ERROR( "newZeroMatrix", "Out of memory.")
+   M->setSize = setSize;
+   M->numberOfRows = numberOfRows;
+   M->numberOfCols = numberOfCols;
+   for ( i = 1 ; i <= numberOfRows ; ++i ) {
+      M->entry[i] = (char *) malloc( numberOfCols+1);
+      if ( !M->entry[i] )
+         ERROR( "newZeroMatrix", "Out of memory.")
+      for ( j = 1 ; j <= numberOfCols ; ++j )
+         M->entry[i][j] = 0;
+   }
+
+   return M;
+}
+
+void deleteMatrix(
+   Matrix_01 *matrix,
+   const Unsigned numberOfRows)
+{
+   Unsigned i;
+   for ( i = 1 ; i <= numberOfRows ; ++i ) {
+      free(matrix->entry[i]);
+   }
+   free(matrix->entry);
+   free(matrix);
+}
+
+/*-------------------------- newRelatorFromWord ---------------------------*/
+
+/* The function newRelatorFromWord( w, fbRelFlag, doubleFlag) returns a new 
+   relator created from a word w.  The length and rel fields are filled in.  
+   If fbRelFlag is true, the fRel and bRel fields are also filled in.  If
+   doubleFlag is true, the rel, fRel (if present), and bRel (if present)
+   fields contain two copies of the relator.  (The length counts one copy
+   only.)  Note the rel, fRel, and bRel arrays start at 1.  Relators are
+   reduced by removing consecutive entries that are inverses; the word w
+   is similarly reduced.  NOTE INVERSE PERMUTATIONS MUST BE PRESENT.  
+
+   The function returns null if the relator reduces to a trivial word, or
+   if it could not be allocated. */
+
+Relator *newRelatorFromWord(
+   Word *const w,
+   const Unsigned fbRelFlag,
+   const Unsigned doubleFlag)
+{
+   Relator *r;
+   Unsigned i, j;
+
+   /* First we reduce w.  If it attains length 0, return NULL. */
+   i = 1;
+   while ( i < w->length-1 ) 
+      if ( w->position[i+1] == w->position[i]->invPermutation ) {
+         for ( j = i ; j <= w->length-2 ; ++j )
+            w->position[j] = w->position[j+2];
+         w->length -= 2;
+         if ( i > 1 )
+            --i;
+      }
+      else 
+         ++i;
+   if ( w->length == 0 )
+      return NULL;
+   
+   /* Now we allocate and fill in fields of r. */
+   r = allocRelator();
+   r->length = w->length;
+   r->level = UNKNOWN;
+   r->rel = (Permutation **) malloc( (2+r->length+doubleFlag*r->length) *
+                                     sizeof(Permutation *) );
+   if ( !r->rel )
+      ERROR( "newRelatorFromWord", "Out of memory.")
+   for ( i = 1 ; i <= w->length ; ++i )
+      r->rel[i] = w->position[i];
+   if ( doubleFlag )
+      for ( i = w->length+1 ; i <= 2*w->length ; ++i )
+         r->rel[i] = w->position[i-w->length];
+   r->rel[i] = NULL;
+   if ( fbRelFlag ) {
+      r->fRel = (Unsigned **) malloc( (2+r->length+doubleFlag*r->length) *
+                                     sizeof(Unsigned *) );
+      if ( !r->fRel )
+         ERROR( "newRelatorFromWord", "Out of memory.")
+      r->bRel = (Unsigned **) malloc( (2+r->length+doubleFlag*r->length) *
+                                     sizeof(Unsigned *) );
+      if ( !r->bRel )
+         ERROR( "newRelatorFromWord", "Out of memory.")
+      for ( i = 1 ; i <= (1+doubleFlag)*w->length ; ++i ) {
+         r->fRel[i] = r->rel[i]->image;
+         r->bRel[i] = r->rel[i]->invImage;
+      }
+      r->fRel[i] = NULL;
+      r->bRel[i] = NULL;
+   }
+
+   return r;
+}
diff --git a/src/leon/src/new.h b/src/leon/src/new.h
new file mode 100644
index 0000000..5786a12
--- /dev/null
+++ b/src/leon/src/new.h
@@ -0,0 +1,77 @@
+#ifndef NEW
+#define NEW
+
+extern void deletePartition(
+   Partition *partn)
+;
+
+extern PartitionStack *newPartitionStack(
+   const Unsigned degree)             /* The degree for the partition stack. */
+;
+
+extern void deletePartitionStack(
+   PartitionStack *partnStack)
+;
+
+extern CellPartitionStack *newCellPartitionStack(
+   Partition *basePartn)             /* The base partition. */
+;
+
+extern Permutation *newIdentityPerm(
+   Unsigned degree)                    /* The degree for the new permutation. */
+;
+
+extern Permutation *newUndefinedPerm(
+   const Unsigned degree)             /* The degree for the new permutation. */
+;
+
+extern void deletePermutation(
+   Permutation *oldPerm)         /* The permutation to be deleted. */
+;
+
+extern PermGroup *newTrivialPermGroup(
+   Unsigned degree)                    /* The degree for the new group. */
+;
+
+extern void deletePermGroup(
+   PermGroup *G)                  /* The permutation group to delete. */
+;
+
+extern RBase *newRBase(
+   const Unsigned degree)
+;
+
+extern void deleteRBase(
+   RBase *oldBase)
+;
+
+extern RPriorityQueue *newRPriorityQueue(
+   const Unsigned degree,
+   const Unsigned maxSize)
+;
+
+extern void deleteRPriorityQueue(
+   RPriorityQueue *oldRPriorityQueue)
+;
+
+extern Word *newTrivialWord( void)
+;
+
+extern Matrix_01 *newZeroMatrix(
+   const Unsigned setSize,
+   const Unsigned numberOfRows,
+   const Unsigned numberOfCols)
+;
+
+extern void deleteMatrix(
+   Matrix_01 *matrix,
+   const Unsigned numberOfRows)
+;
+
+extern Relator *newRelatorFromWord(
+   Word *const w,
+   const Unsigned fbRelFlag,
+   const Unsigned doubleFlag)
+;
+
+#endif
diff --git a/src/leon/src/oldcopy.c b/src/leon/src/oldcopy.c
new file mode 100644
index 0000000..cdb9d58
--- /dev/null
+++ b/src/leon/src/oldcopy.c
@@ -0,0 +1,47 @@
+/* File oldcopy.c.  Contains functions that copy an object to an already-
+   existing object of the same type. */
+
+#include <stddef.h>
+#include <string.h>
+
+#include "group.h"
+#include "storage.h"
+
+CHECK( oldcop)
+
+
+/*-------------------------- copyPermutation ------------------------------*/
+
+/* This function copies one permutation to another.  The destination permutation
+   must already exist; its invImage field may be allocated or freed, depending
+   on whether the source permutation has an invImage field.  The level and
+   essential fields are not copied. */
+
+void copyPermutation(
+   const Permutation *const fromPerm,
+   Permutation *const toPerm)
+{
+   Unsigned pt;
+
+   strcpy ( toPerm->name, fromPerm->name);
+   toPerm->degree = fromPerm->degree;
+   for ( pt = 1 ; pt <= fromPerm->degree ; ++pt )
+      toPerm->image[pt] = fromPerm->image[pt];
+   if ( fromPerm->invImage ) {
+      if ( fromPerm->invImage == fromPerm->image ) {
+         if ( toPerm->invImage && toPerm->invImage != toPerm->image )
+            freeIntArrayDegree( toPerm->invImage);
+         toPerm->invImage = toPerm->image;
+      }
+      else {
+         if ( !toPerm->invImage || toPerm->invImage == toPerm->image )
+            toPerm->invImage = allocIntArrayDegree();
+         for ( pt = 1 ; pt <= fromPerm->degree ; ++pt )
+            toPerm->invImage[pt] = fromPerm->invImage[pt];
+      }
+   }
+   else if ( toPerm->invImage ) {
+      freeIntArrayDegree( toPerm->invImage);
+      toPerm->invImage = NULL;
+   }
+}
diff --git a/src/leon/src/oldcopy.h b/src/leon/src/oldcopy.h
new file mode 100644
index 0000000..cb222e8
--- /dev/null
+++ b/src/leon/src/oldcopy.h
@@ -0,0 +1,9 @@
+#ifndef OLDCOPY
+#define OLDCOPY
+
+extern void copyPermutation(
+   const Permutation *const fromPerm,
+   Permutation *const toPerm)
+;
+
+#endif
diff --git a/src/leon/src/optsvec.c b/src/leon/src/optsvec.c
new file mode 100644
index 0000000..58512d7
--- /dev/null
+++ b/src/leon/src/optsvec.c
@@ -0,0 +1,316 @@
+/* File optsvec.c. */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "group.h"
+
+#include "cstborb.h"
+#include "essentia.h"
+#include "new.h"
+#include "permut.h"
+#include "permgrp.h"
+#include "storage.h"
+
+CHECK( optsve)
+
+extern GroupOptions options;
+
+/* Bug fix for Waterloo C (IBM 370). */
+#if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE)
+#define FIXUP1 short
+#define FIXUP2 (short)
+#else
+#define FIXUP1 Unsigned
+#define FIXUP2
+#endif
+
+
+/*-------------------------- meanCosetRepLen ------------------------------*/
+
+void meanCosetRepLen(
+   const PermGroup *const G)
+{
+   Unsigned  level, pt, i, totalCount, involCount;
+   unsigned long  totalLen;
+   UnsignedS  *cosetRepLen = allocIntArrayDegree();
+#ifdef NOFLOAT
+   unsigned long intQuot, decQuot;
+#endif
+
+   /* Do nothing for symmetric group. */
+   if ( IS_SYMMETRIC(G) )
+      return;
+
+   totalCount = genCount( G, &involCount);
+   printf( "%u generators (%u involutory).\n", totalCount, involCount),
+   printf( "Mean node depth Schreier tree:");
+   for ( level = 1 ; level <= G->baseSize ; ++level ) {
+      for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i )
+         cosetRepLen[G->basicOrbit[level][i]] = 0;
+      totalLen = 0;
+      for ( i = 2 ; i <= G->basicOrbLen[level] ; ++i ) {
+         pt = G->basicOrbit[level][i];
+         cosetRepLen[pt] = 1 + cosetRepLen[
+                           G->schreierVec[level][pt]->invImage[pt] ];
+         totalLen += cosetRepLen[pt];
+      }
+#ifndef NOFLOAT
+      printf( " %4.2lf", (double) totalLen / G->basicOrbLen[level] );
+#endif
+#ifdef NOFLOAT
+      intQuot = (unsigned long) totalLen / G->basicOrbLen[level];
+      decQuot = (totalLen - G->basicOrbLen[level] * intQuot) * 100;
+      decQuot /= G->basicOrbLen[level];
+      printf( " %2lu.%02lu", intQuot, decQuot );
+#endif
+   }
+   printf( "\n");
+   freeIntArrayDegree( cosetRepLen);
+}
+
+
+/*-------------------------- reconstructBasicOrbit ------------------------*/
+
+FIXUP1 reconstructBasicOrbit(  /* Returns word length of longest coset rep. */
+   PermGroup *const G,
+   const Unsigned level)
+{
+   Unsigned found = 1,
+            processed = 0,
+            pt, img, i,
+            maxCosetRepLen = 0;
+   Permutation *gen, *firstGenAtLevel;
+   Permutation **svec = G->schreierVec[level];
+   UnsignedS *basicOrbit = G->basicOrbit[level];
+
+   for ( i = 2 ; i <= G->basicOrbLen[level] ; ++i )
+      svec[basicOrbit[i]] = NULL;
+   firstGenAtLevel = linkGensAtLevel( G, level);
+   while ( found < G->basicOrbLen[level] ) {
+      pt = basicOrbit[++processed];
+      for ( gen = firstGenAtLevel ; gen ; gen = gen->xNext ) {
+         img = gen->image[pt];
+         if ( !svec[img] ) {
+            basicOrbit[++found] = img;
+            svec[img] = gen;
+         }
+      }
+   }
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      for ( i = gen->level ; i >= 1 ; --i )
+         MAKE_ESSENTIAL_AT_LEVEL( gen, i);
+
+   for ( pt = basicOrbit[G->basicOrbLen[level]] ; pt != basicOrbit[1] ;
+                                                  pt = svec[pt]->invImage[pt] )
+      ++maxCosetRepLen;
+
+   return FIXUP2 maxCosetRepLen;
+}
+
+
+/*-------------------------- expandSGS -----------------------------------*/
+
+/* This function adds new strong generators to a strong generating set in
+   order to reduce the maximum length of the coset representatives. */
+
+void expandSGS(
+   PermGroup *G,
+   UnsignedS longRepLen[],
+   UnsignedS basicCellSize[],
+   Unsigned ell)
+{
+   Unsigned  r, i, pt, orbLen, involCount, m1, m2, m3, passes, easy,
+             numberOfGens = genCount(G, &involCount);
+   unsigned long basicCellSizeSum = 0;
+   UnsignedS *goal = allocIntArrayBaseSize();
+   Permutation *newGen;
+
+   for ( i = 2 ; i <= ell ; ++i )
+      basicCellSizeSum += basicCellSize[i];
+   easy = (options.maxBaseChangeLevel == 0 ) &&
+          G->degree < 10000 &&
+          !depthGreaterThan( G, 4) &&
+          ell <= 7 &&
+          basicCellSizeSum <= G->degree / 10;
+
+   m1 = (options.maxBaseChangeLevel > 1 ) ? 4 :
+        (options.maxBaseChangeLevel > 0 ) ? 3 : 2;
+   passes = (options.maxBaseChangeLevel > 0 ) ? 2 : 1;
+   if ( numberOfGens + 20 >= options.maxStrongGens )
+      ++passes;
+   for ( r = 1 ; r <= G->baseSize ; ++r ) {
+      m2 = ( r == 1 ) ? 4 :
+           ( r == 2 ) ? 8 :
+           ( r == 3 ) ? 4 :
+           ( r == 4 ) ? 2 :
+                        1 ;
+      orbLen = G->basicOrbLen[r];
+      goal[r] = 2 + (orbLen > 8 * m1 * m2) + (orbLen > 512 * m1 * m2) +
+                (orbLen > 16383 * m1 );
+   }
+
+   for ( m3 = passes ; m3 >= 1 ; --m3 ) {
+      for ( r = G->baseSize ; r >= 1 ; --r )
+         while ( (longRepLen[r] > 0 ? longRepLen[r] :
+                  (longRepLen[r] = reconstructBasicOrbit(G,r))) >
+                                                goal[r]+m3-1+easy ) {
+            if ( numberOfGens >= options.maxStrongGens )
+               break;
+            pt = G->basicOrbit[r][G->basicOrbLen[r]];
+            newGen = newIdentityPerm( G->degree);
+            while ( G->schreierVec[r][pt] != FIRST_IN_ORBIT ) {
+               leftMultiply( newGen, G->schreierVec[r][pt] );
+               pt = G->schreierVec[r][pt]->invImage[pt];
+            }
+            newGen->level = r;
+            MAKE_NOT_ESSENTIAL_ALL( newGen);
+            for ( i = 1 ; i <= r ; ++i ) {
+               MAKE_ESSENTIAL_AT_LEVEL(newGen,i);
+               longRepLen[i] = 0;
+            }
+            newGen->next = G->generator;
+            G->generator = newGen;
+            adjoinInverseGen( G, newGen);
+           ++numberOfGens;
+         }
+      if ( numberOfGens >= options.maxStrongGens )
+         break;
+   }
+
+   freeIntArrayBaseSize( goal);
+}
+
+
+/*-------------------------- compressGroup --------------------------------*/
+
+/* This function compresses a permutation group for which the complete orbit
+   structure.  After compression, the group must remain essentially constant,
+   and it may not be freed with deletePermGroup.  During compression,
+       1)   G->startOfOrbitNo[i] is reduced to its exact size, whenever its
+            exact size is <= half the degree.
+       2)   G->basicOrbit[i] is made to point to a location in completeOrbit[i],
+            and the contents of G->basicOrbit[i] is transferred to the
+            appropriate locations in completeOrbit[i]. */
+
+void compressGroup(
+   PermGroup *const G)        /* The group to be compressed. */
+{
+   Unsigned  d, i, orbitCountPlus1;
+   UnsignedS *oldStartOfOrbit, *oldBasicOrbit;
+
+   /* Can't compress symmetric group. */
+   if ( IS_SYMMETRIC(G) )
+      return;
+
+   /* Here we compress the startOfOrbitNo fields. */
+   for ( d = 1 ; d <= G->baseSize ; ++d ) {
+      oldStartOfOrbit = G->startOfOrbitNo[d];
+      for ( orbitCountPlus1 = 1 ; oldStartOfOrbit[orbitCountPlus1] <=
+                                  G->degree ; ++orbitCountPlus1 )
+         ;
+      G->startOfOrbitNo[d] =
+              (UnsignedS *) malloc( (orbitCountPlus1+1) * sizeof(UnsignedS) );
+      for ( i = 1 ; i <= orbitCountPlus1 ; ++i )
+         G->startOfOrbitNo[d][i] = oldStartOfOrbit[i];
+   }
+
+   /* Here we compress the basic orbit fields. */
+   for ( d = 1 ; d <= G->baseSize ; ++d ) {
+      oldBasicOrbit = G->basicOrbit[d];
+      G->basicOrbit[d] = G->completeOrbit[d] +
+                 G->startOfOrbitNo[d][ G->orbNumberOfPt[d][G->base[d]] ] - 1;
+      for ( i = 1 ; i <= G->basicOrbLen[d] ; ++i )
+         G->basicOrbit[d][i] = oldBasicOrbit[i];
+      freeIntArrayDegree( oldBasicOrbit);
+   }
+}
+
+
+/*-------------------------- compressAtLevel ------------------------------*/
+
+/* This function acts like compressGroup, except that compression occurs only
+   at one specified level). */
+
+void compressAtLevel(
+   PermGroup *const G,        /* The group to be compressed. */
+   const Unsigned level)      /* The level at which compression occurs. */
+{
+   Unsigned  i, orbitCountPlus1;
+   UnsignedS *oldStartOfOrbit, *oldBasicOrbit;
+
+   /* Here we compress the startOfOrbitNo fields. */
+   oldStartOfOrbit = G->startOfOrbitNo[level];
+   for ( orbitCountPlus1 = 1 ; oldStartOfOrbit[orbitCountPlus1] <=
+                               G->degree ; ++orbitCountPlus1 )
+      ;
+   G->startOfOrbitNo[level] =
+           (UnsignedS *) malloc( (orbitCountPlus1+1) * sizeof(UnsignedS) );
+   for ( i = 1 ; i <= orbitCountPlus1 ; ++i )
+      G->startOfOrbitNo[level][i] = oldStartOfOrbit[i];
+
+   /* Here we compress the basic orbit fields. */
+   oldBasicOrbit = G->basicOrbit[level];
+   G->basicOrbit[level] = G->completeOrbit[level] +
+        G->startOfOrbitNo[level][ G->orbNumberOfPt[level][G->base[level]] ] - 1;
+   for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i )
+      G->basicOrbit[level][i] = oldBasicOrbit[i];
+   freeIntArrayDegree( oldBasicOrbit);
+}
+
+#ifdef XXX
+/*-------------------------- sortGensByLevel ------------------------------*/
+
+/* This function sorts the strong generators for a group in descending order
+   according to the "level" field.  Within a fixed level, involutory
+   generators are placed before noninvolutory ones. */
+
+void sortGensByLevel(
+   PermGroup *const G)
+{
+   Unsigned i;
+   Permutation  gen, previousGen,
+                *involGen[MAX_BASE_SIZE+2] = {NULL},
+                *nonInvolGen[MAX_BASE_SIZE+2] = {NULL};
+
+   /* Here the generators are placed on separate forward-linked lists, two for
+      each level (one for involutions, the other for non-involutions. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( isInvolutoryElt(gen) ) {
+         gen->next = involGen[gen->level];
+         involGen[gen->level] = gen;
+      }
+      else {
+         gen->next = nonInvolGen[gen->level];
+         nonInvolGen[gen->level] = gen;
+      }
+   G->generator = NULL;
+
+   /* Now we reform a singly-linked list of the generators in sorted order. */
+   for ( i = 1 ; i <= G->baseSize ; ++i ) {
+      if ( nonInvolGen[i] ) {
+         oldListHeader = G->generator;
+         G->generator = involGen[i];
+         for ( gen = G->generator ; gen->next ; gen = gen->next )
+            ;
+         gen->next = oldListHeader;
+      }
+      if ( involGen[i] ) {
+         oldListHeader = G->generator;
+         G->generator = involGen[i];
+         for ( gen = G->generator ; gen->next ; gen = gen->next )
+            ;
+         gen->next = oldListHeader;
+      }
+   }
+
+   /* Finally we reconstruct the backward links. */
+   previousGen = NULL;
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      gen->last = previousGen;
+      previousGen = gen;
+   }
+}
+#endif
diff --git a/src/leon/src/optsvec.h b/src/leon/src/optsvec.h
new file mode 100644
index 0000000..2f9d0b5
--- /dev/null
+++ b/src/leon/src/optsvec.h
@@ -0,0 +1,33 @@
+#ifndef OPTSVEC
+#define OPTSVEC
+
+extern void meanCosetRepLen(
+   const PermGroup *const G)
+;
+
+extern FIXUP1 reconstructBasicOrbit(  /* Returns word length of longest coset rep. */
+   PermGroup *const G,
+   const Unsigned level)
+;
+
+extern void expandSGS(
+   PermGroup *G,
+   UnsignedS longRepLen[],
+   UnsignedS basicCellSize[],
+   Unsigned ell)
+;
+
+extern void compressGroup(
+   PermGroup *const G)        /* The group to be compressed. */
+;
+
+extern void compressAtLevel(
+   PermGroup *const G,        /* The group to be compressed. */
+   const Unsigned level)      /* The level at which compression occurs. */
+;
+
+extern void sortGensByLevel(
+   PermGroup *const G)
+;
+
+#endif
diff --git a/src/leon/src/orbdes.c b/src/leon/src/orbdes.c
new file mode 100644
index 0000000..75f255f
--- /dev/null
+++ b/src/leon/src/orbdes.c
@@ -0,0 +1,251 @@
+/* File orbdes.c.  Main program for orbdes command, which may be used
+   construct a design from the orbits of a point stabilizer in a permutation
+   group.  The format of the command is:
+
+        orbdes  <options> <permGroup> <orbRep> <design>
+
+   where the meaning of the parameters is as follows:
+
+            <options>:    Options for program.
+
+            <permGroup>:  The permutation group from which the design is
+                          to be constructed.
+
+            <orbRep>:     Determines which orbit of the point stabilizer
+                          of 1 (or the first point in <orbRep>^<permGroup>
+                          for an intransitive group) will be used.
+
+            <design>:     The name for the design to be created.
+*/
+
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "chbase.h"
+#include "errmesg.h"
+#include "new.h"
+#include "oldcopy.h"
+#include "permut.h"
+#include "readdes.h"
+#include "readgrp.h"
+#include "storage.h"
+#include "util.h"
+
+static void verifyOptions(void);
+
+GroupOptions options;
+
+int main( int argc, char *argv[])
+{
+   char permGroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        designFileName[MAX_FILE_NAME_LENGTH] = "",
+        permGroupLibraryName[MAX_NAME_LENGTH] = "",
+        designLibraryName[MAX_NAME_LENGTH] = "";
+   char comment[60];
+   Unsigned orbRep, i, j, pt, basePt, processed, found, img, optionCountPlus1;
+   char *flag;
+   Unsigned *pointList;
+   PermGroup *G;
+   Matrix_01 *D;
+   Permutation *gen;
+   BOOLEAN matrixFlag, transposeMatrixFlag;
+
+   /* If there are no options, provide usage information and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  orbdes [-a] [-m] [-mt] permGroup point design\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1, give limits and 
+      return. */
+   if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 )
+      verifyOptions();
+
+   /* Check for exactly 3 parameters following options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 != 3 ) {
+      ERROR( "main (design group)",
+             "Exactly 3 non-option parameters are required.");
+      exit(ERROR_RETURN_CODE);
+   }
+
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   strcpy( options.outputFileMode, "w");
+   matrixFlag = FALSE;
+   transposeMatrixFlag = FALSE;
+   /* Translate options to lower case and process them. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strcmp( argv[i], "-m") == 0 ) {
+         matrixFlag = TRUE;
+         transposeMatrixFlag = FALSE;
+      }
+      else if ( strcmp( argv[i], "-mt") == 0 ) {
+         transposeMatrixFlag = TRUE;
+         matrixFlag = FALSE;
+      }
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute file and library names. */
+   parseLibraryName( argv[optionCountPlus1], "", "", permGroupFileName,
+                     permGroupLibraryName);
+   parseLibraryName( argv[optionCountPlus1+2], "", "", designFileName,
+                     designLibraryName);
+
+   /* Read in group. */
+   G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate");
+
+   /* Obtain orbit representive and suborbit representative. */
+   errno = 0;
+   orbRep = strtol( argv[optionCountPlus1+1], NULL, 0);
+   if ( errno != 0 || orbRep < 1 || orbRep > G->degree )
+      ERROR1s( "main (orbdes command)", "Invalid orbit representative ",
+               argv[optionCountPlus1+1], ".");
+
+   /* Find the first point in the G-orbit of orbRep, call it basePt,and make
+      it the first base point.  Make orbRep the second base point. */
+   insertBasePoint( G, 1, orbRep);
+   for ( basePt = 1; G->schreierVec[1][basePt] == NULL ; ++basePt )
+      ;
+   insertBasePoint( G, 1, basePt);
+   insertBasePoint( G, 2, orbRep);
+
+   /* Allocate the design. */
+   D = newZeroMatrix( 2, G->degree, G->degree);
+
+   /* Construct the design. */
+   pointList = allocIntArrayDegree();
+   flag = allocBooleanArrayDegree();
+   processed = 0;
+   found  = 1;
+   pointList[1] = basePt;
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      flag[pt] = FALSE;
+   flag[basePt] = TRUE;
+   for ( i = 1 ; i <= G->basicOrbLen[2] ; ++i )
+      D->entry[G->basicOrbit[2][i]][basePt] = 1;
+   while ( processed < found ) {
+      pt = pointList[++processed];
+      for ( gen = G->generator ; gen ; gen = gen->next ) {
+         img = gen->image[pt];
+         if ( !flag[img] ) {
+            flag[img] = TRUE;
+            pointList[++found] = img;
+            for ( i = 1 ; i <= G->degree ; ++i )
+               D->entry[gen->image[i]][img] = D->entry[i][pt];
+         }
+      }
+   }
+
+   /* Write out the design. */
+   sprintf( comment, "Design from group %s, %s_%d orbit of %d.", G->name,
+                     G->name, basePt, orbRep);
+   strcpy( D->name, designLibraryName);
+   if ( matrixFlag )
+      write01Matrix( designFileName, designLibraryName, D, FALSE, comment);
+   else if ( transposeMatrixFlag )
+      write01Matrix( designFileName, designLibraryName, D, TRUE, comment);
+   else
+      writeDesign( designFileName, designLibraryName, D, comment);
+
+   return 0;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadde( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadde( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpe( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
+
diff --git a/src/leon/src/orbdes.h b/src/leon/src/orbdes.h
new file mode 100644
index 0000000..8059eb0
--- /dev/null
+++ b/src/leon/src/orbdes.h
@@ -0,0 +1,7 @@
+#ifndef ORBDES
+#define ORBDES
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/orbit.c b/src/leon/src/orbit.c
new file mode 100644
index 0000000..ce5e896
--- /dev/null
+++ b/src/leon/src/orbit.c
@@ -0,0 +1,59 @@
+/* File orbit.c.  Contains miscellaneous functions for orbit computations. */
+
+#include "group.h"
+
+#include "cstborb.h"
+
+CHECK( orbit)
+
+/* Bug fix for Waterloo C (IBM 370). */
+#if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE)
+#define FIXUP1 short
+#define FIXUP2 (short)
+#else
+#define FIXUP1 Unsigned
+#define FIXUP2
+#endif
+FIXUP1 minimalPointOfOrbit(
+   PermGroup *G,
+   Unsigned level,
+   Unsigned point,
+   UnsignedS *minPointOfOrbit,
+   UnsignedS *minPointKnown,
+   UnsignedS *minPointKnownCount,
+   UnsignedS *invOmega)
+{
+   Unsigned i, found, processed, pt, img, smallestSoFar;
+   Permutation *gen, *firstGen;
+
+   if ( minPointOfOrbit[point] != 0 )
+      return FIXUP2 minPointOfOrbit[point];
+   else {
+
+      /* Construct the orbit of point. */
+      firstGen = linkEssentialGensAtLevel( G, level);
+      found = processed = *minPointKnownCount;
+      minPointKnown[++found] = point;
+      minPointOfOrbit[point] = UNKNOWN;
+      smallestSoFar = point;
+      while ( processed < found ) {
+         pt = minPointKnown[++processed];
+         for ( gen = firstGen ; gen ; gen = gen->xNext ) {
+            img = gen->image[pt];
+            if ( !minPointOfOrbit[img] ) {
+               minPointOfOrbit[img] = UNKNOWN;
+               minPointKnown[++found] = img;
+               if ( invOmega[img] < invOmega[smallestSoFar] )
+                  smallestSoFar = img;
+            }
+         }
+      }
+
+      /* Mark minimum for each element in orbit of point. */
+      for ( i = *minPointKnownCount+1 ; i <= found ; ++i )
+         minPointOfOrbit[minPointKnown[i]] = smallestSoFar;
+      *minPointKnownCount = found;
+
+      return  FIXUP2 smallestSoFar;
+   }
+}
diff --git a/src/leon/src/orbit.h b/src/leon/src/orbit.h
new file mode 100644
index 0000000..8366d38
--- /dev/null
+++ b/src/leon/src/orbit.h
@@ -0,0 +1,14 @@
+#ifndef ORBIT
+#define ORBIT
+
+extern FIXUP1 minimalPointOfOrbit(
+   PermGroup *G,
+   Unsigned level,
+   Unsigned point,
+   UnsignedS *minPointOfOrbit,
+   UnsignedS *minPointKnown,
+   UnsignedS *minPointKnownCount,
+   UnsignedS *invOmega)
+;
+
+#endif
diff --git a/src/leon/src/orblist.c b/src/leon/src/orblist.c
new file mode 100644
index 0000000..9bfaa1b
--- /dev/null
+++ b/src/leon/src/orblist.c
@@ -0,0 +1,676 @@
+/* File orblist.c.  Main program for orblist command, which may be used
+   to list the orbits of a permutation group of a set.  The orbits are written
+   to the standard output.  The format of the
+   command is:
+
+      orblist <options> <permGroup>
+
+   where the meaning of the parameters is as follows:
+
+      <permGroup>: the permutation group whose orbits are to be computed,
+
+   The options are as follows:
+
+      -t:           Only the orbit lengths are listed.
+
+      -r            The orbits are listed in randomized order.  Ignored if -l
+                    option is present.
+
+      -gn:<str>   (Set stabilizer only).  The generators for the newly-created
+                  group created are given names <str>01, <str>02, ...  .  If
+                  omitted, the new generators are named xxxx01, xxxx02, etc.,
+                  where xxxx are the first four characters of the group name.
+
+      -wp:<name>    Write out the ordered partition formed by the orbits.
+
+      -wg:<name>    Write out the group, following base change.  This allows
+                    orblist to be used to change the base of a permutation
+                    group, or merely to construct a base and strong generating
+                    set (using random schreier method).
+
+      -ws:<name>    Like -wg, except when a point list is specified, only the
+                    subgroup stabilizing that point list is written.  Note
+                    -wg and -ws options are mutually exclusive.
+
+      -i            Used with -wg, causes generators to be written in image
+                    format.
+
+      -f:<ptlist>   Here ptlist is a comma-separated list of points.  The
+                    orbits of the (pointwise) stabilizer of these points is
+                    found.
+
+      -q            quite mode.  Orbit information not printed.
+
+      -z            Remove redundant Schreier generators before group is
+                    written out.
+
+      -s:<integer>  Seed for random number generator used in conjunction with
+                    -r option.   */
+
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "addsgen.h"
+#include "chbase.h"
+#include "cstborb.h"
+#include "errmesg.h"
+#include "factor.h"
+#include "new.h"
+#include "randgrp.h"
+#include "readgrp.h"
+#include "readpar.h"
+#include "readpts.h"
+#include "storage.h"
+#include "util.h"
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[]);
+
+static void verifyOptions(void);
+
+GroupOptions options;
+
+
+int main( int argc, char *argv[])
+{
+   char libFileName[MAX_FILE_NAME_LENGTH], partnFileName[MAX_FILE_NAME_LENGTH], 
+        altGroupFileName[MAX_FILE_NAME_LENGTH], 
+        pointSetFileName[MAX_FILE_NAME_LENGTH];
+   char libName[MAX_NAME_LENGTH+1], partnLibName[MAX_NAME_LENGTH+1],
+        altGroupLibName[MAX_NAME_LENGTH+1], pointSetLibName[MAX_NAME_LENGTH+1];
+   char prefix[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1, found, processed, pt, img, orbitCount, orbRep,
+       column, temp, cumLen, len, numOrbitsToWrite;
+   BOOLEAN lengthOnlyOption, randomOption, writePartn, writeGroup, writePtStab,
+           writeOrbit, writeMultipleOrbits, pointListOption, quietOption, 
+           imageFormatFlag, printOrbits, trimStrGenSet, writePS, changeBaseOnly,
+           ptStabOnly, lengthRepOption;
+   unsigned long seed;
+   PermGroup *G;
+   Permutation *gen, *nextGen;
+   Partition *Theta;
+   PointSet *Lambda;
+   UnsignedS *completeOrbit, *startOfOrbitNo, *orbNumberOfPt, *orbOrder;
+   char comment[128], tempStr[12];
+   UnsignedS *pointList = allocIntArrayBaseSize();
+   UnsignedS *orbitRepList = allocIntArrayBaseSize();
+   char *nextPos, *currentPos;
+   UnsignedS stabLevel = 0;
+   FactoredInt factoredOrbLen;
+
+   /* Provide usage information if no arguments (except possibly -chbase
+      or -ptstab) are given. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  orblist [options] permGroup\n");
+      return 0;
+   }
+   else if ( argc == 2 && strcmp(argv[1], "-chbase") == 0 ) {
+      printf( "\nUsage:  chbase permGroup p1,p2,...,pk newGroup\n");
+      return 0;
+   }
+   else if ( argc == 2 && strcmp(argv[1], "-ptstab") == 0 ) {
+      printf( "\nUsage:  ptstab permGroup p1,p2,...,pk stabilizerSubgroup\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1 give limits and
+      return. */
+   if ( argc > 1 && (strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0) ) {
+      showLimits();
+      return 0;
+   }
+
+   /* Check for verify option.  If present, perform verify (Note verify Options
+      terminates program). */
+   if ( argc > 1 && (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0) ) 
+      verifyOptions();
+
+   /* Check for 1 to 3 parameters following options. */
+      for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+                 argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+         ;
+
+      if ( argc - optionCountPlus1 > 3 ) {
+         printf( "\n\nError: At most 3 non-option parameters are allowed.\n");
+         exit(ERROR_RETURN_CODE);
+      }
+
+   /* Process options. */
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   lengthOnlyOption = FALSE;
+   lengthRepOption = FALSE;
+   randomOption = FALSE;
+   writePartn = FALSE;
+   writeGroup = FALSE;
+   writePtStab = FALSE;
+   writePS = FALSE;
+   writeOrbit = FALSE;
+   writeMultipleOrbits = FALSE;
+   changeBaseOnly = FALSE;
+   ptStabOnly = FALSE;
+   pointListOption = FALSE;
+   quietOption = FALSE;
+   imageFormatFlag = FALSE;
+   options.genNamePrefix[0] = '\0';
+   seed = 47;
+   trimStrGenSet = FALSE;
+   strcpy( options.outputFileMode, "w");
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      /* -a option */
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      /* -chbase option */
+      else if ( strcmp(argv[i],"-chbase") == 0 ) 
+         changeBaseOnly = TRUE;
+      /* -gn option (not useful at present) */
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (orblist)", "Invalid value for -gn option")
+      /* -i option */
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      /* -mb option */
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      /* -mv option */
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      /* -overwrite option */
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      /* -p option */
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      /* -ps option */
+      else if ( strncmp( argv[i], "-ps:", 4) == 0 ) {
+         parseLibraryName( argv[i]+4, "", "", pointSetFileName, 
+                           pointSetLibName);
+         writePS = TRUE;
+      }
+      /* -ptstab option */
+      else if ( strcmp(argv[i],"-ptstab") == 0 ) 
+         ptStabOnly = TRUE;
+      /* -q option */
+      else if ( strcmp( argv[i], "-q") == 0 )
+         quietOption = TRUE;
+      /* -r option */
+      else if ( strcmp( argv[i], "-r") == 0 )
+         randomOption = TRUE;
+      /* -s option */
+      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
+         errno = 0;
+         seed = (unsigned long) strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".")
+      }
+      /* -len option */
+      else if ( strcmp( argv[i], "-len") == 0 )
+         lengthOnlyOption = TRUE;
+      /* -lr option */
+      else if ( strcmp( argv[i], "-lr") == 0 )
+         lengthRepOption = TRUE;
+      /* -wno option */
+      else if ( strncmp( argv[i], "-wno:", 5) == 0 ) {
+         writeMultipleOrbits = TRUE;
+         if ( writeOrbit )
+            ERROR( "main (orblist command)", "-wo and -wno are incompatible.")
+         errno = 0;
+         numOrbitsToWrite = (Unsigned) strtol( argv[i]+5, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".")
+      }
+      /* -wo option */
+      else if ( strncmp( argv[i], "-wo:", 4) == 0 ) {
+         writeOrbit = TRUE;
+         if ( writeMultipleOrbits )
+            ERROR( "main (orblist command)", "-wo and -wno are incompatible.")
+         errno = 0;
+         j = 0;
+         currentPos = argv[i]+4;
+         do {
+            orbitRepList[++j] = strtol( currentPos, &nextPos, 0);
+            if ( errno )
+               ERROR( "main (orblist command)", "Invalid syntax in -wo option.")
+            currentPos = nextPos+1;
+         } while ( *nextPos == ',' && j < options.maxBaseSize );
+         orbitRepList[j+1] = 0;
+         if ( *nextPos != '\0' )
+            ERROR( "main (orblist command)", "orbitRepList invalid or too long.")
+      }
+      /* -wp option */
+      else if ( strncmp( argv[i], "-wp:", 4) == 0 ) {
+         writePartn = TRUE;
+         if ( writeGroup )
+            ERROR( "main (orblist command)", "-wg and -ws are incompatible.")
+         parseLibraryName( argv[i]+4, "", "", partnFileName, partnLibName);
+      }
+      else if ( strcmp( argv[i], "-z") == 0 )
+         trimStrGenSet = TRUE;
+      else
+            ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* -ps option requires -wo and -wno, and conversely. Check this. */
+   if ( writePS ^ (writeOrbit | writeMultipleOrbits) )
+      ERROR( "main (orblist command)", 
+             "-ps option requires -wo or -wno, and conversely")
+
+   /* If -chbase or -ptstab options has been specified, check for 3 command
+      line arguments. */
+   if ( (changeBaseOnly || ptStabOnly) && (argc - optionCountPlus1 != 3) )
+      ERROR( "main (orblist command)", 
+             "3 non-option parameters are needed for chbase or ptstab");
+      
+   /* Compute name for group file. */
+   parseLibraryName( argv[optionCountPlus1], prefix, "", libFileName, libName);
+
+   /* Process the point list, if present. */
+   if ( argc - optionCountPlus1 >= 2 ) {
+      pointListOption = TRUE;
+      errno = 0;
+      j = 0;
+      currentPos = argv[optionCountPlus1+1];
+      do {
+         pointList[++j] = strtol( currentPos, &nextPos, 0);
+         if ( errno )
+            ERROR( "main (orblist command)", "Invalid point in -f option.")
+         currentPos = nextPos+1;
+      } while ( *nextPos == ',' && j < options.maxBaseSize );
+      pointList[j+1] = 0;
+      if ( *nextPos != '\0' )
+         ERROR( "main (orblist command)", "Pointlist invalid or too long.")
+   }
+
+   /* Process name of the point stabilizer to save, or the name under which
+      to save the group with its new base. */
+   if ( argc - optionCountPlus1 == 3 ) {
+      if ( changeBaseOnly )
+         writeGroup = TRUE;
+      else
+         writePtStab = TRUE;
+      parseLibraryName( argv[optionCountPlus1+2], "", "", altGroupFileName, altGroupLibName);
+   }
+
+   /* Read in group. */
+   if ( pointListOption || writeGroup || writePtStab )
+      G = readPermGroup( libFileName, libName, 0, "Generate");
+   else
+      G = readPermGroup( libFileName, libName, 0, "");
+
+   /* Change base if requested, and find level in new base of stabilizer
+      of pointList. */
+   if ( pointListOption ) {
+      changeBase( G, pointList);
+      if ( trimStrGenSet )
+         removeRedunSGens( G, 1);
+      if ( !quietOption ) {
+         printf( "\n  New base: ");
+         for ( j = 1 ; j <= G->baseSize ; ++j)
+            printf( " %u", G->base[j]);
+         printf( "\n");
+      }
+      if ( changeBaseOnly ) {
+         strcpy( G->name, altGroupLibName);
+         G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         nameGenerators( G, options.genNamePrefix);
+         writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
+         return 0;
+      }
+      for ( stabLevel = 1 ; stabLevel <= G->baseSize ; ++stabLevel ) {
+         for ( j = 1 ; pointList[j] != 0 && pointList[j] != G->base[stabLevel] ;
+                       ++j )
+            ;
+         if ( pointList[j] == 0 )
+            break;
+      }
+   }
+   else if ( !writeGroup && !writePtStab )
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         gen->level = 0;
+
+   /* Allocate arrays completeOrbit, startOfOrbitNo, orbNumberOfPt, and
+      orbOrder. */
+   completeOrbit = allocIntArrayDegree();
+   startOfOrbitNo = allocIntArrayDegree();
+   orbNumberOfPt = allocIntArrayDegree();
+   orbOrder = allocIntArrayDegree();
+   if ( writePartn ) {
+      Theta = allocPartition();
+      Theta->degree = 0;                      /* To be adjusted */
+      strcpy( Theta->name, partnLibName);
+      Theta->pointList = allocIntArrayDegree();
+      Theta->invPointList = allocIntArrayDegree();
+      Theta->cellNumber = allocIntArrayDegree();
+      Theta->startCell = allocIntArrayDegree();
+   }
+   if ( writePS ) {
+      Lambda = allocPointSet();
+      strcpy( Lambda->name, pointSetLibName);
+      Lambda->degree = 0;
+      Lambda->size = 0;
+      Lambda->pointList = allocIntArrayDegree();
+      Lambda->inSet = allocBooleanArrayDegree();
+      for ( j = 1 ; j <= G->degree ; ++j )
+         Lambda->inSet[j] = FALSE;
+   }
+
+   /* Construct the orbits, one by one in order. */
+   found = processed = orbitCount = 0;
+   for ( i = 1 ; i <= G->degree ; ++i )
+      orbNumberOfPt[i] = 0;
+   for ( orbRep = 1 ; orbRep <= G->degree ; ++orbRep )
+      if ( !orbNumberOfPt[orbRep] ) {
+         completeOrbit[++found] = orbRep;
+         startOfOrbitNo[++orbitCount] = found;
+         orbNumberOfPt[orbRep] = orbitCount;
+         while ( processed < found ) {
+            pt = completeOrbit[++processed];
+            for ( gen = G->generator ; gen ; gen = gen->next )
+               if ( gen->level >= stabLevel ) {
+                  img = gen->image[pt];
+                  if ( !orbNumberOfPt[img] ) {
+                     completeOrbit[++found] = img;
+                     orbNumberOfPt[img] = orbitCount;
+                  }
+               }
+         }
+      }
+
+   startOfOrbitNo[orbitCount+1] = G->degree+1;
+
+   /* Write out the orbits. */
+   if ( !quietOption && (lengthOnlyOption || lengthRepOption) ) {
+      column = printf( "\n Orbit lengths for group %s", G->name);
+      if ( pointListOption ) {
+         column += printf( " (Stabilizer of");
+         for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+            column += printf( " ");
+            column += printf( "%d", pointList[j]);
+         }
+         column += printf( ")");
+      }
+      column += printf( ":  ");
+      for ( i = 1 ; i <= orbitCount ; ++i ) {
+         if ( column > 66 ) {
+            printf( "\n   ");
+            column = 4;
+         }
+         if ( lengthRepOption )
+         column += printf( "%u:", completeOrbit[startOfOrbitNo[i]]);
+         column += printf( "%u ", startOfOrbitNo[i+1] -
+                                          startOfOrbitNo[i]);
+      }
+      printf( "\n");
+   }
+
+   printOrbits = !quietOption && !lengthOnlyOption && !lengthRepOption;
+   if ( printOrbits || writePartn || writeMultipleOrbits ) {
+      if ( printOrbits )
+         printf( "\n Orbits for group %s.", G->name);
+      if ( printOrbits && pointListOption ) {
+         printf( " (Stabilizer of");
+         for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+            printf( " ");
+            printf( "%d", pointList[j]);
+         }
+         printf( ")");
+      }
+      if ( printOrbits )
+         printf( "\n\n    Repr  Length  CumLen     Points\n");
+      for ( i = 1 ; i <= orbitCount ; ++i )
+         orbOrder[i] = i;
+      if ( randomOption ) {
+         initializeSeed (seed);
+         for ( i = 1 ; i <= orbitCount-1 ; ++i ) {
+            j = randInteger( i, orbitCount);
+            EXCHANGE( orbOrder[i], orbOrder[j], temp);
+         }
+      }
+      cumLen = 0;
+      for ( i = 1 ; i <= orbitCount ; ++i ) {
+         len = startOfOrbitNo[orbOrder[i]+1] - startOfOrbitNo[orbOrder[i]];
+         cumLen += len;
+         if ( printOrbits )
+            printf( "\n %6d %6d %6d       ",
+                 completeOrbit[startOfOrbitNo[orbOrder[i]]], len, cumLen);
+         column = 28;
+         for ( j = startOfOrbitNo[orbOrder[i]] ;
+                           j < startOfOrbitNo[orbOrder[i]+1] ; ++j ) {
+            if ( printOrbits && column > 71 ) {
+               printf( "\n                            ");
+               column = 28;
+            }
+            if ( printOrbits )
+               column = column + printf( "%d ", completeOrbit[j]);
+            if ( writePartn ) {
+               Theta->pointList[++Theta->degree] = completeOrbit[j];
+               Theta->invPointList[completeOrbit[j]] = Theta->degree;
+               Theta->cellNumber[completeOrbit[j]] = i;
+               if ( j == startOfOrbitNo[orbOrder[i]] )
+                  Theta->startCell[i] = Theta->degree;
+            }
+            if ( writeMultipleOrbits && i <= numOrbitsToWrite ) {
+               Lambda->pointList[++Lambda->size] = completeOrbit[j];
+               Lambda->inSet[completeOrbit[j]] = TRUE;
+            }
+         }
+      }
+   }
+   if ( printOrbits )
+      printf( "\n");
+
+   if ( writePartn ) {
+      strcpy( comment, "Orbit partition of group ");
+      strcat( comment, G->name);
+      if ( pointListOption ) {
+         strcat( comment, ", stabilizer of");
+         for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+            sprintf( tempStr, " %u", pointList[j]);;
+            strcat( comment, tempStr);
+         }
+      }
+      strcpy( Theta->name, partnLibName);
+      Theta->startCell[orbitCount+1] = Theta->degree + 1;
+      writePartition( partnFileName, partnLibName, comment, Theta);
+   }
+
+   if ( writeMultipleOrbits ) {
+      strcpy( comment, "First ");
+      sprintf( tempStr, "%u", numOrbitsToWrite);
+      strcat( comment, tempStr);
+      strcat( comment, " orbits of group ");
+      strcat( comment, G->name);
+      if ( pointListOption ) {
+         strcat( comment, "(stabilizer of");
+         for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+            sprintf( tempStr, " %u", pointList[j]);;
+            strcat( comment, tempStr);
+         strcat( comment, ")");
+         }
+      }
+      writePointSet( pointSetFileName, pointSetLibName, comment, Lambda);
+   }
+
+   if ( writeOrbit ) {
+      strcpy( comment, "Orbit(s) in group ");
+      strcat( comment, G->name);
+      if ( pointListOption ) {
+         strcat( comment, "(stabilizer of");
+         for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+            sprintf( tempStr, " %u", pointList[j]);;
+            strcat( comment, tempStr);
+         strcat( comment, ")");
+         }
+      }
+      strcat( comment, " of point(s)");
+      for ( j = 1 ; orbitRepList[j] != 0 ; ++j ) {
+         sprintf( tempStr, " %u", orbitRepList[j]);;
+         strcat( comment, tempStr);
+      }
+      for ( i = 1 ; orbitRepList[i] != 0 ; ++i )
+         if ( !Lambda->inSet[orbitRepList[i]] ) 
+            for ( j = startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]] ;
+                  j < startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]+1] ; ++j ) 
+               Lambda->pointList[++Lambda->size] = completeOrbit[j];
+      for ( j = 1 ; j < Lambda->size ; ++j )
+         Lambda->inSet[Lambda->pointList[j]] = TRUE;
+      writePointSet( pointSetFileName, pointSetLibName, comment, Lambda);
+   }
+
+   if ( writeGroup ) {
+      strcpy( G->name, altGroupLibName);
+      G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+      nameGenerators( G, options.genNamePrefix);
+      writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
+   }
+
+   if ( writePtStab ) {
+      if ( trimStrGenSet )
+         removeRedunSGens( G, 1);
+      /* First remove generators from G having level less than stabLevel, and
+         adjust the order.  Note, after here, the group table is not valid,
+         but it is adequate for writing out (writePermGroup). */
+      for ( gen = G->generator ; gen ; gen = nextGen ) {
+         nextGen = gen->next;
+         if ( gen->level < stabLevel ) {
+            if ( gen->last )
+               gen->last->next = nextGen;
+            else
+               G->generator = nextGen;
+            if ( nextGen )
+               nextGen->last = gen->last;
+            deletePermutation( gen);
+         }
+      }
+      for ( i = 1 ; i < stabLevel ; ++i ) {
+         factoredOrbLen = factorize( G->basicOrbLen[i]);
+         factDivide( G->order, &factoredOrbLen);
+         G->basicOrbLen[i] = 1;
+      }
+
+      /* Now write out the modified G. */
+      strcpy( comment, "Pointwise stabilizer in %s of ");
+      for ( j = 1 ; pointList[j] != 0 ; ++j ) {
+         sprintf( tempStr, " %d", pointList[j]);
+         strcat( comment, tempStr);
+      }
+      strcpy( G->name, altGroupLibName);
+      G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+      nameGenerators( G, options.genNamePrefix);
+      writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
+   }
+
+   /* Free pseudo-stack storage. */
+   freeIntArrayBaseSize( pointList);
+   freeIntArrayBaseSize( orbitRepList);
+
+   /* Terminate. */
+   return 0;
+}
+
+
+/*-------------------------- nameGenerators ------------------------------*/
+
+static void nameGenerators(
+   PermGroup *const H,
+   char genNamePrefix[])
+{
+   Unsigned i;
+   Permutation *gen;
+
+   if ( genNamePrefix[0] == '\0' ) {
+      strncpy( genNamePrefix, H->name, 4);
+      genNamePrefix[4] = '\0';
+   }
+   for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) {
+      strcpy( gen->name, genNamePrefix);
+      sprintf( gen->name + strlen(gen->name), "%02d", i);
+   }
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpa( CompileOptions *cOpts);
+   extern void xreadpt( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcstbor( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpa( &mainOpts);
+   xreadpt( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/orblist.h b/src/leon/src/orblist.h
new file mode 100644
index 0000000..edc390c
--- /dev/null
+++ b/src/leon/src/orblist.h
@@ -0,0 +1,7 @@
+#ifndef ORBLIST
+#define ORBLIST
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/orbrefn.c b/src/leon/src/orbrefn.c
new file mode 100644
index 0000000..f46d53c
--- /dev/null
+++ b/src/leon/src/orbrefn.c
@@ -0,0 +1,788 @@
+/* File orbrefn.c.  Contains functions to apply refinements OOO_G (orbit
+   refinements) and to check OOO_G-reducibility, as follows:
+
+      orbRefine:          A refinement family based on orbit structure (OOO).
+
+      isOrbReducible:     A function to check OOO-reducibility. */
+
+#include <assert.h>
+#include <stddef.h>
+
+#include <stdlib.h>
+
+#include "group.h"
+#include "errmesg.h"
+#include "partn.h"
+#include "storage.h"
+
+CHECK( orbref)
+
+#define  SIZE_OF_ORBIT( j)  ( startOfOrbitNo[j+1] - startOfOrbitNo[j] )
+
+
+#define HASH( i, j)  ( (7L * i + j) % hashTableSize )
+
+typedef struct RefnListEntry {
+   Unsigned i;                     /* Cell number in UpsilonTop to split. */
+   Unsigned j;                     /* Orbit number of G^(level) in split. */
+   Unsigned newCellSize;           /* Size of new cell created by split. */
+   struct RefnListEntry *hashLink; /* List of refns with same hash value. */
+   struct RefnListEntry *next;     /* Next refn on list of all refinements. */
+   struct RefnListEntry *last;     /* Last refn on list of all refinements. */
+} RefnListEntry;
+
+static struct {
+   Unsigned groupCount;
+   PermGroup *group[10];
+   RefnListEntry **hashTable[10];
+   RefnListEntry *refnList[10];
+   Unsigned oldLevel[10];
+   RefnListEntry *freeListHeader[10];
+   RefnListEntry *inUseListHeader[10];
+} refnData = {0};
+
+static Unsigned trueGroupCount, hashTableSize;
+static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader;
+
+
+/*-------------------------- initializeOrbRefine --------------------------*/
+
+void initializeOrbRefine( PermGroup *G)
+{
+   /* Compute hash table size. */
+   if ( refnData.groupCount == 0 ) {
+      hashTableSize = G->degree;
+      while ( hashTableSize > 11 &&
+              (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 ||
+              hashTableSize % 5 == 0 || hashTableSize % 7 == 0) )
+         --hashTableSize;
+   }
+
+   if ( refnData.groupCount < 9) {
+      refnData.group[refnData.groupCount] = G;
+      refnData.hashTable[refnData.groupCount] = allocPtrArrayDegree();
+      refnData.refnList[refnData.groupCount] =
+                    malloc( G->degree * (sizeof(RefnListEntry)+2) );
+      if ( !refnData.refnList[refnData.groupCount] )
+         ERROR( "initializeOrbRefine", "Memory allocation error.")
+      refnData.oldLevel[refnData.groupCount] = UNKNOWN;
+      ++refnData.groupCount;
+      trueGroupCount = refnData.groupCount;
+   }
+   else
+      ERROR( "initializeOrbRefine", "Orbit refinement limited to ten groups.")
+}
+
+
+/*-------------------------- orbRefine ------------------------------------*/
+
+/* The function implements the refinement family orbRefine (denoted
+   OOO_G in the reference).  This family OOO_G consists of the elementary
+   refinements OOO_{G,Psi,i,j}, where G is a permutation group, Psi is an
+   ordered partition (which we always assume belongs to PsiStack), and i and
+   j will be integers.  Application of OOO_{G,Psi,i,j} to the top partition
+   UpsilonTop of UpsilonStack splits off from UpsilonTop_i those points in
+   (Psi_j)^t, where t is in G and t maps fix(PsiTop) to fix(UpsilonTop).
+
+   The family parameters are :          The last two parms below are not really
+        familyParm[0].ptrParm: G        family parms; they must be filled in
+        familyParm[1].intParm: level    in before each call. Note G^(level) =
+        familyParm[3].ptrParm: tWord    G_fix(Psi_h).
+   The refinement parameters are:
+        refnParm[0].intParm:   i
+        refnParm[1].intParm:   j
+
+   Note that, instead of passing Psi explicity, we pass G as a family parm
+   and level and t as (not true) family parms. */
+
+SplitSize orbRefine(
+   const RefinementParm familyParm[],
+   const RefinementParm refnParm[],
+   PartitionStack *const UpsilonStack)
+{
+   Unsigned        level = familyParm[1].intParm;
+   THatWordType    *tWord = familyParm[2].ptrParm;
+   PermGroup       *G = (PermGroup *) familyParm[0].ptrParm;
+   Unsigned  i =  refnParm[0].intParm,
+             j =  refnParm[1].intParm;
+   Unsigned  left, right, currentPos, m, tWordLen, savePointLeft,
+             savePointRight;
+   register Unsigned  pt;
+   register UnsignedS *tw0, *tw1, *tw2;
+   UnsignedS *tw3, *tw4, *tw5, *tw6, *tw7;
+   UnsignedS **p;
+   SplitSize split;
+   Unsigned  *const pointList = UpsilonStack->pointList,
+             *const invPointList = UpsilonStack->invPointList,
+             *const cellNumber = UpsilonStack->cellNumber,
+             *const parent = UpsilonStack->parent,
+             *const startCell = UpsilonStack->startCell,
+             *const cellSize = UpsilonStack->cellSize;
+   Unsigned  startNextCell = startCell[i] + cellSize[i];
+   UnsignedS  *completeOrbit = G->completeOrbit[level],
+              *orbNumberOfPt = G->orbNumberOfPt[level],
+              *startOfOrbitNo = G->startOfOrbitNo[level];
+
+   /* Compute the length of the word. */
+   for ( tWordLen = 0 ; tWord->invWord[tWordLen] != NULL ; ++tWordLen )
+      ;
+
+   /* Here we start to split cell i of UpsilonTop. */
+   if ( cellSize[i] <= SIZE_OF_ORBIT(j) ) {
+
+      /* If cell i of UpsilonTop is smaller than cell j of G_{fix(Psi_h)},
+         we traverse the points of cell i of UpsilonTop. */
+      tw0 = tWord->invWord[0];
+      tw1 = tWord->invWord[1];
+      tw2 = tWord->invWord[2];
+      tw3 = tWord->invWord[3];
+      tw4 = tWord->invWord[4];
+      tw5 = tWord->invWord[5];
+      tw6 = tWord->invWord[6];
+      tw7 = tWord->invWord[7];
+      left = startCell[i]-1;
+      right = startNextCell;
+      savePointLeft = pointList[left];
+      savePointRight = pointList[right];
+      pointList[left] = 0;
+      pointList[right] = G->degree + 1;
+      orbNumberOfPt[0] = 0;
+      orbNumberOfPt[G->degree+1] = j;
+      switch( tWordLen ) {
+         case 0:
+            for( ; ; ) {
+               do {
+                  pt = pointList[++left];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = pointList[--right];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 1:
+            for( ; ; ) {
+               do {
+                  pt = tw0[pointList[++left]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw0[pointList[--right]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 2:
+            for( ; ; ) {
+               do {
+                  pt = tw1[tw0[pointList[++left]]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw1[tw0[pointList[--right]]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 3:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 4:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw3[pt];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw3[pt];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 5:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw4[tw3[pt]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw4[tw3[pt]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 6:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw5[tw4[tw3[pt]]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw5[tw4[tw3[pt]]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 7:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         case 8:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+                  pt = tw7[pt];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+                  pt = tw7[pt];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+         default:
+            for( ; ; ) {
+               do {
+                  pt = tw2[tw1[tw0[pointList[++left]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+                  pt = tw7[pt];
+                  for ( p = tWord->invWord+8 ; *p ; ++p )
+                     pt = (*p)[pt];
+               } while ( orbNumberOfPt[pt] != j );
+               do {
+                  pt = tw2[tw1[tw0[pointList[--right]]]];
+                  pt = tw6[tw5[tw4[tw3[pt]]]];
+                  pt = tw7[pt];
+                  for ( p = tWord->invWord+8 ; *p ; ++p )
+                     pt = (*p)[pt];
+               } while ( orbNumberOfPt[pt] == j );
+               if ( left < right ) {
+                  pt = pointList[right];
+                  pointList[right] = pointList[left];
+                  pointList[left] = pt;
+                  invPointList[pointList[right]] = right;
+                  invPointList[pt] = left;
+               }
+               else
+                  break;
+            }
+            ++right;
+            break;
+      }
+      pointList[startCell[i]-1] = savePointLeft;
+      pointList[startNextCell] = savePointRight;
+   }
+   else {
+
+      /* If cell j of G_{fix(Psi_h)} is smaller, we traverse the points of
+         G_{fix(Psi_h) = G^(level)}. */
+      tw0 = tWord->revWord[0];
+      tw1 = tWord->revWord[1];
+      tw2 = tWord->revWord[2];
+      tw3 = tWord->revWord[3];
+      tw4 = tWord->revWord[4];
+      tw5 = tWord->revWord[5];
+      tw6 = tWord->revWord[6];
+      tw7 = tWord->revWord[7];
+      switch( tWordLen ) {
+         case 0:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = completeOrbit[m];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 1:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw0[completeOrbit[m]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 2:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw1[tw0[completeOrbit[m]]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 3:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 4:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw3[pt];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 5:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw4[tw3[pt]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 6:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw5[tw4[tw3[pt]]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 7:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw6[tw5[tw4[tw3[pt]]]];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         case 8:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw6[tw5[tw4[tw3[pt]]]];
+               pt = tw7[pt];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+         default:
+            for ( m = startOfOrbitNo[j] , right = startNextCell ;
+                  m < startOfOrbitNo[j+1] ; ++m ) {
+               pt = tw2[tw1[tw0[completeOrbit[m]]]];
+               pt = tw6[tw5[tw4[tw3[pt]]]];
+               pt = tw7[pt];
+               for ( p = tWord->revWord+8 ; *p ; ++p )
+                  pt = (*p)[pt];
+               if ( cellNumber[pt] == i ) {
+                  currentPos = invPointList[pt];
+                  pointList[currentPos] = pointList[--right];
+                  pointList[right] = pt;
+                  invPointList[pt] = right;
+                  invPointList[pointList[currentPos]] = currentPos;
+               }
+            }
+            break;
+      }
+   }
+
+   if ( right == startNextCell ) {
+
+      /* If the refinement failed to split UpsilonTop_i, set return value and
+         return to caller.  Note that, in this case, the changes made to
+         UpsilonStack above are harmless. */
+      split.oldCellSize = cellSize[i];
+      split.newCellSize = 0;
+      return split;
+   }
+   else {
+
+      /* If the refinement did split UpsilonTop_i, we push the new refinement
+         onto UpsilonStack before returning. */
+      ++UpsilonStack->height;
+      for ( m = right ; m < startNextCell ; ++m )
+         cellNumber[pointList[m]] = UpsilonStack->height;
+      startCell[UpsilonStack->height] = right;
+      parent[UpsilonStack->height] = i;
+      cellSize[UpsilonStack->height] = startNextCell - right;
+      cellSize[i] -= cellSize[UpsilonStack->height];
+      split.oldCellSize = cellSize[i];
+      split.newCellSize = cellSize[UpsilonStack->height];
+      return split;
+   }
+}
+
+/*-------------------------- deleteRefnListEntry --------------------------*/
+
+static void deleteRefnListEntry(
+   RefnListEntry *entryToDelete,
+   Unsigned hashPosition,             /* hashTableSize+1 indicates unknown */
+   RefnListEntry *prevHashListEntry)
+{
+   if ( hashPosition > hashTableSize ) {
+      hashPosition = HASH( entryToDelete->i, entryToDelete->j);
+      if ( hashTable[hashPosition] == entryToDelete )
+         prevHashListEntry = NULL;
+      else {
+         prevHashListEntry = hashTable[hashPosition];
+         while ( prevHashListEntry->hashLink != entryToDelete )
+             prevHashListEntry = prevHashListEntry->hashLink;
+      }
+   }
+   if ( prevHashListEntry )
+      prevHashListEntry->hashLink = entryToDelete->hashLink;
+   else
+      hashTable[hashPosition] = entryToDelete->hashLink;
+   if ( entryToDelete->last )
+      entryToDelete->last->next = entryToDelete->next;
+   else
+      inUseListHeader = entryToDelete->next;
+   if ( entryToDelete->next )
+      entryToDelete->next->last = entryToDelete->last;
+   entryToDelete->next = freeListHeader;
+   freeListHeader = entryToDelete;
+}
+
+
+/*-------------------------- isOrbReducible -------------------------------*/
+
+RefinementPriorityPair isOrbReducible(
+   const RefinementFamily *family,        /* The refinement family mapping
+                                             must be orbRefine; family parm[0]
+                                             is the group. */
+   const PartitionStack *const UpsilonStack)
+{
+   BOOLEAN cellWillSplit;
+   Unsigned  i, j, m, groupNumber, hashPosition, newCellNumber, oldCellNumber,
+             count;
+   unsigned long minPriority, thisPriority;
+   UnsignedS  *oldLevelAddr;
+   UnsignedS  *const pointList = UpsilonStack->pointList,
+              *const startCell = UpsilonStack->startCell,
+              *const cellSize = UpsilonStack->cellSize;
+   PermGroup *G = family->familyParm_L[0].ptrParm;
+   Unsigned   level = family->familyParm_L[1].intParm;
+   UnsignedS  *orbNumberOfPt = G->orbNumberOfPt[level];
+   UnsignedS  *const startOfOrbitNo = G->startOfOrbitNo[level];
+   RefinementPriorityPair reducingRefn;
+   RefnListEntry *refnList;
+   RefnListEntry *p, *oldP, *position, *minPosition;
+
+   /* Check that the refinement mapping really is pointStabRefn, as required,
+      and that the group is one for which initializeOrbRefine has been
+      called. */
+   if ( family->refine != orbRefine )
+      ERROR( "isOrbReducible", "Error: incorrect refinement mapping");
+   for ( groupNumber = 0 ; groupNumber < refnData.groupCount &&
+                           refnData.group[groupNumber] != G ;
+                           ++groupNumber )
+      ;
+   if ( groupNumber >= refnData.groupCount )
+      ERROR( "isOrbReducible", "Routine not initialized for group.")
+   hashTable = refnData.hashTable[groupNumber];
+   refnList = refnData.refnList[groupNumber];
+   oldLevelAddr = &refnData.oldLevel[groupNumber];
+
+   /* If this is a new level, we reconstruct the list of potential refinements
+      from scratch.  */
+   if ( level != *oldLevelAddr ) {
+
+      /* Initialize data structures. */
+      *oldLevelAddr = level;
+      for ( i = 0 ; i < hashTableSize ; ++i )
+         hashTable[i] = NULL;
+      freeListHeader = &refnList[0];
+      inUseListHeader = NULL;
+      for ( i = 0 ; i < G->degree ; ++i)
+         refnList[i].next = &refnList[i+1];
+      refnList[G->degree].next = NULL;
+
+   /* Process the i'th cell of the top partition for i = 1,2,...., finding all
+      possible refinements. */
+      for ( i = 1 ; i <= UpsilonStack->height ; ++i ) {
+
+         /* First check if the i'th cell will split.  If not, proceed directly
+            to the next cell. */
+         for ( m = startCell[i]+1 , cellWillSplit = FALSE ;
+               m < startCell[i] + cellSize[i] && !cellWillSplit ; ++m )
+            if ( orbNumberOfPt[ pointList[m] ] !=
+                 orbNumberOfPt[ pointList[m-1] ] )
+               cellWillSplit = TRUE;
+         if ( !cellWillSplit )
+            continue;
+
+         /* Now find all splittings of the i'th cell and insert them into the
+            list in sorted order. */
+         for ( m = startCell[i] ; m < startCell[i]+cellSize[i] ; ++m ) {
+            j = orbNumberOfPt[pointList[m]];
+            hashPosition = HASH( i, j);
+            p = hashTable[hashPosition];
+            while ( p && (p->i != i || p->j != j) )
+               p = p->hashLink;
+            if ( p )
+               ++p->newCellSize;
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isOrbReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = i;
+               p->j = j;
+               p->newCellSize = 1;
+            }
+         }
+      }
+   }
+
+   /* If this is not a new level, we merely fix up the old list.  The entries
+      for the new cell must be created and those for its parent must be
+      adjusted. */
+   else {
+      freeListHeader = refnData.freeListHeader[groupNumber];
+      inUseListHeader = refnData.inUseListHeader[groupNumber];
+      newCellNumber = UpsilonStack->height;
+      oldCellNumber = UpsilonStack->parent[UpsilonStack->height];
+      for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ;
+            m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) {
+         if ( m > startCell[newCellNumber] &&
+              orbNumberOfPt[pointList[m]] != orbNumberOfPt[pointList[m-1]] )
+            cellWillSplit = TRUE;
+         j = orbNumberOfPt[pointList[m]];
+         hashPosition = HASH( oldCellNumber, j);
+         p = hashTable[hashPosition];
+         oldP = NULL;
+         while ( p && (p->i != oldCellNumber || p->j != j) ) {
+            oldP = p;
+            p = p->hashLink;
+         }
+         if ( p ) {
+            --p->newCellSize;
+            if ( p->newCellSize == 0 )
+               deleteRefnListEntry( p, hashPosition, oldP);
+         }
+      }
+      if ( cellWillSplit )
+         for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ;
+               m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) {
+            j = orbNumberOfPt[pointList[m]];
+            hashPosition = HASH( newCellNumber, j);
+            p = hashTable[hashPosition];
+            while ( p && (p->i != newCellNumber || p->j != j) )
+               p = p->hashLink;
+            if ( p )
+               ++p->newCellSize;
+            else {
+               if ( !freeListHeader )
+                  ERROR( "isOrbReducible",
+                         "Refinement list exceeded bound (should not occur).")
+               p = freeListHeader;
+               freeListHeader = freeListHeader->next;
+               p->next = inUseListHeader;
+               if ( inUseListHeader )
+                  inUseListHeader->last = p;
+               p->last = NULL;
+               inUseListHeader = p;
+               p->hashLink = hashTable[hashPosition];
+               hashTable[hashPosition] = p;
+               p->i = newCellNumber;
+               p->j = j;
+               p->newCellSize = 1;
+            }
+         }
+   }
+
+   /* Now we return a refinement of minimal priority.  While searching the
+      list, we also check for refinements invalidated by previous splittings. */
+   minPosition = inUseListHeader;
+   minPriority = ULONG_MAX;
+   count = 1;
+   for ( position = inUseListHeader ; position && count < 100 ;
+         position = position->next , ++count ) {
+      while ( position && position->newCellSize == cellSize[position->i] ) {
+         p = position;
+         position = position->next;
+         deleteRefnListEntry( p, hashTableSize+1, NULL);
+      }
+      if ( !position )
+         break;
+      if ( (thisPriority = (unsigned long) position->newCellSize +
+           MIN( cellSize[position->i], SIZE_OF_ORBIT(position->j) )) <
+           minPriority ) {
+         minPriority = thisPriority;
+         minPosition = position;
+      }
+   }
+   if ( minPriority == ULONG_MAX )
+      reducingRefn.priority = IRREDUCIBLE;
+   else {
+      reducingRefn.refn.family = family;
+      reducingRefn.refn.refnParm[0].intParm = minPosition->i;
+      reducingRefn.refn.refnParm[1].intParm = minPosition->j;
+      reducingRefn.priority = thisPriority;
+   }
+
+   /* If this is the last call to isOrbReducible for this group (UpsilonStack
+      has height degree-1), free memory and reinitialize. */
+   if ( UpsilonStack->height == G->degree - 1 ) {
+      freePtrArrayDegree( refnData.hashTable[groupNumber]);
+      free( refnData.refnList[groupNumber]);
+      refnData.group[groupNumber] = NULL;
+      --trueGroupCount;
+      if ( trueGroupCount == 0 )
+         refnData.groupCount = 0;
+   }
+
+   refnData.freeListHeader[groupNumber] = freeListHeader;
+   refnData.inUseListHeader[groupNumber] =inUseListHeader;
+   return reducingRefn;
+}
diff --git a/src/leon/src/orbrefn.h b/src/leon/src/orbrefn.h
new file mode 100644
index 0000000..f518ab3
--- /dev/null
+++ b/src/leon/src/orbrefn.h
@@ -0,0 +1,20 @@
+#ifndef ORBREFN
+#define ORBREFN
+
+extern void initializeOrbRefine( PermGroup *G)
+;
+
+extern SplitSize orbRefine(
+   const RefinementParm familyParm[],
+   const RefinementParm refnParm[],
+   PartitionStack *const UpsilonStack)
+;
+
+extern RefinementPriorityPair isOrbReducible(
+   const RefinementFamily *family,        /* The refinement family mapping
+                                             must be orbRefine; family parm[0]
+                                             is the group. */
+   const PartitionStack *const UpsilonStack)
+;
+
+#endif
diff --git a/src/leon/src/parimage.sh b/src/leon/src/parimage.sh
new file mode 100755
index 0000000..1e0a441
--- /dev/null
+++ b/src/leon/src/parimage.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+setstab -image -partn $*
diff --git a/src/leon/src/parstab.sh b/src/leon/src/parstab.sh
new file mode 100755
index 0000000..feb696d
--- /dev/null
+++ b/src/leon/src/parstab.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+setstab -partn $*
diff --git a/src/leon/src/partn.c b/src/leon/src/partn.c
new file mode 100644
index 0000000..c66d14b
--- /dev/null
+++ b/src/leon/src/partn.c
@@ -0,0 +1,159 @@
+/* File partn.h.  Contains miscellaneous short functions for computing with
+   partitions associated with permutation groups:
+
+      constructOrbitPartition:  This function constructs the  partition of
+                                the set of points corresponding to the orbits
+                                of the stabilizer of an initial segment of the
+                                base in a permutation group.
+
+      popToHeight:              This function pops partitions from a partition
+                                stack until the stack height reaches a
+                                designated value.
+
+      cellNumberAtDepth         For a given point alpha, his functions returns
+                                the number of the cell of the partition at a
+                                given depth that contains alpha.  (Note that,
+                                for the top partition, it is not necessary to
+                                invoke this function. */
+
+
+#include "group.h"
+#include "storage.h"
+#include "permgrp.h"
+
+CHECK( partn)
+
+
+/*-------------------------- popToHeight -----------------------------------*/
+
+/* This function pops partitions from a partition stack until the height
+   reaches a specified value. */
+
+void popToHeight(
+   PartitionStack *piStack,     /* The partition stack to pop. */
+   Unsigned newHeight)          /* The new height for the stack. */
+{
+   Unsigned ht, parent, i, lastPlus1;
+   while ( (ht = piStack->height) > newHeight ) {
+      --piStack->height;
+      parent = piStack->parent[ht];
+      for ( i = piStack->startCell[ht] , lastPlus1 = i +
+            piStack->cellSize[ht] ; i < lastPlus1 ; ++i )
+         piStack->cellNumber[piStack->pointList[i]] = parent;
+      piStack->cellSize[parent] += piStack->cellSize[ht];
+   }
+}
+
+
+/*-------------------------- xPopToLevel -----------------------------------*/
+
+/* This function pops cell partitions from a cell partition stack until the 
+    application level reaches a specified value. */
+
+void xPopToLevel(
+   CellPartitionStack *xPiStack,   /* The cell partition stack to pop. */
+   UnsignedS *applyAfterLevel,
+   Unsigned newHeight)             /* The new height for the stack. */
+{
+   Unsigned ht, parentGroup, i, lastPlus1;
+   while ( applyAfterLevel[ht = xPiStack->height] > newHeight ) {
+      --xPiStack->height;
+      parentGroup = xPiStack->parentGroup[ht];
+      for ( i = xPiStack->startCellGroup[ht] , lastPlus1 = i +
+                    xPiStack->cellGroupSize[ht] ; i < lastPlus1 ; ++i )
+         xPiStack->cellGroupNumber[xPiStack->cellList[i]] = parentGroup;
+      xPiStack->cellGroupSize[parentGroup] += xPiStack->cellGroupSize[ht];
+      xPiStack->totalGroupSize[parentGroup] += xPiStack->totalGroupSize[ht];
+   }
+}
+
+
+
+/*-------------------------- constructOrbitPartition ----------------------*/
+
+/* This function fills in two arrays (which must be allocated prior to the
+   function call:  orbitNumberOf and sizeOfOrbit.  The array orbitNumberOf is
+   set such that orbitNumberOf[pt] = i exactly when pt lies in the i'th orbit
+   of the stabilizer of a given initial segment of the base in a given
+   permutation group, and the array sizeOfOrbit is set so that sizeOfOrbit[j]
+   is the length of the j'th orbit.  Note orbit i is taken to preceed orbit j
+   when the first point of orbit i is less than the first point of orbit j.
+   A base for the group must be known, and the field essential of each
+   generator must be filled in.  (There is no harm beyond loss of efficienct
+   in marking all generators essential.)  */
+
+void *constructOrbitPartition(
+   PermGroup *G,                /* The permutation group. */
+   Unsigned level,              /* The orbits of G^(level) will be found. */
+   UnsignedS *orbitNumberOf,    /* Set so that orbitNumberOf[pt] is the number
+                                   of the orbit containing pt. */
+   UnsignedS *sizeOfOrbit)      /* Set so that sizeOfOrbit[i] is the size of
+                                   the i'th orbit. */
+{
+   Unsigned orbitCount = 0, found = 0, processed = 0, oldFound = 0, orbitRep,
+       pt, img;
+   UnsignedS *queue = allocIntArrayDegree();
+   Permutation *genHeader, *gen;
+
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      orbitNumberOf[pt] = 0;
+   genHeader = linkEssentialGens( G, level);
+
+   for ( orbitRep = 1 ; found <= G->degree ; ++orbitRep )
+      if ( orbitNumberOf[orbitRep] == 0 ) {
+         ++orbitCount;
+         queue[++found] = orbitRep;
+         while ( processed <= found ) {
+            pt = queue[++processed];
+            for ( gen = genHeader ; gen ; gen = gen->next )
+               if ( orbitNumberOf[ img = gen->image[pt] ] == 0 ) {
+                  queue[++found] = img;
+                  orbitNumberOf[img] = orbitCount;
+               }
+         }
+         sizeOfOrbit[orbitCount] = found - oldFound;
+         oldFound = found;
+      }
+
+   freeIntArrayDegree( queue);
+   return orbitNumberOf;
+}
+
+
+/*-------------------------- cellNumberAtDepth ----------------------------*/
+
+/* Given a point alpha, a partition stack UpsilonStack, and a depth (depth),
+   this function returns an integer i such that alpha lies in the i'th cell
+   of the partition at depth depth in UpsilonStack.  It is assumed that depth
+   does not exceed the height of UpsilonStack. */
+
+Unsigned cellNumberAtDepth(
+   const PartitionStack *const UpsilonStack,
+   const Unsigned depth,
+   const Unsigned alpha)
+{
+   Unsigned m;
+   for ( m = UpsilonStack->cellNumber[alpha] ; m > depth ;
+         m = UpsilonStack->parent[m] )
+      ;
+    return m;
+}
+
+
+/*-------------------------- numberOfCells --------------------------------*/
+
+/* This function returns the number of cells is a partition.  It works by
+   scanning cellNumber (inefficient, but doesn't require other fields to
+   be filled in). */
+
+Unsigned numberOfCells(
+   const Partition *const Pi)
+{
+   UnsignedS i, maxCellNumber = 1;
+
+   for ( i = 1 ; i <= Pi->degree ; ++i )
+      if ( Pi->cellNumber[i] > maxCellNumber )
+         maxCellNumber = Pi->cellNumber[i];
+
+   return maxCellNumber;
+}
diff --git a/src/leon/src/partn.h b/src/leon/src/partn.h
new file mode 100644
index 0000000..e9d7fc9
--- /dev/null
+++ b/src/leon/src/partn.h
@@ -0,0 +1,34 @@
+#ifndef PARTN
+#define PARTN
+
+extern void popToHeight(
+   PartitionStack *piStack,     /* The partition stack to pop. */
+   Unsigned newHeight)          /* The new height for the stack. */
+;
+
+extern void xPopToLevel(
+   CellPartitionStack *xPiStack,   /* The cell partition stack to pop. */
+   UnsignedS *applyAfterLevel,
+   Unsigned newHeight)             /* The new height for the stack. */
+;
+
+extern void *constructOrbitPartition(
+   PermGroup *G,                /* The permutation group. */
+   Unsigned level,              /* The orbits of G^(level) will be found. */
+   UnsignedS *orbitNumberOf,    /* Set so that orbitNumberOf[pt] is the number
+                                   of the orbit containing pt. */
+   UnsignedS *sizeOfOrbit)      /* Set so that sizeOfOrbit[i] is the size of
+                                   the i'th orbit. */
+;
+
+extern Unsigned cellNumberAtDepth(
+   const PartitionStack *const UpsilonStack,
+   const Unsigned depth,
+   const Unsigned alpha)
+;
+
+extern Unsigned numberOfCells(
+   const Partition *const Pi)
+;
+
+#endif
diff --git a/src/leon/src/permgrp.c b/src/leon/src/permgrp.c
new file mode 100644
index 0000000..37919e1
--- /dev/null
+++ b/src/leon/src/permgrp.c
@@ -0,0 +1,684 @@
+/* File permgrp.c.  Contains miscellaneous short functions for computing with
+   permutation groups, as follows:
+
+      isNontrivialGroup: Returns true if a permutation group has order at
+                         least 2.  A base/sgs are not needed.
+
+      levelIn:           Returns the level of a permutation relative to the
+                         base of a given permutation group.
+
+      isIdentityElt:     Returns true is an element of a group with known base
+                         is an involution (fast test).
+
+      isInvolutoryElt:   Returns true is an element of a group with known base
+                         is an involution (fast test).  */
+
+#include <stddef.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "group.h"
+
+#include "copy.h"
+#include "errmesg.h"
+#include "essentia.h"
+#include "new.h"
+#include "permut.h"
+#include "storage.h"
+
+extern GroupOptions options;
+
+CHECK( permgr)
+
+
+/*-------------------------- genCount -------------------------------------*/
+
+/* This function may be used to determine the total number of generators, and
+   the number of known involutory generators, in a permutation group.  The
+   function returns the total number of generators and sets the second
+   parameter to the number of involutory generators.  Note the function assumes
+   inverse generators are present as permutations on the linked list of
+   generators, unless involCount == NULL. */
+
+Unsigned genCount(
+   const PermGroup *const G,           /* The permutation group. */
+   Unsigned *involCount)              /* If nonnull, set to number of
+                                          involutory generators. */
+{
+   Unsigned totalCount = 0, tempInvolCount = 0;
+   Permutation *gen;
+
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      ++totalCount;
+      if ( isInvolution( gen) )
+         ++tempInvolCount;
+   }
+
+   if ( involCount )
+      *involCount = tempInvolCount;
+
+   return tempInvolCount + (totalCount - tempInvolCount) / 2;
+}
+
+
+/*-------------------------- isFixedPointOf -------------------------------*/
+
+/* The function isFixedPointOf( G, level, point) returns true if the point
+   point is a fixed point of G^(level), and it returns false otherwise. */
+
+BOOLEAN isFixedPointOf(
+   const PermGroup *const G,   /* A group with known base and sgs. */
+   const Unsigned level,       /* The level mentioned above. */
+   const Unsigned point)       /* Check if this point is a fixed point. */
+{
+   Permutation *gen;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->level >= level && gen->image[point] != point )
+         return FALSE;
+
+   return TRUE;
+}
+
+
+/*-------------------------- isNontrivialGroup ----------------------------*/
+
+/* This function returns true if a permutation group has order at least 2 and
+   false if it has order 1.  A base/sgs are not needed. */
+
+BOOLEAN isNontrivialGroup(
+   PermGroup *G)              /* The permutation group to test. */
+{
+   Permutation *gen;
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( !isIdentity( gen) )
+         return TRUE;
+   return FALSE;
+}
+
+
+/*-------------------------- levelIn --------------------------------------*/
+
+/* This function returns the level of a permutation relative to the
+   sequence of points in the array base of a permutation group.  (The array
+   need not actually be a base.)  If the permutation fixes the "base", the
+   value returned is 1+baseSize. */
+
+Unsigned levelIn(
+   PermGroup *G,           /* The perm group (base and baseSize filled in). */
+   Permutation *perm)      /* The permutation whose level is returned. */
+{
+   Unsigned level;
+   for ( level = 1 ; level <= G->baseSize && perm->image[G->base[level]] ==
+         G->base[level] ; ++level )
+      ;
+   return level;
+}
+
+
+/*-------------------------- isIdentityElt --------------------------------*/
+
+/* This function returns true if a given permutation known to lie in a group
+   with known base is the identity, and false otherwise.  The function is
+   fast, as the permutation need be applied only to the base. */
+
+BOOLEAN isIdentityElt(
+   PermGroup *G,           /* The permutation group (base known). */
+   Permutation *perm)      /* The permutation known to lie in G. */
+{
+   Unsigned i;
+
+   if ( !IS_SYMMETRIC(G) ) {
+      for ( i = 1 ; i <= G->baseSize && perm->image[G->base[i]] ==
+                                        G->base[i] ; ++i )
+         ;
+      return i > G->baseSize;
+   }
+   else {
+      for ( i = 1 ; i <= G->degree && perm->image[i] == i ; ++i )
+         ;
+      return i > G->degree;
+   }
+}
+
+
+/*-------------------------- isInvolutoryElt ------------------------------*/
+
+/* This function returns true if a given permutation known to lie in a group
+   with known base is an involution, and false otherwise.  The function is
+   fast, as the permutation need be applied only to the base. */
+
+BOOLEAN isInvolutoryElt(
+   PermGroup *G,           /* The permutation group (base known). */
+   Permutation *perm)      /* The permutation known to lie in G. */
+{
+   Unsigned i;
+   for ( i = 1 ; i <= G->baseSize && perm->image[perm->image[G->base[i]]] ==
+         G->base[i] ; ++i )
+      ;
+   return i > G->baseSize;
+}
+
+
+/*-------------------------- fixesBasicOrbit ------------------------------*/
+
+/* The function fixesBasicOrbit( G, level, perm) returns true if permutation
+   perm fixes (setwise) the level'th basic orbit or permutation group G and
+   returns false otherwise.  Note:  The basic orbit need not be correct. */
+
+BOOLEAN fixesBasicOrbit(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Permutation *const perm)
+{
+   Unsigned i;
+   UnsignedS *basicOrbit = G->basicOrbit[level];
+   Permutation **svec = G->schreierVec[level];
+
+   for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i )
+      if ( ! svec[ perm->image[basicOrbit[i]] ] )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- linkEssentialGens ----------------------------*/
+
+/* This function constructs a singly linked list of all the generators of a
+   permutation group essential at a specified level, using the xNext field
+   of the generating permutations.  It returns a pointer to the head
+   permutation on the list.  The field essential of each generator must be
+   filled in. */
+
+Permutation *linkEssentialGens(
+   PermGroup *G,                   /* The permutation group. */
+   Unsigned level)                 /* Generators essential at this level are
+                                      linked. */
+{
+   Permutation *listHeader = NULL, *previousGen = NULL, *gen;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( ESSENTIAL_AT_LEVEL(gen,level) ) {
+         if ( previousGen )
+            previousGen->xNext = gen;
+         else
+            listHeader = gen;
+         gen->xNext = NULL;
+         previousGen = gen;
+      }
+
+   return listHeader;
+}
+
+
+/*-------------------------- assignGenName -------------------------------*/
+
+/* This function assigns a name to a generator for a permutation group.  The
+   name chosen is <options.genNamePrefix>zz, where zz is the 2-digit ASCII 
+   representation of the smallest  positive integer not currently in use for
+   a generator name.  However, if <options.genNamePrefix> is *, then the name
+   will be a single letter, the first not currently in use, or two identical
+   letters, if all single letters are in use.  The function terminates with
+   an error message if all possible names are already in use. */
+
+void assignGenName(
+   PermGroup *const G,
+   Permutation *const gen)
+{
+   char inUse[256];
+   char *letter = "abcdefghijklmnopqrstuvwxyz";
+   Unsigned i, prefixLen;
+   char let1, let2;
+   Permutation *oldGen;
+
+   if ( strcmp(options.genNamePrefix,"*") == 0 ) {
+      for ( i = 0 ; i < 26 ; ++i ) {
+         inUse[letter[i]] = FALSE;
+         inUse[letter[i]-64] = FALSE;      /* OK for ASCII and EBCDIC. */
+      }
+      for ( oldGen = G->generator ; oldGen ; oldGen = oldGen->next ) {
+         let1 = tolower( oldGen->name[0]);
+         let2 = tolower( oldGen->name[1]);
+         if ( strlen(oldGen->name) == 1 )
+            inUse[let1] = TRUE;
+         else if ( strlen(oldGen->name) == 2 && let1 == let2 & let1 >= 64 )
+            inUse[let1-64] = TRUE;
+      }
+      for ( i = 0 ; i < 26 ; ++i )
+         if ( !inUse[letter[i]] ) {
+            gen->name[0] = letter[i];
+            gen->name[1] = '\0';
+            return ;
+         }
+      for ( i = 0 ; i < 26 ; ++i )
+         if ( !inUse[letter[i]-64] ) {
+            gen->name[0] = letter[i];
+            gen->name[1] = letter[i];
+            gen->name[2] = '\0';
+            return ;
+         }
+      ERROR( "assignGenName", "No more generator names are available.")
+   }
+            
+   else{
+      for ( i = 1 ; i <= 99 ; ++i )
+         inUse[i] = 0;
+      prefixLen = strlen( options.genNamePrefix);
+      for ( oldGen = G->generator ; oldGen ; oldGen = oldGen->next ) 
+         if ( strncmp( oldGen->name, options.genNamePrefix, prefixLen) == 0 &&
+              oldGen->name[prefixLen] == i / 10 + '0' &&
+              oldGen->name[prefixLen+1] == i % 10 + '0' )
+            inUse[i] = TRUE;
+      for ( i = 1 ; i <= 99 ; ++i )
+         if ( !inUse[i] ) {
+            strcpy( gen->name, options.genNamePrefix);
+            gen->name[prefixLen] = i / 10 + '0';
+            gen->name[prefixLen+1] = i % 10 + '0';
+            gen->name[prefixLen+2] = '\0';
+            return;
+         }
+      ERROR( "assignGenName", "No more generator names are available.")
+   }
+}   
+
+
+
+/*-------------------------- adjoinInverseGen ----------------------------*/
+
+void adjoinInverseGen(
+   PermGroup *const G,
+   Permutation *gen)    /* Must be a generator of G, and must have invImage. */
+{
+   Permutation *invGen;
+
+   if ( !gen->invPermutation )
+      if ( gen->image == gen->invImage )
+         gen->invPermutation = gen;
+      else {
+         invGen = allocPermutation();
+         gen->invPermutation = invGen;
+         invGen->invPermutation = gen;
+         strcpy( invGen->name, "*");
+         invGen->degree = gen->degree;
+         invGen->level = gen->level;
+         MAKE_NOT_ESSENTIAL_ALL( invGen);
+         invGen->image = gen->invImage;
+         invGen->invImage = gen->image;
+         invGen->last = NULL;
+         invGen->next = G->generator;
+         G->generator->last = invGen;
+         G->generator = invGen;
+      }
+}
+
+
+/*-------------------------- depthGreaterThan ----------------------------*/
+
+/* This function tests rather the "depth" of a group G exceeds a specified
+   integral value comparisonDepth.  Here the depth of G is defined to be
+   log(|G|) / log(degree(G)).  The function returns true if the depth of
+   G exceeds comparisonDepth and false otherwise.  Overflow should occur
+   only if (degree(G))^comparisonDepth is out of bounds.  If the NOFLOAT
+   option is given, the computation is approximate. */
+
+
+BOOLEAN depthGreaterThan(
+   const PermGroup *const G,
+   const Unsigned comparisonDepth)
+{
+   int i, j;
+
+#ifndef NOFLOAT
+   double ratio = 1.0;
+
+   /* Handle symmetric group.  (Always return true -- tecnically wrong.) */
+   if ( IS_SYMMETRIC(G) )
+      return TRUE;
+
+   for ( i = 1 ; i <= comparisonDepth ; ++i )
+      ratio /= (double) G->degree;
+
+   for ( i = 0 ; i < G->order->noOfFactors ; ++i )
+      for ( j = 1 ; j <= G->order->exponent[i] ; ++j ) {
+         ratio *= (double) G->order->prime[i];
+         if ( ratio > 1.0 )
+            return TRUE;
+      }
+#endif
+
+#ifdef NOFLOAT
+   int cDepth = comparisonDepth;
+   unsigned long product = 1;
+
+   /* Handle symmetric group.  (Always return true -- tecnically wrong.) */
+   if ( IS_SYMMETRIC(G) )
+      return TRUE;
+
+   for ( i = 0 ; i < G->order->noOfFactors ; ++i )
+      for ( j = 1 ; j <= G->order->exponent[i] ; ++j ) {
+         product *= G->order->prime[i];
+         if ( product >= G->degree ) {
+            product = (product + G->degree / 2) / G->degree;
+            --cDepth;
+            if ( cDepth <= 0 )
+               return TRUE;
+         }
+      }
+#endif
+
+   return FALSE;
+}
+
+
+/*-------------------------- isDoublyTransitive --------------------------*/
+
+/* This function tests whether a group G is doubly transitive.  A base and
+   strong generating set for G must be available (not checked). */
+
+
+BOOLEAN isDoublyTransitive(
+   const PermGroup *const G)
+{
+   return  G->baseSize >= 2 && G->basicOrbLen[2] == G->degree - 1;
+}
+
+
+/*-------------------------- conjugatePermByPerm -------------------------*/
+
+/* This function may be used to conjugate one permutation by another.  The
+   permutation perm is replaced by conjPerm^-1 * perm * conjPerm.  It is
+   assumed that both permutations have the same degree. */
+
+void conjugatePermByPerm(
+   Permutation *const perm,
+   const Permutation *const conjPerm)
+{
+   Unsigned pt;
+   Unsigned *tempPerm = allocIntArrayDegree();
+
+   for ( pt = 1 ; pt <= perm->degree ; ++pt )
+      tempPerm[pt] = perm->image[pt];
+   for ( pt = 1 ; pt <= perm->degree ; ++pt )
+      perm->image[conjPerm->image[pt]] = conjPerm->image[tempPerm[pt]];
+   if ( perm->invImage )
+      for ( pt = 1 ; pt <= perm->degree ; ++pt )
+         perm->invImage[perm->image[pt]] = pt;
+   freeIntArrayDegree( tempPerm);
+}
+
+
+/*-------------------------- conjugateGroupByPerm ------------------------*/
+
+/* This function may be used to conjugate a permutation group by a permutation.
+   The permutation group G is replaced by conjPerm^-1 * G * conjPerm.  It is
+   assumed that the group and the permutation have the same degree.  The
+   complete   The completeOrbit, orbNumberOfPt, and startOfOrbitNo fields are
+   not currently handled, nor are omega and invOmega. */
+
+void conjugateGroupByPerm(
+   PermGroup *const G,
+   const Permutation *const conjPerm)
+{
+   Unsigned level, i, pt;
+   Permutation *gen;
+   Permutation **tempSVec, **temp;
+
+   /* Conjugate the base, basic orbits, and Schreier vectors. */
+   if ( G->base ) {
+      tempSVec = (Permutation **) allocPtrArrayDegree();
+      for ( level = 1 ; level <= G->baseSize ; ++level ) {
+         G->base[level] = conjPerm->image[G->base[level]];
+         for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i )
+             G->basicOrbit[level][i] = conjPerm->image[G->basicOrbit[level][i]];
+         for ( pt = 1 ; pt <= G->degree ; ++pt )
+            tempSVec[conjPerm->image[pt]] = G->schreierVec[level][pt];
+         EXCHANGE( G->schreierVec[level], tempSVec, temp);
+      }
+      freePtrArrayDegree( tempSVec);
+   }
+
+   /* Conjugate generators. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      conjugatePermByPerm( gen, conjPerm);
+}
+
+
+/*-------------------------- checkConjugacyInGroup  ------------------------------*/
+
+/* The function checkConjugacyInGroup( G, e, f, conjPerm) returns true if
+   permutation  conjPerm in G conjugates permutation e in group G to permutation
+   f in G, that is, if  e ^ conjPerm = f, or equivalently,
+   e * conjPerm = conjPerm * f.  It is assumed G has a base and strong
+   generating set. */
+
+BOOLEAN checkConjugacyInGroup(
+   const PermGroup *const G,
+   const Permutation *const e,
+   const Permutation *const f,
+   const Permutation *const conjPerm)
+{
+   int i;
+
+   for ( i = 1 ; i <= G->baseSize ; ++i )
+      if ( conjPerm->image[e->image[G->base[i]]] !=
+                 f->image[conjPerm->image[G->base[i]]] )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- isElementOf -----------------------------------------*/
+
+/* The function isElementOf( perm, group) returns true is the permutation
+   perm lies in the group G and false otherwise.  The group must already
+   have a base and strong generating set.  This procedure is not particularly
+   efficient:  It does a great deal of unnecessary multiplications
+   if containment turns out not to hold. */
+
+BOOLEAN isElementOf(
+   const Permutation *const perm,
+   const PermGroup *const group)
+{
+   Permutation *gen, *perm1;
+   Unsigned level, gamma;
+   BOOLEAN returnValue;
+
+   /* Check that the group has a base.  If not, give error message. */
+   if ( group->base == NULL)
+      ERROR1s( "isElementOf", "Group ", group->name, " must have a base.")
+
+   /* Make a copy of permutation perm. */
+   perm1 = copyOfPermutation( perm);
+
+   /* Now attempt to factor perm1.  If process breaks down because the
+      appropriate point is not in the required basic orbit, return false
+      immediately. */
+   for ( level = 1 ; level <= group->baseSize ; ++level) {
+      gamma = perm1->image[group->base[level]];
+      while ( (gen = group->schreierVec[level][gamma]) != NULL &&
+               gen != FIRST_IN_ORBIT ) {
+         rightMultiplyInv( perm1, gen);
+         gamma = gen->invImage[gamma];
+      }
+      if ( gen == NULL ) {
+         deletePermutation( perm1);
+         return FALSE;
+      }
+   }
+
+   /* If all the appropriate points lie in the correct basic orbits, return
+      true if and only if the remaining permutation is the identity. */
+   returnValue = isIdentity( perm1);
+   deletePermutation( perm1);
+   return returnValue;
+}
+
+
+
+/*-------------------------- isSubgroupOf ----------------------------------------*/
+
+/* The function isSubgroupOf( subGroup, group) returns true if subGroup
+   is a subgroup of group and returns false otherwise.  The degrees of the
+   groups must be equal.  It is not too efficient because it checks all
+   (possibly strong) generators of subGroup.  Note group must have a
+   base and strong generating set, but subGroup need not. */
+
+BOOLEAN isSubgroupOf(
+   const PermGroup *const subGroup,
+   const PermGroup *const group)
+{
+   Permutation *gen;
+
+   /* Check that the group has a base.  If not, give error message. */
+   if ( group->base == NULL)
+      ERROR1s( "isElementOf", "Group ", group->name, " must have a base.")
+
+   /* Now check each generator of subGroup for containment in group. */
+   for ( gen = subGroup->generator ; gen ; gen = gen->next )
+      if ( !isElementOf(gen,group) )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- isNormalizedBy --------------------------------------*/
+
+/* The function isNormalizedBy( group, nGroup) returns true if group
+   is normalized by nGroup and returns false otherwise.  The degrees of the
+   groups must be equal.  It is inefficient because it checks all
+   (possibly strong) generators of group conjugated by all (possibly strong)
+   generators of nGroup and, more importantly, it does NOT take advantage of 
+   any prior knowledge that group is a subgroup of nGroup.  Note group must 
+   have a base and strong generating set, but nGroup need not. */
+
+BOOLEAN isNormalizedBy(
+   const PermGroup *const group,
+   const PermGroup *const nGroup)
+{
+   Permutation *gen, *nGen, *perm = newIdentityPerm( group->degree);
+   BOOLEAN involFlag;
+   Unsigned pt;
+
+   /* Check that the group has a base.  If not, give error message. */
+   if ( group->base == NULL)
+      ERROR1s( "isElementOf", "Group ", group->name, " must have a base.")
+
+   /* Now check each conjugage of each generator of group for containment in 
+      nGroup. */
+   for ( gen = group->generator ; gen ; gen = gen->next ) {
+      involFlag = isInvolution( gen);
+      if ( involFlag && perm->invImage != perm->image ) {
+         freeIntArrayDegree( perm->invImage);
+         perm->invImage = perm->image;
+      }
+      else if ( !involFlag && perm->invImage == perm->image )
+         perm->invImage = allocIntArrayDegree();
+      for ( nGen = nGroup->generator ; nGen ; nGen = nGen->next ) {
+         for ( pt = 1 ; pt <= group->degree ; ++pt )
+            perm->image[nGen->image[pt]] = nGen->image[gen->image[pt]];
+         if ( !involFlag )
+            for ( pt = 1 ; pt <= group->degree ; ++pt )
+               perm->invImage[perm->image[pt]] = pt;
+         if ( !isElementOf(perm,group) ) {
+            freePermutation( perm);
+            return FALSE;
+         }
+      }
+   }
+
+   freePermutation( perm);
+   return TRUE;
+}
+
+
+/*-------------------------- isCentralizedBy --------------------------------*/
+
+/* The function isCentralizedBy( group, cGroup) returns true if group
+   is centralized by cGroup and returns false otherwise.  The degrees of the
+   groups must be equal.  It is inefficient because it checks all pairs of
+   (possibly strong) generators from the two groups and, more importantly, it 
+   does NOT take advantage of any prior knowledge of the bases of the two 
+   groups (as would be possible when one is contained in the other). */
+
+BOOLEAN isCentralizedBy(
+   const PermGroup *const group,
+   const PermGroup *const cGroup)
+{
+   Permutation *gen, *cGen;
+   Unsigned pt;
+
+   /* Check equality of degrees. */
+   if ( group->degree != cGroup->degree )
+      ERROR( "isCentralizedBy", "Groups do not have same degree.")
+
+   /* Check each generator of group commutes with each generator of cGroup. */
+   for ( gen = group->generator ; gen ; gen = gen->next ) 
+      for ( cGen = cGroup->generator ; cGen ; cGen = cGen->next ) 
+         for ( pt = 1 ; pt <= group->degree ; ++pt )
+            if ( cGen->image[gen->image[pt]] != gen->image[cGen->image[pt]] )
+               return FALSE;
+
+   return TRUE;
+}
+
+
+/*-------------------------- isBaseImage -----------------------------------------*/
+
+/* The function isBaseImage( G, image), where G is a permutation group having
+   a base and strong generating set and where image is an array of points of
+   length G->baseSize, returns true if there exists a permutation in G mapping
+   the base to the sequence image, and returns false otherwise. */
+
+BOOLEAN isBaseImage(
+   const PermGroup *const G,
+   const Unsigned image[])
+{
+   Unsigned level, i, t;
+   UnsignedS *img = allocIntArrayBaseSize();
+
+   for ( level = 1 ; level <= G->baseSize ; ++level )
+      img[level] = image[level];
+
+   for ( level = 1 ; level <= G->baseSize ; ++level ) {
+      if ( G->schreierVec[level][img[level]] == NULL ) {
+         freeIntArrayBaseSize( img);
+         return FALSE;
+      }
+      while ( img[level] != G->base[level] ) {
+         t = img[level];
+         for ( i = level ; i <= G->baseSize ; ++i )
+            img[i] = G->schreierVec[level][t]->invImage[img[i]];
+      }
+   }
+
+   freeIntArrayBaseSize( img);
+   return TRUE;
+}
+
+
+/*-------------------------- reduceWrtGroup --------------------------------*/
+
+/* The function reduceWrtGroup( G, h, reductionLevel), where G is a
+   permutation group with base and strong generating set and where h is a
+   permutation (with inverse image) replaces h by
+                   h u_1[d_1]^-1 u_2[d_2]^-1 u_j-1[d_j-1]^-1,
+   where the new h fixes the first j-1 base points of G, and where the
+   new h maps the j'th base point outside the j'th basic orbit, or where
+   j = G->baseSize+1.  Unless reductionLevel = NULL, it sets *reductionLevel
+   to j. */
+
+void reduceWrtGroup(
+   const PermGroup *const G,
+   Permutation *const h,
+   Unsigned *reductionLevel)
+{
+   int level;
+
+   for ( level = 1 ; level <= G->baseSize &&
+          G->schreierVec[level][h->image[G->base[level]]] != NULL ; ++level )
+      while ( h->image[G->base[level]] != G->base[level] )
+         rightMultiplyInv( h, G->schreierVec[level][h->image[G->base[level]]]);
+
+   if ( reductionLevel )
+      *reductionLevel = level;
+}
diff --git a/src/leon/src/permgrp.h b/src/leon/src/permgrp.h
new file mode 100644
index 0000000..81e9e9c
--- /dev/null
+++ b/src/leon/src/permgrp.h
@@ -0,0 +1,114 @@
+#ifndef PERMGRP
+#define PERMGRP
+
+extern Unsigned genCount(
+   const PermGroup *const G,           /* The permutation group. */
+   Unsigned *involCount)              /* If nonnull, set to number of
+                                          involutory generators. */
+;
+
+extern BOOLEAN isFixedPointOf(
+   const PermGroup *const G,   /* A group with known base and sgs. */
+   const Unsigned level,       /* The level mentioned above. */
+   const Unsigned point)       /* Check if this point is a fixed point. */
+;
+
+extern BOOLEAN isNontrivialGroup(
+   PermGroup *G)              /* The permutation group to test. */
+;
+
+extern Unsigned levelIn(
+   PermGroup *G,           /* The perm group (base and baseSize filled in). */
+   Permutation *perm)      /* The permutation whose level is returned. */
+;
+
+extern BOOLEAN isIdentityElt(
+   PermGroup *G,           /* The permutation group (base known). */
+   Permutation *perm)      /* The permutation known to lie in G. */
+;
+
+extern BOOLEAN isInvolutoryElt(
+   PermGroup *G,           /* The permutation group (base known). */
+   Permutation *perm)      /* The permutation known to lie in G. */
+;
+
+extern BOOLEAN fixesBasicOrbit(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Permutation *const perm)
+;
+
+extern Permutation *linkEssentialGens(
+   PermGroup *G,                   /* The permutation group. */
+   Unsigned level)                 /* Generators essential at this level are
+                                      linked. */
+;
+
+extern void assignGenName(
+   PermGroup *const G,
+   Permutation *const gen)
+;
+
+extern void adjoinInverseGen(
+   PermGroup *const G,
+   Permutation *gen)    /* Must be a generator of G, and must have invImage. */
+;
+
+extern BOOLEAN depthGreaterThan(
+   const PermGroup *const G,
+   const Unsigned comparisonDepth)
+;
+
+extern BOOLEAN isDoublyTransitive(
+   const PermGroup *const G)
+;
+
+extern void conjugatePermByPerm(
+   Permutation *const perm,
+   const Permutation *const conjPerm)
+;
+
+extern void conjugateGroupByPerm(
+   PermGroup *const G,
+   const Permutation *const conjPerm)
+;
+
+extern BOOLEAN checkConjugacyInGroup(
+   const PermGroup *const G,
+   const Permutation *const e,
+   const Permutation *const f,
+   const Permutation *const conjPerm)
+;
+
+extern BOOLEAN isElementOf(
+   const Permutation *const perm,
+   const PermGroup *const group)
+;
+
+extern BOOLEAN isSubgroupOf(
+   const PermGroup *const subGroup,
+   const PermGroup *const group)
+;
+
+extern BOOLEAN isNormalizedBy(
+   const PermGroup *const group,
+   const PermGroup *const nGroup)
+;
+
+extern BOOLEAN isCentralizedBy(
+   const PermGroup *const group,
+   const PermGroup *const cGroup)
+;
+
+extern BOOLEAN isBaseImage(
+   const PermGroup *const G,
+   const Unsigned image[])
+;
+
+extern void reduceWrtGroup(
+   const PermGroup *const G,
+   Permutation *const h,
+   Unsigned *reductionLevel)
+;
+
+#endif
diff --git a/src/leon/src/permut.c b/src/leon/src/permut.c
new file mode 100644
index 0000000..56f1433
--- /dev/null
+++ b/src/leon/src/permut.c
@@ -0,0 +1,386 @@
+/* File permut.c.  Contains miscellaneous functions performing simple
+   computations with permutations, as follows:
+
+      isIdentity:       Returns true if a permutation is the identity and
+                        false otherwise.  Requires on the degree and image
+                        fields of the permutation to be filled in.
+
+      adjoinInvImage:   Adjoins the array invImage of inverse images to
+                        a permutation.  The array image of images must
+                        already be present.  For the identity or for an
+                        involution, a separate array is not allocated.
+
+      leftMultiply:     Multiplies a given permutation s on the left by a
+                        permutation t (i.e., s is replaced by ts, and t
+                        remains unchanged). */
+
+#include <stdio.h>
+
+#include "group.h"
+#include "factor.h"
+#include "errmesg.h"
+#include "factor.h"
+#include "new.h"
+#include "storage.h"
+
+#include "repimg.h"
+#include "repinimg.h"
+#include "settoinv.h"
+
+CHECK( permut)
+
+
+/*-------------------------- isIdentity -----------------------------------*/
+
+/* This function may be used to test if a permutation is the identity.  It
+   returns true if the permutation is the identity and false otherwise.  Only
+   the degree and image fields of the permutation are required.  If the
+   permutation lies in a group with known base, the faster function
+   isIdentityElt should be used instead. */
+
+BOOLEAN isIdentity(
+   const Permutation *const s)
+{
+   Unsigned pt;
+   for ( pt = 1 ; pt <= s->degree ; ++pt)
+      if ( s->image[pt] != pt )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- isInvolution ---------------------------------*/
+
+/* This function may be used to test if a permutation is an involution or is
+   the identity.  It returns true if so and false otherwise.  Only
+   the degree and image fields of the permutation are required.  If the
+   permutation lies in a group with known base, the faster function
+   isInvolutoryElt should be used instead. */
+
+BOOLEAN isInvolution(
+   const Permutation *const s)
+{
+   Unsigned pt;
+   for ( pt = 1 ; pt <= s->degree ; ++pt)
+      if ( s->image[s->image[pt]] != pt )
+         return FALSE;
+   return TRUE;
+}
+
+
+/*-------------------------- pointMovedBy ---------------------------------*/
+
+/* The function pointMovedBy( perm) returns a point moved by the permutation
+   perm.  If perm is the identity, the program is terminated with an error
+   message. */
+
+Unsigned pointMovedBy(
+   const Permutation *const perm)
+{
+   Unsigned pt;
+   for ( pt = 1 ; pt <= perm->degree ; ++pt )
+      if ( perm->image[pt] != pt )
+         return pt;
+   ERROR( "pointMovedBy", "Attempt to find a point moved by identity "
+          "permutation");
+}
+
+
+/*-------------------------- adjoinInvImage -------------------------------*/
+
+/* The function adjoinInvImage may be used to adjoin an array of inverse
+   images (invImage) to a permutation.  The array image of images must
+   already be present.  If the array invImage is already present, the
+   function does nothing.  For any involutory permutation, the function
+   merely sets the pointer invImage to point to the existing array image. */
+
+void adjoinInvImage(
+   Permutation *s)        /* The permutation group (base and sgs known). */
+{
+   Unsigned degree = s->degree;
+   Unsigned pt;
+
+   /* Check if inverse image array already exists?  If so, do nothing. */
+   if ( ! s->invImage ) {
+
+      /* Allocate and construct the array of inverse images. */
+      s->invImage = allocIntArrayDegree();
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         s->invImage[s->image[pt]] = pt;
+      s->invImage[degree+1] = 0;
+
+      /* Check if the permutation is an involution, adjust if so. */
+      for ( pt = 1 ; pt <= degree && s->image[pt] == s->invImage[pt] ; ++pt )
+         ;
+      if ( pt > degree ) {
+         freeIntArrayDegree( s->invImage);
+         s->invImage = s->image;
+      }
+   }
+}
+
+
+/*-------------------------- leftMultiply ---------------------------------*/
+
+/* The function leftMultiply( s, t) multiplies the permutation s on the left
+   by the permutation t. */
+
+void leftMultiply(
+   Permutation *const s,
+   const Permutation *const t)
+{
+   UnsignedS *oldImage = allocIntArrayDegree();
+   Unsigned pt;
+
+   for ( pt = 1 ; pt <= s->degree ; ++pt )
+      oldImage[pt] = s->image[pt];
+   for ( pt = 1 ; pt <= s->degree ; ++pt)
+      s->image[pt] = oldImage[t->image[pt]];
+   freeIntArrayDegree( oldImage);
+
+   if ( s->invImage )
+      if ( isInvolution( s) )
+         if ( s->invImage != s->image ) {
+            freeIntArrayDegree( s->invImage);
+            s->invImage = s->image;
+         }
+         else
+            ;
+      else {
+         if ( s->invImage == s->image )
+            s->invImage = allocIntArrayDegree();
+         for ( pt = 1 ; pt <= s->degree ; ++pt )
+            s->invImage[s->image[pt]] = pt;
+      }
+}
+
+
+/*-------------------------- rightMultiply ---------------------------------*/
+
+/* The function rightMultiply( s, t) multiplies the permutation s on the right
+   by the permutation t.  If s contains inverse images initially, they will
+   be updated.  Note that t need not have inverse images. */
+
+void rightMultiply(
+   Permutation *const s,
+   const Permutation *const t)
+{
+   Unsigned  uTemp1, uTemp2, uTemp3;
+   UnsignedS *temp1, *temp2, *temp3, *temp4;
+
+   REPLACE_BY_IMAGE( s->image, t, s->degree, temp1, temp2, temp3, temp4)
+   if ( s->invImage )
+      if ( isInvolution( s) )
+         if ( s->invImage != s->image ) {
+            freeIntArrayDegree( s->invImage);
+            s->invImage = s->image;
+         }
+         else
+            ;
+      else {
+         if ( s->invImage == s->image )
+            s->invImage = allocIntArrayDegree();
+         SET_TO_INVERSE( s->image, s->invImage, s->degree,
+                         temp1, temp2, uTemp1, uTemp2, uTemp3)
+      }
+}
+
+
+/*-------------------------- rightMultiplyInv ------------------------------*/
+
+/* The function rightMultiplyInv( s, t) multiplies the permutation s on the
+   right by the inverse of the permutation t.  If s contains inverse images
+   initially, they will be updated.  Note t must have inverse images. */
+
+void rightMultiplyInv(
+   Permutation *s,
+   Permutation *t)
+{
+   Unsigned  uTemp1, uTemp2, uTemp3;
+   UnsignedS *temp1, *temp2, *temp3, *temp4;
+
+   if ( !t->invImage )
+      ERROR( "rightMultiplyInv", "Inverse image array for permutation not "
+                                 "available.");
+
+   REPLACE_BY_INV_IMAGE( s->image, t, s->degree, temp1, temp2, temp3, temp4)
+   if ( s->invImage )
+      if ( isInvolution( s) )
+         if ( s->invImage != s->image ) {
+            freeIntArrayDegree( s->invImage);
+            s->invImage = s->image;
+         }
+         else
+            ;
+      else {
+         if ( s->invImage == s->image )
+            s->invImage = allocIntArrayDegree();
+         SET_TO_INVERSE( s->image, s->invImage, s->degree,
+                         temp1, temp2, uTemp1, uTemp2, uTemp3)
+      }
+}
+
+
+/*-------------------------- permOrder ------------------------------------*/
+
+/* The function permOrder( perm) returns the order of permutation perm.  The
+   order is returned as a long integer.  The function returns 0 if the order
+   exceeds ULONG_MAX. */
+
+unsigned long permOrder(
+   const Permutation *const perm )
+{
+   unsigned long  orbLen, multiplier, order;
+   Unsigned   pt, basePt, imagePt;
+   char  *found = allocBooleanArrayDegree();
+
+   for (pt = 1; pt <= perm->degree; ++pt)
+      found[pt] = FALSE;
+
+   for ( basePt = 1, order = 1; basePt <= perm->degree; ++basePt )
+      if ( ! found[basePt] )  {
+         orbLen = 0;
+         imagePt = basePt;
+         do {
+            ++orbLen;
+            imagePt = perm->image[imagePt];
+            found[imagePt] = TRUE;
+         } while ( imagePt != basePt );
+         if (order % orbLen != 0)
+            if ( order <= ULONG_MAX / (multiplier = orbLen / gcd(order,orbLen)) )
+               order *= multiplier;
+            else {
+               freeBooleanArrayDegree( found);
+               return 0;
+            }
+      }
+
+   freeBooleanArrayDegree( found);
+   return order;
+}
+
+
+/*-------------------------- raisePermToPower -----------------------------*/
+
+/* The function raisePermToPower replaces a given permutation by a designated
+   power of that permutation.  INVERSE PERMUTATIONS ARE NOT HANDLED. */
+
+void raisePermToPower(
+   Permutation *const perm,      /* The permutation to be replaced. */
+   const long power)             /* Upon return, perm has been replaced by
+                                    perm^power. */
+{
+   Unsigned  i, pt, img, imgIndex, cycleLen;
+   UnsignedS  *cycle = allocIntArrayDegree();
+   char  *found = allocBooleanArrayDegree();
+
+   /* Initialize found[pt] to false for all points pt.  When the cycle of pt has
+      been constructed, found[pt] will be set to true. */
+   for ( pt = 1 ; pt <= perm->degree ; ++pt )
+      found[pt] = FALSE;
+
+   for ( pt = 1 ; pt <= perm->degree ; ++pt )
+      if ( !found[pt] ) {
+
+         /* Construct the cycle of point pt. */
+         cycleLen = 0;
+         img = pt;
+         do {
+            cycle[cycleLen++] = img;
+            found[img] = TRUE;
+            img = perm->image[img];
+         } while( img != pt );
+
+         /* Replace perm by perm^power on cycle just constructed. */
+         for ( i = 0 ; i < cycleLen ; ++i ) {
+            imgIndex = (i + power) % cycleLen;
+            perm->image[cycle[i]] = cycle[imgIndex];
+            if ( perm->invImage )
+               perm->invImage[cycle[imgIndex]] = cycle[i];
+         }
+      }
+
+   /* Check if the power is an involution. */
+   if ( isInvolution(perm) && perm->invImage != perm->image ) {
+      freeIntArrayDegree( perm->invImage);
+      perm->invImage = perm->image;
+   }
+      
+   /* Free temporary storage. */
+   freeIntArrayDegree( cycle);
+   freeBooleanArrayDegree( found);
+
+}
+
+
+/*-------------------------- permMapping ----------------------------------*/
+
+/* This function returns a new permutation mapping given sequence of
+   integers to another. */
+
+Permutation *permMapping(
+   const Unsigned degree,     /* The degree of the new permutation.*/
+   const UnsignedS seq1[],    /* The first sequence (must have len = degree). */
+   const UnsignedS seq2[])    /* The second sequence (must have len = degree. */
+{
+   Unsigned i;
+   Permutation *newPerm = newUndefinedPerm( degree);
+
+   for ( i = 1 ; i <= degree ; ++i )
+      newPerm->image[seq1[i]] = seq2[i];
+   adjoinInvImage( newPerm);
+
+   return newPerm;
+}
+
+
+/*-------------------------- checkConjugacy --------------------------------------*/
+
+/* The function checkConjugacy( e, f, conjPerm) returns true if permutation 
+   conjPerm conjugates permutation e to permutation f, that is, if  
+   e ^ conjPerm = f, or equivalently,  e * conjPerm = conjPerm * f. */
+
+BOOLEAN checkConjugacy(
+   const Permutation *const e,
+   const Permutation *const f,
+   const Permutation *const conjPerm)
+{
+   int pt;
+
+   for ( pt = 1 ; pt <= e->degree ; ++pt ) 
+      if ( conjPerm->image[e->image[pt]] != f->image[conjPerm->image[pt]] )
+         return FALSE;
+   return TRUE;
+} 
+
+
+
+/*-------------------------- isValidPermutation ----------------------------------*/
+
+#include "enum.h"
+
+BOOLEAN isValidPermutation(
+   const Permutation *const perm,
+   const Unsigned degree,
+   const Unsigned xCos,
+   const Unsigned *const equivPt)
+{
+   Unsigned pt;
+
+   if ( perm->degree != degree ) {
+      printf( "\n*** Permutation %s has incorrect degree %u.", perm->name,
+              perm->degree);
+      return FALSE;
+   }
+
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      if ( perm->image[pt] < 1 || (perm->image[pt] & NHB) > degree+xCos || 
+           equivPt[perm->invImage[equivPt[perm->image[pt] & NHB]] & NHB] != pt ) {
+         printf( "\n*** Permutation %s has invalid image/invImage field at %u.",
+                 perm->name, pt);
+         return FALSE;
+      }
+
+   return TRUE;
+}
+      
diff --git a/src/leon/src/permut.h b/src/leon/src/permut.h
new file mode 100644
index 0000000..3838316
--- /dev/null
+++ b/src/leon/src/permut.h
@@ -0,0 +1,64 @@
+#ifndef PERMUT
+#define PERMUT
+
+extern BOOLEAN isIdentity(
+   const Permutation *const s)
+;
+
+extern BOOLEAN isInvolution(
+   const Permutation *const s)
+;
+
+extern Unsigned pointMovedBy(
+   const Permutation *const perm)
+;
+
+extern void adjoinInvImage(
+   Permutation *s)        /* The permutation group (base and sgs known). */
+;
+
+extern void leftMultiply(
+   Permutation *const s,
+   const Permutation *const t)
+;
+
+extern void rightMultiply(
+   Permutation *const s,
+   const Permutation *const t)
+;
+
+extern void rightMultiplyInv(
+   Permutation *s,
+   Permutation *t)
+;
+
+extern unsigned long permOrder(
+   const Permutation *const perm )
+;
+
+extern void raisePermToPower(
+   Permutation *const perm,      /* The permutation to be replaced. */
+   const long power)             /* Upon return, perm has been replaced by
+                                    perm^power. */
+;
+
+extern Permutation *permMapping(
+   const Unsigned degree,     /* The degree of the new permutation.*/
+   const UnsignedS seq1[],    /* The first sequence (must have len = degree). */
+   const UnsignedS seq2[])    /* The second sequence (must have len = degree. */
+;
+
+extern BOOLEAN checkConjugacy(
+   const Permutation *const e,
+   const Permutation *const f,
+   const Permutation *const conjPerm)
+;
+
+extern BOOLEAN isValidPermutation(
+   const Permutation *const perm,
+   const Unsigned degree,
+   const Unsigned xCos,
+   const Unsigned *const equivPt)
+;
+
+#endif
diff --git a/src/leon/src/primes.c b/src/leon/src/primes.c
new file mode 100644
index 0000000..cce9519
--- /dev/null
+++ b/src/leon/src/primes.c
@@ -0,0 +1,38 @@
+/* File primes.c.  Contains a null-terminated array of primes up to 256. */
+
+#include "group.h"
+
+#include "errmesg.h"
+
+CHECK( primes)
+
+Unsigned primeList[] = {2,3,5,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,
+                          61,67,71,73,79,83,89,97,101,103,107,109,113,127, 131,
+                          137,139,149,151,157,163,167,173,179,181,191,193,197,
+                          199,211,223,227,229,233,239,241,251,0};
+
+
+/*-------------------------- isPrime --------------------------------------*/
+
+/* The function isPrime( n) returns TRUE exactly when the quantity n
+   of type Unsigned is prime.  It can only be used to test positive integers
+   which, if not prime, have a prime factor in the list primeList above. 
+   (This is not checked.) */
+
+BOOLEAN isPrime(
+   const Unsigned n)
+{
+   Unsigned d;
+
+   if ( n > 256L * 256L )
+      ERROR( "isPrime", "Attempt to apply function isPrime to integer out of range.");
+
+   for ( d = 0 ; primeList[d] != 0 && (unsigned long) primeList[d] * primeList[d] 
+                 <= (unsigned long) n ; ++d )
+      if ( n % primeList[d] == 0 )
+         return FALSE;
+
+   return TRUE;
+}
+
+
diff --git a/src/leon/src/primes.h b/src/leon/src/primes.h
new file mode 100644
index 0000000..769d630
--- /dev/null
+++ b/src/leon/src/primes.h
@@ -0,0 +1,8 @@
+#ifndef PRIMES
+#define PRIMES
+
+extern BOOLEAN isPrime(
+   const Unsigned n)
+;
+
+#endif
diff --git a/src/leon/src/ptstab.sh b/src/leon/src/ptstab.sh
new file mode 100755
index 0000000..c87f5c6
--- /dev/null
+++ b/src/leon/src/ptstab.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+orblist -ptstab $* 
diff --git a/src/leon/src/ptstbref.c b/src/leon/src/ptstbref.c
new file mode 100644
index 0000000..9e72665
--- /dev/null
+++ b/src/leon/src/ptstbref.c
@@ -0,0 +1,207 @@
+/* File ptstbref.c.  Contains functions relating to refinements based on the
+   point stabilizer property (the refinements SSS_{alpha,i} in the reference),
+   as follows:
+
+      pointStabRefine:       A refinement family based on the point stabilizer
+                             property.
+      isPointStabReducible:  A function to checks whether the top partition
+                             on a partition stack is SSS-reducible and
+                             returns a refinement acting nontrivially on the
+                             top partition if so. */
+
+
+#include "group.h"
+
+#include "partn.h"
+#include "cstrbas.h"
+#include "errmesg.h"
+
+CHECK( ptstbr)
+
+extern GroupOptions options;
+
+extern UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack);
+
+
+
+/*-------------------------- pointStabRefine ------------------------------*/
+
+/* The function implements the refinement family pointStabRefine (denoted
+   SSS_alpha in the reference).  This family consists of the elementary
+   refinements ssS_{alpha,i}, where alpha is in Omega and where 1 <= i <=
+   degree.  Application of sSS_{alpha,i} to UpsilonStack splits off point alpha
+   from cell i of the top partition of UpsilonStack and pushes the resulting
+   partition onto UpsilonStack, unless sSS_{alpha,i} acts trivially on the top
+   partition, in which case UpsilonStack remains unchanged.
+
+   The refinement parameters are as follows:
+      refnParm[0].intParm:  alpha,
+      refnParm[1].intParm:  i.
+   There are no refinement family parameters.    */
+
+SplitSize pointStabRefine(
+   const RefinementParm familyParm[],       /* No family parms.  */
+   const RefinementParm refnParm[],         /* parm[0] = alpha, parm[1] = i. */
+   PartitionStack *const UpsilonStack)      /* The partition stack, as above. */
+{
+   const Unsigned  alpha = refnParm[0].intParm,
+                   cellToSplit = refnParm[1].intParm;
+   Unsigned  oldAlphaPosition, newAlphaPosition, temp;
+   Unsigned  height = UpsilonStack->height;
+   UnsignedS     *const pointList = UpsilonStack->pointList,
+                 *const invPointList = UpsilonStack->invPointList,
+                 *const cellNumber = UpsilonStack->cellNumber,
+                 *const parent = UpsilonStack->parent,
+                 *const startCell = UpsilonStack->startCell,
+                 *const cellSize = UpsilonStack->cellSize;
+   SplitSize  split;
+
+   /* First check if the refinement acts nontrivially on UpsilonTop. If not
+      return immediately. */
+   if ( cellNumber[alpha] != cellToSplit || cellSize[cellToSplit] == 1 ) {
+      split.oldCellSize = cellSize[cellToSplit];
+      split.newCellSize = 0;
+      return split;
+   }
+
+   /* Now split cell cellToSplit of UpsilonTop. */
+   oldAlphaPosition = invPointList[alpha];
+   newAlphaPosition = startCell[cellToSplit] + cellSize[cellToSplit] - 1;
+   EXCHANGE( pointList[oldAlphaPosition], pointList[newAlphaPosition], temp)
+   EXCHANGE( invPointList[pointList[oldAlphaPosition]],
+             invPointList[pointList[newAlphaPosition]], temp)
+   ++height; ++UpsilonStack->height;
+   cellNumber[alpha] = height;
+   startCell[height] = newAlphaPosition;
+   parent[height] = cellToSplit;
+   cellSize[height] = 1;
+   --cellSize[cellToSplit];
+
+   /* Set the return value and return to caller. */
+   split.oldCellSize = cellSize[cellToSplit];
+   split.newCellSize = 1;
+   return split;
+}
+
+
+/*-------------------------- isPointStabReducible -------------------------*/
+
+/* The function isPointStabReducible checks whether the top partition UpsilonTop
+   on given partition stack UpsilonStack is SSS_alpha-reducible.  (In
+   applications, it will be.)  Assuming so, it returns a refinement-priority
+   pair consisting of a refinement acting nontrivially on UpsilonTop and a
+   priority.  The priority (included for consistency, but not normally used)
+   will be very high.  The refinement will be sSS_{alpha,i}, where i is such
+   that cell i of UpsilonTop containing alpha, and where alpha is chosen to
+   minimize the expression
+
+            (size of cell in UpsilonTop of alpha) /
+               (orbit length in G^(level) of alpha) ^ 3 /
+                  1.2 ^ (number of i < level with alpha in same cell of Pi_{i-1}
+                  as base[i]),
+
+   subject to alpha lying in a cell of size at least 2 in UpsilonTop.
+   If UpsilonTop is SSS-irreducible, the priority in the
+   return value is set to IRREDUCIBLE, and the refinement is undefined.
+
+   This function must be called only from function constructRBase during R-base
+   construction. */
+
+RefinementPriorityPair isPointStabReducible(
+   const RefinementFamily *family,             /* The refinement family (mapping
+                                                  must be pointStabRefn; there
+                                                  are no genuine parms. */
+   const PartitionStack *const UpsilonStack,   /* The partition stack above. */
+   PermGroup *G,                               /* For optimization. */
+   RBase     *AAA,                             /* For optimization. */
+   Unsigned  level)                            /* For optimization. */
+{
+   Unsigned    pt, orbitNo, i, alpha;
+#ifndef NOFLOAT
+   float  priority, minPriority, orbitLen;
+#endif
+#ifdef NOFLOAT
+   unsigned long  priority, minPriority, orbitLen, cubeRoot;
+#endif
+   RefinementPriorityPair reducingRefn;
+   const Unsigned    degree = UpsilonStack->degree;
+   const UnsignedS   *const cellNumber = UpsilonStack->cellNumber,
+                     *const cellSize = UpsilonStack->cellSize;
+
+   /* Check that the refinement mapping really is pointStabRefn, as required. */
+   if ( family->refine != pointStabRefine )
+      ERROR( "isPointStabReducible", "Error: incorrect refinement mapping");
+
+   /* Here we compute an internal priority for each possible value of alpha
+      and find which alpha minimizes the priority.  Note the internal priority
+      is not the priority in the return value. */
+   alpha = 0;
+   if ( options.alphaHat1 >= 1 && options.alphaHat1 <= degree &&
+                        cellSize[cellNumber[options.alphaHat1]] > 1 )
+      alpha = options.alphaHat1;
+   else if ( chooseNextBasePoint )
+      alpha = chooseNextBasePoint( G, UpsilonStack);
+   else if ( !IS_SYMMETRIC(G) )
+      for ( pt = 1 ; pt <= degree ; ++pt ) {
+         if ( cellSize[cellNumber[pt]] > 1 ) {
+#ifndef NOFLOAT
+            priority = ( cellSize[cellNumber[pt]] >= options.idealBasicCellSize ) ?
+                            (float) cellSize[cellNumber[pt]] :
+                            (float) (2 * options.idealBasicCellSize -
+                                         cellSize[cellNumber[pt]]);
+            orbitNo = G->orbNumberOfPt[level][pt];
+            orbitLen = (float) (G->startOfOrbitNo[level][orbitNo+1] -
+                       G->startOfOrbitNo[level][orbitNo]);
+            priority *= priority * priority;
+            priority /= orbitLen;
+            for ( i = 1 ; i < level ; ++i)
+               if ( cellNumberAtDepth( AAA->PsiStack, i, pt) == AAA->p_[i] )
+                  priority /= 1.2;
+#endif
+#ifdef NOFLOAT
+            priority = ( cellSize[cellNumber[pt]] >= options.idealBasicCellSize ) ?
+                            (unsigned long) cellSize[cellNumber[pt]] :
+                            (unsigned long) (2 * options.idealBasicCellSize -
+                                         cellSize[cellNumber[pt]]);
+            orbitNo = G->orbNumberOfPt[level][pt];
+            orbitLen = G->startOfOrbitNo[level][orbitNo+1] -
+                       G->startOfOrbitNo[level][orbitNo];
+            for ( cubeRoot = 1 ; cubeRoot * cubeRoot * cubeRoot <= orbitLen ;
+                                 ++cubeRoot )
+               ;
+            priority /= cubeRoot - 1;
+            for ( i = 1 ; i < level ; ++i)
+               if ( cellNumberAtDepth( AAA->PsiStack, i, pt) == AAA->p_[i] ) {
+                  priority *= 11;
+                  priority /= 12;
+               }
+#endif
+            if ( alpha == 0 || priority < minPriority ) {
+               minPriority = priority;
+               alpha = pt;
+            }
+         }
+      }
+   else
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         if ( cellSize[cellNumber[pt]] > 1 ) {
+            priority = cellSize[cellNumber[pt]];
+            if ( alpha == 0 || priority < minPriority ) {
+               minPriority = priority;
+               alpha = pt;
+            }
+         }
+
+   /* Set return value and return to caller. */
+   if ( alpha == 0 )
+      reducingRefn.priority = IRREDUCIBLE;
+   else {
+      reducingRefn.refn.family = (RefinementFamily *) family;
+      reducingRefn.refn.refnParm[0].intParm = alpha;
+      reducingRefn.refn.refnParm[1].intParm = cellNumber[alpha];
+      reducingRefn.priority = 30000;
+   }
+   return reducingRefn;
+}
diff --git a/src/leon/src/ptstbref.h b/src/leon/src/ptstbref.h
new file mode 100644
index 0000000..8924d16
--- /dev/null
+++ b/src/leon/src/ptstbref.h
@@ -0,0 +1,20 @@
+#ifndef PTSTBREF
+#define PTSTBREF
+
+extern SplitSize pointStabRefine(
+   const RefinementParm familyParm[],       /* No family parms.  */
+   const RefinementParm refnParm[],         /* parm[0] = alpha, parm[1] = i. */
+   PartitionStack *const UpsilonStack)      /* The partition stack, as above. */
+;
+
+extern RefinementPriorityPair isPointStabReducible(
+   const RefinementFamily *family,             /* The refinement family (mapping
+                                                  must be pointStabRefn; there
+                                                  are no genuine parms. */
+   const PartitionStack *const UpsilonStack,   /* The partition stack above. */
+   PermGroup *G,                               /* For optimization. */
+   RBase     *AAA,                             /* For optimization. */
+   Unsigned  level)                            /* For optimization. */
+;
+
+#endif
diff --git a/src/leon/src/randgrp.c b/src/leon/src/randgrp.c
new file mode 100644
index 0000000..2091c26
--- /dev/null
+++ b/src/leon/src/randgrp.c
@@ -0,0 +1,117 @@
+/* File randgrp.c.  Contains functions generating random numbers and random
+   group elements, as follows:
+
+      initializeSeed:   Initializes the seed for the random number generator.
+
+      randInteger:      Returns a pseudo-random integer in a specified range.
+
+      randGroupWord:    Returns a pseudo-random group element, represented as
+                        a word, in a group with known base and strong
+                        generating set.
+
+      randGroupPerm:    Returns a pseudo-random group element, represented as
+                        a permutation, in a group with known base and strong
+                        generating set. */
+
+#include <stddef.h>
+
+#include "group.h"
+
+#include "new.h"
+#include "permut.h"
+
+CHECK( randgr)
+
+static unsigned long        seed = 47;
+static const unsigned long  multiplier = 65539;             /* 2^16 + 3 */
+
+
+/*-------------------------- initializeSeed -------------------------------*/
+
+/* The function initializeSeed may be used to set the seed for the random
+   integer generator to a specific value.  From then on, the sequence of
+   random integers will be determined by the seed.  The seed should be an
+   odd positive integer, since the modulus is a power of 2. */
+
+void initializeSeed(
+   unsigned long newSeed)      /* The new value for the seed. */
+{
+   seed = newSeed;
+}
+
+
+/*-------------------------- randInteger ----------------------------------*/
+
+/* The function randInteger returns a pseudo-random integer in a given range.
+   The technique is adapted from the book "Assembler Language for Fortran,
+   Cobol, and PL/1 Programmers" by Shan S. Kuo, pages 106-107.  It is designed
+   for speed of computation rather than degree of randomness.  It assumes
+   type long is 32 bits and that, in multiplying unsigned long integers,
+   excess bits on the left are discarded. */
+
+Unsigned randInteger(
+   Unsigned lowerBound,           /* Lower bound for range of random integer. */
+   Unsigned upperBound)           /* Upper bound for range of random integer. */
+{
+   seed = (seed * multiplier) & 0x7fffffff;
+   return  lowerBound + (seed >> 7) % (upperBound - lowerBound + 1);
+}
+
+
+/*-------------------------- randGroupWord ---------------------------------*/
+
+/* The function randGroupWord returns newly allocated word in the strong
+   generators of a group, representing a pseudo-random element of the
+   stabilizer in the group of a designated number of base points. */
+
+Word *randGroupWord(
+   PermGroup *G,
+   Unsigned atLevel)
+{
+   Word *w = newTrivialWord();
+   Unsigned  level, pt;
+   Permutation **svec;
+
+   for ( level = atLevel ; level <= G->baseSize ; ++level ) {
+      pt = G->basicOrbit[level][ randInteger(1,G->basicOrbLen[level]) ];
+      svec = G->schreierVec[level];
+      while ( svec[pt] != FIRST_IN_ORBIT ) {
+         w->position[++w->length] = svec[pt];
+         pt = svec[pt]->invImage[pt];
+      }
+   }
+   w->position[++w->length] = NULL;
+   return w;
+}
+
+
+/*-------------------------- randGroupPerm ---------------------------------*/
+
+/* The function randGroupPerm returns a newly allocated pseudo-random 
+   permutation in the stabilizer of an initial segment of the base in a 
+   permutation group.  The inverse image field of the permutation is filled 
+   in. */
+
+Permutation *randGroupPerm(
+   PermGroup *G,
+   Unsigned atLevel)
+{
+   Permutation *randPerm = newIdentityPerm( G->degree);
+   Unsigned  level, pt, i;
+   Permutation **svec;
+
+   for ( level = atLevel ; level <= G->baseSize ; ++level ) {
+      pt = G->basicOrbit[level][ randInteger(1,G->basicOrbLen[level]) ];
+      svec = G->schreierVec[level];
+      while ( svec[pt] != FIRST_IN_ORBIT ) {
+         for ( i = 1 ; i <= G->degree ; ++i )
+            randPerm->image[i] = svec[pt]->invImage[ randPerm->image[i] ];
+         pt = svec[pt]->invImage[pt];
+      }
+   }
+   randPerm->invImage = NULL;
+   adjoinInvImage( randPerm);
+
+   return randPerm;
+}
+
diff --git a/src/leon/src/randgrp.h b/src/leon/src/randgrp.h
new file mode 100644
index 0000000..82a5994
--- /dev/null
+++ b/src/leon/src/randgrp.h
@@ -0,0 +1,23 @@
+#ifndef RANDGRP
+#define RANDGRP
+
+extern void initializeSeed(
+   unsigned long newSeed)      /* The new value for the seed. */
+;
+
+extern Unsigned randInteger(
+   Unsigned lowerBound,           /* Lower bound for range of random integer. */
+   Unsigned upperBound)           /* Upper bound for range of random integer. */
+;
+
+extern Word *randGroupWord(
+   PermGroup *G,
+   Unsigned atLevel)
+;
+
+extern Permutation *randGroupPerm(
+   PermGroup *G,
+   Unsigned atLevel)
+;
+
+#endif
diff --git a/src/leon/src/randobj.c b/src/leon/src/randobj.c
new file mode 100644
index 0000000..d72acc3
--- /dev/null
+++ b/src/leon/src/randobj.c
@@ -0,0 +1,344 @@
+/* File randobj.c.  Main program for randobj command, which may be used
+   to construct a random point set of specified degree and size, or a random
+   partition with specified cell sizes.    The format of
+   the command is:
+
+      randobj <options> set <name> <degree> <size>
+      randobj <options> set <name> <degree>
+
+   where the meaning of the parameters is as follows:
+
+      <name>:      the name for the point set constructed,
+      <degree>:    the degree for the point set (i.e, the point set will be a
+                   subset of {1,...,degree}),
+      <size>:      the number of points in the point set.
+
+   The valid options are follows:
+      -s:<integer>    Sets seed for random number generator to <integer>,
+      -cl:<libName>   Append the point set in Cayley library format to library
+                      libName.  */
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "errmesg.h"
+#include "randgrp.h"
+#include "readpar.h"
+#include "readpts.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+
+GroupOptions options;
+
+static void verifyOptions(void);
+
+
+int main(
+   int argc,
+   char *argv[])
+{
+   BOOLEAN equalSizeFlag;
+   char outputFileName[MAX_FILE_NAME_LENGTH+1] = "";
+   char outputLibraryName[MAX_NAME_LENGTH+1] = "";
+   char outputObjectName[MAX_NAME_LENGTH+1] = "";
+   Unsigned i, j, degree, setSize, equalCellSize, temp, optionCountPlus1,
+            cellSizeSum, numberOfEqualCells, extraPoints;
+   Unsigned designatedCellSize[102];
+   UnsignedS *randOrder;
+   unsigned long seed;
+   PointSet *lambda;
+   Partition *pi;
+   char comment[255], tempstr[25];
+   char *currentPos, *nextPos;
+   ObjectType objectType;
+
+   /* If there are no options, provide usage information and exit. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  randobj [-e] type degree size object\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1, give limits and
+      return. */
+   if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 )
+      verifyOptions();
+
+   /* Count the number of options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   /* Check for exactly 4 parameters following options.  */
+   if ( argc - optionCountPlus1 != 4 )
+      ERROR( "main (randobj)", "Exactly 4 non-option parameters are required.")
+
+   /* Translate options to lower case. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+   }
+
+
+   /* Process options. */
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   strcpy( options.outputFileMode, "w");
+   equalSizeFlag = FALSE;
+   seed = 47;
+   for ( i = 1 ; i < optionCountPlus1 ; ++i )
+      if ( strcmp(argv[i],"-a") == 0 )
+         strcmp( options.outputFileMode, "a");
+      else if ( strcmp(argv[i],"-e") == 0 )
+         equalSizeFlag = TRUE;
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( outputObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (randobj)", "Invalid name ", outputObjectName,
+                     " for random set or partition.")
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (cent)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
+         errno = 0;
+         seed = strtol( argv[i]+3, NULL, 0);
+         if ( errno )
+            ERROR1s( "main (randobj command)", "Invalid option ", argv[i], ".")
+      }
+      else
+         ERROR1s( "main (randobj command)", "Invalid option ", argv[i], ".")
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Determine the type of object (point set or partition). */
+   objectType =
+      strcmp( lowerCase(argv[optionCountPlus1]), "set") == 0 ? POINT_SET :
+      strcmp( lowerCase(argv[optionCountPlus1]), "partition") == 0 ? PARTITION :
+                                                    INVALID_OBJECT;
+   if ( objectType == INVALID_OBJECT )
+      ERROR( "main (randobj command)",
+             "Only types set and partition are allowed.")
+
+   /* Determine the degree. */
+   errno = 0;
+   degree = strtol( argv[optionCountPlus1+1], NULL, 0);
+   if ( errno || degree <= 1 || degree > options.maxDegree )
+      ERROR( "main (randobj command)", "Invalid entry for degree.")
+
+   /* Determine the set size, the number of cells (-e option), or the
+      cell sizes (no -e option). */
+   switch( objectType ) {
+      case POINT_SET:
+         errno = 0;
+         setSize = strtol( argv[optionCountPlus1+2], NULL, 0);
+         if ( errno || setSize < 1 || setSize >= degree )
+            ERROR( "main (randobj command)", "Invalid entry for set size.")
+         break;
+      case PARTITION:
+         if ( equalSizeFlag ) {
+            errno = 0;
+            numberOfEqualCells = strtol( argv[optionCountPlus1+2], NULL, 0);
+            if ( errno || numberOfEqualCells < 1 || numberOfEqualCells > degree )
+               ERROR( "main (randobj command)",
+                      "Invalid entry for number of equal-size cells.")
+         }
+         else {
+            errno = 0;
+            j = 0;
+            cellSizeSum = 0;
+            currentPos = argv[optionCountPlus1+2];
+            do {
+               designatedCellSize[++j] = (unsigned long) strtol( currentPos, &nextPos, 0);
+               if ( errno )
+                  ERROR( "main (randobj command)", "Invalid cell size.")
+               cellSizeSum += designatedCellSize[j];
+               currentPos = nextPos+1;
+            } while ( *nextPos == ',' && j <= 100 );
+            designatedCellSize[j+1] = 0;
+            if ( j > 100 || *nextPos != '\0' )
+               ERROR( "main (randobj command)", "Cell size list invalid or too long.")
+            if ( cellSizeSum != degree )
+               ERROR( "main (randobj command)", "Cell sizes do not sum to degree.")
+         }
+         break;
+   }
+
+   /* Compute file and library names for output object. */
+   parseLibraryName( argv[optionCountPlus1+3], "", "",
+                     outputFileName, outputLibraryName);
+
+
+   /* Initialize storage manager and random number generator. */
+   initializeStorageManager( degree);
+   initializeSeed( seed);
+
+   /* Now we construct a random ordering of 1,...,degree. */
+   randOrder = allocIntArrayDegree();
+   for ( i = 1 ; i <= degree ; ++i )
+      randOrder[i] = i;
+   for ( i = 1 ; i <= degree-1 ; ++i ) {
+      j = randInteger( i, degree);
+      EXCHANGE( randOrder[i], randOrder[j], temp);
+   }
+
+   /* Construct and write out the point set or partition. */
+   switch ( objectType ) {
+
+      case POINT_SET:
+         lambda = allocPointSet();
+         if ( outputObjectName[0] )
+            strcpy( lambda->name, outputObjectName);
+         else
+            strcpy( lambda->name, outputLibraryName);
+         lambda->degree = degree;
+         lambda->size = setSize;
+         lambda->pointList = allocIntArrayDegree();
+         for ( j = 1 ; j <= setSize ; ++j )
+            lambda->pointList[j] = randOrder[j];
+         sprintf( comment, "Random %u-element subset of {1,...%u}.  Seed = %lu.",
+                 lambda->size, lambda->degree, seed);
+         writePointSet( outputFileName, outputLibraryName, comment, lambda);
+         freeIntArrayDegree( lambda->pointList);
+         freePointSet( lambda);
+         break;
+
+      case PARTITION:
+         pi = allocPartition();
+         if ( outputObjectName[0] )
+            strcpy( pi->name, outputObjectName);
+         else
+            strcpy( pi->name, outputLibraryName);
+         pi->degree = degree;
+         pi->pointList = allocIntArrayDegree();
+         pi->startCell = allocIntArrayDegree();
+         for ( i = 1 ; i <= degree ; ++i )
+            pi->pointList[i] = randOrder[i];
+         pi->startCell[1] = 1;
+         if ( !equalSizeFlag ) {
+            for ( i = 1 ; designatedCellSize[i] != 0 ; ++i )
+               pi->startCell[i+1] = pi->startCell[i] + designatedCellSize[i];
+            if ( pi->startCell[i] != degree+1 )
+               ERROR( "randobj", "Cell size error (should not occur).")
+            if ( i-1 <= 6 ) {
+               sprintf( comment, "Random partition of {1,...%u} with cell sizes", 
+                                 pi->degree);
+               for ( j = 1 ; j <= i-1 ; ++j ) {
+                  sprintf( tempstr, " %u", designatedCellSize[j]);
+                  strcat( comment, tempstr);
+               }
+               sprintf( tempstr, ",  seed = %lu.", seed);
+               strcat( comment, tempstr);
+            }
+            else
+               sprintf( comment, "Random partition of {1,...%u} with %u cells "
+                                 "of designated sizes.  Seed = %lu.",
+                                 pi->degree, i-1, seed);
+         }
+         else {
+            equalCellSize = degree / numberOfEqualCells;
+            extraPoints = degree % numberOfEqualCells;
+            for ( i = 1 ; i <= numberOfEqualCells ; ++i )
+               pi->startCell[i+1] = pi->startCell[i] + equalCellSize +
+                                    ((i <= extraPoints) ? 1 : 0);
+            if ( pi->startCell[i] != degree+1 )
+               ERROR( "randobj", "Cell size error (should not occur).")
+            if ( extraPoints == 0 )
+               sprintf( comment, "Random partition of {1,...%u} with %u cells "
+                                 "of size %u.  Seed = %lu.",
+                                 pi->degree, numberOfEqualCells, equalCellSize, 
+                                 seed);
+            else
+               sprintf( comment, "Random partition of {1,...%u} with %u cells "
+                                 "of size %u or %u.  Seed = %lu.",
+                                 pi->degree, numberOfEqualCells, equalCellSize, 
+                                 equalCellSize+1, seed);
+         }
+         writePartition( outputFileName, outputLibraryName, comment, pi);
+         freeIntArrayDegree( pi->pointList);
+         freeIntArrayDegree( pi->startCell);
+         freePartition( pi);
+         break;
+   }
+
+   return 0;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xreadpa( CompileOptions *cOpts);
+   extern void xreadpt( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xbitman( &mainOpts);
+   xcopy  ( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xrandgr( &mainOpts);
+   xreadpa( &mainOpts);
+   xreadpt( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/randobj.h b/src/leon/src/randobj.h
new file mode 100644
index 0000000..35d5774
--- /dev/null
+++ b/src/leon/src/randobj.h
@@ -0,0 +1,15 @@
+#ifndef RANDOBJ
+#define RANDOBJ
+
+extern int main(
+   int argc,
+   char *argv[])
+;
+
+extern void checkCompileOptions(
+   char *localFileName,
+   CompileOptions *mainOpts,
+   CompileOptions *localOpts)
+;
+
+#endif
diff --git a/src/leon/src/randpts.h b/src/leon/src/randpts.h
new file mode 100644
index 0000000..a2b1b15
--- /dev/null
+++ b/src/leon/src/randpts.h
@@ -0,0 +1,9 @@
+#ifndef RANDPTS
+#define RANDPTS
+
+extern int main(
+   int argc,
+   char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/randschr.c b/src/leon/src/randschr.c
new file mode 100644
index 0000000..6480e5c
--- /dev/null
+++ b/src/leon/src/randschr.c
@@ -0,0 +1,431 @@
+/* File randschr.c. */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "addsgen.h"
+#include "cstborb.h"
+#include "errmesg.h"
+#include "essentia.h"
+#include "factor.h"
+#include "new.h"
+#include "oldcopy.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "randgrp.h"
+#include "storage.h"
+#include "token.h"
+
+extern GroupOptions options;
+
+CHECK( randsc)
+
+extern Unsigned primeList[];
+
+/*-------------------------- removeIdentityGens ---------------------------*/
+
+/* This function removes any identity generators for a group G.  It is
+   assumed that the group does not have a base and strong generating set; in
+   particular, Schreier vectors are not modified.  (Presumably they are not
+   present.) */
+
+void removeIdentityGens(
+   PermGroup *const G)              /* The group G mentioned above. */
+{
+   Permutation *gen, *tempGen;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( isIdentity( gen) ) {
+         tempGen = gen;
+         if ( tempGen->last ) {
+            tempGen->last->next = tempGen->next;
+            gen = tempGen->last;
+         }
+         else {
+            G->generator = tempGen->next;
+            gen = G->generator;
+         }
+      if ( tempGen->next )
+         tempGen->next->last = tempGen->last;
+      deletePermutation( tempGen);
+   }
+}
+
+
+/*-------------------------- adjoinGenInverses ----------------------------*/
+
+/* This function adjoins to each generator in a permutation group G (not
+   having a base and strong generating set) the array of inverse images,
+   provided it is not already present.  For involutory generators, G->image
+   and G->invImage point to the same array. */
+
+void adjoinGenInverses(
+   PermGroup *const G)              /* The group mentioned above. */
+{
+   Permutation *gen;
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( !gen->invImage )
+         adjoinInvImage( gen);
+}
+
+
+/*-------------------------- initializeBase -------------------------------*/
+
+/* This function constructs an initial segment of the base for a permutation
+   group G.  When called, the base must not exist (G->base==NULL).  The
+   initial base points are selected so that, upon return, each generator
+   moves some base point.  The function attempts to choose base points so
+   that as many generators as possible (but not all) fix an initial segment
+   of the base.  The only field in the group G that is allocated is the base
+   field. */
+
+void initializeBase(
+   PermGroup *const G)              /* The group G mentioned above. */
+{
+   Unsigned pt, count, maxCount, newBasePt;
+   BOOLEAN ok;
+   Permutation *gensFixingBase, *perm, *lastPerm;
+
+   G->baseSize = 0;
+
+   /* The xNext field of the generators will be used to maintain a singly-
+      linked list of those generators fixing the initial segment of the base
+      chosen so far.  Here the list is initialized to all generators. */
+   gensFixingBase = G->generator;
+   for ( perm = G->generator ; perm ; perm = perm->next )
+      perm->xNext = perm->next;
+
+   /* As long as some generator fixes the initial base segment, we find a
+      new base point fixed by a maximal number (but not all) such generators.
+      A noninvolutory generator is counted twice. */
+   while ( gensFixingBase ) {
+      maxCount = UNKNOWN;
+      for ( pt = 1 ; pt <= G->degree ; ++pt ) {
+         for ( count = 0 , ok = FALSE , perm = gensFixingBase ; perm ;
+               perm = perm ->xNext )
+            if ( perm->image[pt] == pt )
+               count += (perm->image == perm->invImage) ? 1 : 2;
+            else
+               ok = TRUE;
+         if ( (maxCount == UNKNOWN || count > maxCount) && ok ) {
+            newBasePt = pt;
+            maxCount = count;
+         }
+      }
+      if ( G->baseSize < options.maxBaseSize )
+         G->base[++G->baseSize] = newBasePt;
+      else
+         ERROR1i( "initializeBase", "Base size exceeded maximum of ",
+                  options.maxBaseSize, ".  Rerun with -mb option.")
+
+      /* Here we reconstruct the list of generators fixing the initial base
+         segment. */
+      for ( perm = gensFixingBase , gensFixingBase = NULL ; perm ;
+            perm = perm->xNext )
+         if ( perm->image[newBasePt] == newBasePt ) {
+            if ( gensFixingBase )
+               lastPerm->xNext = perm;
+            else
+               gensFixingBase = perm;
+            lastPerm = perm;
+         }
+      if ( gensFixingBase )
+         lastPerm->xNext = NULL;
+   }
+}
+
+
+/*-------------------------- randomizeGen ---------------------------------*/
+
+/* This function produces a (hopefully) quasi-random element of a group G by
+   taking a previously-computed quasi-random element (randGen) any multiplying
+   it on the right by a random word of length in a specified range
+   (count1,count1+1,...,count2) in a list (genList) of permutations (which
+   should generate the group G).  The length of the word is pseudo-random
+   in the range given above. */
+
+static void randomizeGen(
+   const Unsigned genListLength,        /* The length of the list genList. */
+   const Permutation *const genList[],  /* The list of (generating) perms. */
+   const Unsigned count1,               /* The minimum word length, as above. */
+   const Unsigned count2,               /* The maximum word length, as above. */
+   Permutation *const randGen)          /* The old and new quasi-random elt. */
+{
+   Unsigned i,
+       wordLength = count1 +
+                    ( (count2 > count1) ? randInteger( 0, count2-count1) : 0);
+   for ( i = 1 ; i <= wordLength ; ++i )
+      rightMultiply( randGen, genList[ randInteger(1,genListLength) ]);
+}
+
+
+/*-------------------------- factorGroupElt -------------------------------*/
+
+/* This function writes an element (perm) of a permutation group G as
+              perm = u_1' u_2' ... u_{j-1}' h
+   where u_1',...,u_{j-1}' are inverses of coset representatives
+   (u_p' in G^(p)) and h is an element of G^(j-1)  (i.e., h has level j)
+   such that one of the following holds:
+      1)  j <= G->baseSize and h maps G->base[j] outside the j'th basic orbit.
+      2)  j == G->baseSize+1 and h != 1.
+      3)  j == G->baseSize+1 and h = 1.
+   It returns TRUE in case (3) above and FALSE otherwise.  It also replaces
+   perm by h and returns the value of j as finalLevel. */
+
+static BOOLEAN factorGroupElt(
+   const PermGroup *const G,     /* The permutation group, as above. */
+   Permutation *const perm,      /* The permutation to factor, as above. */
+   Permutation *const h,         /* Set to the permutation h, as above.  Must
+                                    be preallocated of correct degree. */
+   Unsigned *const finalLevel)        /* The value of j, as above. */
+{
+   Unsigned level, img;
+   copyPermutation( perm, h);
+   for ( level = 1 ; level <= G->baseSize ; ++level ) {
+      img = h->image[G->base[level]];
+      if ( G->schreierVec[level][img] )
+         while ( G->schreierVec[level][img] != FIRST_IN_ORBIT ) {
+            rightMultiplyInv( h, G->schreierVec[level][img]);
+            img = h->image[G->base[level]];
+         }
+      else
+         break;
+   }
+   *finalLevel = level;
+   if ( *finalLevel == G->baseSize+1 )
+      return isIdentity( h);
+   else
+      return FALSE;
+}
+
+
+/*-------------------------- replaceByPower -------------------------------*/
+
+void replaceByPower(
+   const PermGroup *const G,
+   const Unsigned level,
+   Permutation *const h)
+{
+   unsigned long hOrder;
+   Unsigned i, img, hCycleLen;
+   UnsignedS *hCycle = allocIntArrayDegree();
+
+   if ( level <= G->baseSize ) {
+      /* Replace h by h^d, where d is maximal subject to d dividing |h| and
+         h^d mapping G->base[level] outside the level'th basic orbit. */
+      img = G->base[level];
+      hCycleLen = 0;
+      do {
+         hCycle[hCycleLen++] = img;
+         img = h->image[img];
+      } while ( img != G->base[level] );
+      for ( i = 2 ; i <= hCycleLen/2 ; ++i )
+         if ( hCycleLen % i == 0  &&
+              G->schreierVec[level][hCycle[hCycleLen/i]] == NULL ) {
+            raisePermToPower( h, hCycleLen / i);
+            break;
+         }
+   }
+   else {
+      /* Replace h by h^d, where d is maximal subject to d dividing |h| and
+         d < |h|. */
+      hOrder = permOrder( h);
+      for ( i = 0 ; primeList[i] != 0 ; ++i ) {
+         if ( hOrder % primeList[i] == 0 )
+            raisePermToPower( h, hOrder / primeList[i]);
+            break;
+      }
+   }
+
+   freeIntArrayDegree( hCycle);
+}
+
+
+/*-------------------------- randSchreier ---------------------------------*/
+/*
+
+   The valid options are:
+      StopAfter: n               (n a positive integer, default 40)
+      MinWordLengthIncrement: w  (w a positive integer, default 7)
+      MaxWordLengthIncrement: x  (x a positive integer, default 23)
+      ReduceGenOrder: r          (r = 'y' or 'n', default 'y')
+      RejectNonInvols: p         (p a nonnegative integer, default 0)
+      RejectHighOrder: q         (q a nonnegative integer, default 0)
+      OnlyEssentialInitGens: i   (i = 'y' or 'n', default 'n')
+      OnlyEssentialAddedGens: a  (a = 'y' or 'n', default 'y') */
+
+
+BOOLEAN randomSchreier(
+   PermGroup *const G,
+   RandomSchreierOptions rOptions)
+{
+   Unsigned  noOfOriginalGens, successCount, level, finalLevel,
+        nonInvolRejectCount, levelLowestOrder;
+   unsigned long curOrder, lowestOrder;
+   Permutation  **originalGen;
+   FactoredInt  trueGroupOrder, factoredOrbLen;
+   Permutation  *gen;
+   Permutation  *randGen = newIdentityPerm( G->degree),
+                *h = newUndefinedPerm( G->degree),
+                *lowestOrderH = newUndefinedPerm( G->degree),
+                *tempPerm;
+
+   /* Set defaults for options. */
+   if ( rOptions.initialSeed == 0 )
+      rOptions.initialSeed = 47;
+   if ( rOptions.minWordLengthIncrement == UNKNOWN )
+      rOptions.minWordLengthIncrement = 7;
+   if ( rOptions.maxWordLengthIncrement == UNKNOWN )
+      rOptions.maxWordLengthIncrement = 23;
+   if ( rOptions.stopAfter == UNKNOWN )
+      if ( G->order )
+         rOptions.stopAfter = 10000;
+      else
+         rOptions.stopAfter = 40;
+   if ( rOptions.reduceGenOrder == UNKNOWN )
+      rOptions.reduceGenOrder = TRUE;
+   if ( rOptions.rejectNonInvols == UNKNOWN )
+      rOptions.rejectNonInvols = 0;
+   if ( rOptions.rejectHighOrder == UNKNOWN )
+      rOptions.rejectHighOrder = 0;
+   if ( rOptions.onlyEssentialInitGens == UNKNOWN )
+      rOptions.onlyEssentialInitGens = FALSE;
+   if ( rOptions.onlyEssentialAddedGens == UNKNOWN )
+      rOptions.onlyEssentialAddedGens = TRUE;
+
+   /* Initialize seed. */
+   initializeSeed( rOptions.initialSeed);
+
+  /* Check that fields of G that must be null initially actually are.  Then
+     allocate these fields.  */
+  if ( G->base || G->basicOrbLen || G->basicOrbit || G->schreierVec )
+     ERROR( "randschr", "A group field that must be null initially was "
+                        "nonnull.")
+  G->base = allocIntArrayBaseSize();
+  G->basicOrbLen = allocIntArrayBaseSize();
+  G->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+  G->schreierVec = (Permutation ***) allocPtrArrayBaseSize();
+
+   /* If the true group order is known, set trueGroupOrder to it.  Otherwise
+      allocate G->order and mark trueGroupOrder as undefined (i.e.,
+      noOfFactors == UNKNOWN).  Then set G->order to 1.  */
+      if ( G->order )
+         trueGroupOrder = *G->order;
+      else {
+         G->order = allocFactoredInt();
+         trueGroupOrder.noOfFactors = UNKNOWN;
+      }
+      G->order->noOfFactors = 0;
+
+   /* Delete identity generators from G if present.  Return immediately if
+      G is the identity group. */
+   removeIdentityGens( G);
+   if ( !G->generator) {     /* Should we allocate G->base, etc??? */
+      G->baseSize = 0;
+      return TRUE;
+   }
+
+   /* Adjoin an inverse image array to each permutation if absent. */
+   adjoinGenInverses( G);
+
+   /* Choose an initial segment of the base so that each generator moves
+      some base point. */
+   initializeBase( G);
+
+   /* Here we allocate and construct an array of pointers to the original
+      generators. */
+   noOfOriginalGens = 0;
+   originalGen = allocPtrArrayDegree();
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      originalGen[++noOfOriginalGens] = gen;
+
+   /* Fill in the level of each generator, and make each generator essential
+      at its level and above. (????) */
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      gen->level = levelIn( G, gen);
+      MAKE_NOT_ESSENTIAL_ALL( gen);
+      for ( level = 1 ; level <= gen->level ; ++level )
+         MAKE_ESSENTIAL_AT_LEVEL( gen, level);
+   }
+
+   /* Construct the orbit length, basic orbit, and Schreier vector arrays.  Set
+      G->order (previously allocated) to the product of the basic orbit
+      lengths. */
+   G->order->noOfFactors = 0;
+   for ( level = 1 ; level <= G->baseSize ; ++level ) {
+      G->basicOrbLen[level] = 1;
+      G->basicOrbit[level] = allocIntArrayDegree();
+      G->schreierVec[level] = allocPtrArrayDegree();
+      if ( rOptions.onlyEssentialInitGens )
+         constructBasicOrbit( G, level, "FindEssential");
+      else
+         constructBasicOrbit( G, level, "AllGensAtLevel" );
+   }
+
+   /* The variable successCount will count the number of consecutive times
+      the quasi-random group element can be factored successfully. */
+   successCount = 0;
+   nonInvolRejectCount = 0;
+
+   while ( successCount < rOptions.stopAfter &&
+                  (trueGroupOrder.noOfFactors == UNKNOWN ||
+                   !factEqual( G->order, &trueGroupOrder)) ) {
+
+      randomizeGen( noOfOriginalGens, originalGen,
+                    rOptions.minWordLengthIncrement,
+                    rOptions.maxWordLengthIncrement, randGen);
+      if ( factorGroupElt( G, randGen, h, &finalLevel) )
+         ++successCount;
+      else {
+         successCount = 0;
+         if ( rOptions.reduceGenOrder )
+            replaceByPower( G, finalLevel, h);
+         if ( nonInvolRejectCount >= rOptions.rejectNonInvols ||
+                                                 isInvolution( h) ) {
+            if ( nonInvolRejectCount > 0 &&
+                 (lowestOrder < (curOrder = permOrder(h)) ||
+                  lowestOrder == curOrder && levelLowestOrder > finalLevel) ) {
+               tempPerm = h;  h = lowestOrderH;  lowestOrderH = tempPerm;
+               finalLevel = levelLowestOrder;
+            }
+            if ( finalLevel == G->baseSize+1 ) {
+               if ( G->baseSize >= options.maxBaseSize )
+                  ERROR1i( "initializeBase",
+                           "Base size exceeded maximum of ",
+                            options.maxBaseSize, ".  Rerun with -mb option.")
+               G->base[++G->baseSize] = pointMovedBy( h);
+               G->basicOrbLen[G->baseSize] = 1;
+               G->basicOrbit[G->baseSize] = allocIntArrayDegree();
+               G->schreierVec[G->baseSize] = allocPtrArrayDegree();
+            }
+            assignGenName( G, h);
+            addStrongGenerator( G, h, FALSE);
+            h = newUndefinedPerm( G->degree);
+            nonInvolRejectCount = 0;
+         }
+         else {
+            curOrder = permOrder( h);
+            if ( curOrder == 0 )
+               curOrder = ULONG_MAX;
+            if ( nonInvolRejectCount == 0 || curOrder < lowestOrder ||
+                 (curOrder == lowestOrder && finalLevel > levelLowestOrder) ) {
+               copyPermutation( h, lowestOrderH);
+               lowestOrder = curOrder;
+               levelLowestOrder = finalLevel;
+            }
+            ++nonInvolRejectCount;
+         }
+      }
+   }
+
+   freePtrArrayDegree( originalGen);
+   deletePermutation( randGen);
+   deletePermutation( h);
+   deletePermutation( lowestOrderH);
+   return  trueGroupOrder.noOfFactors != UNKNOWN &&
+           factEqual( G->order, &trueGroupOrder);
+}
diff --git a/src/leon/src/randschr.h b/src/leon/src/randschr.h
new file mode 100644
index 0000000..6866a83
--- /dev/null
+++ b/src/leon/src/randschr.h
@@ -0,0 +1,27 @@
+#ifndef RANDSCHR
+#define RANDSCHR
+
+extern void removeIdentityGens(
+   PermGroup *const G)              /* The group G mentioned above. */
+;
+
+extern void adjoinGenInverses(
+   PermGroup *const G)              /* The group mentioned above. */
+;
+
+extern void initializeBase(
+   PermGroup *const G)              /* The group G mentioned above. */
+;
+
+extern void replaceByPower(
+   const PermGroup *const G,
+   const Unsigned level,
+   Permutation *const h)
+;
+
+extern BOOLEAN randomSchreier(
+   PermGroup *const G,
+   RandomSchreierOptions rOptions)
+;
+
+#endif
diff --git a/src/leon/src/readdes.c b/src/leon/src/readdes.c
new file mode 100644
index 0000000..2b01863
--- /dev/null
+++ b/src/leon/src/readdes.c
@@ -0,0 +1,511 @@
+/* File readdes.c.  Contains routines to read and write block designs. */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "code.h"
+#include "field.h"
+#include "errmesg.h"
+#include "new.h"
+#include "token.h"
+
+CHECK( readde)
+
+extern GroupOptions options;
+
+static Matrix_01 *xRead01Matrix(
+   FILE *libFile,
+   char *name,
+   BOOLEAN transposeFlag,
+   Unsigned requiredSetSize,
+   Unsigned requiredNumberOfRows,
+   Unsigned requiredNumberOfCols);
+
+
+/*-------------------------- readDesign -----------------------------------*/
+
+/* This function reads in a block design and returns an (0,1)-matrix which
+   is the incidence matrix of the design.  Rows correspond to points and
+   columns to blocks.  Row and column numbering starts at 1.  NOTE THAT
+   THE STORAGE MANAGER IS NOT INITIALIZED. */
+
+Matrix_01 *readDesign(
+   char *libFileName,
+   char *libName,
+   Unsigned requiredPointCount,       /* 0 = any */
+   Unsigned requiredBlockCount)       /* 0 = any */
+{
+   Unsigned pt, nRows, nCols;
+   Matrix_01 *matrix;
+   Token token, saveToken;
+   char inputBuffer[81];
+   FILE *libFile;
+   Unsigned j;
+   char matrixName[MAX_NAME_LENGTH+1];
+
+   /* Open input file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "readDesign", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase( libName);
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "readDesign", "Library block ", libName,
+                  " not found in specified library.")
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Read the design name. */
+   if ( (token = nkReadToken() , saveToken = token , token.type == identifier) &&
+         (token = nkReadToken() , token.type == equal) )
+      strcpy( matrixName, saveToken.value.identValue);
+
+   if ( (token = readToken() , token.type != identifier) ||
+             strcmp( token.value.identValue, "seq") != 0 ||
+             (token = readToken() , token.type != leftParen) )
+      ERROR( "readDesign", "Invalid syntax in design library.")
+
+   /* Read the number of points and number of blocks. */
+   if ( (token = readToken() , token.type != integer) ||
+        (nRows = token.value.intValue) < 2 ||
+        ( requiredPointCount != 0 && nRows != requiredPointCount ) ||
+        (token = readToken() , token.type != comma) ||
+        (token = readToken() , token.type != integer) ||
+        (nCols= token.value.intValue) < 2 ||
+        ( requiredBlockCount != 0 && nCols != requiredBlockCount ) ||
+        (token = readToken() , token.type != comma) )
+      ERROR( "readDesign", "Invalid syntax in design library.")
+   if ( nRows + nCols > options.maxDegree )
+      ERROR( "readDesign", "Too many rows+columns.")
+
+   /* Allocate the (0,1) incidence matrix, and zero it. */
+   matrix = newZeroMatrix( 2, nRows, nCols);
+   strcpy( matrix->name, matrixName);
+
+   /* Read the blocks. */
+   for ( j = 1 ; j <= nCols ; ++j ) {
+      if ( token = readToken() , token.type != leftBracket )
+         ERROR( "readDesign", "Invalid symbol in point list.")
+      while  (token = readToken() , token.type == integer ||
+                                    token.type == comma )
+         if ( token.type == integer && (pt = token.value.intValue) > 0 &&
+                                       pt <= nRows )
+            matrix->entry[pt][j] = 1;
+         else if ( token.type == integer )
+            ERROR1i( "readDesign", "Invalid point ", pt, ".")
+      if ( token.type != rightBracket || (token = readToken() ,
+               (j < nCols ? token.type != comma : token.type != rightParen)) )
+         ERROR( "readDesign", "Invalid symbol in point list.")
+   }
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return matrix;
+}
+
+
+/*-------------------------- writeDesign ----------------------------------*/
+
+/* This function writes out an (0,1) matrix as a block design.  Rows
+   correspond to points and columns to blocks.  Row and column numbering
+   starts at 1. */
+
+void writeDesign(
+   char *libFileName,
+   char *libName,
+   Matrix_01 *matrix,
+   char *comment)
+{
+   Unsigned i, j, column, leadChar;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "writeDesign", "File ", libFileName,
+               " could not be opened for output.")
+
+   /* Write the library name. */
+   fprintf( libFile, "LIBRARY %s;\n", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( libFile, "& %s &\n", comment);
+
+   /* Write the matrix name. */
+   if ( !matrix->name[0] )
+      strcpy( matrix->name, "D");
+   fprintf( libFile, " %s = seq(", matrix->name);
+
+   /* Write the numbers of points and blocks. */
+   fprintf( libFile, " %d, %d,", matrix->numberOfRows, matrix ->numberOfCols);
+
+   /* For j = 1,2,.., write the j'th block. */
+   for ( j = 1 ; j <= matrix->numberOfCols ; ++j) {
+      fprintf( libFile, "\n    ");
+      column = 5;
+      leadChar = '[';
+      for ( i = 1 ; i <= matrix->numberOfRows ; ++i )
+         if ( matrix->entry[i][j] != 0 ) {
+            column += fprintf( libFile, "%c", leadChar);
+            if (column > 73 ) {
+               fprintf( libFile, "\n      ");
+               column = 7;
+            }
+            column += fprintf( libFile, "%d", i);
+            leadChar = ',';
+         }
+      fprintf( libFile, "]");
+      if ( j < matrix->numberOfCols )
+         fprintf( libFile, ",");
+   }
+
+   /* Write terminators. */
+   fprintf( libFile, ");\nFINISH;\n");
+
+   /* Close output file. */
+   fclose( libFile);
+}
+
+
+/*-------------------------- read01Matrix ---------------------------------*/
+
+/* This function reads in an (0,1)-matrix and returns a new matrix equal
+   to that read in.  NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */
+
+Matrix_01 *read01Matrix(
+   char *libFileName,
+   char *libName,
+   BOOLEAN transposeFlag,                /* If true, matrix is transposed. */
+   BOOLEAN adjoinIdentity,               /* If true, form (A|I), A = matrix read. */
+   Unsigned requiredSetSize,             /* 0 = any */
+   Unsigned requiredNumberOfRows,        /* 0 = any */
+   Unsigned requiredNumberOfCols)        /* 0 = any */
+{
+   Unsigned  nRows, nCols, setSize;
+   Matrix_01 *matrix;
+   Token token, saveToken;
+   char inputBuffer[81];
+   FILE *libFile;
+   Unsigned i, j, temp;
+   char matrixName[MAX_NAME_LENGTH+1], str[100];
+   BOOLEAN firstIdent;
+
+   /* Open input file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "read01Matrix", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase( libName);
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   firstIdent = TRUE;
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "read01Matrix", "Library block ", libName,
+                  " not found in specified library.")
+      if ( firstIdent && sscanf( inputBuffer, "%s", str) == 1 &&
+           (firstIdent = FALSE , strcmp( lowerCase(str), "library") != 0) )
+              return xRead01Matrix( libFile, str, transposeFlag, requiredSetSize,
+                             requiredNumberOfRows, requiredNumberOfCols);
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Read the matrix name. */
+   if ( (token = nkReadToken() , saveToken = token , token.type == identifier) &&
+         (token = nkReadToken() , token.type == equal) )
+      strcpy( matrixName, saveToken.value.identValue);
+
+   if ( (token = readToken() , token.type != identifier) ||
+             strcmp( token.value.identValue, "seq") != 0 ||
+             (token = readToken() , token.type != leftParen) )
+      ERROR( "read01Matrix", "Invalid syntax in matrix library.")
+
+   /* Read the field or set size, the number of rows, and number of columns, 
+      and exchange numbers if matrix is to be transposed. */
+   if ( (token = readToken() , token.type != integer) ||
+        (setSize = token.value.intValue) < 1 ||
+        (token = readToken() , token.type != comma) ||
+        (token = readToken() , token.type != integer) ||
+        (nRows = token.value.intValue) < 1 ||
+        (token = readToken() , token.type != comma) ||
+        (token = readToken() , token.type != integer) ||
+        (nCols= token.value.intValue) < 1 ||
+        (token = readToken() , token.type != comma) )
+      ERROR( "read01Matrix", "Invalid syntax in matrix library.")
+   if ( transposeFlag )
+      EXCHANGE( nRows, nCols, temp)
+   if ( nRows + nCols + adjoinIdentity * nRows> options.maxDegree )
+      ERROR( "read01Matrix", "Too many rows+columns.")
+   if ( requiredSetSize != 0 && setSize != requiredSetSize )
+      ERROR1s( "read01Matrix", "Matrix ", matrixName, 
+               " has the wrong set/field size.")
+   if ( requiredNumberOfRows != 0 && nRows != requiredNumberOfRows )
+      ERROR1s( "read01Matrix", "Matrix ", matrixName, 
+               " has the wrong number of rows.")
+   if ( requiredNumberOfCols != 0 && nCols != requiredNumberOfCols )
+      ERROR1s( "read01Matrix", "Matrix ", matrixName, 
+               " has the wrong number of columns.")
+
+   /* Allocate the (0,1) incidence matrix, and zero it. */
+   matrix = newZeroMatrix( setSize, nRows, nCols + adjoinIdentity * nRows);
+   strcpy( matrix->name, matrixName);
+   if ( adjoinIdentity )
+      for ( i = 1 ; i <= nRows ; ++i )
+         matrix->entry[i][nCols+i] = 1;
+
+   /* Read the entries of the matrix in row-major order. */
+   if ( (token = readToken() , token.type != identifier) ||
+        strcmp( token.value.identValue, "seq") != 0 ||
+        (token = readToken() , token.type != leftParen) )
+      ERROR( "read01Matrix", "Invalid syntax at start of matrix entries.")
+   if ( !transposeFlag )
+      for ( i = 1 ; i <= nRows ; ++i )
+         for ( j = 1 ; j <= nCols ; ++j ) {
+            while ( token = readToken() , token.type == comma )
+               ;
+            if ( token.type != integer || token.value.intValue < 0 ||
+                                          token.value.intValue >= matrix->setSize )
+               ERROR( "read01Matrix", "Invalid syntax in matrix entries.")
+            matrix->entry[i][j] = token.value.intValue;
+         }
+   else
+      for ( i = 1 ; i <= nCols ; ++i )
+         for ( j = 1 ; j <= nRows ; ++j ) {
+            while ( token = readToken() , token.type == comma )
+               ;
+            if ( token.type != integer || token.value.intValue < 0 ||
+                                          token.value.intValue >= matrix->setSize )
+               ERROR( "read01Matrix", "Invalid syntax in matrix entries.")
+            matrix->entry[j][i] = token.value.intValue;
+         }
+
+   /* Check for proper closing. */
+   if ( (token = readToken() , token.type != rightParen) ||
+        (token = readToken() , token.type != rightParen) ||
+        (token = readToken() , token.type != semicolon) )
+      ERROR( "read01Matrix", "Invalid syntax at end of matrix entries.")
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return matrix;
+}
+
+
+/*-------------------------- xRead01Matrix --------------------------------*/
+
+/* This function reads in an (0,1)-matrix in the alternate format and returns 
+   a new matrix equal to that read in.  It is called only by read01Matrix.
+   NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */
+
+static Matrix_01 *xRead01Matrix(
+   FILE *libFile,
+   char *name,
+   BOOLEAN transposeFlag,            /* If true, matrix is transposed. */
+   Unsigned requiredSetSize,         /* 0 = any */
+   Unsigned requiredNumberOfRows,    /* 0 = any */
+   Unsigned requiredNumberOfCols)    /* 0 = any */
+{
+   Unsigned  nRows, nCols, setSize;
+   Matrix_01 *matrix;
+   Unsigned i, j, temp;
+   int symbol, maxSymbol;
+
+   /* Read the field or set size, the number of rows, and number of columns, 
+      and exchange numbers if matrix is to be transposed. */
+   if ( fscanf( libFile, "%d %d %d", &setSize, &nRows, &nCols) != 3 )
+      ERROR( "xRead01Matrix", "Invalid syntax set size, rows count, or col count")
+   if ( (requiredSetSize != 0 && setSize != requiredSetSize) ||
+           nRows < 1 ||
+           (requiredNumberOfRows != 0 && nRows != requiredNumberOfRows) ||
+           nCols < 1 ||
+           (requiredNumberOfCols != 0 && nCols != requiredNumberOfCols) )
+      ERROR( "xRead01Matrix", "Invalid syntax in matrix library.")
+   if ( nRows + nCols > options.maxDegree )
+      ERROR( "xRead01Matrix", "Too many rows+columns.")
+   if ( transposeFlag )
+      EXCHANGE( nRows, nCols, temp)
+
+   /* Allocate the (0,1) incidence matrix, and zero it. */
+   matrix = newZeroMatrix( setSize, nRows, nCols);
+   if ( strlen(name) > MAX_NAME_LENGTH )
+      ERROR1i( "xRead01Matrix", "Name for code exceeds maximum of ",
+               MAX_NAME_LENGTH, " characters.")
+   strcpy( matrix->name, name);
+
+   /* Read the entries of the matrix in row-major order. */
+   maxSymbol = '0' + setSize - 1;
+   if ( !transposeFlag )
+      for ( i = 1 ; i <= nRows ; ++i )
+         for ( j = 1 ; j <= nCols ; ++j ) {
+            while ( (symbol = getc(libFile)) == ' ' || symbol == ','  || symbol == '\n' )
+               ;
+            if ( symbol < '0' && symbol > maxSymbol )
+               if ( symbol == EOF )
+                  ERROR( "xRead01Matrix", "Premature end of file.")
+               else
+                  ERROR( "xRead01Matrix", "Invalid symbol in matrix entries.")
+            matrix->entry[i][j] = symbol - '0';
+         }
+   else
+      for ( i = 1 ; i <= nCols ; ++i )
+         for ( j = 1 ; j <= nRows ; ++j ) {
+            while ( (symbol = getc(libFile)) == ' ' || symbol == ',' || symbol == '\n' )
+               ;
+            if ( symbol < '0' && symbol > maxSymbol )
+               if ( symbol == EOF )
+                  ERROR( "xRead01Matrix", "Premature end of file.")
+               else
+                  ERROR( "xRead01Matrix", "Invalid symbol in matrix entries.")
+            matrix->entry[j][i] = symbol - '0';
+         }
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return matrix;
+}
+
+
+/*-------------------------- write01Matrix --------------------------------*/
+
+/* This function writes out an (0,1) matrix.  The entries are written in
+   row-major order. */
+
+void write01Matrix(
+   char *libFileName,
+   char *libName,
+   Matrix_01 *matrix,
+   BOOLEAN transposeFlag,
+   char *comment)
+{
+   Unsigned i, j, column,
+     outputRows = (transposeFlag) ? matrix->numberOfCols : matrix->numberOfRows,
+     outputCols = (transposeFlag) ? matrix->numberOfRows : matrix->numberOfCols;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "write01Matrix", "File ", libFileName,
+               " could not be opened for output.")
+
+   /* Write the library name. */
+   fprintf( libFile, "LIBRARY %s;\n", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( libFile, "\" %s \"\n", comment);
+
+   /* Write the matrix name. */
+   if ( !matrix->name[0] )
+      strcpy( matrix->name, "M");
+   fprintf( libFile, " %s = seq(", matrix->name);
+
+   /* Write the set size and numbers of rows and columns and "seq(". */
+   fprintf( libFile, " %d, %d, %d, seq(", matrix->setSize, outputRows, 
+                                          outputCols);
+
+   /* For i = 1,2,..,nRows write the i'th block. */
+   for ( i = 1 ; i <= outputRows ; ++i) {
+      fprintf( libFile, "\n    ");
+      column = 5;
+      for ( j = 1 ; j <= outputCols ; ++j ) {
+         if ( column > 75 ) {
+            fprintf( libFile, "\n     ");
+            column = 6;
+         }
+         column += transposeFlag ?
+                      fprintf( libFile, "%d", matrix->entry[j][i]) :
+                      fprintf( libFile, "%d", matrix->entry[i][j]);
+         if ( i < outputRows || j < outputCols )
+            column += fprintf( libFile, ",");
+      }
+   }
+
+   /* Write terminators. */
+   fprintf( libFile, "));\nFINISH;\n");
+
+   /* Close output file. */
+   fclose( libFile);
+}
+
+
+
+
+/*-------------------------- readCode -------------------------------------*/
+
+/* This function reads in a binary code and returns a new code equal
+   to that read in.  NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */
+
+Code *readCode(
+   char *libFileName,
+   char *libName,
+   BOOLEAN reduceFlag,                   /* If true, gen matrix is reduced. */
+   Unsigned requiredSetSize,             /* 0 = any */
+   Unsigned requiredDimension,           /* 0 = any */
+   Unsigned requiredLength)              /* 0 = any */
+{
+   Code *C;
+   Matrix_01 *M;
+
+   M = read01Matrix( libFileName, libName, FALSE, FALSE, requiredSetSize, 
+                     requiredDimension, requiredLength);
+   C = (Code *) M;
+   C->infoSet = NULL;
+   if ( C->fieldSize > 2 )
+      C->field = buildField( C->fieldSize);
+   if ( reduceFlag )
+      reduceBasis( C);
+   return C;
+}
+
+
+/*-------------------------- writeCode ------------------------------------*/
+
+/* This function writes out a code.  The information set is not written. */
+
+void writeCode(
+   char *libFileName,
+   char *libName,
+   Code *C,
+   char *comment)
+{
+   write01Matrix( libFileName, libName, (Matrix_01 *) C, FALSE, comment);
+}
+
diff --git a/src/leon/src/readdes.h b/src/leon/src/readdes.h
new file mode 100644
index 0000000..aea040a
--- /dev/null
+++ b/src/leon/src/readdes.h
@@ -0,0 +1,52 @@
+#ifndef READDES
+#define READDES
+
+extern Matrix_01 *readDesign(
+   char *libFileName,
+   char *libName,
+   Unsigned requiredPointCount,       /* 0 = any */
+   Unsigned requiredBlockCount)       /* 0 = any */
+;
+
+extern void writeDesign(
+   char *libFileName,
+   char *libName,
+   Matrix_01 *matrix,
+   char *comment)
+;
+
+extern Matrix_01 *read01Matrix(
+   char *libFileName,
+   char *libName,
+   BOOLEAN transposeFlag,                /* If true, matrix is transposed. */
+   BOOLEAN adjoinIdentity,               /* If true, form (A|I), A = matrix read. */
+   Unsigned requiredSetSize,             /* 0 = any */
+   Unsigned requiredNumberOfRows,        /* 0 = any */
+   Unsigned requiredNumberOfCols)        /* 0 = any */
+;
+
+extern void write01Matrix(
+   char *libFileName,
+   char *libName,
+   Matrix_01 *matrix,
+   BOOLEAN transposeFlag,
+   char *comment)
+;
+
+extern Code *readCode(
+   char *libFileName,
+   char *libName,
+   BOOLEAN reduceFlag,                   /* If true, gen matrix is reduced. */
+   Unsigned requiredSetSize,             /* 0 = any */
+   Unsigned requiredDimension,           /* 0 = any */
+   Unsigned requiredLength)              /* 0 = any */
+;
+
+extern void writeCode(
+   char *libFileName,
+   char *libName,
+   Code *C,
+   char *comment)
+;
+
+#endif
diff --git a/src/leon/src/readgrp.c b/src/leon/src/readgrp.c
new file mode 100644
index 0000000..395c68e
--- /dev/null
+++ b/src/leon/src/readgrp.c
@@ -0,0 +1,784 @@
+/* File readGrp. */
+
+#include <stddef.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "chbase.h"
+#include "cstborb.h"
+#include "errmesg.h"
+#include "essentia.h"
+#include "factor.h"
+#include "permut.h"
+#include "permgrp.h"
+#include "randschr.h"
+#include "storage.h"
+#include "token.h"
+
+CHECK( readgr)
+
+extern GroupOptions options;
+
+static FILE *outFile;   /* File to which group tables are output. */
+static Unsigned permNumber;
+
+
+/*-------------------------- readFactoredInt -----------------------------*/
+
+FactoredInt readFactoredInt(void)
+{
+   FactoredInt fInt;
+   Token  token, token2;
+
+   fInt.noOfFactors = 0;
+   token = readToken();
+   if ( token.type != integer )
+      ERROR( "readFactoredInt", "Invalid symbol in factored integer.")
+   else if ( token.value.intValue == 1 )
+      return fInt;
+   else {
+      unreadToken( token);
+      do {
+         token = readToken();
+         if ( token.type != integer )
+            ERROR( "readFactoredInt", "Invalid symbol in factored integer.");
+         fInt.prime[fInt.noOfFactors] = token.value.intValue;
+         if ( token = readToken() , token.type == caret )
+            if ( token2 = readToken() , (token2.type == integer &&
+                                         token2.value.intValue > 0) )
+               fInt.exponent[fInt.noOfFactors] = token2.value.intValue;
+            else
+               ERROR( "readFactoredInt", "Invalid exponent in factored "
+                                         "integer")
+         else {
+            fInt.exponent[fInt.noOfFactors] = 1;
+            unreadToken( token);
+         }
+         ++fInt.noOfFactors;
+      } while ( token = readToken() , token.type == asterisk );
+      unreadToken( token);
+   }
+
+   return fInt;
+}
+
+
+/*-------------------------- writeFactoredInt ----------------------------*/
+
+void writeFactoredInt(
+   FactoredInt *fInt)
+{
+   Unsigned i;
+
+   if ( fInt->noOfFactors == 0 ) {
+      fprintf( outFile, "%d", 1);
+      return;
+   }
+
+   for ( i = 0 ; i < fInt->noOfFactors ; ++i ) {
+      if ( i > 0 )
+         fprintf( outFile, " * ");
+      fprintf( outFile, "%u", fInt->prime[i]);
+      if ( fInt->exponent[i] > 1 )
+         fprintf( outFile, "^%u", fInt->exponent[i]);
+   }
+
+   return;
+}
+
+
+/*-------------------------- readCyclePerm -------------------------------*/
+
+TokenType readCyclePerm(
+   Permutation *perm)
+{
+   Unsigned     pt, previousPt, firstPtOfCycle, parenLevel = 0;
+   Unsigned     degree = perm->degree;
+   Token   token;
+   BOOLEAN newCycle;
+
+   /* Read the cycles and fill in the image array. */
+   while ( token = readToken() , (parenLevel > 0 || token.type != comma) &&
+           token.type != semicolon && token.type != eof &&
+           token.type != rightBracket )
+      switch( token.type ) {
+         case comma:
+            break;
+         case leftParen:
+            if ( parenLevel == 0 ) {
+               parenLevel = 1 ;
+               newCycle = TRUE;
+            }
+            else
+               ERROR1s( "readCyclePerm", "Parenthesis error in permutation ",
+                       perm->name, ".")
+            break;
+         case rightParen:
+            if ( parenLevel == 1 && !newCycle ) {
+               parenLevel = 0 ;
+               perm->image[previousPt] = firstPtOfCycle;
+            }
+            else
+               ERROR1s( "readCyclePerm", "Parenthesis error in permutation ",
+                        perm->name, ".")
+            break;
+         case integer:
+            pt = token.value.intValue;
+            if ( parenLevel == 1 && pt >= 1 && pt <= degree &&
+                                               perm->image[pt] == 0 )
+               if ( newCycle ) {
+                  firstPtOfCycle = pt;
+                  newCycle = FALSE;
+                  previousPt = pt;
+               }
+               else {
+                  perm->image[previousPt] = pt;
+                  previousPt = pt;
+               }
+            else
+               ERROR1s( "readCyclePerm", "Invalid or repeated point in "
+                        "permutation ", perm->name, ".")
+            break;
+         default:
+            ERROR1s( "readCyclePerm", "Invalid character in permutation ",
+                     perm->name, ".")
+      }
+
+   /* For any points not occuring in cycles, mark the image as the point
+      itself. */
+   for ( pt = 1 ; pt <= degree ; ++pt)
+      if ( perm->image[pt] == 0 )
+         perm->image[pt] = pt;
+
+   /* Return to caller. */
+   return token.type;
+}
+
+
+/*-------------------------- readImagePerm --------------------------------*/
+
+TokenType readImagePerm(
+   Permutation *perm)
+{
+   Unsigned pt;
+   Unsigned degree = perm->degree;
+   Token token;
+   char *found = allocBooleanArrayDegree();;
+
+   /* First flag all points as not occuring as images. */
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      found[pt] = FALSE;
+
+   /* Clear slash and then read in images of points. */
+   token = readToken();
+   if ( token.type != slash ) {
+      ERROR1s( "readImagePerm", "Invalid syntax in image form "
+               "permutation ", perm->name, ".")
+   }
+
+   pt = 0;
+   while ( token = readToken() , token.type != slash)
+      if ( token.type == comma )
+         ;
+      else if( token.type == integer && token.value.intValue > 0 &&
+               token.value.intValue <= degree &&
+               found[token.value.intValue] == FALSE ) {
+         perm->image[++pt] = token.value.intValue;
+         found[token.value.intValue] = TRUE;
+      }
+      else {
+         ERROR1s( "readImagePerm", "Invalid syntax in image form "
+                  "permutation ", perm->name, ".")
+      }
+
+   /* Check that enough images were read. */
+   if ( pt != degree ) {
+      ERROR1s( "readImagePerm", "Invalid syntax in image form "
+               "permutation ", perm->name, ".")
+   }
+   if ( token = readToken() , token.type != comma && token.type != semicolon &&
+                            token.type != eof && token.type != rightBracket ) {
+      ERROR1s( "readImagePerm", "Invalid syntax in image form "
+               "permutation ", perm->name, ".")
+   }
+
+   /* Add trailing 0 to image array. */
+   perm->image[degree+1] = 0;
+
+   /* Return to caller. */
+   freeBooleanArrayDegree( found);
+   return token.type;
+}
+
+
+/*-------------------------- readPerm -------------------------------------*/
+
+Permutation *readPerm(
+   const Unsigned degree,        /* Degree of permutation to be read. */
+   PermFormat *const format,     /* Set to cycleFormat or imageFormat. */
+   TokenType *const terminator)  /* Set to type of token (comma, semicolon, or
+                                   eof, or right square bracket) that terminated
+                                   the permutation. */
+{
+   Unsigned  pt;
+   Token     token, token2;
+   Permutation *perm;
+
+   /* Allocate the permutation. */
+   perm = allocPermutation();
+
+   /* Mark essential field as unknown. */
+   MAKE_UNKNOWN_ESSENTIAL( perm);
+
+   /* Process permutation name if present. */
+   if ( token = readToken() , token.type == identifier )
+      if ( token2 = readToken() , token2.type == equal ) {
+         strncpy( perm->name, token.value.identValue, MAX_NAME_LENGTH+1);
+         perm->name[MAX_NAME_LENGTH] = '\0';
+      }
+      else
+         ERROR1s( "readPerm", "Missing equal sign after name in permutation ",
+                  token.value.identValue, ".")
+   else {
+      sprintf( perm->name, "%c%u", '_', permNumber++);
+      unreadToken( token);
+   }
+
+   /* Fill in the degree. */
+   perm->degree = degree;
+
+   /* Allocate the image array, and initially mark all point images as
+      unknown.  Also add trailing 0 to array. */
+   perm->image = allocIntArrayDegree();
+   for ( pt = 1 ; pt <= degree+1 ; ++pt )
+      perm->image[pt] = 0;
+
+   /* Check whether permutation is in cycle or image format, and call
+      appropriate function to finish read. */
+   switch ( token = readToken() , token.type ) {
+      case leftParen:
+         unreadToken( token);
+         *terminator = readCyclePerm( perm);
+         *format = cycleFormat;
+         break;
+      case slash:
+         unreadToken( token);
+         *terminator = readImagePerm( perm);
+         *format = imageFormat;
+         break;
+      default:
+         unreadToken( token);
+         ERROR( "readPerm", "Invalid symbol at start of cycle/image field.");
+   }
+
+   /* Return to caller. */
+   return perm;
+}
+
+
+/*-------------------------- readPermGroup --------------------------------*/
+
+PermGroup *readPermGroup(
+   char *libFileName,             /* The library file containing the group. */
+   char *libName,                 /* The library defining the group. */
+   const Unsigned requiredDegree, /* The degree that the group must have,
+                                     or zero if group may have any degree. */
+   const char *rpgOptions)        /* Options:
+                                      Generate:       generate base/sgs
+                                                      if absent,
+                                      CompleteOrbits: construct complete orbit
+                                                     structure. */
+{
+   FILE *libFile;
+   Unsigned level;
+   Permutation *perm, *oldPerm;
+   PermGroup *G = allocPermGroup();
+   BOOLEAN generateFlag = FALSE, completeOrbitFlag = FALSE;
+   BOOLEAN genSetFlag = FALSE, strGenSetFlag = FALSE;
+   PermFormat format;
+   Token token;
+   TokenType terminator;
+   char attribute[MAX_NAME_LENGTH+1];
+   char inputBuffer[81];
+   RandomSchreierOptions rOptions = {0,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,
+                                     UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN};
+   /* Attempt to open library file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "readgrp", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Process options. */
+   setInputString( rpgOptions);
+   while ( token = sReadToken() , token.type != eof )
+      if ( token.type == identifier && strcmp( token.value.identValue,
+                                               "Generate") == 0 )
+         generateFlag = TRUE;
+      else if ( token.type == identifier && strcmp( token.value.identValue,
+                                               "CompleteOrbits") == 0 )
+         completeOrbitFlag = TRUE;
+      else
+         ERROR( "readPermGroup", "Invalid options.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase(libName);
+   permNumber = 1;
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "readPermGroup", "Library block ", libName,
+                  " not found in specified library.")
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Read the group name. */
+   token = nkReadToken();
+   if ( token.type != identifier )
+      ERROR1s( "readPermGroup",
+               "Invalid syntax at start of Cayley library block ", libName,
+               ".")
+   strcpy( G->name, token.value.identValue);
+   if ( (token = nkReadToken() , token.type != colon) ||
+        (token = nkReadToken() , token.type != identifier ||
+                           strcmp(token.value.identValue,"permutation") != 0) ||
+        (token = nkReadToken() , token.type != identifier ||
+                           strcmp(token.value.identValue,"group") != 0) ||
+        (token = nkReadToken() , token.type != leftParen) ||
+        (token = nkReadToken() , token.type != integer ||
+                               (G->degree = token.value.intValue) < 1 ||
+                               G->degree > options.maxDegree ) ||
+        (token = nkReadToken() , token.type != rightParen) ||
+        (token = nkReadToken() , token.type != semicolon) )
+      ERROR( "readPermGroup", "Invalid syntax in group declaration.")
+
+   /* Check that group has the required degree, if specified. */
+   if ( requiredDegree > 0 && G->degree != requiredDegree)
+      ERROR1s( "readPermGroup", "Group ", G->name, " has incorrect degree.")
+
+   /* Initialize the storage manager. */
+   initializeStorageManager( G->degree);
+
+   /* Read the attributes (forder, generators, base, strong generators). */
+   for (;;) {
+      token  = nkReadToken();
+      if ( token.type == identifier &&
+           strcmp( token.value.identValue, "finish") == 0 )
+         break;
+      if ( strcmp( token.value.identValue, G->name) != 0 ||
+           (token = nkReadToken() , token.type != period) ||
+           (token = nkReadToken() , token.type != identifier) )
+         ERROR( "readPermGroup", "Invalid syntax in group attribute.")
+      strcpy( attribute, token.value.identValue);
+
+      /* Read factored order. */
+      if ( strcmp(attribute,"forder") == 0 &&
+           (token = nkReadToken() , token.type == colon) ) {
+         G->order = allocFactoredInt();
+         *(G->order) = readFactoredInt();
+         if ( token = nkReadToken() , token.type != semicolon )
+            ERROR( "readPermGroup",
+                   "Invalid syntax in group attribute.")
+      }
+
+      /* Read the base. */
+      else if ( strcmp(attribute,"base") == 0 &&
+               (token = nkReadToken() , token.type == colon) &&
+               (token = nkReadToken() , token.type == identifier) &&
+               strcmp( token.value.identValue, "seq") == 0 &&
+               (token = nkReadToken() , token.type == leftParen)  ) {
+         G->baseSize = 0;
+         G->base = allocIntArrayBaseSize();
+         G->basicOrbLen = allocIntArrayBaseSize();
+         G->basicOrbit = allocPtrArrayBaseSize();
+         G->schreierVec = (Permutation ***) allocPtrArrayBaseSize();
+         while ( token = nkReadToken() , token.type != rightParen )
+            if ( token.type == integer && token.value.intValue >= 1 &&
+                                         token.value.intValue <= G->degree &&
+                                         G->baseSize < options.maxBaseSize )
+               G->base[++G->baseSize] = token.value.intValue;
+            else if ( token.type == comma )
+               ;
+            else
+               ERROR( "readPermGroup", "Invalid base point.")
+         if ( token = nkReadToken() , token.type != semicolon )
+               ERROR( "readPermGroup", "Invalid syntax in base.")
+      }
+
+      /* Read the generators. */
+      else if ( strcmp(attribute,"generators") == 0 &&
+           (token = nkReadToken() , token.type == colon) ) {
+         if ( strGenSetFlag )
+            ERROR( "readPermGroup",
+                   "Both generators and strong generators were specified.");
+         genSetFlag = TRUE;
+         do {
+            perm = readPerm( G->degree, &format, &terminator);
+            if ( !G->generator ) {
+               G->generator = perm;
+               G->printFormat = format;
+               perm->last = NULL;
+            }
+            else {
+               oldPerm->next = perm;
+               perm->last = oldPerm;
+            }
+            perm->next = NULL;
+            oldPerm = perm;
+         } while ( terminator == comma );
+         if ( terminator != semicolon )
+            ERROR( "readPermGroup",
+                   "Invalid syntax in group attribute.")
+      }
+
+      /* Read the strong generators. */
+      else if ( strcmp(attribute,"strong") == 0 &&
+           (token = nkReadToken() , token.type == identifier) &&
+           strcmp( token.value.identValue, "generators") == 0 &&
+           (token = nkReadToken() , token.type == colon ) &&
+           (token = nkReadToken() , token.type == leftBracket) ) {
+         if ( genSetFlag )
+            ERROR( "readPermGroup",
+                   "Both generators and strong generators were specified.");
+         strGenSetFlag = TRUE;
+         token = nkReadToken();
+         if ( token.type != rightBracket ) {
+            unreadToken( token);
+            do {
+               perm = readPerm( G->degree, &format, &terminator);
+               if ( !G->generator ) {
+                  G->generator = perm;
+                  G->printFormat = format;
+                  perm->last = NULL;
+               }
+               else {
+                  oldPerm->next = perm;
+                  perm->last = oldPerm;
+               }
+               perm->next = NULL;
+               oldPerm = perm;
+            } while ( terminator == comma );
+         }
+         else
+            terminator = rightBracket;
+         if ( terminator != rightBracket ||
+              (token = nkReadToken() , token.type != semicolon) )
+            ERROR( "readPermGroup",
+                   "Invalid syntax in group attribute.")
+      }
+
+      /* Handle invalid attribute. */
+      else
+         ERROR( "readPermGroup", "Invalid syntax in group attribute.")
+   }
+
+   /* Mark point list fields as null. */
+   G->invOmega = G->omega = NULL;
+
+   /* Adjoin generator inverses. */
+   adjoinGenInverses( G);
+
+   /* If a base is known, construct either the Schreier vectors/ basic orbits
+      or the complete orbit structure, depending on whether the input option
+      CompleteOrbits is present. */
+   if ( G->base ) {
+      G->order->noOfFactors = 0;
+      for ( perm = G->generator ; perm ; perm = perm->next )
+         perm->level = levelIn( G, perm);
+      for ( level = 1 ; level <= G->baseSize ; ++level ) {
+         G->basicOrbLen[level] = 1;
+         G->basicOrbit[level] = allocIntArrayDegree();
+         G->schreierVec[level] = allocPtrArrayDegree();
+         if ( completeOrbitFlag ) {
+            G->orbNumberOfPt = (UnsignedS **) allocIntArrayBaseSize();
+            G->startOfOrbitNo = (UnsignedS **) allocIntArrayBaseSize();
+            constructAllOrbitInfo( G, level);
+         }
+         else
+            constructBasicOrbit( G, level, "AllGensAtLevel");   /*??????*/
+      }
+   }
+
+   /* If a base is not known, construct one if generate option is given. */
+   else if ( generateFlag )
+      randomSchreier( G, rOptions);        /*????????????*/
+
+   /* Close the input file. */
+   fclose( libFile);
+
+   /* Return the permutation group read in. */
+   return G;
+}
+
+
+/*-------------------------- setOutputFile -------------------------------*/
+
+void setOutputFile(
+   FILE *grpFile)
+{
+   outFile = grpFile;
+}
+
+
+/*-------------------------- writeCyclePerm ------------------------------*/
+
+#define CHECK_NEW_LINE if ( column >= endCol-4 ) {  \
+                          fprintf( outFile, "\n");  \
+                          for ( j = 1 ; j < startCol2 ; ++j )  \
+                             fprintf( outFile, " ");  \
+                          column = startCol2;  \
+                       }
+
+void writeCyclePerm(
+   Permutation *s,        /* The permutation to write. */
+   Unsigned startCol1,    /* First line starts in this column. */
+   Unsigned startCol2,    /* Remaining lines start in this column. */
+   Unsigned endCol)       /* Lines end by this column. */
+{
+   Unsigned j, pt, img;
+   Unsigned column = startCol1;
+   char *found = allocBooleanArrayDegree();
+
+   for ( pt = 1 ; pt <= s->degree ; ++pt )
+      found[pt] = FALSE;
+
+   if ( isIdentity(s) ) {
+      fprintf( outFile, "1");
+      freeBooleanArrayDegree( found);
+      return;
+   }
+   for ( pt = 1 ; pt <= s->degree ; ++pt )
+      if ( !found[pt] && s->image[pt] != pt ) {
+         found[pt] = TRUE;
+         CHECK_NEW_LINE
+         column += fprintf (outFile, "(%u,", pt);
+         for ( img = s->image[pt] ; img != pt ; img = s->image[img] ) {
+            CHECK_NEW_LINE
+            if ( s->image[img] == pt )
+               column += fprintf( outFile, "%u)", img);
+            else
+               column += fprintf( outFile, "%u,", img);
+            found[img] = TRUE;
+         }
+      }
+
+   freeBooleanArrayDegree( found);
+   return;
+}
+
+
+/*-------------------------- writeImagePerm -------------------------------*/
+
+void writeImagePerm(
+   Permutation *s,          /* The permutation to write. */
+   Unsigned startCol1,      /* First line starts in this column. */
+   Unsigned startCol2,      /* Remaining lines start in this column. */
+   Unsigned endCol)         /* Lines end by this column. */
+{
+   Unsigned i, j;
+   Unsigned column = startCol1;
+
+   fprintf( outFile, "/");
+   for ( i = 1 ; i <= s->degree-1 ; ++i ) {
+      CHECK_NEW_LINE
+      fprintf( outFile, "%u,", s->image[i] );
+      column += 2 + (s->image[i] > 9) + (s->image[i] > 99) +
+                (s->image[i] > 999) + (s->image[i] > 9999);
+   }
+   CHECK_NEW_LINE
+   fprintf( outFile, "%u/", s->image[s->degree] );
+}
+
+#undef CHECK_NEW_LINE
+
+
+/*-------------------------- writeImageMonomialPerm -----------------------*/
+
+void writeImageMonomialPerm(
+   Permutation *s,          /* The permutation to write. */
+   Unsigned fieldSize,
+   Unsigned startCol2)      /* Remaining lines start in this column. */
+{
+   Unsigned i, j, count;
+   const Unsigned fSize = fieldSize - 1;
+
+   fprintf( outFile, "/");
+   for ( i = 1 , count = 0; i <= s->degree-fSize ; i += fSize ) {
+      fprintf( outFile, "[%u]%u,", (s->image[i] - 1) % fSize + 1,
+                                   (s->image[i] - 1) / fSize + 1);
+      if ( ++count == 10 ) {
+         count = 0;
+         fprintf( outFile, "\n");  
+         for ( j = 1 ; j < startCol2 ; ++j )
+            fprintf( outFile, " ");
+      }
+   }
+   fprintf( outFile, "[%u]%u/", (s->image[i] - 1) % fSize + 1,
+                                (s->image[i] - 1) / fSize + 1);
+}
+
+
+/*-------------------------- writePermGroup ------------------------------*/
+
+static BOOLEAN restrictLevel = FALSE; /* Shared with writePermGroupRestricted */
+                                      /* Must be reset after each call. */
+void writePermGroup(
+   char *libFileName,
+   char *libName,
+   PermGroup *G,
+   char *comment)
+{
+   Unsigned i, column;
+   Permutation *gen;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "writePermGroup", "File ", libFileName,
+               " could not be opened for append.")
+
+   /* Set correct output File. */
+   setOutputFile( libFile);
+
+   /* Write library name. */
+   fprintf( outFile, "LIBRARY %s;", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( outFile, "\n& %s &", comment);
+
+   /* Write declaration for group. */
+   fprintf( outFile, "\n%s:  Permutation group (%u);", G->name, G->degree);
+
+   /* Write the order. */
+   if ( G->order ) {
+      fprintf( outFile, "\n%s.forder:  ", G->name);
+      writeFactoredInt( G->order);
+      fprintf( outFile, ";");
+   }
+
+   /* Write the base. */
+   if ( G->base ) {
+      fprintf( outFile, "\n%s.base:  seq(", G->name);
+      for ( i = 1 ; i < G->baseSize ; ++i )
+         fprintf( outFile,  "%u,", G->base[i]);
+      if ( G->baseSize > 0 )
+         fprintf( outFile, "%u", G->base[G->baseSize]);
+      fprintf( outFile, ");");
+   }
+
+   /* Write out the strong generators, or generators if the base is not
+      known. */
+   if ( G->base )
+      fprintf( outFile, "\n%s.strong generators:  [", G->name);
+   else
+      fprintf( outFile, "\n%s.generators:", G->name);
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->name[0] != '*' && 
+           (!restrictLevel || gen->level <= G->baseSize) ) {
+         fprintf( outFile, "\n  ");
+         column = 3;
+         if ( !G->base && gen->name[0] != '\0' ) {
+            fprintf( outFile, "%s = ", gen->name);
+            column += 3 + strlen( gen->name);
+         }
+         if ( G->printFormat == cycleFormat )
+            writeCyclePerm( gen, column, 7, 75);
+         else
+            writeImagePerm( gen, column, 7, 75);
+         if ( gen->next )
+            fprintf( outFile, "%c", ',');
+         else if ( G->base )
+            fprintf( outFile, "%s", "];");
+         else
+            fprintf( outFile, "%s", ";");
+      }
+   if ( !G->generator )
+      fprintf( outFile, "%s", "];");
+
+   /* Write "finish". */
+   fprintf( outFile, "\nFINISH;\n");
+
+   /* Reset restrictLevel. */
+   restrictLevel = FALSE;
+
+   /* Close group file and return to caller. */
+   fprintf( outFile, "%c", '\n');
+   fclose( libFile);
+   return;
+}
+
+
+/*-------------------------- writePermGroupRestricted --------------------*/
+
+/* This function is identical to writePermGroup except that the group G
+   is assumed to stabilize {1,...,restrictedDegree}, and it is written
+   out as a permutation group of degree restrictedDegree.  (Note this
+   may reduce the group order.)  Also, the group must have the order
+   and base fields filled in, as well as the level field of each 
+   generator.  */
+
+void writePermGroupRestricted(
+   char *libFileName,
+   char *libName,
+   PermGroup *G,
+   char *comment,
+   Unsigned restrictedDegree)
+{
+   Unsigned i, restrictedBaseSize;
+   Unsigned *acceptablePoint = allocIntArrayDegree();
+   PermGroup *GRestricted = allocPermGroup();
+   FactoredInt orbitLen;
+   Permutation *gen;
+
+   for ( i = 1 ; i <= restrictedDegree ; ++i )
+      acceptablePoint[i] = i;
+   acceptablePoint[restrictedDegree+1] = 0;
+
+   restrictedBaseSize = restrictBasePoints( G, acceptablePoint);
+
+   strcpy( GRestricted->name, G->name);
+   GRestricted->degree = restrictedDegree;
+   GRestricted->baseSize = restrictedBaseSize;
+   GRestricted->base = G->base;
+   GRestricted->order = allocFactoredInt();
+   *(GRestricted->order) = *(G->order);
+   for ( i = restrictedBaseSize+1 ; i <= G->baseSize ; ++i ) {
+      orbitLen = factorize( G->basicOrbLen[i]);
+      factDivide( GRestricted->order, &orbitLen);
+   }
+   GRestricted->generator = G->generator;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      gen->degree = restrictedDegree;
+   GRestricted->printFormat = G->printFormat;
+   restrictLevel = TRUE;
+
+   writePermGroup( libFileName, libName, GRestricted, comment);
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      gen->degree = G->degree;
+   restrictLevel = FALSE;         /* For safety. */
+
+   freeFactoredInt( GRestricted->order);
+   GRestricted->order = 0;
+   freePermGroup( GRestricted);
+   freeIntArrayDegree( acceptablePoint);
+}
diff --git a/src/leon/src/readgrp.h b/src/leon/src/readgrp.h
new file mode 100644
index 0000000..47ebedd
--- /dev/null
+++ b/src/leon/src/readgrp.h
@@ -0,0 +1,78 @@
+#ifndef READGRP
+#define READGRP
+
+extern FactoredInt readFactoredInt(void)
+;
+
+extern void writeFactoredInt(
+   FactoredInt *fInt)
+;
+
+extern TokenType readCyclePerm(
+   Permutation *perm)
+;
+
+extern TokenType readImagePerm(
+   Permutation *perm)
+;
+
+extern Permutation *readPerm(
+   const Unsigned degree,        /* Degree of permutation to be read. */
+   PermFormat *const format,     /* Set to cycleFormat or imageFormat. */
+   TokenType *const terminator)  /* Set to type of token (comma, semicolon, or
+                                   eof, or right square bracket) that terminated
+                                   the permutation. */
+;
+
+extern PermGroup *readPermGroup(
+   char *libFileName,             /* The library file containing the group. */
+   char *libName,                 /* The library defining the group. */
+   const Unsigned requiredDegree, /* The degree that the group must have,
+                                     or zero if group may have any degree. */
+   const char *rpgOptions)        /* Options:
+                                      Generate:       generate base/sgs
+                                                      if absent,
+                                      CompleteOrbits: construct complete orbit
+                                                     structure. */
+;
+
+extern void setOutputFile(
+   FILE *grpFile)
+;
+
+extern void writeCyclePerm(
+   Permutation *s,        /* The permutation to write. */
+   Unsigned startCol1,    /* First line starts in this column. */
+   Unsigned startCol2,    /* Remaining lines start in this column. */
+   Unsigned endCol)       /* Lines end by this column. */
+;
+
+extern void writeImagePerm(
+   Permutation *s,          /* The permutation to write. */
+   Unsigned startCol1,      /* First line starts in this column. */
+   Unsigned startCol2,      /* Remaining lines start in this column. */
+   Unsigned endCol)         /* Lines end by this column. */
+;
+
+extern void writeImageMonomialPerm(
+   Permutation *s,          /* The permutation to write. */
+   Unsigned fieldSize,
+   Unsigned startCol2)      /* Remaining lines start in this column. */
+;
+
+extern void writePermGroup(
+   char *libFileName,
+   char *libName,
+   PermGroup *G,
+   char *comment)
+;
+
+extern void writePermGroupRestricted(
+   char *libFileName,
+   char *libName,
+   PermGroup *G,
+   char *comment,
+   Unsigned restrictedDegree)
+;
+
+#endif
diff --git a/src/leon/src/readme b/src/leon/src/readme
new file mode 100644
index 0000000..421fcc3
--- /dev/null
+++ b/src/leon/src/readme
@@ -0,0 +1,7 @@
+This directory contains the source code for the partition backtrack 
+programs.  A make file is included, as is a shell script for installing
+the programs after they are compiled.  The directory also include shell
+scripts needed for some of the partition backtrack programs.  Please
+see Section XI of the User's Manual (provided in file manual.tex in
+the subdirectory doc) for information about compiling, installing, and
+testing the programs.
diff --git a/src/leon/src/readpar.c b/src/leon/src/readpar.c
new file mode 100644
index 0000000..9845ff7
--- /dev/null
+++ b/src/leon/src/readpar.c
@@ -0,0 +1,174 @@
+/* File readPar.  Contains routines to read in and write out partitions.
+   The files must already be open. */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "storage.h"
+#include "token.h"
+#include "errmesg.h"
+
+CHECK( readpa)
+
+extern GroupOptions options;
+
+
+/*-------------------------- readPartition --------------------------------*/
+
+Partition *readPartition(
+   char *libFileName,
+   char *libName,
+   Unsigned degree)
+{
+   Unsigned pt, currentCellNumber, pointsFound;
+   Partition *partn = allocPartition();
+   Token token, saveToken;
+   char inputBuffer[81];
+   FILE *libFile;
+
+   /* Open input file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "readPartition", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase( libName);
+
+   /* Initialize storage manager. */
+   initializeStorageManager( degree);
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "readPartition", "Library block ", libName,
+                  " not found in specified library.")
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Set the degree of the partition (must be specified). */
+   partn->degree = degree;
+
+   /* Read the partition name. */
+   if ( (token = nkReadToken() , saveToken = token , token.type == identifier) &&
+         (token = nkReadToken() , token.type == equal) )
+      strcpy( partn->name, saveToken.value.identValue);
+
+   if ( (token = readToken() , token.type != identifier) ||
+             strcmp( token.value.identValue, "seq") != 0 ||
+             (token = readToken() , token.type != leftParen) )
+      ERROR( "readPartition", "Invalid syntax in partition library.")
+
+   /* Allocate fields for partition structure. */
+   partn->pointList = allocIntArrayDegree();
+   partn->invPointList = allocIntArrayDegree();
+   partn->cellNumber = allocIntArrayDegree();
+   partn->startCell = allocIntArrayDegree();
+
+   /* Read the partition. */
+   for ( pt = 1 ; pt <= degree ; ++pt )
+      partn->cellNumber[pt] = 0;
+   currentCellNumber = 0;
+   pointsFound = 0;
+   do {
+      if ( token = readToken() , token.type == leftBracket )
+         ++currentCellNumber;
+      else
+         ERROR( "readPartition", "Invalid symbol in point list.")
+      partn->startCell[currentCellNumber] = pointsFound + 1;
+      while  (token = readToken() , token.type == integer ||
+                                    token.type == comma )
+         if ( token.type == integer && (pt = token.value.intValue) > 0 &&
+                                       pt <= partn->degree )
+            if ( partn->cellNumber[pt] == 0 ) {
+               partn->pointList[++pointsFound] = pt;
+               partn->invPointList[pt] = pointsFound;
+               partn->cellNumber[pt] = currentCellNumber;
+            }
+            else
+               ERROR1i( "readPartition", "Point ", pt,
+                        " occurs more than once in point list.")
+         else if ( token.type == integer )
+            ERROR1i( "readPartition", "Invalid point ", pt, ".")
+      if ( token.type != rightBracket || (token = readToken() ,
+                          token.type != comma && token.type != rightParen) )
+         ERROR( "readPartition", "Invalid symbol in point list.")
+   } while ( token.type != rightParen );
+   partn->startCell[currentCellNumber+1] = degree + 1;
+   if ( token = readToken() , token.type != semicolon )
+      ERROR( "readPartition", "Missing semicolon terminating partition.")
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return partn;
+}
+
+
+/*-------------------------- writePartition ------------------------------*/
+
+void writePartition(
+   char *libFileName,
+   char *libName,
+   char *comment,
+   Partition *partn)
+{
+   Unsigned i, column, cellNo;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "writePartition", "File ", libFileName,
+               " could not be opened for output.")
+
+   /* Write the library name. */
+   fprintf( libFile, "LIBRARY %s;\n", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( libFile, "& %s &\n", comment);
+
+   /* Write the partition set name. */
+   if ( !partn->name[0] )
+      strcpy( partn->name, "Pi");
+   column = fprintf( libFile, "  %s = seq(", partn->name);
+
+   /* Write the cells. */
+   for ( cellNo = 1 ; partn->startCell[cellNo] <= partn->degree ; ++cellNo ) {
+      column += fprintf( libFile, "[");
+      for ( i = partn->startCell[cellNo] ; i < partn->startCell[cellNo+1] ; ++i ) {
+         if ( column > 73 ) {
+            fprintf( libFile, "\n        ");
+            column = 9;
+         }
+         column += fprintf( libFile, "%u", partn->pointList[i]) + 1;
+         if ( i < partn->startCell[cellNo+1] - 1 )
+            column += fprintf( libFile, ",");
+      }
+      column += fprintf( libFile, "]");
+      if ( partn->startCell[cellNo+1] <= partn->degree )
+         column += fprintf( libFile, ",");
+   }
+
+   /* Write terminators. */
+   fprintf( libFile, ");\nFINISH;\n");
+
+   /* Close output file. */
+   fclose( libFile);
+}
diff --git a/src/leon/src/readpar.h b/src/leon/src/readpar.h
new file mode 100644
index 0000000..415977b
--- /dev/null
+++ b/src/leon/src/readpar.h
@@ -0,0 +1,17 @@
+#ifndef READPAR
+#define READPAR
+
+extern Partition *readPartition(
+   char *libFileName,
+   char *libName,
+   Unsigned degree)
+;
+
+extern void writePartition(
+   char *libFileName,
+   char *libName,
+   char *comment,
+   Partition *partn)
+;
+
+#endif
diff --git a/src/leon/src/readper.c b/src/leon/src/readper.c
new file mode 100644
index 0000000..2418b3a
--- /dev/null
+++ b/src/leon/src/readper.c
@@ -0,0 +1,179 @@
+/* File readPer.  Contains routines to read in and write out individual
+   permutations.  The files must already be open. */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "errmesg.h"
+#include "essentia.h"
+#include "readgrp.h"
+#include "storage.h"
+#include "token.h"
+
+CHECK( readpe)
+
+extern GroupOptions options;
+
+
+/*-------------------------- readPermutation ------------------------------*/
+
+Permutation *readPermutation(
+   char *libFileName,
+   char *libName,
+   const Unsigned requiredDegree,
+   const BOOLEAN inverseFlag)               /* If true, adjoin inverse. */
+{
+   Permutation *perm = allocPermutation();
+   Unsigned pt;
+   Token token, saveToken;
+   char inputBuffer[81];
+   FILE *libFile;
+
+   /* Open input file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "readPermutation", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase( libName);
+
+   /* Initialize storage manager. */
+   initializeStorageManager( requiredDegree);
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "readPermutation", "Library block ", libName,
+                  " not found in specified library.")
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Set the degree of the permutation (must be specified). */
+   perm->degree = requiredDegree;
+
+   /* Read the permutation name. */
+   if ( (token = nkReadToken() , saveToken = token , token.type == identifier) &&
+         (token = nkReadToken() , token.type == equal) )
+      strcpy( perm->name, saveToken.value.identValue);
+
+   /* Read the permutation. */
+   perm->level = 0;
+   MAKE_NOT_ESSENTIAL_ALL( perm);
+   perm->image = allocIntArrayDegree();
+   for ( pt = 1 ; pt <= requiredDegree ; ++pt )
+      perm->image[pt] = 0;
+
+   /* Check whether permutation is in cycle or image format, and call
+      appropriate function to finish read. */
+   switch ( token = readToken() , token.type ) {
+      case leftParen:
+         unreadToken( token);
+         readCyclePerm( perm);
+         break;
+      case slash:
+         unreadToken( token);
+         readImagePerm( perm);
+         break;
+      default:
+         unreadToken( token);
+         ERROR( "readPermutation",
+                "Invalid symbol at start of cycle/image field.");
+   }
+
+   /* Adjoin inverse, if requested. */
+   if ( inverseFlag ) {
+      perm->invImage = allocIntArrayDegree();
+      for ( pt = 1 ; pt <= requiredDegree ; ++pt )
+         perm->invImage[perm->image[pt]] = pt;
+   }
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return perm;
+}
+
+
+/*-------------------------- writePermutation -----------------------------*/
+
+void writePermutation(
+   char *libFileName,
+   char *libName,
+   Permutation *perm,
+   char *format,
+   char *comment)
+{
+   Unsigned column;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "writePermutation", "File ", libFileName,
+               " could not be opened for output.")
+
+   setOutputFile( libFile);
+
+   /* Write library name. */
+   fprintf( libFile, "LIBRARY %s;", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( libFile, "\n& %s &", comment);
+
+   /* Assign the name x if the permutation has no name. */
+   if ( !perm->name[0] )
+      strcpy( perm->name, "x");
+
+   column = 1 + fprintf( libFile, "\n  %s = ", perm->name);
+
+   if ( strcmp( format, "image") == 0 )
+      writeImagePerm( perm, column, 8, 80);
+   else
+      writeCyclePerm( perm, column, 8, 80);
+   fprintf( libFile, ";");
+
+   /* Write "finish". */
+   fprintf( libFile, "\nFINISH;\n");
+
+   /* Return to caller. */
+   return;
+}
+
+
+
+/*-------------------------- writePermutationRestricted -------------------*/
+
+/* This procedure is identical to writePermutation, except that it assumes
+   that perm fixes {1,...,restrictedDegree} (not checked!) and writes it
+   out as a permutation of degree restrictedDegree. */
+
+void writePermutationRestricted(
+   char *libFileName,
+   char *libName,
+   Permutation *perm,
+   char *format,
+   char *comment,
+   Unsigned restrictedDegree)
+{
+   Unsigned trueDegree = perm->degree;
+   perm->degree = restrictedDegree;
+   writePermutation( libFileName, libName, perm, format, comment);
+   perm->degree = trueDegree;
+}
diff --git a/src/leon/src/readper.h b/src/leon/src/readper.h
new file mode 100644
index 0000000..fcb615c
--- /dev/null
+++ b/src/leon/src/readper.h
@@ -0,0 +1,28 @@
+#ifndef READPER
+#define READPER
+
+extern Permutation *readPermutation(
+   char *libFileName,
+   char *libName,
+   const Unsigned requiredDegree,
+   const BOOLEAN inverseFlag)               /* If true, adjoin inverse. */
+;
+
+extern void writePermutation(
+   char *libFileName,
+   char *libName,
+   Permutation *perm,
+   char *format,
+   char *comment)
+;
+
+extern void writePermutationRestricted(
+   char *libFileName,
+   char *libName,
+   Permutation *perm,
+   char *format,
+   char *comment,
+   Unsigned restrictedDegree)
+;
+
+#endif
diff --git a/src/leon/src/readpts.c b/src/leon/src/readpts.c
new file mode 100644
index 0000000..7653ff6
--- /dev/null
+++ b/src/leon/src/readpts.c
@@ -0,0 +1,147 @@
+/* File readPts.  Contains routines to read in and write out point sets.
+   The files must already be open. */
+
+#include <stddef.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+
+#include "storage.h"
+#include "token.h"
+#include "errmesg.h"
+
+CHECK( readpt)
+
+extern GroupOptions options;
+
+
+/*-------------------------- readPointSet ---------------------------------*/
+
+PointSet *readPointSet(
+   char *libFileName,
+   char *libName,
+   Unsigned degree)
+{
+   Unsigned pt;
+   PointSet *P = allocPointSet();
+   Token token, saveToken;
+   char inputBuffer[81];
+   FILE *libFile;
+
+   /* Open input file. */
+   libFile = fopen( libFileName, "r");
+   if ( libFile == NULL )
+      ERROR1s( "readPointSet", "File ", libFileName,
+               " could not be opened for input.")
+
+   /* Initialize input routines to correct file. */
+   setInputFile( libFile);
+   lowerCase( libName);
+
+   /* Initialize storage manager. */
+   initializeStorageManager( degree);
+
+   /* Search for the correct library.  Terminate with error message if
+      not found. */
+   rewind( libFile);
+   for (;;) {
+      fgets( inputBuffer, 80, libFile);
+      if ( feof(libFile) )
+         ERROR1s( "readPointSet", "Library block ", libName,
+                  " not found in specified library.")
+      if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) {
+         setInputString( inputBuffer);
+         if ( ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),"library") == 0 )
+              &&
+              ( (token = sReadToken()) , token.type == identifier &&
+                strcmp(lowerCase(token.value.identValue),libName) == 0 ) )
+            break;
+      }
+   }
+
+   /* Set the degree of the point set (must be specified). */
+   P->degree = degree;
+
+   /* Read the point set name. */
+   if ( (token = nkReadToken() , saveToken = token , token.type == identifier) &&
+         (token = nkReadToken() , token.type == equal) )
+      strcpy( P->name, saveToken.value.identValue);
+
+   if ( token = readToken() , token.type != leftBracket )
+      ERROR( "readPointSet", "Invalid syntax in point set library.")
+
+   /* Read the points. */
+   P->pointList = allocIntArrayDegree();
+   P->inSet = allocBooleanArrayDegree();
+   P->size = 0;
+   for ( pt = 1 ; pt <= P->degree ; ++pt )
+      P->inSet[pt] = FALSE;
+   while  (token = readToken() , token.type == integer || token.type == comma)
+      if ( token.type == integer && (pt = token.value.intValue) > 0 && pt <= P->degree )
+         if ( !P->inSet[pt] ) {
+            P->pointList[++P->size] = pt;
+            P->inSet[pt] = TRUE;
+         }
+         else;
+      else if ( token.type == integer )
+         ERROR1i( "ReadPointSet", "Invalid point ", pt, ".")
+   if ( token.type != rightBracket || (token = readToken() ,
+                                        token.type !=semicolon) )
+      ERROR( "readPointSet", "Invalid symbol in point list.")
+
+   /* Close the input file and return. */
+   fclose( libFile);
+   return P;
+}
+
+
+/*-------------------------- writePointSet --------------------------------*/
+
+void writePointSet(
+   char *libFileName,
+   char *libName,
+   char *comment,
+   PointSet *P)
+{
+   Unsigned i, column;
+   FILE *libFile;
+
+   /* Open output file. */
+   libFile = fopen( libFileName, options.outputFileMode);
+   if ( libFile == NULL )
+      ERROR1s( "writePointSet", "File ", libFileName,
+               " could not be opened for output.")
+
+   /* Write the library name. */
+   fprintf( libFile, "LIBRARY %s;\n", libName);
+
+   /* Write the comment. */
+   if ( comment )
+      fprintf( libFile, "& %s &\n", comment);
+
+   /* Write the point set name. */
+   if ( !P->name[0] )
+      strcpy( P->name, "P");
+   column = fprintf( libFile, "  %s = [", P->name);
+
+   /* Write the points. */
+   for ( i = 1 ; i <= P->size ; ++i ) {
+      if ( column > 75 ) {
+         fprintf( libFile, "\n        ");
+         column = 9;
+      }
+      column += fprintf( libFile, "%u", P->pointList[i]) + 1;
+      if ( i < P->size )
+         fprintf( libFile, ",");
+   }
+
+   /* Write terminators. */
+   fprintf( libFile, "];\nFINISH;\n");
+
+   /* Close output file. */
+   fclose( libFile);
+}
diff --git a/src/leon/src/readpts.h b/src/leon/src/readpts.h
new file mode 100644
index 0000000..94dd7cb
--- /dev/null
+++ b/src/leon/src/readpts.h
@@ -0,0 +1,17 @@
+#ifndef READPTS
+#define READPTS
+
+extern PointSet *readPointSet(
+   char *libFileName,
+   char *libName,
+   Unsigned degree)
+;
+
+extern void writePointSet(
+   char *libFileName,
+   char *libName,
+   char *comment,
+   PointSet *P)
+;
+
+#endif
diff --git a/src/leon/src/relator.c b/src/leon/src/relator.c
new file mode 100644
index 0000000..e5afda8
--- /dev/null
+++ b/src/leon/src/relator.c
@@ -0,0 +1,823 @@
+/* File relator.c.  Contains miscellaneous functions for manipulating sets of
+   relators. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "group.h"
+#include "enum.h"
+
+#include "errmesg.h"
+#include "new.h"
+#include "permut.h"
+#include "stcs.h"
+#include "storage.h"
+
+CHECK( relato)
+
+extern GroupOptions options;
+extern STCSOptions sOptions;
+extern Unsigned shiftSelection[11];
+extern Unsigned shiftPriority[11];
+
+extern Unsigned *nextCos, *prevCos, *ff, *bb, *equivCoset;
+extern Unsigned freeCosHeader, firstCos;
+
+extern Unsigned extraCosetsAtLevel;
+extern Unsigned currentExtraCosets;
+
+BOOLEAN verifyCosetList(
+   Unsigned degree);
+BOOLEAN onFreeList(
+   Unsigned coset);
+static callCount = 0;   /*DEBUG*/
+
+
+/*-------------------------- relatorLevel ---------------------------------*/
+
+/* The function relatorLevel( r) returns the level in G of the relator r.
+   This level is defined to be the minimum level of any of the generators
+   of G appearing in r.  Naturally the level fields of the generators of G
+   must be filled in. */
+
+UnsignedS relatorLevel(
+   const Relator *const r)
+{
+   Unsigned i, minLevel = options.maxBaseSize + 1;
+
+   for ( i = 1 ; i <= r->length ; ++i )
+      if ( r->rel[i]->level < minLevel )
+         minLevel = r->rel[i]->level;
+
+   return minLevel;
+}
+
+
+/*-------------------------- symmetricLength ------------------------------*/
+
+/* The function symmetricLength( r) returns the "symmetric length" of the
+   relator r.  The symmetric length of r is defined to be the smallest
+   positive integer i such that an i-position cyclic shift of r leaves r
+   unchanged.  The relator must have been created with doubleFlag set. */
+
+Unsigned symmetricLength(
+   const Relator *const r)
+{
+   Permutation **rel = r->rel;
+   Unsigned i, j, length = r->length;
+
+   for ( i = 1 ; i <= length / 2 ; ++i )
+      if ( length % i == 0 ) {
+         for ( j = 1 ; j <= length && rel[j+i] == rel[j] ; ++j )
+            ;
+         if ( j > length )
+            return i;
+      }
+
+   return length;
+}
+
+
+/*-------------------------- symmetricWordLength --------------------------*/
+
+/* The function symmetricWordLength( w) is identical to symmetricLength
+   (above) except that it uses a word, rather than a relator, as its input. */
+
+Unsigned symmetricWordLength(
+   const Word *const w)
+{
+   Permutation **rel = w->position;
+   Unsigned i, j, length = w->length;
+
+   for ( i = 1 ; i <= length / 2 ; ++i )
+      if ( length % i == 0 ) {
+         for ( j = 1 ; j <= length && rel[(j-1+i)%length + 1] == rel[j] ; ++j )
+            ;
+         if ( j > length )
+            return i;
+      }
+
+   return length;
+}
+
+
+/*-------------------------- addRelatorSortedFromWord ---------------------*/
+
+/* The function addRelatorSortedFromWord( G, w, fbRelFlag, doubleFlag) adds
+   a new relator, represented by a word w, to a permutation group G.  The
+   new relator is positioned so that the relators remain sorted by level
+   (highest to lowest) and so that the new relator is last among relators
+   of its level.  Note both the new relator and the word w will be reduced
+   by cancelling adjacent entries of form a * a^-1 or a^-1 * a.  If fbRelFlag
+   is set, the fRel and bRel entries of the new relator will be constructed.
+   If doubleFlag is set, the each relator will be concatenated to itself (the
+   length field will still give the original length).
+
+   The function returns a pointer to the relator added, or NULL if it could
+   not be added. */
+
+Relator *addRelatorSortedFromWord(
+   PermGroup *const G,
+   Word *const w,
+   BOOLEAN fbRelFlag,
+   BOOLEAN doubleFlag)
+{
+   Relator *newRel, *r, *rPrev;
+   Unsigned newLevel;
+
+   newRel = newRelatorFromWord( w, fbRelFlag, doubleFlag);
+   if ( !newRel )
+      return NULL;
+   newLevel = relatorLevel( newRel);
+   newRel->level = newLevel;
+   rPrev = NULL;
+   for ( r = G->relator ; r && r->level >= newLevel ; rPrev = r , r = r->next )
+      ;
+   newRel->next = r;
+   newRel->last = rPrev;
+   if ( rPrev )
+      rPrev->next = newRel;
+   else
+      G->relator = newRel;
+   if ( r )
+      r->last = newRel;
+
+   return newRel;
+}
+
+
+/*-------------------------- addOccurencesForRelator ---------------------*/
+
+/* The function addOccurencesForRelator( r, priority) adds an occurenceOfGen record
+   for each significantly different occurence of each generator in r.
+   If shiftSelection[0] != UNKNOWN, only those specified shift selections
+   for which priority >= shiftPriority are added.  It returns the number
+   of occurences added. */
+
+Unsigned addOccurencesForRelator(
+   const Relator *const r,
+   Unsigned priority)
+{
+   Unsigned i, j, addCount = 0, symLength = symmetricLength(r);
+   OccurenceOfGen *p, *q, *prevQ;
+   Permutation *gen;
+
+   if ( symLength <= 4 || shiftSelection[0] == UNKNOWN )
+      for ( i = 1 ; i <= symLength ; ++i ) {
+         ++addCount;
+         p = allocOccurenceOfGen();
+         p->r = r;
+         p->relLength = r->length;
+         p->level = r->level;
+         p->fRelStart = r->fRel + i;
+         p->bRelFinish = r->bRel + (i + r->length - 1);
+         gen = r->rel[i];
+         for ( prevQ = NULL , q = gen->occurHeader ; q && q->level >= p->level ;
+               prevQ = q , q = q->next )
+            ;
+         p->next = q;
+         if ( prevQ )
+            prevQ->next = p;
+         else
+            gen->occurHeader = p;
+      }
+   else
+      for ( j = 0 ; shiftSelection[j] != UNKNOWN ; ++j ) {
+         i = shiftSelection[j] + 1;
+         if ( i < r->length && priority >= shiftPriority[j] ) {
+            ++addCount;
+            p = allocOccurenceOfGen();
+            p->r = r;
+            p->relLength = r->length;
+            p->level = r->level;
+            p->fRelStart = r->fRel + i;
+            p->bRelFinish = r->bRel + (i + r->length - 1);
+            gen = r->rel[i];
+            for ( prevQ = NULL , q = gen->occurHeader ; q && q->level >= p->level ;
+                  prevQ = q , q = q->next )
+               ;
+            p->next = q;
+            if ( prevQ )
+               prevQ->next = p;
+            else
+               gen->occurHeader = p;
+         }
+      }
+
+   return addCount;
+}
+
+
+/*-------------------------- resetTable -----------------------------------*/
+
+void resetTable(
+   Permutation *genHeader,
+   Unsigned basicOrbLen,
+   Unsigned *basicOrbit)
+{
+   Permutation *gen;
+   Unsigned i;
+
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      for ( i = 1 ; i <= basicOrbLen ; ++i )
+         gen->image[basicOrbit[i]] &= NHB;
+}
+
+
+/*-------------------------- findConsequences -----------------------------*/
+
+/* The function findConsequences( deductionQueuelevel, deduc) finds all direct
+   consequences of a given  definition or deduction and its inverse by tracing
+   that definition/deduction at all significantly difference occurences of the
+   generators in all relators at the specified level or above.  New deductions
+   are enqueued on deductionQueue but not processed.
+
+   This function returns the number of additional table entries filled in
+   as consequences.  */
+
+Unsigned findConsequences(
+   DeductionQueue *deductionQueue,
+   const Unsigned level,
+   const Deduction *const deduc)
+{
+   OccurenceOfGen *occurence;
+   Unsigned count, fCos, bCos, newEntryCount = 0;
+   Unsigned **fPtr, **bPtr;
+   Deduction newDeduc;
+   Permutation *gen;
+
+   for ( occurence = deduc->gn->occurHeader ; occurence &&
+         occurence->level >= level; occurence = occurence->next ) {
+      count = occurence->relLength - 1;
+      for ( fCos = deduc->img , fPtr = occurence->fRelStart+1 ;
+            count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count )
+         fCos = (*fPtr)[fCos];
+      for ( bCos = deduc->pnt , bPtr = occurence->bRelFinish ;
+            count && !((*bPtr)[bCos] & HB) ; --bPtr , --count )
+         bCos = (*bPtr)[bCos];
+      if ( count == 1 ) {
+         (*fPtr)[fCos] = bCos;
+         ++newEntryCount;
+         gen = occurence->r->rel[fPtr - occurence->r->fRel];
+         newDeduc.pnt = fCos;  newDeduc.img = bCos;  newDeduc.gn = gen;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+         if ( fCos != bCos || gen != gen->invPermutation ) {
+            (*bPtr)[bCos] = fCos;
+            ++newEntryCount;
+            newDeduc.img = fCos;  newDeduc.pnt = bCos;  newDeduc.gn =
+                                                        gen->invPermutation;
+            ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+         }
+      }
+   }
+
+   return newEntryCount;
+}
+
+
+/*-------------------------- traceNewRelator ------------------------------*/
+
+/* The function traceNewRelator( G, level, deductionQueue, newRel) processes
+   a new relator newRel at level level for a group G.  It traces all cyclic
+   shifts of newRel from each coset.  Deductions found are enqueued on
+   deductionQueue but not otherwise processed.
+
+   This function returns the number of additional table entries filled in
+   due to tracing the new relator.  */
+
+Unsigned traceNewRelator(
+   const PermGroup *const G,
+   const Unsigned level,
+   DeductionQueue *deductionQueue,
+   const Relator *const newRel)
+{
+   Unsigned i, pt, startingPos, count, fCos, bCos, newEntryCount = 0;
+   Unsigned **fPtr, **bPtr;
+   Deduction newDeduc;
+   Permutation *gen;
+
+   for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) {
+      pt = G->basicOrbit[level][i];
+      for ( startingPos = 1 ; startingPos <= newRel->length ; ++startingPos ) {
+         count = newRel->length;
+         for ( fCos = pt , fPtr = newRel->fRel+startingPos ;
+               count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count )
+            fCos = (*fPtr)[fCos];
+         for ( bCos = pt , bPtr = newRel->bRel+startingPos+newRel->length-1 ;
+               count && !((*bPtr)[bCos] & HB) ; --bPtr , --count )
+            bCos = (*bPtr)[bCos];
+         if ( count == 1 ) {
+            (*fPtr)[fCos] = bCos;
+            ++newEntryCount;
+            gen = newRel->rel[fPtr - newRel->fRel];
+            newDeduc.pnt = fCos;  newDeduc.img = bCos;  newDeduc.gn = gen;
+            ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+            if ( fCos != bCos || gen != gen->invPermutation) {
+               (*bPtr)[bCos] = fCos;
+               ++newEntryCount;
+               newDeduc.img = fCos;  newDeduc.pnt = bCos;  newDeduc.gn =
+                                                           gen->invPermutation;
+               ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+            }
+         }
+      }
+   }
+   return newEntryCount;
+}
+
+
+/*-------------------------- processCoincidence ---------------------------*/
+
+/* The function processCoincidence( G, genHeader, coset1, coset2)
+   processes a coincidence between coset1 and coset2 in a special STCS
+   coset enumeration.  Here genHeader is a header for the xNext-linked
+   list of generators at the appropriate level.  It returns the extra
+   number of table positions filled (points <= degree). */
+
+Unsigned processCoincidence(
+   const PermGroup *const G,
+   DeductionQueue *deductionQueue,
+   const Permutation *const genHeader,
+   const Unsigned coset1,
+   const Unsigned coset2)
+{
+   Unsigned degree = G->degree;
+   Unsigned retainCoset, deleteCoset, ffHead, ffTail, lambda, lambdaStar,
+            tau, tauStar, eta, etaStar, kappa, kappaStar, tsi1, tsi2;
+   Unsigned newTableEntries = 0;
+   Permutation *gen;
+   Deduction newDeduc;
+
+
+   /* DEBUG 
+   ++callCount;
+   if ( onFreeList(coset1) || onFreeList(coset2) )
+      tsi1 = tsi1;
+   if ( !verifyCosetList(G->degree) )
+      tsi1 = tsi1;
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         tsi1 = tsi1;  */
+   /* Alg 3.4, line 1. */
+
+   if ( coset1 == coset2 )
+      return 0;
+
+   /* Alg 3.4, line 2. */
+   retainCoset = MIN( coset1, coset2);
+   deleteCoset = MAX( coset1, coset2);
+   ffTail = deleteCoset;
+   ff[deleteCoset] = 0;
+   bb[deleteCoset] = retainCoset;
+
+   /* Alg 3.4, lines 3, 5. */
+   for ( lambda = deleteCoset ; lambda ; lambda = ff[lambda] ) {
+
+      /* Alg 3.4, line 4. */
+      lambdaStar = bb[lambda];
+      while ( lambdaStar > degree && bb[lambdaStar] != lambdaStar )
+         lambdaStar = bb[lambdaStar];
+
+      /* Alg 3.4, line 5. */
+      for ( gen = genHeader ; gen ; gen = gen->xNext )
+         if ( !(gen->image[lambda] & HB) ) {
+            tau = gen->image[lambda];
+            tauStar = tau;
+            while ( tauStar > degree && bb[tauStar] != tauStar )
+               tauStar = bb[tauStar];
+            gen->image[lambda] |= HB;
+            gen->invImage[tau] |= HB;
+            if ( tau <= degree )
+               --newTableEntries;
+            kappa = gen->image[lambdaStar];
+            if ( !(kappa & HB) ) {
+               kappaStar = kappa;
+               while ( kappaStar > degree && bb[kappaStar] != kappaStar )
+                  kappaStar = bb[kappaStar];
+               if ( kappaStar != tauStar ) {
+                  tsi1 = MIN( tauStar, kappaStar);
+                  tsi2 = MAX( tauStar, kappaStar);
+                  ff[ffTail] = tsi2;
+                  ff[tsi2] = 0;
+                  ffTail = tsi2;
+                  bb[tsi2] = tsi1;
+                  if ( lambdaStar == tsi2 )
+                     lambdaStar = tsi1;
+               }
+            }
+            else {
+               eta = gen->invImage[tauStar];
+               if ( !(eta & HB) ) {
+                  etaStar = eta;
+                  while ( etaStar > degree && bb[etaStar] != etaStar )
+                     etaStar = bb[etaStar];
+                  if ( etaStar != lambdaStar ) {
+                     tsi1 = MIN( lambdaStar, etaStar);
+                     tsi2 = MAX( lambdaStar, etaStar);
+                     ff[ffTail] = tsi2;
+                     ff[tsi2] = 0;
+                     ffTail = tsi2;
+                     bb[tsi2] = tsi1;
+                     lambdaStar = tsi1;
+                  }
+               }
+               else {
+                  if ( lambdaStar <= degree && (gen->image[lambdaStar] & HB) )
+                     ++newTableEntries;
+                  gen->image[lambdaStar] = tauStar;
+                  newDeduc.pnt = lambdaStar;  newDeduc.img = tauStar;
+                  newDeduc.gn = gen;
+                  ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+                  if ( lambdaStar != tauStar || gen != gen->invPermutation ) {
+                     if ( tauStar <= degree && (gen->invImage[tauStar] & HB) )
+                        ++newTableEntries;
+                     gen->invImage[tauStar] = lambdaStar;
+                     newDeduc.pnt = tauStar;  newDeduc.img = lambdaStar;
+                     newDeduc.gn = gen->invPermutation;
+                     ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+                  }
+               }
+            }
+         }
+      /*DEBUG
+      if ( onFreeList(lambda) )
+         tsi1 = tsi1;   */
+      if ( lambda == firstCos )
+         firstCos = nextCos[lambda];
+      else
+         nextCos[prevCos[lambda]] = nextCos[lambda];
+      if ( nextCos[lambda] != 0 )
+         prevCos[nextCos[lambda]] = prevCos[lambda];
+      nextCos[lambda] = freeCosHeader;
+      freeCosHeader = lambda;
+      --currentExtraCosets;
+      /*DEBUG
+      if ( !verifyCosetList(G->degree) )
+         tsi1 = tsi1;*/
+   }
+
+   /* DEBUG 
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         tsi1 = tsi1;*/
+
+   return newTableEntries;
+}
+
+/*-------------------------- xFindConsequences ----------------------------*/
+
+/* The function xFindConsequences( deductionQueuelevel, deduc) finds all direct
+   consequences of a given  definition or deduction and its inverse by tracing
+   that definition/deduction at all significantly difference occurences of the
+   generators in all relators at the specified level or above.  New deductions
+   are enqueued on deductionQueue but not processed.
+
+   This function returns the number of additional table entries filled in
+   as consequences.  */
+
+Unsigned xFindConsequences(
+   const PermGroup *const G,
+   DeductionQueue *deductionQueue,
+   const Unsigned level,
+   const Deduction *const deduc,
+   const Permutation *const genHeader)
+{
+   OccurenceOfGen *occurence;
+   Unsigned count, fCos, bCos, newEntryCount = 0, degree = G->degree;
+   Unsigned **fPtr, **bPtr;
+   Deduction newDeduc;
+   Permutation *gen;
+
+   /* DEBUG 
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         fCos = fCos; */
+
+   if ( (deduc->pnt > degree && bb[deduc->pnt] != deduc->pnt) ||
+        (deduc->img > degree && bb[deduc->img] != deduc->img) )
+      return 0;
+
+   for ( occurence = deduc->gn->occurHeader ; occurence &&
+         occurence->level >= level; occurence = occurence->next ) {
+      count = occurence->relLength - 1;
+      for ( fCos = deduc->img , fPtr = occurence->fRelStart+1 ;
+            count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count )
+         fCos = (*fPtr)[fCos];
+      if ( count == 0 ) {
+         if ( fCos != deduc->pnt ) {
+            newEntryCount += processCoincidence( G, deductionQueue, genHeader,
+                                                 deduc->pnt, fCos);
+            if ( (deduc->pnt > degree && bb[deduc->pnt] != deduc->pnt) ||
+                 (deduc->img > degree && bb[deduc->img] != deduc->img) )
+                return 0;
+            }
+         continue;
+      }
+      for ( bCos = deduc->pnt , bPtr = occurence->bRelFinish ;
+            count && !((*bPtr)[bCos] & HB) ; --bPtr , --count )
+         bCos = (*bPtr)[bCos];
+      if ( count == 1 ) {
+         (*fPtr)[fCos] = bCos;
+         if ( fCos <= G->degree )
+            ++newEntryCount;
+         gen = occurence->r->rel[fPtr - occurence->r->fRel];
+         newDeduc.pnt = fCos;  newDeduc.img = bCos;  newDeduc.gn = gen;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+         if ( fCos != bCos || gen != gen->invPermutation) {
+            (*bPtr)[bCos] = fCos;
+            if ( bCos <= G->degree )
+               ++newEntryCount;
+            newDeduc.img = fCos;  newDeduc.pnt = bCos;  newDeduc.gn =
+                                                        gen->invPermutation;
+            ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+         }
+      }
+   }
+
+   /* DEBUG 
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         fCos = fCos; */
+   return newEntryCount;
+}
+
+
+/*-------------------------- xTraceNewRelator ------------------------------*/
+
+/* The function xTraceNewRelator( G, level, deductionQueue, newRel) processes
+   a new relator newRel at level level for a group G.  It traces all cyclic
+   shifts of newRel from each coset.  Deductions found are enqueued on
+   deductionQueue but not otherwise processed.
+
+   This function returns the number of additional table entries filled in
+   due to tracing the new relator.  */
+
+Unsigned xTraceNewRelator(
+   const PermGroup *const G,
+   const Unsigned level,
+   DeductionQueue *deductionQueue,
+   const Relator *const newRel,
+   const Permutation *const genHeader)
+{
+   Unsigned i, pt, startingPos, count, fCos, bCos, newEntryCount = 0;
+   Unsigned **fPtr, **bPtr;
+   Deduction newDeduc;
+   Permutation *gen;
+
+   /* DEBUG 
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         fCos = fCos; */
+
+   for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) {
+      pt = G->basicOrbit[level][i];
+      for ( startingPos = 1 ; startingPos <= newRel->length ; ++startingPos ) {
+         count = newRel->length;
+         for ( fCos = pt , fPtr = newRel->fRel+startingPos ;
+               count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count )
+            fCos = (*fPtr)[fCos];
+      if ( count == 0 ) {
+         if ( fCos != pt )
+            newEntryCount += processCoincidence( G, deductionQueue, genHeader,
+                                                 pt, fCos);
+         continue;
+      }
+         for ( bCos = pt , bPtr = newRel->bRel+startingPos+newRel->length-1 ;
+               count && !((*bPtr)[bCos] & HB) ; --bPtr , --count )
+            bCos = (*bPtr)[bCos];
+         if ( count == 1 ) {
+            (*fPtr)[fCos] = bCos;
+            if ( fCos <= G->degree )
+               ++newEntryCount;
+            gen = newRel->rel[fPtr - newRel->fRel];
+            newDeduc.pnt = fCos;  newDeduc.img = bCos;  newDeduc.gn = gen;
+            ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+            if ( fCos != bCos || gen != gen->invPermutation) {
+               (*bPtr)[bCos] = fCos;
+               if ( bCos <= G->degree )
+                  ++newEntryCount;
+               newDeduc.img = fCos;  newDeduc.pnt = bCos;  newDeduc.gn =
+                                                           gen->invPermutation;
+               ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+            }
+         }
+      }
+   }
+
+   /* DEBUG 
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) )
+         fCos = fCos; */
+
+   return newEntryCount;
+}
+
+
+/*-------------------------- makeDefinition --------------------------------*/
+
+void makeDefinition(
+   const Unsigned coset,
+   Permutation *const gen,
+   DeductionQueue *const deducQueue,
+   DefinitionList *const defnList,
+   Permutation *const genHeader)
+{
+   Unsigned newCoset, trueCoset;
+   Deduction newDeduc;
+   Permutation *gen1;
+
+   /* DEBUG 
+   if ( !verifyCosetList(255) )
+      trueCoset = trueCoset;
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      if ( !isValidPermutation(gen1,255,extraCosetsAtLevel,equivCoset) )
+         trueCoset = trueCoset; */
+
+   defnList->coset[defnList->tail] = coset;
+   defnList->gen[defnList->tail] = gen;
+   defnList->image[defnList->tail] = trueCoset = gen->image[coset] & NHB;
+   ++defnList->size;
+   ++defnList->tail;
+   defnList->tail %= extraCosetsAtLevel;
+
+   newCoset = freeCosHeader;
+   freeCosHeader = nextCos[freeCosHeader];
+   if ( firstCos != 0 )
+      prevCos[firstCos] = newCoset;
+   nextCos[newCoset] = firstCos;
+   firstCos = newCoset;
+   prevCos[newCoset] = 0;
+   equivCoset[newCoset] = trueCoset;
+   bb[newCoset] = newCoset;
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      gen1->image[newCoset] = HB;
+   gen->image[coset] = newCoset;
+   gen->invImage[newCoset] = coset;
+   ++currentExtraCosets;
+   newDeduc.pnt = coset;  newDeduc.img = newCoset;  newDeduc.gn = gen;
+   ATTEMPT_ENQUEUE( deducQueue, newDeduc)
+   newDeduc.pnt = newCoset;  newDeduc.img = coset;
+   newDeduc.gn = gen->invPermutation;
+   ATTEMPT_ENQUEUE( deducQueue, newDeduc)
+
+   /* DEBUG 
+   if ( !verifyCosetList(255) )
+      trueCoset = trueCoset;
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      if ( !isValidPermutation(gen1,255,extraCosetsAtLevel,equivCoset) )
+         trueCoset = trueCoset; */
+}
+
+
+/*-------------------------- forceCollapse ---------------------------------*/
+
+Unsigned forceCollapse(
+   const PermGroup *const G,
+   const Unsigned level,
+   Permutation *genHeader,
+   DeductionQueue *const deductionQueue,
+   DefinitionList *const defnList,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr)
+{
+   Unsigned coset, image, oldImage, j, newTableEntries;
+   Permutation *gen, *gen1;
+   WordImagePair wh;
+   Unsigned basicOrbLen = G->basicOrbLen[level];
+   UnsignedS *basicOrbit = G->basicOrbit[level];
+   Deduction *newDeduc;
+
+   /* ???????????????????
+   coset = defnList->coset[defnList->head];
+   gen = defnList->gen[defnList->head];
+   image = defnList->image[defnList->head];
+   ++defnList->size;
+   ++defnList->head;
+   defnList->head %= extraCosetsAtLevel; ?????????????*/
+
+   for ( j = 1 ; j <= G->basicOrbLen[level] ; ++j ) {
+      coset = G->basicOrbit[level][j];
+      for ( gen = genHeader ; gen ; gen = gen->xNext )
+         if ( !(gen->image[coset] & HB) && gen->image[coset] > G->degree ) {
+            j = G->basicOrbLen[level] + 2;
+            break;
+         }
+   } 
+   image = equivCoset[gen->image[coset]];      
+
+
+   /* DEBUG 
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) )
+         j = j; */
+   wh = xComputeSchreierGen( G, level, coset, gen);
+   /* DEBUG 
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) )
+         j = j;  */
+   if ( !xReduce( G, level, &j, &wh) ) {
+      *jPtr = j;
+      *hPtr = allocPermutation();
+      (*hPtr)->degree = G->degree;
+      (*hPtr)->image = wh.image;
+      adjoinInvImage( *hPtr);
+      *wPtr = allocWord();
+      **wPtr = wh.word;
+      resetTable( genHeader, basicOrbLen, basicOrbit);
+      return UNKNOWN;
+   }
+   /* DEBUG 
+   for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext )
+      if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) )
+         j = j;  */
+   freeIntArrayDegree( wh.image);
+   *wPtr = allocWord();
+   **wPtr = wh.word;
+   newTableEntries = processCoincidence( G, deductionQueue, genHeader,
+                                         image, gen->image[coset]);
+
+   return newTableEntries;
+}
+
+
+
+/*-------------------------- verifyCosetList--------------------------------*/
+
+BOOLEAN verifyCosetList(
+   Unsigned degree)
+{
+   Unsigned inUseCount = 0, freeCount = 0, i, coset;
+   char *found = (char *) malloc( extraCosetsAtLevel+2) - degree;
+
+   for ( i = degree+1 ; i <= degree + extraCosetsAtLevel ; ++i )
+      found[i] = FALSE;
+   for ( coset = firstCos ; coset != 0 ; coset = nextCos[coset] ) {
+      if ( coset <= degree || coset > degree+extraCosetsAtLevel ) {
+         printf( "\n*** Invalid coset %u on in use list.", coset);
+         return FALSE;
+      }
+      if ( found[coset] ) {
+         printf ( "\n*** Coset %u appears twice on in use list.", coset);
+         return FALSE;
+      }
+      found[coset] = 1;
+      ++inUseCount;
+   }
+   for ( coset = freeCosHeader ; coset != 0 ; coset = nextCos[coset] ) {
+      if ( coset <= degree || coset > degree+extraCosetsAtLevel ) {
+         printf( "\n*** Invalid coset %u on free list.", coset);
+         return FALSE;
+      }
+      if ( found[coset] == 1 ) {
+         printf ( "\n*** Coset %u appears on both lists.", coset);
+         return FALSE;
+      }
+      else if ( found[coset] == 2 ) {
+         printf ( "\n*** Coset %u appears twice on free list.", coset);
+         return FALSE;
+      }
+      found[coset] = 2;
+      ++freeCount;
+   }
+   
+   if ( inUseCount + freeCount != extraCosetsAtLevel ) {
+      printf( "\n*** Invalid coset counts: %u + %u != %u", inUseCount,
+              freeCount, extraCosetsAtLevel);
+      return FALSE;
+   }
+
+   if ( firstCos != 0 && prevCos[firstCos] != 0 ) {
+      printf( "\n*** firstCos = %u, prevCos[%u] = %u.", firstCos, firstCos,
+              prevCos[firstCos]);
+      return FALSE;
+   }
+
+   for ( coset = firstCos ; coset != 0 ; coset = nextCos[coset] ) 
+      if ( (coset != firstCos && nextCos[prevCos[coset]] != coset) ||
+           (nextCos[coset] != 0 && prevCos[nextCos[coset]] != coset) ) {
+         printf( "\n*** Invalid linked list at %u.", coset);
+         return FALSE;
+      }
+
+   free(found);
+   return TRUE;
+}
+      
+
+
+
+
+/*-------------------------- verifyCosetList--------------------------------*/
+
+BOOLEAN onFreeList(
+   Unsigned coset)
+{
+   Unsigned i;
+
+   for ( i = freeCosHeader ; i != 0 ; i = nextCos[i] )
+      if ( i == coset )
+         return TRUE;
+
+   return FALSE;
+}
diff --git a/src/leon/src/relator.h b/src/leon/src/relator.h
new file mode 100644
index 0000000..dff46e9
--- /dev/null
+++ b/src/leon/src/relator.h
@@ -0,0 +1,103 @@
+#ifndef RELATOR
+#define RELATOR
+
+extern BOOLEAN verifyCosetList(
+   Unsigned degree);
+BOOLEAN onFreeList(
+   Unsigned coset);
+
+UnsignedS relatorLevel(
+   const Relator *const r)
+;
+
+extern Unsigned symmetricLength(
+   const Relator *const r)
+;
+
+extern Unsigned symmetricWordLength(
+   const Word *const w)
+;
+
+extern Relator *addRelatorSortedFromWord(
+   PermGroup *const G,
+   Word *const w,
+   BOOLEAN fbRelFlag,
+   BOOLEAN doubleFlag)
+;
+
+extern Unsigned addOccurencesForRelator(
+   const Relator *const r,
+   Unsigned priority)
+;
+
+extern void resetTable(
+   Permutation *genHeader,
+   Unsigned basicOrbLen,
+   Unsigned *basicOrbit)
+;
+
+extern Unsigned findConsequences(
+   DeductionQueue *deductionQueue,
+   const Unsigned level,
+   const Deduction *const deduc)
+;
+
+extern Unsigned traceNewRelator(
+   const PermGroup *const G,
+   const Unsigned level,
+   DeductionQueue *deductionQueue,
+   const Relator *const newRel)
+;
+
+extern Unsigned processCoincidence(
+   const PermGroup *const G,
+   DeductionQueue *deductionQueue,
+   const Permutation *const genHeader,
+   const Unsigned coset1,
+   const Unsigned coset2)
+;
+
+extern Unsigned xFindConsequences(
+   const PermGroup *const G,
+   DeductionQueue *deductionQueue,
+   const Unsigned level,
+   const Deduction *const deduc,
+   const Permutation *const genHeader)
+;
+
+extern Unsigned xTraceNewRelator(
+   const PermGroup *const G,
+   const Unsigned level,
+   DeductionQueue *deductionQueue,
+   const Relator *const newRel,
+   const Permutation *const genHeader)
+;
+
+extern void makeDefinition(
+   const Unsigned coset,
+   Permutation *const gen,
+   DeductionQueue *const deducQueue,
+   DefinitionList *const defnList,
+   Permutation *const genHeader)
+;
+
+extern Unsigned forceCollapse(
+   const PermGroup *const G,
+   const Unsigned level,
+   Permutation *genHeader,
+   DeductionQueue *const deductionQueue,
+   DefinitionList *const defnList,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr)
+;
+
+extern BOOLEAN verifyCosetList(
+   Unsigned degree)
+;
+
+extern BOOLEAN onFreeList(
+   Unsigned coset)
+;
+
+#endif
diff --git a/src/leon/src/repimg.h b/src/leon/src/repimg.h
new file mode 100644
index 0000000..73616bf
--- /dev/null
+++ b/src/leon/src/repimg.h
@@ -0,0 +1,33 @@
+/* Optimized macro to apply a permutation perm to a list pointList of points of
+   size listSize.  Four temporary variables of type Unsigned* must be
+   supplied:  tImage, ptPtr, breakPtr, and endList.  The first two (especially
+   the second) are good candidates for register variables.  */
+
+#define REPLACE_BY_IMAGE( pointList, perm, listSize,  \
+                          tImage, ptPtr, breakPtr, endList)  \
+   tImage = perm->image;  \
+   endList = pointList + listSize;  \
+   breakPtr = (listSize >= 10) ? (endList - 9) : pointList;  \
+   ptPtr = pointList+1;  \
+   while( ptPtr <= breakPtr ) {  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;   \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+   }  \
+   while ( ptPtr <= endList ) {  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+   }
diff --git a/src/leon/src/repinimg.h b/src/leon/src/repinimg.h
new file mode 100644
index 0000000..072eb56
--- /dev/null
+++ b/src/leon/src/repinimg.h
@@ -0,0 +1,34 @@
+/* Optimized macro to apply the inverse of a permutation perm to a list
+   pointList of points of size listSize.  (It is assumed that the inverse
+   image fields exist.)  Four temporary variables of type Unsigned* must be
+   supplied:  tImage, ptPtr, breakPtr, and endList.  The first two (especially
+   the second) are good candidates for register variables.  */
+
+#define REPLACE_BY_INV_IMAGE( pointList, perm, listSize,  \
+                              tImage, ptPtr, breakPtr, endList)  \
+   tImage = perm->invImage;  \
+   endList = pointList + listSize;  \
+   breakPtr = (listSize >= 10) ? (endList - 9) : pointList;  \
+   ptPtr = pointList+1;  \
+   while( ptPtr <= breakPtr ) {  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;   \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+   }  \
+   while ( ptPtr <= endList ) {  \
+      *ptPtr = tImage[*ptPtr];  \
+      ++ptPtr;  \
+   }
diff --git a/src/leon/src/rprique.c b/src/leon/src/rprique.c
new file mode 100644
index 0000000..ce7a1b7
--- /dev/null
+++ b/src/leon/src/rprique.c
@@ -0,0 +1,184 @@
+/* File rprique.c  Contains functions to manipulate an R-priority queue.
+   An R-priority queue is a  priority queue that, after initialization,
+   permits only removal operations.   The functions provided are:
+
+      initFromPartnStack:  Initialize an R-priority queue to contain the
+                           points in a specified cell of the top partition
+                           on a specified partition stack.
+
+      removeMin:           Removes the minimum point from an R-priority
+                           queue.  Returns the point removed.
+
+      makeEmpty:           Purges all points from an R-priority queue.
+
+   Note that the header file group.h defines the type RPriorityQueue and
+   provides a macro RPQ_SIZE returning the size of an R-priority queue
+   and a macro RPQ_CLEAR making an R-priority queue empty.
+
+   Internally, the points of the R-priority queue are sorted in
+   descending order. */
+
+#include <assert.h>
+
+#include "group.h"
+#include "storage.h"
+
+CHECK( rpriqu)
+
+#define qSortCutOff   10
+#define RPQ_PUSH(a,b)  \
+      {qSortStack[qSortTop][0] = a;  qSortStack[qSortTop++][1] = b;}
+#define RPQ_POP(a,b)   \
+      {a = qSortStack[--qSortTop][0];  b = qSortStack[qSortTop][1];}
+
+
+/*-------------------------- initFromPartnStack ---------------------------*/
+
+/* The function initFromPartnStack initializes an existing R-priority queue
+   to the points in a given cell of the top partition on a given partition
+   stack. */
+
+void initFromPartnStack(
+   RPriorityQueue *rpq,        /* R-priority queue to initialize. */
+   PartitionStack *PiStack,    /* The partition stack. */
+   Unsigned cellNumber,        /* The R-priority queue is initialized to cell
+                                  cellNumber of top partition on bfPiStack */
+   const RBase *const AAA)     /* Only omega and invOmega are needed. */
+{
+   Unsigned  i, j, p, a, b, k, m, t, left, right, mid, splitKey, bound, tRank,
+             splitKeyRank, final;
+   UnsignedS qSortStack[20][2];
+   Unsigned  qSortTop = 0;
+   UnsignedS *const omega = AAA->omega, *const invOmega = AAA->invOmega;
+   char *temp;
+
+  /* Check that r-priority queue has required size (for debugging). */
+  /* assert( PiStack->cellSize[cellNumber] == rpq->maxSize);  */
+
+   /* Copy the appropriate cell of the partition stack to the R-priority
+      queue. */
+   i = 0;
+   for ( j = PiStack->startCell[cellNumber] , bound = j +
+             PiStack->cellSize[cellNumber] ; j < bound ; ++j )
+      rpq->pointList[++i] = PiStack->pointList[j];
+   rpq->size = i;
+
+   /* Sort the R-priority queue in descending order.  The following
+      strategy is used:  If the size is <= 10, straight insertion sort
+      is used.  Otherwise, if the size is >= degree/10, an array of flags
+      is used.  Otherwise, quicksort is used, with sublists of size <= 10
+      being handled by straight insertion sort. */
+
+   /* If the size is <= 10, sort directly by straight insertion sort and
+      return. */
+   if ( rpq->size <= 10 ) {
+      rpq->pointList[0] = 0;
+      invOmega[0] = rpq->degree+1;
+      for ( m = 2 ; m <= rpq->size ; ++m) {
+         t = rpq->pointList[m];
+         tRank = invOmega[t];
+         k = m - 1;
+         while ( invOmega[rpq->pointList[k]] < tRank ) {
+            rpq->pointList[k+1] = rpq->pointList[k];
+            --k;
+         }
+         rpq->pointList[k+1] = t;
+      }
+      return;
+   }
+
+   /* Otherwise, if the size is at least 1/10 the degree, we sort using an
+      index into a Boolean array. */
+   if ( rpq->size >= rpq->degree / 10 ) {
+      temp = allocBooleanArrayDegree();
+      for ( m = 1 ; m <= rpq->degree ; ++m )
+         temp[m] = FALSE;
+      for ( m = 1 ; m <= rpq->size ; ++m )
+         temp[invOmega[rpq->pointList[m]]] = TRUE;
+      p = 1;
+      for ( m = rpq->degree ; m >= 1 ; --m )
+         if ( temp[m] )
+            rpq->pointList[p++] = omega[m];
+      freeBooleanArrayDegree( temp);
+      return;
+   }
+
+   /* In the remaining case, we partially sort using quicksort.  Sublists
+      of size <= qSortCutOff are left unsorted.  A final pass with straight
+      insertion sort completes the sort. */
+   rpq->pointList[0] = 0;
+   invOmega[0] = rpq->degree+1;
+   if ( rpq->size > qSortCutOff ) {
+      rpq->pointList[rpq->size+1] = rpq->degree + 1;
+      invOmega[rpq->degree+1] = 0;
+      RPQ_PUSH( 1, rpq->size);
+   }
+   while ( qSortTop >= 1 ) {
+      RPQ_POP( a, b);
+      while ( b - a >= qSortCutOff ) {
+         left = a;  right = b + 1;  mid = (a + b) / 2;
+         splitKey = rpq->pointList[mid];
+         splitKeyRank = invOmega[splitKey];
+         EXCHANGE( rpq->pointList[left], rpq->pointList[mid], t)
+         do {
+            while ( invOmega[rpq->pointList[++left]] > splitKeyRank )
+               ;
+            while ( invOmega[rpq->pointList[--right]] < splitKeyRank )
+               ;
+            if ( left < right )
+               EXCHANGE( rpq->pointList[left], rpq->pointList[right], t)
+         } while ( left < right );
+         final = right;
+         EXCHANGE( rpq->pointList[a], rpq->pointList[final], t)
+         if ( final - a >= b - final )
+            if ( b - final >= qSortCutOff ) {
+               RPQ_PUSH( a, final-1);
+               a = final + 1;
+            }
+            else
+               b = final - 1;
+         else
+            if ( final - a >= qSortCutOff ) {
+               RPQ_PUSH( final+1, b);
+               b = final - 1;
+            }
+            else
+               a = final + 1;
+      }
+   }
+
+   /* Now finish with straight insertion sort. */
+   for ( m = 2 ; m <= rpq->size ; ++m) {
+      t = rpq->pointList[m];
+      tRank = invOmega[t];
+      k = m - 1;
+      while ( invOmega[rpq->pointList[k]] < tRank ) {
+         rpq->pointList[k+1] = rpq->pointList[k];
+         --k;
+      }
+      rpq->pointList[k+1] = t;
+   }
+}
+
+
+/*-------------------------- removeMin ------------------------------------*/
+
+/* The function removeMin removes the minimum point from a given R-priority
+   queue.  The function value returned is the point removed. */
+
+Unsigned removeMin(
+   RPriorityQueue *rpq)         /* R-priority queue for remove operation. */
+{
+   return rpq->pointList[ rpq->size-- ];
+}
+
+
+/*-------------------------- makeEmpty-------------------------------------*/
+
+/* This function removes all points from an R-priority queue. */
+
+void makeEmpty(
+   RPriorityQueue *rpq)     /* The priority queue to make empty. */
+{
+   rpq->size = 0;
+}
diff --git a/src/leon/src/rprique.h b/src/leon/src/rprique.h
new file mode 100644
index 0000000..f24de15
--- /dev/null
+++ b/src/leon/src/rprique.h
@@ -0,0 +1,20 @@
+#ifndef RPRIQUE
+#define RPRIQUE
+
+extern void initFromPartnStack(
+   RPriorityQueue *rpq,        /* R-priority queue to initialize. */
+   PartitionStack *PiStack,    /* The partition stack. */
+   Unsigned cellNumber,        /* The R-priority queue is initialized to cell
+                                  cellNumber of top partition on bfPiStack */
+   const RBase *const AAA)     /* Only omega and invOmega are needed. */
+;
+
+extern Unsigned removeMin(
+   RPriorityQueue *rpq)         /* R-priority queue for remove operation. */
+;
+
+extern void makeEmpty(
+   RPriorityQueue *rpq)     /* The priority queue to make empty. */
+;
+
+#endif
diff --git a/src/leon/src/setimage.sh b/src/leon/src/setimage.sh
new file mode 100755
index 0000000..d73ffe2
--- /dev/null
+++ b/src/leon/src/setimage.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+setstab -image $*
diff --git a/src/leon/src/setstab.c b/src/leon/src/setstab.c
new file mode 100644
index 0000000..87d74a9
--- /dev/null
+++ b/src/leon/src/setstab.c
@@ -0,0 +1,683 @@
+/* File setstab.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/* Main program for set stabilizer command, which may be used
+   compute the stabilizer G_Lambda in a permutation group G of a point set
+   Lmabda.  The format of the command is:
+
+      setstab <options> <permGroup> <pointSet> <stabGroup>
+
+   where the meaning of the parameters is as follows:
+
+      <permGroup>: The name of the file containing the permutation group G,
+                   or the Cayley library name in which the permutation group
+                   G is defined.  Except in the case of a Cayley library,
+                   a file type of GRP is appended.
+      <pointSet>:  The name of the file containing the point set Lambda, or the
+                   Cayley library name in which the point set Lambda is defined.
+                   Except in the case of a Cayley library, a file type of PTS
+                   is appended.
+      <stabGroup>: The name of the file in which the set stabilizer G_Lambda
+                   is written, or the Cayley library name to which the
+                   definition of G_Lambda is written.  Except in the case of
+                   a Cayley library, a file type of PTS is appended.
+
+   The options are as follows:
+
+      -a          If the output file exists, it will be appended to rather than
+                  overwritten.  (A Cayley library is always appended to rather
+                  than overwritten.)
+
+      -b:<int>    Base change in the subgroup being computed will be performed
+                  at levels fm, fm+1,...,fm+<int>-1 only, where fm is the level
+                  of the first base point (of the subgroup) moved by the current
+                  permutation.  Values below 1 will be raised to 1; those above
+                  the base size will be reduced to the base size.
+
+      -c          Compress the group G after an R-base has been constructed.
+                  This saves a moderate amount of memory at the cost of
+                  relatively little CPU time, but the group (in memory) is
+                  effectively destroyed.
+
+      -crl:<name> The definition of the group G and point set Lambda should be
+                  read from Cayley library <permGroup> in library file <name>.
+
+      -cwl:<name> The definition for the group G_Lambda should be written to
+                  Cayley library <stabGroup> library file <name>.
+
+      -g:<int>    The maximum number of strong generators for the containing
+                  group G.  If, after construction of a base and strong
+                  generating set for G, the number of strong generators is
+                  less than this number, additional strong generators will be
+                  added, chosen to reduce the length of the coset
+                  representatives (as words).   A larger value may increase
+                  speed of computation slightly at the cost of extra space.
+                  If, after construction of the base and strong generating set,
+                  the number of strong generators exceeds this number, at
+                  present strong generators are not removed.
+
+      -gn:<str>   (Set stabilizer only).  The generators for the newly-created
+                  group created are given names <str>01, <str>02, ...  .  If
+                  omitted, the new generators are named xxxx01, xxxx02, etc.,
+                  where xxxx are the first four characters of the group name.
+
+      -i          The generators of <stabGroup> are to be written in image format.
+
+      -n:<name>   The name for the set stabilizer or coset rep being computed.
+                  (Default: the file name <stabGroup> -- file type omitted)
+
+      -q          As the computation proceeds, writing of information about
+                  the current state to standard output is suppressed.
+
+      -s:<name>   A known subgroup of the set stabilizer being computed.
+                  (Default: no subgroup known)
+
+       -r:<int>   During base change, if insertion of a new base point
+                  expands the size of the strong generating set above
+                  <int> gens (not counting inverses), redundant strong
+                  generators are trimmed from the strong generating set.
+                  (Default 25).
+
+      -t          Upon conclusion, statistics regarding the number of nodes
+                  of the backtrack search tree traversed is written to the
+                  standard output.
+
+      -v          Verify that all files were compiled with the same compile-
+                  time parameters and stop.
+
+      -w:<int>    For set or partition image computations in which the sets
+                  or partitions turn out to be equivalent, a permutation
+                  mapping one to the other is written to the standard output,
+                  as well as a disk file, provided the degree is at most <int>.
+                  (The option is ignored if -q is in effect.)  Default: 100
+
+      -x:<int>    The ideal size for basic cells is set to <int>.
+
+      -z          Subject to the restrictions imposed by the -b option above,
+                  check Prop. 8.3 in "Permutation group algorithms based on
+                  partitions".
+
+   If a base for <permGroup> is not available, one will be computed.  In any
+   the base and strong generating set for <permGroup> will be changed during
+   the computation.
+
+   The return code for set or partition stabilizer computations is as follows:
+      0: computation successful,
+      15: computation terminated due to error.
+   The return code for set or partition image computations is as follows:
+      0: computation successful; sets or partitions are equivalent,
+      1: computation successful; sets or partitions are not equivalent,
+      15: computation terminated due to error.
+*/
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "cparstab.h"
+#include "csetstab.h"
+#include "cuprstab.h"
+#include "errmesg.h"
+#include "permgrp.h"
+#include "readgrp.h"
+#include "readpar.h"
+#include "readper.h"
+#include "readpts.h"
+#include "token.h"
+#include "util.h"
+
+
+GroupOptions options;
+
+static void verifyOptions(void);
+
+UnsignedS (*chooseNextBasePoint)(
+   const PermGroup *const G,
+   const PartitionStack *const UpsilonStack) = NULL;
+
+
+int main( int argc, char *argv[])
+{
+   char permGroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        pointSetFileName[MAX_FILE_NAME_LENGTH] = "",
+        *pointSet_L_FileName = pointSetFileName,
+        pointSet_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        *partitionFileName = pointSetFileName,
+        *partition_L_FileName = pointSet_L_FileName,
+        *partition_R_FileName = pointSet_R_FileName,
+        knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_Specifier = knownSubgroupSpecifier,
+        knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "",
+        knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "",
+        *knownSubgroup_L_FileName = knownSubgroupFileName,
+        knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "",
+        outputFileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, optionCountPlus1;
+   char outputObjectName[MAX_NAME_LENGTH+1] = "",
+        outputLibraryName[MAX_NAME_LENGTH+1] = "",
+        permGroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        pointSetLibraryName[MAX_NAME_LENGTH+1] = "",
+        *partitionLibraryName = pointSetLibraryName,
+        knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "",
+        *pointSet_L_LibraryName = pointSetLibraryName,
+        pointSet_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        *partition_L_LibraryName = pointSet_L_LibraryName,
+        *partition_R_LibraryName = pointSet_R_LibraryName,
+        *knownSubgroup_L_LibraryName = knownSubgroupLibraryName,
+        knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH];
+   PermGroup *G, *G_pP, *L = NULL, *L_L = NULL, *L_R = NULL;
+   Permutation *y;
+   PointSet *Lambda, *Xi;
+   Partition *PLambda, *PXi;
+   BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE;
+   char ordUnord[] = "Ordered";
+   char tempArg[8];
+   enum { SET_STAB, SET_IMAGE, PARTN_STAB, PARTN_IMAGE,
+          UPARTN_STAB, UPARTN_IMAGE} computationType = SET_STAB;
+   char comment[100];
+
+   /* Check whether the first parameter is Image or (U)Partn, and if so whether
+      the second parameter is Image or (U)Partn.  If so, a set image, partition
+      stabilizer, or partition image computation will be performed instead of
+      a set stabilizer one, and the valid remaining parameters will be
+      different. */
+
+   j = 0;
+   for ( i = 1 ; i <= 2 && i < argc ; ++i ) {
+      strncpy( tempArg, argv[i], 8);
+      tempArg[7] = '\0';
+      lowerCase( tempArg);
+      if ( strcmp( tempArg, "-image") == 0 )
+         j |= 4;
+      else if ( strcmp( tempArg, "-upartn") == 0 )
+         j |= 2;
+      else if ( strcmp( tempArg, "-partn") == 0 )
+         j |= 1;
+      else
+         break;
+   }
+   switch( j ) {
+      case 0:  computationType = SET_STAB;  break;
+      case 1:  computationType = PARTN_STAB;  break;
+      case 2:  computationType = UPARTN_STAB;
+                  strcpy( ordUnord, "Unordered"); break;
+      case 4:  computationType = SET_IMAGE;  imageFlag = TRUE;  break;
+      case 5:  computationType = PARTN_IMAGE;  imageFlag = TRUE;  break;
+      case 6:  computationType = UPARTN_IMAGE;  imageFlag = TRUE;
+                  strcpy( ordUnord, "Unordered"); break;
+      default: ERROR( "main (setstab)", "Invalid options"); break;
+   }
+
+   /* Provide help if no arguments are specified. Note i and j must be as
+      described above. */
+   if ( i == argc ) {
+      switch( j ) {
+         case 0:  printf( "\nUsage:  setstab [options] permGroup pointSet stabilizerSubgroup\n");
+                  break;
+         case 1:  printf( "\nUsage:  parstab [options] permGroup ordPartition stabilizerSubgroup\n");
+                  break;
+         case 2:  printf( "\nUsage:  uprstab [options] permGroup unOrdPartition stabilizerSubgroup\n");
+                  break;
+         case 4:  printf( "\nUsage:  setimage [options] permGroup pointSet1 pointSet2 groupElement\n");
+                  break;
+         case 5:  printf( "\nUsage:  parimage [options] permGroup ordPartition1 ordPartition2 groupElement\n");
+                  break;
+         case 6:  printf( "\nUsage:  uprimage [options] permGroup unOrdPartition1 unOrdPartition2 groupElement\n");
+                  break;
+      }
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position i (i as above) give
+      limits and return. */
+   if ( i < argc && (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-L") == 0) ) {
+      showLimits();
+      return 0;
+   }
+   /* Check for verify option.  If present in position i (i as above) perform
+      verify (Note verifyOptions terminates program). */
+   if ( i < argc && (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-V") == 0) )
+      verifyOptions();
+   if ( argc < 4 )
+      ERROR( "main (setstab)", "Too few parameters.")
+
+   /* Check for exactly 3 (set or partn stabilizer) or 4 (set or partn image) parameters
+      following options.  Note i must be as above. */
+   for ( optionCountPlus1 = i ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 != 3 + imageFlag ) {
+      ERROR1i( "setStabilizer", "Exactly ", 3+imageFlag,
+               " non-option parameters are required.");
+      exit(ERROR_RETURN_CODE);
+   }
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.statistics = FALSE;
+   options.inform = TRUE;
+   options.compress = TRUE;
+   options.maxBaseChangeLevel = UNKNOWN;
+   options.maxStrongGens = 70;
+   options.idealBasicCellSize = 4;
+   options.trimSGenSetToSize = 35;
+   options.strongMinDCosetCheck = FALSE;
+   options.writeConjPerm = MAX_COSET_REP_PRINT;
+   options.restrictedDegree = 0;
+   options.alphaHat1 = 0;
+   parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName,
+                     outputLibraryName);
+   strncpy( options.genNamePrefix, outputLibraryName, 4);
+   options.genNamePrefix[4] = '\0';
+   strcpy( options.outputFileMode, "w");
+
+   /* Note i must still be as above. */
+   for ( ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strncmp( argv[i], "-a1:", 4) == 0 &&
+                (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-b:", 3) == 0 &&
+                (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-g:", 3) == 0 &&
+                (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
+         if ( strlen( argv[i]+4) <= 8 )
+            strcpy( options.genNamePrefix, argv[i]+4);
+         else
+            ERROR( "main (setstab)", "Invalid value for -gn option")
+      else if ( strcmp( argv[i], "-i") == 0 )
+         imageFormatFlag = TRUE;
+      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
+         errno = 0;
+         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (setstab)", "Invalid syntax for -mb option")
+      }
+      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
+         errno = 0;
+         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (setstab)", "Invalid syntax for -mw option")
+      }
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( outputObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (setstab)", "Invalid name ", outputObjectName,
+                     " for stabilizer group or coset rep.")
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strncmp( argv[i], "-r:", 3) == 0 &&
+                (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 )
+         strcpy( knownSubgroupSpecifier, argv[i]+3);
+      else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 )
+         strcpy( knownSubgroup_L_Specifier, argv[i]+4);
+      else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 )
+         strcpy( knownSubgroup_R_Specifier, argv[i]+4);
+      else if ( strcmp( argv[i], "-s") == 0 )
+         options.statistics = TRUE;
+      else if ( strncmp( argv[i], "-w:", 3) == 0 &&
+                (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strncmp( argv[i], "-x:", 3) == 0 &&
+                (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) ,
+                errno != ERANGE) )
+         ;
+      else if ( strcmp( argv[i], "-z") == 0 )
+         options.strongMinDCosetCheck = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   /* Compute maximum degree and word length. */
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   /* Compute names for files and name for set stabilizer or coset rep. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix, permGroupFileName,
+                     permGroupLibraryName);
+   switch( computationType) {
+      case SET_STAB:
+      case PARTN_STAB:
+      case UPARTN_STAB:
+         parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                           pointSetFileName, pointSetLibraryName);
+         parseLibraryName( argv[optionCountPlus1+2], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroupSpecifier[0] != '\0' )
+            parseLibraryName( knownSubgroupSpecifier, prefix, suffix,
+                              knownSubgroupFileName, knownSubgroupLibraryName);
+         break;
+      case SET_IMAGE:
+      case PARTN_IMAGE:
+      case UPARTN_IMAGE:
+         parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
+                           pointSet_L_FileName, pointSet_L_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+2], prefix, suffix,
+                           pointSet_R_FileName, pointSet_R_LibraryName);
+         parseLibraryName( argv[optionCountPlus1+3], "", "",
+                           outputFileName, outputLibraryName);
+         if ( outputObjectName[0] == '\0' )
+            strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1);
+         if ( knownSubgroup_L_Specifier[0] )
+            parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix,
+                              knownSubgroup_L_FileName, knownSubgroup_L_LibraryName);
+         if ( knownSubgroup_R_Specifier[0] )
+            parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix,
+                              knownSubgroup_R_FileName, knownSubgroup_R_LibraryName);
+   }
+
+   /* Read in the containing group G. */
+   G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate");
+
+   /* Read in the known subgroups, if present. */
+   switch ( computationType ) {
+      case SET_STAB:
+      case PARTN_STAB:
+      case UPARTN_STAB:
+         if ( knownSubgroupSpecifier[0] )
+            L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName,
+                               G->degree, "Generate");
+         break;
+      case SET_IMAGE:
+      case PARTN_IMAGE:
+      case UPARTN_IMAGE:
+         if ( knownSubgroup_L_Specifier[0] ) 
+            L_L = readPermGroup( knownSubgroup_L_FileName,
+                       knownSubgroup_L_LibraryName, G->degree, "Generate");
+         if ( knownSubgroup_R_Specifier[0] ) 
+            L_R = readPermGroup( knownSubgroup_R_FileName,
+                       knownSubgroup_R_LibraryName, G->degree, "Generate");
+         break;
+   }
+
+   /* Read in the point set(s) or partition(s). */
+   switch ( computationType ) {
+      case SET_STAB:
+         Lambda = readPointSet( pointSetFileName, pointSetLibraryName,
+                                G->degree);
+         break;
+      case SET_IMAGE:
+         Lambda = readPointSet( pointSet_L_FileName, pointSet_L_LibraryName,
+                                G->degree);
+         Xi     = readPointSet( pointSet_R_FileName, pointSet_R_LibraryName,
+                                G->degree);
+         break;
+      case PARTN_STAB:
+      case UPARTN_STAB:
+         PLambda = readPartition( partitionFileName, partitionLibraryName,
+                                 G->degree);
+         break;
+      case PARTN_IMAGE:
+      case UPARTN_IMAGE:
+         PLambda = readPartition( partition_L_FileName, partition_L_LibraryName,
+                                 G->degree);
+         PXi     = readPartition( partition_R_FileName, partition_R_LibraryName,
+                                 G->degree);
+         break;
+   }
+
+   /* Compute maximum base change level if not specified as option. */
+   if ( options.maxBaseChangeLevel == UNKNOWN )
+      options.maxBaseChangeLevel =
+         isDoublyTransitive(G) ?
+            ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) :
+            ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6));
+
+   /* Compute the set or partition stabilizer or coset rep and write it out. */
+   switch ( computationType ) {
+      case SET_STAB:
+         if ( options.inform ) {
+            printf( "\n\n               Set Stabilizer Program:  "
+                    "Group %s, Point Set %s\n\n", G->name, Lambda->name);
+            if ( L )
+               printf( "\nKnown Subgroup: %s\n", L->name);
+         }
+         options.groupOrderMessage = "Set stabilizer";
+         G_pP = setStabilizer( G, Lambda, L);
+         strcpy( G_pP->name, outputObjectName);
+         G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         sprintf( comment,
+                 "The stabilizer in permutation group %s of point set %s.",
+                 G->name, Lambda->name);
+         writePermGroup( outputFileName, outputLibraryName, G_pP, comment);
+         break;
+      case PARTN_STAB:
+      case UPARTN_STAB:
+         if ( options.inform ) {
+            printf( "\n\n        %s Partition Stabilizer Program:  "
+                    "Group %s, Partition %s\n\n", ordUnord, G->name,
+                    PLambda->name);
+            if ( L )
+               printf( "\nKnown Subgroup: %s\n", L->name);
+         }
+         switch( computationType ) {
+            case PARTN_STAB:
+            options.groupOrderMessage = 
+                     "Ordered partition stabilizer";
+               G_pP = partnStabilizer( G, PLambda, L);
+               sprintf( comment,
+                    "The stabilizer in permutation group %s of ordered partition %s.",
+                    G->name, PLambda->name);
+               break;
+            case UPARTN_STAB:
+            options.groupOrderMessage = 
+                     "Unordered partition stabilizer";
+               G_pP = uPartnStabilizer( G, PLambda, L);
+               sprintf( comment,
+                    "The stabilizer in permutation group %s of unordered partition %s.",
+                    G->name, PLambda->name);
+               break;
+         }
+         strcpy( G_pP->name, outputObjectName);
+         G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
+         writePermGroup( outputFileName, outputLibraryName, G_pP, comment);
+         break;
+      case SET_IMAGE:
+         if ( options.inform ) {
+            printf( "\n\n\n           Set Image Program:  "
+                    "Group %s, Point Sets %s And %s\n\n", G->name,
+                    Lambda->name, Xi->name);
+            if ( L_L )
+               printf( "\nKnown Subgroup (left):  %s", L_L->name);
+            if ( L_R )
+               printf( "\nKnown Subgroup (right): %s", L_R->name);
+            if ( L_L || L_R )
+               printf( "\n");
+         }
+         options.cosetRepMessage = 
+            "The first set is mapped to the second by group element:";
+         options.noCosetRepMessage = "The sets are not equivalent under the group.";
+         y = setImage( G, Lambda, Xi, L_L, L_R);
+         if ( y ) {
+            strcpy( y->name, outputObjectName);
+            sprintf( comment,
+               "A permutation in group %s mapping point set %s to point set %s.",
+                     G->name, Lambda->name, Xi->name);
+            if ( imageFormatFlag )
+               writePermutation( outputFileName, outputLibraryName, y, "image", comment);
+            else
+               writePermutation( outputFileName, outputLibraryName, y, "", comment);
+         }
+         break;
+      case PARTN_IMAGE:
+      case UPARTN_IMAGE:
+         if ( options.inform ) {
+            printf( "\n\n\n      %s Partition Image Program:  "
+                    "Group %s, Partitions %s And %s\n\n", ordUnord, G->name,
+                    PLambda->name, PXi->name);
+            if ( L_L )
+               printf( "\nKnown Subgroup (left):  %s", L_L->name);
+            if ( L_R )
+               printf( "\nKnown Subgroup (right): %s", L_R->name);
+            if ( L_L || L_R )
+               printf( "\n");
+         }
+         switch( computationType ) {
+            case PARTN_IMAGE:
+               options.cosetRepMessage = 
+                   "The first ordered partition is mapped to the second by group element:";
+               options.noCosetRepMessage = 
+                   "The ordered partitions are not equivalent under the group.";
+               y = partnImage( G, PLambda, PXi, L_L, L_R);
+            sprintf( comment,
+               "A permutation in group %s mapping ordered partition %s to ordered partition %s.",
+                     G->name, PLambda->name, PXi->name);
+               break;
+            case UPARTN_IMAGE:
+               options.cosetRepMessage = 
+                   "The first unordered partition is mapped to the second by group element:";
+               options.noCosetRepMessage = 
+                   "The unordered partitions are not equivalent under the group.";
+               y = uPartnImage( G, PLambda, PXi, L_L, L_R);
+            sprintf( comment,
+               "A permutation in group %s mapping unordered partition %s to unordered partition %s.",
+                     G->name, PLambda->name, PXi->name);
+               break;
+         }
+         if ( y ) {
+            strcpy( y->name, outputObjectName);
+            if ( imageFormatFlag )
+               writePermutation( outputFileName, outputLibraryName, y, "image", comment);
+            else
+               writePermutation( outputFileName, outputLibraryName, y, "", comment);
+         }
+         break;
+   }
+
+   /* Return to caller. */
+   if ( !imageFlag || y )
+      return 0;
+   else
+      return 1;
+}
+
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xaddsge( CompileOptions *cOpts);
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xchbase( CompileOptions *cOpts);
+   extern void xcompcr( CompileOptions *cOpts);
+   extern void xcompsg( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xcparst( CompileOptions *cOpts);
+   extern void xcsetst( CompileOptions *cOpts);
+   extern void xcstbor( CompileOptions *cOpts);
+   extern void xcstrba( CompileOptions *cOpts);
+   extern void xcuprst( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xinform( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xoldcop( CompileOptions *cOpts);
+   extern void xoptsve( CompileOptions *cOpts);
+   extern void xorbit ( CompileOptions *cOpts);
+   extern void xorbref( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xptstbr( CompileOptions *cOpts);
+   extern void xrandgr( CompileOptions *cOpts);
+   extern void xrandsc( CompileOptions *cOpts);
+   extern void xreadgr( CompileOptions *cOpts);
+   extern void xreadpa( CompileOptions *cOpts);
+   extern void xreadpe( CompileOptions *cOpts);
+   extern void xreadpt( CompileOptions *cOpts);
+   extern void xrpriqu( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xaddsge( &mainOpts);
+   xbitman( &mainOpts);
+   xchbase( &mainOpts);
+   xcompcr( &mainOpts);
+   xcompsg( &mainOpts);
+   xcopy  ( &mainOpts);
+   xcparst( &mainOpts);
+   xcsetst( &mainOpts);
+   xcstbor( &mainOpts);
+   xcstrba( &mainOpts);
+   xcuprst( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xinform( &mainOpts);
+   xnew   ( &mainOpts);
+   xoldcop( &mainOpts);
+   xoptsve( &mainOpts);
+   xorbit ( &mainOpts);
+   xorbref( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermgr( &mainOpts);
+   xpermut( &mainOpts);
+   xprimes( &mainOpts);
+   xptstbr( &mainOpts);
+   xrandgr( &mainOpts);
+   xrandsc( &mainOpts);
+   xreadgr( &mainOpts);
+   xreadpa( &mainOpts);
+   xreadpe( &mainOpts);
+   xreadpt( &mainOpts);
+   xrpriqu( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/setstab.h b/src/leon/src/setstab.h
new file mode 100644
index 0000000..6812469
--- /dev/null
+++ b/src/leon/src/setstab.h
@@ -0,0 +1,7 @@
+#ifndef SETSTAB
+#define SETSTAB
+
+extern int main( int argc, char *argv[])
+;
+
+#endif
diff --git a/src/leon/src/settoinv.h b/src/leon/src/settoinv.h
new file mode 100644
index 0000000..70bc032
--- /dev/null
+++ b/src/leon/src/settoinv.h
@@ -0,0 +1,27 @@
+/* Optimized macro to set one point list to the inverse of another.
+   Two temporary variable of type Unsigned*, followed by three of type
+   Unsigned, are required.  The first three of the five temporary variables
+   are good candidates for register variables.  */
+
+#define SET_TO_INVERSE( pointList, invPointList, listSize, \
+                        ptr, invPtr, index, bound, pBound)  \
+   ptr = pointList;  \
+   invPtr = invPointList;  \
+   index = 1;  \
+   bound = listSize;  \
+   pBound = (bound > 9 ) ? (bound - 9) : 0;  \
+   while( index <= pBound ) {  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+      invPtr[ptr[index]] = index; ++index;  \
+   }  \
+   while ( index <= bound ) {  \
+      invPtr[ptr[index]] = index; ++index;  \
+   }
diff --git a/src/leon/src/stamp-h1 b/src/leon/src/stamp-h1
new file mode 100644
index 0000000..1004c6f
--- /dev/null
+++ b/src/leon/src/stamp-h1
@@ -0,0 +1 @@
+timestamp for src/leon_config.h
diff --git a/src/leon/src/stcs.c b/src/leon/src/stcs.c
new file mode 100644
index 0000000..9cb6cd1
--- /dev/null
+++ b/src/leon/src/stcs.c
@@ -0,0 +1,1093 @@
+/* File stcs.c. */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+#include "groupio.h"
+#include "enum.h"
+#include "repimg.h"
+
+#include "addsgen.h"
+#include "cstborb.h"
+#include "errmesg.h"
+#include "essentia.h"
+#include "factor.h"
+#include "new.h"
+#include "oldcopy.h"
+#include "permgrp.h"
+#include "permut.h"
+#include "randschr.h"
+#include "relator.h"
+#include "storage.h"
+#include "token.h"
+
+CHECK( stcs)
+
+extern Unsigned primeList[];
+
+static BOOLEAN checkStabilizer(
+   PermGroup *const G,
+   const UnsignedS *const knownBase,       /* Null-terminated list, or null. */
+   const Unsigned level,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr);
+
+static BOOLEAN xCheckStabilizer(
+   PermGroup *const G,
+   const UnsignedS *const knownBase,       /* Null-terminated list, or null. */
+   const Unsigned level,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr);
+
+static void addStrongGeneratorNR(
+   PermGroup *G,              /* Group to which strong gen is adjoined. */
+   Permutation *newGen);      /* The new strong generator. It must move */
+
+WordImagePair computeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen);
+
+BOOLEAN reduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr);
+
+void informNewRelator(
+   const Relator *const newRel,
+   Unsigned numberAdded);
+
+void informSTCSSummary(
+   const PermGroup *const G,
+   const unsigned long numberOfRelators,
+   const unsigned long totalRelatorLength,
+   const Unsigned maxRelatorLength,
+   const unsigned long numberSelected,
+   const unsigned long totalSelectedLength);
+
+void expandGenerators(
+   PermGroup *const G,
+   Unsigned maxExtraCosets);
+
+unsigned long prodOrderBounded(
+   const Permutation *const perm1,
+   const Permutation *const perm2,
+   const Unsigned bound);
+
+extern GroupOptions options;
+extern STCSOptions sOptions;
+extern Unsigned relatorSelection[5];
+
+Unsigned *nextCos, *prevCos, *ff, *bb, *equivCoset;
+Unsigned freeCosHeader, firstCos;
+
+Unsigned extraCosetsAtLevel;
+Unsigned currentExtraCosets;
+
+static unsigned long tableEntriesFilled;
+static unsigned long totalTableEntries;
+
+static unsigned long numberOfRelators = 0, totalRelatorLength = 0,
+                numberSelected = 0, totalSelectedLength = 0;
+static Unsigned maxRelatorLength = 0;
+
+
+
+/*-------------------------- schreierToddCoxeterSims ----------------------*/
+
+/* Main function for the Schreier-Todd-Coxeter-Sim function for constructing
+   a base, strong generating set, and strong presentation for a permutation
+   group.
+
+   Note:  If G has relators initially, they will be assumed to be correct,
+          and will be used.  However, in this case, it should already
+          have inverse permutations. */
+
+void schreierToddCoxeterSims(
+   PermGroup *const G,
+   const UnsignedS *const knownBase)       /* Null-terminated list, or null. */
+{
+   Unsigned level, i, j, k, pOrder, numberAdded;
+   Unsigned degree = G->degree;
+   Permutation *gen, *gen1;
+   Permutation *h;
+   Relator *r, *rel;
+   char *svecOK = allocBooleanArrayBaseSize();
+   Word *w;
+   Relator *newRel;
+   Word tempWord;
+
+  /* If initialization is requested, perform initializations. */
+  if ( sOptions.initialize ) {
+
+     /* Allocate fields within G. */
+     if ( G->base || G->basicOrbLen || G->basicOrbit || G->schreierVec )
+        ERROR( "schreierToddCoxeterSims",
+               "A group field that must be null initially was nonnull.")
+     G->base = allocIntArrayBaseSize();
+     G->basicOrbLen = allocIntArrayBaseSize();
+     G->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize();
+     G->schreierVec = (Permutation ***) allocPtrArrayBaseSize();
+
+      /* Allocate G->order and set G->order to 1.  */
+      if ( !G->order ) {
+         G->order = allocFactoredInt();
+         G->order->noOfFactors = 0;
+      }
+
+      /* Delete identity generators from G if present.  Return immediately if
+         G is the identity group. */
+      removeIdentityGens( G);
+      if ( !G->generator ) {     /* Should we allocate G->base, etc??? */
+         G->baseSize = 0;
+         return;
+      }
+
+      /* Adjoin an inverse image array to each permutation if absent. */
+      adjoinGenInverses( G);
+
+      /* Choose an initial segment of the base so that each generator moves
+         some base point. */
+      initializeBase( G);
+
+      /* Fill in the level of each generator, and make each generator essential
+         at its level and above. */
+      for ( gen = G->generator ; gen ; gen = gen->next ) {
+         gen->level = levelIn( G, gen);
+         MAKE_NOT_ESSENTIAL_ALL( gen);
+         for ( level = 1 ; level <= gen->level ; ++level )
+            MAKE_ESSENTIAL_AT_LEVEL( gen, level);
+      }
+
+      /* Allocate the orbit length, basic orbit, and Schreier vector arrays.
+         Set G->order (previously allocated) to the product of the basic orbit
+         lengths. */
+      G->order->noOfFactors = 0;
+      for ( level = 1 ; level <= G->baseSize ; ++level ) {
+         G->basicOrbLen[level] = 1;
+         G->basicOrbit[level] = allocIntArrayDegree();
+         G->schreierVec[level] = allocPtrArrayDegree();
+      }
+   }
+
+   /* Expand the generator arrays if extra cosets are specified. */
+   if ( sOptions.maxExtraCosets > 0 )
+      expandGenerators( G, sOptions.maxExtraCosets);
+
+   /* Adjoin inverse permutations, and construct (or reconstruct) the
+      Schreier vectors, using all generators at each level. */
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( !gen->invPermutation )
+         adjoinInverseGen( G, gen);
+   for ( level = 1 ; level <= G->baseSize ; ++level ) {
+      constructBasicOrbit( G, level, "AllGensAtLevel" );
+      svecOK[level] = TRUE;
+   }
+
+   /* Find max size for deduction queue, if not specified. */
+   if ( sOptions.maxDeducQueueSize == UNKNOWN )
+      sOptions.maxDeducQueueSize = 2 * degree + options.maxBaseSize + 
+                                   sOptions.maxExtraCosets;
+
+   /* Add generator order and product order relators to relator list. */
+   tempWord.position = allocPtrArrayWordSize();
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      if ( gen->name[0] != '*' ) {
+         pOrder = permOrder( gen);
+         if ( pOrder > 2 && pOrder <= sOptions.genOrderLimit ) {
+            tempWord.length = pOrder;
+            for ( j = 1 ; j <= pOrder ; ++j )
+               tempWord.position[j] = gen;
+            newRel = addRelatorSortedFromWord( G, &tempWord, TRUE, TRUE);
+            ++numberOfRelators;
+            totalRelatorLength += newRel->length;
+            ++numberSelected;
+            totalSelectedLength += newRel->length;
+            maxRelatorLength = MAX ( maxRelatorLength, newRel->length);
+         }
+      }
+   if ( sOptions.prodOrderLimit >= 2 )   
+      for ( gen = G->generator ; gen ; gen = gen->next )
+         if ( gen->name[0] != '*' ) 
+            for ( gen1 = gen->next ; gen1 ; gen1 = gen1->next )
+               if ( (pOrder = prodOrderBounded( gen, gen1, 
+                                              sOptions.prodOrderLimit)) > 0 ) {
+                  tempWord.length = 2 * pOrder;
+                  for ( j = 1 ; j <= pOrder ; ++j ) {
+                     tempWord.position[2*j-1] = gen;
+                     tempWord.position[2*j] = gen1;
+                  }
+                  newRel = addRelatorSortedFromWord( G, &tempWord, TRUE, TRUE);
+                  ++numberOfRelators;
+                  totalRelatorLength += newRel->length;
+                  ++numberSelected;
+                  totalSelectedLength += newRel->length;
+                  maxRelatorLength = MAX ( maxRelatorLength, newRel->length);
+               }
+   freePtrArrayDegree( tempWord.position);
+
+   /* If G has any relators, construct the appropriate occurencesOfGen
+      lists. */
+   for ( rel = G->relator ; rel ; rel = rel->next ) {
+      numberAdded = addOccurencesForRelator( rel, MAX_INT);
+      informNewRelator( rel, numberAdded);
+   }
+
+   /* If extra cosets are specified, construct the data structures required
+      for extra cosets. */
+   if ( sOptions.maxExtraCosets ) {
+      nextCos = (Unsigned *) malloc( sizeof(Unsigned) *
+                                     (sOptions.maxExtraCosets+2) );
+      if ( !nextCos )
+         ERROR( "schreierToddCoxeterSims", "Out of memory.")
+      nextCos -= degree;
+      prevCos = (Unsigned *) malloc( sizeof(Unsigned) *
+                                     (sOptions.maxExtraCosets+2) );
+      if ( !prevCos )
+         ERROR( "schreierToddCoxeterSims", "Out of memory.")
+      prevCos -= degree;
+      ff = (Unsigned *) malloc( sizeof(Unsigned) *
+                                     (sOptions.maxExtraCosets+2) );
+      if ( !ff )
+         ERROR( "schreierToddCoxeterSims", "Out of memory.")
+      ff -= degree;
+      bb = (Unsigned *) malloc( sizeof(Unsigned) *
+                                     (sOptions.maxExtraCosets+2) );
+      if ( !bb )
+         ERROR( "schreierToddCoxeterSims", "Out of memory.")
+      bb -= degree;
+      equivCoset = (Unsigned *) malloc( sizeof(Unsigned) *
+                                     (degree+sOptions.maxExtraCosets+2) );
+      if ( !equivCoset )
+         ERROR( "schreierToddCoxeterSims", "Out of memory.")
+
+   }
+
+
+   /* Now we repeatedly check whether
+                 G^(level)_{alpha_level} = G(level+1)   (*)
+      holds for level = G->baseSize,...,2,1.  However, (*) fails, we add a
+      new strong generator, possibly a new base point, and adjust level.
+      Note the procedure checkStabilizer returns TRUE if and only if (*)
+      holds.  If (*) fails, it sets j, h, and w as follows:
+          L denotes level,
+          s is a Schreier generator of H^(L+1),
+          h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1},
+          If j <= G->baseSize, a_j^h not in Delta_j.
+          If j = G->baseSize+1, h != identity.
+          w is h in word form. */
+   level = G->baseSize;
+   while ( level > 0 ) {
+      if ( !svecOK[level] || sOptions.alwaysRebuildSvec )  {
+         constructBasicOrbit( G, level, "AllGensAtLevel" );
+         svecOK[level] = TRUE;
+      }
+      if ( (sOptions.maxExtraCosets == 0 &&
+            checkStabilizer( G, knownBase, level, &j, &h, &w)) ||
+            (sOptions.maxExtraCosets > 0 &&
+            xCheckStabilizer( G, knownBase, level, &j, &h, &w)) )
+         --level;
+      else {
+         if ( j == G->baseSize+1 ) {
+            G->base[++G->baseSize] = pointMovedBy( h);
+            G->basicOrbLen[G->baseSize] = 1;
+            G->basicOrbit[G->baseSize] = allocIntArrayDegree();
+            G->schreierVec[G->baseSize] = allocPtrArrayDegree();
+         }
+         assignGenName( G, h);
+         addStrongGeneratorNR( G, h);
+         adjoinInverseGen( G, h);
+         w->position[++w->length] = h->invPermutation;
+         newRel = addRelatorSortedFromWord( G, w, TRUE, TRUE);
+         ++numberOfRelators;
+         totalRelatorLength += newRel->length;
+         ++numberSelected;
+         totalSelectedLength += newRel->length;
+         maxRelatorLength = MAX ( maxRelatorLength, newRel->length);
+         numberAdded = addOccurencesForRelator( newRel, MAX_INT);
+         informNewRelator( newRel, numberAdded);
+         for ( k = level + 1 ; k <= j; ++k )
+            svecOK[k] = FALSE;
+         level = j;
+      }
+   }
+
+   informSTCSSummary( G, numberOfRelators, totalRelatorLength,
+                      maxRelatorLength, numberSelected, totalSelectedLength);
+
+   /* Free pseudo-stack storage. */
+   freeBooleanArrayBaseSize( svecOK);
+
+}
+
+
+/*-------------------------- checkStabilizer ------------------------------*/
+
+/* This function checkStabilizer( G, knownBase, level, j, h, w) checks whether
+          G^(level)_{alpha_level} = G(level+1).   (*)
+   It returns true if (*) holds and false otherwise.  If (*) fails, it also
+   sets j and returns a new permutation h and a new word w as follows.
+          L denotes level,
+          s is a Schreier generator of H^(L+1),
+          h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1},
+          If j <= G->baseSize, a_j^h not in Delta_j.
+          If j = G->baseSize+1, h != identity.
+          w is h in word form.
+
+  NOTE: INVERSE PERMUTATIONS MUST EXIST. */
+
+static BOOLEAN checkStabilizer(
+   PermGroup *const G,
+   const UnsignedS *const knownBase,       /* Null-terminated list, or null. */
+   const Unsigned level,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr)
+{
+   Unsigned i, j, pt, prevPt, curPointIndex, curPoint, img, numberAdded;
+   Permutation *genHeader, *gen, *curGen;
+   Unsigned basicOrbLen = G->basicOrbLen[level];
+   UnsignedS *basicOrbit = G->basicOrbit[level];
+   Permutation **schreierVec = G->schreierVec[level];
+   static DeductionQueue *deductionQueue = NULL;
+   WordImagePair wh;
+   Deduction newDeduc, deduc;
+   Relator *newRel;
+   Unsigned selectionPriority = relatorSelection[2], relatorPriority;
+
+   /* First time, allocate the deduction queue. */
+   if ( !deductionQueue ) {
+      deductionQueue = (DeductionQueue *) malloc( sizeof(DeductionQueue) );
+      if ( !deductionQueue )
+         ERROR( "checkStabilizer", "Out of memory.")
+      deductionQueue->deduc = (Deduction *) malloc(
+                             sOptions.maxDeducQueueSize * sizeof(Deduction));
+      if ( !deductionQueue->deduc )
+         ERROR( "checkStabilizer", "Out of memory.")
+   }
+
+   totalTableEntries = tableEntriesFilled = 0;
+   wh.image = allocIntArrayDegree();
+
+   /* Link the generators at specified level, using xNext. */
+   genHeader = linkGensAtLevel( G, level);
+
+   /* Flag all table entries at this level.  Also empty the deduction
+      queue. */
+   MAKE_EMPTY( deductionQueue);
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      for ( i = 1 ; i <= basicOrbLen ; ++i ) {
+         pt = basicOrbit[i];
+         gen->image[pt] |= HB;
+         ++totalTableEntries;
+      }
+
+   /* Now put the subgroup generator entries for H^(level+1) in the table,
+      and enqueue them. */
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( gen->level > level ) {
+         gen->image[basicOrbit[1]] = basicOrbit[1];
+         ++tableEntriesFilled;
+         newDeduc.pnt = newDeduc.img = basicOrbit[1];  newDeduc.gn = gen;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+      }
+
+   /* Now make those definitions corresponding to the Schreier vector. */
+   for ( i = 2 ; i <= basicOrbLen ; ++i ) {
+      pt = basicOrbit[i];
+      gen = schreierVec[pt];
+      prevPt = gen->invImage[pt] & NHB;
+      gen->image[prevPt] = pt;
+      ++tableEntriesFilled;
+      newDeduc.pnt = prevPt;  newDeduc.img = pt;  newDeduc.gn = gen;
+      ATTEMPT_ENQUEUE( deductionQueue, newDeduc);
+      if ( gen->invImage[pt] & HB ) {
+         gen->invImage[pt] = prevPt;
+         ++tableEntriesFilled;
+         newDeduc.pnt = pt;  newDeduc.img = prevPt;
+         newDeduc.gn = gen->invPermutation;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc);
+      }
+   }
+
+   /* Perform initial enumerations till deduction queue is empty. */
+   while ( NOT_EMPTY(deductionQueue) ) {
+      DEQUEUE( deductionQueue , deduc);
+      findConsequences( deductionQueue, level, &deduc);
+   }
+
+   /* Now traverse the table, looking for negative entries. */
+   curPointIndex = 1;
+   curGen = genHeader;
+   for ( curPointIndex = 1 ; curPointIndex <= basicOrbLen &&
+         tableEntriesFilled < totalTableEntries ; ++curPointIndex ) {
+      curPoint = basicOrbit[curPointIndex];
+      for ( curGen = G->generator ; curGen &&
+            tableEntriesFilled < totalTableEntries; curGen = curGen->xNext )
+         if ( curGen->image[curPoint] & HB ) {
+            curGen->image[curPoint] &= NHB;
+            ++tableEntriesFilled;
+            img = curGen->image[curPoint];
+            wh = computeSchreierGen( G, level, curPoint, curGen);
+            if ( !reduce( G, level, &j, &wh) ) {
+               *jPtr = j;
+               *hPtr = allocPermutation();
+               (*hPtr)->degree = G->degree;
+               (*hPtr)->image = wh.image;
+               adjoinInvImage( *hPtr);
+               *wPtr = allocWord();
+               **wPtr = wh.word;
+               resetTable( genHeader, basicOrbLen, basicOrbit);
+               return FALSE;
+            }
+            freeIntArrayDegree( wh.image);
+            newDeduc.pnt = curPoint;  newDeduc.img = img;  newDeduc.gn = curGen;
+            ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+            if ( curGen->invPermutation != curGen || img != curPoint ) {
+               curGen->invImage[img] &= NHB;
+               ++tableEntriesFilled;
+               newDeduc.pnt = img;  newDeduc.img = curPoint;
+               newDeduc.gn = curGen->invPermutation;
+               ATTEMPT_ENQUEUE( deductionQueue, newDeduc);
+            }
+            relatorPriority = relatorSelection[0] - relatorSelection[1] *
+                       (wh.word.length + symmetricWordLength(&wh.word));
+            if ( relatorPriority > selectionPriority ) {
+               newRel = addRelatorSortedFromWord( G, &wh.word, TRUE, TRUE);
+               selectionPriority += relatorSelection[4];
+               ++numberSelected;
+               totalSelectedLength += newRel->length;
+               numberAdded = addOccurencesForRelator( newRel,
+                                     relatorPriority - selectionPriority);
+               informNewRelator( newRel, numberAdded);
+               traceNewRelator( G, level, deductionQueue, newRel);
+            }
+            else
+               selectionPriority -= relatorSelection[5];
+            ++numberOfRelators;
+            totalRelatorLength += wh.word.length;
+            maxRelatorLength = MAX ( maxRelatorLength, wh.word.length);
+            freePtrArrayWordSize( wh.word.position);
+            while ( NOT_EMPTY(deductionQueue) ) {
+               DEQUEUE( deductionQueue , deduc);
+               findConsequences( deductionQueue, level, &deduc);
+            }
+         }
+   }
+
+   freeIntArrayDegree( wh.image);
+   return TRUE;
+
+}
+
+
+
+/*-------------------------- xCheckStabilizer ------------------------------*/
+
+/* This function xCheckStabilizer( G, knownBase, level, j, h, w) checks whether
+          G^(level)_{alpha_level} = G(level+1).   (*)
+   It returns true if (*) holds and false otherwise.  If (*) fails, it also
+   sets j and returns a new permutation h and a new word w as follows.
+          L denotes level,
+          s is a Schreier generator of H^(L+1),
+          h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1},
+          If j <= G->baseSize, a_j^h not in Delta_j.
+          If j = G->baseSize+1, h != identity.
+          w is h in word form.
+
+  NOTE: INVERSE PERMUTATIONS MUST EXIST. */
+
+static BOOLEAN xCheckStabilizer(
+   PermGroup *const G,
+   const UnsignedS *const knownBase,       /* Null-terminated list, or null. */
+   const Unsigned level,
+   Unsigned *jPtr,
+   Permutation **hPtr,
+   Word **wPtr)
+{
+   Unsigned i, j, pt, prevPt, curPointIndex, curPoint, img, numberAdded,
+            newTableEntries;
+   Unsigned degree = G->degree;
+   Permutation *genHeader, *gen, *curGen;
+   Unsigned basicOrbLen = G->basicOrbLen[level];
+   UnsignedS *basicOrbit = G->basicOrbit[level];
+   Permutation **schreierVec = G->schreierVec[level];
+   static DeductionQueue *deductionQueue = NULL;
+   static DefinitionList *defnList = NULL;
+   Deduction newDeduc, deduc;
+   Relator *newRel;
+   Unsigned selectionPriority = relatorSelection[2], relatorPriority;
+
+   /* First time, allocate the deduction queue and definition list. */
+   if ( !deductionQueue ) {
+      deductionQueue = (DeductionQueue *) malloc( sizeof(DeductionQueue) );
+      if ( !deductionQueue )
+         ERROR( "xCheckStabilizer", "Out of memory.")
+      deductionQueue->deduc = (Deduction *) malloc(
+                             sOptions.maxDeducQueueSize * sizeof(Deduction));
+      if ( !deductionQueue->deduc )
+         ERROR( "checkStabilizer", "Out of memory.")
+      defnList = (DefinitionList *) malloc( sizeof(DefinitionList) );
+      if ( !defnList )
+         ERROR( "xCheckStabilizer", "Out of memory.")
+      defnList->coset = (Unsigned *) malloc(
+                             sOptions.maxExtraCosets * sizeof(Unsigned) );
+      if ( !defnList->coset )
+         ERROR( "xCheckStabilizer", "Out of memory.")
+      defnList->image = (Unsigned *) malloc(
+                             sOptions.maxExtraCosets * sizeof(Unsigned) );
+      if ( !defnList->image )
+         ERROR( "xCheckStabilizer", "Out of memory.")
+      defnList->gen = (Permutation **) malloc(
+                             sOptions.maxExtraCosets * sizeof(Permutation *) );
+      if ( !defnList->gen )
+         ERROR( "xCheckStabilizer", "Out of memory.")
+   }
+
+   totalTableEntries = tableEntriesFilled = 0;
+
+   /* Compute number of extra cosets at this level. */
+   extraCosetsAtLevel = (Unsigned) MIN( 
+        (unsigned long) sOptions.maxExtraCosets,
+        sOptions.percentExtraCosets * ((unsigned long) basicOrbLen + 99) / 100 );
+   currentExtraCosets = 0;
+
+   /* Link the generators at specified level, using xNext. */
+   genHeader = linkGensAtLevel( G, level);
+
+   /* Initialize data structures for extra cosets. */
+   firstCos = 0;
+   freeCosHeader = degree + 1;
+   for ( i = 1 ; i <= degree ; ++i )
+      equivCoset[i] = i;
+   for ( i = degree + 1 ; i < degree + extraCosetsAtLevel ; ++i )
+      nextCos[i] = i + 1;
+   nextCos[degree+extraCosetsAtLevel] = 0;
+   for ( i = degree + 1 ; i <= degree + extraCosetsAtLevel ; ++i )
+      bb[i] = i;
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      for ( i = degree + 1 ; i <= degree + extraCosetsAtLevel ; ++i )
+         gen->image[i] = HB;
+   defnList->head = defnList->tail = defnList->size = 0;
+
+   /* Flag all table entries at this level.  Also empty the deduction
+      queue. */
+   MAKE_EMPTY( deductionQueue);
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      for ( i = 1 ; i <= basicOrbLen ; ++i ) {
+         pt = basicOrbit[i];
+         gen->image[pt] |= HB;
+         ++totalTableEntries;
+      }
+
+   /* Now put the subgroup generator entries for H^(level+1) in the table,
+      and enqueue them. */
+   for ( gen = genHeader ; gen ; gen = gen->xNext )
+      if ( gen->level > level ) {
+         gen->image[basicOrbit[1]] = basicOrbit[1];
+         ++tableEntriesFilled;
+         newDeduc.pnt = newDeduc.img = basicOrbit[1];  newDeduc.gn = gen;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc)
+      }
+
+   /* Now make those definitions corresponding to the Schreier vector. */
+   for ( i = 2 ; i <= basicOrbLen ; ++i ) {
+      pt = basicOrbit[i];
+      gen = schreierVec[pt];
+      prevPt = gen->invImage[pt] & NHB;
+      gen->image[prevPt] = pt;
+      ++tableEntriesFilled;
+      newDeduc.pnt = prevPt;  newDeduc.img = pt;  newDeduc.gn = gen;
+      ATTEMPT_ENQUEUE( deductionQueue, newDeduc);
+      if ( gen->invImage[pt] & HB ) {
+         gen->invImage[pt] = prevPt;
+         ++tableEntriesFilled;
+         newDeduc.pnt = pt;  newDeduc.img = prevPt;
+         newDeduc.gn = gen->invPermutation;
+         ATTEMPT_ENQUEUE( deductionQueue, newDeduc);
+      }
+   }
+
+   /* Perform initial enumerations till deduction queue is empty. */
+   while ( NOT_EMPTY(deductionQueue) ) {
+      DEQUEUE( deductionQueue , deduc);
+      xFindConsequences( G, deductionQueue, level, &deduc, genHeader);
+   }
+
+   /* Now traverse the table, looking for entries with high bit set. */
+   curPointIndex = 1;
+   curGen = genHeader;
+   for ( curPointIndex = 1 ; curPointIndex <= basicOrbLen &&
+         tableEntriesFilled < totalTableEntries ; ++curPointIndex ) {
+      curPoint = basicOrbit[curPointIndex];
+      for ( curGen = G->generator ; curGen &&
+            tableEntriesFilled < totalTableEntries; curGen = curGen->xNext )
+         if ( curGen->image[curPoint] & HB ) {
+            if ( currentExtraCosets >= extraCosetsAtLevel ) {
+               newTableEntries = forceCollapse( G, level, genHeader,
+                                    deductionQueue, defnList, jPtr, hPtr, wPtr);
+               if ( newTableEntries == UNKNOWN )
+                  return FALSE;
+               tableEntriesFilled += newTableEntries;
+               relatorPriority = relatorSelection[0] - relatorSelection[1] *
+                              ((*wPtr)->length + symmetricWordLength(*wPtr));
+               if ( relatorPriority > selectionPriority ) {
+                  newRel = addRelatorSortedFromWord( G, *wPtr, TRUE, TRUE);
+                  selectionPriority += relatorSelection[4];
+                  ++numberSelected;
+                  totalSelectedLength += newRel->length;
+                  numberAdded = addOccurencesForRelator( newRel,
+                                        relatorPriority - selectionPriority);
+                  informNewRelator( newRel, numberAdded);
+                  traceNewRelator( G, level, deductionQueue, newRel);
+               }
+               else
+                  selectionPriority -= relatorSelection[5];
+               ++numberOfRelators;
+               totalRelatorLength += (*wPtr)->length;
+               maxRelatorLength = MAX ( maxRelatorLength, (*wPtr)->length);
+               freePtrArrayWordSize( (*wPtr)->position);
+               while ( NOT_EMPTY(deductionQueue) ) {
+                  DEQUEUE( deductionQueue , deduc);
+                  xFindConsequences( G, deductionQueue, level, &deduc, 
+                                     genHeader);
+               }
+            }
+            if ( !(curGen->image[curPoint] & HB) )
+               continue;
+            makeDefinition( curPoint, curGen, deductionQueue, defnList, 
+                            genHeader);
+            ++tableEntriesFilled;
+            while ( NOT_EMPTY(deductionQueue) ) {
+               DEQUEUE( deductionQueue , deduc);
+               xFindConsequences( G, deductionQueue, level, &deduc, genHeader);
+            }
+         }
+   }
+
+   /* DEBUGGING -- REQUIRES FIXING, SINCE THERE SHOULD BE NO EXTRA COSETS HERE. */
+   for ( j = firstCos ; j ; j = nextCos[j] )
+      for ( gen = genHeader ; gen ; gen = gen->xNext )
+         if ( gen->image[j] < degree )
+            gen->invImage[gen->image[j]] = equivCoset[j];
+
+   return TRUE;
+}
+
+
+/*-------------------------- computeSchreierGen ---------------------------*/
+
+/* The function computeSchreierGen( G, level, point, gen) computes the
+   Schreier generator  u_level(point) * gen * bar(u_level(point^gen))^-1
+   for G^(level+1).  Here point must lie in Delta_level and gen must be
+   a generator in G^(level).  The function returns a word (with newly
+   allocated position field), representing the Schreier generator, and a new
+   image array, representing the image of 1,2,...,n under the word.
+
+   NOTE this function takes account of the fact that generating permutations
+   may have the leftmost bit set as a flag. */
+
+WordImagePair computeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen)
+{
+   WordImagePair sGen;
+   Permutation **schreierVec = G->schreierVec[level];
+   Unsigned basePt = G->base[level];
+   Unsigned degree = G->degree;
+   Unsigned i, j, pt;
+   Unsigned *image;
+   Permutation *temp;
+
+   sGen.image = allocIntArrayDegree();
+   sGen.word.position = allocPtrArrayWordSize();
+   sGen.word.length = 0;
+
+   for ( pt = point ; pt != basePt ; pt = schreierVec[pt]->invImage[pt] & NHB)
+      sGen.word.position[++sGen.word.length] = schreierVec[pt];
+   for ( i = 1 , j = sGen.word.length ; i < j ; ++i , --j )
+      EXCHANGE( sGen.word.position[i], sGen.word.position[j] , temp);
+
+   sGen.word.position[++sGen.word.length] = gen;
+
+   for ( pt = gen->image[point] & NHB ; pt != basePt ;
+                                  pt = schreierVec[pt]->invImage[pt] & NHB )
+      sGen.word.position[++sGen.word.length] =
+                        schreierVec[pt]->invPermutation;
+
+   if ( sGen.word.length == 0 )
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         sGen.image[pt] = pt;
+   else {
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         sGen.image[pt] = sGen.word.position[1]->image[pt] & NHB;
+      /* SUBSTITUTE A MODIFIED VERSION OF REPLACE_BY-IMAGE HERE. */
+      for ( i = 2 ; i <= sGen.word.length ; ++i ) {
+         image = sGen.word.position[i]->image;
+         for ( pt = 1 ; pt <= degree ; ++pt )
+            sGen.image[pt] = image[sGen.image[pt]] & NHB;
+      }
+   }
+
+   return sGen;
+}
+
+
+/*-------------------------- xComputeSchreierGen --------------------------*/
+
+/* The function xComputeSchreierGen( G, level, point, gen) is identical to
+   computeSchreierGen( G, level, point, gen) except that it takes account
+   of the possibility of temporary cosets ( > degree) in the table. */
+
+WordImagePair xComputeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen)
+{
+   WordImagePair sGen;
+   Permutation **schreierVec = G->schreierVec[level];
+   Unsigned basePt = G->base[level];
+   Unsigned degree = G->degree;
+   Unsigned i, j, pt;
+   Unsigned *image;
+   Permutation *temp;
+
+   sGen.image = allocIntArrayDegree();
+   sGen.word.position = allocPtrArrayWordSize();
+   sGen.word.length = 0;
+
+   for ( pt = point ; pt != basePt ; pt = equivCoset[schreierVec[pt]->invImage[pt] & NHB] )
+      sGen.word.position[++sGen.word.length] = schreierVec[pt];
+   for ( i = 1 , j = sGen.word.length ; i < j ; ++i , --j )
+      EXCHANGE( sGen.word.position[i], sGen.word.position[j] , temp);
+
+   sGen.word.position[++sGen.word.length] = gen;
+
+   for ( pt = equivCoset[gen->image[point] & NHB] ; pt != basePt ;
+                  pt = equivCoset[schreierVec[pt]->invImage[pt] & NHB] )
+      sGen.word.position[++sGen.word.length] =
+                        schreierVec[pt]->invPermutation;
+
+   if ( sGen.word.length == 0 )
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         sGen.image[pt] = pt;
+   else {
+      for ( pt = 1 ; pt <= degree ; ++pt )
+         sGen.image[pt] = equivCoset[sGen.word.position[1]->image[pt] & NHB];
+      /* SUBSTITUTE A MODIFIED VERSION OF REPLACE_BY-IMAGE HERE. */
+      for ( i = 2 ; i <= sGen.word.length ; ++i ) {
+         image = sGen.word.position[i]->image;
+         for ( pt = 1 ; pt <= degree ; ++pt )
+            sGen.image[pt] = equivCoset[image[sGen.image[pt]] & NHB];
+      }
+   }
+
+   return sGen;
+}
+
+
+/*-------------------------- reduce ---------------------------------------*/
+
+/* The function reduce( G, level, j, wh) takes a word-image pair representing
+   an element of G^(level) and it modifies it by right-multiplying by
+   u_{level+1}^-1(d_{level+1} ... u_{j-1}^-1(d_{level+1}) so that it fixes
+   a_{level+1},...,a_{j-1} and either
+        i)  j <= G->baseSize, and a_j^wh not in Delta_j.
+       ii)  j == G->baseSize+1, and wh != 1.
+      iii)  j == G->baseSize+1, and wh == 1.
+   It returns false in cases (i) and (ii) and true in case (iii). */
+
+BOOLEAN reduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr)
+{
+   Unsigned i, j, pt;
+   register Unsigned *temp1, *temp2;
+   Unsigned *temp3, *temp4, *image;
+
+   for ( j = level+1 ; j <= G->baseSize ; ++j ) {
+      pt = whPtr->image[G->base[j]];
+      if ( !G->schreierVec[j][pt] ) {
+         *jPtr = j;
+         return FALSE;
+      }
+      for ( ; pt != G->base[j] ;
+              pt = G->schreierVec[j][pt]->invImage[pt] & NHB) {
+         whPtr->word.position[++whPtr->word.length] =
+                            G->schreierVec[j][pt]->invPermutation;
+         image = whPtr->word.position[whPtr->word.length]->image;
+         for ( i = 1 ; i <= G->degree ; ++i )
+            whPtr->image[i] = image[whPtr->image[i]] & NHB;
+      }
+   }
+
+   *jPtr = G->baseSize + 1;
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      if ( whPtr->image[pt] != pt )
+         return FALSE;
+
+   return TRUE;
+}
+
+
+
+/*-------------------------- xReduce --------------------------------------*/
+
+/* The function xReduce( G, level, j, wh) is identical to 
+   Reduce( G, level, j, wh) except that it takes account of the possibility
+   of temporary cosets ( > degree) in the table.  */
+
+BOOLEAN xReduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr)
+{
+   Unsigned i, j, pt;
+   Unsigned *image;
+
+   for ( j = level+1 ; j <= G->baseSize ; ++j ) {
+      pt = whPtr->image[G->base[j]];
+      if ( !G->schreierVec[j][pt] ) {
+         *jPtr = j;
+         return FALSE;
+      }
+      for ( ; pt != G->base[j] ;
+              pt = equivCoset[G->schreierVec[j][pt]->invImage[pt] & NHB] ) {
+         whPtr->word.position[++whPtr->word.length] =
+                            G->schreierVec[j][pt]->invPermutation;
+         image = whPtr->word.position[whPtr->word.length]->image;
+         for ( i = 1 ; i <= G->degree ; ++i )
+            whPtr->image[i] = equivCoset[image[whPtr->image[i]] & NHB];
+      }
+   }
+
+   *jPtr = G->baseSize + 1;
+   for ( pt = 1 ; pt <= G->degree ; ++pt )
+      if ( whPtr->image[pt] != pt )
+         return FALSE;
+
+   return TRUE;
+}
+
+
+/*-------------------------- addStrongGeneratorNR -------------------------*/
+
+/* This function may be used to adjoin a new strong generator to a
+   permutation group WITHOUT reconstructing basic orbits.  Also, the
+   essential fields are not modified in any way. */
+
+void addStrongGeneratorNR(
+   PermGroup *G,              /* Group to which strong gen is adjoined. */
+   Permutation *newGen)       /* The new strong generator. It must move
+                                 a base point (not checked). */
+{
+   Unsigned i;
+
+   /* Append inverse image of new strong generator, if absent. */
+   if ( !newGen->invImage )
+      adjoinInvImage( newGen);
+
+   /* Find level of new strong generator. */
+   newGen->level = levelIn( G, newGen);
+
+   /* Add the generator. */
+   if ( G->generator )
+      G->generator->last = newGen;
+   newGen->last = NULL;
+   newGen->next = G->generator;
+   G->generator = newGen;
+
+}
+
+
+
+/*-------------------------- expandGenerators -----------------------------*/
+
+void expandGenerators(
+   PermGroup *const G,
+   Unsigned extraCosets)
+{
+   Unsigned i;
+   Unsigned *oldImage, *oldInvImage;
+   Permutation *gen;
+
+   for ( gen = G->generator ; gen ; gen = gen->next )
+      gen->image[0] = gen->invImage[0] = 0;
+   for ( gen = G->generator ; gen ; gen = gen->next ) {
+      if ( gen->image[0] == 0 ) {
+         oldImage = gen->image;
+         gen->image = malloc( (G->degree+extraCosets+2) * sizeof(Unsigned));
+         if ( !gen->image )
+            ERROR( "expandGenerators", "Out of memory.")
+         for ( i = 1 ; i <= G->degree ; ++i )
+            gen->image[i] = oldImage[i];
+         gen->image[0] = 1;
+         if ( gen->invPermutation )
+            gen->invPermutation->invImage = gen->image;
+         freeIntArrayDegree( oldImage);
+         oldInvImage = gen->invImage;
+         if ( oldImage == oldInvImage )
+           gen->invImage = gen->image;
+         else {
+            gen->invImage = malloc( 
+                              (G->degree+extraCosets+2) * sizeof(Unsigned) );
+            if ( !gen->invImage )
+               ERROR( "expandGenerators", "Out of memory.")
+            for ( i = 1 ; i <= G->degree ; ++i )
+               gen->invImage[i] = oldInvImage[i];
+            gen->invImage[0] = 1;
+            freeIntArrayDegree( oldInvImage);
+         }
+         if ( gen->invPermutation )
+            gen->invPermutation->image = gen->invImage;
+      }
+   }
+}
+
+
+/*-------------------------- prodOrderBounded -----------------------------*/
+
+/* The function prodOrderBounded( perm1, perm2, bound) returns the order of 
+   the product of permutations perm1 and perm2, provided this order is less 
+   than or equal to bound, and returns 0 otherwise. */
+
+unsigned long prodOrderBounded(
+   const Permutation *const perm1,
+   const Permutation *const perm2,
+   const Unsigned bound)
+{
+   unsigned long  orbLen, multiplier, order;
+   Unsigned   pt, basePt, imagePt;
+   char  *found = allocBooleanArrayDegree();
+
+   for (pt = 1; pt <= perm1->degree; ++pt)
+      found[pt] = FALSE;
+
+   for ( basePt = 1, order = 1; basePt <= perm1->degree; ++basePt )
+      if ( ! found[basePt] )  {
+         orbLen = 0;
+         imagePt = basePt;
+         do {
+            ++orbLen;
+            imagePt = perm2->image[perm1->image[imagePt]];
+            found[imagePt] = TRUE;
+         } while ( imagePt != basePt );
+         if (order % orbLen != 0)
+            if ( order <= ULONG_MAX / (multiplier = orbLen / gcd(order,orbLen)) ) {
+               order *= multiplier;
+               if ( order > bound ) {
+                  freeBooleanArrayDegree( found);
+                  return 0;
+               }
+            }
+            else {
+               freeBooleanArrayDegree( found);
+               return 0;
+            }
+      }
+
+   freeBooleanArrayDegree( found);
+   return order;
+}
+
+
+/*-------------------------- informNewRelator -----------------------------*/
+
+void informNewRelator(
+   const Relator *const newRel,
+   Unsigned numberAdded)
+{
+   Unsigned i, symLength;
+   static BOOLEAN firstCall = TRUE;
+
+   if ( firstCall ) {
+      printf("\n");
+      firstCall = FALSE;
+   }
+   printf( "New relator (level %u) (%u):  ", newRel->level, numberAdded);
+   symLength = symmetricLength( newRel);
+   if ( symLength == 1 )
+      if ( newRel->rel[1]->name[0] == '*' )
+         printf( "%s^%u", newRel->rel[1]->invPermutation->name, newRel->length);
+      else
+         printf( "%s^%u", newRel->rel[1]->name, newRel->length);
+   else {
+      if ( symLength < newRel->length )
+         printf( "(" );
+      for ( i = 1 ; i <= symLength ; ++i ) {
+         if ( newRel->rel[i]->name[0] != '*' )
+            printf( "%s", newRel->rel[i]->name);
+         else
+            printf( "%s%s", newRel->rel[i]->invPermutation->name, "^-1");
+         if ( i < symLength )
+            printf( "*");
+      }
+      if ( symLength < newRel->length )
+         printf( ")^%u", newRel->length/symLength );
+   }
+   printf( "\n");
+}
+
+
+/*-------------------------- informSTCSSummary -----------------------------*/
+
+void informSTCSSummary(
+   const PermGroup *const G,
+   const unsigned long numberOfRelators,
+   const unsigned long totalRelatorLength,
+   const Unsigned maxRelatorLength,
+   const unsigned long numberSelected,
+   const unsigned long totalSelectedLength)
+{
+   Unsigned i, intQuotient, decQuotient, numberOfGens, involGenCount;
+
+   /* Print the group order. */
+   printf( "\n\nSchreier-Todd-Coxeter-Sims procedure complete.");
+   printf( "\nGroup %s has order ", G->name);
+   if ( G->order->noOfFactors == 0 )
+      printf( "%d", 1);
+   else
+      for ( i = 0 ; i < G->order->noOfFactors ; ++i ) {
+         if ( i > 0 )
+            printf( " * ");
+         printf( "%u", G->order->prime[i]);
+         if ( G->order->exponent[i] > 1 )
+            printf( "^%u", G->order->exponent[i]);
+      }
+   printf( "\n");
+
+   /* Print the number of generators. */
+   numberOfGens = genCount( G, &involGenCount);
+   printf( "\nNumber of generators: %u\n", numberOfGens);
+   printf(   "Number involutory:    %u\n", involGenCount);
+
+   /* Print the number of relators and total, maximum, and average relator
+      length. */
+   printf( "\nNumber of relators:   %lu\n", numberOfRelators);
+   printf(   "Total relator length: %lu\n", totalRelatorLength);
+   printf(   "Max relator length:   %u\n", maxRelatorLength);
+   intQuotient  = (Unsigned)(totalRelatorLength / numberOfRelators);
+   decQuotient = 10 * (totalRelatorLength - intQuotient * numberOfRelators);
+   printf(   "Mean relator length:  %u.%1u\n", intQuotient,
+             (unsigned)(decQuotient / numberOfRelators) );
+   printf( "\nNumber selected:      %lu\n", numberSelected);
+   printf(   "Total select length:  %lu\n", totalSelectedLength);
+   intQuotient  = (Unsigned)(totalSelectedLength / numberSelected);
+   decQuotient = 10 * (totalSelectedLength - intQuotient * numberSelected);
+   printf(   "Mean select length:   %u.%1u\n", intQuotient,
+             (unsigned)(decQuotient / numberSelected) );
+}
+
diff --git a/src/leon/src/stcs.h b/src/leon/src/stcs.h
new file mode 100644
index 0000000..488a258
--- /dev/null
+++ b/src/leon/src/stcs.h
@@ -0,0 +1,102 @@
+#ifndef STCS
+#define STCS
+
+extern WordImagePair computeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen);
+
+BOOLEAN reduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr);
+
+void informNewRelator(
+   const Relator *const newRel,
+   Unsigned numberAdded);
+
+void informSTCSSummary(
+   const PermGroup *const G,
+   const unsigned long numberOfRelators,
+   const unsigned long totalRelatorLength,
+   const Unsigned maxRelatorLength,
+   const unsigned long numberSelected,
+   const unsigned long totalSelectedLength);
+
+void expandGenerators(
+   PermGroup *const G,
+   Unsigned maxExtraCosets);
+
+unsigned long prodOrderBounded(
+   const Permutation *const perm1,
+   const Permutation *const perm2,
+   const Unsigned bound);
+
+
+void schreierToddCoxeterSims(
+   PermGroup *const G,
+   const UnsignedS *const knownBase)       /* Null-terminated list, or null. */
+;
+
+extern WordImagePair computeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen)
+;
+
+extern WordImagePair xComputeSchreierGen(
+   const PermGroup *const G,
+   const Unsigned level,
+   const Unsigned point,
+   const Permutation *const gen)
+;
+
+extern BOOLEAN reduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr)
+;
+
+extern BOOLEAN xReduce(
+   const PermGroup *const G,
+   const Unsigned level,
+   Unsigned *const jPtr,
+   WordImagePair *const whPtr)
+;
+
+extern void addStrongGeneratorNR(
+   PermGroup *G,              /* Group to which strong gen is adjoined. */
+   Permutation *newGen)       /* The new strong generator. It must move
+                                 a base point (not checked). */
+;
+
+extern void expandGenerators(
+   PermGroup *const G,
+   Unsigned extraCosets)
+;
+
+extern unsigned long prodOrderBounded(
+   const Permutation *const perm1,
+   const Permutation *const perm2,
+   const Unsigned bound)
+;
+
+extern void informNewRelator(
+   const Relator *const newRel,
+   Unsigned numberAdded)
+;
+
+extern void informSTCSSummary(
+   const PermGroup *const G,
+   const unsigned long numberOfRelators,
+   const unsigned long totalRelatorLength,
+   const Unsigned maxRelatorLength,
+   const unsigned long numberSelected,
+   const unsigned long totalSelectedLength)
+;
+
+#endif
diff --git a/src/leon/src/storage.c b/src/leon/src/storage.c
new file mode 100644
index 0000000..dcf508e
--- /dev/null
+++ b/src/leon/src/storage.c
@@ -0,0 +1,557 @@
+/* File storage.c.  Contains functions to allocate and free memory.
+   For certain commonly used sizes, memory is never actually freed; rather
+   a linked list of allocated but currently unused segments of those sizes
+   are maintained, and new allocations are taken from these linked lists
+   when possible.  Prior to any allocations, the procedure
+   InitializeStorageManager must be invoked; this merely informs the
+   routines of the degree of the group.  The memory allocation functions
+   are as follows; for each, there is a corresponding function to free
+   memory.  All allocation functions return a pointer to the memory
+   allocated; an allocation failure terminates the program.
+
+        Function                Struct size or            Array size
+                              array component size
+
+      allocIntArrayBaseSize      sizeof(Int)              options.maxBaseSize
+      allocIntArrayDegree        sizeof(Int)              degree+2
+      allocBooleanArrayDegree    sizeof(char)             degree+2
+      allocPtrArrayWordSize      sizeof(Permutation *)    options.maxWordLength
+      allocPtrArrayBaseSize      sizeof(Permutation *)    options.maxBaseSize
+      allocPtrArrayDegree        sizeof(Permutation *)    degree+2
+      allocPermutation           sizeof(Permutation)
+      allocPermGroup             sizeof(PermGroup)
+      allocPartitionStack        sizeof(PartitionStack)
+      allocPointSet              sizeof(PointSet)
+      allocWord                  sizeof(Word) */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "group.h"
+#include "errmesg.h"
+
+extern GroupOptions options;
+
+CHECK( storag)
+
+static Unsigned degree;
+
+/*-------------------------- initializeStorageManager ---------------------*/
+
+void initializeStorageManager( Unsigned degreeOfGroup)
+{
+   degree = degreeOfGroup;
+}
+
+
+/*-------------------------- allocIntArrayDegree --------------------------*/
+
+UnsignedS *allocIntArrayDegree( void)
+{
+   UnsignedS *address;
+
+#ifdef HIGH_MEM_OPTION
+      address = (UnsignedS *) highMemMalloc( (degree+2) * sizeof(UnsignedS) );
+#else
+      address = (UnsignedS *) malloc( (degree+2) * sizeof(UnsignedS) );
+#endif
+      if ( address == NULL )
+         ERROR( "allocIntArrayDegree", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeIntArrayDegree ---------------------------*/
+
+void freeIntArrayDegree( UnsignedS *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocBooleanArrayDegree ----------------------*/
+
+char *allocBooleanArrayDegree( void)
+{
+   char *address;
+
+      address = (char *) malloc( (degree+2) * sizeof(char) );
+      if ( address == NULL )
+         ERROR( "allocBooleanArrayDegree", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeBooleanArrayDegree -----------------------*/
+
+void freeBooleanArrayDegree( char *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocBooleanArrayBaseSize ----------------------*/
+
+char *allocBooleanArrayBaseSize( void)
+{
+   char *address;
+
+      address = (char *) malloc( (options.maxBaseSize+2) * sizeof(char) );
+      if ( address == NULL )
+         ERROR( "allocBooleanArrayBaseSize", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeBooleanArrayBaseSize -----------------------*/
+
+void freeBooleanArrayBaseSize( char *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPtrArrayDegree --------------------------*/
+
+void *allocPtrArrayDegree( void)
+{
+   void *address;
+
+#ifdef HIGH_MEM_OPTION
+   address = highMemMalloc( (degree+2) * sizeof (void *) );
+#else
+   address = malloc( (degree+2) * sizeof (void *) );
+#endif
+   if ( address == NULL )
+         ERROR( "allocPtrArrayDegree", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePtrArrayDegree ---------------------------*/
+
+void freePtrArrayDegree( void *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPtrArrayWordSize ------------------------*/
+
+void *allocPtrArrayWordSize( void)
+{
+   void *address;
+
+   address = malloc( (options.maxWordLength+2) * sizeof (void *) );
+   if ( address == NULL )
+      ERROR( "allocPtrArrayWordSize", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePtrArrayWordSize -------------------------*/
+
+void freePtrArrayWordSize( void *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPtrArrayBaseSize ------------------------*/
+
+void *allocPtrArrayBaseSize( void)
+{
+   void *address;
+
+   address = malloc( (options.maxBaseSize+2) * sizeof (void *) );
+   if ( address == NULL )
+      ERROR( "allocPtrArrayBaseSize", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePtrArrayBaseSize -------------------------*/
+
+void freePtrArrayBaseSize( void *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocIntArrayBaseSize ------------------------*/
+
+UnsignedS *allocIntArrayBaseSize( void)
+{
+   UnsignedS *address;
+
+   address = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(UnsignedS) );
+   if ( address == NULL )
+      ERROR( "allocIntArrayBaseSize", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeIntArrayBaseSize -------------------------*/
+
+void freeIntArrayBaseSize( UnsignedS *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocLongArrayBaseSize ------------------------*/
+
+unsigned long *allocLongArrayBaseSize( void)
+{
+   unsigned long *address;
+
+   address = (unsigned long *) malloc( (options.maxBaseSize+2) * sizeof(unsigned long) );
+   if ( address == NULL )
+      ERROR( "allocLongArrayBaseSize", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeLongArrayBaseSize -------------------------*/
+
+void freeLongArrayBaseSize( unsigned long *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPermutation -----------------------------*/
+
+Permutation *allocPermutation( void)
+{
+   Permutation *address;
+   Unsigned essentialArraySize;
+
+   address = (Permutation *) malloc( sizeof(Permutation) );
+   if ( address == NULL )
+      ERROR( "allocPermutation", "Out of memory");
+
+   address->name[0] = '\0';
+   address->image = NULL;
+   address->invImage = NULL;
+   address->invPermutation = NULL;
+   address->word = NULL;
+   address->occurHeader = NULL;
+   essentialArraySize = (options.maxBaseSize+1) / 32 + 1;
+   address->essential = (unsigned long *) 
+                        malloc( essentialArraySize * sizeof(unsigned long) );
+   if ( address->essential == NULL )
+      ERROR( "allocPermutation", "Out of memory");
+   return address;
+}
+
+/*-------------------------- freePermutation ------------------------------*/
+
+void freePermutation( Permutation *address)
+{
+   free(address->essential);
+   free(address);
+}
+
+
+/*-------------------------- allocPermGroup -------------------------------*/
+
+PermGroup *allocPermGroup( void)
+{
+   PermGroup *address;
+
+   address = (PermGroup *) malloc( sizeof(PermGroup) );
+   if ( address == NULL )
+      ERROR( "allocPermGroup", "Out of memory");
+
+   address->order = NULL;
+   address->base = NULL;
+   address->basicOrbLen = NULL;
+   address->basicOrbit = NULL;
+   address->completeOrbit = NULL;
+   address->orbNumberOfPt = NULL;
+   address->startOfOrbitNo = NULL;
+   address->schreierVec = NULL;
+   address->generator = NULL;
+   address->omega = NULL;
+   address->invOmega = NULL;
+   address->relator = NULL;
+   return address;
+}
+
+
+/*-------------------------- freePermGroup --------------------------------*/
+
+void freePermGroup( PermGroup *address)
+{
+   Permutation *current;
+
+   if (address->order)
+      free(address->order);
+   while ( address->generator ) {
+      current = address->generator;
+      address->generator = current->next;
+      freePermutation(current);
+   }
+   freeIntArrayBaseSize(address->base);
+   freeIntArrayBaseSize(address->basicOrbLen);
+   if (address->basicOrbit)
+     freePtrArrayBaseSize(address->basicOrbit);
+   if (address->schreierVec)
+     freePtrArrayBaseSize(address->schreierVec);
+   free(address);
+}
+
+
+/*-------------------------- allocPartition -------------------------------*/
+
+Partition *allocPartition( void)
+{
+   Partition *address;
+
+   address = (Partition *) malloc( sizeof(Partition) );
+   if ( address == NULL )
+      ERROR( "allocPartition", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePartition ---------------------------*/
+
+void freePartition( Partition *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPartitionStack --------------------------*/
+
+PartitionStack *allocPartitionStack( void)
+{
+   PartitionStack *address;
+
+   address = (PartitionStack *) malloc( sizeof(PartitionStack) );
+   if ( address == NULL )
+      ERROR( "allocPartitionStack", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePartitionStack ---------------------------*/
+
+void freePartitionStack( PartitionStack *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocRBase -----------------------------------*/
+
+RBase *allocRBase( void)
+{
+   RBase *address;
+
+   address = (RBase *) malloc( sizeof(RBase) );
+   if ( address == NULL )
+      ERROR( "allocRBase", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeRBase ------------------------------------*/
+
+void freeRBase( RBase *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocRPriorityQueue --------------------------*/
+
+RPriorityQueue *allocRPriorityQueue( void)
+{
+   RPriorityQueue *address;
+
+   address = (RPriorityQueue *) malloc( sizeof(RPriorityQueue) );
+   if ( address == NULL )
+      ERROR( "allocRPriorityQueue", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeRPriorityQueue ---------------------------*/
+
+void freeRPriorityQueue( RPriorityQueue *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocPointSet --------------------------------*/
+
+PointSet *allocPointSet( void)
+{
+   PointSet *address;
+
+   address = (PointSet *) malloc( sizeof(PointSet) );
+   if ( address == NULL )
+      ERROR( "allocPointSet", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freePointSet ---------------------------------*/
+
+void freePointSet( PointSet *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocFactoredInt -----------------------------*/
+
+FactoredInt *allocFactoredInt( void)
+{
+   FactoredInt *address;
+
+   address = (FactoredInt *) malloc( sizeof(FactoredInt) );
+   if ( address == NULL )
+      ERROR( "allocFactoredInt", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeFactoredInt ------------------------------*/
+
+void freeFactoredInt( FactoredInt *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocWord ------------------------------------*/
+
+Word *allocWord( void)
+{
+   Word *address;
+
+   address = (Word *) malloc( sizeof(Word) );
+   if ( address == NULL )
+      ERROR( "allocWord", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeWord -------------------------------------*/
+
+void freeWord( Word *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocRefinementArrayDegree -------------------*/
+
+Refinement *allocRefinementArrayDegree( void)
+{
+   Refinement *address;
+
+   address = (Refinement *) malloc( (degree+2) * sizeof(Refinement) );
+   if ( address == NULL )
+      ERROR( "allocRefinementArrayDegree", "Out of memory");
+
+   return address;
+}
+
+
+/*-------------------------- freeRefinementArrayDegree --------------------*/
+
+void freeRefinementArrayDegree( Refinement *address)
+{
+   free(address);
+}
+
+/*-------------------------- allocRelator ---------------------------------*/
+
+Relator *allocRelator( void)
+{
+   Relator *address;
+
+   address = (Relator *) malloc( sizeof(Relator) );
+   if ( address == NULL )
+      ERROR( "allocRelator", "Out of memory");
+
+   address->length = 0;
+   address->rel = NULL;
+   address->fRel = NULL;
+   address->bRel = NULL;
+   return address;
+}
+
+/*-------------------------- freeRelator ----------------------------------*/
+
+void freeRelator( Relator *address)
+{
+   free(address);
+}
+
+
+/*-------------------------- allocOccurenceOfGen --------------------------*/
+
+OccurenceOfGen *allocOccurenceOfGen( void)
+{
+   OccurenceOfGen *address;
+
+   address = (OccurenceOfGen *) malloc( sizeof(OccurenceOfGen) );
+   if ( address == NULL )
+      ERROR( "allocOccurenceOfGen", "Out of memory");
+
+   return address;
+}
+
+/*-------------------------- freeOccurenceOfGen ---------------------------*/
+
+void freeOccurenceOfGen( OccurenceOfGen *address)
+{
+   free(address);
+}
+
+      
+/*-------------------------- allocField -------------------------------*/
+
+Field *allocField( void)
+{
+   Field *address;
+
+   address = (Field *) malloc( sizeof(Field) );
+   if ( address == NULL )
+      ERROR( "allocField", "Out of memory");
+
+   address->sum = NULL;
+   address->dif = NULL;
+   address->prod = NULL;
+   address->inv = NULL;
+   return address;
+}
+
+
+/*-------------------------- freeField ---------------------------*/
+
+void freeField( Field *address)
+{
+   free(address);
+}
diff --git a/src/leon/src/storage.h b/src/leon/src/storage.h
new file mode 100644
index 0000000..ce028a2
--- /dev/null
+++ b/src/leon/src/storage.h
@@ -0,0 +1,133 @@
+#ifndef STORAGE
+#define STORAGE
+
+extern void initializeStorageManager( Unsigned degreeOfGroup)
+;
+
+extern UnsignedS *allocIntArrayDegree( void)
+;
+
+extern void freeIntArrayDegree( UnsignedS *address)
+;
+
+extern char *allocBooleanArrayDegree( void)
+;
+
+extern void freeBooleanArrayDegree( char *address)
+;
+
+extern char *allocBooleanArrayBaseSize( void)
+;
+
+extern void freeBooleanArrayBaseSize( char *address)
+;
+
+extern void *allocPtrArrayDegree( void)
+;
+
+extern void freePtrArrayDegree( void *address)
+;
+
+extern void *allocPtrArrayWordSize( void)
+;
+
+extern void freePtrArrayWordSize( void *address)
+;
+
+extern void *allocPtrArrayBaseSize( void)
+;
+
+extern void freePtrArrayBaseSize( void *address)
+;
+
+extern UnsignedS *allocIntArrayBaseSize( void)
+;
+
+extern void freeIntArrayBaseSize( UnsignedS *address)
+;
+
+extern unsigned long *allocLongArrayBaseSize( void)
+;
+
+extern void freeLongArrayBaseSize( unsigned long *address)
+;
+
+extern Permutation *allocPermutation( void)
+;
+
+extern void freePermutation( Permutation *address)
+;
+
+extern PermGroup *allocPermGroup( void)
+;
+
+extern void freePermGroup( PermGroup *address)
+;
+
+extern Partition *allocPartition( void)
+;
+
+extern void freePartition( Partition *address)
+;
+
+extern PartitionStack *allocPartitionStack( void)
+;
+
+extern void freePartitionStack( PartitionStack *address)
+;
+
+extern RBase *allocRBase( void)
+;
+
+extern void freeRBase( RBase *address)
+;
+
+extern RPriorityQueue *allocRPriorityQueue( void)
+;
+
+extern void freeRPriorityQueue( RPriorityQueue *address)
+;
+
+extern PointSet *allocPointSet( void)
+;
+
+extern void freePointSet( PointSet *address)
+;
+
+extern FactoredInt *allocFactoredInt( void)
+;
+
+extern void freeFactoredInt( FactoredInt *address)
+;
+
+extern Word *allocWord( void)
+;
+
+extern void freeWord( Word *address)
+;
+
+extern Refinement *allocRefinementArrayDegree( void)
+;
+
+extern void freeRefinementArrayDegree( Refinement *address)
+;
+
+extern Relator *allocRelator( void)
+;
+
+extern void freeRelator( Relator *address)
+;
+
+extern OccurenceOfGen *allocOccurenceOfGen( void)
+;
+
+extern void freeOccurenceOfGen( OccurenceOfGen *address)
+;
+
+extern Field *allocField( void)
+;
+
+extern void freeField( Field *address)
+;
+
+#endif
diff --git a/src/leon/src/swt.h b/src/leon/src/swt.h
new file mode 100644
index 0000000..52f4636
--- /dev/null
+++ b/src/leon/src/swt.h
@@ -0,0 +1,72 @@
+#undef WEIGHT
+#undef ADD
+#if MAXLEN == 32
+  #define WEIGHT   onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16]
+  #define ADD(i)   cw1 ^= basis1[i];
+#elif MAXLEN == 48
+  #define WEIGHT   onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff]
+  #define ADD(i)   cw1 ^= basis1[i];  cw2 ^= basis2[i];
+#elif MAXLEN == 64
+  #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                             onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16]
+  #define ADD(i)   cw1 ^= basis1[i];  cw2 ^= basis2[i];
+#elif MAXLEN == 80
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i];
+#elif MAXLEN == 96
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i];
+#elif MAXLEN == 112
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \
+                              onesCount[cw4 & 0x0000ffff]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i]; \
+                   cw4 ^= basis4[i];
+#elif MAXLEN == 128
+    #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                             onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                             onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \
+                             onesCount[cw4 & 0x0000ffff] + onesCount[cw4 >> 16]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i]; \
+                   cw4 ^= basis4[i];
+#endif
+
+         for ( loopIndex = 0 ; loopIndex <= lastPass ; ++loopIndex ) {
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(0)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(1)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(0)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(2)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(0)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(1)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         ADD(0)
+         ++freq[curWt=WEIGHT];
+         SAVE
+         temp = loopIndex + 1;
+         m = 3;
+         while ( (temp & 1) == 0 ) {
+            ++m;
+            temp >>= 1;
+         }
+         ADD(m)
+      }
+#undef MAXLEN
diff --git a/src/leon/src/token.c b/src/leon/src/token.c
new file mode 100644
index 0000000..ec3585a
--- /dev/null
+++ b/src/leon/src/token.c
@@ -0,0 +1,310 @@
+/* File token.c. */
+
+#define  COMMENT_CHAR  '\"'
+#define  ALT_COMMENT_CHAR '&'
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "group.h"
+#include "groupio.h"
+#include "errmesg.h"
+
+CHECK( token)
+
+
+static FILE *inFile;              /* File to read from. */
+static Unsigned lineNo;           /* Line number in file. */
+static BOOLEAN bufferNonempty;    /* True if a token has been read but not
+                                     returned. */
+static Token tokenBuffer;         /* The token read but not returned. */
+static BOOLEAN endOfFileReached;  /* True if end of file has been reached. */
+
+static const char *inString;      /* String to read from. */
+static Unsigned stringPosition;   /* First position in string not read. */
+static BOOLEAN sBufferNonempty;   /* True if a token has been read from string
+                                     but not returned. */
+static Token sTokenBuffer;        /* The token read from string but not
+                                     returned. */
+static BOOLEAN endOfStringReached; /* True if end of string has been reached. */
+
+static recognizeKeywordFlag = TRUE; /* If false, a colon is treated as an
+                                       ordinary character.  Keywords are not
+                                       recognized. */
+
+
+/*-------------------------- lowerCase -----------------------------------*/
+
+/* The function lowerCase(s) converts the string s to lower case and returns
+   a pointer to s. */
+
+char *lowerCase(
+   char *s)
+{
+   Unsigned i;
+   for ( i = 0 ; i < strlen(s) ; ++i )
+#ifdef EBCDIC
+      s[i] = ( s[i] >= 'A' && s[i] <= 'I' ||
+               s[i] >= 'J' && s[i] <= 'R' ||
+               s[i] >= 'S' && s[i] <= 'Z' ) ? (s[i] + 'a' - 'A') : s[i];
+#else
+      s[i] = (s[i] >= 'A' && s[i] <= 'Z') ? (s[i] + 'a' - 'A') : s[i];
+#endif
+   return s;
+}
+
+
+/*-------------------------- setInputFile --------------------------------*/
+
+void setInputFile(
+   FILE *newFile)
+{
+   inFile = newFile;
+   lineNo = 1;
+   endOfFileReached = FALSE;
+   bufferNonempty = FALSE;
+}
+
+
+/*-------------------------- setInputString ------------------------------*/
+
+void setInputString(
+   const char *const newString)
+{
+   inString = newString;
+   stringPosition = 0;
+   endOfStringReached = FALSE;
+   sBufferNonempty = FALSE;
+}
+
+
+/*-------------------------- discardThruChar --------------------------------*/
+
+static void discardThruChar(
+   Unsigned stopDiscard,
+   Unsigned *lineNoPtr )
+{
+   Unsigned ch;
+   do {
+      ch = getc(inFile);
+      if ( ch == '\n' )
+         ++(*lineNoPtr);
+   } while ( ch != '\n' && ch != stopDiscard);
+}
+
+
+/*-------------------------- readToken -----------------------------------*/
+
+Token readToken( void)
+{
+   Token token;
+   int  ch;
+   Unsigned   lastPos;
+   char  buffer[100];
+
+   /* If a token has been read but not returned, return that token and exit. */
+   if ( bufferNonempty ) {
+      bufferNonempty = FALSE;
+      return tokenBuffer;
+   }
+
+   /* If end of file has already been reached, return eof as token type. */
+   if ( endOfFileReached ) {
+      token.type = eof;
+      return token;
+   }
+
+   /* Skip over white space, but keep track of line numbers in the file. */
+   while ( (ch = getc(inFile)) == ' ' || ch == '\t' ||
+           (ch == '\n' ? (++lineNo,TRUE) : FALSE)   ||
+           ( (ch == COMMENT_CHAR || ch == ALT_COMMENT_CHAR) ?
+                       (discardThruChar( ch, &lineNo),TRUE) : FALSE )  )
+      ;
+
+   /* This code handles keyword and identifier tokens. */
+   if ( isalpha(ch) || ch == '_' ) {
+      buffer[0] = ch;
+      lastPos = 0;
+      while ( (ch = getc(inFile)) , isalpha(ch) || isdigit(ch) || ch == '_' )
+         if ( lastPos < MAX_TOKEN_LENGTH-1 )
+            buffer[++lastPos] = ch;
+         else
+            ERROR1i( "readToken", "Token length exceed maximum of ",
+                                MAX_TOKEN_LENGTH, ".")
+      token.type = ( ch == ':' && recognizeKeywordFlag ) ? keyword : identifier;
+      buffer[lastPos+1] = '\0';
+      if ( token.type == keyword )
+         strcpy( token.value.keyValue, buffer);
+      else
+         strcpy( token.value.identValue, buffer);
+      if ( token.type == identifier)
+         if ( ch != EOF )
+            ungetc( ch, inFile);
+         else
+            endOfFileReached = TRUE;
+   }
+
+   /* This code handles integer tokens. */
+   else if ( isdigit(ch) ) {
+      ungetc( ch, inFile);
+      if ( fscanf( inFile, SCANF_Int_FORMAT, &token.value.intValue) == 1 )
+         token.type = integer;
+      else
+         ERROR( "readToken", "Error in reading integer token.")
+   }
+
+   /* This code handles end-of-file tokens. */
+   else if ( ch == EOF ) {
+       token.type = eof;
+       endOfFileReached = TRUE;
+   }
+
+   /* This code handles single-character tokens. */
+   else switch ( ch ) {
+      case '(': token.type = leftParen; break;
+      case ')': token.type = rightParen; break;
+      case '[': token.type = leftBracket; break;
+      case ']': token.type = rightBracket; break;
+      case '<': token.type = leftAngle; break;
+      case '>': token.type = rightAngle; break;
+      case ';': token.type = semicolon; break;
+      case '=': token.type = equal; break;
+      case '*': token.type = asterisk; break;
+      case '^': token.type = caret; break;
+      case ',': token.type = comma; break;
+      case '/': token.type = slash; break;
+      case '.': token.type = period; break;
+      case ':': token.type = colon; break;
+      default:  token.type = other; token.value.charValue = ch;
+   }
+
+   return token;
+}
+
+
+/*-------------------------- nkReadToken ---------------------------------*/
+
+Token nkReadToken(void)
+{
+   Token token;
+
+   recognizeKeywordFlag = FALSE;
+   token = readToken();
+   if ( token.type == identifier )
+      lowerCase( token.value.identValue);
+   recognizeKeywordFlag = TRUE;
+   return token;
+}
+
+
+/*-------------------------- sReadToken ----------------------------------*/
+
+Token sReadToken( void)
+{
+   Token token;
+   char  ch;
+   Unsigned lastPos;
+   char  sBuffer[100];
+
+   /* If a token has been read but not returned, return that token and exit. */
+   if ( sBufferNonempty ) {
+      sBufferNonempty = FALSE;
+      return sTokenBuffer;
+   }
+
+   /* If end of string has already been reached, return eof as token type. */
+   if ( endOfStringReached ) {
+      token.type = eof;
+      return token;
+   }
+
+   /* Skip over white space, but keep track of line numbers in the file. */
+   while ( (ch = inString[stringPosition++]) == ' ' || ch == '\t' ||
+            ch == '\n' )
+      ;
+
+   /* This code handles keyword and identifier tokens. */
+   if ( isalpha(ch) || ch == '_' ) {
+      sBuffer[0] = ch;
+      lastPos = 0;
+      while ( (ch = inString[stringPosition++]) , isalpha(ch) || isdigit(ch) ||
+                                                  ch == '_' )
+         if ( lastPos < MAX_TOKEN_LENGTH-1 )
+            sBuffer[++lastPos] = ch;
+         else
+            ERROR1i( "sReadToken", "Token length exceed maximum of ",
+                                MAX_TOKEN_LENGTH, ".")
+      token.type = ( ch == ':' && recognizeKeywordFlag ) ? keyword : identifier;
+      sBuffer[lastPos+1] = '\0';
+      if ( token.type == keyword )
+         strcpy( token.value.keyValue, sBuffer);
+      else
+         strcpy( token.value.identValue, sBuffer);
+      if ( token.type == identifier)
+         if ( ch != '\0' )
+            --stringPosition;
+         else
+            endOfStringReached = TRUE;
+   }
+
+   /* This code handles integer tokens. */
+   else if ( isdigit(ch) ) {
+      --stringPosition;
+      if ( sscanf( inString+stringPosition, SCANF_Int_FORMAT,
+                   &token.value.intValue) == 1 ) {
+         token.type = integer;
+         while ( isdigit( inString[++stringPosition]) )
+            ;
+      }
+      else
+         ERROR( "sReadToken", "Error in reading integer token.")
+   }
+
+   /* This code handles end-of-string tokens. */
+   else if ( ch == '\0' ) {
+       token.type = eof;
+       endOfStringReached = TRUE;
+   }
+
+   /* This code handles single-character tokens. */
+   else switch ( ch ) {
+      case '(': token.type = leftParen; break;
+      case ')': token.type = rightParen; break;
+      case '[': token.type = leftBracket; break;
+      case ']': token.type = rightBracket; break;
+      case '<': token.type = leftAngle; break;
+      case '>': token.type = rightAngle; break;
+      case ';': token.type = semicolon; break;
+      case '=': token.type = equal; break;
+      case '*': token.type = asterisk; break;
+      case '^': token.type = caret; break;
+      case ',': token.type = comma; break;
+      case '/': token.type = slash; break;
+      case '.': token.type = period; break;
+      case ':': token.type = colon; break;
+      default:  token.type = other; token.value.charValue = ch;
+   }
+
+   return token;
+}
+
+
+/*-------------------------- unreadToken ---------------------------------*/
+
+void unreadToken(
+   Token tokenToUnread)
+{
+   tokenBuffer = tokenToUnread;
+   bufferNonempty = TRUE;
+}
+
+
+/*-------------------------- sUnreadToken --------------------------------*/
+
+void sUnreadToken(
+   Token tokenToUnread)
+{
+   sTokenBuffer = tokenToUnread;
+   sBufferNonempty = TRUE;
+}
diff --git a/src/leon/src/token.h b/src/leon/src/token.h
new file mode 100644
index 0000000..661b219
--- /dev/null
+++ b/src/leon/src/token.h
@@ -0,0 +1,33 @@
+#ifndef TOKEN
+#define TOKEN
+
+extern char *lowerCase(
+   char *s)
+;
+
+extern void setInputFile(
+   FILE *newFile)
+;
+
+extern void setInputString(
+   const char *const newString)
+;
+
+extern Token readToken( void)
+;
+
+extern Token nkReadToken(void)
+;
+
+extern Token sReadToken( void)
+;
+
+extern void unreadToken(
+   Token tokenToUnread)
+;
+
+extern void sUnreadToken(
+   Token tokenToUnread)
+;
+
+#endif
diff --git a/src/leon/src/util.c b/src/leon/src/util.c
new file mode 100644
index 0000000..b4d45a7
--- /dev/null
+++ b/src/leon/src/util.c
@@ -0,0 +1,109 @@
+/* File util.h.  Utility routines for use with partition backtrack
+   algorithms. */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "group.h"
+
+CHECK( util)
+
+extern GroupOptions options;
+
+
+/*-------------------------- parseLibraryName ----------------------------*/
+
+void parseLibraryName(
+   const char *const inputString,
+   const char *const prefix,
+   const char *const suffix,
+   char *const libraryFileName,
+   char *const libraryName)
+{
+   int i;
+   for ( i = 0 ; i < strlen(inputString) ; ++i )
+      if ( inputString[i] == ':' && inputString[i+1] == ':' )
+         break;
+   strcpy( libraryFileName, prefix);
+   strncat( libraryFileName, inputString, i);
+   strcat( libraryFileName, suffix);
+#ifdef PERIOD_TO_BLANK
+   for ( i = 0 ; i < strlen(libraryFileName) ; ++i )
+      if ( libraryFileName[i] == '.' )
+         libraryFileName[i] = ' ';
+#endif
+   i = (i < strlen(inputString)) ? (i + 2) : 0;
+   strcpy( libraryName, inputString+i);
+}
+
+
+/*-------------------------- showLimits ----------------------------------*/
+
+void showLimits(void)
+{
+   printf( "\n Default maximum base size:    %2d", DEFAULT_MAX_BASE_SIZE);
+   printf( "\n Default maximum word length:  200 + 5 * maxBaseSize");
+   printf( "\n Maximum degree:               %u - maxBaseSize", MAX_INT-2);
+   printf( "\n Maximum name length:          %2d", MAX_NAME_LENGTH);
+   printf( "\n Maximum file name length:     %2d", MAX_FILE_NAME_LENGTH);
+   printf( "\n Maximum prime factors:        %2d\n", MAX_PRIME_FACTORS);
+}
+
+
+/*-------------------------- checkCompileOptions -------------------------*/
+
+void checkCompileOptions(
+   char *localFileName,
+   CompileOptions *mainOpts,
+   CompileOptions *localOpts)
+{
+   if ( localOpts->mbs != mainOpts->mbs ) {
+      printf( "\n\nError: DEFAULT_MAX_BASE_SIZE is %d in main and %d in %s\n",
+              mainOpts->mbs, localOpts->mbs, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->mnl != mainOpts->mnl ) {
+      printf( "\n\nError: MAX_NAME_LENGTH is %d in main and %d in %s\n",
+              mainOpts->mnl, localOpts->mnl, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->mpf != mainOpts->mpf ) {
+      printf( "\n\nError: MAX_PRIME_FACTORS is %d in main and %d in %s\n",
+              mainOpts->mpf, localOpts->mpf, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->mrp != mainOpts->mrp ) {
+      printf( "\n\nError: MAX_REFINEMENT_PARMS is %d in main and %d in %s\n",
+              mainOpts->mrp, localOpts->mrp, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->mfp != mainOpts->mfp ) {
+      printf( "\n\nError: MAX_FAMILY_PARMS is %d in main and %d in %s\n",
+              mainOpts->mfp, localOpts->mfp, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->me != mainOpts->me ) {
+      printf( "\n\nError: MAX_EXTRA is %d in main and %d in %s\n",
+              mainOpts->me, localOpts->me, localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->xl != mainOpts->xl ) {
+      printf( "\n\nError: EXTRA_LARGE is inconsistent in main and %s\n",
+              localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->sg != mainOpts->sg ) {
+      printf( "\n\nError: SIGNED is inconsistent in main and %s\n",
+              localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   if ( localOpts->nf != mainOpts->nf ) {
+      printf( "\n\nError: NOFLOAT is inconsistent in main and %s\n",
+              localFileName);
+      exit(ERROR_RETURN_CODE);
+   }
+   printf( "\nCompile options are consistent.\n");
+   exit(0);
+}
diff --git a/src/leon/src/util.h b/src/leon/src/util.h
new file mode 100644
index 0000000..f5bcbe5
--- /dev/null
+++ b/src/leon/src/util.h
@@ -0,0 +1,21 @@
+#ifndef UTIL
+#define UTIL
+
+extern void parseLibraryName(
+   const char *const inputString,
+   const char *const prefix,
+   const char *const suffix,
+   char *const libraryFileName,
+   char *const libraryName)
+;
+
+extern void showLimits(void)
+;
+
+extern void checkCompileOptions(
+   char *localFileName,
+   CompileOptions *mainOpts,
+   CompileOptions *localOpts)
+;
+
+#endif
diff --git a/src/leon/src/wt.h b/src/leon/src/wt.h
new file mode 100644
index 0000000..d0d7a9a
--- /dev/null
+++ b/src/leon/src/wt.h
@@ -0,0 +1,64 @@
+#undef WEIGHT
+#undef ADD
+#if MAXLEN == 32
+  #define WEIGHT   onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16]
+  #define ADD(i)   cw1 ^= basis1[i];
+#elif MAXLEN == 48
+  #define WEIGHT   onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff]
+  #define ADD(i)   cw1 ^= basis1[i];  cw2 ^= basis2[i];
+#elif MAXLEN == 64
+  #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                             onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16]
+  #define ADD(i)   cw1 ^= basis1[i];  cw2 ^= basis2[i];
+#elif MAXLEN == 80
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i];
+#elif MAXLEN == 96
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i];
+#elif MAXLEN == 112
+    #define WEIGHT  onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                              onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                              onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \
+                              onesCount[cw4 & 0x0000ffff]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i]; \
+                   cw4 ^= basis4[i];
+#elif MAXLEN == 128
+    #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \
+                             onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \
+                             onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \
+                             onesCount[cw4 & 0x0000ffff] + onesCount[cw4 >> 16]
+   #define ADD(i)  cw1 ^= basis1[i];  cw2 ^= basis2[i];  cw3 ^= basis3[i]; \
+                   cw4 ^= basis4[i];
+#endif
+
+         for ( loopIndex = 0 ; loopIndex <= lastPass ; ++loopIndex ) {
+         ++freq[WEIGHT];
+         ADD(0)
+         ++freq[WEIGHT];
+         ADD(1)
+         ++freq[WEIGHT];
+         ADD(0)
+         ++freq[WEIGHT];
+         ADD(2)
+         ++freq[WEIGHT];
+         ADD(0)
+         ++freq[WEIGHT];
+         ADD(1)
+         ++freq[WEIGHT];
+         ADD(0)
+         ++freq[WEIGHT];
+         temp = loopIndex + 1;
+         m = 3;
+         while ( (temp & 1) == 0 ) {
+            ++m;
+            temp >>= 1;
+         }
+         ADD(m)
+      }
+#undef MAXLEN
diff --git a/src/leon/src/wtdist.c b/src/leon/src/wtdist.c
new file mode 100644
index 0000000..fb3892b
--- /dev/null
+++ b/src/leon/src/wtdist.c
@@ -0,0 +1,992 @@
+/* File wtdist.c. */
+
+/* Copyright (C) 1992 by Jeffrey S. Leon.  This software may be used freely
+   for educational and research purposes.  Any other use requires permission
+   from the author. */
+
+/*  Highly optimized main program to compute weight distribution
+   of a linear code  The command format is
+
+      wtdist  <options>  <code>  <weightToSave>  <matrix>
+   or
+      wtdist  <options>  <code>
+
+   where in the second case all vectors of weight <weightToSave> (except
+   scalar multiples) are saved as a matrix whose rows are the vectors.  If 
+   the -1 option is coded, only one vector of this weight is saved.  If there 
+   are no vectors of the given weight, the matrix is not created.
+
+   For most binary codes, bit string operations on vectors are used.  
+
+   For nonbinary codes (and for binary codes whose parameters fail to meet
+   certain constraints), several columns of each codeword are packed into a 
+   single integer in order to make computations much faster, for large codes, 
+   than would otherwise be possible.  The number of columns packed into a
+   single integer is referred to as the "packing factor".  It may be
+   specified explicitly by the -pf option (within limits) or allowed to
+   default.  Optimal choice of the packing factor can improve performance 
+  considerably.
+
+   Let the code be an (n,k) code over GF(q), where q = p^e.  Let F(x) =
+   a[0] + a[1]*x + ... + a[e]*x^e be the irreducible polynomial over
+   GF(p) used to construct GF(q).  The elements of GF(q) are represented
+   as integers in the range 0..q-1, where field element
+   g[0] + g[1]*x + ... + g[e-1]*x^(e-1) is represented by the integer
+   g[0] + g[1] * q + ... + g[e-1] * q^(e-1).
+
+   Let P denote the packing factor.  In order to save space and time, up
+   to P components of a vector over GF(q) are represented as a single
+   integer in the range 0..(q^P-1).  Specifically, the sequence of
+   components b[i],b[i+1],...,b[i+P-1] is represented by the integer
+   b[i] + b[i+1] * q + ... + b[i+P-1] * q^(P-1).
+
+   The integer representing a sequence of field elements (components) is
+   referred to as a "packed field sequence".  The number of packed field
+   sequences required to represent one codeword is called the "packed
+   length" of the code; it equals ceil(n/P).  The set of columns of the
+   code corresponding to a packed field sequence is referred to as a "packed column".
+
+   The packing factor P must satisfy the constraints
+                i)  P <= MaxPackingFactor,
+               ii)  FieldSize ^ P - 1 <= MaxPackedInteger,
+              iii)  ceil(n/P) <= MaxPackedLength,
+   where MaxPackingFactor, MaxPackedInteger, and MaxPackedLength are
+   symbolic constant (see above).
+
+   In general, a large packing factor will increase memory requirements
+   and will increase the time required to initialize various tables, but
+   it will decrease the time required to compute the weight distribution,
+   once initialization has been completed.  The largest single data
+   structure contains  e * k * q^P * MaxPackedLength * r  bytes,
+   where r is the number of bytes used to represent type
+   0..MaxPackedInteger.
+
+   In general, a relatively small packing factor (say 8 for binary codes)
+   is indicated for codes of moderate size.  For large codes, a larger
+   packing factor (say 12 for binary codes) leads to lower execution times,
+   at the cost of a higher memory requirement.
+
+   The user may specify the value of the packing factor in the input,
+   subject to the limits specified above.  An input value of 0 will cause
+   the program to choose a default value, which may not give as good
+   performance as a user-specified value.
+*/
+
+/* Note: BINARY_CUTOFF_DIMENSION must be at least 3. */
+#define BINARY_CUTOFF_DIMENSION 12
+#define DEFAULT_INIT_ALLOC_SIZE 10000
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef HUGE
+#include <alloc.h>
+#endif
+
+#define MAIN
+
+#include "group.h"
+#include "groupio.h"
+
+#include "errmesg.h"
+#include "field.h"
+#include "new.h"
+#include "readdes.h"
+#include "storage.h"
+#include "token.h"
+#include "util.h"
+
+GroupOptions options;
+
+static void verifyOptions(void);
+
+static void binaryWeightDist(
+   const Code *const C,
+   const Unsigned saveWeight,
+   const BOOLEAN oneCodeWordOnly,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *const matrix);
+
+static void generalWeightDist(
+   const Code *const C,
+   Unsigned saveWeight,
+   const BOOLEAN oneCodeWordOnly,
+   const Unsigned packingFactor,
+   const Unsigned largestPackedInteger,
+   const Unsigned packedLength,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *matrix);
+
+static void binaryCosetWeightDist(
+   const Code *const C,
+   const Unsigned maxCosetWeight,
+   const BOOLEAN oneCodeWordOnly,
+   const Unsigned passes,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *const matrix);
+
+
+int main( int argc, char *argv[])
+{
+   char codeFileName[MAX_FILE_NAME_LENGTH] = "",
+        matrixFileName[MAX_FILE_NAME_LENGTH] = "";
+   Unsigned i, j, temp, optionCountPlus1, packingFactor, packedLength,
+            largestPackedInteger, saveWeight, allocatedSize,
+            maxCosetWeight, passes;
+   char matrixObjectName[MAX_NAME_LENGTH+1] = "",
+        codeLibraryName[MAX_NAME_LENGTH+1] = "",
+        matrixLibraryName[MAX_NAME_LENGTH+1] = "",
+        prefix[MAX_FILE_NAME_LENGTH],
+        suffix[MAX_NAME_LENGTH];
+   Code *C;
+   Matrix_01 *matrix;
+   BOOLEAN saveCodeWords, oneCodeWordOnly, defaultForBinaryProcedure,
+           useBinaryProcedure = FALSE, cWtDistFlag;
+   char comment[100];
+   unsigned long *freq = malloc( (MAX_CODE_LENGTH+2) * sizeof(unsigned long));
+
+   /* Provide help if no arguments are specified. */
+   if ( argc == 1 ) {
+      printf( "\nUsage:  wtdist [options] code [saveWeight matrix]\n");
+      return 0;
+   }
+
+   /* Check for limits option.  If present in position 1, give limits and
+      return. */
+   if ( strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0 ) {
+      showLimits();
+      return 0;
+   }
+
+   /* Check for verify option.  If present in position 1, perform verify (Note
+      verifyOptions terminates program). */
+   if ( strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0 )
+      verifyOptions();
+
+   /* Check for exactly 1 or 3 parameters following options. */
+   for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc &&
+              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
+      ;
+
+   if ( argc - optionCountPlus1 < 1 && argc - optionCountPlus1 > 3 ) {
+      ERROR( "main (wtdist)",
+             "1, 2 or 3 non-option parameters are required.");
+      exit(ERROR_RETURN_CODE);
+   }
+   saveCodeWords = (argc - optionCountPlus1 == 3);
+
+   /* Process options. */
+   prefix[0] = '\0';
+   suffix[0] = '\0';
+   options.inform = TRUE;
+   packingFactor = 0;
+   cWtDistFlag = FALSE;
+   oneCodeWordOnly = FALSE;
+   defaultForBinaryProcedure = TRUE;
+   allocatedSize = 0;
+   parseLibraryName( argv[optionCountPlus1+2], "", "", matrixFileName,
+                     matrixLibraryName);
+   strncpy( options.genNamePrefix, matrixLibraryName, 4);
+   options.genNamePrefix[4] = '\0';
+   strcpy( options.outputFileMode, "w");
+
+   /* Retrieve command-line options. */
+   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
+      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
+#ifdef EBCDIC
+         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
+                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
+                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
+                        (argv[i][j] + 'a' - 'A') : argv[i][j];
+#else
+         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
+                      (argv[i][j] + 'a' - 'A') : argv[i][j];
+#endif
+      errno = 0;
+      if ( strcmp( argv[i], "-a") == 0 )
+         strcpy( options.outputFileMode, "a");
+      else if ( strcmp( argv[i], "-cwtdist") == 0 ) {
+         cWtDistFlag = TRUE;
+      }
+      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
+         strcpy( prefix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
+         strcpy( suffix, argv[i]+3);
+      }
+      else if ( strncmp( argv[i], "-n:", 3) == 0 )
+         if ( isValidName( argv[i]+3) )
+            strcpy( matrixObjectName, argv[i]+3);
+         else
+            ERROR1s( "main (wtdist)", "Invalid name ", matrixObjectName,
+                     " for codewords to be saved.")
+      else if ( strcmp( argv[i], "-q") == 0 )
+         options.inform = FALSE;
+      else if ( strcmp( argv[i], "-overwrite") == 0 )
+         strcpy( options.outputFileMode, "w");
+      else if ( strcmp( argv[i], "-b") == 0 ) {
+         defaultForBinaryProcedure = FALSE;
+         useBinaryProcedure = TRUE;
+      }
+      else if ( strcmp( argv[i], "-g") == 0 ) {
+         defaultForBinaryProcedure = FALSE;
+         useBinaryProcedure = FALSE;
+      }
+      else if ( strncmp( argv[i], "-pf:", 4) == 0 ) {
+         errno = 0;
+         packingFactor = (Unsigned) strtol(argv[i]+4,NULL,0);
+         if ( errno )
+            ERROR( "main (wtdist)", "Invalid syntax for -pf option")
+      }
+      else if ( strncmp( argv[i], "-s:", 3) == 0 ) {
+         errno = 0;
+         allocatedSize = (Unsigned) strtol(argv[i]+3,NULL,0);
+         if ( errno )
+            ERROR( "main (wtdist)", "Invalid syntax for -s option")
+      }
+      else if ( strcmp( argv[i], "-1") == 0 )
+         oneCodeWordOnly = TRUE;
+      else
+         ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".")
+   }
+
+   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
+   options.maxWordLength = 200 + 5 * options.maxBaseSize;
+   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
+
+   if ( cWtDistFlag )
+      maxCosetWeight = saveWeight;
+
+   /* Compute names for files and name for matrix of codewords saved.  Also
+      determine weight of codewords to save. */
+   parseLibraryName( argv[optionCountPlus1], prefix, suffix,
+                     codeFileName, codeLibraryName);
+   if ( saveCodeWords ) {
+      errno = 0;
+      saveWeight = (Unsigned) strtol(argv[optionCountPlus1+1], NULL, 0);
+      if ( errno )
+         ERROR( "main (wtdist)", "Invalid syntax weight to save.")
+      parseLibraryName( argv[optionCountPlus1+2], prefix, suffix,
+                        matrixFileName, matrixLibraryName);
+      if ( matrixObjectName[0] == '\0' )
+         strncpy( matrixObjectName, matrixLibraryName, MAX_NAME_LENGTH+1);
+   }
+   else
+      saveWeight = UNKNOWN;
+
+   /* Read in the code. */
+   C = readCode( codeFileName, codeLibraryName, TRUE, 0, 0, 0);
+
+   /* Partially allocate matrix for saving codewords.  Compute initial
+      allocatedSize, unless specified as input. */
+   if ( saveCodeWords ) {
+      if ( allocatedSize == 0 )
+         allocatedSize = DEFAULT_INIT_ALLOC_SIZE;
+      matrix = (Matrix_01 *) malloc( sizeof(Matrix_01) );
+      if ( !matrix )
+         ERROR( "main (wtdist)", "Out of memory.")
+      matrix->unused = NULL;
+      matrix->field = NULL;
+      matrix->entry = (FieldElement **) malloc( sizeof(FieldElement *) *
+                                                (allocatedSize+2) );
+      if ( !matrix->entry )
+         ERROR( "main (wtdist)", "Out of memory.")
+      matrix->setSize = C->fieldSize;
+      matrix->numberOfRows = 0;
+      matrix->numberOfCols = C->length;
+   }
+
+#ifdef xxxxxx
+   /* If a coset weight distribution is requested, check the size limits,
+      call cosetWeightDist if ok, and return. */
+   if ( cWtDistFlag ) {
+      if ( C->fieldSize != 2 || C->length > 128 || C->length - C->dimension > 32 )
+         ERROR( "main (wtdist)", 
+           "Coset weight dist requires binary code, length <= 128, codimension <= 32.")
+      binaryCosetWeightDist( C, maxCosetWeight, oneCodeWordOnly, passes, &allocatedSize, 
+                             matrix);
+      return 0;
+   }
+#endif
+
+   /* Decide whether to use binary or general procedure.  The general 
+      procedure is used on binary codes of small dimension. */
+   if ( defaultForBinaryProcedure )
+      useBinaryProcedure &= (C->fieldSize == 2 &&
+                            C->length <= 128 &&
+                            C->dimension > BINARY_CUTOFF_DIMENSION);
+   else if ( useBinaryProcedure && (C->fieldSize != 2 || C->length > 128 ||
+                                    C->dimension <= 3) ) {
+      useBinaryProcedure = FALSE;
+      if ( options.inform )
+         printf( "\n\n Special binary procedure cannot be used.\n");
+   }
+
+   /* If the general procedure is to be used, determine the packing factor if
+      one was not specified.  Determine the packed length and the largest
+      packed integer. */
+   if ( !useBinaryProcedure ) {
+      if ( packingFactor == 0 ) {
+         packingFactor = 1;
+         largestPackedInteger = C->fieldSize;
+         while ( (largestPackedInteger <= 0x7fff / C->fieldSize) &&
+                 (packingFactor <= C->dimension / 2) ) {
+            ++packingFactor;
+            largestPackedInteger *= C->fieldSize;
+         }
+         --largestPackedInteger;
+      }
+      else {
+         temp = 1;
+         largestPackedInteger = C->fieldSize;
+         while ( (largestPackedInteger <= 0x7fff / C->fieldSize) &&
+                 (temp < packingFactor) ) {
+            ++temp;
+            largestPackedInteger *= C->fieldSize;
+         }
+         packingFactor = temp;
+         --largestPackedInteger;
+      }
+      packedLength = (C->length + packingFactor - 1) / packingFactor;
+   }
+
+   /* Compute the weight distribution. */
+   if ( useBinaryProcedure )
+      binaryWeightDist( C, saveWeight, oneCodeWordOnly, &allocatedSize, freq,
+                        matrix);
+   else
+      generalWeightDist( C, saveWeight, oneCodeWordOnly, packingFactor,
+                         largestPackedInteger, packedLength,
+                         &allocatedSize, freq, matrix);
+
+   /* Write out the weight distribution. */
+   if ( options.inform ) {
+      printf(  "\n\n          Weight Distribution of code %s", C->name);
+      printf(  "\n\n                 Weight      Frequency");
+      printf(    "\n                 ------      ---------");
+      for ( i = 0 ; i <= C->length ; ++i )
+         if ( freq[i] != 0 )
+            printf( "\n                  %3u       %10lu", i, freq[i]);
+      printf( "\n");
+   }
+
+   /* Write out the codewords of weight saveWeight. */
+   if ( saveCodeWords && matrix->numberOfRows > 0 ) {
+      if ( oneCodeWordOnly )
+         sprintf( comment, "One codeword of weight %u in code %s.",
+                  saveWeight, C->name);
+      else if ( C->fieldSize == 2 )
+         sprintf( comment, "The %u codewords of weight %u in code %s.",
+                  matrix->numberOfRows, saveWeight, C->name);
+      else 
+         sprintf( comment, 
+                 "%u of %u codewords of weight %u in code %s"
+                 " (scalar multiples excluded).",
+                  matrix->numberOfRows, matrix->numberOfRows * (C->fieldSize-1),
+                  saveWeight, C->name);
+      strcpy( matrix->name, matrixObjectName);
+      write01Matrix( matrixFileName, matrixLibraryName, matrix, FALSE,
+                           comment);
+   }
+   if ( saveCodeWords ) {
+      deleteMatrix(matrix, matrix->numberOfRows);//free(matrix->entry);
+      //free(matrix);
+   }
+   free(freq);
+   free(C->infoSet);
+   deleteMatrix((Matrix_01 *)C, C->dimension);
+   return 0;
+}
+
+
+/*-------------------------- packBinaryCodeWord ---------------------------*/
+
+
+void packBinaryCodeWord(
+   const Unsigned length,
+   const FieldElement *const codeWordToPack,
+   unsigned long *const packedWord1,
+   unsigned long *const packedWord2,
+   unsigned long *const packedWord3,
+   unsigned long *const packedWord4)
+{
+   Unsigned col;
+
+   *packedWord1 = *packedWord2 = *packedWord3 = *packedWord4 = 0;
+   for ( col = 1 ; col <= length ; ++col )
+      if ( col <= 32 )
+         *packedWord1 |= codeWordToPack[col] << (col-1);
+      else if (col <= 64 )
+         *packedWord2 |= codeWordToPack[col] << (col-33);
+      else if (col <= 96 )
+         *packedWord3 |= codeWordToPack[col] << (col-65);
+      else if (col <= 128 )
+         *packedWord4 |= codeWordToPack[col] << (col-97);
+}
+
+
+/*-------------------------- buildOnesCount -------------------------------*/
+
+/* This function allocates and constructs an array of size 2^16 in which
+   entry i contains the number of ones in the binary representation of i,
+   0 <= i < 2^16.  It returns (a pointer to) the array.  It is assumed that
+   type short has length 16 bits. */
+
+#ifdef HUGE
+char huge *buildOnesCount(void)
+#else
+char *buildOnesCount(void)
+#endif
+{
+   long i, j;
+#ifdef HUGE
+	char  huge *onesCount = (char  huge *) farmalloc( 65536L * sizeof(char) );
+#else
+	char *onesCount = (char *) malloc( 65536L * sizeof(char) );
+#endif
+
+   if ( !onesCount )
+      ERROR( "buildOnesCount",
+             "Not enough memory to run program.  Program terminated.")
+   for ( i = 0 ; i <= 65535L ; ++i ) {
+      onesCount[i] = 0;
+      for ( j = 0 ; j <= 15 ; ++j )
+         onesCount[i] +=  ( i & (1 << j)) != 0;
+   }
+   return onesCount;
+}
+
+
+/*-------------------------- binaryWeightDist ----------------------------*/
+
+/* Assumes length <= 128. */
+
+#define SAVE  if ( curWt == saveWeight ) {  \
+                 if ( ++matrix->numberOfRows > *allocatedSize ) {  \
+                    *allocatedSize *= 2;  \
+                    matrix->entry = (FieldElement **) realloc( matrix->entry,  \
+                                                               *allocatedSize); \
+                 }  \
+                 if ( !matrix->entry )  \
+                    ERROR( "binaryWeightDist", "Out of memory.")  \
+                 vec = matrix->entry[matrix->numberOfRows] = (FieldElement *)  \
+                          malloc( (C->length+1) * sizeof(FieldElement) );  \
+                 if ( !vec )  \
+                    ERROR( "binaryWeightDist", "Out of memory.")  \
+                 for ( j = 0 ; j < length ; ++j )  \
+                    if ( j < 32 )  \
+			              vec[j+1] = ((cw1 >> j) & 1);  \
+                    else if ( j < 64 )  \
+                       vec[j+1] = ((cw2 >> j-32) & 1);  \
+                    else if ( j < 96 )  \
+                       vec[j+1] = ((cw3 >> j-64) & 1);  \
+                    else if ( j < 128 )  \
+                       vec[j+1] = ((cw4 >> j-96) & 1);  \
+                 if ( oneCodeWordOnly )  \
+                    saveWeight = UNKNOWN;  \
+              }
+
+void binaryWeightDist(
+   const Code *const C,
+   Unsigned saveWeight,
+   const BOOLEAN oneCodeWordOnly,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *const matrix)
+{
+	Unsigned length = C->length,
+            dimension = C->dimension,
+            i, j, curWt;
+   FieldElement *vec;
+   unsigned long m;
+#ifdef HUGE
+   char huge *onesCount = buildOnesCount();
+#else
+   char *onesCount = buildOnesCount();
+#endif
+   unsigned long  basis1[35], basis2[35], basis3[35], basis4[35];
+   unsigned long  cw1, cw2, cw3, cw4;
+   unsigned long  loopIndex, lastPass, temp;
+
+
+   /* Initializations. */
+   for ( i = 0 ; i <=C->length ; ++i )
+      freq[i] = 0;
+   cw1 = cw2 = cw3 = cw4 = 0;
+
+   /* Pack the code words. */
+   for ( i = 1 ; i <= C->dimension ; ++i )
+      packBinaryCodeWord( C->length, C->basis[i], &basis1[i-1], &basis2[i-1],
+                                                  &basis3[i-1], &basis4[i-1]);
+
+   /* Enumerate the codewords. */
+   lastPass = (1L << (dimension-3)) - 1;
+   if ( saveWeight == UNKNOWN ) {
+      if ( length <= 32 )
+         #define MAXLEN 32
+         #include "wt.h"
+      else if ( length <= 48 )
+         #define MAXLEN 48
+         #include "wt.h"
+      else if ( length <= 64 )
+         #define MAXLEN 64
+         #include "wt.h"
+      else if ( length <= 80 )
+         #define MAXLEN 80
+         #include "wt.h"
+      else if ( length <= 96 )
+         #define MAXLEN 96
+         #include "wt.h"
+      else if ( length <= 112 )
+         #define MAXLEN 112
+         #include "wt.h"
+      else if ( length <= 128 )
+         #define MAXLEN 128
+         #include "wt.h"
+   }
+   else
+      if ( length <= 32 )
+         #define MAXLEN 32
+			#include "swt.h"
+      else if ( length <= 48 )
+         #define MAXLEN 48
+			#include "swt.h"
+      else if ( length <= 64 )
+         #define MAXLEN 64
+			#include "swt.h"
+      else if ( length <= 80 )
+         #define MAXLEN 80
+			#include "swt.h"
+      else if ( length <= 96 )
+         #define MAXLEN 96
+			#include "swt.h"
+      else if ( length <= 112 )
+         #define MAXLEN 112
+			#include "swt.h"
+      else if ( length <= 128 )
+         #define MAXLEN 128
+			#include "swt.h" 
+
+}
+
+
+
+/*-------------------------- buildWeightArray -------------------------------------*/
+
+/* The procedure BuildWeightArray constructs the array Weight
+   of size 0..LargestPackedInteger.  For t = 0,1,...,HighPackedInteger,
+   Weight[t] is set to the number of nonzero field elements in the
+   sequence of PackingFactor field elements represented by integer t. */
+
+char *buildWeightArray(
+   const Unsigned fieldSize,            /* Size of the field. */
+   const Unsigned packingFactor,        /* No of cols packed into integer. */
+   const Unsigned largestPackedInteger)
+{
+   Unsigned i, v;
+   char *weight;
+
+   weight = (char *) malloc( sizeof(char) * (largestPackedInteger+1) );
+   if ( !weight )
+      ERROR( "buildWeightArray", "Out of memory.");
+
+   for ( i = 0 ; i <= largestPackedInteger ; ++i ) {
+      weight[i] = 0;
+      v = i;
+      while ( v > 0 ) {
+         if ( v % fieldSize )
+            ++weight[i];
+         v /= fieldSize;
+      }
+   }
+
+   return weight;
+}
+
+
+/*-------------------------- packNonBinaryCodeWord --------------------------------*/
+
+/* This procedure packs a codeword over a field of size greater than 2.
+   (If the field size is 2, it works, but it returns an array of type
+   unsigned short, whereas type unsigned would be preferable.)
+   It returns a new packed code word which is obtained by packing the code
+   word supplied as a parameter.  If p  denotes the PackingFactor, then p
+   columns of the input codeword (Word) are packed into each integer of the
+   output packed codeword (PackedWord).  If q denotes the field size and if
+   c(1),...,c(n) denotes the input codeword, then the output packed word will
+   have components
+   c(1)+c(2)*q+...+c(p)*q**(p-1), c(p+1)+c(p+2)*q+...+c(2*p)*q**(p-1), etc. */
+
+unsigned short *packNonBinaryCodeWord(
+   const Unsigned fieldSize,              /* Field size for codeword. */
+   const Unsigned length,                 /* Length of codeword to pack. */
+   const Unsigned packingFactor,          /* No of cols packed into integer. */
+   const FieldElement *codeWord)          /* The codeword to pack. */
+{
+   Unsigned index = 0,
+            offset = 0,
+            col,
+            powerOfFieldSize = 1;
+   const Unsigned colsPerArrayElt = (length+packingFactor) / packingFactor;
+   unsigned short *packedCodeWord;
+
+   packedCodeWord = (unsigned short *)
+                      malloc( colsPerArrayElt * sizeof(unsigned short *));
+   if ( !packedCodeWord )
+      ERROR( "packNonBinaryCodeWord", "Out of memory.");
+   packedCodeWord[0] = 0;
+
+   for ( col = 1 ; col <= length ; ++col ) {
+      if ( offset >= packingFactor ) {
+         packedCodeWord[++index] = 0;
+         offset = 0;
+         powerOfFieldSize = 1;
+      }
+      packedCodeWord[index] += codeWord[col] * powerOfFieldSize;
+      ++offset;
+      powerOfFieldSize *= fieldSize;
+   }
+
+   return packedCodeWord;
+}
+
+
+/*-------------------------- unpackNonBinaryCodeWord --------------------------------*/
+
+/* This procedure unpacks a codeword over a field of size greater than 2.  
+   It performs the reverse of the packNonBinaryCodeword procedure above. */
+
+void unpackNonBinaryCodeWord(
+   const Unsigned fieldSize,              /* Field size for codeword. */
+   const Unsigned length,                 /* Length of codeword to unpack. */
+   const Unsigned packingFactor,          /* No of cols packed into integer. */
+   const unsigned short *packedCodeWord,  /* The codeword to unpack pack. */
+   FieldElement *const codeWord)          /* Set to unpacked code word. */
+{
+   Unsigned index = 0,
+            offset = 0,
+            col, temp;
+
+   temp = packedCodeWord[0];
+   for ( col = 1 ; col <= length ; ++col ) {
+      if ( offset >= packingFactor ) {
+         temp = packedCodeWord[++index];
+         offset = 0;
+      }
+      codeWord[col] = temp % fieldSize;
+      ++offset;
+      temp /= fieldSize;
+   }
+}
+
+
+
+/*-------------------------- buildAddBasisElement -----------------------------------*/
+
+/* This procedure constructs a data structure AddBasisElement which
+   specifies how to add a a prime-basis element to an arbitrary
+   codeword.  addBasisElement[i][p][j] gives the sum of packed column j
+   of the i'th prime basis vector and packed field sequence k, for
+         1 <= i <= C->dimension * C->field->exponent,
+         0 <= j < packedLength,
+         0 <= p <= largestPackedInteger.
+*/
+
+unsigned short ***buildAddBasisElement(
+   const Code *const C,
+   const Unsigned packingFactor,
+   const Unsigned packedLength,
+   const Unsigned largestPackedInteger)
+{
+   unsigned short ***addBasisElement;
+   Unsigned a, h, i, j, k, m, z, primeRow;
+   FieldElement s;
+   FieldElement *x, *y;
+   Unsigned *primeBasisVector;
+   const Unsigned fieldExponent = (C->fieldSize == 2) ? 1 : C->field->exponent;
+   const primeDimension = C->dimension * fieldExponent;
+
+   primeBasisVector = (Unsigned *) malloc( (C->length+1) * sizeof(Unsigned));
+   if ( !primeBasisVector )
+      ERROR( "buildAddBasisElement", "Out of memory.");
+   addBasisElement = (unsigned short ***)
+          malloc( (primeDimension+1) * sizeof(unsigned short **));
+   if ( !addBasisElement )
+      ERROR( "buildAddBasisElement", "Out of memory.");
+   x = (FieldElement *) malloc( (C->length+2) * sizeof(FieldElement));
+   if ( !x )
+      ERROR( "buildAddBasisElement", "Out of memory.");
+   y = (FieldElement *) malloc( (C->length+2) * sizeof(FieldElement));
+   if ( !y )
+      ERROR( "buildAddBasisElement", "Out of memory.");
+
+   for ( i = 1 , primeRow = 0 ; i <= C->dimension ; ++i )
+      for ( m = 0 ; m < fieldExponent ; ++m ) {
+
+         /* This part works only for prime fields or GF(4). */
+         s = (m == 0) ? 1 : 2;
+         ++primeRow;
+         if ( m > 0 && C->fieldSize != 4 )
+            ERROR( "buildAddBasisElement", "Field whose order is not prime or 4.")
+         if ( C->fieldSize == 2 )
+            for ( k = 1 ; k <= C->length ; ++k )
+               primeBasisVector[k] = C->basis[i][k];
+         else
+            for ( k = 1 ; k <= C->length ; ++k )
+               primeBasisVector[k] = C->field->prod[C->basis[i][k]][s];
+         addBasisElement[primeRow] = (unsigned short **)
+             malloc( (largestPackedInteger+1) * sizeof(unsigned short **));
+         if ( !addBasisElement[primeRow] )
+            ERROR( "buildAddBasisElement", "Out of memory.")
+         for ( h = 1 ; h <= C->length ; ++h )
+            x[h] = 0;
+         for ( z = 0 ; z <= largestPackedInteger ; ++z ) {
+            if ( C->fieldSize == 2 )
+               for ( j = 1 ; j <= C->length ; ++j ) 
+                  y[j] = primeBasisVector[j] ^ x[j];
+            else
+               for ( j = 1 ; j <= C->length ; ++j )
+                  y[j] = C->field->sum[primeBasisVector[j]][x[j]];
+            addBasisElement[primeRow][z] = packNonBinaryCodeWord( C->fieldSize,
+                                                   C->length, packingFactor, y);
+            a = 1;
+            while ( (a <= C->length) && (x[a] == C->fieldSize - 1 ) )
+               ++a;
+            ++x[a];
+            for ( h = 1; h < a ; ++h)
+               x[h] = 0;
+            for ( h = packingFactor+1 ; h <= C->length ; ++h )
+               x[h] = x[h-packingFactor];
+         }
+      }
+   free(primeBasisVector);
+   free(x);
+   free(y);
+   return addBasisElement;
+}
+
+/*-------------------------- destroyAddBasisElement -----------------------------------*/
+
+/* This procedure destructs a data structure AddBasisElement */
+
+void destroyAddBasisElement(unsigned short ***addBasisElement, int primeDimension, int largestPackedInteger) {
+   int i, j;
+   for (i = 1; i <= primeDimension; i++) {
+      for (j = 0; j <= largestPackedInteger; j++) {
+         free(addBasisElement[i][j]);
+      }
+      free(addBasisElement[i]);
+   }
+   free(addBasisElement);
+}
+
+
+/*-------------------------- generalWeightDist ----------------------------*/
+
+void generalWeightDist(
+   const Code *const C,
+   Unsigned saveWeight,
+   const BOOLEAN oneCodeWordOnly,
+   const Unsigned packingFactor,
+   const Unsigned largestPackedInteger,
+   const Unsigned packedLength,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *matrix)
+{
+   const Unsigned fieldExponent = (C->fieldSize == 2) ? 1 : C->field->exponent;
+   const Unsigned fieldCharacteristic = 
+                  (C->fieldSize == 2) ? 2 : C->field->characteristic;
+   const Unsigned primeDimension = C->dimension * fieldExponent;
+   Unsigned currentWeight, h, m, primeRow, packedCol, wt;
+   char *weight;
+   unsigned short ***addBasisElement;
+   unsigned short *currentWord;       /* Array of size packedLength+1 */
+   Unsigned *x;                 /* Array of size primeDimension+1 */
+   FieldElement *vec;
+
+   /* Allocate the arrays x and currentWord. */
+   x = (Unsigned *) malloc( (primeDimension+1) * sizeof(Unsigned *));
+   if ( !x )
+      ERROR( "generalWeightDist", "Out of memory")
+   currentWord = 
+            (unsigned short *) malloc( (packedLength+1) * sizeof(Unsigned *));
+   if ( !currentWord )
+      ERROR( "generalWeightDist", "Out of memory")
+   
+   /* Construct the weight array. */
+   weight = buildWeightArray( C->fieldSize, packingFactor, 
+                              largestPackedInteger);
+
+   /* Construct structure AddBasisElement, used to add a prime basis codeword
+      to an arbitrary codeword. */
+   addBasisElement = buildAddBasisElement( C, packingFactor, packedLength,
+                                           largestPackedInteger);
+
+   /* Initialize freq and saveCount.  Upon termination, freq will hold the
+      weight distribution. */
+   for ( wt = 1 ; wt <= C->length ; ++wt )
+      freq[wt] = 0;
+   freq[0] = 1;
+
+   /* Traverse the code. */
+   for ( h = C->dimension ; h >= 1 ; --h ) {
+
+      /* Traverse codewords of form  0*basis[1] +...+ 0*basis[h-1] +
+         1*basis[h] + (anything) * basis[h+1] +...+ (anything) * basis[k]),
+         where k is the dimension. */
+      for ( primeRow = 0 ; primeRow <= primeDimension ; ++primeRow )
+         x[primeRow] = 0;
+      for ( packedCol = 0 ; packedCol < packedLength ; ++packedCol )
+         currentWord[packedCol] = 0;
+      m = (h - 1) * fieldExponent + 1;
+
+      do {
+
+         /* Add prime basis codeword m to current word and find weight
+            of result. */
+         currentWeight = 0;
+         for ( packedCol = 0 ; packedCol < packedLength ; ++packedCol ) {
+            currentWord[packedCol] =
+                  addBasisElement[m][currentWord[packedCol]][packedCol];
+            currentWeight += weight[currentWord[packedCol]];
+         }
+
+         /* Record weight. */
+         freq[currentWeight] += (C->fieldSize - 1);
+
+         /* Save the codeword, if appropriate. */
+         if ( currentWeight == saveWeight ) {
+            ++matrix->numberOfRows;
+            if ( matrix->numberOfRows > *allocatedSize ) {
+               *allocatedSize *= 2;
+               matrix->entry = (FieldElement **) realloc( matrix->entry,
+                                                       *allocatedSize);
+               if ( !matrix->entry )
+                  ERROR( "binaryWeightDist", "Out of memory.")
+             }
+             vec = matrix->entry[matrix->numberOfRows] =
+                   malloc( (C->length+1) * sizeof(FieldElement) );
+             if ( !vec )
+                ERROR( "binaryWeightDist", "Out of memory.")
+             unpackNonBinaryCodeWord( C->fieldSize, C->length, packingFactor,
+                                      currentWord, vec);
+             if ( oneCodeWordOnly )
+                saveWeight = UNKNOWN+1;
+          }
+
+         /* Find m such that prime basis codeword number X[m] is the
+            basis codeword to add next. */
+         m = primeDimension;
+         while ( x[m] == fieldCharacteristic - 1 )
+            --m;
+
+         /* Adjust array X, which determines which basis codeword to add
+            next. */
+         ++x[m];
+         for ( primeRow = m+1 ; primeRow <= primeDimension ; ++primeRow )
+            x[primeRow] = 0;
+
+      } while ( m > h * fieldExponent );  
+   }
+   free(currentWord);
+   free(x);
+   free(weight);
+   destroyAddBasisElement(addBasisElement, primeDimension, largestPackedInteger);
+
+
+}
+
+#ifdef xxxxxx
+
+/*-------------------------- binaryCosetWeightDist -----------------------*/
+
+void binaryCosetWeightDist(
+   const Code *const C,
+   const Unsigned maxCosetWeight,
+   const BOOLEAN oneCodeWordOnly,
+   const Unsigned passes,
+   Unsigned *const allocatedSize,
+   unsigned long *const freq,
+   Matrix_01 *const matrix)
+{
+   unsigned long sum;
+   const unsigned coDimension = C->length - C->dimension;
+   const unsigned long numberOfCosetsLess1 = (2L << coDimension) - 1;
+   const unsigned long maxCosetsPerPass = numberOfCosetsLess1 / passes + 1;
+
+   /* Initializations. */
+   for ( i = 0 ; i <=C->length ; ++i )
+      freq[i] = 0;
+   cw1 = cw2 = cw3 = cw4 = 0;
+
+   for ( wt = 1 ; wt <= maxCosetWeight && cosetsFound <= goal ; ++wt ) {
+      for ( i = 1 ; i <= wt ; ++i )
+
+
+   /* Write out the coset weight distribution. */
+   sumLess1 = 0;
+   if ( options.inform ) {
+      printf(  "\n\n        Coset Weight Distribution of code %s", C->name);
+      printf(  "\n\n             Coset Min Wt     Number Of Cosets");
+      printf(    "\n             ------------     ----------------");
+      for ( i = 0 ; i <= maxCosetWeight ; ++i )
+         if ( freq[i] != 0 )
+            if ( i != 0 )
+               sumLess1 += freq[i];
+            printf( "\n                  %2u         %10lu", i, freq[i]);
+      if ( sumLess1 < numberOfCosetsLess1 )
+         printf( "\n         at least %2u         %10lu", maxCosetWeight+1, 
+                 numberOfCosetsLess1 - sumLess1);
+      printf( "\n");
+   }
+#endif
+
+/*-------------------------- verifyOptions -------------------------------*/
+
+static void verifyOptions(void)
+{
+   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
+                               MAX_PRIME_FACTORS,
+                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
+                               MAX_EXTRA,  XLARGE, SGND, NFLT};
+   extern void xbitman( CompileOptions *cOpts);
+   extern void xcode  ( CompileOptions *cOpts);
+   extern void xcopy  ( CompileOptions *cOpts);
+   extern void xerrmes( CompileOptions *cOpts);
+   extern void xessent( CompileOptions *cOpts);
+   extern void xfactor( CompileOptions *cOpts);
+   extern void xfield ( CompileOptions *cOpts);
+   extern void xnew   ( CompileOptions *cOpts);
+   extern void xpartn ( CompileOptions *cOpts);
+   extern void xpermut( CompileOptions *cOpts);
+   extern void xpermgr( CompileOptions *cOpts);
+   extern void xprimes( CompileOptions *cOpts);
+   extern void xreadde( CompileOptions *cOpts);
+   extern void xstorag( CompileOptions *cOpts);
+   extern void xtoken ( CompileOptions *cOpts);
+   extern void xutil  ( CompileOptions *cOpts);
+
+   xbitman( &mainOpts);
+   xcode  ( &mainOpts);
+   xcopy  ( &mainOpts);
+   xerrmes( &mainOpts);
+   xessent( &mainOpts);
+   xfactor( &mainOpts);
+   xfield ( &mainOpts);
+   xnew   ( &mainOpts);
+   xpartn ( &mainOpts);
+   xpermut( &mainOpts);
+   xpermgr( &mainOpts);
+   xprimes( &mainOpts);
+   xreadde( &mainOpts);
+   xstorag( &mainOpts);
+   xtoken ( &mainOpts);
+   xutil  ( &mainOpts);
+}
diff --git a/src/leon/src/wtdist.h b/src/leon/src/wtdist.h
new file mode 100644
index 0000000..a81e380
--- /dev/null
+++ b/src/leon/src/wtdist.h
@@ -0,0 +1,49 @@
+#ifndef WTDIST
+#define WTDIST
+
+extern void readCommandLine(
+   int argc,
+   char *argv[],
+   char *name,
+   int  *saveWeightPtr,
+   int  *saveCountPtr)
+;
+
+extern void readCode(
+   FILE *inFile,
+   int *lengthPtr,
+   int *dimensionPtr,
+   unsigned long *basis1,
+   unsigned long *basis2,
+   unsigned long *basis3,
+   unsigned long *basis4)
+;
+
+extern void writeWtDist(
+   FILE *wtFile,
+   char *name,
+   int length,
+   int dimension,
+   unsigned long *basis1,
+   unsigned long *basis2,
+   unsigned long *basis3,
+   unsigned long *basis4,
+   unsigned long *freq)
+;
+
+extern void writeVector(
+    FILE *vecFile,
+   int length,
+   unsigned long cw1,
+   unsigned long cw2,
+   unsigned long cw3,
+   unsigned long cw4)
+;
+
+extern char  HUGE *buildOnesCount(void)
+;
+
+extern void main( int argc, char *argv[] )
+;
+
+#endif
diff --git a/src/leonconv b/src/leonconv
new file mode 100755
index 0000000..d53afec
Binary files /dev/null and b/src/leonconv differ
diff --git a/src/leonconv.c b/src/leonconv.c
new file mode 100644
index 0000000..a06c7f3
--- /dev/null
+++ b/src/leonconv.c
@@ -0,0 +1,162 @@
+#include <stdio.h> 
+#if !defined(__APPLE__)
+#include <malloc.h>
+#endif
+ 
+FILE *in, *out; 
+ 
+void AutoMorphToGuave(char *inputfile, char *outputfile); 
+void ConstWeightToGuave(char *inputfile, char *outputfile); 
+void EquivalentToGuave(char *inputfile, char *outputfile); 
+void WeightToGuave(char *inputfile, char *outputfile); 
+ 
+main(int argc, char *argv[]) 
+{ 
+char *sw, *inputfile, *outputfile; 
+ 
+	if (!(argc-1 == 3)) { 
+		 fprintf(stderr, "Error, usage: leonconv <switch> <inputfile> <outputfile>\n"); 
+		 exit(1); 
+	} 
+	sw = argv[1]; 
+	inputfile = argv[2]; 
+	outputfile = argv[3]; 
+	switch ((int) sw[1]) { 
+		case 97 : AutoMorphToGuave(inputfile, outputfile); break; 
+		case 99 : ConstWeightToGuave(inputfile, outputfile); break; 
+		case 101: EquivalentToGuave(inputfile, outputfile); break; 
+		case 119: WeightToGuave(inputfile, outputfile); break; 
+		default : fprintf(stderr, "Possible switches: -a, -c, -e, -w\n"); 
+				  exit(1); 
+	} 
+	return 0; 
+} 
+ 
+int ReadUntil(FILE *fl, char Sc, int Cnt) { 
+char bit; 
+int res, i; 
+	res = fscanf(fl, "%c", &bit); 
+	i = 0; 
+	if (bit == Sc) i++; 
+	while ((i < Cnt) && (res != EOF)) { 
+		res = fscanf(fl, "%c", &bit); 
+		if (bit == Sc) i++; 
+	} 
+	return res; 
+} 
+ 
+int OpenFiles(char *inputfile, char *outputfile) { 
+	if ((in = fopen(inputfile, "r")) == NULL) 
+	{ 
+		fprintf(stderr, "Cannot open input file.\n"); 
+		return 1; 
+	} 
+	if ((out = fopen(outputfile, "w")) == NULL) 
+	{ 
+		fprintf(stderr, "Cannot open output file.\n"); 
+		return 1; 
+	} 
+	return 0; 
+} 
+ 
+void AutoMorphToGuave(char *inputfile, char *outputfile) { 
+char bit; 
+int res; 
+ 
+	OpenFiles(inputfile, outputfile); 
+	res = ReadUntil(in, '\n', 6); 
+	fprintf(out, "GUAVA_TEMP_VAR := Group(\n"); 
+	res = fscanf(in, "%c", &bit);
+	if (bit == 'F') 
+		fprintf(out, "()");
+	else	
+		while ((bit != ']') && (res != EOF)) { 
+			fprintf(out, "%c", bit); 
+			res = fscanf(in, "%c", &bit); 
+		} 
+	fprintf(out, ");\n"); 
+	close(in); 
+	in = fopen(inputfile, "r"); 
+	res = ReadUntil(in, '\n', 3); 
+	res = ReadUntil(in, ':', 1); 
+	fprintf(out, "SetSize(GUAVA_TEMP_VAR, "); 
+	res = fscanf(in, "%c", &bit); 
+	while ((bit != ';') && (res != EOF)) { 
+		fprintf(out, "%c", bit); 
+		res = fscanf(in, "%c", &bit); 
+	} 
+	fprintf(out, ");\n"); 
+	close(in); close(out); 
+} 
+ 
+void ConstWeightToGuave(char *inputfile, char *outputfile) { 
+char bit; 
+int i, j, M, n, res, el; 
+ 
+	OpenFiles(inputfile, outputfile); 
+	res = ReadUntil(in, '\n', 2); 
+	res = ReadUntil(in, ',', 1); 
+	res = fscanf(in, "%i,%i", &M, &n); 
+	res = ReadUntil(in, '\n', 1); 
+	fprintf(out, "GUAVA_TEMP_VAR := [\n"); 
+	for (i = 0; i < M; i++) { 
+		fprintf(out, "["); 
+		for (j = 0; j < n; j++) { 
+			res = fscanf(in, "%i%c", &el, &bit); 
+			if (j == 0) fprintf(out, "%i", el); 
+			else fprintf(out, ",%i", el); 
+		}
+		if (i < M-1) fprintf(out, "],\n");
+		else fprintf(out, "]");
+	} 
+	fprintf(out, "];\n"); 
+	close(in); close(out); 
+} 
+ 
+void EquivalentToGuave(char *inputfile, char *outputfile) { 
+char bit; 
+int res, noteq; 
+ 	noteq = ((in = fopen(inputfile, "r")) == NULL);
+	if ((out = fopen(outputfile, "w")) == NULL) 
+	{ 
+		fprintf(stderr, "Cannot open output file.\n"); 
+		exit(1); 
+	} 
+	fprintf(out, "GUAVA_TEMP_VAR := "); 
+	if (noteq) {
+		fprintf(out, "false;");
+	}
+	else {
+		res = ReadUntil(in, '=', 1); 
+		res = fscanf(in, "%c", &bit); 
+		while ((bit != 'F') && (res != EOF)) { 
+			fprintf(out, "%c", bit); 
+			res = fscanf(in, "%c", &bit); 
+		}
+	} 
+	fprintf(out, "\n"); 
+	if (!noteq) close(in);
+	close(out); 
+} 
+ 
+void WeightToGuave(char *inputfile, char *outputfile) { 
+int i, Wt, Fr, CurWt, res; 
+ 
+	OpenFiles(inputfile,outputfile); 
+	res = ReadUntil(in, '\n', 6); 
+	fprintf(out, "GUAVA_TEMP_VAR := ["); 
+	CurWt = 0; 
+	res = fscanf(in, "%i ", &Wt); 
+	while (res != EOF) { 
+	    if (CurWt > 0) fprintf(out, ", "); 
+	    res = fscanf(in, "%i", &Fr); 
+	    for (i = CurWt; i < Wt; i++) fprintf(out, "0, "); 
+	    fprintf(out, "%i", Fr); 
+	    CurWt = Wt+1; 
+		res = ReadUntil(in, '\n', 1); 
+	    res = fscanf(in, "%i", &Wt); 
+	} 
+	fprintf(out, "];\n"); 
+	fclose(in); fclose(out); 
+} 
+ 
diff --git a/tbl/bdtable2.g b/tbl/bdtable2.g
new file mode 100644
index 0000000..caabeba
--- /dev/null
+++ b/tbl/bdtable2.g
@@ -0,0 +1,1071 @@
+#A  BOUNDS FOR q = 2
+##
+##  Each entry [n][k] of one of the tables below contains
+##  a bound (the first table contains lowerbounds, the
+##  second upperbounds) for a code with wordlength n and
+##  dimension k. Each entry contains one of the following
+##  items:
+##
+##  FOR LOWER- AND UPPERBOUNDSTABLE
+##  [ 0, <d>, <ref> ]  from Brouwers table
+##
+##  FOR LOWERBOUNDSTABLE
+##  empty           k= 0, 1, n or d= 2 or (k= 2 and q= 2)
+##  1               shortening a [ n + 1, k + 1 ] code
+##  2               puncturing a [ n + 1, k ] code
+##  3               extending a [ n - 1, k ] code
+##  [ 4, <dd> ]     constr. B, of a [ n+dd, k+dd-1, d ] code
+##  [ 5, <k1> ]     an UUV-construction with a [ n / 2, k1 ]
+##                  and a [ n / 2, k - k1 ] code
+##  [ 6, <n1> ]     concatenation of a [ n1, k ] and a
+##                  [ n - n1, k ] code
+##  [ 7, <n1> ]     taking the residue of a [ n1, k + 1 ] code
+##  20              taking the subcode of a [ n, k + 1 ] code
+##  [21,<s>,<j>]    constr. B2 of a [ n+s, k+s-2j-1, d+2j] code
+##  [22,<k1>,<k2>]  an UUAVUVW-construction with a [ n/3, k1 ],
+##                  a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code
+##
+##  FOR UPPERBOUNDSTABLE
+##  empty        trivial and Singleton bound
+##  11           shortening a [ n + 1, k + 1 ] code
+##  12           puncturing a [ n + 1, k ] code
+##  13           extending a [ n - 1, k ] code
+##  [ 14, <dd> ] constr. B, with dd = dual distance
+##  [ 15, <d> ]  Griesmer bound
+##  [ 16, <d> ]  One-step Griesmer bound
+
+
+GUAVA_BOUNDS_TABLE[1][2] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ ,],
+#V   n = 5
+[ ,, 20],
+#V   n = 6
+[ ,, 1, 20],
+#V   n = 7
+[ ,, 1, 2, 20],
+#V   n = 8
+[ ,, 20, [5, 3], 20, 20],
+#V   n = 9
+[ ,, 20, 1, 1, 20, 20],
+#V   n = 10
+[ ,, 1, 20, 1, 1, 20, 20],
+#V   n = 11
+[ ,, 1, 2, 20, 1, 1, 20, 20],
+#V   n = 12
+[ ,, 20, [5, 3], 20, 20, 1, 1, 20, 20],
+#V   n = 13
+[ ,, 1, 1, 1, 20, 20, 1, 1, 20, 20],
+#V   n = 14
+[ ,, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20],
+#V   n = 15
+[ ,, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 20],
+#V   n = 16
+[ ,, 20, 20, [5, 4], 20, 1, 1, 20, 20, [5, 7], 20, 20, 20],
+#V   n = 17
+[ ,, [6, 3], 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 20],
+#V   n = 18
+[ ,, 3, 20, 20, 1, 1, 20, [0, 6, "QR"], 20, 20, 1, 1, 20, 20, 20],
+#V   n = 19
+[ ,, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 20
+[ ,, [6, 6], 1, [7, 37], 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 21
+[ ,, 3, 20, 3, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 22
+[ ,, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 23
+[ ,, 20, 1, 2, 1, [0, 9, "HP"], 20, 20, 20, 1, 2, 1, [0, 5, "Wa"], 20, 20, 1, 1, 20, 20, 20],
+#V   n = 24
+[ ,, [6, 3], 20, [5, 4], 20, 3, 20, 20, 20, 20, [0, 8, "QR"], 20, 3, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 25
+[ ,, 3, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 26
+[ ,, 1, 1, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 27
+[ ,, [6, 6], 1, 2, 20, [7, 50], 20, 1, [0, 9, "Pi2"], 20, 20, 1, [0, 7, "Ka"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 28
+[ ,, 3, 20, [5, 4], 20, 1, 1, 20, 3, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 29
+[ ,, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 30
+[ ,, 20, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 31
+[ ,, [6, 3], 20, 1, 2, 1, 20, 20, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20],
+#V   n = 32
+[ ,, 3, 20, 20, [5, 5], 1, 2, 20, 20, [0, 12, "XBC"], 20, [0, 10, "Sh1"], 20, 20, 20, [0, 8, "CS"], 20, 20, 20, 1, 1, 20, 20, 20, [5, 15], 20, 20, 20, 20],
+#V   n = 33
+[ ,, 2, 20, 20, 3, 20, [0, 14, "HY2"], 20, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 5, "Ch0"], 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 34
+[ ,, [6, 6], [6, 4], 20, 1, 1, 1, 2, 20, 20, [0, 12, "Sh1"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 35
+[ ,, 3, 3, 20, 20, 1, 2, [0, 14, "Pi"], 20, 20, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 36
+[ ,, 3, 1, 1, 20, 20, [0, 16, "DHM"], 1, 1, 20, 20, 1, [0, 11, "Mo"], 20, [0, 10, "Sh1"], 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 37
+[ ,, 1, [6, 7], 1, [7, 70], 20, 1, [0, 15, "FB"], 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 38
+[ ,, [6, 3], 3, 20, 3, 20, 20, 3, 20, 1, 2, 20, 1, 1, 20, 1, 1, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 39
+[ ,, 3, 1, [6, 15], 1, [0, 17, "vT3"], 20, 1, [0, 15, "X"], 20, [0, 14, "BE"], 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 40
+[ ,, 2, 20, 3, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 41
+[ ,, [6, 6], [6, 11], 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 42
+[ ,, 3, 3, 20, 1, [0, 19, "vT1"], [0, 18, "BZ"], 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, [0, 10, "QR"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 43
+[ ,, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 1, [0, 13, "cy"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 44
+[ ,, 1, [6, 14], 1, [0, 21, "Bel"], 1, 2, 1, 2, 20, 20, 1, 2, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 45
+[ ,, [6, 3], 3, 20, 3, 20, [0, 20, "BZ"], 20, [0, 18, "Gu9"], 20, 20, 20, [0, 16, "Bo0"], 1, [0, 13, "DJ"], 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 46
+[ ,, 3, 1, 1, 1, 1, 1, 1, 1, [0, 17, "GG"], 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 47
+[ ,, 2, 20, 1, 2, 1, 2, 1, 2, 3, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, [0, 5, "Ch0"], 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 48
+[ ,, [6, 6], 20, 20, [5, 5], 20, [0, 22, "BZ"], 20, [0, 20, "GB5"], 1, 1, 20, 20, 1, [0, 15, "FB"], [0, 14, "BZ"], 20, 20, 20, 20, 20, 20, [0, 12, "QR"], 1, 1, 20, 20, 20, 20, [0, 8, "RR"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 49
+[ ,, 3, [6, 4], 20, 1, 1, 2, 20, 1, [0, 19, "B2x"], 1, [0, 17, "B2x"], 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 3, 20, 1, [0, 9, "EB3"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 50
+[ ,, 3, 3, 20, 20, 1, 2, 20, 20, 3, 20, 3, 20, 20, 1, 2, 1, 2, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 51
+[ ,, 2, 1, 1, 20, 20, [0, 24, "cy"], 1, 20, 1, 1, 1, 1, 20, 20, [0, 16, "cy"], 20, [0, 14, "cy"], 20, 20, 20, 20, 1, [0, 11, "DJ"], 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 52
+[ ,, [6, 3], [6, 7], 1, [7, 101], 20, 3, 1, [0, 21, "Pu"], 20, 1, 1, 1, 1, 20, 1, 1, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 53
+[ ,, 3, 3, 20, 3, 20, 3, 20, 3, 20, 20, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 54
+[ ,, 2, 1, 1, 2, 20, 1, 1, 1, [0, 21, "GG"], 20, 20, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 55
+[ ,, [6, 6], 20, 1, 2, 2, 20, 1, 2, 3, 20, 20, 20, 1, [0, 19, "LC"], 20, 20, 20, 1, [0, 15, "cy"], 1, [0, 13, "GG"], 20, 20, 20, 1, 1, 20, 20, [0, 10, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 56
+[ ,, 3, [6, 11], 20, [5, 5], [7, 107], 20, 20, [0, 24, "BZ"], 1, 1, 20, 20, 20, 3, [0, 17, "MoY"], 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 57
+[ ,, 3, 3, 20, 3, 1, 2, 20, 1, [0, 23, "SRC"], 1, 2, 20, 20, 3, 3, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 58
+[ ,, 2, 1, 1, 1, 2, [0, 26, "?"], 20, 20, 3, 20, [0, 22, "GG"], 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 59
+[ ,, [6, 3], [6, 14], 1, 2, [0, 28, "?"], 1, 1, 20, 1, 1, 1, 1, 20, 1, 2, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 60
+[ ,, 3, 3, 20, [5, 5], 1, [0, 27, "Sa"], 1, [0, 25, "Ch"], 20, 1, 1, 1, 1, 20, [0, 20, "CDJ"], 20, 1, [0, 17, "We"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 61
+[ ,, 2, 1, 1, 1, 2, 3, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 62
+[ ,, [6, 6], 20, 1, 1, 2, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20],
+#V   n = 63
+[ ,, 3, 20, 20, 1, 2, 20, 1, 2, [0, 26, "BCH"], 20, 20, 20, 1, 2, 1, 2, [0, 20, "GW2"], 20, 1, 1, 20, 20, 20, 20, 1, [0, 15, "B2x"], 1, 2, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 7, "cy"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20],
+#V   n = 64
+[ ,, 3, [6, 4], 20, 20, [5, 6], 2, 20, [0, 28, "XBC"], 1, 1, 20, 20, 20, [0, 24, "XBC"], 20, [0, 22, "XBC"], 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 20, [0, 14, "B2x"], 20, 20, 20, 20, 20, [0, 12, "XBC"], 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [5, 31], 20, 20, 20, 20, 20],
+#V   n = 65
+[ ,, 2, 3, 20, 20, 3, [0, 30, "DHM"], 20, 1, [0, 27, "X"], 1, [0, 25, "cy"], 20, 20, 1, 1, 2, 20, 1, 2, 20, 1, [0, 17, "GG1"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, [0, 10, "BCH"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 5, "cy"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 66
+[ ,, [6, 3], 2, 20, 20, 3, 1, 1, 20, 3, 20, 3, 20, 20, 20, 1, [0, 23, "X"], 20, 20, [0, 20, "CZ"], 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 67
+[ ,, 3, [6, 7], [6, 5], 20, 1, [0, 31, "X"], 1, [0, 29, "X"], 3, 20, 3, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, [0, 11, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 68
+[ ,, 2, 3, 3, 20, 20, 3, 20, 3, 1, 1, 1, 1, 20, 20, 20, 3, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 69
+[ ,, [6, 6], 3, 1, 1, 20, 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 3, [0, 22, "BZ"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 70
+[ ,, 3, 1, [6, 15], 1, [7, 135], 20, 1, [0, 31, "X"], [0, 29, "GG1"], 20, [0, 28, "GB0"], 20, 1, [0, 25, "X"], 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 71
+[ ,, 3, [6, 11], 3, 20, 3, 20, 20, 3, 3, 20, 1, 2, 20, 3, 20, 1, 2, 1, 2, 20, 20, 20, 1, 1, 1, [0, 17, "SRC"], 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 72
+[ ,, 2, 3, 1, [7, 141], 3, 20, 20, 3, 1, [0, 29, "GG1"], 20, [7, 127], 20, 1, [0, 25, "XX"], 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 20, 1, 2, 3, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, [0, 12, "To"], 20, 20, 20, 20, 1, [0, 9, "EB3"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 73
+[ ,, [6, 3], 2, 20, 3, 1, 2, 20, 1, [0, 31, "GG1"], 3, 20, 1, 1, 20, 3, 20, 1, 1, 1, 1, 20, 20, 20, 20, [0, 20, "cy"], 1, 1, 20, 20, 20, 20, 20, 20, [0, 16, "cy"], 1, [0, 13, "XX"], 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 74
+[ ,, 3, [6, 14], [6, 15], 1, 2, [0, 34, "?"], 20, 20, 3, 1, 2, 20, 1, [0, 27, "X"], 1, [0, 25, "XX"], 20, 1, 2, 1, 2, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 1, [0, 11, "To"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 75
+[ ,, 2, 3, 3, 20, [0, 36, "?"], 1, 2, 20, 1, [0, 31, "GG1"], [0, 30, "To2"], 20, 20, 3, 20, 3, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 3, 20, 1, [0, 13, "XX"], 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 76
+[ ,, [6, 6], 3, 1, [6, 31], 1, [0, 35, "Sa"], [0, 34, "Bo0"], 20, 20, 3, 1, 1, 20, 1, [0, 27, "XX"], 3, 20, 20, 1, 1, 1, 1, 20, 20, 20, [0, 20, "cyx"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 77
+[ ,, 3, 1, [6, 15], 3, 20, 3, 1, 2, 20, 1, 2, 1, 1, 20, 3, 2, 20, 20, 20, 1, 2, 1, 2, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 9, "EB3"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 78
+[ ,, 3, 20, 3, 1, [7, 151], 1, 2, [0, 34, "EB2"], 20, 20, [0, 32, "To"], 20, 1, [0, 29, "GG1"], 1, [0, 27, "XX"], 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, [0, 11, "ZL"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 79
+[ ,, 2, [6, 4], 1, [6, 31], 3, 20, [0, 36, "JS"], 2, 20, 20, 1, 2, 20, 3, 20, 3, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 80
+[ ,, [6, 3], 3, 20, 3, 1, 2, 1, [0, 35, "GB1"], 20, 20, 20, [0, 32, "Pi"], 20, 3, 20, 3, 1, 2, 20, 20, 20, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, [0, 16, "QR"], 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 81
+[ ,, 3, 2, 20, 1, [7, 158], [0, 38, "BZ"], 20, 3, 2, 20, 20, 3, 20, 3, 20, 3, 20, [0, 26, "CZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, [0, 20, "GG"], 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, [0, 14, "BET"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 82
+[ ,, 2, [6, 7], [6, 20], 20, 3, 1, 1, 2, 2, 20, 20, 1, 1, 2, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [0, 6, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 83
+[ ,, [6, 6], 3, 3, 20, 1, 2, 1, 2, 2, 1, 20, 20, 1, [0, 31, "GG1"], [0, 29, "GG1"], 20, 1, 1, 2, 20, 20, 20, 20, 1, 2, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 84
+[ ,, 3, 3, 1, [6, 31], 20, [0, 40, "BZ"], 20, [0, 38, "EB2"], [0, 36, "GB0"], 1, 2, 20, 20, 3, 3, 20, 20, 1, [0, 27, "We"], 2, 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 85
+[ ,, 3, 1, [6, 23], 3, 20, 1, 1, 2, 1, 2, [0, 34, "GG"], 20, 20, 3, 3, 20, 20, 20, 3, [0, 26, "GG1"], 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 86
+[ ,, 2, [6, 11], 3, 1, [7, 167], 20, 1, 2, 2, [0, 36, "GW2"], 1, 1, 20, 3, 1, [0, 29, "X"], 20, 20, 3, 1, 2, 20, 20, 20, 20, 1, 2, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 87
+[ ,, [6, 3], 3, 1, [6, 31], 3, 20, 20, [0, 40, "EB2"], 2, 1, [0, 35, "GG"], 1, 2, 1, 2, 3, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "cy"], 20, 20, 20, 20, [0, 20, "GG1"], 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 88
+[ ,, 3, 2, 20, 3, 1, [0, 41, "GG1"], 20, 1, 2, 2, 3, 20, [0, 34, "GG"], 20, [0, 32, "cyx"], 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 89
+[ ,, 2, [6, 14], [6, 27], 1, 2, 3, 20, 20, [0, 40, "cy"], 2, 1, 1, 2, 20, 1, [0, 31, "BEx"], 1, 20, 20, 20, [0, 28, "HS"], [0, 25, "MoY"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 11, "cy"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 90
+[ ,, [6, 6], 3, 3, 20, [5, 6], 2, 20, 20, 1, 2, 20, 1, [0, 35, "GG"], 20, 20, 3, 1, 1, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, [0, 24, "BZ"], [0, 21, "XBZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [0, 18, "QR"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 91
+[ ,, 3, 3, 1, 1, 1, 2, 1, 20, 20, [0, 40, "Gu9"], 20, 20, 3, [0, 33, "GG1"], 20, 1, 1, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 2, 20, 20, 20, 20, [0, 14, "cy"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 9, "Hg"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 92
+[ ,, 3, 1, [6, 30], 1, [0, 45, "Bel"], [0, 44, "Ja2"], 1, 2, 20, 3, 2, 20, 3, 3, 20, 20, 1, 1, 1, 1, 2, 20, 1, 2, 20, 20, 20, 20, 3, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 3, [0, 16, "AGP"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 93
+[ ,, 2, 20, 3, 20, 3, 3, 20, [0, 42, "EB2"], 20, 3, 2, 20, 3, 3, 20, 20, 20, 1, 1, 1, 2, 2, 20, [0, 26, "DaH"], 20, 20, 20, 20, 3, 20, [0, 22, "cy"], 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 3, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 94
+[ ,, [6, 3], [6, 4], 1, 1, 2, 1, 1, 2, 20, 1, 2, 1, 2, 2, 20, 20, 20, 20, 1, 1, 2, [0, 28, "GG1"], 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 1, [0, 15, "Ch"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 95
+[ ,, 3, 3, 20, 1, 2, 2, 1, 2, 20, 20, [0, 40, "CZ"], 1, 2, 2, 1, 20, 20, 20, 20, 1, [0, 31, "GG1"], 1, [0, 27, "GG1"], 1, 1, 20, 20, 20, 20, 1, [0, 23, "Ch"], 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 20, [0, 14, "cyx"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 96
+[ ,, 2, 2, 20, 20, [5, 6], [0, 46, "vT1"], 20, [0, 44, "GB5"], 2, 20, 3, 20, [0, 38, "GG"], [0, 36, "BZ"], 1, 1, 20, 20, 20, 20, 3, 20, 3, 20, 1, 1, 20, 20, 20, 20, 3, 20, [0, 22, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 97
+[ ,, [6, 6], [6, 7], 20, 20, 3, 2, 20, 3, [0, 42, "GG1"], 20, 1, 1, 2, 3, 20, 1, 1, 20, 20, 20, 3, 1, 1, 2, 20, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 98
+[ ,, 3, 3, [6, 5], 20, 1, 2, 1, 2, 2, 20, 20, 1, [0, 39, "GG"], 1, 1, 20, 1, 2, 20, 20, 3, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 99
+[ ,, 3, 3, 3, 20, 20, [0, 48, "DHM"], 1, 2, [0, 43, "GB"], 1, 20, 20, 3, 1, 1, 2, 20, [0, 34, "CZ"], 20, 20, 1, 1, 1, 2, 2, 20, 20, 1, [0, 25, "DaH"], 20, 20, 20, [0, 24, "To"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 100
+[ ,, 2, 2, 1, 1, 20, 3, 20, [7, 191], 3, 1, [0, 41, "GG"], 20, 3, 1, 1, 2, 20, 3, 20, 20, 20, 1, 1, 2, 2, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 1, [0, 21, "Ch"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 101
+[ ,, [6, 3], [6, 11], [6, 15], 1, [7, 198], 1, 1, 2, 2, 20, 3, 20, 3, 20, 1, [0, 37, "Gra"], 20, 3, 20, 20, 20, 20, 1, 2, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, [0, 13, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 102
+[ ,, 3, 3, 3, 20, 3, 20, 1, [7, 195], 2, 1, 1, 1, 1, 1, 20, 3, 1, 1, 2, 20, 20, 20, 20, [0, 32, "DaH"], [0, 30, "DaH"], 20, 20, 20, 20, 1, 1, 20, 20, 20, [0, 24, "QC"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 103
+[ ,, 2, 2, 1, 1, 2, 20, 20, 3, [0, 46, "GG1"], 1, [7, 188], 1, [0, 41, "GG"], 1, 2, 3, 1, 1, 2, 20, 20, 20, 20, 3, 3, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 104
+[ ,, [6, 6], [6, 14], 20, 1, [0, 51, "Bel"], 2, 20, 3, 2, 20, 3, 20, 3, 20, [0, 40, "GW2"], 1, 2, 1, 2, 1, 20, 20, 20, 3, 3, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 20, "QR"], 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 105
+[ ,, 3, 3, [6, 15], 20, 3, [0, 50, "JS"], 20, 1, 2, 20, 1, 1, 2, 20, 3, 20, [0, 38, "GW2"], 20, [0, 36, "We"], 1, [0, 33, "GG1"], 20, 20, 3, 1, 1, 1, 1, 20, 20, 20, 20, [0, 26, "GW2"], 20, 20, 20, [0, 24, "QC"], 20, 20, 1, [0, 21, "HS"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 2, 20, 1, [0, 15, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 106
+[ ,, 3, 3, 3, 20, 3, 2, 20, 20, [0, 48, "GG1"], 20, 20, 1, [7, 191], 20, 3, 20, 3, 20, 3, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 107
+[ ,, 2, 3, 1, 1, 1, 2, 1, 20, 3, 2, 20, 20, 3, 20, 1, 1, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, [0, 19, "Ka"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 108
+[ ,, [6, 3], 1, [6, 15], 1, [7, 213], [0, 52, "Ja2"], 1, 2, 3, [0, 46, "GB"], 20, 20, 3, [0, 41, "Ch"], 20, 1, 1, 2, 1, 1, 20, [0, 34, "DaH"], 20, 20, 20, [0, 32, "B2x"], 20, [0, 30, "B2x"], 20, [0, 28, "B2x"], 20, 20, 20, [0, 26, "BJK"], 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20,  [...]
+#V   n = 109
+[ ,, 3, [6, 4], 3, 20, 3, 3, 20, [0, 50, "EB1"], 3, 1, 2, 20, 3, 3, 20, 20, 1, 2, 20, 1, [0, 35, "GG1"], 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 110
+[ ,, 2, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, 3, 2, 20, 20, 20, [0, 40, "Pi"], 20, 20, 3, 20, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 111
+[ ,, [6, 6], 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 20, 1, 2, 1, 20, 20, 3, 1, 20, 1, 2, 20, [0, 34, "GW2"], 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, [0, 26, "BJK"], 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 112
+[ ,, 3, [6, 7], 20, 20, [5, 6], [0, 54, "vT1"], 20, [0, 52, "EB1"], 2, 20, [0, 48, "CZ"], [7, 201], 20, [0, 44, "BZ"], 1, 2, 20, 3, 1, 2, 20, [0, 36, "BZ"], 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, [0, 24, "B2x"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 113
+[ ,, 3, 3, [6, 20], 20, 3, 2, 20, 3, [0, 50, "GG1"], 20, 3, 3, 20, 3, 20, [0, 42, "GG"], 20, 3, 20, [0, 38, "GG"], 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 114
+[ ,, 2, 3, 3, 20, 1, 2, 1, 2, 2, 20, 3, 1, [7, 203], 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 2, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, [0, 27, "BHJ"], 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 115
+[ ,, [6, 3], 2, 1, 1, 20, [0, 56, "DHM"], 1, 2, 2, 2, 1, 2, 3, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 36, "GW2"], 1, 2, 20, 20, 20, 20, 20, 1, 1, 2, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 116
+[ ,, 3, [6, 11], [6, 23], 1, [7, 229], 3, 20, [7, 223], [0, 52, "GG1"], [0, 50, "GG"], 20, [0, 48, "GW2"], 1, [0, 45, "Ch"], 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 117
+[ ,, 2, 3, 3, 20, 3, 1, 1, 2, 2, 2, 20, 3, 20, 3, 20, 20, 1, [0, 43, "HS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 20, 20, 20, 20, 20, 20, [0, 32, "cy"], 2, 20, 1, 1, 20, [0, 26, "cy"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 118
+[ ,, [6, 6], 2, 1, 1, 2, 20, 1, [7, 227], 2, 2, 1, 1, 1, 2, 20, 20, 20, 3, 20, [0, 42, "GG"], 20, [0, 40, "GG"], 20, [0, 38, "GG"], 20, [0, 36, "GG"], 2, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 119
+[ ,, 3, [6, 14], 20, 1, 2, 2, 20, 3, [0, 54, "GG1"], [0, 52, "GG"], 1, 2, 1, 2, [21, 8, 1], 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 120
+[ ,, 3, 3, [6, 27], 20, [5, 6], [0, 58, "Bo0"], 20, 3, 2, 1, 1, 2, 20, [0, 48, "BZ"], 3, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, [0, 32, "cyx"], 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 121
+[ ,, 2, 3, 3, 20, 3, 3, 20, 1, [7, 230], [21, 4, 1], 1, [21, 5, 2], 2, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 122
+[ ,, [6, 3], 3, 1, 1, 2, 1, 2, 20, 3, 3, 20, 3, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 123
+[ ,, 3, 1, [6, 30], 1, 2, 2, [0, 58, "JS"], 20, 3, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 124
+[ ,, 2, [6, 4], 3, 20, [5, 6], 2, 1, [0, 57, "GG1"], 1, 1, 1, 1, 2, [0, 49, "Ch"], 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 125
+[ ,, [6, 6], 3, 1, 1, 1, 2, 2, 3, 20, 1, 1, 1, 2, 3, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 126
+[ ,, 3, 2, 20, 1, 1, 2, [0, 60, "Ja2"], 2, 20, 20, 1, 1, 2, 2, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20],
+#V   n = 127
+[ ,, 3, [6, 7], 20, 20, 1, 2, 1, [0, 59, "GG1"], 20, 20, 20, 1, 2, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 2, [0, 37, "MoY"], 20, 20, 20, 20, 1, [0, 35, "cy"], 20, 20, 20, 20, 20, 1, [0, 31, "BCH"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, [...]
+#V   n = 128
+[ ,, 2, 3, 20, 20, 20, [5, 7], 20, 3, 2, 20, 20, 20, [0, 56, "XBC"], [0, 52, "BZ"], 20, 20, 20, 20, 20, [0, 48, "XBC"], 20, 20, 20, 20, 20, 20, [0, 44, "XBC"], 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, [0, 28, "XBC"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, [0, 22, "XBC"], 20, 20, 20, 20, 20, 20, [0, 20, "XBC"], 2, 20, 20, 20, 20, 20, 1, [0, 15, "Gp"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Gp"], 20, 20, 20, 20, 20, 1, 2, 20, [...]
+#V   n = 129
+[ ,, [6, 3], 3, [6, 5], 20, 20, 3, 2, 3, [0, 58, "JS"], 20, 20, 20, 3, 3, 1, 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 1, [0, 29, "Dup"], 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 3, [0, 18, "BCH"], 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, [0, 13, "MMT"], 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, [0, 10, "BCH"], 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, [ [...]
+#V   n = 130
+[ ,, 3, 2, 3, 20, 20, 3, [0, 62, "JS"], 3, 2, 20, 20, 20, 3, 3, 1, 1, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20],
+#V   n = 131
+[ ,, 2, [6, 11], 2, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, 1, 2, 1, 1, 20, 20, 1, [0, 47, "BEx"], 1, 1, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, [0, 27, "Su"], 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, [0, 19, "Su"], 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20 [...]
+#V   n = 132
+[ ,, [6, 6], 3, [6, 15], [6, 6], 20, 1, 2, [0, 61, "GG"], [0, 60, "Gu9"], 1, 20, 20, 3, [0, 53, "XB"], [0, 52, "BY"], 20, 1, [0, 49, "XB"], 20, 20, 3, 20, 1, 1, 20, 20, 3, [0, 39, "Vx"], 1, [0, 37, "XB"], 20, 20, 20, 3, [0, 33, "Vx"], 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 20, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 133
+[ ,, 3, 2, 3, 3, 20, 20, [0, 64, "Ja2"], 3, 3, 1, 1, 20, 3, 3, 1, 1, 20, 3, 20, 20, 1, 1, 20, 1, 1, 20, 3, 3, 20, 3, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20],
+#V   n = 134
+[ ,, 3, [6, 14], 3, 1, 1, 20, 3, 2, 3, 20, 1, 1, 2, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 1, 2, 1, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20],
+#V   n = 135
+[ ,, 2, 3, 1, [6, 31], 1, [0, 65, "X"], 1, [0, 63, "GG"], 1, 2, 20, 1, [0, 57, "X"], 2, 20, 20, 1, 2, 1, [0, 49, "X"], 20, 20, 1, [0, 47, "X"], 20, 1, [0, 45, "X"], 20, 1, 2, 20, 20, 20, 1, [0, 35, "Vx"], 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, [0, 29, "X"], 20, 20, 1, [0, 27, "X"], 20, 1, [0, 25, "X"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, [0, 21, "X"], 20, 20, 1, [0, 19, "X"], 20, 1, [0, 17, "X"], 20, 20, 20, 20, 20, 1, [0, 15, "X"], 20, 20, 20, 20, 20, 1, [0, 13, "X"], 2 [...]
+#V   n = 136
+[ ,, [6, 3], 3, [6, 15], 3, 20, 3, 20, 3, 20, [7, 255], 20, 20, 3, [0, 56, "BZ"], [0, 53, "BEx"], 20, 20, [0, 52, "BZ"], 20, 3, 20, 20, 20, 3, 20, 20, 3, [0, 41, "Vx"], 20, [0, 40, "BZ"], 20, 20, 20, 20, 3, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 24, "RS"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20,  [...]
+#V   n = 137
+[ ,, 3, 3, 3, 1, 2, 3, 20, 3, [0, 61, "GG1"], 1, 1, 20, 3, 3, 3, 20, 20, 3, 20, 3, 20, 20, 20, 1, 1, 20, 3, 3, 20, 3, 1, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20,  [...]
+#V   n = 138
+[ ,, 2, 2, 2, 20, [0, 68, "vT3"], 2, 20, 3, 3, 20, 1, 1, 2, 3, 1, 1, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 2, 20, 3, 1, 1, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [...]
+#V   n = 139
+[ ,, [6, 6], [6, 4], [6, 15], [6, 31], 1, [0, 67, "X"], 2, 3, 1, [21, 4, 1], 20, 1, [0, 59, "X"], 1, [0, 55, "BEx"], 1, [0, 53, "X"], 20, 1, [0, 51, "X"], 20, 20, 20, 20, 20, 1, [0, 47, "X"], [0, 43, "Vx"], 20, 1, 1, 1, 2, 20, 20, 1, [0, 35, "XBZ"], 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, [0, 27, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 19, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20 [...]
+#V   n = 140
+[ ,, 3, 3, 3, 3, 20, 3, [0, 66, "GB5"], 1, [0, 63, "GB6"], 3, 20, 20, 3, 20, 3, 20, 3, 20, 20, 3, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 1, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, [...]
+#V   n = 141
+[ ,, 3, 2, 3, 1, 2, 3, 3, 20, 3, 1, 1, 20, 3, 20, 1, 1, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 3, 3, 1, 20, 20, 1, 2, 2, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 24, "Kol"], 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 142
+[ ,, 2, [6, 7], 1, [6, 31], [0, 70, "vT3"], 2, 1, [0, 65, "GG"], 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 1, 2, 20, 20, [0, 40, "DaH"], [0, 38, "DaH"], 20, 20, 3, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, [0, 27, "BEx"], 20, 20, 20, 1, [0, 25, "XX"], 20, 20, 20, 20, 20, 1, [0, 23, "XX"], 20, 20, 1, [0, 21, "Su"], 20, 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 1, [0, 17, "XX"], 20, 20, 20, 20, 20, 1, [0, 15, "XX"], 20, 20, 20, 20, 20, 1, [0, 13, [...]
+#V   n = 143
+[ ,, [6, 3], 3, 20, 3, 1, [0, 69, "X"], 2, 3, 20, 1, [0, 63, "X"], 1, [0, 61, "X"], 20, 20, 20, 1, 2, 1, [0, 53, "X"], 2, 20, [0, 50, "BE3"], 20, 20, 20, 3, 1, 1, 2, 20, 20, 3, 3, 20, 20, 1, 2, 20, 20, [0, 34, "BE3"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20,  [...]
+#V   n = 144
+[ ,, 3, 3, [6, 20], 1, 2, 3, [0, 68, "Gu"], 2, 20, 20, 3, 20, 3, [0, 57, "XB"], 20, 20, 20, [7, 255], 20, 3, [0, 52, "BET"], 20, 1, 1, 20, 20, 3, [0, 45, "Gra"], 1, 2, 20, 20, 3, 1, 1, 20, 20, [0, 36, "BE3"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, [0, 27, "BEx"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 23, "XX"], 20, 20, 1, 1, 20, 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 2 [...]
+#V   n = 145
+[ ,, 2, 2, 3, 20, [0, 72, "HvT"], 2, 1, 2, 20, 20, 1, 1, 2, 3, 20, 20, 20, 1, 1, 2, 1, 1, 20, 1, 1, 20, 3, 3, 20, [0, 44, "CLC"], 20, 20, 1, 2, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, [...]
+#V   n = 146
+[ ,, [6, 6], [6, 11], 2, 20, 1, [0, 71, "X"], 2, [0, 68, "Ja"], 2, 20, 20, 1, [0, 63, "X"], 1, [21, 6, 2], 20, 20, 20, 1, [0, 55, "X"], 20, 1, 2, 20, 1, [0, 49, "XX"], 3, 3, 20, 3, 20, 20, 20, [0, 40, "DaH"], 20, [0, 38, "BE3"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 21, "XX"], 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 147
+[ ,, 3, 3, [6, 23], [6, 31], 20, 3, [0, 70, "Ja2"], 3, [0, 66, "GB6"], 20, 20, 20, 3, 2, 3, 20, 20, 20, 20, 3, 20, 20, [0, 52, "BE3"], 20, 20, 3, 2, 3, 20, 3, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20,  [...]
+#V   n = 148
+[ ,, 3, 2, 3, 3, 20, 3, 2, 2, 2, 20, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, [0, 53, "BE3"], 20, 1, 1, 20, 1, [0, 49, "XX"], 3, 20, 3, 1, [0, 41, "X"], 20, 20, 1, 1, 1, 1, 20, 20, [0, 36, "BE3"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, [0, 21, "XX"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20 [...]
+#V   n = 149
+[ ,, 2, [6, 14], 3, 1, [0, 73, "Bel"], 1, 2, 2, 2, 2, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, 3, 20, 20, 1, 1, 20, 3, 1, 2, 3, 20, 3, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, [0, 25, "Su"], 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 150
+[ ,, [6, 3], 3, 1, [6, 31], 3, 20, [0, 72, "GB5"], [0, 70, "BZ"], [0, 68, "GB6"], [0, 66, "BZ"], 20, 20, 3, [0, 62, "CZ2"], 1, 2, 1, 20, 20, 3, 2, 20, 20, 20, 1, [0, 51, "XX"], 3, 1, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 1, [0, 33, "BHJ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 2 [...]
+#V   n = 151
+[ ,, 3, 3, [6, 27], 3, 1, [0, 73, "BEx"], 3, 2, 3, 1, [0, 65, "GG"], 20, 3, 1, 1, 2, 1, [7, 264], 20, 1, [0, 55, "BE3"], [0, 53, "BEx"], 20, 20, 20, 3, 2, 1, 2, 20, 1, [0, 43, "X"], 1, [0, 41, "BEx"], 20, 20, 20, 1, 2, 1, 2, 20, [0, 36, "Dup"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, [0, 31, "MMT"], 20, 1, [0, 27, "Su"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 23, "MMT"], 20, 1, 2, 20, 20, 20, 20, 1, [0, 19, "Su"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 152
+[ ,, 2, 3, 3, 1, [0, 75, "Bel"], 3, 1, 2, 1, 2, 3, 20, 1, 2, 1, 2, 2, 3, 20, 20, 3, 3, 20, 20, 20, 1, [0, 51, "XX"], 20, [0, 48, "Dup"], 2, 20, 3, 20, 3, 20, 20, 20, 20, [0, 40, "BE3"], 20, [0, 38, "BE3"], 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, [0, 22, "BE3"], 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 153
+[ ,, [6, 6], 2, 2, 20, 3, 2, 20, [0, 72, "BZ"], 2, [0, 68, "BZ"], 1, [0, 65, "XX"], 20, [0, 64, "CZ"], 20, [0, 62, "CZ"], 2, 1, [0, 57, "XX"], 20, 3, 1, [0, 53, "BEx"], 20, 20, 20, 3, 20, 3, [0, 46, "LLX"], 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [...]
+#V   n = 154
+[ ,, 3, [6, 4], [6, 30], [6, 31], 1, [0, 75, "X"], 20, 3, 2, 2, 20, 3, 20, 1, 1, 1, 2, 20, 3, 20, 1, [0, 55, "BE3"], 3, 20, 20, 20, 3, 20, 3, 2, 20, 20, 1, [0, 43, "X"], 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, [0, 26, "BET"], 20, 20, 20, 20, 20, 3, 20, 20, 20, [0, 22, "BE3"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 155
+[ ,, 3, 3, 3, 3, 20, 3, 2, 1, 2, 2, [0, 67, "GG"], 1, [0, 65, "XX"], 20, 1, [0, 63, "Gra"], [0, 62, "GW2"], [7, 272], 1, [0, 57, "XX"], 20, 3, 1, [0, 53, "BEx"], 20, 20, 3, 20, 1, 2, 20, 20, 20, 3, 20, 1, 2, 20, 20, 1, 2, 1, 2, 20, 20, [0, 36, "BZ"], 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 23, "TTH"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 2 [...]
+#V   n = 156
+[ ,, 2, 2, 3, 1, [6, 63], 3, [0, 74, "GB5"], 20, [0, 72, "JS"], [0, 70, "BZ"], 3, 20, 3, 20, 20, 3, 3, 3, 20, 3, 20, 1, [0, 55, "BE3"], 3, 20, 20, 3, [0, 49, "Gra"], 20, [0, 48, "LLX"], 20, 20, 20, 1, 1, 20, [0, 42, "BE3"], 20, 20, 20, [0, 40, "BE3"], 20, [0, 38, "GW2"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 20, 1, [0, 27, "Su"], 20, 20, 1, [0, 25, "Su"], 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 17, "Su" [...]
+#V   n = 157
+[ ,, [6, 3], [6, 7], 1, [6, 31], 3, 2, 2, 20, 3, 2, 1, [0, 67, "XX"], 3, 20, 20, 3, 3, 1, [0, 59, "XX"], 3, 20, 20, 3, 1, [0, 53, "BEx"], 20, 3, 3, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 158
+[ ,, 3, 3, 20, 3, 1, 2, 2, 20, 1, 2, 20, 3, 2, 20, 20, 3, 2, 20, 3, 2, 20, 20, 1, [0, 55, "BE3"], 3, 20, 3, 3, 20, 3, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 21, "KSH"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20,  [...]
+#V   n = 159
+[ ,, 2, 3, 20, 1, [6, 63], [0, 78, "BDH"], [0, 76, "Ja2"], 2, 20, [0, 72, "BZ"], [0, 69, "GG"], 1, [0, 67, "XX"], 20, 20, 1, 2, 20, 1, [0, 59, "XX"], 20, 20, 20, 3, 1, [0, 53, "BE3"], 3, 3, 20, 3, [0, 46, "BE3"], 20, 20, 20, 20, 20, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [...]
+#V   n = 160
+[ ,, [6, 6], 2, [6, 5], 20, 3, 2, 2, 2, 20, 3, 3, 20, 3, 20, 20, 20, [0, 64, "GW2"], 20, 20, 3, [0, 57, "BE3"], 20, 20, 3, 20, 3, 2, 2, 20, 3, 1, 1, 20, 20, 20, 20, 20, [0, 44, "BE3"], 20, [0, 42, "BE3"], 20, 20, [0, 40, "GW2"], 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 2 [...]
+#V   n = 161
+[ ,, 3, [6, 11], 3, 20, 1, 2, 2, 2, 2, 3, 1, [0, 69, "XX"], 3, 2, 20, 20, 3, 20, 20, 3, 3, 20, 20, 1, [0, 55, "BE3"], 1, [0, 53, "BEx"], [0, 51, "Gra"], 20, 3, 20, 1, [0, 45, "XX"], 20, 20, 20, 20, 1, 2, 1, 2, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20,  [...]
+#V   n = 162
+[ ,, 3, 3, 2, 20, 20, [0, 80, "BDH"], [0, 78, "Ja2"], [0, 76, "Ja2"], [0, 74, "JS"], 1, [0, 71, "GG"], 3, 2, [0, 66, "BZ"], 20, 20, 3, 2, 20, 3, 3, 20, 20, 20, 3, 20, 3, 3, 20, 1, [0, 47, "Vx"], 20, 3, 20, 20, 20, 20, 20, [0, 44, "BE3"], 20, [0, 42, "BE3"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, [...]
+#V   n = 163
+[ ,, 2, 2, [6, 15], [6, 37], 20, 3, 2, 2, 2, 20, 3, 1, [0, 69, "XX"], 2, 20, 20, 3, 2, 20, 3, 1, 2, 20, 20, 1, 1, 2, 3, 1, 20, 3, 20, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 164
+[ ,, [6, 3], [6, 14], 3, 3, 20, 1, 2, 2, 2, 2, 1, [0, 71, "XX"], 3, 2, 1, 20, 1, 2, 2, 1, [0, 59, "BE3"], [0, 58, "BE3"], 20, 20, 20, 1, [0, 55, "BE3"], 3, 1, [0, 49, "XB"], 3, 20, 20, [7, 255], 20, 20, 20, 20, 20, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20 [...]
+#V   n = 165
+[ ,, 3, 3, 3, 1, [6, 63], 20, [0, 80, "Ja2"], [0, 78, "GB5"], [0, 76, "Gu9"], [0, 74, "Ja2"], 20, 3, 2, [0, 68, "BZ"], 1, 2, 20, [0, 64, "CZ"], 2, 20, 3, 1, 2, 20, 20, 20, 3, 3, 20, 3, 1, 1, 20, 1, [7, 254], 20, 20, 20, 20, 20, [0, 44, "BE3"], [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 1, 2, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 166
+[ ,, 2, 3, 1, [6, 47], 3, 20, 3, 2, 3, 2, 20, 1, [0, 71, "XX"], 2, 20, [0, 66, "GW2"], 20, 1, 2, 20, 3, 20, [0, 58, "BE3"], 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 34, "XBZ"], 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [...]
+#V   n = 167
+[ ,, [6, 6], 3, [6, 15], 3, 1, [0, 81, "BEx"], 1, 2, 1, 2, 20, 20, 3, 2, 2, 1, 2, 20, [0, 64, "GW2"], 2, 1, 2, 1, [0, 57, "BE3"], 20, 20, 3, 20, 1, 2, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 1, 2, 1, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20 [...]
+#V   n = 168
+[ ,, 3, 2, 3, 1, [6, 63], 3, 20, [0, 80, "Ja2"], [0, 77, "Gu9"], [0, 76, "GB6"], 20, 20, 3, 2, [0, 68, "GG1"], 20, [0, 66, "GG1"], 20, 3, [0, 62, "BE3"], 20, [0, 60, "BZ"], 20, 3, 20, 20, 3, 20, 20, [0, 52, "BZ"], 20, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, [7, 255], 1, 2, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 36, "XBZ"], 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20,  [...]
+#V   n = 169
+[ ,, 3, [6, 4], 2, 20, 3, 2, 20, 3, 3, 3, 1, 20, 1, 2, 1, 1, 1, 2, 3, 2, 20, 1, 2, 3, 20, 20, 3, 20, 20, 1, 2, 20, 1, 2, 1, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 170
+[ ,, 2, 3, [6, 15], [6, 44], 1, [0, 83, "BEx"], 20, 3, 2, 2, 1, 2, 20, [0, 72, "DaH"], 20, 1, 2, [0, 66, "DaH"], 1, [0, 63, "GG"], 20, 20, [0, 60, "BE3"], 1, 1, 20, 3, 1, 20, 20, [0, 52, "DaH"], 20, 20, [0, 50, "DaH"], 1, 2, 20, 1, 1, 20, 20, 20, 1, [7, 255], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, [0, 17, "Su [...]
+#V   n = 171
+[ ,, [6, 3], 2, 3, 3, 20, 3, [0, 81, "Gu9"], 1, 2, 2, 20, [0, 74, "BZ"], 20, 3, 1, 20, [0, 68, "GG1"], 3, 20, 3, 1, 20, 1, [0, 59, "BE3"], 1, 2, 3, 1, 1, 20, 3, 20, 20, 3, 20, [0, 48, "Dup"], 20, 20, 1, 1, 20, 20, 20, 3, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 35, "TTH"], 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 172
+[ ,, 3, [6, 7], 3, 1, [6, 63], 3, 3, 20, [0, 80, "Ja"], [0, 78, "GW2"], 1, 1, 1, 2, 1, 2, 3, 3, 20, 3, 1, [0, 61, "XB"], 20, 3, 20, [0, 58, "BE3"], 2, 20, 1, [0, 53, "XB"], 3, 20, 20, 1, 2, 3, 20, 20, 20, 1, [0, 45, "Gra"], 20, 20, 3, 1, [0, 41, "XB"], 20, 20, 1, [0, 39, "XB"], 20, 20, 1, [0, 37, "XB"], 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20,  [...]
+#V   n = 173
+[ ,, 2, 3, 1, [6, 47], 3, 2, 1, 2, 3, 2, 1, 2, 1, 2, 20, [0, 70, "GW2"], 3, 2, 20, 3, 20, 3, 20, 3, 20, 1, 2, 1, 20, 3, 1, 1, 20, 20, [0, 50, "GW2"], 3, 20, 20, 20, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, [0, 35, "XB"], 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 174
+[ ,, [6, 6], 3, 20, 3, 1, [0, 85, "X"], 2, [0, 82, "BKW"], 1, 2, 20, [0, 76, "BZ"], 20, [0, 74, "BZ"], 20, 3, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, [0, 58, "BE3"], 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 20, 20, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 20, 20, 1, 1, 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20,  [...]
+#V   n = 175
+[ ,, 3, 2, [6, 20], 1, [6, 63], 3, [0, 84, "Ja2"], 2, 20, [0, 80, "GW2"], 1, 1, 1, 2, 20, 3, 20, [0, 68, "GW2"], 20, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 2, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, [7, 264], 20, 1, 2, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20,  [...]
+#V   n = 176
+[ ,, 3, [6, 11], 3, 20, 3, 2, 1, 2, 2, 3, 1, 2, 1, 2, 20, 3, 20, 3, 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 2, 20, 20, [0, 56, "BZ"], 2, 20, 20, [0, 52, "BZ"], 1, 1, 20, [0, 48, "BZ"], 20, 20, 20, 3, 20, 20, [0, 44, "BZ"], 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20,  [...]
+#V   n = 177
+[ ,, 2, 3, 2, 20, 1, [0, 87, "X"], [0, 85, "Gra"], [0, 84, "BKW"], [0, 82, "EB2"], 3, 20, [0, 78, "BZ"], 20, [0, 76, "BZ"], 20, 1, [0, 69, "GG1"], 3, 1, 20, 20, 3, 1, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 3, 20, 1, 1, 2, 20, 20, 20, 1, [7, 266], 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1,  [...]
+#V   n = 178
+[ ,, [6, 3], 2, [6, 23], [6, 52], 20, 3, 3, 3, 2, 1, 1, 1, 1, 2, 1, 20, 3, 3, 1, 1, 20, 3, 1, 1, 20, 20, [0, 60, "BE3"], 1, 20, 20, [0, 56, "DaH"], 1, 1, 2, 20, 20, 1, 2, 1, 20, 20, 20, 3, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 2 [...]
+#V   n = 179
+[ ,, 3, [6, 14], 3, 3, 20, 3, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 20, 3, 1, 1, 20, 1, 1, 1, 2, 1, 20, 20, [0, 50, "GW2"], 1, [0, 47, "Gra"], 20, 20, 1, [7, 268], 20, [0, 44, "GW2"], 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 2 [...]
+#V   n = 180
+[ ,, 2, 3, 3, 1, [6, 63], 1, [0, 87, "Gu9"], 2, [0, 84, "EB2"], [0, 82, "BZ"], 20, [0, 80, "BZ"], 20, [0, 78, "BZ"], 20, [0, 72, "BZ"], 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 1, 1, 1, [0, 61, "XB"], 3, 20, 1, [0, 57, "XB"], 20, 1, 1, 2, 1, 1, 20, 3, 20, 3, 20, 20, 20, 3, 20, 3, 20, 20, 20, [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, [0, [...]
+#V   n = 181
+[ ,, [6, 6], 3, 1, [6, 55], 3, 20, 3, [0, 86, "Zwa"], 2, 1, 1, 1, 1, 2, 20, 3, 20, 3, 1, 1, 20, 3, 20, 1, 2, 3, 1, 1, 20, 3, 20, 20, 1, 2, 2, 1, 1, 2, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1,  [...]
+#V   n = 182
+[ ,, 3, 3, [6, 27], 3, 1, 2, 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 2, 20, 1, 1, 2, 20, 20, [0, 64, "DaH"], 2, 20, 1, 1, 2, 20, 20, 20, [0, 56, "DaH"], 2, 20, 1, 2, 1, 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20,  [...]
+#V   n = 183
+[ ,, 3, 2, 3, 1, [6, 63], [0, 90, "BZ"], 1, 2, [0, 86, "EB2"], [0, 84, "BZ"], 20, [0, 82, "BZ"], 20, [0, 80, "BZ"], [21, 6, 2], 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, [0, 52, "GW2"], 1, 2, 20, 1, 1, 20, [0, 46, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [...]
+#V   n = 184
+[ ,, 2, [6, 4], 2, 20, 3, 2, 20, [0, 88, "Zwa"], 2, 1, 1, 1, 1, 2, 1, 2, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 20, 20, 20, 20, [0, 56, "GW2"], 1, 20, 1, 1, 2, 20, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 185
+[ ,, [6, 3], 3, [6, 30], [6, 59], 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 20, 3, 1, 2, 20, 1, 2, 1, 20, 20, [0, 48, "Gra"], 20, 1, 2, 20, 20, [0, 44, "BZ"], 20, 20, 20, [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, [...]
+#V   n = 186
+[ ,, 3, 2, 3, 3, 20, [5, 7], [0, 90, "EB2"], 20, [0, 88, "EB2"], [0, 86, "BZ"], 20, [0, 84, "BZ"], 20, [0, 82, "BZ"], 1, 2, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 20, [0, 54, "GW2"], 20, 20, [0, 52, "GW2"], 1, 1, 20, 3, 20, 20, [0, 46, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, [...]
+#V   n = 187
+[ ,, 2, [6, 7], 3, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 1, 1, 2, 20, 20, 3, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 2 [...]
+#V   n = 188
+[ ,, [6, 6], 3, 1, [6, 62], 1, [0, 93, "Bel"], 2, 1, 2, 2, 1, 2, 1, 2, 1, [0, 77, "GW2"], 1, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 1, 2, 1, [0, 61, "XB"], [0, 60, "BY"], 20, 1, [0, 57, "XB"], 20, 1, 2, [0, 53, "XB"], 20, 1, 2, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20,  [...]
+#V   n = 189
+[ ,, 3, 3, 20, 3, 20, 3, [0, 92, "EB2"], 20, [0, 90, "EB2"], [0, 88, "BZ"], 20, [0, 86, "BZ"], 20, [0, 84, "BZ"], 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, [0, 64, "DaH"], 20, 3, 1, 1, 20, 3, 20, 20, [0, 56, "GW2"], 3, 20, 20, [0, 52, "GW2"], 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [...]
+#V   n = 190
+[ ,, 3, 2, 20, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 20, 3, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 3, 2, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, [0, 46, "BZ"], 20, 20, 20, [0, 44, "BZ"], 20, 20, 20, 1, 1, 20, 20, [0, 40, "BZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 2 [...]
+#V   n = 191
+[ ,, 2, [6, 11], [6, 5], 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 1, 2, 1, 20, 20, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 21, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 19, "X"], 20, 20, 1, [0, 17, "X"], 20 [...]
+#V   n = 192
+[ ,, [6, 3], 3, 3, 20, 20, [5, 7], 2, 20, [0, 92, "EB2"], 20, 20, [0, 88, "BZ"], 20, [0, 86, "BZ"], 1, 2, 20, [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 1, 1, 20, [0, 56, "BZ"], 1, 2, 20, 20, [0, 52, "GW2"], 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, [0, 40, "XBZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, [0, 32, " [...]
+#V   n = 193
+[ ,, 3, 2, 2, 20, 20, 3, [0, 94, "B2x"], 20, 3, 20, 20, 1, 1, 2, 20, [0, 80, "GW2"], 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 20, 1, 1, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20,  [...]
+#V   n = 194
+[ ,, 2, [6, 14], [6, 15], 20, 20, 3, 1, 1, 2, 20, 20, 20, 1, 2, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 1, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20,  [...]
+#V   n = 195
+[ ,, [6, 6], 3, 3, [6, 6], 20, 1, [0, 95, "B2x"], 1, [0, 93, "B2x"], [0, 89, "GG"], 20, 20, 20, [0, 88, "BZ"], 20, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 20, 20, 1, [0, 57, "Dup"], [0, 56, "Dup"], 1, 20, 3, 20, 20, 20, 20, 20, 20, 1, [0, 49, "MMT"], 1, [0, 47, "MMT"], 20, 20, 20, 20, 1, [0, 43, "MMT"], 20, 20, 20, [0, 42, "MMT"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, [...]
+#V   n = 196
+[ ,, 3, 3, 3, 3, 20, 20, 3, 20, 3, 3, 20, 20, 20, 3, 20, 3, 1, [0, 77, "Gra"], [0, 76, "BY"], 20, 1, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 1, [0, 61, "XB"], [0, 60, "BY"], 20, 20, 20, 3, 3, 1, [0, 53, "XB"], 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 197
+[ ,, 3, 3, 2, 1, 1, 20, 1, 1, 2, 1, 1, 20, 20, 3, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 3, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 3, [0, 45, "XB"], 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20,  [...]
+#V   n = 198
+[ ,, 2, 2, [6, 15], [6, 31], 1, [0, 97, "XX"], 20, 1, [0, 95, "EB2"], 20, 1, [0, 89, "GG"], 20, 3, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, 1 [...]
+#V   n = 199
+[ ,, [6, 3], [6, 4], 3, 3, 20, 3, 20, 20, 3, [0, 91, "GG"], 20, 3, 20, 3, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 1, 2, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, [0, 34, "XBZ"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20 [...]
+#V   n = 200
+[ ,, 3, 3, 2, 1, [6, 95], 3, 20, 20, 3, 3, 20, 3, 20, 3, 1, [0, 81, "Gra"], 20, [0, 80, "BZ"], 20, 20, 20, [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 3, 20, 20, [0, 56, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 20, [0, 44, "BZ"], 20, 20, 1, [0, 41, "Gra"], 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20 [...]
+#V   n = 201
+[ ,, 2, 2, [6, 15], 20, 3, 2, 20, 20, 3, 1, 1, 1, 2, 3, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 3, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [0, 36, "XBZ"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20,  [...]
+#V   n = 202
+[ ,, [6, 6], [6, 7], 3, [6, 31], 1, [0, 99, "XX"], [0, 97, "EB2"], 20, 3, 20, 1, [0, 91, "GG"], [0, 90, "EB1"], 2, 1, 2, 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 3, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 3, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 203
+[ ,, 3, 3, 3, 3, 20, 3, 3, 20, 3, 1, 20, 3, 1, [0, 89, "GG"], 1, [0, 83, "Gra"], 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 1, [0, 57, "VE"], 20, 3, 1, 1, 20, 20, 20, 1, [0, 51, "XBZ"], 20, 3, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20 [...]
+#V   n = 204
+[ ,, 3, 3, 3, 1, [6, 92], 3, 3, 20, 3, 1, 2, 3, 20, 3, 20, 3, [0, 81, "CZ"], 1, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 3, 20, 3, 20, 1, 1, 20, 20, 20, 3, 20, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 2 [...]
+#V   n = 205
+[ ,, 2, 2, 1, [6, 31], 3, 2, 1, 1, 2, 20, [0, 94, "EB1"], 1, 2, 3, 1, 2, 3, 20, [0, 80, "Sab"], 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 20, [0, 60, "Dup"], 3, 20, 1, [0, 55, "Gra"], 20, 1, 1, 20, 20, 3, 20, 3, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, [4, 50], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 2 [...]
+#V   n = 206
+[ ,, [6, 3], [6, 11], [6, 20], 3, 1, 2, [0, 99, "EB2"], 1, 2, 2, 1, 2, [0, 92, "EB1"], 2, 1, [0, 85, "Gra"], 3, 20, 3, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 3, 20, 20, 3, 20, 20, 1, 2, 20, 1, [0, 51, "Gra"], 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 39, "XB"], 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 31, "XB"], 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [...]
+#V   n = 207
+[ ,, 3, 3, 3, 1, [6, 95], [0, 102, "BZ"], 3, 20, [0, 98, "EB1"], [0, 96, "BZ"], 20, [0, 94, "BZ"], 1, [0, 91, "GG"], 20, 3, 3, 20, 3, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, [0, 54, "GW2"], 20, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, [0, 35, "XB"], 20, 20, 20, 1, [0, 33, "XB"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 27, "X"], 20, [...]
+#V   n = 208
+[ ,, 2, 2, 2, 20, 3, 2, 1, 1, 2, 1, 1, 2, 20, 3, 1, 2, 1, [0, 81, "XB"], 1, 1, 1, 2, 1, 20, 1, [0, 73, "XB"], 1, 20, 1, [0, 69, "XB"], 1, 20, 1, [0, 65, "XB"], 1, 20, 1, [0, 61, "XB"], 3, 20, 1, [0, 57, "XB"], 3, 20, 20, 20, 3, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 31, "Gra"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20 [...]
+#V   n = 209
+[ ,, [6, 6], [6, 14], [6, 23], 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 3, 1, [0, 87, "Gra"], 2, 3, 20, 1, 2, [0, 78, "LLX"], 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 2, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20,  [...]
+#V   n = 210
+[ ,, 3, 3, 3, [6, 31], 20, [5, 7], [0, 101, "EB2"], 20, [0, 100, "EB1"], 20, 20, [0, 96, "BZ"], [0, 94, "EB1"], 2, 20, 3, [0, 84, "CZ"], 2, 20, 20, [0, 80, "DaH"], 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, [0, 54, "GW2"], 20, 3, 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, [0, 42, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 3, 20, 2 [...]
+#V   n = 211
+[ ,, 3, 3, 3, 3, 20, 3, 3, 20, 3, 20, 20, 3, 1, [0, 93, "GG"], 20, 3, 1, [0, 83, "XB"], 2, 20, 1, [0, 79, "Gra"], 20, 20, 1, [0, 75, "XB"], 20, 20, 1, [0, 71, "XB"], 20, 20, 1, [0, 67, "XB"], 1, 20, 1, [0, 63, "XB"], 20, 20, 1, [0, 59, "XB"], 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 212
+[ ,, 2, 3, 2, 1, 1, 2, 1, 1, 2, 2, 20, 1, 2, 3, 20, 3, 20, 3, [0, 82, "MTS"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 1, 1, 20, 3, 20, 20, 20, 3, [0, 57, "Gra"], 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 213
+[ ,, [6, 3], 2, [6, 27], [6, 31], 1, [0, 105, "Bel"], [0, 103, "EB2"], 1, 2, [0, 98, "BZ"], 20, 20, [0, 96, "EB1"], 2, 20, 3, 2, 3, 2, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 1, 1, 1, 1, 2, 1, 20, 20, 3, 3, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 214
+[ ,, 3, [6, 4], 3, 3, 20, 3, 3, 20, [0, 102, "EB1"], 1, [0, 97, "XB"], 20, 1, [0, 95, "GG"], [0, 89, "XB"], 3, [0, 86, "GW2"], 1, 2, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 1, 2, 1, 1, 20, 3, 1, 1, 20, 20, 20, 1, [0, 55, "XB"], 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20 [...]
+#V   n = 215
+[ ,, 2, 3, 2, 1, 1, 2, 1, 1, 2, 2, 3, 20, 20, 3, 3, 3, 2, 20, [0, 84, "MTS"], 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 2, [0, 63, "Gra"], 1, 1, 1, 1, 1, 1, 20, 20, 20, 3, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, [0, 42, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1,  [...]
+#V   n = 216
+[ ,, [6, 6], 2, [6, 30], 20, 1, [0, 107, "Bel"], 20, 1, 2, [0, 100, "BZ"], 1, [0, 97, "GG"], 20, 3, 2, 1, 2, 1, 2, 20, 1, 2, 1, 20, 1, 2, 1, 20, 1, 2, 1, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 1, [0, 59, "Gra"], 1, 2, 20, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, [0, 34, "BZ"], 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 217
+[ ,, 3, [6, 7], 3, [6, 31], 20, 3, 2, 20, [0, 104, "EB1"], 2, 20, 3, 20, 3, [0, 91, "XB"], 20, [0, 88, "GW2"], 1, 2, 1, 20, [0, 82, "LLX"], 1, 1, 20, [0, 78, "LLX"], 1, 1, 20, [0, 74, "LLX"], 1, 1, 20, [0, 70, "LLX"], 20, 20, 20, [0, 68, "Dup"], 1, 1, 20, [0, 62, "LLX"], 20, 3, 20, [0, 58, "LLX"], 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20 [...]
+#V   n = 218
+[ ,, 3, 3, 3, 3, 20, 3, [0, 106, "JS"], 20, 3, 2, 20, 3, 20, 3, 3, 20, 3, 20, [0, 86, "MTS"], 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 20, 3, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1 [...]
+#V   n = 219
+[ ,, 2, 3, 3, 1, 1, 2, 1, 1, 2, [0, 102, "BZ"], 1, 2, 20, 3, 3, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 220
+[ ,, [6, 3], 2, 1, [6, 31], 1, [0, 109, "Bel"], [0, 107, "EB2"], 1, 2, 2, 1, [0, 99, "GG"], 20, 3, 2, 20, 20, [0, 88, "CZ"], 2, 20, 20, [0, 84, "LLX"], 1, 20, 20, [0, 80, "LLX"], 2, 20, 20, [0, 76, "LLX"], 20, 20, 20, [0, 72, "LLX"], 1, 20, 20, 3, 20, 20, 20, [0, 64, "LLX"], 1, 20, 20, [0, 60, "LLX"], 1, 1, 20, [0, 56, "BZ"], 20, 20, 20, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, [...]
+#V   n = 221
+[ ,, 3, [6, 11], 20, 3, 20, 3, 3, 20, [0, 106, "EB1"], 2, 20, 3, 20, 3, [0, 93, "XB"], 1, 20, 1, 2, 1, 20, 3, 1, 1, 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 1, 2, 20, 3, 20, 20, 20, 3, 1, 2, 20, 3, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 222
+[ ,, 2, 3, [6, 5], 1, 1, 2, 1, 1, 2, [0, 104, "BZ"], 2, 3, 1, 2, 3, 1, 1, 20, [0, 88, "GW2"], 1, [21, 10, 1], 1, [21, 10, 2], 1, [21, 10, 3], 1, [21, 10, 4], 2, 20, 3, 20, 20, 20, 1, 1, 2, 20, 3, 20, 20, 20, 3, 20, [0, 62, "GW2"], 20, 3, 20, 20, [0, 58, "GW2"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, 20, [...]
+#V   n = 223
+[ ,, [6, 6], 2, 3, 20, 1, 2, 20, 1, 2, 2, 2, 2, 1, [0, 97, "GG"], 2, 20, 1, 2, 3, 20, 3, 20, 3, 20, 3, 20, 3, 2, 20, 3, 20, 20, 20, 20, 1, [0, 71, "Dup"], 20, 3, [0, 65, "VE"], 20, 20, 3, 20, 3, 20, 3, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 2 [...]
+#V   n = 224
+[ ,, 3, [6, 14], 2, 20, 20, [5, 7], 2, 20, [0, 108, "EB1"], 2, 2, [0, 101, "GG"], 20, 3, 2, [0, 91, "GG1"], 20, [0, 90, "MTS"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 20, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 3, 20, 3, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1,  [...]
+#V   n = 225
+[ ,, 3, 3, [6, 15], 20, 20, 3, [0, 110, "Gu9"], 20, 3, [0, 106, "BZ"], [0, 104, "BZ"], 3, 20, 3, [0, 96, "BZ"], 3, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 20, 20, 20, 20, 3, 20, 3, 2, 20, 20, 3, 20, 3, 20, 1, 2, 20, 20, [0, 58, "BZ"], 20, 20, 20, [0, 56, "BZ"], 20, 20, 20, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1,  [...]
+#V   n = 226
+[ ,, 2, 3, 3, [6, 37], 20, 3, 1, 1, 2, 2, 3, 2, 1, 2, 3, 1, 1, 20, [0, 90, "MTS"], 20, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 20, 20, 3, 20, 1, [0, 67, "VE"], 1, 20, 1, [0, 63, "Vx"], 3, 20, 20, [0, 60, "Vx"], 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, [...]
+#V   n = 227
+[ ,, [6, 3], 3, 3, 3, 20, 1, [0, 111, "EB2"], 1, 2, 2, 1, [0, 103, "GG"], 1, [0, 99, "GG"], 3, [0, 93, "PD"], 1, 2, 3, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 20, 20, 3, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, 1, 2, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1 [...]
+#V   n = 228
+[ ,, 3, 2, 2, 1, 1, 20, 3, 20, [0, 110, "EB1"], [0, 108, "BZ"], 20, 3, 20, 3, 2, 3, 20, [0, 92, "MTS"], 2, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, [0, 77, "XB"], [0, 76, "BY"], 20, 1, [0, 73, "XB"], 20, 3, 1, [0, 69, "XB"], 3, 20, 1, [0, 65, "XB"], 3, 20, 1, [0, 61, "XB"], 3, 20, 20, 20, 20, [0, 58, "GW2"], 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 48, "XBZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20 [...]
+#V   n = 229
+[ ,, 2, [6, 4], [6, 15], [6, 47], 1, [0, 113, "Bel"], 1, 1, 2, 2, [0, 105, "XB"], 3, 20, 3, [0, 97, "XB"], 1, 1, 1, 2, [0, 89, "XB"], 20, 20, 20, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 3, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 230
+[ ,, [6, 6], 3, 3, 3, 20, 3, 20, 1, 2, 2, 3, 3, 1, 2, 3, 20, 1, 2, [0, 92, "MTS"], 3, 20, 20, 20, 20, 1, 1, 1, 2, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 50, "XBZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [...]
+#V   n = 231
+[ ,, 3, 2, 2, 1, 1, 2, 20, 20, [0, 112, "EB1"], [0, 110, "BZ"], 3, 3, 1, [0, 101, "GG"], 2, 1, 20, [0, 94, "MTS"], 2, 3, 20, 20, 20, 20, 20, 1, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, [0, 61, "Gra"], 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, [...]
+#V   n = 232
+[ ,, 3, [6, 7], [6, 15], 20, 1, [0, 115, "Bel"], 20, 20, 3, 2, 2, 3, 20, 3, [0, 99, "XB"], 1, 1, 1, 2, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, [0, 80, "BZ"], 1, 20, 20, [0, 76, "BZ"], 1, 20, 20, [0, 72, "BZ"], 1, 20, 20, [0, 68, "BZ"], 1, 20, 20, [0, 64, "BZ"], 3, 20, 20, [0, 60, "BZ"], 20, 20, [0, 58, "BZ"], 20, 20, 20, [0, 56, "BZ"], 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 2 [...]
+#V   n = 233
+[ ,, 2, 3, 3, [6, 44], 20, 3, 20, 20, 1, 2, [0, 107, "Gra"], 1, 1, 2, 3, 20, 1, 2, [0, 94, "MTS"], 2, 20, 20, 20, 20, 20, 20, 20, [0, 88, "MYI"], 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 2, 20, 3, 3, 20, 20, 1, 1, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [...]
+#V   n = 234
+[ ,, [6, 3], 3, 3, 3, 20, 3, [7, 459], 20, 20, [0, 112, "BZ"], 3, 20, 1, [0, 103, "GG"], 3, 2, 20, [0, 96, "MTS"], 2, [0, 92, "BZ"], 2, 20, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [...]
+#V   n = 235
+[ ,, 3, 2, 3, 1, 1, 2, 3, 20, 20, 3, 3, [0, 105, "GG"], 20, 3, 2, 2, 20, 1, 2, 2, [0, 90, "B2x"], 20, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20 [...]
+#V   n = 236
+[ ,, 2, [6, 11], 1, [6, 47], 1, [0, 117, "Bel"], 2, 20, 20, 3, 2, 3, 20, 3, [0, 101, "XB"], [0, 99, "GG1"], 1, 20, [0, 96, "MTS"], 2, 1, 1, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 1, 1, 20, 20, 1, 1, 20, 1, [0, 57, "XB"], 20, [0, 56, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1,  [...]
+#V   n = 237
+[ ,, [6, 6], 3, [6, 20], 3, 20, 3, 2, [7, 462], 20, 3, 2, 3, 20, 3, 3, 3, 1, 2, 3, [0, 94, "BZ"], 1, 1, 2, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [...]
+#V   n = 238
+[ ,, 3, 2, 3, 1, 1, 2, [0, 116, "GB5"], 3, 20, 3, 2, 2, 20, 3, 2, 1, 1, 2, 2, 2, 1, 1, 2, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 239
+[ ,, 3, [6, 14], 2, 20, 1, 2, 3, 1, 2, 1, 2, [0, 107, "GG"], 1, 1, 2, 2, 1, [0, 99, "GG1"], 2, 2, 1, 1, 2, 20, 20, 20, 20, 3, 1, [4, 16], 1, [21, 14, 2], 1, [21, 14, 3], 1, [21, 14, 4], 1, [21, 14, 5], 1, [21, 14, 6], 1, [21, 15, 7], 1, [21, 16, 7], 2, 2, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 1, 2, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [...]
+#V   n = 240
+[ ,, 2, 3, [6, 23], 20, 20, [5, 7], 2, 20, [0, 114, "EB1"], 20, [0, 112, "BZ"], 3, 1, [0, 105, "GG1"], [0, 104, "BZ"], 2, 20, 3, 2, [0, 96, "BZ"], 1, 1, 2, 20, 20, 20, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 2, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 1, 1, 20, 20, [0, 60, "BZ"], 20, [0, 58, "BZ"], 20, 20, [0, 56, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, [...]
+#V   n = 241
+[ ,, [6, 3], 3, 3, [6, 52], 20, 3, 2, 2, 3, 20, 3, 3, 20, 3, 1, [0, 103, "GG1"], 1, 1, 2, 3, 20, 1, [0, 93, "MYI"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 20, 20, 3, 20, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, [...]
+#V   n = 242
+[ ,, 3, 3, 3, 3, 20, 3, [0, 118, "Ja2"], [7, 473], 2, 20, 3, 1, 1, 1, [0, 105, "PD"], 3, 1, 2, [0, 100, "MTS"], 3, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 2 [...]
+#V   n = 243
+[ ,, 2, 2, 2, 1, 1, 2, 2, 1, 2, [0, 113, "GG1"], 3, [0, 109, "GG"], 1, [0, 107, "GG1"], 3, 1, 1, 2, 2, 3, 20, 20, 3, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20,  [...]
+#V   n = 244
+[ ,, [6, 6], [6, 4], [6, 27], [6, 55], 1, [0, 121, "Bel"], 2, 20, [0, 116, "EB1"], 3, 2, 3, 20, 3, 1, 2, 1, [0, 103, "GG1"], 2, 1, 1, 20, 3, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, [0, 58, "BZ"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20,  [...]
+#V   n = 245
+[ ,, 3, 3, 3, 3, 20, 3, [0, 120, "JS"], [0, 117, "EB2"], 3, 1, [0, 113, "XB"], 1, 1, 1, 1, 2, 20, 3, [0, 102, "MTS"], 20, 1, [4, 10], 1, [21, 10, 1], 1, [21, 10, 2], 1, [21, 10, 3], 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20 [...]
+#V   n = 246
+[ ,, 3, 2, 2, 1, 1, 2, 3, 3, 3, 20, 3, [0, 111, "GG"], 1, [0, 109, "GG1"], 1, [0, 107, "GG1"], 1, 2, 2, [0, 97, "XB"], 20, 3, 20, 3, 20, 3, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, [...]
+#V   n = 247
+[ ,, 2, [6, 7], [6, 30], 20, 1, 2, 3, 2, 1, [0, 115, "XB"], 3, 3, 20, 3, 20, 3, 1, 2, 2, 3, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 2 [...]
+#V   n = 248
+[ ,, [6, 3], 3, 3, [6, 59], 20, [5, 7], 1, [0, 119, "EB2"], 2, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1,  [...]
+#V   n = 249
+[ ,, 3, 3, 3, 3, 20, 3, 2, 3, [0, 118, "EB1"], 1, [0, 115, "XB"], 20, 1, [4, 6], 1, [21, 6, 1], 1, [21, 6, 2], 2, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 20, 20, 3, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2 [...]
+#V   n = 250
+[ ,, 2, 2, 3, 1, 1, 2, 2, 3, 2, 20, 3, 20, 20, 3, 20, 3, 20, 3, 2, [0, 99, "XB"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20,  [...]
+#V   n = 251
+[ ,, [6, 6], [6, 11], 1, [6, 62], 1, 2, 2, 1, 2, [21, 4, 1], 3, 20, 20, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 252
+[ ,, 3, 3, 20, 3, 20, [5, 7], 2, 20, [0, 120, "GB6"], 3, 2, 20, 20, 20, 1, 1, 1, 1, 2, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1,  [...]
+#V   n = 253
+[ ,, 3, 2, [6, 5], 1, 1, 1, 2, 2, 3, 1, 2, [0, 113, "GG"], 20, 20, 20, 1, 1, 1, 2, 2, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20 [...]
+#V   n = 254
+[ ,, 2, [6, 14], 3, 20, 1, 1, 2, [7, 497], 1, 1, 2, 3, 20, 20, 20, 20, 1, 1, 2, 2, 20, 1, 2, 2, 20, 20, 20, 20, 1, 1, 2, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 1, 2, 20, 20, 1, [...]
+#V   n = 255
+[ ,, [6, 3], 3, 2, 20, 20, 1, 2, 2, 20, 1, 2, 1, 1, 20, 20, 20, 20, 1, 2, 2, 20, 20, [0, 100, "Lun"], [0, 98, "Dup"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, [0, 90, "BCH"], 20, 20, 20, 20, 20, 1, 2, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, [0, 65, "Gra"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, [0, 61, "BCH"], 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20,  [...]
+#V   n = 256
+[ ,, 3, 3, [6, 15], 20, 20, 20, [5, 8], [7, 501], 20, 20, [0, 120, "XBC"], 20, 1, 1, 20, 20, 20, 20, [0, 112, "XBC"], [0, 104, "GW2"], 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, [0, 96, "Rod"], 20, 20, 20, [0, 92, "XBC"], 2, 20, 20, 20, 20, 20, 20, [0, 88, "XBC"], 20, [0, 86, "XBC"], [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 3, 20, 20, 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, 20, 20, 20, 20, 3, 20, [0, 58, "BZ"], 20, 20, 20, 20, 20, [0, 56, "XBC"], 20, 20, 20, 20, 20, [...]
+#V   n = 257
+[ ,, 3, 3, 3, 20, 20, 20, 3, 3, [0, 121, "EB1"], 20, 3, 20, 20, 3, [0, 113, "Dup"], 20, 20, 20, 3, 3, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, [0, 91, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 87, "X"], 3, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, [0, 63, "BE3"], 20, 20, 20, 20, 20, 20, 3, 20, 3, [0, 57, "BZ"], 20, 20, 20, 20, 3, [0, 55, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 53, "X"], 20, 20, 3, [0, 49, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 47, "X"], 20, 20, 20,  [...]
+#V   n = 258
+[ , 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, [...]
+
+
+GUAVA_BOUNDS_TABLE[2][2] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ , [15, 2]],
+#V   n = 5
+[ , [15, 3], [15, 2]],
+#V   n = 6
+[ , [15, 4], [15, 3], [15, 2]],
+#V   n = 7
+[ , [15, 4], [15, 4], [15, 3], [15, 2]],
+#V   n = 8
+[ , [15, 5], [15, 4], [15, 4], [14, 4], [15, 2]],
+#V   n = 9
+[ , [15, 6], [15, 4], [15, 4], 12, 11, [15, 2]],
+#V   n = 10
+[ , [15, 6], [15, 5], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 11
+[ , [15, 7], [15, 6], [15, 5], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 12
+[ , [15, 8], [15, 6], [15, 6], [0, 4, "FP"], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 13
+[ , [15, 8], [15, 7], [15, 6], 12, [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 14
+[ , [15, 9], [15, 8], [15, 7], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 15
+[ , [15, 10], [15, 8], [15, 8], [15, 7], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]],
+#V   n = 16
+[ , [15, 10], [15, 8], [15, 8], [15, 8], [16, 6], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], [14, 8], 11, [15, 2]],
+#V   n = 17
+[ , [15, 11], [15, 9], [15, 8], [15, 8], [16, 7], [16, 6], [15, 6], [16, 5], [16, 4], [15, 4], 12, 11, 11, [15, 2]],
+#V   n = 18
+[ , [15, 12], [15, 10], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [15, 6], 13, [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 19
+[ , [15, 12], [15, 10], [15, 9], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [14, 6], 11, [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 20
+[ , [15, 13], [15, 11], [15, 10], [15, 9], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], 11, 11, [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 21
+[ , [15, 14], [15, 12], [15, 10], [15, 10], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 22
+[ , [15, 14], [15, 12], [15, 11], [15, 10], [16, 9], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [16, 5], [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 23
+[ , [15, 15], [15, 12], [15, 12], [15, 11], [15, 10], [16, 9], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [16, 5], [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 24
+[ , [15, 16], [15, 13], [15, 12], [15, 12], [16, 10], [15, 10], 13, [16, 8], [15, 8], [15, 8], [15, 8], [16, 6], [16, 6], 13, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 25
+[ , [15, 16], [15, 14], [15, 12], [15, 12], [16, 11], [16, 10], [0, 9, "YH1"], 11, [16, 8], [15, 8], [15, 8], 13, [16, 6], [0, 5, "Si"], 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 26
+[ , [15, 17], [15, 14], [15, 13], [15, 12], [15, 12], [16, 11], [16, 10], 11, 11, [16, 8], [15, 8], [0, 7, "Pu2"], 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 27
+[ , [15, 18], [15, 15], [15, 14], [15, 13], [15, 12], [15, 12], 13, [16, 10], 11, [16, 8], [16, 8], [15, 8], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 28
+[ , [15, 18], [15, 16], [15, 14], [15, 14], [0, 12, "BM"], [15, 12], [0, 11, "DM"], 11, [16, 10], 13, [16, 8], [16, 8], [15, 8], 13, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 29
+[ , [15, 19], [15, 16], [15, 15], [15, 14], 12, [16, 12], [15, 12], 11, 11, [0, 9, "Ja"], 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 30
+[ , [15, 20], [15, 16], [15, 16], [15, 15], [15, 14], 13, [16, 12], [15, 12], 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 31
+[ , [15, 20], [15, 17], [15, 16], [15, 16], [15, 15], [0, 13, "vT3"], 11, [16, 12], [15, 12], [16, 11], [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]],
+#V   n = 32
+[ , [15, 21], [15, 18], [15, 16], [15, 16], [15, 16], [16, 14], 11, 11, [16, 12], [15, 12], 13, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], [14, 16], 11, 11, [15, 2]],
+#V   n = 33
+[ , [15, 22], [15, 18], [15, 16], [15, 16], [15, 16], 13, [16, 14], [0, 12, "He"], 11, [16, 12], [0, 11, "Ja"], 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, [15, 2]],
+#V   n = 34
+[ , [15, 22], [15, 19], [15, 17], [15, 16], [15, 16], [0, 15, "vT3"], 11, 12, 11, 11, [16, 12], 13, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], [0, 4, "BoV"], 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 35
+[ , [15, 23], [15, 20], [15, 18], [15, 16], [15, 16], [15, 16], 11, 11, 11, 11, 11, [0, 11, "Ja"], 11, 11, [16, 10], [0, 8, "Ja"], [16, 8], [16, 8], [16, 8], 11, 11, 11, 12, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 36
+[ , [15, 24], [15, 20], [15, 18], [15, 17], [15, 16], [15, 16], [15, 16], [0, 14, "Ja"], 11, 11, 11, 11, 11, 11, [16, 10], 12, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 37
+[ , [15, 24], [15, 20], [15, 19], [15, 18], [15, 17], [15, 16], [15, 16], 12, 11, 11, 11, 11, [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 38
+[ , [15, 25], [15, 21], [15, 20], [15, 18], [15, 18], [16, 16], [15, 16], [15, 16], 13, 11, 11, 13, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 39
+[ , [15, 26], [15, 22], [15, 20], [15, 19], [15, 18], [16, 17], [16, 16], [15, 16], [0, 15, "Bou"], 11, 11, [0, 13, "Ja"], 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 40
+[ , [15, 26], [15, 22], [15, 20], [15, 20], [0, 18, "BM"], [15, 18], 13, [16, 16], [15, 16], 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 41
+[ , [15, 27], [15, 23], [15, 21], [15, 20], 12, [16, 18], [0, 17, "BJV"], [16, 16], [16, 16], [15, 16], 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 13, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 42
+[ , [15, 28], [15, 24], [15, 22], [15, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [15, 16], 13, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 13, 11, [16, 10], 11, 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 43
+[ , [15, 28], [15, 24], [15, 22], [15, 21], [15, 20], [15, 20], 13, [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "Ja"], 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 11, "Ja"], 11, 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 44
+[ , [15, 29], [15, 24], [15, 23], [15, 22], [15, 21], [15, 20], [0, 19, "DM"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], 13, [16, 12], [16, 12], 11, 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 45
+[ , [15, 30], [15, 25], [15, 24], [15, 22], [15, 22], [16, 20], [15, 20], [16, 19], [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [0, 13, "Ja"], 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 46
+[ , [15, 30], [15, 26], [15, 24], [15, 23], [15, 22], [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 47
+[ , [15, 31], [15, 26], [15, 24], [15, 24], [15, 23], [15, 22], [16, 21], [16, 20], [15, 20], 13, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 48
+[ , [15, 32], [15, 27], [15, 24], [15, 24], [15, 24], [16, 22], [15, 22], [16, 20], [16, 20], [0, 19, "Ja"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 13, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 49
+[ , [15, 32], [15, 28], [15, 25], [15, 24], [15, 24], [16, 23], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "Ja"], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], 13, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 50
+[ , [15, 33], [15, 28], [15, 26], [15, 24], [15, 24], [15, 24], [16, 23], 12, 11, [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [14, 14], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 51
+[ , [15, 34], [15, 28], [15, 26], [15, 25], [15, 24], [15, 24], [15, 24], [16, 22], 11, 11, [16, 20], [16, 20], [0, 18, "Ja"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 52
+[ , [15, 34], [15, 29], [15, 27], [15, 26], [15, 25], [15, 24], [15, 24], 13, [16, 22], 11, 11, [16, 20], 12, 11, [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 53
+[ , [15, 35], [15, 30], [15, 28], [15, 26], [15, 26], [16, 24], [15, 24], [0, 23, "Bro"], 11, [16, 22], 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 54
+[ , [15, 36], [15, 30], [15, 28], [15, 27], [15, 26], 13, [16, 24], [15, 24], 11, 11, [16, 22], 13, [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 13, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 55
+[ , [15, 36], [15, 31], [15, 28], [15, 28], [15, 27], [0, 25, "vT4"], [16, 24], [16, 24], [15, 24], 11, 11, [0, 21, "Ja"], [16, 20], [16, 20], [16, 20], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 56
+[ , [15, 37], [15, 32], [15, 29], [15, 28], [15, 28], [16, 26], 13, [16, 24], [16, 24], [15, 24], 13, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 57
+[ , [15, 38], [15, 32], [15, 30], [15, 28], [15, 28], 13, [0, 25, "BJV"], 11, [16, 24], [16, 24], [0, 23, "Ja"], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 58
+[ , [15, 38], [15, 32], [15, 30], [15, 29], [15, 28], [0, 27, "vT3"], [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 13, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 59
+[ , [15, 39], [15, 33], [15, 31], [15, 30], [15, 29], [15, 28], 13, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 13, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], [0, 10, "Ja"], 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [14, 24], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 60
+[ , [15, 40], [15, 34], [15, 32], [15, 30], [15, 30], [0, 28, "Hel"], [0, 27, "BJV"], 11, [16, 26], 13, [16, 24], [16, 24], 12, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [0, 19, "Ja"], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [14, 16], [16, 12], [16, 12], 12, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 61
+[ , [15, 40], [15, 34], [15, 32], [15, 31], [15, 30], 12, [16, 28], 11, [16, 26], [14, 4], 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 12, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 62
+[ , [15, 41], [15, 35], [15, 32], [15, 32], [15, 31], [15, 30], [16, 28], [16, 28], [16, 27], [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 63
+[ , [15, 42], [15, 36], [15, 32], [15, 32], [15, 32], [15, 31], [0, 28, "BJV"], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]],
+#V   n = 64
+[ , [15, 42], [15, 36], [15, 33], [15, 32], [15, 32], [15, 32], 12, 11, [16, 28], 12, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], [14, 16], 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], [14, 32], 11, 11, 11, [15, 2]],
+#V   n = 65
+[ , [15, 43], [15, 36], [15, 34], [15, 32], [15, 32], [15, 32], [16, 30], 11, [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], 12, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 12, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, 11, [15, 2]],
+#V   n = 66
+[ , [15, 44], [15, 37], [15, 34], [15, 32], [15, 32], [15, 32], 13, [16, 30], 13, [16, 28], [16, 28], 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]],
+#V   n = 67
+[ , [15, 44], [15, 38], [15, 35], [15, 33], [15, 32], [15, 32], [0, 31, "DHM"], 11, [0, 29, "Ja"], [16, 28], [16, 28], [16, 28], [16, 27], [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]],
+#V   n = 68
+[ , [15, 45], [15, 38], [15, 36], [15, 34], [15, 32], [15, 32], [15, 32], 13, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], [16, 26], [0, 24, "Ja"], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, 11, [16, 10], [0, 8, "Ja"], [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4 [...]
+#V   n = 69
+[ , [15, 46], [15, 39], [15, 36], [15, 34], [15, 33], [15, 32], [15, 32], [0, 31, "BGV"], 11, [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, [16, 26], 12, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, 11, 12, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11 [...]
+#V   n = 70
+[ , [15, 46], [15, 40], [15, 36], [15, 35], [15, 34], [15, 33], [15, 32], [15, 32], 11, [16, 30], [16, 30], 13, [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], [0, 10, "Ja"], 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], [0, 6, "Ja"], 11, 11, 11, 11, 11 [...]
+#V   n = 71
+[ , [15, 47], [15, 40], [15, 37], [15, 36], [15, 34], [15, 34], [16, 32], [15, 32], [15, 32], [16, 31], [16, 30], [0, 29, "Ja"], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 12, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 12, 11, 11, 11, 11, 11, 11, [16 [...]
+#V   n = 72
+[ , [15, 48], [15, 40], [15, 38], [15, 36], [15, 35], [15, 34], 13, [16, 32], [15, 32], [15, 32], 13, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16,  [...]
+#V   n = 73
+[ , [15, 48], [15, 41], [15, 38], [15, 36], [15, 36], [0, 34, "Hel"], [0, 33, "BJV"], [16, 32], [16, 32], [15, 32], [0, 31, "Ja"], 11, [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 13, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [...]
+#V   n = 74
+[ , [15, 49], [15, 42], [15, 39], [15, 37], [15, 36], 12, [16, 34], [16, 33], [16, 32], [16, 32], [15, 32], 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], [0, 19, "Bro"], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [0, 12, "Ja"], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11,  [...]
+#V   n = 75
+[ , [15, 50], [15, 42], [15, 40], [15, 38], [15, 36], [15, 36], 13, [16, 34], [16, 33], [16, 32], [16, 32], [15, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], 11, [16, 22], 12, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 12, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11 [...]
+#V   n = 76
+[ , [15, 50], [15, 43], [15, 40], [15, 38], [15, 37], [15, 36], [0, 35, "BJV"], [16, 34], [16, 34], [14, 4], [16, 32], [16, 32], [15, 32], [0, 30, "Ja"], [16, 30], [16, 30], [0, 28, "Ja"], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 12, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 1 [...]
+#V   n = 77
+[ , [15, 51], [15, 44], [15, 40], [15, 39], [15, 38], [16, 36], [15, 36], [16, 35], [16, 34], 12, 11, [16, 32], [16, 32], 12, 11, [16, 30], 12, [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4 [...]
+#V   n = 78
+[ , [15, 52], [15, 44], [15, 40], [15, 40], [15, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], 11, [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], [0, 14, "Ja"], 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [...]
+#V   n = 79
+[ , [15, 52], [15, 44], [15, 41], [15, 40], [15, 39], [15, 38], 13, [16, 36], [15, 36], [0, 34, "Ja"], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [0, 24, "Ja"], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [0, 16, "Ja"], [16, 16], [16, 16], 12, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, [...]
+#V   n = 80
+[ , [15, 53], [15, 45], [15, 42], [15, 40], [15, 40], [16, 38], [0, 37, "BJV"], [16, 36], [16, 36], 12, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], [0, 30, "Ja"], [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], 11, [16, 26], 12, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], 12, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], [0, 10, "Ja"], 11, 11, [16, 10], 11, 11, [16, 8],  [...]
+#V   n = 81
+[ , [15, 54], [15, 46], [15, 42], [15, 40], [15, 40], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 12, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], 12, 11, 11, 11, [16, 10], [0, 8, "Ja"], 11, [16, 8], [16, 8], 11, 11, 11, 11,  [...]
+#V   n = 82
+[ , [15, 54], [15, 46], [15, 43], [15, 41], [15, 40], [15, 40], 13, [16, 38], 13, [16, 36], [16, 36], [16, 35], [16, 34], [16, 34], 13, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [0, 18, "Ja"], 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], 11, 11, 11, 11, 12, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6] [...]
+#V   n = 83
+[ , [15, 55], [15, 47], [15, 44], [15, 42], [15, 40], [15, 40], [0, 39, "DHM"], [16, 38], [0, 37, "Ja"], 11, [16, 36], [16, 36], [16, 35], [16, 34], [14, 6], 11, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], 13, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], 12, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], [0, 12, "Ja"], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [ [...]
+#V   n = 84
+[ , [15, 56], [15, 48], [15, 44], [15, 42], [15, 41], [15, 40], [15, 40], [16, 39], [16, 38], 11, [16, 36], [16, 36], [16, 36], [0, 34, "Ja"], [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, [16, 30], [0, 29, "Bro"], 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], 12, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 12, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16,  [...]
+#V   n = 85
+[ , [15, 56], [15, 48], [15, 44], [15, 43], [15, 42], [0, 40, "Hel"], [15, 40], [15, 40], [0, 38, "Ja"], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, [16, 34], 11, [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, [16, 16], [16, 16], [16, 16], 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 1 [...]
+#V   n = 86
+[ , [15, 57], [15, 48], [15, 45], [15, 44], [15, 42], 12, [16, 40], [15, 40], 12, 11, [16, 38], [0, 36, "Ja"], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 13, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, [...]
+#V   n = 87
+[ , [15, 58], [15, 49], [15, 46], [15, 44], [15, 43], [15, 42], 13, [16, 40], [15, 40], [0, 38, "Ja"], [16, 38], 12, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 13, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [0, 23, "Bro"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 88
+[ , [15, 58], [15, 50], [15, 46], [15, 44], [15, 44], [0, 42, "Hel"], [0, 41, "BJV"], 11, [16, 40], 12, 11, [16, 38], 11, [16, 36], [16, 36], [16, 36], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [0, 31, "Bro"], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], 13, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 13, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11,  [...]
+#V   n = 89
+[ , [15, 59], [15, 50], [15, 47], [15, 45], [15, 44], 12, [16, 42], 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 13, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], [0, 25, "Bro"], 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "BK"], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [...]
+#V   n = 90
+[ , [15, 60], [15, 51], [15, 48], [15, 46], [15, 44], [15, 44], 13, [16, 42], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [0, 35, "LP"], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 13, 11, [16, 18], [16, 18], 13, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, [...]
+#V   n = 91
+[ , [15, 60], [15, 52], [15, 48], [15, 46], [15, 45], [15, 44], [0, 43, "DMa"], 11, [16, 41], [16, 40], [16, 40], [16, 40], 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], 13, [16, 32], [16, 32], 11, 11, 11, [16, 30], 13, 11, [16, 28], [16, 28], 13, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [0, 19, "BK"], 11, 11, [16, 18], [0, 17, "Jo2"], 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12 [...]
+#V   n = 92
+[ , [15, 61], [15, 52], [15, 48], [15, 47], [15, 46], [15, 45], [15, 44], 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 13, [16, 38], [16, 38], 13, [16, 36], [16, 36], 13, 11, [16, 34], [0, 33, "Bro"], 11, [16, 32], [16, 32], 11, 11, 11, [0, 29, "Bro"], 11, 11, [16, 28], [0, 27, "Bro"], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12] [...]
+#V   n = 93
+[ , [15, 62], [15, 52], [15, 48], [15, 48], [15, 46], [15, 46], [16, 44], [15, 44], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [0, 39, "Bro"], 11, [16, 38], [0, 37, "Bro"], 11, [16, 36], [0, 35, "Bro"], 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 13, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, [...]
+#V   n = 94
+[ , [15, 62], [15, 53], [15, 49], [15, 48], [15, 47], [15, 46], 13, [16, 44], [16, 43], [16, 42], [16, 42], [0, 40, "Ja"], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [0, 31, "Bro"], 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], 13, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, [...]
+#V   n = 95
+[ , [15, 63], [15, 54], [15, 50], [15, 48], [15, 48], [15, 47], [0, 45, "DHM"], 11, [16, 44], 13, [16, 42], 12, [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, [16, 22], [0, 21, "BK"], 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 13, 11, 11, 11, 11, 11, [...]
+#V   n = 96
+[ , [15, 64], [15, 54], [15, 50], [15, 48], [15, 48], [15, 48], [16, 46], [0, 44, "Ja"], [16, 44], [0, 43, "Bro"], 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 13, [16, 36], [16, 36], 11, 11, 11, [16, 34], 13, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 13, 11, [16, 24], [0, 23, "LP"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 13, 11, [16, 12],  [...]
+#V   n = 97
+[ , [15, 64], [15, 55], [15, 51], [15, 48], [15, 48], [15, 48], 13, 12, [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 13, 11, [0, 37, "Bro"], 11, [16, 36], [16, 36], 13, 11, 11, [0, 33, "Bro"], 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 13, 11, 11, [0, 25, "Bro"], 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 13, 11, 11, [0, 13, "BK"], 11, 11, [16, 12], 11, 11, [...]
+#V   n = 98
+[ , [15, 65], [15, 56], [15, 52], [15, 49], [15, 48], [15, 48], [0, 47, "DM"], 11, 13, [16, 44], [16, 44], 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [0, 39, "Bro"], 11, 11, 11, 11, [16, 36], [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [0, 27, "Bro"], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, [16, 16], [16, 16], [0, 15, "LP"], 11, 11, 11, 11, 11, 11, [16, 12], 11,  [...]
+#V   n = 99
+[ , [15, 66], [15, 56], [15, 52], [15, 50], [15, 48], [15, 48], [15, 48], 13, [0, 45, "Ja"], 11, [16, 44], [16, 44], [0, 42, "Ja"], [16, 42], [16, 42], 13, [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 13, 11, 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11,  [...]
+#V   n = 100
+[ , [15, 66], [15, 56], [15, 52], [15, 50], [15, 49], [15, 48], [15, 48], [0, 47, "Bro"], [16, 46], 11, 11, [16, 44], 12, 11, [16, 42], [0, 41, "Bro"], 11, [16, 40], [16, 40], 13, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [0, 31, "Bro"], 11, 11, 11, [16, 30], 13, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 13, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11 [...]
+#V   n = 101
+[ , [15, 67], [15, 57], [15, 53], [15, 51], [15, 50], [15, 49], [15, 48], [15, 48], 13, [16, 46], 11, [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [0, 39, "Bro"], 11, 11, [16, 38], 13, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, [0, 29, "Bro"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [0, 19, "Jo2"], 11, 11, [16, 18], [16, 18], 13, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11 [...]
+#V   n = 102
+[ , [15, 68], [15, 58], [15, 54], [15, 52], [15, 50], [15, 50], [16, 48], [15, 48], [0, 47, "Bro"], 11, [16, 46], [0, 44, "Ja"], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, [0, 37, "Bro"], 11, 11, [16, 36], 11, 11, 11, [16, 34], 13, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 13, [16, 20], [16, 20], 11, 11, 11, [16, 18], [0, 17, "LP"], 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 103
+[ , [15, 68], [15, 58], [15, 54], [15, 52], [15, 51], [15, 50], [16, 48], [16, 48], [15, 48], 13, 11, 12, 11, [16, 44], [16, 44], 13, 11, [16, 42], 13, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 13, 11, 11, [0, 33, "Bro"], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 21, "BK"], 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, [...]
+#V   n = 104
+[ , [15, 69], [15, 59], [15, 55], [15, 52], [15, 52], [15, 51], [16, 49], [16, 48], [16, 48], [0, 47, "Ja"], 11, [16, 46], 11, [16, 44], [16, 44], [0, 43, "Bro"], 11, 11, [0, 41, "Bro"], 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [...]
+#V   n = 105
+[ , [15, 70], [15, 60], [15, 56], [15, 53], [15, 52], [15, 52], [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 11, 11, [16, 40], [16, 40], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [0, 23, "BK"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 1 [...]
+#V   n = 106
+[ , [15, 70], [15, 60], [15, 56], [15, 54], [15, 52], [15, 52], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 13, [16, 44], [16, 44], 11, 11, 11, 11, 11, [16, 40], [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, [16, 26], 13, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11 [...]
+#V   n = 107
+[ , [15, 71], [15, 60], [15, 56], [15, 54], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 13, [16, 46], [0, 45, "Bro"], 11, [16, 44], [16, 44], 13, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 13, 11, [16, 28], [0, 27, "LP"], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 1 [...]
+#V   n = 108
+[ , [15, 72], [15, 61], [15, 56], [15, 55], [15, 54], [15, 53], [15, 52], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [0, 47, "Ja"], 11, [16, 46], 11, 11, [16, 44], [0, 43, "Bro"], 11, 11, [16, 42], 13, 11, [16, 40], 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [16, 32], 13, 11, 11, [0, 29, "LP"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 13 [...]
+#V   n = 109
+[ , [15, 72], [15, 62], [15, 57], [15, 56], [15, 54], [15, 54], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, [16, 44], [16, 44], 11, 11, 11, [0, 41, "Bro"], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 33, "Bro"], 11, 11, 11, [0, 31, "Bro"], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [0, 15, "BK"], 11, [...]
+#V   n = 110
+[ , [15, 73], [15, 62], [15, 58], [15, 56], [15, 55], [15, 54], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 13, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 13, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 13, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, [...]
+#V   n = 111
+[ , [15, 74], [15, 63], [15, 58], [15, 56], [15, 56], [15, 55], [16, 53], [16, 52], [16, 52], [0, 50, "Ja"], [16, 50], [16, 49], [16, 48], [16, 48], [0, 47, "Bro"], 11, 11, [16, 46], 13, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, [16, 36], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 21, "BK"], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 13, 11, [16, 16],  [...]
+#V   n = 112
+[ , [15, 74], [15, 64], [15, 59], [15, 56], [15, 56], [15, 56], [16, 54], [16, 52], [16, 52], 12, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 45, "Bro"], 11, [16, 44], [16, 44], 13, 11, 11, 13, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 13, 11, 11, [0, 17, "BK"], 11, 11, [16, 16], 11, 11, [...]
+#V   n = 113
+[ , [15, 75], [15, 64], [15, 60], [15, 57], [15, 56], [15, 56], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], [0, 43, "Bro"], 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, 11, 11, 11, 11, [16, 20], [0, 19, "Jo2"], 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 114
+[ , [15, 76], [15, 64], [15, 60], [15, 58], [15, 56], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], 13, [16, 48], [16, 48], 11, 11, [16, 46], 13, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 13, 11, [16, 24], [0, 23, "BK"], 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [ [...]
+#V   n = 115
+[ , [15, 76], [15, 65], [15, 60], [15, 58], [15, 57], [15, 56], [15, 56], [16, 54], [16, 54], 13, [16, 52], [16, 52], 13, [16, 50], [0, 49, "Bro"], 11, [16, 48], [16, 48], 13, 11, [0, 45, "Bro"], 11, 11, [16, 44], 13, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, [...]
+#V   n = 116
+[ , [15, 77], [15, 66], [15, 61], [15, 59], [15, 58], [15, 57], [15, 56], [16, 55], [16, 54], [0, 53, "Ja"], [16, 52], [16, 52], [0, 51, "Ja"], 11, [16, 50], 11, 11, [16, 48], [0, 47, "Bro"], 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, [16, 40], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 13, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 16], 11,  [...]
+#V   n = 117
+[ , [15, 78], [15, 66], [15, 62], [15, 60], [15, 58], [15, 58], [16, 56], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], 11, 11, [16, 50], 11, [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, [0, 31, "LP"], 11, 11, 11, 11, 13, 11, [16, 28], [0, 27, "BK"], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 16], 11, 11 [...]
+#V   n = 118
+[ , [15, 78], [15, 67], [15, 62], [15, 60], [15, 59], [15, 58], 13, [16, 56], [15, 56], 13, [16, 54], 13, [16, 52], [16, 52], 13, 11, [16, 50], [16, 49], [16, 48], [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 35, "Bro"], 11, 11, 11, [0, 33, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 29, "BK"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 1 [...]
+#V   n = 119
+[ , [15, 79], [15, 68], [15, 63], [15, 60], [15, 60], [15, 59], [0, 57, "DMa"], [16, 56], [16, 56], [0, 55, "Bro"], [16, 54], [0, 53, "Ja"], 11, [16, 52], [0, 51, "Bro"], 11, 11, [16, 50], 13, [16, 48], [0, 47, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 1 [...]
+#V   n = 120
+[ , [15, 80], [15, 68], [15, 64], [15, 61], [15, 60], [15, 60], [16, 58], [16, 56], [16, 56], [16, 56], 13, [16, 54], 11, 11, [16, 52], 11, 11, [16, 50], [0, 49, "Bro"], 11, [16, 48], 11, 11, 11, [0, 45, "Bro"], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 13, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16] [...]
+#V   n = 121
+[ , [15, 80], [15, 68], [15, 64], [15, 62], [15, 60], [15, 60], 13, [16, 57], [16, 56], [16, 56], [0, 55, "Bro"], 11, [16, 54], 11, [16, 52], [16, 52], 13, 11, [16, 50], 13, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 13, 11, 11, [0, 21, "BK"], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [0, 1 [...]
+#V   n = 122
+[ , [15, 81], [15, 69], [15, 64], [15, 62], [15, 61], [15, 60], 13, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], 13, [16, 52], [0, 51, "Bro"], 11, 11, [0, 49, "Bro"], 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [0, 23, "LP"], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [0, 16, "Jopl [...]
+#V   n = 123
+[ , [15, 82], [15, 70], [15, 64], [15, 63], [15, 62], [15, 61], [0, 59, "BJV"], [16, 58], [16, 58], [16, 56], [16, 56], [16, 56], 13, 11, [0, 53, "Bro"], 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 13, 11, 11, 12, 11, 11, [16, 16], 11 [...]
+#V   n = 124
+[ , [15, 82], [15, 70], [15, 65], [15, 64], [15, 62], [15, 62], 12, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [0, 55, "Ja"], 11, [16, 54], 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [0, 47, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, [16, 26], 13, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [0, 19, "BK"], 11, 11, 11, 11, 11, 11 [...]
+#V   n = 125
+[ , [15, 83], [15, 71], [15, 66], [15, 64], [15, 63], [15, 62], 12, [16, 60], 13, [16, 58], 13, [16, 56], [16, 56], 11, 11, [16, 54], 13, [16, 52], [16, 52], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [0, 27, "BK"], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11,  [...]
+#V   n = 126
+[ , [15, 84], [15, 72], [15, 66], [15, 64], [15, 64], [15, 63], [15, 62], [16, 60], [0, 59, "Ja"], [16, 58], [0, 57, "Ja"], 11, [16, 56], [16, 56], 13, 11, [0, 53, "Bro"], 11, [16, 52], [0, 51, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, [16, 32], 11, 11, 11, 11, 13, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [1 [...]
+#V   n = 127
+[ , [15, 84], [15, 72], [15, 67], [15, 64], [15, 64], [15, 64], [15, 63], [16, 60], [16, 60], [16, 59], [16, 58], 11, [16, 56], [16, 56], [0, 55, "Bro"], 11, 11, 11, 11, [16, 52], 11, 11, 11, [0, 49, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "BK"], 11, 11, 11, [0, 33, "LP"], 11, 11, 11, [16, 32], 11, 11, 11, [0, 29, "BK"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [ [...]
+#V   n = 128
+[ , [15, 85], [15, 72], [15, 68], [15, 64], [15, 64], [15, 64], [15, 64], [16, 61], [16, 60], [16, 60], 13, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 13, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16],  [...]
+#V   n = 129
+[ , [15, 86], [15, 73], [15, 68], [15, 65], [15, 64], [15, 64], [15, 64], [16, 62], [16, 60], [16, 60], [0, 59, "Ja"], 11, [16, 58], [16, 57], [16, 56], [16, 56], 13, 11, [16, 54], 13, 11, [0, 51, "BK"], 11, 11, 11, 13, 11, 11, [0, 47, "LP"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 39, "LP"], 11, 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 31, "LP"], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 130
+[ , [15, 86], [15, 74], [15, 68], [15, 66], [15, 64], [15, 64], [15, 64], [16, 62], [16, 61], [16, 60], [16, 60], 11, [16, 58], [16, 58], 13, [16, 56], [0, 55, "BK"], 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, [0, 49, "BK"], 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 13, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11 [...]
+#V   n = 131
+[ , [15, 87], [15, 74], [15, 69], [15, 66], [15, 64], [15, 64], [15, 64], 13, [16, 62], [0, 60, "Ja"], [16, 60], [16, 60], 13, [16, 58], [0, 57, "BK"], 11, [16, 56], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [0, 23, "LP"], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, 11, [ [...]
+#V   n = 132
+[ , [15, 88], [15, 75], [15, 70], [15, 67], [15, 65], [15, 64], [15, 64], [0, 63, "Gur"], [16, 62], 12, 11, [16, 60], [0, 59, "Ja"], 11, [16, 58], 13, 11, [16, 56], 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 13, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11 [...]
+#V   n = 133
+[ , [15, 88], [15, 76], [15, 70], [15, 68], [15, 66], [15, 64], [15, 64], [15, 64], [16, 63], [16, 62], [0, 60, "Ja"], [16, 60], [16, 60], 11, 11, [0, 57, "LP"], 11, [16, 56], [16, 56], 13, 11, 11, 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 25, "LP"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 2 [...]
+#V   n = 134
+[ , [15, 89], [15, 76], [15, 71], [15, 68], [15, 66], [15, 65], [15, 64], [15, 64], [15, 64], [0, 62, "Ja"], 12, 11, [16, 60], [16, 60], 13, 11, 11, 11, [16, 56], [0, 55, "BK"], 11, 11, 11, 11, 11, [0, 51, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], [...]
+#V   n = 135
+[ , [15, 90], [15, 76], [15, 72], [15, 68], [15, 67], [15, 66], [15, 65], [15, 64], [15, 64], 12, 11, 11, 11, [16, 60], [0, 59, "BK"], 11, 11, 11, 11, [16, 56], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 49, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], [0, 18, "Jo" [...]
+#V   n = 136
+[ , [15, 90], [15, 77], [15, 72], [15, 69], [15, 68], [15, 66], [15, 66], [16, 64], [15, 64], [15, 64], [0, 62, "Ja"], [16, 62], 11, 11, [16, 60], 13, 11, [16, 58], 11, 11, [0, 55, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], 12, 11 [...]
+#V   n = 137
+[ , [15, 91], [15, 78], [15, 72], [15, 70], [15, 68], [15, 67], [15, 66], [16, 64], [16, 64], [15, 64], 12, 11, [16, 62], 11, [16, 60], [0, 59, "BK"], 11, 11, [16, 58], 13, 11, 11, 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11,  [...]
+#V   n = 138
+[ , [15, 92], [15, 78], [15, 72], [15, 70], [15, 68], [15, 68], [0, 66, "Hel"], [16, 65], [16, 64], [16, 64], [15, 64], 11, 11, [16, 62], 13, [16, 60], 11, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], [0, 20, " [...]
+#V   n = 139
+[ , [15, 92], [15, 79], [15, 73], [15, 71], [15, 69], [15, 68], 12, [16, 66], [16, 65], [16, 64], [16, 64], [15, 64], 13, 11, [0, 61, "BK"], 11, [16, 60], 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, [0, 51, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 12, 11, 11, [16, [...]
+#V   n = 140
+[ , [15, 93], [15, 80], [15, 74], [15, 72], [15, 70], [15, 68], [15, 68], [16, 66], [16, 66], [16, 65], [16, 64], [16, 64], [0, 63, "Ja"], 11, [16, 62], 13, 11, [16, 60], 11, 11, [0, 57, "BK"], 11, 11, [16, 56], 13, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16 [...]
+#V   n = 141
+[ , [15, 94], [15, 80], [15, 74], [15, 72], [15, 70], [15, 69], [15, 68], [16, 67], [16, 66], [16, 66], [16, 64], [16, 64], [16, 64], 11, 11, [0, 61, "BK"], 11, [16, 60], [16, 60], 13, 11, 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24],  [...]
+#V   n = 142
+[ , [15, 94], [15, 80], [15, 75], [15, 72], [15, 71], [15, 70], [16, 68], [15, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], [16, 64], 13, 11, 11, 11, [16, 60], [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, [...]
+#V   n = 143
+[ , [15, 95], [15, 81], [15, 76], [15, 72], [15, 72], [15, 70], [16, 69], [16, 68], [15, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], [0, 63, "BK"], 11, 11, 11, 11, [16, 60], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24 [...]
+#V   n = 144
+[ , [15, 96], [15, 82], [15, 76], [15, 73], [15, 72], [15, 71], [15, 70], [16, 68], [16, 68], [15, 68], [16, 66], [16, 66], [16, 65], [16, 64], [16, 64], 13, 11, [16, 62], 11, 11, [0, 59, "BK"], 11, 11, 11, 13, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11,  [...]
+#V   n = 145
+[ , [15, 96], [15, 82], [15, 76], [15, 74], [15, 72], [15, 72], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 66], [16, 65], [16, 64], [0, 63, "BK"], 11, 11, [16, 62], 13, 11, 13, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, [...]
+#V   n = 146
+[ , [15, 97], [15, 83], [15, 77], [15, 74], [15, 72], [15, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 66], 13, [16, 64], 13, 11, 11, [0, 61, "BK"], 11, [0, 59, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 2 [...]
+#V   n = 147
+[ , [15, 98], [15, 84], [15, 78], [15, 75], [15, 73], [15, 72], [15, 72], [16, 70], [16, 70], [0, 68, "Ja"], [16, 68], [16, 68], [0, 66, "Ja"], [16, 66], [0, 65, "BK"], [16, 64], [0, 63, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16 [...]
+#V   n = 148
+[ , [15, 98], [15, 84], [15, 78], [15, 76], [15, 74], [15, 72], [15, 72], [16, 71], [16, 70], 12, [16, 68], [16, 68], 12, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, [0, 61, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], [...]
+#V   n = 149
+[ , [15, 99], [15, 84], [15, 79], [15, 76], [15, 74], [15, 73], [15, 72], [15, 72], [16, 71], [16, 70], [0, 68, "Ja"], [16, 68], [16, 68], 11, 11, [16, 66], 13, [16, 64], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30],  [...]
+#V   n = 150
+[ , [15, 100], [15, 85], [15, 80], [15, 76], [15, 75], [15, 74], [16, 72], [15, 72], [15, 72], [0, 70, "Ja"], 12, 11, [16, 68], [16, 68], 13, [16, 66], 13, 11, [16, 64], 11, 11, [0, 61, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16,  [...]
+#V   n = 151
+[ , [15, 100], [15, 86], [15, 80], [15, 77], [15, 76], [15, 74], [16, 73], [16, 72], [15, 72], 12, [16, 70], 11, 11, [16, 68], [0, 67, "BK"], 11, [0, 65, "BK"], 11, 11, [16, 64], 13, 11, 11, 11, 11, [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11 [...]
+#V   n = 152
+[ , [15, 101], [15, 86], [15, 80], [15, 78], [15, 76], [15, 75], [15, 74], [16, 72], [16, 72], [15, 72], [0, 70, "Ja"], [16, 70], 11, 11, [16, 68], 13, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32 [...]
+#V   n = 153
+[ , [15, 102], [15, 87], [15, 80], [15, 78], [15, 76], [15, 76], [16, 74], [16, 73], [16, 72], [16, 72], 12, 11, [16, 70], 11, [16, 68], [0, 67, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], [14, 22], 11, 11, [16, 46], 13, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32] [...]
+#V   n = 154
+[ , [15, 102], [15, 88], [15, 81], [15, 79], [15, 77], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 13, 11, [16, 70], 13, [16, 68], 13, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 13, 11, [0, 59, "BK"], 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 13, 11, 11, 12, 11, 11, 11, [14, 24], 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16 [...]
+#V   n = 155
+[ , [15, 103], [15, 88], [15, 82], [15, 80], [15, 78], [15, 76], [15, 76], [16, 74], [16, 74], [16, 72], [16, 72], [0, 71, "Ja"], 11, 11, [0, 69, "BK"], 11, [0, 67, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 61, "BK"], 11, 11, 11, 11, 11, [0, 57, "BK"], 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [14, 20], 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [ [...]
+#V   n = 156
+[ , [15, 104], [15, 88], [15, 82], [15, 80], [15, 78], [15, 77], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], 13, 11, 11, 11, 11, [0, 65, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], [16, 33], [16, [...]
+#V   n = 157
+[ , [15, 104], [15, 89], [15, 83], [15, 80], [15, 79], [15, 78], [16, 76], [15, 76], [16, 75], [16, 74], [0, 72, "Ja"], [16, 72], [16, 72], 11, 11, [0, 69, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], [...]
+#V   n = 158
+[ , [15, 105], [15, 90], [15, 84], [15, 80], [15, 80], [15, 78], [16, 77], [16, 76], [15, 76], [16, 74], 12, 11, [16, 72], [16, 72], 13, 11, 13, 11, [16, 68], 11, 11, [0, 65, "BK"], 11, 11, 11, 13, 11, [0, 61, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16 [...]
+#V   n = 159
+[ , [15, 106], [15, 90], [15, 84], [15, 80], [15, 80], [15, 79], [15, 78], [16, 76], [16, 76], [16, 75], [16, 74], 11, [16, 72], [16, 72], [0, 71, "BK"], 11, [0, 69, "BK"], 11, 11, [16, 68], 11, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [14, 20], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 1 [...]
+#V   n = 160
+[ , [15, 106], [15, 91], [15, 84], [15, 81], [15, 80], [15, 80], [16, 78], [16, 77], [16, 76], [16, 76], 13, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, 11, [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, [16, 36], [16, 36], [16, 36], 11, 11, [...]
+#V   n = 161
+[ , [15, 107], [15, 92], [15, 85], [15, 82], [15, 80], [15, 80], [16, 79], [16, 78], [16, 77], [16, 76], [0, 75, "Ja"], 11, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, [16, 40], [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 37] [...]
+#V   n = 162
+[ , [15, 108], [15, 92], [15, 86], [15, 82], [15, 80], [15, 80], [15, 80], [16, 78], [16, 78], [16, 76], [16, 76], [0, 74, "Ja"], [16, 74], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], 13, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11,  [...]
+#V   n = 163
+[ , [15, 108], [15, 92], [15, 86], [15, 83], [15, 81], [15, 80], [15, 80], [16, 79], [16, 78], 13, [16, 76], 12, 11, [16, 74], [16, 74], 13, [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [14, 30], 11, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16 [...]
+#V   n = 164
+[ , [15, 109], [15, 93], [15, 87], [15, 84], [15, 82], [15, 80], [15, 80], [15, 80], 13, [0, 77, "Ja"], [16, 76], [16, 76], 11, 11, [16, 74], [14, 6], 11, [16, 72], [16, 72], 11, [16, 70], 11, 11, [16, 68], [16, 68], [14, 10], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16,  [...]
+#V   n = 165
+[ , [15, 110], [15, 94], [15, 88], [15, 84], [15, 82], [15, 81], [15, 80], [15, 80], [0, 79, "Gur"], [16, 78], [0, 76, "Ja"], [16, 76], [16, 76], 11, 11, [16, 74], 11, [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], 11, 11, [16, 68], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, [16, 42], [16, 42], [14, 34], [16, 40] [...]
+#V   n = 166
+[ , [15, 110], [15, 94], [15, 88], [15, 84], [15, 83], [15, 82], [16, 80], [15, 80], [15, 80], [0, 78, "Ja"], 12, 11, [16, 76], [16, 76], 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [14, 8], [16, 70], 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 12, 11, [16,  [...]
+#V   n = 167
+[ , [15, 111], [15, 95], [15, 88], [15, 85], [15, 84], [15, 82], [16, 81], [16, 80], [15, 80], 12, [16, 78], 11, 11, [16, 76], [16, 76], 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], 12, 11, [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, 11, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [...]
+#V   n = 168
+[ , [15, 112], [15, 96], [15, 88], [15, 86], [15, 84], [15, 83], [15, 82], [16, 80], [16, 80], [15, 80], [0, 78, "Ja"], [16, 78], [0, 76, "Ja"], 11, [16, 76], [16, 76], 13, [16, 74], [16, 74], 13, [16, 72], [16, 72], 13, 11, [16, 70], [14, 10], [16, 68], [16, 68], 11, 11, 11, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 44 [...]
+#V   n = 169
+[ , [15, 112], [15, 96], [15, 89], [15, 86], [15, 84], [15, 84], [16, 82], [16, 81], [16, 80], [16, 80], 12, 11, 12, 11, [16, 76], [16, 76], 13, 11, [16, 74], 13, [16, 72], [16, 72], 13, 11, [16, 70], 12, 11, [16, 68], [16, 68], 11, 11, 11, [14, 12], 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16 [...]
+#V   n = 170
+[ , [15, 113], [15, 96], [15, 90], [15, 87], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [0, 78, "Ja"], 11, 11, 11, [16, 76], 13, 11, 11, 13, 11, [16, 72], 13, 11, 11, [16, 70], 11, 11, [16, 68], [16, 68], 11, 11, 12, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 4 [...]
+#V   n = 171
+[ , [15, 114], [15, 97], [15, 90], [15, 88], [15, 86], [15, 84], [15, 84], [16, 82], [16, 82], [16, 80], [16, 80], 12, 11, 11, 11, 11, [0, 75, "BK"], 11, 11, [0, 73, "BK"], 11, 11, [0, 71, "BK"], 11, 11, 11, [16, 70], 11, 11, [16, 68], [16, 68], 13, 11, 11, 11, 11, [16, 64], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11,  [...]
+#V   n = 172
+[ , [15, 114], [15, 98], [15, 91], [15, 88], [15, 86], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, [16, 78], 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, [16, 68], [16, 68], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], [...]
+#V   n = 173
+[ , [15, 115], [15, 98], [15, 92], [15, 88], [15, 87], [15, 86], [16, 84], [15, 84], [16, 83], [16, 82], [0, 80, "Ja"], [16, 80], [16, 80], 11, 11, [0, 77, "BK"], 11, [0, 75, "BK"], 11, 11, 11, 13, 11, 11, 13, 11, 11, 11, [16, 70], [16, 69], [16, 68], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, [...]
+#V   n = 174
+[ , [15, 116], [15, 99], [15, 92], [15, 88], [15, 88], [15, 86], [16, 85], [16, 84], [15, 84], [16, 82], 12, 11, [16, 80], [16, 80], 13, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, [0, 71, "BK"], 11, 11, 11, 11, [16, 70], [16, 69], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [...]
+#V   n = 175
+[ , [15, 116], [15, 100], [15, 92], [15, 89], [15, 88], [15, 87], [15, 86], [16, 84], [16, 84], [16, 83], [16, 82], 13, [16, 80], [16, 80], [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [0, 67, "BK"], 11, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11,  [...]
+#V   n = 176
+[ , [15, 117], [15, 100], [15, 93], [15, 90], [15, 88], [15, 88], [16, 86], [16, 85], [16, 84], [16, 84], [0, 82, "Ja"], [0, 81, "Ja"], 11, [16, 80], [16, 80], 13, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, 11, 13, 11, 11, 11, [16, 70], 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16,  [...]
+#V   n = 177
+[ , [15, 118], [15, 100], [15, 94], [15, 90], [15, 88], [15, 88], [16, 87], [16, 86], 13, [16, 84], 12, 11, 11, 11, [16, 80], [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, [16, 76], 13, 11, 11, 11, 11, [0, 71, "BK"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [ [...]
+#V   n = 178
+[ , [15, 118], [15, 101], [15, 94], [15, 91], [15, 89], [15, 88], [15, 88], [16, 86], [0, 85, "Ja"], [16, 84], [16, 84], [0, 82, "Ja"], [16, 82], 11, 11, [16, 80], 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 13, 11, 11, 11, 11, 11, 11, [16, 56], 13, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, [16, 46],  [...]
+#V   n = 179
+[ , [15, 119], [15, 102], [15, 95], [15, 92], [15, 90], [15, 88], [15, 88], [16, 87], [16, 86], [16, 85], [16, 84], 12, 11, [16, 82], 11, 11, [0, 79, "BK"], 11, 11, 11, 11, [0, 75, "BK"], 11, 11, 11, 13, 11, [0, 71, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [...]
+#V   n = 180
+[ , [15, 120], [15, 102], [15, 96], [15, 92], [15, 90], [15, 89], [15, 88], [15, 88], [0, 86, "Ja"], [16, 86], [16, 84], [16, 84], 11, 11, [16, 82], 13, [16, 80], 13, 11, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 4 [...]
+#V   n = 181
+[ , [15, 120], [15, 103], [15, 96], [15, 92], [15, 91], [15, 90], [0, 88, "Hel"], [15, 88], 12, [16, 86], [0, 84, "Ja"], [16, 84], [16, 84], 11, 11, [0, 81, "BK"], 11, [0, 79, "BK"], 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 48], [16, 48], [16, 4 [...]
+#V   n = 182
+[ , [15, 121], [15, 104], [15, 96], [15, 93], [15, 92], [15, 90], 12, [16, 88], [15, 88], [0, 86, "Ja"], 12, 11, [16, 84], [16, 84], 13, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46 [...]
+#V   n = 183
+[ , [15, 122], [15, 104], [15, 96], [15, 94], [15, 92], [15, 91], [15, 90], [16, 88], [16, 88], 12, [16, 86], 13, 11, [16, 84], [0, 83, "BK"], 11, [0, 81, "BK"], 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16 [...]
+#V   n = 184
+[ , [15, 122], [15, 104], [15, 97], [15, 94], [15, 92], [15, 92], [0, 90, "Hel"], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], [0, 85, "Ja"], 11, [16, 84], [16, 84], 13, 11, 13, 11, [16, 80], 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, [16, 50], [16, 50], [16, 49], [16, 4 [...]
+#V   n = 185
+[ , [15, 123], [15, 105], [15, 98], [15, 95], [15, 93], [15, 92], 12, [16, 90], [16, 88], [16, 88], 12, 11, 11, 11, [16, 84], [0, 83, "BK"], 11, [0, 81, "BK"], 11, 11, [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49] [...]
+#V   n = 186
+[ , [15, 124], [15, 106], [15, 98], [15, 96], [15, 94], [15, 92], [15, 92], [16, 90], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], 11, 11, 11, [16, 84], 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [...]
+#V   n = 187
+[ , [15, 124], [15, 106], [15, 99], [15, 96], [15, 94], [15, 93], [15, 92], [0, 90, "Ja"], [16, 90], [16, 88], [16, 88], 12, 11, [16, 86], 11, 11, [0, 83, "BK"], 11, 11, 11, 11, [0, 79, "BK"], 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50 [...]
+#V   n = 188
+[ , [15, 125], [15, 107], [15, 100], [15, 96], [15, 95], [15, 94], [15, 93], 12, [16, 90], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], 11, [16, 86], 13, [16, 84], 13, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [1 [...]
+#V   n = 189
+[ , [15, 126], [15, 108], [15, 100], [15, 96], [15, 96], [15, 94], [15, 94], [16, 92], [16, 91], [16, 90], [0, 88, "Ja"], [16, 88], 12, 11, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, [0, 81, "BK"], 11, [0, 79, "BK"], 11, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], 13, [16, 52],  [...]
+#V   n = 190
+[ , [15, 126], [15, 108], [15, 100], [15, 96], [15, 96], [15, 95], [15, 94], [16, 92], [16, 92], [16, 90], 12, 11, [16, 88], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [14, 32], 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16,  [...]
+#V   n = 191
+[ , [15, 127], [15, 108], [15, 101], [15, 97], [15, 96], [15, 96], [15, 95], [0, 92, "Ja"], [16, 92], [16, 91], [16, 90], [0, 88, "Ja"], [16, 88], [16, 88], 11, 11, [16, 86], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [...]
+#V   n = 192
+[ , [15, 128], [15, 109], [15, 102], [15, 98], [15, 96], [15, 96], [15, 96], 12, [16, 92], [16, 92], 13, 12, 11, [16, 88], [16, 88], 11, 11, [16, 86], 13, [16, 84], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [ [...]
+#V   n = 193
+[ , [15, 128], [15, 110], [15, 102], [15, 98], [15, 96], [15, 96], [15, 96], [16, 94], [0, 92, "Ja"], [16, 92], [0, 91, "BK"], 11, 11, 11, [16, 88], [16, 88], 13, 11, 13, 11, [16, 84], 13, 11, 13, 11, 11, 13, 11, 11, 11, 13, 11, 11, [16, 76], 11, 11, 11, 11, [14, 14], 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [...]
+#V   n = 194
+[ , [15, 129], [15, 110], [15, 103], [15, 99], [15, 96], [15, 96], [15, 96], 13, 12, [16, 92], [16, 92], 13, [16, 90], 11, 11, [16, 88], 13, 11, [0, 85, "BK"], 11, 11, 13, 11, [0, 81, "BK"], 11, 11, [0, 79, "BK"], 11, 11, 11, 13, 11, 11, 11, [16, 76], 11, 11, 11, 12, 11, 11, [16, 72], [14, 16], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [14, 20], 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 5 [...]
+#V   n = 195
+[ , [15, 130], [15, 111], [15, 104], [15, 100], [15, 97], [15, 96], [15, 96], [0, 95, "BG3"], [16, 94], [16, 93], [16, 92], [0, 90, "Ja"], 11, [16, 90], 11, [16, 88], 13, 11, 11, 11, 11, [0, 83, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 70], [16, 70], [16, 68], 12, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54 [...]
+#V   n = 196
+[ , [15, 130], [15, 112], [15, 104], [15, 100], [15, 98], [15, 96], [15, 96], [15, 96], [0, 94, "Ja"], [16, 94], [16, 92], 12, 11, 11, [16, 90], 13, [0, 87, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 79, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16 [...]
+#V   n = 197
+[ , [15, 131], [15, 112], [15, 104], [15, 100], [15, 98], [15, 97], [15, 96], [15, 96], 12, [16, 94], [0, 92, "Ja"], [16, 92], 11, 11, 11, [0, 89, "BK"], 11, 11, 11, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [ [...]
+#V   n = 198
+[ , [15, 132], [15, 112], [15, 104], [15, 101], [15, 99], [15, 98], [15, 97], [15, 96], [15, 96], [16, 95], 12, 11, [16, 92], 11, 11, [16, 90], 13, 11, 11, 11, 11, 13, 11, 13, 11, 11, [0, 81, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 13, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16,  [...]
+#V   n = 199
+[ , [15, 132], [15, 113], [15, 105], [15, 102], [15, 100], [15, 98], [15, 98], [16, 96], [15, 96], [15, 96], [16, 94], [0, 92, "Ja"], 11, [16, 92], 11, 11, 13, 11, 11, 13, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, [14, 24], 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56],  [...]
+#V   n = 200
+[ , [15, 133], [15, 114], [15, 106], [15, 102], [15, 100], [15, 99], [15, 98], [16, 96], [16, 96], [15, 96], [0, 94, "Ja"], 12, 11, [16, 92], [16, 92], 13, [0, 89, "BK"], 11, 11, [0, 87, "BK"], 11, 11, 13, 11, 11, 11, 11, [0, 81, "BK"], 11, 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 12, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11 [...]
+#V   n = 201
+[ , [15, 134], [15, 114], [15, 106], [15, 103], [15, 100], [15, 100], [0, 98, "Hel"], [16, 97], [16, 96], [16, 96], 12, 11, 11, 11, [16, 92], [0, 91, "BK"], 11, 13, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11,  [...]
+#V   n = 202
+[ , [15, 134], [15, 115], [15, 107], [15, 104], [15, 101], [15, 100], 12, [16, 98], [16, 96], [16, 96], [16, 96], 13, 11, 11, 11, [16, 92], 13, [0, 89, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16,  [...]
+#V   n = 203
+[ , [15, 135], [15, 116], [15, 108], [15, 104], [15, 102], [15, 100], [15, 100], [16, 98], [16, 97], [16, 96], [16, 96], [0, 95, "BK"], 11, [16, 94], 11, [16, 92], 13, 11, 11, 11, 11, [0, 87, "BK"], 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 13, 11, [16, 60], 11, 11, 11, 11, 11,  [...]
+#V   n = 204
+[ , [15, 136], [15, 116], [15, 108], [15, 104], [15, 102], [15, 101], [15, 100], [16, 99], [16, 98], [16, 97], [16, 96], [16, 96], 13, 11, [16, 94], 13, [0, 91, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, [...]
+#V   n = 205
+[ , [15, 136], [15, 116], [15, 108], [15, 104], [15, 103], [15, 102], [0, 100, "Hel"], [15, 100], [16, 98], [16, 98], [16, 97], [16, 96], [0, 95, "BK"], 11, 11, [0, 93, "BK"], 11, 13, 11, 11, 11, 11, [0, 87, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 1 [...]
+#V   n = 206
+[ , [15, 137], [15, 117], [15, 109], [15, 105], [15, 104], [15, 102], 12, [16, 100], [16, 99], [16, 98], [16, 98], [16, 96], [16, 96], 11, 11, [16, 94], 13, [0, 91, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 207
+[ , [15, 138], [15, 118], [15, 110], [15, 106], [15, 104], [15, 103], [15, 102], [16, 100], [16, 100], [16, 99], [16, 98], [16, 97], [16, 96], [16, 96], 11, 11, 13, 11, 11, 11, 11, [0, 89, "BK"], 11, [0, 87, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 1 [...]
+#V   n = 208
+[ , [15, 138], [15, 118], [15, 110], [15, 106], [15, 104], [15, 104], [0, 102, "Hel"], [16, 101], [16, 100], [16, 100], [16, 99], [16, 98], 13, [16, 96], [16, 96], 13, [0, 93, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 209
+[ , [15, 139], [15, 119], [15, 111], [15, 107], [15, 104], [15, 104], 12, [16, 102], [16, 100], [16, 100], [16, 100], [16, 98], [0, 97, "BK"], 11, [16, 96], [0, 95, "BK"], 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11,  [...]
+#V   n = 210
+[ , [15, 140], [15, 120], [15, 112], [15, 108], [15, 105], [15, 104], [15, 104], [16, 102], [16, 101], [16, 100], [16, 100], 13, [16, 98], 11, 11, [16, 96], 13, [0, 93, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 13, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 211
+[ , [15, 140], [15, 120], [15, 112], [15, 108], [15, 106], [15, 104], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [0, 99, "BK"], 11, [16, 98], 11, [16, 96], 13, 11, 11, 11, 11, [0, 91, "BK"], 11, [0, 89, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [14, 20], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 212
+[ , [15, 141], [15, 120], [15, 112], [15, 108], [15, 106], [15, 105], [15, 104], [15, 104], [16, 102], [16, 102], [16, 100], [16, 100], 11, 11, [16, 98], [16, 97], [0, 95, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 87, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 213
+[ , [15, 142], [15, 121], [15, 112], [15, 109], [15, 107], [15, 106], [15, 105], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [16, 100], 11, 11, [16, 98], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 1 [...]
+#V   n = 214
+[ , [15, 142], [15, 122], [15, 113], [15, 110], [15, 108], [15, 106], [15, 106], [16, 104], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [16, 100], 11, [16, 98], 12, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 215
+[ , [15, 143], [15, 122], [15, 114], [15, 110], [15, 108], [15, 107], [15, 106], [16, 104], [16, 104], [15, 104], [16, 102], [16, 102], 13, [16, 100], [16, 100], 13, [16, 98], 13, 11, 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 216
+[ , [15, 144], [15, 123], [15, 114], [15, 111], [15, 108], [15, 108], [15, 107], [16, 105], [16, 104], [16, 104], 13, [16, 102], 13, [16, 100], [16, 100], [0, 99, "BK"], 11, 13, 11, [16, 96], 13, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 217
+[ , [15, 144], [15, 124], [15, 115], [15, 112], [15, 109], [15, 108], [15, 108], [16, 106], [16, 104], [16, 104], [0, 103, "BK"], 11, [0, 101, "BK"], 11, [16, 100], [16, 100], 13, 13, 11, 11, 13, 11, [0, 93, "BK"], 11, [0, 91, "BK"], 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 13, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11,  [...]
+#V   n = 218
+[ , [15, 145], [15, 124], [15, 116], [15, 112], [15, 110], [15, 108], [15, 108], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, 11, 11, [16, 100], 13, [0, 97, "BK"], 11, 11, [0, 95, "BK"], 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [14, 24], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 219
+[ , [15, 146], [15, 124], [15, 116], [15, 112], [15, 110], [15, 109], [15, 108], [16, 107], [16, 106], [16, 105], [16, 104], 13, 11, [16, 102], 11, [16, 100], 13, 11, 13, 11, 11, 11, 11, [0, 93, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 220
+[ , [15, 146], [15, 125], [15, 116], [15, 112], [15, 111], [15, 110], [15, 109], [15, 108], [16, 106], [16, 106], [16, 104], [0, 103, "BK"], 11, 11, [16, 102], [16, 101], [0, 99, "BK"], 11, [0, 97, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 89, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11,  [...]
+#V   n = 221
+[ , [15, 147], [15, 126], [15, 117], [15, 112], [15, 112], [15, 110], [15, 110], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, [16, 102], 12, 13, 11, 11, 11, 11, [0, 95, "BK"], 11, [0, 93, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, [...]
+#V   n = 222
+[ , [15, 148], [15, 126], [15, 118], [15, 113], [15, 112], [15, 111], [15, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, [16, 102], 12, [0, 99, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 13, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, [...]
+#V   n = 223
+[ , [15, 148], [15, 127], [15, 118], [15, 114], [15, 112], [15, 112], [15, 111], [16, 109], [16, 108], [16, 108], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, [16, 102], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, [...]
+#V   n = 224
+[ , [15, 149], [15, 128], [15, 119], [15, 114], [15, 112], [15, 112], [15, 112], [16, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 225
+[ , [15, 150], [15, 128], [15, 120], [15, 115], [15, 112], [15, 112], [15, 112], [16, 110], [16, 109], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], [14, 6], [16, 102], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [14, 16], 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 6 [...]
+#V   n = 226
+[ , [15, 150], [15, 128], [15, 120], [15, 116], [15, 113], [15, 112], [15, 112], 13, [16, 110], [16, 109], [16, 108], [16, 108], [16, 106], [16, 106], [16, 105], [16, 104], 12, 11, [16, 102], 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 14], 11, 11, 12, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [ [...]
+#V   n = 227
+[ , [15, 151], [15, 129], [15, 120], [15, 116], [15, 114], [15, 112], [15, 112], [0, 111, "BG3"], [16, 110], [16, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, [16, 102], [16, 101], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 7 [...]
+#V   n = 228
+[ , [15, 152], [15, 130], [15, 120], [15, 116], [15, 114], [15, 113], [15, 112], [15, 112], [16, 111], [16, 110], [16, 109], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, [16, 102], 13, [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [1 [...]
+#V   n = 229
+[ , [15, 152], [15, 130], [15, 121], [15, 117], [15, 115], [15, 114], [15, 113], [15, 112], [15, 112], 13, [16, 110], [16, 108], [16, 108], [16, 108], 13, [16, 106], 13, [16, 104], 13, 11, [16, 102], 13, [16, 100], [16, 100], [14, 8], 11, [16, 98], [14, 10], 11, [16, 96], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [ [...]
+#V   n = 230
+[ , [15, 153], [15, 131], [15, 122], [15, 118], [15, 116], [15, 114], [15, 114], [16, 112], [15, 112], [0, 111, "BK"], [16, 110], 13, [16, 108], [16, 108], 13, [16, 106], 13, [16, 104], 13, 11, 11, 13, 11, [16, 100], 12, 11, 11, 12, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [14, 34], 11, [...]
+#V   n = 231
+[ , [15, 154], [15, 132], [15, 122], [15, 118], [15, 116], [15, 115], [15, 114], [16, 112], [16, 112], [15, 112], 13, [0, 109, "BK"], 11, [16, 108], [0, 107, "BK"], 11, 13, 11, 13, 11, 11, 13, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, [14, [...]
+#V   n = 232
+[ , [15, 154], [15, 132], [15, 123], [15, 119], [15, 116], [15, 116], [15, 115], [16, 113], [16, 112], [16, 112], 13, [16, 110], 11, [16, 108], [16, 108], 13, [0, 105, "BK"], 11, [0, 103, "BK"], 11, 11, [0, 101, "BK"], 11, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], [16, 96], [14, 12], 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 233
+[ , [15, 155], [15, 132], [15, 124], [15, 120], [15, 117], [15, 116], [15, 116], [16, 114], [16, 112], [16, 112], [0, 111, "BK"], 11, [16, 110], [16, 109], [16, 108], [0, 107, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], 12, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11 [...]
+#V   n = 234
+[ , [15, 156], [15, 133], [15, 124], [15, 120], [15, 118], [15, 116], [15, 116], [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, [16, 110], [16, 109], [16, 108], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11 [...]
+#V   n = 235
+[ , [15, 156], [15, 134], [15, 124], [15, 120], [15, 118], [15, 117], [15, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], 11, [16, 110], [16, 110], [16, 108], [16, 108], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 236
+[ , [15, 157], [15, 134], [15, 125], [15, 120], [15, 119], [15, 118], [15, 117], [15, 116], [16, 114], [16, 114], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], [16, 109], [16, 108], [16, 108], 11, 11, 11, [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 1 [...]
+#V   n = 237
+[ , [15, 158], [15, 135], [15, 126], [15, 121], [15, 120], [15, 118], [15, 118], [16, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], 13, [16, 108], [16, 108], 11, [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16,  [...]
+#V   n = 238
+[ , [15, 158], [15, 136], [15, 126], [15, 122], [15, 120], [15, 119], [15, 118], [16, 116], [16, 116], [16, 115], [16, 114], [16, 112], [16, 112], [16, 112], [16, 112], [16, 110], 13, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, [...]
+#V   n = 239
+[ , [15, 159], [15, 136], [15, 127], [15, 122], [15, 120], [15, 120], [15, 119], [16, 116], [16, 116], [16, 116], [16, 114], 13, [16, 112], [16, 112], [16, 112], 13, 13, 11, [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [14, 8], [16, 104], 13, 11, 11, 11, 11, [16, 100], [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [1 [...]
+#V   n = 240
+[ , [15, 160], [15, 136], [15, 128], [15, 123], [15, 120], [15, 120], [15, 120], [16, 117], [16, 116], [16, 116], [16, 115], [0, 113, "BK"], 11, [16, 112], [16, 112], [0, 111, "BK"], [0, 109, "BK"], 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], 12, 11, [14, 8], 11, 11, 11, 11, 11, [16, 100], [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 241
+[ , [15, 160], [15, 137], [15, 128], [15, 124], [15, 121], [15, 120], [15, 120], [16, 118], [16, 117], [16, 116], [16, 116], [16, 114], 11, 11, [16, 112], [16, 112], 12, 11, 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], 11, [16, 104], 11, 11, 11, 11, [14, 10], 11, [16, 100], [16, 100], [16, 100], 13, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, [...]
+#V   n = 242
+[ , [15, 161], [15, 138], [15, 128], [15, 124], [15, 122], [15, 120], [15, 120], [16, 118], [16, 118], [16, 116], [16, 116], [16, 115], [16, 114], 11, 11, [16, 112], 12, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 12, 11, 11, [16, 100], [16, 100], [14, 12], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 243
+[ , [15, 162], [15, 138], [15, 128], [15, 124], [15, 122], [15, 121], [15, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], 13, [16, 114], 11, [16, 112], [16, 112], 13, 11, 13, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, [16, 98], 13, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 244
+[ , [15, 162], [15, 139], [15, 129], [15, 125], [15, 123], [15, 122], [15, 121], [15, 120], [16, 119], [16, 118], 13, [16, 116], 13, 11, [16, 114], 13, [16, 112], 13, 11, 13, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, [14, 14], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 245
+[ , [15, 163], [15, 140], [15, 130], [15, 126], [15, 124], [15, 122], [15, 122], [16, 120], [15, 120], [16, 118], [0, 117, "BK"], [16, 116], [0, 115, "BK"], 11, 11, [0, 113, "BK"], [16, 112], [0, 111, "BK"], 11, [0, 109, "BK"], 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 246
+[ , [15, 164], [15, 140], [15, 130], [15, 126], [15, 124], [15, 123], [15, 122], 13, [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], 11, 11, [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 247
+[ , [15, 164], [15, 140], [15, 131], [15, 127], [15, 124], [15, 124], [15, 123], [0, 121, "DMa"], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], 11, 11, [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 1 [...]
+#V   n = 248
+[ , [15, 165], [15, 141], [15, 132], [15, 128], [15, 125], [15, 124], [15, 124], [16, 122], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 116], [16, 116], 11, [16, 114], [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16 [...]
+#V   n = 249
+[ , [15, 166], [15, 142], [15, 132], [15, 128], [15, 126], [15, 124], [15, 124], 13, [16, 121], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, [...]
+#V   n = 250
+[ , [15, 166], [15, 142], [15, 132], [15, 128], [15, 126], [15, 125], [15, 124], 13, [16, 122], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [14, 6], [16, 114], [16, 114], [16, 112], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24] [...]
+#V   n = 251
+[ , [15, 167], [15, 143], [15, 133], [15, 128], [15, 127], [15, 126], [15, 125], [0, 123, "Gur"], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 116], [16, 116], 12, 11, [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 252
+[ , [15, 168], [15, 144], [15, 134], [15, 128], [15, 128], [15, 126], [15, 126], 12, [16, 123], [16, 122], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], 11, 11, [16, 114], [16, 112], [16, 112], [16, 112], [14, 8], [16, 110], 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [14, 12], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 13, 11, 11, 11, 11, 11,  [...]
+#V   n = 253
+[ , [15, 168], [15, 144], [15, 134], [15, 129], [15, 128], [15, 127], [15, 126], 12, [16, 124], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 116], [16, 116], [16, 116], 11, [16, 114], [16, 113], [16, 112], [16, 112], 12, 11, [16, 110], [16, 109], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, [14, 20], 11, 11, 11, [...]
+#V   n = 254
+[ , [15, 169], [15, 144], [15, 135], [15, 130], [15, 128], [15, 128], [15, 127], [15, 126], [16, 124], [16, 123], [16, 122], [16, 120], [16, 120], [16, 120], [16, 120], [16, 118], [16, 117], [16, 116], [16, 116], [16, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, [16, 110], [14, 10], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], [...]
+#V   n = 255
+[ , [15, 170], [15, 145], [15, 136], [15, 130], [15, 128], [15, 128], [15, 128], [15, 127], [16, 124], [16, 124], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [16, 116], [16, 114], [16, 114], [16, 113], [16, 112], [16, 112], 11, [16, 110], 12, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, [...]
+#V   n = 256
+[ , [15, 170], [15, 146], [15, 136], [15, 131], [15, 128], [15, 128], [15, 128], [15, 128], [16, 124], [16, 124], [16, 123], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 113], [16, 112], [16, 112], [16, 111], [16, 110], 11, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, [...]
+#V   n = 257
+[ , [15, 171], [15, 146], [15, 136], [15, 132], [15, 128], [15, 128], [15, 128], [15, 128], [16, 125], [16, 124], [16, 124], [16, 122], [16, 122], [16, 121], [16, 120], [16, 120], [16, 119], [16, 118], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, [14, 16], 11, 11, [16, 100], [...]
diff --git a/tbl/bdtable3.g b/tbl/bdtable3.g
new file mode 100644
index 0000000..4e3a473
--- /dev/null
+++ b/tbl/bdtable3.g
@@ -0,0 +1,1015 @@
+#A  BOUNDS FOR q = 3
+##
+##  Each entry [n][k] of one of the tables below contains
+##  a bound (the first table contains lowerbounds, the
+##  second upperbounds) for a code with wordlength n and
+##  dimension k. Each entry contains one of the following
+##  items:
+##
+##  FOR LOWER- AND UPPERBOUNDSTABLE
+##  [ 0, <d>, <ref> ]  from Brouwers table
+##
+##  FOR LOWERBOUNDSTABLE
+##  empty           k= 0, 1, n or d= 2 or (k= 2 and q= 2)
+##  1               shortening a [ n + 1, k + 1 ] code
+##  2               puncturing a [ n + 1, k ] code
+##  3               extending a [ n - 1, k ] code
+##  [ 4, <dd> ]     constr. B, of a [ n+dd, k+dd-1, d ] code
+##  [ 5, <k1> ]     an UUV-construction with a [ n / 2, k1 ]
+##                  and a [ n / 2, k - k1 ] code
+##  [ 6, <n1> ]     concatenation of a [ n1, k ] and a
+##                  [ n - n1, k ] code
+##  [ 7, <n1> ]     taking the residue of a [ n1, k + 1 ] code
+##  20              taking the subcode of a [ n, k + 1 ] code
+##  [21,<s>,<j>]    constr. B2 of a [ n+s, k+s-2j-1, d+2j] code
+##  [22,<k1>,<k2>]  an UUAVUVW-construction with a [ n/3, k1 ],
+##                  a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code
+##
+##  FOR UPPERBOUNDSTABLE
+##  empty        trivial and Singleton bound
+##  11           shortening a [ n + 1, k + 1 ] code
+##  12           puncturing a [ n + 1, k ] code
+##  13           extending a [ n - 1, k ] code
+##  [ 14, <dd> ] constr. B, with dd = dual distance
+##  [ 15, <d> ]  Griesmer bound
+##  [ 16, <d> ]  One-step Griesmer bound
+
+
+GUAVA_BOUNDS_TABLE[1][3] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ , [7, 11]],
+#V   n = 5
+[ , 1, 20],
+#V   n = 6
+[ , 1, 1, 20],
+#V   n = 7
+[ , 1, 1, 1, 20],
+#V   n = 8
+[ , 1, 1, 1, 1, 20],
+#V   n = 9
+[ , 20, 1, 1, 1, 1, 20],
+#V   n = 10
+[ , 1, 20, 1, 1, 2, 1, 20],
+#V   n = 11
+[ , 1, 2, 20, 1, 2, 20, 1, 20],
+#V   n = 12
+[ , 1, 2, 20, 20, [0, 6, "QR"], 1, 20, 1, 20],
+#V   n = 13
+[ , 20, [7, 38], 1, 20, 1, 1, 1, 20, [4, 24], 20],
+#V   n = 14
+[ , 2, 1, 1, 1, 20, [0, 6, "QR"], [0, 5, "NBC"], 1, 1, 20, 20],
+#V   n = 15
+[ , 2, 20, 1, 2, [0, 7, "Li1"], 1, 1, 20, 1, 1, 20, 20],
+#V   n = 16
+[ , [6, 4], 1, 20, [0, 9, "HN"], 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 17
+[ , 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 18
+[ , 2, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 19
+[ , 2, 20, 1, 2, 20, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 20
+[ , [6, 4], 2, 20, [7, 54], 1, 20, 1, 1, 1, 20, 1, 1, 20, [5, 9], 1, 20, 20],
+#V   n = 21
+[ , 1, 2, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 22
+[ , 2, [6, 9], 1, 20, 1, 2, 20, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 23
+[ , 2, 1, 1, 1, 20, [0, 12, "Bou"], 1, 20, 20, 1, 2, 20, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 24
+[ , [6, 4], 1, 1, 1, 1, 1, 2, 1, 20, 20, [0, 9, "QR"], 1, 20, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 25
+[ , 1, 1, 2, 1, 1, 1, 2, 20, [0, 10, "BE3"], 20, 3, 20, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 26
+[ , 2, 1, 2, 20, 1, 1, 2, 1, 1, 20, 1, 1, 20, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20],
+#V   n = 27
+[ , 2, 20, [22, 3, 1], 2, 20, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 7, "EB3"], 20, 20, 1, 2, 1, 20, 1, 20, 20],
+#V   n = 28
+[ , [6, 4], 20, 1, 2, 20, 20, [0, 15, "NBC"], 20, 1, 1, 1, 20, [0, 9, "KP"], 1, 1, 20, 20, 20, [0, 6, "KP"], 20, 1, 20, 1, 20, 20],
+#V   n = 29
+[ , 2, 1, 20, [0, 18, "vE0"], 1, 20, 3, 1, 20, 1, 1, 1, 1, 20, [0, 8, "EB3"], 1, 20, 20, 3, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 30
+[ , 2, 1, 2, 1, 1, 2, 1, 2, [0, 13, "GuB"], 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 31
+[ , 2, 1, 2, 20, [7, 83], [0, 17, "XX"], 20, [0, 15, "DaH"], 2, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 32
+[ , [6, 4], 20, [0, 21, "Bel"], 2, 1, 1, 2, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 33
+[ , 2, 1, 1, 2, 20, 1, 2, 20, [0, 15, "GB4"], 1, 20, 20, 20, 1, 1, 1, 2, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 34
+[ , 2, 1, 2, [0, 21, "vE0"], 1, 20, [0, 18, "DaH"], 2, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 20, [0, 7, "EB3"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 35
+[ , 2, 1, 2, 1, 2, [0, 19, "KP"], 1, 2, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 20, [0, 8, "EB3"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 36
+[ , [6, 4], 20, [22, 3, 1], 2, [0, 21, "BZ"], 2, 20, [0, 18, "KP"], 1, 20, 1, 1, 1, 20, 20, 20, [0, 12, "Ple"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 37
+[ , 2, 1, 1, 2, 2, [0, 20, "Bo1"], 20, 1, 1, 1, 20, 1, 1, 1, 20, 20, 3, 1, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 38
+[ , 2, 1, 2, [0, 24, "BB"], 2, 1, 1, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 1, 2, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 39
+[ , 2, 1, 2, 1, 2, 1, 1, 1, 20, 1, 2, 20, 20, 1, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 1, 20, 20, [0, 6, "B"], 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 40
+[ , [6, 4], 20, [7, 119], 20, [7, 110], 1, 1, 2, [0, 19, "DaH"], 20, [0, 18, "KP"], 2, 20, 20, 1, 1, 1, 20, [0, 12, "Be"], 1, 20, 20, [0, 9, "KP"], 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, [4, 78], 20, 20],
+#V   n = 41
+[ , 2, 20, 3, 1, 1, 2, [0, 22, "KP"], [0, 21, "DaH"], 1, 20, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 3, 20, 1, 20, 1, 20, 1, 20, 20, [0, 5, "BCH"], 20, 1, 1, 20, 20, 20],
+#V   n = 42
+[ , 2, 2, 1, 1, 2, [0, 24, "X"], 1, 1, 1, 2, 20, [0, 18, "B"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 20, [0, 7, "EB3"], 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 43
+[ , 2, 2, 20, 1, 2, 1, 1, 2, 1, 2, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, [0, 9, "Vx"], 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 44
+[ , [6, 4], [6, 9], 1, 20, [0, 27, "Bo1"], 20, 1, 2, 20, [0, 21, "DaH"], 2, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 1, 20, 20, 20, [0, 8, "BE3"], 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 45
+[ , 2, 1, 1, 2, 3, 2, 20, [0, 24, "KP"], 20, 1, 2, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 46
+[ , 2, 2, 1, 2, 2, [0, 26, "BKW"], 20, 3, 2, 20, [0, 21, "DaH"], 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 47
+[ , 2, 2, 20, [0, 30, "vE1"], 2, 1, 2, 1, 2, 20, 3, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 48
+[ , [6, 4], [6, 9], 1, 1, 2, 1, 2, 20, [0, 24, "DaH"], [0, 22, "GB4"], 1, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 15, "QR"], 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 49
+[ , 2, 1, 2, [0, 31, "BB"], [0, 30, "Gu1"], [0, 28, "GuB"], [0, 27, "DaH"], 1, 2, 1, 20, [0, 21, "DaH"], [0, 20, "DaH"], 20, 20, 20, 20, 1, 1, 1, 20, 20, 3, 1, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 50
+[ , 2, 2, [6, 10], 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 1, 2, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 51
+[ , 2, 2, 1, 1, 2, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 52
+[ , [6, 4], [4, 2], 1, 1, 2, [0, 30, "CG"], 2, 20, [0, 27, "DaH"], 20, 1, 1, 2, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 20, [0, 15, "GaO"], 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 53
+[ , 2, 1, 1, 1, 2, 1, 2, 20, 3, 1, 20, 1, 2, 20, [0, 21, "DaH"], [0, 20, "DaH"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, [0, 7, "EB3"], 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 54
+[ , 2, 20, 1, 1, 2, 2, [0, 30, "GB4"], [0, 28, "GB1"], 1, 1, 2, 20, [0, 24, "DaH"], 20, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 55
+[ , 2, 2, 20, 1, 2, 2, 2, 1, 20, 1, 2, 20, 3, 1, 20, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 56
+[ , [6, 4], 2, 20, 20, [0, 36, "Gu"], [0, 33, "GB4"], [0, 31, "Gu2"], 1, 2, 20, [0, 27, "ARS"], 20, 1, 1, 2, 20, [0, 21, "DaH"], 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, [0, 4, "Hi1"], 1, 20, 20, 20],
+#V   n = 57
+[ , 2, [6, 9], 2, 20, 3, 2, 3, 1, 2, 20, 3, 1, 20, [0, 24, "DaH"], [0, 23, "DaH"], 20, 3, 20, [0, 20, "DaH"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 58
+[ , 2, 1, 2, 20, 3, 2, 1, 20, [0, 30, "XX"], 2, 1, 1, 2, 1, 2, 20, 1, 20, 3, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 59
+[ , 2, 2, [6, 19], 2, 1, 2, 1, 1, 1, 2, 20, 1, 2, 20, [0, 24, "GW2"], 2, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 2, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 60
+[ , [6, 4], 2, 1, 2, 20, [0, 36, "BKW"], 2, 1, 1, 2, 2, 20, [0, 27, "GW2"], 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, [0, 18, "QR"], 1, 2, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 61
+[ , 2, [4, 2], 2, [0, 39, "vE0"], 2, 3, 2, 20, 1, 2, 2, 20, 3, [0, 26, "DaH"], 20, [0, 24, "DaH"], 1, 20, 20, [0, 21, "DaH"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 2, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "Glo"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 62
+[ , 2, 1, 2, 1, 2, 1, 2, 2, 20, [0, 32, "DaH"], [0, 30, "DaH"], 20, 1, 1, 1, 1, 1, 1, 20, 3, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, [0, 13, "Vx"], 20, 20, 1, 20, 20, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 63
+[ , 2, 2, [22, 3, 1], 2, [0, 39, "Gu1"], 1, 2, 2, 20, 3, 2, 1, 20, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 1, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 64
+[ , [6, 4], 2, 1, 2, 1, 2, [0, 37, "BKW"], 2, 1, 1, 2, 1, 1, 20, 1, 2, 20, 1, 1, 2, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, [0, 18, "Be"], 1, 1, 20, 20, 20, [0, 12, "D1"], 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 65
+[ , 2, [6, 13], 2, [0, 42, "HN"], 2, [0, 39, "GO"], 3, [0, 36, "Gu"], 20, 1, 2, 1, 1, 1, 20, [0, 27, "DaH"], 20, 20, 1, 2, 20, 1, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 66
+[ , 2, 1, 2, 1, 2, 3, 3, 3, 1, 20, [0, 33, "DaH"], 20, 1, 1, 2, 3, 2, 20, 20, [0, 24, "DaH"], 1, 20, 1, 1, 1, 20, 20, 20, 20, 20, 3, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 67
+[ , 2, 20, [6, 27], 2, [0, 42, "Ha"], 2, 1, 1, 1, 2, 3, 20, 20, 1, 2, 1, 2, 20, 20, 3, 1, 2, 20, 1, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 68
+[ , [6, 4], 2, 1, 2, 3, 2, 1, 2, 1, 2, 2, 1, 20, 20, [0, 30, "ARS"], 20, [0, 27, "DaH"], 20, 20, 1, 20, [0, 23, "DaH"], 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, [0, 11, "Glo"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 69
+[ , 2, 2, 20, [0, 45, "vEH"], 1, 2, 1, 2, 20, [0, 36, "Bou"], 2, 1, 1, 20, 3, 2, 3, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 20, 3, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 70
+[ , 2, [4, 2], 2, 3, 2, [0, 42, "Gu2"], 2, [0, 39, "GB4"], 20, 1, 2, 1, 1, 1, 1, 2, 3, 1, 20, 20, 20, [0, 24, "DaH"], 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 71
+[ , 2, 1, 2, 1, 2, 1, 2, 2, 1, 20, [0, 36, "GW2"], 1, 1, 1, 2, [0, 30, "ASR"], 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 72
+[ , [6, 4], 2, [22, 3, 1], 2, [0, 45, "Gu1"], [0, 43, "GO"], [0, 42, "Gu2"], 2, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 18, "QR"], 2, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 73
+[ , 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 2, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 74
+[ , 2, [6, 9], 2, [0, 48, "BB"], 2, 2, 20, [0, 42, "B"], 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, [0, 18, "QR"], 2, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 75
+[ , 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 2, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 76
+[ , [6, 4], 2, [6, 36], 2, [0, 48, "Bo3"], 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, [0, 18, "GaO"], 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 77
+[ , 2, 2, 1, 2, 1, 2, 1, 2, 20, 1, 1, 1, 1, 1, 2, 1, 2, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 78
+[ , 2, [6, 13], 1, 2, 1, 2, 1, 2, 1, 20, 1, 1, 1, 1, 2, 1, 2, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 79
+[ , 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 1, 1, 1, 2, 1, 2, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 80
+[ , [6, 4], 20, 1, 2, 1, 2, 1, 2, 1, 2, 20, 20, 1, 1, 2, 20, [0, 36, "DaH"], 1, 2, 20, 20, 20, [0, 30, "DaH"], 2, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 1, 2, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 81
+[ , 2, 2, 20, [22, 4, 1], 20, [0, 51, "XBC"], 20, [0, 48, "BE"], 20, [0, 45, "XBC"], 20, 20, 20, 1, 2, 20, 3, 2, [0, 32, "DaH"], 20, 20, 20, 3, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 20, 20, 20, [0, 14, "XBC"], 20, 20, 20, 1, 20, [0, 11, "XBC"], 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 82
+[ , 2, 2, 20, 3, 1, 2, 20, 3, 20, 3, 1, 20, 20, 20, [0, 42, "NBC"], 20, 3, 2, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, [0, 8, "BE"], 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 83
+[ , 2, [6, 9], 20, 1, 1, 2, 20, 3, 20, 1, 1, 1, 20, 20, 3, 20, 1, 2, 2, 1, 20, 20, 3, 2, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 12, "XX"], 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 84
+[ , [6, 4], 2, 1, 20, 1, 2, 1, 2, 1, 20, 1, 1, 1, 20, 3, 20, 20, [0, 36, "DaH"], [0, 34, "DaH"], 1, 1, 20, 3, [0, 28, "BZ"], 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 21, "GaO"], 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 85
+[ , 2, 2, 1, 2, 20, [0, 54, "XX"], 1, 2, 1, 2, 20, [0, 45, "BEx"], 1, 2, 3, 1, 20, 3, 2, 20, [0, 32, "DaH"], [0, 31, "DaH"], 3, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 3, 1, 2, 1, 1, 20, 20, 20, [0, 15, "XX"], 20, 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 9, "XX"], 20, 20, 20, 1, 20, [0, 7, "BE"], 20, 20, 20, [0, 6, "BE"], 20, 1, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 86
+[ , 2, 2, 1, 2, 20, 3, 20, [0, 50, "BE"], 20, [0, 47, "XX"], 20, 1, 20, [0, 44, "XX"], 2, 1, 2, 1, 2, 1, 1, 2, 3, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 1, 2, 20, [0, 17, "XX"], 1, 20, 20, 1, 20, 20, 20, [0, 14, "XX"], [0, 13, "XX"], 20, 1, 20, 20, [0, 11, "XX"], 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, [0, 5, "BE"], 20, 1, 20, 1, 20, 20, 20],
+#V   n = 87
+[ , 2, [6, 9], 20, [0, 57, "HHY"], 20, 3, 1, 2, 1, 2, 20, 20, 1, 1, 2, 20, [0, 38, "DaH"], 20, [0, 36, "DaH"], 1, 2, [0, 32, "DaH"], 3, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 2, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, [0, 12, "X6"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, [0, 8, "BE"], 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 88
+[ , [6, 4], 2, 1, 2, 2, 3, 1, 2, 1, 2, 1, 20, 20, [0, 45, "XX"], [0, 44, "X6a"], 1, 2, 20, 1, 1, 2, 2, 2, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], [0, 25, "XX"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, [0, 21, "GaO"], 1, 1, 1, 20, [0, 16, "XX"], 20, 20, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, [0, 10, "XX"], 20, 20, 1, 20, 20, 20, 3, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 89
+[ , 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, [0, 47, "BE3"], 1, 20, 1, 2, 1, 2, 1, 20, 1, 2, [0, 33, "DaH"], 2, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, [0, 15, "XX"], 20, 20, [0, 14, "X6u"], 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 90
+[ , 2, 2, 1, 2, [0, 57, "X"], 2, 1, 2, 1, 2, 1, 20, [0, 46, "XX"], 20, [0, 45, "X6a"], 1, 2, 20, [0, 37, "DaH"], 20, [0, 36, "DaH"], 1, 2, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, [0, 17, "XX"], [0, 16, "X6"], 20, 20, 1, 20, 20, 1, 1, 20, 20, [0, 12, "X6"], 20, 20, [0, 11, "XX"], 1, 20, 20, 1, 20, 20, 20, [0, 8, "XX"], 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 91
+[ , 2, [6, 13], 20, [0, 60, "XX"], 1, 2, 20, [0, 54, "dB"], 20, [0, 51, "XX"], [0, 48, "BE3"], 1, 1, 20, 3, 1, 2, [0, 38, "DaH"], 3, 20, 3, 20, [0, 33, "DaH"], 1, 1, 1, 20, 1, 2, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 92
+[ , [6, 4], 3, 2, 3, 2, [0, 57, "X3a"], 20, 3, 20, 3, 1, 20, [0, 47, "XX"], [0, 46, "X6a"], 3, 20, [0, 42, "DaH"], 1, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, [0, 15, "X6u"], 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, [0, 10, "Ed2"], 20, 20, [0, 9, "X6u"], 20, 20, 1, 20, 20, 20, [0, 7, "EB3"], 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 93
+[ , 2, 1, 2, 1, 2, 2, 20, 3, 20, 3, 2, 1, 1, 2, 3, 20, 3, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, [0, 17, "X6u"], 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, [0, 12, "X6"], 20, 20, [0, 11, "X6u"], 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 94
+[ , 2, 2, [6, 27], 2, [0, 60, "XX"], 2, 2, 3, 2, 1, 2, 20, [0, 48, "X"], [0, 47, "X6a"], 2, 20, 3, 1, 2, 20, 20, [0, 36, "DaH"], 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 20, [0, 16, "X6"], 20, 20, [0, 15, "X6u"], 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 95
+[ , 2, 2, 1, 2, 1, 2, 2, 3, [7, 252], 20, [0, 51, "X6a"], 2, 1, 1, 2, 20, 3, 20, [0, 40, "DaH"], 1, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, [0, 6, "EB3"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 96
+[ , [6, 4], [6, 9], 20, [22, 4, 1], 2, [0, 60, "X6a"], [0, 57, "GB1"], 1, 1, 2, 1, 2, 20, [0, 48, "X"], [0, 47, "X"], 2, 3, [0, 41, "DaH"], 3, 1, 2, 3, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 24, "ACG"], 20, 1, 20, 20, [0, 17, "X6u"], 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 97
+[ , 2, 2, 1, 1, 2, 2, 2, 2, [7, 257], [0, 53, "X6a"], 20, [0, 51, "X6a"], 20, 1, 2, 2, 1, 2, 3, [0, 39, "DaH"], [0, 38, "GW2"], 2, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, [0, 11, "Ed2"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 98
+[ , 2, 2, 1, 2, [0, 63, "Gu1"], 2, 2, 2, 1, 2, 20, 3, 1, 20, [0, 48, "X"], [0, 45, "DaH"], 2, [0, 42, "DaH"], 3, 3, 3, [0, 37, "GW2"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 99
+[ , 2, 2, 1, 2, 1, 2, 2, [0, 57, "GB1"], 20, [0, 54, "X6a"], 20, 1, 1, 2, 3, 1, 2, 3, 3, 3, 3, 3, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, [0, 19, "VE"], 20, 20, 1, 20, [0, 17, "X6u"], 20, 1, 20, [0, 15, "X6u"], 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 20, [0, 9, "XB"], 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 100
+[ , [6, 4], [6, 9], 20, [0, 66, "Bel"], 20, [0, 63, "EB1"], [0, 60, "GO2"], 3, [0, 55, "Gu"], 3, 2, 20, 1, 2, 2, 20, [0, 45, "DaH"], 2, 3, 3, 3, 3, [0, 36, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 2, [0, 28, "BZ"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, [0, 18, "D1"], 1, 20, 20, [0, 16, "BZ"], 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 101
+[ , 2, 2, 1, 2, 1, 2, 3, 2, 2, 3, [0, 53, "X6a"], 20, 20, [0, 51, "XX"], 2, 1, 2, [0, 43, "GW2"], 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, [0, 20, "VE"], 1, 20, 20, 1, 20, [0, 17, "Vx"], 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 102
+[ , 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 20, 1, 2, 1, 2, 3, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, [0, 21, "VE"], 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 103
+[ , 2, 2, 1, 2, 1, 2, 2, 2, [0, 57, "MTS"], 2, 1, 2, 20, 20, [0, 51, "X6a"], 1, 2, 1, 1, 1, 1, 2, 2, 20, 1, 2, 20, 20, 20, 20, 20, 20, [0, 34, "Glo"], 2, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 3, 1, 20, 1, 20, [0, 19, "VE"], 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, [0, 14, "Glo"], 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, [0, 6, "EB3"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 104
+[ , [6, 4], [6, 13], 20, [0, 69, "Bel"], 20, [0, 66, "GO"], 2, [0, 60, "DGM"], 2, [0, 56, "BET"], 20, [0, 54, "ARS"], 2, 20, 3, 20, [0, 48, "DaH"], 2, [0, 43, "DaH"], 1, 1, 2, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, 20, 20, 3, [0, 33, "Glo"], [0, 30, "BZ"], 20, 20, [0, 28, "BZ"], 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 3, [0, 22, "BZ"], 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 3, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1 [...]
+#V   n = 105
+[ , 2, 3, 1, 2, 1, 2, [0, 63, "Gu"], 2, 2, 3, 20, 3, [0, 53, "XX"], 20, 3, 20, 3, [0, 45, "DaH"], 3, 20, [0, 42, "DaH"], [0, 41, "DaH"], 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 3, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 1, 20, [0, 21, "VE"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 3, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 106
+[ , 2, 1, 1, 2, 1, 2, 3, 2, [0, 59, "MTS"], 1, 2, 1, 1, 2, 3, 20, 3, 3, 2, 20, 3, 3, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 3, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 107
+[ , 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 20, [0, 54, "XX"], [0, 53, "X6a"], 2, [0, 49, "GW2"], 3, 1, 2, 20, 3, 3, 2, 20, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 108
+[ , [6, 4], 2, 20, [22, 4, 1], 20, [0, 69, "EB1"], 2, [0, 63, "GB1"], 2, [0, 58, "GB4"], [0, 57, "BZ"], 20, 1, 2, [0, 52, "X6a"], 1, 2, 2, [0, 45, "BZ"], 2, 3, 1, 2, 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, 20, 3, 3, [0, 32, "BZ"], 20, 20, [0, 30, "BZ"], 20, 20, 1, 1, 20, 20, [0, 26, "BZ"], 20, 20, [0, 24, "BZ"], 20, 20, [0, 22, "BZ"], 1, 20, 20, [0, 20, "BZ"], [0, 19, "VE"], 20, 20, 20, [0, 18, "BZ"], 1, 20, 20, [0, 16, "BZ"], 20, 1, 20, 20, 20, [0, 14, "BZ"], 20, 20, 20, 1 [...]
+#V   n = 109
+[ , 2, [6, 9], 20, 3, 1, 2, 2, 3, 2, 1, 2, 1, 20, [0, 54, "X6a"], 2, 1, 2, 2, 1, 2, 1, 20, [0, 41, "XX"], 1, 20, 1, 1, 20, 1, 1, 20, 20, 3, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "LX"], 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 110
+[ , 2, 2, 1, 1, 1, 2, [0, 66, "GO2"], 3, [0, 62, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, [0, 45, "DaH"], 2, [0, 42, "BZ"], 3, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, [0, 7, "Vx"], 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 111
+[ , 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, [0, 54, "X6a"], 20, [0, 51, "DaH"], 2, 2, 1, 2, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20],
+#V   n = 112
+[ , [6, 4], 2, 1, 2, 20, [0, 72, "EB1"], 2, 1, 2, 20, [0, 60, "BZ"], [0, 58, "ARS"], [0, 57, "BZ"], 20, 3, 20, 3, [0, 50, "DaH"], 2, 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], [0, 41, "Vx"], 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 20, 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], 20, 20, [0, 24, "BZ"], 20, 20, [0, 22, "BZ"], 20, 1, 20, [0, 20, "BZ"], 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "BZ [...]
+#V   n = 113
+[ , 2, [6, 9], 20, [0, 75, "Bel"], 20, 3, [0, 68, "GW2"], 1, 2, 2, 3, 3, 3, 2, 3, 1, 1, 1, 2, 2, 3, [0, 43, "Vx"], 3, 3, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 1, 2, 20, 20, 3, 20, 20, 3, 20, 20, 3, 1, 20, 1, 20, 20, 1, 1, 20, [0, 19, "VE"], 20, 20, 20, [0, 18, "BZ"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, [0, 12, "BZ"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20],
+#V   n = 114
+[ , 2, 2, 1, 2, [0, 73, "Gu1"], 3, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, 20, 1, 2, 20, 1, 2, 20, 3, [0, 35, "Vx"], 20, 3, [0, 33, "Vx"], 20, 1, 2, 20, 20, [0, 30, "XBZ"], 20, 20, 3, [0, 27, "Vx"], 20, 1, 1, 20, 1, 20, 1, 20, [0, 22, "XBZ"], 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, [0, 15, "Vx"], 20, 20, [0, 14, "Vx"], 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20],
+#V   n = 115
+[ , 2, 2, 1, 2, 2, 3, [0, 69, "GW2"], 1, 2, [0, 63, "Bou"], 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, [0, 43, "Ed"], [0, 42, "Vx"], [0, 41, "Vx"], 20, [0, 40, "Vx"], 20, 20, [0, 38, "Vx"], 20, 1, 1, 20, 1, 1, 20, 20, [0, 32, "Vx"], 20, 20, 3, [0, 29, "Vx"], 20, 1, 1, 20, 20, [0, 26, "Vx"], [0, 25, "Ed"], 20, [0, 24, "Vx"], 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, [0, 12, "Vx"], 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 116
+[ , [6, 4], 2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, [0, 45, "Vx"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 28, "Vx"], 1, 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, [5, 42], 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20],
+#V   n = 117
+[ , 2, [6, 13], 20, [22, 4, 1], 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, [0, 43, "Ed"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, [0, 30, "Vx"], 1, 20, 1, 20, [0, 27, "XB"], 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20],
+#V   n = 118
+[ , 2, 3, 1, 2, 2, [7, 338], 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, [0, 48, "XB"], 20, [0, 45, "XB"], 1, 20, [0, 42, "XB"], 1, 20, [0, 40, "XB"], 20, 20, [0, 38, "XB"], 20, 20, [0, 36, "XB"], 20, 20, [0, 34, "XB"], 20, 20, [0, 32, "XB"], 20, 1, 20, [0, 29, "XB"], 20, [0, 28, "Vx"], 1, 20, 20, [0, 26, "XB"], [0, 25, "Ed"], 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, [0, 15, "Ed"], 20, 20, 1, 20, [0, 13, "Ed"], 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20,  [...]
+#V   n = 119
+[ , 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 20, 1, 1, 2, 2, 2, 2, 3, [0, 44, "Vx"], [0, 43, "Ed"], 1, 20, 1, 1, 1, 20, 3, [0, 37, "Vx"], 20, 1, 2, 20, 3, [0, 33, "Vx"], 20, 3, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 20, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20],
+#V   n = 120
+[ , [6, 4], 2, 1, 2, [0, 78, "Gu1"], [0, 75, "GO"], 20, 1, 2, 20, [0, 66, "ARS"], 20, 1, 2, 2, 20, 20, 1, 2, 2, 2, 2, 1, 1, 1, 20, [0, 42, "Vx"], 20, 1, 1, 2, 1, 1, 20, 20, [5, 30], 20, 1, 1, 20, 1, 20, [0, 31, "Ed"], 20, [0, 30, "BZ"], 1, 20, 1, 20, [0, 27, "Ed"], 20, [0, 26, "Vx"], 1, 20, 20, [0, 24, "BZ"], 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, [5, 41], 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [...]
+#V   n = 121
+[ , 2, 2, 20, [0, 81, "sim"], 2, 2, 20, 20, [0, 72, "dB"], 2, 3, 20, 20, [0, 63, "BCH"], 2, 20, 20, 20, [0, 57, "DaH"], 2, 2, [0, 48, "BZ"], [0, 46, "Vx"], [0, 45, "Vx"], [0, 44, "Vx"], [0, 43, "Var"], 1, 20, 20, 1, 2, 20, [0, 38, "Vx"], 1, 20, 3, 1, 20, [0, 34, "Vx"], 1, 20, [0, 32, "XB"], 1, 20, 1, 20, [0, 29, "Ed"], 20, [0, 28, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, [0, 23, "BCH"], 20, 20, 20, 20, [0, 21, "BCH"], 1, 20, 20, 20, 3, 20, 20, 20, 1, 2, 1, 20, 20, 20, [0, 14, "BCH"], 1 [...]
+#V   n = 122
+[ , 2, [6, 9], 20, 3, 2, 2, 2, 20, 3, 2, 3, 20, 20, 1, 2, 20, 20, 20, 1, 2, [0, 51, "DaH"], 3, 1, 1, 1, 1, 20, [0, 42, "Vx"], 20, 20, [0, 41, "NBC"], [0, 39, "Vx"], 1, 20, [0, 37, "Ed"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Ed"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Ed"], 20, 1, 20, 20, 1, 1, 20, 20, 20, 3, [0, 20, "Vx"], 1, 20, 20, 1, 20, 20, 20, 20, [0, 17, "XBC"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 20, [0, 11, "NBC"], 20, 1, 20, 20, 1, 20, 20, 20, 20 [...]
+#V   n = 123
+[ , 2, 2, 20, 1, 2, 2, 2, 20, 3, 2, 2, 20, 20, 20, [0, 63, "X"], 1, 20, 20, 20, [0, 57, "DaH"], 3, 1, 2, [0, 46, "Vx"], [0, 45, "Vx"], [0, 44, "Var"], 1, 1, 20, 20, 3, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Ed"], 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 20, 3, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20],
+#V   n = 124
+[ , [6, 4], 2, 2, 20, [0, 81, "Bo1"], 2, [0, 75, "BZ"], 20, 3, 2, 2, 1, 20, 20, 3, 1, 1, 20, 20, 3, 3, 2, [0, 48, "Vx"], 1, 1, 1, 20, [0, 43, "Ed"], 1, 20, 1, 2, 1, 20, [0, 38, "BZ"], 1, 20, [0, 36, "BZ"], 1, 20, [0, 34, "BZ"], 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, [0, 27, "Ed"], 20, [0, 26, "Ed"], 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [...]
+#V   n = 125
+[ , 2, 2, 2, 20, 3, 2, 2, 20, 1, 2, [0, 68, "GW2"], 1, 1, 20, 3, 1, 1, 1, 20, 3, 1, 2, 1, 2, [0, 46, "Vx"], [0, 45, "Var"], 1, 1, 20, [0, 42, "Ed"], 20, [0, 41, "Vx"], 20, [0, 39, "Ed"], 1, 20, [0, 37, "Ed"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Var"], 20, 1, 1, 20, 20, [0, 30, "BZ"], [0, 29, "Ed"], 20, [0, 28, "BZ"], 1, 20, 1, 20, 1, 20, 20, [0, 24, "BZ"], 20, 20, 1, 1, 20, 20, [0, 21, "X"], 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, [0, 16, "Ed"], 20, [0, 15, "Ed"], 20, 20, 1, 20, 1, 20, 20, [...]
+#V   n = 126
+[ , 2, [6, 9], [22, 3, 1], 2, 1, 2, 2, [0, 73, "GB1"], 20, [0, 72, "Br2"], 2, [0, 66, "BZ"], 1, 2, 3, 1, 1, 1, 2, 3, 1, 2, 20, [0, 48, "BZ"], 1, 1, 20, [0, 44, "Ed"], 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, 20, 1, 20, 20, [0, 17, "BE3"], 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, [0, 12, "X"], 20, 20, 20, 1, 20, 1, 20, 20, 20, [0, 9, "X"], 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 127
+[ , 2, 2, 1, 2, 20, [0, 81, "GW2"], 2, 2, 20, 3, [0, 69, "GW2"], 1, 20, [0, 65, "X"], 1, 1, 1, 1, 2, 3, 1, 2, 2, 3, [0, 47, "Vx"], [0, 46, "Var"], 1, 1, 20, [0, 43, "Ed"], 1, 20, [0, 41, "Vx"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, [0, 23, "X"], 20, 20, 1, 20, [0, 20, "X"], 1, 20, 20, 20, [0, 18, "X"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 13, "Ed"], 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20,  [...]
+#V   n = 128
+[ , [6, 4], 2, 2, [6, 11], 2, 3, [0, 78, "GO2"], 2, 20, 3, 3, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 2, [0, 50, "VE"], 1, 1, 1, 20, [0, 45, "Ed"], 1, 1, 20, [0, 42, "BZ"], 1, 20, [0, 40, "BZ"], [0, 39, "Var"], 20, [0, 38, "BZ"], [0, 37, "Ed"], 20, [0, 36, "BZ"], [0, 35, "Var"], 20, [0, 34, "BZ"], 1, 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 1, 20, [0, 27, "Ed"], 20, 1, 20, [0, 25, "XB"], 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1,  [...]
+#V   n = 129
+[ , 2, 2, 2, 1, 2, 3, 3, 2, 2, 3, 1, 1, 1, 2, [0, 65, "XX"], 20, 1, 1, 2, 2, 1, 2, 1, 2, [0, 48, "Vx"], [0, 47, "Var"], 1, 1, 20, [0, 44, "Ed"], 1, 1, 20, [0, 41, "Vx"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, [0, 23, "Vx"], 1, 20, 20, [0, 21, "X"], 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2 [...]
+#V   n = 130
+[ , 2, [6, 13], [6, 10], 2, [0, 84, "Bo1"], 2, 2, [0, 76, "DGM"], [0, 74, "DG4"], 3, 20, 1, 1, 2, 2, 20, 20, 1, 2, 2, 1, 2, [0, 51, "VE"], [0, 50, "VE"], 1, 1, 20, [0, 46, "Ed"], 1, 1, 20, [0, 43, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 30, "BZ"], 20, 20, [0, 28, "BZ"], 1, 20, 20, [0, 26, "BZ"], 1, 20, 20, [0, 24, "BZ"], 20, 1, 20, [0, 22, "Ed"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, [0, 17, "XX"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20 [...]
+#V   n = 131
+[ , 2, 3, 1, 2, 2, 2, 2, 3, 2, 2, 20, 20, 1, 2, 2, 20, 20, 20, [0, 63, "DaH"], 2, 1, 2, 1, 1, 2, [0, 48, "Var"], 1, 1, 20, [0, 45, "VE"], 1, 1, 20, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 16, "Ed"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20,  [...]
+#V   n = 132
+[ , [6, 4], 2, 2, [6, 11], 2, 2, 2, 3, [0, 75, "X"], 2, 1, 20, 20, [0, 69, "X"], 2, 20, 20, 20, 3, [0, 60, "DaH"], 20, [0, 57, "DaH"], [0, 52, "Vx"], [0, 51, "VE"], [0, 50, "VE"], 1, 20, [0, 47, "Var"], 1, 1, 20, [0, 44, "BZ"], 1, 20, [0, 42, "BZ"], [0, 41, "VE"], 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], [0, 35, "Var"], 20, 1, 1, 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 1 [...]
+#V   n = 133
+[ , 2, 2, 2, 1, 2, [0, 84, "GO"], [0, 81, "GW2"], 2, 1, 2, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 2, 3, 1, 1, 1, 2, 1, 1, 20, [0, 46, "VE"], 1, 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 20, 1, 20, [0, 25, "XB"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, [0, 20, "XX"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 134
+[ , 2, 2, [6, 27], 2, [0, 87, "Bo3"], 2, 2, 2, 20, [0, 75, "XX"], 1, 2, 20, 20, [0, 69, "XX"], 20, 20, 20, 3, 1, 2, 3, 2, [0, 52, "VE"], [0, 51, "VE"], [0, 50, "VE"], 20, 1, 1, 1, 20, [0, 45, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20,  [...]
+#V   n = 135
+[ , 2, [6, 9], 1, 2, 2, 2, 2, [0, 78, "BZ"], 1, 2, 20, [0, 72, "BZ"], 20, 20, 3, 1, 20, 20, 3, [0, 61, "DaH"], [0, 60, "DaH"], 3, [0, 54, "BZ"], 1, 1, 2, 1, 20, [0, 48, "BZ"], [0, 47, "VE"], 1, 1, 20, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 20, [0, 30, "BZ"], 20, 20, 1, 1, 20, 20, [0, 26, "BZ"], 1, 20, 20, [0, 24, "BZ"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 2 [...]
+#V   n = 136
+[ , [6, 4], 2, 20, [6, 55], 2, [0, 86, "GO"], 2, 1, 1, 2, 20, 3, 1, 20, 3, 1, 2, 20, 3, 3, 3, 3, 3, [0, 53, "VE"], [0, 52, "VE"], [0, 51, "VE"], 20, [0, 49, "Var"], 1, 1, 20, [0, 46, "BZ"], [0, 45, "Var"], 20, [0, 44, "BZ"], [0, 43, "VE"], 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], [0, 35, "VE"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, [0, 22, "VE"], 20, 1, 20, 1 [...]
+#V   n = 137
+[ , 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 3, 1, 2, 3, 1, 2, 20, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 20, [0, 48, "Vx"], [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20],
+#V   n = 138
+[ , 2, 2, 2, 20, [0, 90, "Bo3"], 2, 2, 2, 20, [0, 78, "Bou"], 2, 1, 20, [0, 71, "XX"], 3, 20, [0, 66, "DaH"], 20, 3, 1, 2, 2, [0, 55, "Vx"], [0, 54, "Vx"], [0, 53, "VE"], [0, 52, "VE"], [0, 51, "VE"], [0, 50, "Var"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 2 [...]
+#V   n = 139
+[ , 2, [6, 9], [6, 19], 2, 3, 2, 2, 2, 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 1, 20, [0, 25, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 18, "VE"], 20, 1, 20, 20, [0, 16, "VE"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 2 [...]
+#V   n = 140
+[ , [6, 4], 2, 1, 2, 1, 2, [0, 87, "Koh"], [0, 82, "GB4"], 2, 3, 2, 2, 20, [0, 72, "XX"], 2, 1, 2, 1, 2, 1, 2, 2, 2, [0, 55, "Vx"], [0, 54, "BZ"], [0, 53, "VE"], [0, 52, "VE"], [0, 51, "Var"], 1, 1, 20, [0, 48, "BZ"], [0, 47, "Var"], 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, 1, 1, 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], [0, 31, "Var"], 20, 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"] [...]
+#V   n = 141
+[ , 2, 2, 2, [6, 20], 20, [0, 90, "GW2"], 2, 2, [0, 81, "X"], 1, 2, 2, 20, 3, [0, 71, "X6a"], 1, 2, [0, 66, "DaH"], [0, 65, "DaH"], 20, [0, 63, "DaH"], [0, 60, "DaH"], 2, 1, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20,  [...]
+#V   n = 142
+[ , 2, 2, 2, 3, 2, 3, 2, 2, 3, 1, 2, 2, [0, 73, "MTS"], 1, 2, 20, [0, 69, "DaH"], 3, 3, 20, 3, 3, 2, [0, 56, "Vx"], [0, 55, "Vx"], 1, 2, [0, 52, "Var"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 30, "XBZ"], 1, 20, 20, [0, 28, "Vx"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1 [...]
+#V   n = 143
+[ , 2, [6, 13], [6, 27], 1, 2, 1, 2, [0, 84, "DGM"], 1, 1, 2, 2, 1, 20, [0, 72, "X6a"], 20, 3, 1, 2, 20, 3, 1, 2, 1, 1, 20, [0, 54, "BZ"], 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 144
+[ , [6, 4], 3, 2, 2, [0, 93, "Gu1"], 20, [0, 90, "GO2"], 3, 1, 1, 2, [0, 78, "BZ"], 2, [0, 73, "XX"], 3, 20, 3, 1, 2, 20, 3, 20, [0, 60, "BZ"], 2, [0, 56, "Vx"], [0, 55, "Vx"], 1, 2, 1, 1, 20, [0, 50, "BZ"], [0, 49, "Var"], 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, [0, 29, "Var"], 20, 1, 20, [0, 27, "Var"], 20,  [...]
+#V   n = 145
+[ , 2, 2, 2, 2, 2, 2, 3, 2, 20, 1, 2, 3, [0, 75, "MTS"], 2, 3, 1, 1, 1, 2, 20, 3, 20, 3, [0, 58, "Vx"], 1, 1, 20, [0, 54, "Vx"], 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 26, "VE"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 2 [...]
+#V   n = 146
+[ , 2, 2, 2, [6, 25], 2, 2, 3, [0, 85, "Zwa"], 2, 20, [0, 82, "ARS"], 3, 2, [0, 74, "XX"], 1, 1, 1, 1, 2, [0, 64, "DaH"], 3, 20, 3, 2, [0, 57, "Vx"], [0, 56, "Vx"], [0, 55, "Var"], 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 30, "VE"], 1, 20, 20, [0, 28, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20,  [...]
+#V   n = 147
+[ , 2, 2, [6, 27], 1, 2, [0, 93, "GO"], 2, 1, 2, 20, 3, 2, 2, 2, [0, 73, "X6a"], 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 54, "Vx"], [0, 53, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 18, "VE"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 2 [...]
+#V   n = 148
+[ , [6, 4], [6, 9], 3, 2, [0, 96, "Bo3"], 2, 2, 1, 2, 20, 3, 2, [0, 77, "MTS"], [0, 75, "XX"], 2, 20, [0, 72, "DaH"], 1, 2, 1, 2, 1, 1, 2, 2, [0, 57, "Vx"], [0, 56, "Var"], [0, 55, "Vx"], 1, 1, 20, [0, 52, "BZ"], [0, 51, "Var"], 20, [0, 50, "BZ"], 20, 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, 1, 1, 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 149
+[ , 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 3, 2, 2, 1, 2, 20, 3, 20, [0, 71, "DaH"], 1, 2, 1, 1, 2, 2, 1, 1, 1, 20, [0, 54, "Var"], [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 16, "VE"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20 [...]
+#V   n = 150
+[ , 2, 2, 2, [22, 4, 1], 2, 2, [0, 93, "GO2"], [0, 88, "GB4"], [0, 87, "Gu"], [0, 84, "MTS"], 1, 2, [0, 78, "MTS"], 1, 2, 20, 3, 20, 3, 20, [0, 66, "GW2"], 1, 1, 2, [0, 60, "BZ"], 1, 2, [0, 56, "Vx"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "VE"], 1, 20, 20, [0, 28, "VE"], 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1,  [...]
+#V   n = 151
+[ , 2, 2, 2, 1, 2, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 20, 3, 1, 1, 1, 1, 2, 1, 1, 2, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "VE"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, [...]
+#V   n = 152
+[ , [6, 4], [6, 9], [6, 32], 2, [0, 99, "Bo3"], 2, 3, 1, 2, 2, 1, 2, 2, 1, 2, 2, [0, 73, "Da0"], [0, 72, "Da0"], 3, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 20, [0, 54, "BZ"], [0, 53, "Var"], 20, [0, 52, "BZ"], 20, 20, [0, 50, "BZ"], 20, 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, [...]
+#V   n = 153
+[ , 2, 2, 1, 2, 1, 2, 2, 1, 2, [0, 86, "MTS"], 20, [0, 84, "BZ"], 2, 20, [0, 78, "BZ"], 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 20, [0, 60, "BZ"], 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, 3, [0, 49, "Vx"], 20, 3, [0, 47, "Vx"], 20, 3, [0, 45, "Vx"], 20, 3, [0, 43, "Vx"], 20, 3, [0, 41, "Vx"], 20, 1, 1, 20, 20, 3, [0, 37, "Vx"], 20, 3, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 154
+[ , 2, 2, 2, [0, 102, "Bel"], 2, [0, 99, "GO"], 2, 1, 2, 1, 2, 3, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 20, [0, 55, "VE"], [0, 54, "Var"], 1, 20, [0, 52, "Vx"], [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 40, "XBZ"], [0, 39, "VE"], 20, 1, 1, 20, 1, 20, [0, 35, "VE"], 20, [0, 34, "Vx"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, [...]
+#V   n = 155
+[ , 2, 2, 2, 1, 2, 3, 2, 1, 2, 1, 2, 3, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, [0, 50, "Vx"], 1, 20, [0, 48, "Vx"], 1, 20, [0, 46, "Vx"], 1, 20, [0, 44, "Vx"], 1, 20, [0, 42, "Vx"], 1, 20, 1, 1, 20, 20, [0, 38, "Vx"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "Var"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 156
+[ , [6, 4], [6, 13], [6, 36], 2, [0, 102, "Bo3"], 3, [0, 96, "GO2"], 1, 2, 20, [0, 87, "DaH"], 1, 2, 1, 2, [0, 78, "DaH"], 2, 2, 20, 1, 2, 20, 1, 2, 2, 20, 1, 1, 1, 2, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 20, [0, 52, "Vx"], 1, 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "VE"], 1, 20, [0, 43, "VE"], 1, 20, [0, 41, "Var"], 20, [0, 40, "Vx"], 1, 20, 1, 20, [0, 37, "VE"], 20, [0, 36, "VE"], 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 28, " [...]
+#V   n = 157
+[ , 2, 3, 1, 2, 2, 3, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 20, [0, 72, "GW2"], 1, 20, [0, 69, "GW2"], 2, 20, 20, 1, 1, 2, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, [0, 18, "VE"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20 [...]
+#V   n = 158
+[ , 2, 2, 2, [0, 105, "Bel"], 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 20, 20, 1, 2, 20, [0, 57, "VE"], [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "XB"], 1, 20, [0, 48, "XB"], 1, 20, [0, 46, "XB"], 1, 20, [0, 44, "XB"], 1, 20, [0, 42, "XB"], 1, 20, 1, 20, [0, 39, "VE"], 20, [0, 38, "VE"], 1, 20, 1, 20, [0, 35, "VE"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1 [...]
+#V   n = 159
+[ , 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 20, 1, 1, 2, 2, 1, 2, 20, 20, [0, 62, "GW2"], 1, 1, 1, 20, [0, 55, "Var"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "VE"], 1, 20, [0, 43, "Var"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, [...]
+#V   n = 160
+[ , [6, 4], 2, [4, 2], 2, [0, 105, "Gu"], 2, [0, 99, "GO2"], 2, [0, 96, "DaH"], 2, [0, 90, "ARS"], 2, [0, 87, "DaH"], 20, [0, 84, "DaH"], 1, 2, [0, 78, "DaH"], 2, [0, 75, "DaH"], 1, 20, 1, 2, 2, 1, 2, 20, 20, 3, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, [0, 37, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 161
+[ , 2, [6, 9], 1, 2, 2, [0, 102, "GO"], 1, 2, 3, 2, 1, 2, 3, 20, 3, 1, 2, 3, [0, 77, "DaH"], 3, 20, [0, 73, "GW2"], 20, [0, 72, "GW2"], 2, 1, 2, 2, 20, 3, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "VE"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "VE"], 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "VE"], 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 162
+[ , 2, 2, 20, [22, 4, 1], 2, 2, 2, [0, 99, "DaH"], 3, [0, 93, "DaH"], 20, [0, 90, "BZ"], 3, 20, 1, 1, 2, 2, 3, 3, 20, 1, 20, 3, [0, 71, "GW2"], 1, 2, 2, 20, 3, [0, 60, "Vx"], [0, 59, "VE"], [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, [0,  [...]
+#V   n = 163
+[ , 2, 2, 20, 1, 2, 2, 2, 3, 3, 3, 20, 3, 2, 1, 20, 1, 2, 2, 2, 3, 20, 20, [0, 73, "GW2"], 3, 3, 1, 2, 2, 20, 3, 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, [...]
+#V   n = 164
+[ , [6, 4], 2, 2, 20, [0, 108, "Bo3"], 2, [0, 102, "ARS"], 3, 3, 3, [0, 91, "MTS"], 3, 2, 1, 2, 20, [0, 84, "DaH"], 2, [0, 78, "GW2"], 1, 2, 20, 3, 3, 3, 1, 2, 2, 2, 3, 20, [0, 60, "Var"], [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "VE"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, [0, 37, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 2 [...]
+#V   n = 165
+[ , 2, [6, 9], 2, 20, 3, 2, 3, 3, 3, 2, 2, 3, [0, 89, "GW2"], 20, [0, 86, "DaH"], 20, 3, [0, 81, "DaH"], 3, 20, [0, 75, "GW2"], 20, 3, 3, 3, 20, [0, 69, "GW2"], [0, 67, "GW2"], 2, 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 2 [...]
+#V   n = 166
+[ , 2, 2, [6, 10], 2, 3, 2, 3, 2, 3, 2, 2, 1, 2, 20, 3, 20, 3, 3, 2, 1, 2, 20, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 20, [0, 57, "VE"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "Var"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 22, "VE"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, [...]
+#V   n = 167
+[ , 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, [0, 93, "MTS"], 2, [0, 90, "GW2"], 1, 2, 20, 3, 3, 2, 1, 2, 20, 20, 1, 2, 20, [0, 70, "GW2"], 2, 2, 1, 1, 1, 2, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 168
+[ , [6, 4], 2, 2, [6, 47], 2, [22, 6, 1], 2, 2, 2, [0, 96, "GW2"], 1, 2, 3, 1, 2, 2, 3, 1, 2, 1, 2, [0, 74, "GW2"], 20, 20, [0, 73, "GW2"], 1, 1, 2, [0, 67, "GW2"], 1, 1, 1, 2, 1, 1, 20, [0, 58, "VE"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, [...]
+#V   n = 169
+[ , 2, [6, 13], 2, 1, 2, 3, 2, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 20, [0, 78, "GW2"], 2, 20, 20, 3, 1, 1, 2, 1, 2, 1, 1, 2, [0, 61, "VE"], [0, 60, "Var"], 1, 1, 20, [0, 57, "VE"], [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 170
+[ , 2, 3, [6, 10], 2, [0, 111, "Bo3"], 3, 2, [0, 103, "GW2"], [0, 99, "Gu"], [0, 97, "MTS"], 1, 2, 2, 1, 2, [0, 87, "DaH"], 2, 1, 2, [0, 79, "GW2"], 3, 2, 20, 20, 1, 20, [0, 72, "GW2"], [0, 71, "GW2"], 20, [0, 67, "GW2"], 20, 1, 2, 1, 1, 20, [0, 59, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 171
+[ , 2, 2, 1, 2, 2, 3, 2, 3, 2, 2, 1, 2, 2, 20, [0, 90, "BZ"], 1, 2, [0, 84, "BZ"], [0, 83, "DaH"], 3, 3, 2, 20, 20, 20, 1, 2, 3, 2, 3, 20, 20, [0, 65, "GW2"], [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 2 [...]
+#V   n = 172
+[ , [6, 4], 2, 2, [6, 55], 2, 1, 2, 2, 2, 2, 20, [0, 96, "XBZ"], [0, 93, "GW2"], 20, 3, 20, [0, 87, "DaH"], 3, 3, 1, 1, 2, 20, 20, 20, 20, [0, 73, "GW2"], 3, [0, 69, "GW2"], 3, 20, 20, 3, 1, 1, 20, [0, 60, "VE"], 1, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 20, [0, 33, "VE"], 20, [0,  [...]
+#V   n = 173
+[ , 2, 2, 2, 1, 2, 2, [0, 108, "Koh"], 2, 2, 2, 20, 3, 3, [0, 91, "GW2"], 3, 20, 3, 2, 3, 1, 1, 2, 2, 20, 20, 20, 3, 2, 3, 3, [0, 66, "Vx"], 20, 3, [0, 63, "VE"], [0, 62, "Var"], 1, 1, 20, [0, 59, "VE"], [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, [...]
+#V   n = 174
+[ , 2, [6, 9], [6, 27], 2, [0, 114, "Gu1"], 2, 3, 2, 2, [0, 100, "MTS"], 2, 3, 3, 1, 2, 2, 3, 2, 2, 1, 1, 2, 2, 20, 20, 20, 3, [0, 72, "GW2"], 3, 1, 1, 20, 3, 1, 1, 20, [0, 61, "VE"], 1, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [...]
+#V   n = 175
+[ , 2, 2, 1, 2, 3, 2, 3, [0, 106, "GW2"], [0, 103, "GW2"], 2, 2, 3, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 20, 20, 3, 3, 3, 1, 1, 1, 1, 2, [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "Var"], 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, 1, 20, 1, 20, 1 [...]
+#V   n = 176
+[ , [6, 4], 2, 20, [6, 55], 2, [0, 112, "GO"], 2, 3, 2, [0, 101, "MTS"], 2, 2, 1, 1, 2, [0, 90, "DaH"], 20, [0, 87, "DaH"], 2, 2, 20, [0, 81, "DaH"], 2, 1, 2, 20, 3, 3, 1, 20, 1, 1, 1, 2, 1, 20, [0, 62, "VE"], 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "BZ"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, " [...]
+#V   n = 177
+[ , 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 2, 1, 1, 2, 3, 1, 1, 2, [0, 84, "DaH"], 2, 3, 2, 1, 2, 20, 3, 3, 1, 2, 20, 1, 1, 2, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [...]
+#V   n = 178
+[ , 2, [6, 9], 2, 1, 2, 2, [0, 110, "Koh"], 2, [0, 105, "GW2"], 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 3, 2, 1, 2, 20, 3, 1, 1, 2, 20, 20, 1, 2, 1, 20, [0, 63, "VE"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 32, "VE"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"],  [...]
+#V   n = 179
+[ , 2, 2, [6, 19], 2, [0, 117, "Bo3"], 2, 2, [0, 108, "GW2"], 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 20, [0, 84, "GW2"], 1, 2, 1, 2, 2, 3, 20, 1, 2, [0, 69, "Vx"], 20, 20, [0, 68, "GW2"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1,  [...]
+#V   n = 180
+[ , [6, 4], 2, 1, 2, 3, 2, [0, 111, "GO2"], 3, 2, 1, 2, 2, 1, 2, [0, 96, "BZ"], 1, 1, 1, 2, 2, 3, 20, [0, 81, "GW2"], 20, [0, 78, "BZ"], [0, 75, "BZ"], 2, 20, 20, [0, 72, "BZ"], 1, 20, 20, 3, 1, 20, [0, 64, "Var"], 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 181
+[ , 2, 2, 2, [6, 81], 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 3, 1, 1, 1, 2, 2, 3, 20, 3, 20, 3, 2, [0, 74, "VE"], 20, 20, 3, 2, 1, 20, 3, [0, 66, "Vx"], 1, 1, 20, [0, 63, "VE"], [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "Var"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20 [...]
+#V   n = 182
+[ , 2, [6, 13], 2, 2, 2, [0, 117, "GO"], 2, 20, [0, 108, "DaH"], 20, [0, 105, "ARS"], [0, 102, "XBZ"], 20, [0, 99, "DaH"], 3, 20, 1, 1, 2, 2, 3, 2, 3, 20, 3, [0, 76, "Vx"], 1, 1, 20, 3, [0, 71, "Vx"], 20, [0, 69, "GW2"], 3, 1, 20, [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 183
+[ , 2, 3, [6, 27], 2, 2, 3, 2, 2, 3, 20, 3, 3, 20, 3, 2, 20, 20, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 67, "Vx"], 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "VE"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, [...]
+#V   n = 184
+[ , [6, 4], 2, 1, 2, [0, 120, "Gu"], 3, [0, 114, "GO2"], [0, 110, "XB"], 3, 2, 3, 3, 20, 3, 2, 20, 20, 20, [0, 93, "XX"], [0, 89, "DaH"], 2, [0, 84, "XBZ"], 1, 1, 2, 2, 1, 1, 1, 2, [0, 72, "Vx"], 1, 1, 2, 1, 20, [0, 66, "Var"], 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "VE"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 20, [0, 47, "VE"], 20, [0, 46, "BZ"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"],  [...]
+#V   n = 185
+[ , 2, 2, 2, [6, 81], 2, 2, 3, 2, 2, [0, 107, "MTS"], 3, 3, 1, 1, 2, 1, 20, 20, 3, 3, 2, 3, 1, 1, 2, [0, 78, "Vx"], 20, 1, 1, 2, 1, 20, 1, 2, 1, 1, 1, 20, [0, 65, "VE"], [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 186
+[ , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 20, 3, 3, 2, 1, 1, 1, 2, 3, 1, 20, 1, 2, 20, [0, 72, "Vx"], 20, [0, 71, "GW2"], 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 20, [0, 53, "VE"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, [0, 30, "VE"], 20, [...]
+#V   n = 187
+[ , 2, [6, 9], [4, 2], 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 20, 1, 1, 2, 1, 20, 1, 20, [0, 76, "GW2"], 2, 1, 20, 3, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20 [...]
+#V   n = 188
+[ , [6, 4], 2, 1, 2, 2, [0, 120, "Koh"], 2, 2, [0, 111, "BZ"], [0, 109, "MTS"], 2, 2, 20, 1, 2, 20, 1, 2, 3, 1, 2, 20, 20, 1, 2, 1, 1, 20, 1, 2, 2, 20, [0, 72, "Vx"], 3, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "BZ"], 1, 20, [0, 54, "BZ"], 1, 20, [0, 52, "BZ"], 1, 20, [0, 50, "Var"], 1, 20, 1, 20, [0, 47, "VE"], 20, [0, 46, "BZ"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 3 [...]
+#V   n = 189
+[ , 2, 2, 20, [22, 4, 1], 2, 2, 2, [0, 114, "BZ"], 2, 2, [0, 108, "BZ"], 2, 20, 20, [0, 102, "BZ"], 20, 20, [0, 96, "BZ"], 3, 20, [0, 90, "BZ"], 20, 20, 20, [0, 84, "BZ"], [0, 80, "Vx"], 1, 1, 20, [0, 77, "GW2"], 2, [0, 73, "Var"], 1, 2, 1, 1, 1, 20, [0, 67, "VE"], [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1,  [...]
+#V   n = 190
+[ , 2, 2, 2, 1, 2, 2, 2, 3, 2, 2, 3, 2, 20, 20, 3, 20, 20, 3, 2, 20, 3, 1, 20, 20, 3, 1, 20, 1, 1, 1, 2, 1, 20, [0, 72, "Vx"], 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, [...]
+#V   n = 191
+[ , 2, [6, 9], 2, 20, [0, 126, "BKW"], 2, 2, 1, 2, [0, 111, "MTS"], 1, 2, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 86, "Vx"], 1, 20, 3, 1, 1, 20, 1, 1, 2, [0, 74, "Var"], [0, 73, "Vx"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, [...]
+#V   n = 192
+[ , [6, 4], 2, [6, 32], 2, 3, [0, 123, "GO"], [0, 120, "GO2"], 2, [0, 114, "BZ"], 2, 2, [0, 108, "XBZ"], 1, 1, 2, 1, 1, 2, [0, 95, "X6a"], 1, 2, 1, 20, [0, 85, "BZ"], 3, 1, 1, 1, 20, 1, 2, 1, 1, 20, [0, 72, "Vx"], [0, 71, "Var"], [0, 70, "Var"], 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "BZ"], 1, 20, [0, 58, "BZ"], [0, 57, "Var"], 20, [0, 56, "BZ"], [0, 55, "Var"], 20, [0, 54, "BZ"], 1, 20, [0, 52, "BZ"], 1, 20, [0, 50, "Var"], 1, 20, 20, [0, 48, "BZ"], [0,  [...]
+#V   n = 193
+[ , 2, 2, 1, 2, 3, 2, 3, [0, 116, "XB"], 3, 2, [0, 110, "XB"], 3, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 3, 20, 1, 1, 1, 20, [0, 79, "GW2"], [0, 75, "Var"], [0, 74, "Vx"], 1, 1, 1, 1, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 2 [...]
+#V   n = 194
+[ , 2, 2, 2, [6, 81], 3, 2, 2, 2, 1, 2, 2, 3, 1, 1, 2, 1, 1, 2, [0, 96, "X6a"], 1, 2, 1, 1, 2, 1, 2, 20, 1, 1, 2, 3, 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], [0, 71, "Vx"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Vx"], 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "Var"], 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "Var"], 2 [...]
+#V   n = 195
+[ , 2, [6, 13], 2, 2, 1, 2, 2, 2, 2, [0, 114, "Ma"], 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, [0, 84, "Vx"], 20, 20, 1, 2, 2, [0, 76, "Vx"], [0, 75, "Vx"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "VE"], 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "VE"], 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1 [...]
+#V   n = 196
+[ , [6, 4], 3, [6, 36], 2, 2, [0, 126, "GO"], 2, 2, [0, 116, "MTS"], 2, 2, 20, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 20, 20, [0, 82, "GW2"], [0, 80, "GW2"], 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], [0, 72, "Vx"], 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "VE [...]
+#V   n = 197
+[ , 2, 2, 1, 2, 2, 3, 2, 2, 1, 2, 2, 2, 20, 1, 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 2, 20, 1, 2, 20, 3, 3, 2, [0, 76, "Vx"], 1, 1, 1, 1, 20, [0, 71, "Var"], [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 20, [0, 43, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 20,  [...]
+#V   n = 198
+[ , 2, 2, 2, [22, 4, 1], [0, 129, "Gu1"], 2, 2, [0, 120, "BZ"], 1, 2, [0, 114, "BZ"], 2, 20, 20, [0, 108, "BZ"], 20, 20, [0, 102, "BZ"], [0, 99, "X6a"], 20, [0, 96, "BZ"], 20, 20, [0, 90, "BZ"], 2, 1, 20, [0, 84, "BZ"], 20, 3, 2, [0, 78, "BZ"], 1, 20, [0, 75, "VE"], [0, 74, "Var"], [0, 73, "Vx"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "Var"], 1, 20, 1, 1, 20, 1, 20 [...]
+#V   n = 199
+[ , 2, 2, 2, 2, 2, 2, 2, 3, 2, [0, 117, "Ma"], 3, 2, 20, 20, 3, 20, 20, 3, 3, 20, 3, 20, 20, 1, 2, 20, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 72, "Var"], [0, 71, "Vx"], 1, 1, 20, [0, 68, "VE"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "Var"], 20, 1, 2 [...]
+#V   n = 200
+[ , [6, 4], [6, 9], [6, 40], 2, 2, 2, [0, 126, "BKW"], 2, [0, 119, "MTS"], 2, 2, 2, 1, 20, 3, 1, 20, 3, 3, 20, 3, 1, 20, 20, [0, 90, "XBZ"], [0, 86, "Vx"], 20, 1, 1, 1, 2, 20, [0, 78, "BZ"], [0, 77, "VE"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 201
+[ , 2, 2, 1, 2, 2, [0, 129, "GW2"], 3, 2, 2, [0, 118, "MTS"], 2, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 1, 1, 20, 3, 1, 20, 20, 1, 1, 2, 2, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, [...]
+#V   n = 202
+[ , 2, 2, 20, [6, 81], [0, 132, "BKW"], 2, 3, [0, 122, "XB"], 2, 2, [0, 116, "XB"], [0, 114, "XBZ"], 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 1, 20, 20, 1, 2, [0, 80, "Vx"], 20, [0, 78, "Vx"], [0, 77, "Var"], [0, 76, "Vx"], 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, [0, 44, "Var"],  [...]
+#V   n = 203
+[ , 2, 2, 20, 3, 2, 2, 2, 1, 2, 2, 2, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 20, 20, [0, 85, "GW2"], 1, 1, 1, 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "VE"], 1, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 204
+[ , [6, 4], [6, 9], 2, 3, 2, [0, 131, "GW2"], 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 20, 20, 3, 2, [0, 80, "Vx"], [0, 79, "Var"], [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], 1, 1, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 2 [...]
+#V   n = 205
+[ , 2, 2, 2, 1, 2, 2, [0, 128, "BKW"], 1, 2, [0, 121, "MTS"], 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, 1, 1, 2, 1, 20, 3, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "VE"], 1, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, [0, 39, "Var"], 2 [...]
+#V   n = 206
+[ , 2, 2, [6, 10], 2, [0, 135, "Bo3"], 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 20, 1, 2, 1, 1, 2, 2, 2, [0, 80, "Var"], [0, 79, "Vx"], [0, 78, "Vx"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, [...]
+#V   n = 207
+[ , 2, 2, 1, 2, 3, 2, 2, 1, 2, 2, [0, 120, "BZ"], 1, 2, 20, [0, 114, "BZ"], 20, 20, [0, 108, "BZ"], 2, 20, [0, 102, "BZ"], 20, 20, [0, 96, "BZ"], 1, 1, 20, [0, 90, "BZ"], 1, 1, 2, [0, 84, "BZ"], [0, 82, "Vx"], 1, 1, 1, 20, [0, 77, "Var"], [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "VE"], 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, [...]
+#V   n = 208
+[ , [6, 4], [6, 13], 2, [6, 87], 1, 2, 2, 20, [0, 126, "DaH"], 2, 3, 20, [0, 117, "DaH"], 20, 3, 20, 20, 3, 2, 20, 3, 20, 20, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, [0, 80, "Vx"], 1, 1, 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, [0, 46,  [...]
+#V   n = 209
+[ , 2, 3, 2, 2, 2, [0, 135, "GW2"], 2, 20, 3, [0, 124, "MTS"], 2, 20, 3, 20, 3, 1, 20, 3, [0, 105, "DaH"], 20, 3, 1, 20, 3, 1, 1, 1, 1, 1, 1, 2, 1, 2, [0, 82, "Vx"], 1, 20, [0, 79, "VE"], [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 1, 20, [0, 73, "VE"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20 [...]
+#V   n = 210
+[ , 2, 2, [6, 10], 2, 2, 3, [0, 132, "Koh"], 2, 3, 2, 2, 1, 2, 1, 2, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 84, "BZ"], 1, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, 1, 20, 1, 20, [...]
+#V   n = 211
+[ , 2, 2, 1, 2, [0, 138, "Bo3"], 3, 3, [0, 128, "XB"], 1, 2, [0, 122, "XB"], 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 86, "Vx"], 2, [0, 83, "Vx"], [0, 82, "Vx"], 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Vx"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, [...]
+#V   n = 212
+[ , [6, 4], 2, 2, [6, 91], 3, 2, 3, 1, 1, 2, 2, [0, 120, "XBZ"], [0, 119, "GW2"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 85, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 77, "Var"], [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, " [...]
+#V   n = 213
+[ , 2, [6, 9], 2, 2, 2, 2, 2, 1, 2, [0, 127, "MTS"], 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 84, "Vx"], [0, 83, "Vx"], [0, 82, "Vx"], [0, 81, "Var"], [0, 80, "Var"], [0, 79, "Vx"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "Var"] [...]
+#V   n = 214
+[ , 2, 2, [4, 2], 2, 2, 2, 2, 2, [0, 129, "MTS"], 2, 2, 20, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 86, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 215
+[ , 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, [0, 82, "Var"], [0, 81, "Vx"], 1, 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "Var"], 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 216
+[ , [6, 4], 2, 20, [22, 4, 1], 2, [0, 139, "GO"], [0, 135, "BZ"], [0, 132, "BZ"], 1, 2, [0, 126, "BZ"], 20, 20, 20, [0, 120, "BZ"], 20, 20, [0, 114, "BZ"], 20, 20, [0, 108, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 90, "BZ"], 2, [0, 86, "VE"], 20, [0, 84, "BZ"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Vx"], 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, [...]
+#V   n = 217
+[ , 2, [6, 9], 2, 3, 2, 2, 2, 1, 1, 2, 3, 1, 20, 20, 3, 20, 20, 3, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, [0, 88, "VE"], 1, 2, 1, 2, [0, 82, "Vx"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, "VE"], 1, 20, 1,  [...]
+#V   n = 218
+[ , 2, 2, 2, 1, 2, 2, 2, 20, [0, 132, "MTS"], [0, 131, "Ma"], 2, 1, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "V [...]
+#V   n = 219
+[ , 2, 2, [6, 19], 2, [0, 144, "BKW"], 2, 2, 1, 1, 2, 2, 2, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 89, "Vx"], 1, 1, 2, 1, 2, 1, 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1 [...]
+#V   n = 220
+[ , [6, 4], 2, 1, 2, 3, 2, [0, 138, "BZ"], 1, 1, 2, [0, 128, "XB"], 2, 20, [0, 122, "XB"], 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 92, "Vx"], 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "VE"], 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, " [...]
+#V   n = 221
+[ , 2, [6, 13], 2, [6, 100], 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"],  [...]
+#V   n = 222
+[ , 2, 3, 2, 2, 2, [0, 144, "BKW"], 2, 20, [0, 135, "MTS"], [0, 134, "Ma"], 2, [0, 126, "BY"], 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 91, "Vx"], 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, [...]
+#V   n = 223
+[ , 2, 2, [6, 27], 2, 2, 3, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 94, "Vx"], 2, [0, 90, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "V [...]
+#V   n = 224
+[ , [6, 4], 2, 1, 2, [0, 147, "Bo3"], 3, [0, 141, "BKW"], 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 92, "Vx"], 1, 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], [0, 85, "VE"], 1, 2, 1, 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 225
+[ , 2, 2, 2, [22, 4, 1], 2, 3, 2, 1, 1, 2, [0, 132, "BZ"], 20, 20, 1, 2, 20, 20, [0, 120, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 91, "Vx"], [0, 90, "BZ"], 1, 1, 1, 1, 20, [0, 84, "BZ"], 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 2 [...]
+#V   n = 226
+[ , 2, [6, 9], 2, 2, 2, 2, 2, 1, 2, [0, 137, "MTS"], 3, 1, 20, 20, [0, 126, "XBZ"], 1, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 96, "Vx"], 2, 2, 3, [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Vx"], [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 227
+[ , 2, 2, [6, 27], 2, 2, 2, 2, 20, [0, 139, "MTS"], 2, 2, 1, 1, 20, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 94, "VE"], [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "Vx"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [...]
+#V   n = 228
+[ , [6, 4], 2, 1, 2, [0, 150, "Bo3"], [0, 146, "GO"], [0, 144, "BKW"], 1, 1, 2, 2, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Var"], [0, 86, "Vx"], [0, 85, "Vx"], 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0 [...]
+#V   n = 229
+[ , 2, 2, 20, [6, 108], 2, 2, 3, 1, 1, 2, [0, 134, "XB"], 2, 20, [0, 128, "XB"], 3, 20, [4, 14], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 98, "Vx"], [0, 95, "Vx"], 2, [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "Var"], [0, 83, "Vx"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "VE"], 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20 [...]
+#V   n = 230
+[ , 2, [6, 9], 2, 3, 2, 2, 3, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 94, "Vx"], 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Vx"], 1, 1, 1, 1, 20, [0, 82, "Var"], [0, 81, "Var"], 1, 1, 20, [0, 78, "VE"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 231
+[ , 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, [0, 132, "BY"], 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, [0, 93, "Vx"], [0, 92, "VE"], 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Vx"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, [...]
+#V   n = 232
+[ , [6, 4], 2, [6, 32], 2, [0, 153, "BvE"], 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Vx"], 1, 1, 20, [0, 79, "VE"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "VE"], 1, 20, [0, 62, "Var"], 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, 1, 20, [0, 52, "VE"],  [...]
+#V   n = 233
+[ , 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 20, 1, 2, 2, 20, 1, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 101, "Vx"], [0, 98, "Vx"], 2, 2, [0, 93, "VE"], [0, 92, "VE"], 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Vx"], 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "VE"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, [...]
+#V   n = 234
+[ , 2, [6, 13], 2, [22, 4, 1], 2, 2, 1, 1, 1, 2, [0, 138, "BZ"], 20, 20, [0, 132, "BZ"], 2, 1, 20, [0, 126, "BZ"], 1, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 97, "Vx"], [0, 95, "BZ"], 1, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], 1, 1, 1, 1, 20, [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "VE"], 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 235
+[ , 2, 3, 2, 1, 2, 2, 1, 1, 1, 2, 3, 1, 20, 1, 2, 1, 1, 1, 1, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 99, "Vx"], 2, 2, [0, 94, "Vx"], [0, 93, "VE"], [0, 92, "Vx"], 1, 1, 20, [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, 1, 20, [0, 61, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, [...]
+#V   n = 236
+[ , [6, 4], 2, [6, 36], 2, [0, 156, "Bo3"], [0, 153, "GW2"], 1, 1, 1, 2, 2, 1, 1, 20, [0, 132, "XBZ"], 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 103, "Vx"], 2, [0, 98, "Vx"], [0, 96, "Vx"], 1, 1, 1, 2, 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], 1, 1, 1, 20, [0, 81, "VE"], 1, 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "Var"], 1, 20 [...]
+#V   n = 237
+[ , 2, 2, 1, 2, 2, 3, 1, 1, 1, 2, 2, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 100, "Vx"], 2, 2, [0, 95, "Vx"], [0, 94, "Vx"], [0, 93, "Vx"], [0, 92, "Vx"], 20, [0, 90, "VE"], [0, 89, "Var"], [0, 88, "Vx"], 1, 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "VE"], 1, 20, [0, 67, "VE"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, [...]
+#V   n = 238
+[ , 2, 2, 2, [6, 117], 2, 3, 1, 1, 1, 2, [0, 140, "XB"], 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 99, "Vx"], [0, 97, "Vx"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 20, [0, 82, "VE"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20, [0, 54, "Var"], 1, 20,  [...]
+#V   n = 239
+[ , 2, [6, 9], 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 20, 1, 1, 1, 1, 2, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 2, [0, 105, "Vx"], 2, 2, 1, 1, 2, [0, 94, "Vx"], [0, 93, "Vx"], [0, 92, "Vx"], [0, 91, "VE"], [0, 90, "Var"], [0, 89, "Vx"], 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55 [...]
+#V   n = 240
+[ , [6, 4], 2, [6, 40], 1, 2, [0, 154, "GO"], 1, 1, 1, 2, 2, 1, 1, 2, 2, 20, 1, 1, 1, 2, 20, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 2, [0, 102, "Vx"], [0, 100, "Vx"], [0, 98, "Vx"], [0, 97, "Vx"], [0, 96, "BZ"], 1, 1, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], 1, 1, 1, 20, [0, 83, "VE"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 62, "VE"], 1, 20, 1, 20, [0,  [...]
+#V   n = 241
+[ , 2, 2, 1, 1, 2, 2, 20, 1, 1, 2, 2, 20, 1, 2, 2, 20, 20, 1, 1, 2, 20, 20, 1, 1, 2, 20, 20, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, [0, 93, "VE"], [0, 92, "Var"], [0, 91, "Var"], [0, 90, "Vx"], 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 65, "VE"], 1, 20, [0, 63, "Var"], 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, [...]
+#V   n = 242
+[ , 2, 2, 20, 1, 2, 2, 20, 20, 1, 2, 2, 20, 20, [0, 138, "MTS"], [0, 135, "Ma"], 20, 20, 20, 1, 2, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 2, [0, 107, "Vx"], 2, 2, 2, [0, 98, "Vx"], 20, 1, 2, 1, 1, 1, 1, 20, [0, 89, "Var"], [0, 88, "Var"], 1, 1, 1, 20, [0, 84, "VE"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "VE"], 1, 20, [0, 68, "VE"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 5 [...]
+#V   n = 243
+[ , [6, 3], [6, 9], 20, 20, [22, 5, 1], [0, 156, "Koh"], 20, 20, 20, [0, 153, "XBC"], [0, 144, "BZ"], 20, 20, 3, 3, 20, 20, 20, 20, [0, 132, "XBC"], [0, 128, "NBC"], 20, 20, 20, [0, 126, "XBC"], 20, 20, 20, 20, [0, 123, "XBC"], [0, 122, "XBC"], 3, [0, 104, "Vx"], [0, 102, "BZ"], [0, 100, "BZ"], 3, [0, 97, "Vx"], 20, [0, 96, "BZ"], [0, 94, "Vx"], [0, 93, "Var"], [0, 92, "Vx"], [0, 91, "Vx"], [0, 90, "Vx"], 3, 3, 20, [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Vx"], 3, 20, [0, 83, "VE"], [0, 8 [...]
+#V   n = 244
+[ , 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, [...]
+
+
+GUAVA_BOUNDS_TABLE[2][3] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ ,],
+#V   n = 5
+[ , [15, 3], [14, 3]],
+#V   n = 6
+[ , [15, 4], [15, 3], 11],
+#V   n = 7
+[ , [15, 5], [15, 4], [15, 3], 11],
+#V   n = 8
+[ , [15, 6], [15, 5], [15, 4], [15, 3], 11],
+#V   n = 9
+[ , [15, 6], [15, 6], [15, 5], [15, 4], [15, 3], 11],
+#V   n = 10
+[ , [15, 7], [15, 6], [15, 6], [15, 5], [15, 4], [15, 3], 11],
+#V   n = 11
+[ , [15, 8], [15, 7], [15, 6], [15, 6], [15, 5], [14, 6], [15, 3], 11],
+#V   n = 12
+[ , [15, 9], [15, 8], [16, 6], [15, 6], [15, 6], 12, 11, [15, 3], 11],
+#V   n = 13
+[ , [15, 9], [15, 9], [16, 7], [16, 6], [15, 6], 12, 11, 11, [15, 3], 11],
+#V   n = 14
+[ , [15, 10], [15, 9], [16, 8], [16, 7], [16, 6], [15, 6], 11, 11, 11, [14, 9], 11],
+#V   n = 15
+[ , [15, 11], [15, 9], [15, 9], [16, 8], [16, 7], [16, 6], [0, 5, "vE2"], [0, 4, "vE2"], 11, 11, 11, 11],
+#V   n = 16
+[ , [15, 12], [15, 10], [15, 9], [15, 9], [0, 7, "vE2"], [0, 6, "vE2"], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 17
+[ , [15, 12], [15, 11], [15, 10], [15, 9], 12, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 18
+[ , [15, 13], [15, 12], [15, 11], [15, 10], [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 19
+[ , [15, 14], [15, 12], [15, 12], [15, 11], [14, 4], [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 20
+[ , [15, 15], [15, 13], [15, 12], [15, 12], 12, 11, [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 21
+[ , [15, 15], [15, 14], [0, 12, "HN"], [15, 12], 12, 11, [16, 9], [15, 9], 11, 11, [16, 6], [16, 6], 11, 11, [0, 3, "Pel"], 11, 11, 11],
+#V   n = 22
+[ , [15, 16], [15, 15], 12, 11, [15, 12], 11, [16, 10], [16, 9], [15, 9], 11, [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 23
+[ , [15, 17], [15, 15], 12, 11, 11, [15, 12], [16, 11], [16, 10], [16, 9], [15, 9], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 24
+[ , [15, 18], [15, 16], [15, 15], 11, 11, 11, [0, 11, "BS"], [16, 11], [16, 10], [16, 9], [15, 9], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 25
+[ , [15, 18], [15, 17], [15, 16], [15, 15], 11, 11, [16, 12], 11, [16, 11], [16, 10], [16, 9], [0, 8, "LP"], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 26
+[ , [15, 19], [15, 18], [15, 17], [14, 3], [15, 15], 11, [16, 13], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 27
+[ , [15, 20], [15, 18], [15, 18], 12, 11, [15, 15], [16, 14], [14, 6], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, [14, 11], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 28
+[ , [15, 21], [15, 18], [15, 18], 12, [0, 15, "HHM"], 11, [15, 15], 12, [16, 12], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, 11, [14, 12], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 29
+[ , [15, 21], [15, 19], [15, 18], [15, 18], 12, 11, [16, 15], 12, [16, 13], [16, 12], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11],
+#V   n = 30
+[ , [15, 22], [15, 20], [15, 19], [15, 18], 12, 11, 11, [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, [16, 11], [14, 11], [16, 9], 11, 11, 11, [16, 6], [14, 15], 11, 11, 11, 11, 11, 11],
+#V   n = 31
+[ , [15, 23], [15, 21], [15, 20], [16, 18], [15, 18], 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 12, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 32
+[ , [15, 24], [15, 21], [15, 21], [16, 19], [16, 18], [15, 18], 11, [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, [16, 10], [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 33
+[ , [15, 24], [15, 22], [15, 21], [16, 20], [16, 19], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], [16, 11], [0, 9, "LP"], [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, [14, 18], 11, 11, 11, 11, 11],
+#V   n = 34
+[ , [15, 25], [15, 23], [15, 22], [15, 21], [16, 20], [16, 19], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 12, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 35
+[ , [15, 26], [15, 24], [15, 23], [16, 21], [0, 20, "Bou"], [16, 20], [16, 18], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 12, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 36
+[ , [15, 27], [15, 24], [15, 24], [16, 22], [16, 21], 11, [16, 19], [16, 18], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 37
+[ , [15, 27], [15, 25], [15, 24], [16, 23], [0, 21, "Bou"], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [0, 17, "LP"], [16, 17], [14, 9], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 38
+[ , [15, 28], [15, 26], [15, 25], [15, 24], 12, [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 12, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 39
+[ , [15, 29], [15, 27], [15, 26], [16, 24], 12, [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 40
+[ , [15, 30], [15, 27], [15, 27], [0, 24, "vE1"], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [0, 8, "LP"], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 41
+[ , [15, 30], [15, 27], [15, 27], 12, 11, [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, [14, 27], 11, 11],
+#V   n = 42
+[ , [15, 31], [15, 28], [15, 27], 12, 11, [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [0, 14, "BKn"], [16, 14], [14, 15], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 43
+[ , [15, 32], [15, 29], [15, 27], [15, 27], 11, [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [14, 8], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 12, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 44
+[ , [15, 33], [15, 30], [15, 28], [15, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 45
+[ , [15, 33], [15, 30], [15, 29], [15, 28], [15, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [14, 8], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 46
+[ , [15, 34], [15, 31], [15, 30], [15, 29], [15, 28], [15, 27], [0, 26, "Gur"], [16, 26], [14, 6], [16, 24], [16, 24], 12, 11, [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 15], [16, 15], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 47
+[ , [15, 35], [15, 32], [15, 30], [15, 30], [0, 28, "HJ"], [16, 27], [15, 27], 11, 12, 11, [16, 24], 12, 11, 11, [16, 21], 11, [16, 20], [16, 18], [16, 18], [16, 18], 11, [16, 16], [16, 15], [16, 15], 11, [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 48
+[ , [15, 36], [15, 33], [15, 31], [15, 30], 12, [16, 28], [16, 27], [15, 27], 11, 11, 11, [16, 24], 11, 11, 11, [16, 21], 11, [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 49
+[ , [15, 36], [15, 33], [15, 32], [15, 31], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, 11, 11, [16, 24], 11, 11, [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 50
+[ , [15, 37], [15, 34], [15, 33], [0, 31, "EHW"], [0, 30, "HJL"], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, 11, [16, 24], [16, 24], 11, [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [0, 14, "BKn"], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 51
+[ , [15, 38], [15, 35], [15, 33], 12, 11, [16, 30], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, [16, 8], [0, 6, "BKn"], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 52
+[ , [15, 39], [15, 36], [15, 34], [15, 33], 11, [16, 31], [16, 30], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 12, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 53
+[ , [15, 39], [15, 36], [15, 35], [15, 34], [15, 33], [16, 32], [16, 31], [16, 30], [15, 30], [14, 6], [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [0, 8, "sp"], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 54
+[ , [15, 40], [15, 36], [15, 36], [15, 35], [15, 34], [15, 33], [16, 32], [16, 31], [16, 30], 12, 11, [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [0, 17, "LP"], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 55
+[ , [15, 41], [15, 37], [15, 36], [15, 36], [15, 35], [16, 33], [0, 32, "Gur"], [0, 31, "Gur"], [16, 31], [16, 30], 11, 11, [14, 8], [16, 27], [0, 26, "BKn"], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, [0, 16, "BKn"], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 56
+[ , [15, 42], [15, 38], [15, 36], [15, 36], [15, 36], [16, 34], [16, 33], 11, 11, [14, 6], [16, 30], 11, 11, 11, [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 10, "LP"], 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 57
+[ , [15, 42], [15, 39], [15, 37], [15, 36], [15, 36], [16, 35], [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 12, 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], [0, 4, "Jo"], 11, [14, 36], 11, 11, 11, 11],
+#V   n = 58
+[ , [15, 43], [15, 39], [15, 38], [16, 36], [15, 36], [0, 35, "BKn"], [16, 35], [16, 33], [16, 33], 11, 11, 11, [16, 30], 11, 11, [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 12, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 59
+[ , [15, 44], [15, 40], [15, 39], [16, 37], [16, 36], [15, 36], 11, [16, 34], [16, 33], [16, 33], 11, 11, 11, [16, 30], 11, [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "BKn"], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 60
+[ , [15, 45], [15, 41], [15, 39], [16, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 33], 11, 11, 11, [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [0, 25, "BKn"], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [0, 12, "BKn"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 61
+[ , [15, 45], [15, 42], [15, 40], [15, 39], [16, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 33], 11, 11, 11, [0, 29, "BKn"], [16, 29], [16, 27], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [0, 20, "LP"], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, 12, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 62
+[ , [15, 46], [15, 42], [15, 41], [16, 39], [15, 39], [16, 38], [14, 4], [16, 36], [0, 35, "Gur"], [16, 35], [16, 34], [16, 33], [0, 32, "BKn"], 11, 11, [16, 30], 11, [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, [14, 16], [16, 24], 11, [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [14, 25], [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 63
+[ , [15, 47], [15, 43], [15, 42], [16, 40], [16, 39], [15, 39], 12, 11, [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, 11, [16, 31], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, 11, [16, 24], 11, [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 64
+[ , [15, 48], [15, 44], [15, 42], [16, 41], [16, 40], [16, 39], 12, 11, [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [0, 31, "BKn"], [16, 31], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, 11, [16, 24], 11, [0, 22, "BKn"], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], [0, 16, "BKn"], 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 65
+[ , [15, 48], [15, 45], [15, 43], [15, 42], [16, 41], [16, 40], [16, 39], 11, [16, 37], [16, 36], [16, 36], 11, [0, 34, "BKn"], [16, 34], [16, 33], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], 12, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 66
+[ , [15, 49], [15, 45], [15, 44], [16, 42], [15, 42], [16, 41], [14, 4], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [0, 26, "BKn"], 11, [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 67
+[ , [15, 50], [15, 45], [15, 45], [16, 43], [16, 42], [0, 41, "BKn"], 12, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [0, 33, "BKn"], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [14, 22], [16, 21], 11, [16, 20], [0, 18, "BKn"], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, [14, 34], [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 68
+[ , [15, 51], [15, 46], [15, 45], [16, 44], [16, 43], [16, 42], 11, 11, [16, 39], [0, 38, "Gur"], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 12, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 69
+[ , [15, 51], [15, 47], [15, 45], [15, 45], [0, 43, "Ma"], [0, 42, "Gur"], [16, 42], 11, [16, 40], [16, 39], 11, [16, 38], [16, 37], [16, 36], [0, 35, "LP"], 11, 11, [16, 33], [0, 32, "BKn"], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], [0, 10, "BKn"], 11, 11, [0, 8, "BKn"], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 70
+[ , [15, 52], [15, 48], [15, 46], [15, 45], 12, 11, 11, [16, 42], [16, 41], [16, 40], [16, 39], 11, [0, 37, "BKn"], [14, 8], [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 71
+[ , [15, 53], [15, 48], [15, 47], [0, 45, "HW1"], [15, 45], 11, 11, 11, [16, 42], [0, 40, "Gur"], [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, [0, 20, "BKn"], 11, [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, [0, 12, "BKn"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 72
+[ , [15, 54], [15, 49], [15, 48], 12, [16, 45], [15, 45], 11, 11, [16, 42], 12, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, [0, 34, "BKn"], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 12, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 73
+[ , [15, 54], [15, 50], [15, 48], 12, [16, 46], [16, 45], [0, 44, "LP"], 11, [16, 43], [16, 42], 11, 11, [0, 39, "BKn"], [16, 39], 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [0, 29, "BKn"], [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 74
+[ , [15, 55], [15, 51], [15, 49], [15, 48], [16, 47], [16, 45], [16, 45], 11, [16, 44], [0, 42, "Da"], [16, 42], 11, 11, 11, [16, 39], 11, 11, 11, [16, 36], 11, 11, [0, 33, "BKn"], [16, 33], 11, [0, 31, "BKn"], [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [0, 6, "Jo"], 11, [16, 6], 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 75
+[ , [15, 56], [15, 51], [15, 50], [0, 48, "HN"], [15, 48], [16, 46], [16, 45], [16, 45], 11, 12, 11, [16, 42], 11, 11, 11, [0, 38, "Da"], 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [0, 14, "BKn"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 12, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 76
+[ , [15, 57], [15, 52], [15, 51], 12, [16, 48], [16, 47], [16, 46], [16, 45], [16, 45], 11, 11, 11, [0, 41, "BKn"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 12, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 77
+[ , [15, 57], [15, 53], [15, 51], 12, [16, 49], [16, 48], [16, 47], [16, 46], [16, 45], [0, 44, "BKn"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "Da"], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [0, 24, "LP"], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 78
+[ , [15, 58], [15, 54], [15, 52], [15, 51], [16, 50], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], 11, 11, 11, 11, 11, [0, 40, "Da"], 11, 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, [16, 33], 11, 11, [0, 30, "LP"], [16, 30], 11, [16, 29], [16, 28], [16, 27], [0, 26, "LP"], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [0, 19, "LP"], [0, 18, "LP"], [16, 18], [16, 18], [0, 16, "LP"], 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11 [...]
+#V   n = 79
+[ , [15, 59], [15, 54], [15, 53], [15, 52], [15, 51], [16, 49], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], 11, [0, 43, "BKn"], [0, 42, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, 11, 11, [16, 30], 11, [0, 28, "LP"], [16, 28], [16, 27], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, 11, 11, [16, 18], 12, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 80
+[ , [15, 60], [15, 54], [15, 54], [15, 53], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [0, 46, "BKn"], [14, 6], [16, 45], 11, 11, 11, 11, 11, 11, [0, 39, "Da"], 11, 11, 11, [16, 37], [16, 36], 11, 11, 11, 11, [0, 32, "LP"], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [0, 20, "LP"], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 81
+[ , [15, 60], [15, 55], [15, 54], [15, 54], [0, 51, "Ma"], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, 11, [16, 45], 11, 11, 11, [0, 41, "Da"], 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 12, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 82
+[ , [15, 61], [15, 56], [15, 54], [15, 54], 12, [16, 51], [0, 50, "BKn"], [16, 50], [16, 49], [16, 48], 11, 11, 11, [0, 44, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "Da"], [16, 36], 11, [0, 34, "LP"], 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 83
+[ , [15, 62], [15, 57], [15, 54], [15, 54], 12, [16, 52], [16, 51], 11, [16, 50], [0, 48, "BKn"], [16, 48], 11, 11, [16, 45], 11, 11, 11, 11, 11, [0, 40, "Da"], 11, 11, [0, 38, "Da"], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 84
+[ , [15, 63], [15, 57], [15, 55], [15, 54], [15, 54], [16, 53], [16, 52], [16, 51], 11, 12, 11, [0, 47, "LP"], 11, [16, 46], [16, 45], 11, [0, 43, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 85
+[ , [15, 63], [15, 58], [15, 56], [15, 55], [15, 54], [15, 54], [0, 52, "BKn"], [16, 52], [16, 51], 11, 11, 11, 11, 13, [16, 46], [16, 45], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, [0, 33, "LP"], 11, 11, [0, 31, "LP"], 11, 11, [0, 29, "LP"], 11, 11, [0, 27, "LP"], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 86
+[ , [15, 64], [15, 59], [15, 57], [15, 56], [16, 54], [15, 54], 12, 11, [16, 52], [0, 50, "BKn"], [0, 49, "Da"], 11, 11, [0, 46, "Da"], 11, [16, 46], [16, 45], 11, 11, [0, 42, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 87
+[ , [15, 65], [15, 60], [15, 57], [15, 57], [16, 55], [16, 54], [15, 54], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 45, "Da"], [16, 45], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 12, 11, 11, [16, 12], [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 88
+[ , [15, 66], [15, 60], [15, 58], [15, 57], [16, 56], [16, 55], [16, 54], [15, 54], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 45], 11, 11, 11, 11, 11, 11, [0, 39, "Da"], 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 89
+[ , [15, 66], [15, 61], [15, 59], [15, 58], [15, 57], [16, 56], [16, 55], [16, 54], [15, 54], [0, 52, "BKn"], [0, 51, "BKn"], [16, 51], 11, 11, 11, 11, 11, 11, 11, [0, 44, "Da"], 11, 11, 11, [0, 41, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, [0, 26, "LP"], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 90
+[ , [15, 67], [15, 62], [15, 60], [15, 59], [16, 57], [15, 57], [16, 56], [16, 54], [16, 54], 12, 11, 11, [16, 51], [0, 49, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 91
+[ , [15, 68], [15, 63], [15, 60], [15, 60], [16, 58], [16, 57], [0, 56, "BKn"], [16, 55], [16, 54], [16, 54], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "LP"], 11, 11, [0, 32, "LP"], 11, 11, [16, 31], [16, 30], 11, [0, 28, "LP"], 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, 11, 11, 11, 11, [16, 6], 11 [...]
+#V   n = 92
+[ , [15, 69], [15, 63], [15, 61], [15, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], [0, 53, "Da"], 11, 11, 11, 11, 11, [0, 48, "Da"], 11, 11, 11, [0, 45, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 93
+[ , [15, 69], [15, 63], [15, 62], [0, 60, "HH"], [15, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], 11, 11, [0, 51, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "LP"], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 94
+[ , [15, 70], [15, 64], [15, 63], 12, [16, 60], [15, 60], [0, 58, "BKn"], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "Da"], 11, 11, 11, 11, 11, [0, 38, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, [0, 22, "sp"], 11, 11, 11, 11, [16, 19], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11,  [...]
+#V   n = 95
+[ , [15, 71], [15, 65], [15, 63], 12, [16, 61], [16, 60], 12, [16, 58], [16, 57], [0, 56, "BKn"], [0, 55, "BKn"], [16, 55], [16, 54], 11, 11, 11, [0, 50, "Da"], 11, 11, 11, [0, 47, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, [16, 20], [0, 18, "sp"], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16 [...]
+#V   n = 96
+[ , [15, 72], [15, 66], [15, 63], [15, 63], [0, 61, "Gur"], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, 11, [16, 55], [0, 53, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 12, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 1 [...]
+#V   n = 97
+[ , [15, 72], [15, 66], [15, 64], [15, 63], 12, [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, 11, 12, 11, 11, 11, 11, 11, [0, 49, "Da"], 11, 11, 11, [0, 46, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6 [...]
+#V   n = 98
+[ , [15, 73], [15, 67], [15, 65], [15, 64], [15, 63], [16, 62], [16, 61], [16, 60], [0, 59, "LP"], [0, 58, "BKn"], [0, 57, "BKn"], [16, 57], 11, 11, 11, 11, [0, 52, "Da"], [0, 51, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 37, "LP"], 11, 11, [0, 35, "LP"], 11, 11, [0, 33, "LP"], 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11,  [...]
+#V   n = 99
+[ , [15, 74], [15, 68], [15, 66], [15, 65], [16, 63], [15, 63], [16, 62], [16, 61], [16, 60], 11, 11, 11, [16, 57], [0, 55, "Da"], [0, 54, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "LP"], 11, 11, [0, 41, "LP"], 11, 11, [0, 39, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [0, 20, "sp"], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 100
+[ , [15, 75], [15, 69], [15, 66], [15, 66], [16, 64], [16, 63], [0, 62, "BKn"], [14, 4], [16, 61], [16, 60], [0, 58, "BKn"], 11, 11, 12, 11, 11, 11, 11, 11, 11, [0, 50, "Da"], 11, 11, [0, 48, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 12, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 101
+[ , [15, 75], [15, 69], [15, 67], [15, 66], [16, 65], [16, 63], [16, 63], 11, 11, [0, 60, "BKn"], 12, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 102
+[ , [15, 76], [15, 70], [15, 68], [15, 67], [15, 66], [16, 64], [16, 63], [16, 63], 11, 11, 11, 11, 11, [0, 57, "LP"], [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 103
+[ , [15, 77], [15, 71], [15, 69], [15, 68], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], 11, [0, 60, "BKn"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, [0, 14, "sp"], 11, 11, [0, 12, "sp [...]
+#V   n = 104
+[ , [15, 78], [15, 72], [15, 69], [15, 69], [16, 67], [16, 66], [16, 65], [16, 64], [16, 63], [0, 62, "BKn"], 12, 11, [16, 60], 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, [0, 40, "LP"], 11, 11, [0, 38, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, [16, 18 [...]
+#V   n = 105
+[ , [15, 78], [15, 72], [15, 70], [15, 69], [0, 67, "DM5"], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], 11, 11, 11, [0, 59, "BKn"], [0, 58, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "LP"], 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11 [...]
+#V   n = 106
+[ , [15, 79], [15, 72], [15, 71], [15, 70], 12, [16, 67], [16, 66], [16, 66], [16, 65], [16, 64], [0, 62, "BKn"], 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 107
+[ , [15, 80], [15, 73], [15, 72], [15, 71], [16, 69], [16, 68], [16, 67], [16, 66], [0, 65, "LP"], [0, 64, "BKn"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 108
+[ , [15, 81], [15, 74], [15, 72], [15, 72], [0, 69, "Ma"], [16, 69], [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, [0, 61, "LP"], [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [0, 24, "sp"], [16, 24], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11 [...]
+#V   n = 109
+[ , [15, 81], [15, 75], [15, 72], [15, 72], 12, [16, 69], [0, 68, "BKn"], [0, 67, "BKn"], [16, 67], [16, 66], [0, 64, "BKn"], 11, [16, 63], 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 110
+[ , [15, 82], [15, 75], [15, 73], [15, 72], 12, [16, 70], [16, 69], 11, 11, [0, 66, "BKn"], 12, 11, [16, 64], [16, 63], [0, 61, "LP"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, [0, 39, "LP"], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, [0, 20, "sp"], 11, 11, 11,  [...]
+#V   n = 111
+[ , [15, 83], [15, 76], [15, 74], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], 11, 11, 11, 11, 11, [0, 63, "LP"], 12, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 112
+[ , [15, 84], [15, 77], [15, 75], [15, 74], [16, 72], [15, 72], [0, 70, "LP"], [0, 69, "LP"], [16, 69], 11, [0, 66, "LP"], 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 49, "LP"], 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 113
+[ , [15, 84], [15, 78], [15, 75], [15, 75], [16, 72], [16, 72], 12, 11, 11, [0, 68, "LP"], 12, 11, [0, 65, "LP"], [0, 64, "LP"], [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [0, 26, "sp"], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 114
+[ , [15, 85], [15, 78], [15, 76], [15, 75], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 12, 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 115
+[ , [15, 86], [15, 79], [15, 77], [15, 76], [16, 74], [16, 73], [16, 72], [0, 71, "LP"], 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, [0, 62, "LP"], [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 116
+[ , [15, 87], [15, 80], [15, 78], [15, 77], [16, 75], [16, 74], [16, 73], [16, 72], 11, [0, 70, "LP"], 12, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, [0, 40, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 1 [...]
+#V   n = 117
+[ , [15, 87], [15, 81], [15, 78], [15, 78], [16, 75], [16, 75], [16, 74], [14, 4], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 50, "LP"], 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 118
+[ , [15, 88], [15, 81], [15, 79], [15, 78], [16, 76], [16, 75], [0, 74, "LP"], 12, 11, [16, 72], [0, 70, "LP"], [0, 69, "LP"], 11, 11, 11, 11, 11, [0, 64, "LP"], [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 30], [16, 30], [16, 30], [0, 28, "sp"], 11, 11, 11, [16, 26], [0, 24, "sp"], [ [...]
+#V   n = 119
+[ , [15, 89], [15, 81], [15, 80], [15, 79], [16, 77], [16, 76], [16, 75], 11, 11, [16, 72], 12, 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 31], [16, 30], [16, 30], 12, 11, 11, 11, 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp" [...]
+#V   n = 120
+[ , [15, 90], [15, 82], [15, 81], [15, 80], [16, 78], [16, 77], [16, 76], [0, 74, "Gur"], 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 12,  [...]
+#V   n = 121
+[ , [15, 90], [15, 83], [15, 81], [15, 81], [16, 78], [16, 78], [0, 76, "LP"], 12, 11, [16, 74], [0, 72, "LP"], [0, 71, "LP"], 11, 11, 11, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11 [...]
+#V   n = 122
+[ , [15, 91], [15, 84], [15, 81], [15, 81], [16, 79], [16, 78], 12, 11, 11, 11, 12, 11, 11, [0, 70, "LP"], [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [0, 26, "Jo"], 11, 11, 11, [16, 24 [...]
+#V   n = 123
+[ , [15, 92], [15, 84], [15, 81], [15, 81], [16, 80], [16, 79], [16, 78], 11, 11, [16, 75], 11, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, [0, 64, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 12, 11, 11, 11, 11, [16, 24], 11, 11, 12, 11, 11, [...]
+#V   n = 124
+[ , [15, 93], [15, 85], [15, 82], [15, 81], [15, 81], [16, 80], [0, 78, "LP"], [0, 77, "LP"], [0, 76, "LP"], [16, 76], [0, 74, "LP"], [0, 73, "LP"], 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [ [...]
+#V   n = 125
+[ , [15, 93], [15, 86], [15, 83], [15, 81], [15, 81], [15, 81], 12, [16, 78], 11, 11, 12, 11, 11, [0, 72, "LP"], 12, 11, 11, 11, 11, 11, 11, [0, 65, "LP"], 11, 11, [0, 63, "LP"], [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 126
+[ , [15, 94], [15, 87], [15, 84], [15, 82], [15, 81], [15, 81], 12, [16, 79], [16, 78], 11, [0, 75, "LP"], 11, 11, 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 1 [...]
+#V   n = 127
+[ , [15, 95], [15, 87], [15, 84], [15, 83], [15, 82], [15, 81], [0, 80, "LP"], [0, 79, "LP"], [0, 78, "LP"], [16, 78], 12, 11, 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32] [...]
+#V   n = 128
+[ , [15, 96], [15, 88], [15, 85], [15, 84], [15, 83], [15, 82], [15, 81], 11, 11, 11, 12, 11, 11, [0, 74, "LP"], 12, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [0, 32, "sp"], [16, 32], [16, 31], [16, 30], 12, 11, 11, 1 [...]
+#V   n = 129
+[ , [15, 96], [15, 89], [15, 86], [15, 84], [15, 84], [15, 83], [16, 81], [15, 81], 11, 11, [0, 77, "LP"], [0, 76, "LP"], 11, 11, 11, 11, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [1 [...]
+#V   n = 130
+[ , [15, 97], [15, 90], [15, 87], [15, 85], [15, 84], [15, 84], [16, 82], [16, 81], [0, 80, "LP"], 11, 12, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [...]
+#V   n = 131
+[ , [15, 98], [15, 90], [15, 87], [15, 86], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], 11, 12, 11, 11, 11, 12, 11, [0, 73, "Gur"], 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], 11,  [...]
+#V   n = 132
+[ , [15, 99], [15, 90], [15, 88], [15, 87], [15, 86], [16, 84], [15, 84], [16, 83], [16, 82], [16, 81], [0, 79, "LP"], [0, 78, "LP"], 11, 11, 11, 11, 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16 [...]
+#V   n = 133
+[ , [15, 99], [15, 91], [15, 89], [15, 87], [15, 87], [16, 85], [16, 84], [0, 83, "Da2"], [16, 83], [16, 82], 12, 11, 11, 11, [0, 76, "Gur"], [0, 75, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [0, 34, "Jo"], [16, 34], [16, 33], 11, 12, 11, [16, 30], 1 [...]
+#V   n = 134
+[ , [15, 100], [15, 92], [15, 90], [15, 88], [15, 87], [16, 86], [16, 85], [16, 84], 11, [0, 82, "Da2"], 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, [0, 71, "Da2"], [0, 70, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 12, 1 [...]
+#V   n = 135
+[ , [15, 101], [15, 93], [15, 90], [15, 89], [15, 88], [15, 87], [16, 86], [0, 84, "Gur"], [16, 84], 11, [0, 81, "Gur"], [0, 80, "Gur"], 11, 11, 11, 11, 11, 11, [0, 74, "Da2"], [0, 73, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, [...]
+#V   n = 136
+[ , [15, 102], [15, 93], [15, 90], [15, 90], [0, 88, "Ha"], [16, 87], [0, 86, "Gur"], 12, 11, [16, 84], 12, 11, 11, 11, [0, 78, "Gur"], [0, 77, "Gur"], 11, 11, 11, 11, 11, [0, 72, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, [...]
+#V   n = 137
+[ , [15, 102], [15, 94], [15, 91], [15, 90], 12, [16, 88], [16, 87], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 75, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [0, 32, "sp"], 11, 11, 11, [16, 30], [0, 28, "sp"], 11, 11, 11, 11, 1 [...]
+#V   n = 138
+[ , [15, 103], [15, 95], [15, 92], [15, 90], [15, 90], [16, 89], [16, 88], [0, 86, "Gur"], 11, 11, [0, 83, "Da2"], [0, 82, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 12, 11, 11, 11, [16, 30], 12, 11, 11, 11, 11, [...]
+#V   n = 139
+[ , [15, 104], [15, 96], [15, 93], [15, 91], [15, 90], [15, 90], [0, 88, "Da2"], 12, 11, 11, 12, 11, 11, 11, [0, 80, "Gur"], [0, 79, "Gur"], 11, 11, 11, 11, 11, [0, 74, "Da2"], [0, 73, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, [16, 31], [ [...]
+#V   n = 140
+[ , [15, 105], [15, 96], [15, 93], [15, 92], [15, 91], [15, 90], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 77, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 36], [16, 36], [16, 36], 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 141
+[ , [15, 105], [15, 97], [15, 94], [15, 93], [15, 92], [16, 90], [15, 90], [0, 88, "Gur"], 11, 11, [0, 85, "Gur"], [0, 84, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, 11, 11, [16, 32], [0, 30, "Jo"],  [...]
+#V   n = 142
+[ , [15, 106], [15, 98], [15, 95], [15, 93], [15, 93], [16, 91], [16, 90], 12, 11, 11, 12, 11, 11, 11, [0, 82, "Gur"], [0, 81, "Gur"], 11, 11, 11, 11, 11, [0, 76, "Da2"], [0, 75, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], [0, 34, "sp"], 11,  [...]
+#V   n = 143
+[ , [15, 107], [15, 99], [15, 96], [0, 93, "Lan"], [15, 93], [16, 92], [16, 91], [16, 90], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 80, "Da2"], 11, [0, 78, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, [16, 34], [16, 33], 11, 11, 1 [...]
+#V   n = 144
+[ , [15, 108], [15, 99], [15, 96], 12, [16, 93], [15, 93], [16, 92], [0, 90, "Gur"], [16, 90], 11, [0, 87, "Gur"], [0, 86, "Da2"], 11, 11, 11, [0, 82, "Gur"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34 [...]
+#V   n = 145
+[ , [15, 108], [15, 99], [15, 97], 12, [16, 94], [16, 93], [0, 92, "Gur"], 12, 11, [16, 90], 12, 11, 11, [0, 85, "Da9"], [0, 84, "Gur"], 12, 11, 11, 11, 11, 11, 11, [0, 77, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16 [...]
+#V   n = 146
+[ , [15, 109], [15, 100], [15, 98], [15, 96], [16, 95], [14, 3], [16, 93], 11, 11, 11, 12, [0, 87, "Gur"], 11, 11, 11, 11, 11, 11, [0, 81, "Da2"], [0, 80, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [...]
+#V   n = 147
+[ , [15, 110], [15, 101], [15, 99], [0, 96, "Lg"], [15, 96], 12, 11, [0, 92, "Gur"], 11, 11, [0, 89, "Gur"], 12, 11, 11, [0, 85, "Gur"], [0, 84, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [ [...]
+#V   n = 148
+[ , [15, 111], [15, 102], [15, 99], 12, [16, 96], 12, 11, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 78, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 149
+[ , [15, 111], [15, 102], [15, 99], 12, [16, 97], [16, 96], 11, 11, [16, 93], 11, 12, [0, 89, "Gur"], 11, 11, 11, 11, 11, 11, [0, 83, "Da2"], [0, 82, "Da2"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36] [...]
+#V   n = 150
+[ , [15, 112], [15, 103], [15, 100], [15, 99], [16, 98], [14, 3], [16, 96], [0, 94, "Da2"], [16, 94], [16, 93], [0, 91, "Gur"], 12, 11, 11, [0, 87, "Gur"], [0, 86, "Gur"], 11, 11, 11, 11, 11, [0, 81, "Da2"], [0, 80, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11 [...]
+#V   n = 151
+[ , [15, 113], [15, 104], [15, 101], [15, 99], [15, 99], 12, 11, 12, 11, [16, 94], 12, 11, 11, 11, 12, 11, 11, 11, [0, 84, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], 1 [...]
+#V   n = 152
+[ , [15, 114], [15, 105], [15, 102], [15, 100], [15, 99], 12, 11, [16, 96], 11, 11, 12, [0, 91, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [0, 38, "sp"], [16, 38], [16, 37], [ [...]
+#V   n = 153
+[ , [15, 114], [15, 105], [15, 102], [15, 101], [15, 100], [15, 99], 11, [0, 96, "Gur"], [16, 96], 11, [0, 93, "Gur"], 12, 11, 11, [0, 89, "Gur"], [0, 88, "Gur"], 11, 11, 11, 11, 11, [0, 83, "Da2"], [0, 82, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42 [...]
+#V   n = 154
+[ , [15, 115], [15, 106], [15, 103], [15, 102], [0, 100, "Ha"], [14, 3], [0, 98, "Gur"], 12, 11, [16, 96], 12, 11, 11, 11, 12, 11, 11, 11, [0, 86, "Da2"], [0, 85, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40 [...]
+#V   n = 155
+[ , [15, 116], [15, 107], [15, 104], [15, 102], 12, 11, [16, 99], 11, 11, 11, 12, [0, 93, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, [16, 38], [0, 36, "J [...]
+#V   n = 156
+[ , [15, 117], [15, 108], [15, 105], [15, 103], [15, 102], 11, [16, 100], [0, 98, "Gur"], 11, 11, [0, 95, "Gur"], 12, 11, 11, [0, 91, "Gur"], [0, 90, "Gur"], 11, 11, 11, 11, 11, 11, [0, 84, "Da9"], [0, 83, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43],  [...]
+#V   n = 157
+[ , [15, 117], [15, 108], [15, 105], [15, 104], [0, 102, "Ma"], [15, 102], [0, 100, "Da2"], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 88, "Da2"], [0, 87, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11 [...]
+#V   n = 158
+[ , [15, 118], [15, 108], [15, 106], [15, 105], 12, 11, 12, 11, [16, 99], 11, 12, [0, 95, "Gur"], 11, 11, 11, [0, 91, "Gur"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, [...]
+#V   n = 159
+[ , [15, 119], [15, 109], [15, 107], [15, 105], 12, 11, [16, 102], [0, 100, "Da2"], [16, 100], [16, 99], [0, 97, "Gur"], 12, 11, [0, 94, "Gur"], [0, 93, "Gur"], 12, 11, 11, 11, 11, 11, 11, [0, 86, "Da9"], [0, 85, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], [...]
+#V   n = 160
+[ , [15, 120], [15, 110], [15, 108], [15, 106], [15, 105], 11, [0, 102, "Gur"], 12, 11, [16, 100], 12, 11, 11, 11, 11, 11, 11, 11, [0, 90, "Da2"], [0, 89, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], [...]
+#V   n = 161
+[ , [15, 120], [15, 111], [15, 108], [15, 107], [0, 105, "Gur"], [15, 105], 12, 11, 11, 11, 12, [0, 97, "Gur"], [0, 96, "Da2"], 11, 11, [0, 93, "Gur"], 11, 11, 11, 11, 11, 11, [0, 87, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43] [...]
+#V   n = 162
+[ , [15, 121], [15, 111], [15, 108], [15, 108], 12, 11, 12, [0, 102, "Gur"], [16, 102], 11, [0, 99, "Gur"], 12, 11, 11, [0, 95, "Gur"], 12, 11, 11, 11, [0, 90, "Da2"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, [...]
+#V   n = 163
+[ , [15, 122], [15, 112], [15, 108], [15, 108], 12, 11, [0, 104, "Gur"], 12, 11, [0, 101, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, [0, 92, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 42], [16, 42] [...]
+#V   n = 164
+[ , [15, 123], [15, 113], [15, 109], [15, 108], [15, 108], 11, [16, 105], 11, 11, 11, 11, [0, 99, "Gur"], [0, 98, "Gur"], 11, 11, [0, 95, "Gur"], 11, 11, 11, 11, 11, 11, [0, 89, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45] [...]
+#V   n = 165
+[ , [15, 123], [15, 114], [15, 110], [15, 108], [15, 108], [0, 107, "Da6"], [16, 106], [0, 104, "Gur"], 11, 11, [0, 101, "Gur"], 12, 11, 11, [0, 97, "Gur"], 12, 11, 11, 11, [0, 92, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16,  [...]
+#V   n = 166
+[ , [15, 124], [15, 114], [15, 111], [15, 109], [15, 108], [15, 108], [0, 106, "Da2"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 94, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 43], [...]
+#V   n = 167
+[ , [15, 125], [15, 115], [15, 111], [15, 110], [16, 108], [15, 108], 12, 11, 11, 11, 12, [0, 101, "Da2"], [0, 100, "Da2"], 11, 11, [0, 97, "Gur"], [0, 96, "Da2"], 11, 11, 11, 11, 11, [0, 91, "Da9"], [0, 90, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48] [...]
+#V   n = 168
+[ , [15, 126], [15, 116], [15, 112], [15, 111], [16, 109], [16, 108], [15, 108], [0, 106, "Da2"], 11, [16, 105], [0, 103, "Gur"], 12, 11, 11, [0, 99, "Gur"], 12, 11, 11, 11, [0, 94, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11,  [...]
+#V   n = 169
+[ , [15, 126], [15, 117], [15, 113], [15, 111], [16, 110], [16, 109], [16, 108], 12, 11, [16, 106], 12, [0, 102, "Gur"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [ [...]
+#V   n = 170
+[ , [15, 127], [15, 117], [15, 114], [15, 112], [15, 111], [16, 110], [16, 109], [0, 107, "Gur"], 11, 11, 12, 12, 11, 11, 11, [0, 99, "Gur"], [0, 98, "Da2"], 11, 11, 11, 11, 11, [0, 93, "Da9"], [0, 92, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, [16, 50] [...]
+#V   n = 171
+[ , [15, 128], [15, 117], [15, 114], [15, 113], [16, 111], [15, 111], [16, 110], [16, 108], 11, 11, [0, 105, "Gur"], 12, 11, 11, [0, 101, "Gur"], 12, 11, 11, [0, 97, "Da2"], [0, 96, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, [16, 50], [16, [...]
+#V   n = 172
+[ , [15, 129], [15, 118], [15, 115], [15, 114], [16, 112], [16, 111], [0, 110, "Gur"], [16, 109], [16, 108], 11, 12, [0, 104, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 93, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, [16, 51], 11, [16, 50],  [...]
+#V   n = 173
+[ , [15, 129], [15, 119], [15, 116], [15, 114], [16, 113], [16, 112], [16, 111], [0, 109, "Gur"], [16, 109], [16, 108], 11, 12, 11, [0, 103, "Gur"], 11, [0, 101, "Gur"], [0, 100, "Da2"], 11, 11, 11, 11, 11, [0, 95, "Da9"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [...]
+#V   n = 174
+[ , [15, 130], [15, 120], [15, 117], [15, 115], [15, 114], [16, 113], [16, 112], 12, 11, [16, 109], [0, 107, "Gur"], 12, 11, 11, 11, 12, 11, 11, [0, 99, "Da2"], [0, 98, "Da2"], [0, 97, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 47], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [...]
+#V   n = 175
+[ , [15, 131], [15, 120], [15, 117], [15, 116], [16, 114], [15, 114], [0, 112, "Da2"], [16, 111], 11, 11, 12, [0, 106, "Gur"], 11, 11, 11, [0, 102, "Da2"], 11, 11, 11, 11, 11, 11, [0, 96, "Da2"], [0, 95, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], 11, 11 [...]
+#V   n = 176
+[ , [15, 132], [15, 121], [15, 117], [15, 117], [16, 115], [16, 114], 12, [0, 111, "Gur"], [16, 111], 11, 11, 12, 11, [0, 105, "Gur"], 11, 12, 11, 11, 11, [0, 99, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, [16, 55], [16, 54], [16, 54], 11, 11, [16, 52 [...]
+#V   n = 177
+[ , [15, 132], [15, 122], [15, 118], [15, 117], [16, 116], [16, 115], [16, 114], 12, 11, [16, 111], [0, 109, "Gur"], 12, 11, 11, 11, 12, 11, 11, [0, 101, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 47], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52] [...]
+#V   n = 178
+[ , [15, 133], [15, 123], [15, 119], [15, 117], [15, 117], [16, 116], [0, 114, "Gur"], 12, 11, 11, 12, [0, 108, "Gur"], [0, 107, "Gur"], 11, 11, [0, 104, "Da2"], [0, 103, "Da2"], 11, 11, 11, 11, 11, [0, 98, "Da9"], [0, 97, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 179
+[ , [15, 134], [15, 123], [15, 120], [15, 118], [15, 117], [15, 117], 12, [0, 113, "Gur"], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 101, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, [...]
+#V   n = 180
+[ , [15, 135], [15, 124], [15, 120], [15, 119], [16, 117], [15, 117], 12, 12, 11, 11, [0, 111, "Gur"], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51 [...]
+#V   n = 181
+[ , [15, 135], [15, 125], [15, 121], [15, 120], [16, 118], [16, 117], [0, 116, "Da9"], 12, 11, 11, 12, [0, 110, "Gur"], [0, 109, "Gur"], 11, 11, [0, 106, "Da2"], [0, 105, "Da2"], 11, 11, 11, 11, 11, [0, 100, "Da9"], [0, 99, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [1 [...]
+#V   n = 182
+[ , [15, 136], [15, 126], [15, 122], [15, 120], [16, 119], [16, 118], [16, 117], 13, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 103, "Da2"], [0, 102, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 56], [16, 57], 11, [14, 58], [16, 55], [16, 54], [16, 54 [...]
+#V   n = 183
+[ , [15, 137], [15, 126], [15, 123], [15, 121], [15, 120], [16, 119], [16, 118], [0, 115, "Gur"], 11, [0, 114, "Gur"], [0, 113, "Gur"], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 100, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16 [...]
+#V   n = 184
+[ , [15, 138], [15, 126], [15, 123], [15, 122], [16, 120], [15, 120], [0, 118, "Da2"], 12, 11, 11, 11, [0, 112, "Gur"], [0, 111, "Gur"], 11, 11, [0, 108, "Da2"], [0, 107, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, [16, 61], [16, 60], 11, 11, 1 [...]
+#V   n = 185
+[ , [15, 138], [15, 127], [15, 124], [15, 123], [16, 121], [16, 120], 12, 12, 11, 11, 11, 12, 11, 11, [0, 110, "Gur"], 12, 11, 11, 11, [0, 105, "Da2"], [0, 104, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16 [...]
+#V   n = 186
+[ , [15, 139], [15, 128], [15, 125], [15, 123], [16, 122], [16, 121], [16, 120], 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 102, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, [14, 57], 11, 11, [16, 57], 11, 11, [16, 55], [1 [...]
+#V   n = 187
+[ , [15, 140], [15, 129], [15, 126], [15, 124], [15, 123], [16, 122], [0, 120, "Gur"], 12, 11, 11, 11, [0, 114, "Gur"], [0, 113, "Gur"], 11, 11, [0, 110, "Gur"], [0, 109, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60 [...]
+#V   n = 188
+[ , [15, 141], [15, 129], [15, 126], [15, 125], [16, 123], [15, 123], 12, [0, 119, "Gur"], 11, 11, 11, 12, 11, 11, [0, 112, "Da2"], 12, 11, 11, 11, [0, 107, "Da2"], [0, 106, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [1 [...]
+#V   n = 189
+[ , [15, 141], [15, 130], [15, 126], [15, 126], [16, 124], [16, 123], 12, 12, 11, 11, [0, 117, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 104, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 57], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 5 [...]
+#V   n = 190
+[ , [15, 142], [15, 131], [15, 127], [15, 126], [16, 125], [16, 124], [16, 123], 12, 11, 11, 12, [0, 116, "Gur"], [0, 115, "Gur"], [0, 114, "Gur"], 11, [0, 112, "Gur"], [0, 111, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 191
+[ , [15, 143], [15, 132], [15, 128], [15, 126], [15, 126], [0, 124, "Da6"], [16, 123], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 110, "Da2"], [0, 109, "Da2"], [0, 108, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11 [...]
+#V   n = 192
+[ , [15, 144], [15, 132], [15, 129], [15, 127], [15, 126], 12, [16, 124], [0, 122, "Da2"], [0, 121, "Da2"], 11, [0, 119, "Gur"], 12, [0, 116, "Gur"], 11, 11, 11, [0, 112, "Da2"], 11, 11, 11, 11, 11, [0, 107, "Da9"], [0, 106, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 193
+[ , [15, 144], [15, 133], [15, 129], [15, 128], [16, 126], [15, 126], [16, 125], 12, 11, 11, 12, [0, 118, "Gur"], 12, 11, 11, [0, 114, "Gur"], 12, 11, 11, 11, [0, 109, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [1 [...]
+#V   n = 194
+[ , [15, 145], [15, 134], [15, 130], [15, 129], [16, 127], [16, 126], [0, 125, "Gur"], [0, 123, "Gur"], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 111, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [16,  [...]
+#V   n = 195
+[ , [15, 146], [15, 135], [15, 131], [15, 129], [16, 128], [16, 127], [16, 126], 12, 11, [0, 122, "Gur"], [0, 121, "Gur"], 12, [0, 118, "Gur"], 11, 11, 11, [0, 114, "Da2"], 11, 11, 11, 11, 11, 11, [0, 108, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, [16, 68], [16, 67] [...]
+#V   n = 196
+[ , [15, 147], [15, 135], [15, 132], [15, 130], [15, 129], [16, 128], [16, 126], 12, 11, 11, 11, [0, 120, "Gur"], 12, 11, 11, [0, 116, "Gur"], 12, 11, 11, [0, 112, "Da2"], [0, 111, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, [16, 68], [16, 67], [16, 66], 11, [...]
+#V   n = 197
+[ , [15, 147], [15, 135], [15, 132], [15, 131], [16, 129], [15, 129], [16, 127], [0, 125, "Gur"], [0, 124, "Da2"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 109, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11 [...]
+#V   n = 198
+[ , [15, 148], [15, 136], [15, 133], [15, 132], [16, 130], [16, 129], [16, 128], 12, 11, 11, [0, 123, "Gur"], 12, [0, 120, "Gur"], 11, 11, 11, [0, 116, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67],  [...]
+#V   n = 199
+[ , [15, 149], [15, 137], [15, 134], [15, 132], [16, 131], [16, 129], [16, 129], 12, 11, 11, 11, [0, 122, "Gur"], 12, 11, 11, [0, 118, "Gur"], 12, 11, 11, [0, 114, "Da2"], [0, 113, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [...]
+#V   n = 200
+[ , [15, 150], [15, 138], [15, 135], [15, 133], [15, 132], [16, 130], [16, 129], 12, [0, 126, "Da2"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 111, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16,  [...]
+#V   n = 201
+[ , [15, 150], [15, 138], [15, 135], [15, 134], [16, 132], [16, 131], [16, 130], [16, 129], 12, 11, [0, 125, "Gur"], 12, [0, 122, "Gur"], 11, 11, [0, 119, "Gur"], [0, 118, "DM4"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], [14, 26], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 7 [...]
+#V   n = 202
+[ , [15, 151], [15, 139], [15, 135], [15, 135], [16, 133], [16, 132], [16, 131], 13, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, [...]
+#V   n = 203
+[ , [15, 152], [15, 140], [15, 135], [15, 135], [0, 133, "Da5"], [16, 132], [0, 131, "Gur"], [0, 129, "Gur"], [0, 128, "Gur"], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], [...]
+#V   n = 204
+[ , [15, 153], [15, 141], [15, 136], [15, 135], 12, [16, 133], [16, 132], 12, 11, 11, [0, 127, "Gur"], 11, [0, 124, "Gur"], 11, 11, [0, 121, "Gur"], 11, 11, 11, [0, 117, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [1 [...]
+#V   n = 205
+[ , [15, 153], [15, 141], [15, 137], [15, 135], [15, 135], [16, 134], [16, 133], 12, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 66], [16,  [...]
+#V   n = 206
+[ , [15, 154], [15, 142], [15, 138], [15, 136], [15, 135], [15, 135], [16, 134], [0, 131, "Gur"], 11, 11, 11, 13, 12, 11, 11, 12, [0, 121, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16 [...]
+#V   n = 207
+[ , [15, 155], [15, 143], [15, 138], [15, 137], [16, 135], [15, 135], [15, 135], 12, 11, 11, [0, 129, "Gur"], [0, 127, "Gur"], [0, 126, "Gur"], 11, 11, [0, 123, "Gur"], 12, 11, 11, 12, [0, 118, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [1 [...]
+#V   n = 208
+[ , [15, 156], [15, 144], [15, 139], [15, 138], [16, 136], [16, 135], [15, 135], 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 11, [0, 120, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69] [...]
+#V   n = 209
+[ , [15, 156], [15, 144], [15, 140], [15, 138], [16, 137], [16, 136], [16, 135], 12, 11, 11, 11, 12, 11, 11, 11, 12, [0, 123, "DM4"], 11, 11, 11, 11, [0, 118, "DM4"], 11, [0, 117, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72],  [...]
+#V   n = 210
+[ , [15, 157], [15, 144], [15, 141], [15, 139], [15, 138], [16, 137], [16, 135], [16, 135], 11, 11, [16, 132], [0, 129, "Gur"], 11, 11, 11, [0, 125, "Gur"], 12, 11, 11, 11, [0, 120, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73] [...]
+#V   n = 211
+[ , [15, 158], [15, 145], [15, 141], [15, 140], [16, 138], [15, 138], [16, 136], [16, 135], 13, 13, [16, 133], 12, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], [16, 71], [16 [...]
+#V   n = 212
+[ , [15, 159], [15, 146], [15, 142], [15, 141], [16, 139], [16, 138], [16, 137], [0, 135, "Gur"], [0, 134, "Gur"], [0, 133, "Gur"], 11, 12, [0, 129, "Gur"], 11, 11, 12, [0, 125, "DM4"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11 [...]
+#V   n = 213
+[ , [15, 159], [15, 147], [15, 143], [15, 141], [16, 140], [16, 139], [16, 138], 12, 11, 11, 11, [0, 131, "Gur"], 12, 11, 11, [0, 127, "Gur"], 12, 11, 11, 11, [0, 122, "DM4"], [0, 121, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], [...]
+#V   n = 214
+[ , [15, 160], [15, 147], [15, 144], [15, 142], [15, 141], [16, 140], [16, 138], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "DM4"], 12, 11, 11, [0, 120, "DM4"], 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], 11, 11, [16, 72 [...]
+#V   n = 215
+[ , [15, 161], [15, 148], [15, 144], [15, 143], [16, 141], [15, 141], [16, 139], [0, 137, "Gur"], 11, 11, 11, 12, [0, 131, "Gur"], 11, 11, 11, [0, 127, "DM4"], 11, 11, 11, [0, 123, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, [...]
+#V   n = 216
+[ , [15, 162], [15, 149], [15, 144], [15, 144], [16, 142], [16, 141], [16, 140], 12, 11, 11, 11, [0, 133, "Gur"], 12, 11, 11, [0, 129, "Gur"], 12, 11, 11, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], [16, 74 [...]
+#V   n = 217
+[ , [15, 162], [15, 150], [15, 145], [15, 144], [16, 143], [16, 142], [16, 141], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 13, 11, 11, 11, [0, 122, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], [16, 74], [16, 73], [1 [...]
+#V   n = 218
+[ , [15, 163], [15, 150], [15, 146], [15, 144], [15, 144], [16, 143], [16, 141], 12, 11, [0, 137, "Gur"], 11, 12, [0, 133, "Gur"], 11, 11, 11, [0, 129, "DM4"], [0, 128, "DM4"], 11, [0, 125, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 219
+[ , [15, 164], [15, 151], [15, 147], [15, 145], [15, 144], [15, 144], [16, 142], [16, 141], 11, 12, 11, [0, 135, "Gur"], 12, 11, 11, [0, 131, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], [14, 20], 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11 [...]
+#V   n = 220
+[ , [15, 165], [15, 152], [15, 147], [15, 146], [16, 144], [15, 144], [16, 143], 13, 13, 12, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, [16, 77], [16, 76], [16, 75], [1 [...]
+#V   n = 221
+[ , [15, 165], [15, 153], [15, 148], [15, 147], [16, 145], [16, 144], [0, 143, "Gur"], [0, 141, "Gur"], [0, 140, "Gur"], 11, 11, 12, [0, 135, "Gur"], 11, 11, 11, [0, 131, "DM4"], [0, 130, "DM4"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 222
+[ , [15, 166], [15, 153], [15, 149], [15, 147], [16, 146], [16, 145], [16, 144], 12, 11, 11, 11, [0, 137, "Gur"], 12, 11, [0, 134, "Gur"], [0, 133, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11 [...]
+#V   n = 223
+[ , [15, 167], [15, 153], [15, 150], [15, 148], [15, 147], [16, 146], [16, 144], 12, 11, 11, 11, 12, 11, 11, 11, 11, [0, 132, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], [16, 78], 11, [16, 77], [16, [...]
+#V   n = 224
+[ , [15, 168], [15, 154], [15, 150], [15, 149], [16, 147], [15, 147], [16, 145], [0, 143, "Gur"], 11, 11, 11, 12, [0, 137, "Gur"], 11, 11, 11, 12, 11, 11, 11, [0, 129, "DM4"], [0, 128, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 225
+[ , [15, 168], [15, 155], [15, 151], [15, 150], [16, 148], [16, 147], [16, 146], 12, 11, 11, 11, [0, 139, "Gur"], 12, 11, [0, 136, "Gur"], [0, 135, "Gur"], 12, 11, 11, [0, 131, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 226
+[ , [15, 169], [15, 156], [15, 152], [15, 150], [16, 149], [16, 148], [16, 147], 12, [0, 143, "Gur"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], [16, 79], [16, 78], [16, [...]
+#V   n = 227
+[ , [15, 170], [15, 156], [15, 153], [15, 151], [15, 150], [16, 149], [16, 147], 12, 12, 11, 11, 12, [0, 139, "Gur"], 11, 11, 11, 11, 11, 11, 11, [0, 131, "DM4"], [0, 130, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 81], 11 [...]
+#V   n = 228
+[ , [15, 171], [15, 157], [15, 153], [15, 152], [16, 150], [15, 150], [16, 148], [16, 147], 12, 11, 11, [0, 141, "Gur"], 12, 11, 11, [0, 137, "Gur"], 13, 13, 11, [0, 133, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16,  [...]
+#V   n = 229
+[ , [15, 171], [15, 158], [15, 153], [15, 153], [16, 151], [16, 150], [16, 149], 13, [0, 145, "Gur"], 11, 11, 12, 11, 11, 11, 12, [0, 136, "DM4"], [0, 135, "DM4"], 11, 12, [0, 132, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 230
+[ , [15, 172], [15, 159], [15, 154], [15, 153], [0, 151, "DM5"], [16, 151], [16, 150], [0, 147, "Gur"], 12, 11, 11, 12, [0, 141, "Gur"], [0, 140, "Gur"], 11, 11, 12, 11, 11, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 231
+[ , [15, 173], [15, 159], [15, 155], [15, 153], 12, 11, [16, 150], 12, 11, 11, 11, [0, 143, "Gur"], 12, 11, 11, [0, 139, "Gur"], 12, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 22], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 1 [...]
+#V   n = 232
+[ , [15, 174], [15, 160], [15, 156], [15, 154], [15, 153], 11, [16, 151], 12, [0, 147, "Gur"], 11, 11, 12, [0, 142, "Gur"], 11, 11, 11, [0, 138, "DM4"], [0, 137, "DM4"], 11, [0, 134, "DM4"], 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 233
+[ , [15, 174], [15, 161], [15, 156], [15, 155], [15, 154], [15, 153], [16, 152], [0, 149, "Gur"], 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11,  [...]
+#V   n = 234
+[ , [15, 175], [15, 162], [15, 157], [15, 156], [15, 155], [16, 153], [15, 153], 12, 11, 11, 11, [0, 145, "Gur"], 12, 11, 11, [0, 141, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 85], [16, 84], 1 [...]
+#V   n = 235
+[ , [15, 176], [15, 162], [15, 158], [15, 156], [0, 155, "Gur"], [16, 153], [16, 153], 12, [0, 149, "Gur"], 11, 11, 12, [0, 144, "Gur"], 11, 11, 11, [0, 140, "DM4"], [0, 139, "DM4"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 236
+[ , [15, 177], [15, 162], [15, 159], [15, 157], [15, 156], [16, 154], [16, 153], 12, 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 85], [16, 84], 11, 11, 11, [ [...]
+#V   n = 237
+[ , [15, 177], [15, 163], [15, 159], [15, 158], [0, 156, "Gur"], [16, 155], [16, 154], [16, 153], 12, 11, 11, [0, 147, "Gur"], 12, 11, 11, [0, 143, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87] [...]
+#V   n = 238
+[ , [15, 178], [15, 164], [15, 160], [15, 159], 12, [16, 156], [16, 155], 13, [0, 151, "Gur"], 11, 11, 12, [0, 146, "Gur"], 11, 11, 11, [0, 142, "DM4"], [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 239
+[ , [15, 179], [15, 165], [15, 161], [15, 159], 12, [16, 156], [16, 156], [0, 153, "Gur"], 12, 11, 11, 12, 12, 11, [0, 145, "Gur"], [0, 144, "Gur"], 12, 11, 11, [0, 140, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 240
+[ , [15, 180], [15, 165], [15, 162], [15, 160], [15, 159], [16, 157], [16, 156], 12, 11, 11, 11, [0, 149, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, [...]
+#V   n = 241
+[ , [15, 180], [15, 166], [15, 162], [15, 161], [15, 160], [16, 158], [16, 157], 12, [0, 153, "Gur"], 11, 11, 12, [0, 148, "Gur"], 11, 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 242
+[ , [15, 181], [15, 167], [15, 162], [15, 162], [15, 161], [16, 159], [16, 158], [16, 156], 12, 11, 11, 12, 12, 11, [0, 147, "Gur"], [0, 146, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 243
+[ , [15, 182], [15, 168], [15, 162], [15, 162], [15, 162], [16, 159], [0, 158, "Gur"], [16, 157], 12, 11, 11, [0, 151, "Gur"], 12, 11, 11, 11, 11, [0, 144, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, [...]
diff --git a/tbl/bdtable4.g b/tbl/bdtable4.g
new file mode 100644
index 0000000..dafc7ef
--- /dev/null
+++ b/tbl/bdtable4.g
@@ -0,0 +1,1065 @@
+#A  BOUNDS FOR q = 4
+##
+##  Each entry [n][k] of one of the tables below contains
+##  a bound (the first table contains lowerbounds, the
+##  second upperbounds) for a code with wordlength n and
+##  dimension k. Each entry contains one of the following
+##  items:
+##
+##  FOR LOWER- AND UPPERBOUNDSTABLE
+##  [ 0, <d>, <ref> ]  from Brouwers table
+##
+##  FOR LOWERBOUNDSTABLE
+##  empty           k= 0, 1, n or d= 2 or (k= 2 and q= 2)
+##  1               shortening a [ n + 1, k + 1 ] code
+##  2               puncturing a [ n + 1, k ] code
+##  3               extending a [ n - 1, k ] code
+##  [ 4, <dd> ]     constr. B, of a [ n+dd, k+dd-1, d ] code
+##  [ 5, <k1> ]     an UUV-construction with a [ n / 2, k1 ]
+##                  and a [ n / 2, k - k1 ] code
+##  [ 6, <n1> ]     concatenation of a [ n1, k ] and a
+##                  [ n - n1, k ] code
+##  [ 7, <n1> ]     taking the residue of a [ n1, k + 1 ] code
+##  20              taking the subcode of a [ n, k + 1 ] code
+##  [21,<s>,<j>]    constr. B2 of a [ n+s, k+s-2j-1, d+2j] code
+##  [22,<k1>,<k2>]  an UUAVUVW-construction with a [ n/3, k1 ],
+##                  a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code
+##
+##  FOR UPPERBOUNDSTABLE
+##  empty        trivial and Singleton bound
+##  11           shortening a [ n + 1, k + 1 ] code
+##  12           puncturing a [ n + 1, k ] code
+##  13           extending a [ n - 1, k ] code
+##  [ 14, <dd> ] constr. B, with dd = dual distance
+##  [ 15, <d> ]  Griesmer bound
+##  [ 16, <d> ]  One-step Griesmer bound
+
+
+GUAVA_BOUNDS_TABLE[1][4] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ , 1],
+#V   n = 5
+[ , 1, 2],
+#V   n = 6
+[ , 20, [0, 4, "QR"], 20],
+#V   n = 7
+[ , 1, 1, 1, 20],
+#V   n = 8
+[ , 1, 1, 1, 1, 20],
+#V   n = 9
+[ , 2, 1, 1, 1, 1, 20],
+#V   n = 10
+[ , [6, 5], 20, 1, 1, 1, 1, 20],
+#V   n = 11
+[ , 1, 1, 20, 1, 2, 1, 1, 20],
+#V   n = 12
+[ , 1, 1, 1, 20, [0, 6, "QR"], 20, 1, 1, 20],
+#V   n = 13
+[ , 1, 1, 1, 1, 1, 1, 20, 1, 1, 20],
+#V   n = 14
+[ , 1, 1, 2, 1, 1, 1, 1, 20, 1, 1, 20],
+#V   n = 15
+[ , 1, 1, 2, 20, 1, 1, 1, 1, 20, 1, 1, 20],
+#V   n = 16
+[ , 20, 1, 2, 1, 20, 1, 1, 1, 1, 20, 1, 1, 20],
+#V   n = 17
+[ , 1, 20, [0, 12, "BCH"], 1, 2, 20, 1, 2, 1, 1, 20, [0, 4, "ovo"], 1, 20],
+#V   n = 18
+[ , 1, 2, 3, 20, [0, 10, "Gu"], 20, 20, [0, 8, "MOS"], 20, 1, 1, 1, 20, 1, 20],
+#V   n = 19
+[ , 1, 2, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 20, 1, 20],
+#V   n = 20
+[ , 1, 2, 1, 1, 1, 1, 1, 20, [0, 8, "QR"], 1, 20, [0, 6, "EB3"], 1, 1, 20, 1, 20],
+#V   n = 21
+[ , 20, [7, 82], 1, 2, 1, 1, 1, 1, 1, 20, [0, 7, "KPm"], 1, 20, [0, 5, "KPm"], 1, 20, [4, 60], 20],
+#V   n = 22
+[ , 2, 1, 1, 2, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 23
+[ , 2, 20, 1, 2, 1, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 24
+[ , 2, 1, 20, [0, 16, "Li1"], 2, [0, 13, "GB4"], 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 25
+[ , [6, 5], 1, 2, 1, 2, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 26
+[ , 1, 1, 2, 20, [0, 16, "Gu"], 1, 1, 20, 20, 1, 1, 1, 1, 2, [0, 7, "EB3"], 20, 1, 1, 20, 1, 1, 20, 20],
+#V   n = 27
+[ , 2, 1, 2, 1, 1, 2, [0, 14, "GB4"], [0, 13, "GuB"], 20, 20, 1, 1, 1, 2, 1, 20, 20, [0, 6, "EB3"], 1, 20, 1, 1, 20, 20],
+#V   n = 28
+[ , 2, 20, [0, 20, "GH"], 2, [0, 17, "GB4"], [0, 16, "GuB"], 1, 1, 20, 20, 20, 1, 1, 2, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 29
+[ , 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 30
+[ , [6, 5], 1, 2, [0, 20, "KPq"], 1, 2, [0, 16, "DaH"], [0, 15, "GB4"], [0, 14, "Da4"], [0, 13, "DG5"], 20, 20, 20, [0, 12, "QR"], 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 31
+[ , 1, 2, [0, 22, "GH"], 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 3, 2, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 32
+[ , 2, [6, 16], 1, 2, [0, 20, "Gu"], [0, 19, "GB4"], 1, 1, 1, 1, 1, 20, 20, 3, [0, 11, "Du3"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 33
+[ , 2, 1, 2, [0, 22, "Bo1"], 2, 3, 1, 2, [0, 16, "DaH"], [0, 15, "DG"], 1, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 34
+[ , 2, 2, [6, 17], 1, 2, 1, 20, [0, 18, "DaH"], 1, 1, 20, [0, 14, "DaH"], 20, 20, 1, 1, 2, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 35
+[ , [6, 5], 2, 1, 2, [0, 22, "GB4"], 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 36
+[ , 1, 2, 1, 2, 1, 2, [0, 20, "GB4"], [0, 19, "Gu"], 1, 20, [0, 16, "DG"], 20, 1, 1, 20, 20, [0, 12, "GaO"], 1, 20, 1, 20, 20, [0, 8, "Zi"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 37
+[ , 2, [6, 16], 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 20, 1, 20, 3, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 38
+[ , 2, 1, 1, 2, 1, 2, 2, [0, 20, "Bou"], [0, 19, "DaH"], 1, 1, 1, 1, 20, 1, 1, 20, [0, 12, "QR"], 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 39
+[ , 2, 2, 1, 2, 2, [0, 24, "Gu"], 2, 1, 1, 20, [0, 18, "KPm"], [0, 17, "BMP"], 1, 1, 20, 1, 1, 1, 20, [0, 11, "KPm"], 20, 20, [0, 9, "KPm"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 40
+[ , [6, 5], 2, 20, [0, 28, "KPq"], 2, 1, 2, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 1, 2, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20],
+#V   n = 41
+[ , 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 20, 1, 2, 20, 1, 1, 1, 2, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, [0, 4, "IN"], 1, 20, 20],
+#V   n = 42
+[ , 2, [6, 21], 1, 2, [0, 28, "GB4"], 1, 2, [0, 23, "Ayd"], [0, 22, "DaH"], 20, [0, 20, "DaH"], 20, [0, 18, "DaH"], [0, 17, "DaH"], 20, [0, 16, "DaH"], 20, 20, 1, 1, 2, 1, 20, 20, 1, 20, 1, 20, 20, [0, 7, "Zi"], 20, 1, 20, 1, 1, 20, 1, 20, 20],
+#V   n = 43
+[ , 2, 1, 2, [0, 30, "Liz"], 3, 1, 2, 1, 1, 2, 3, 20, 3, 3, 20, 3, 20, 20, 20, 1, 2, 2, 1, 20, 20, 1, 20, 1, 20, 3, 20, 20, 1, 20, [0, 5, "KPc"], 1, 20, 1, 20, 20],
+#V   n = 44
+[ , 2, 20, [7, 169], 2, 1, 20, [0, 27, "Zi"], 1, 1, 2, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, [0, 14, "QR"], 2, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 45
+[ , [6, 5], 1, 1, 2, 2, [0, 28, "Gu"], 3, 2, 1, 2, 2, 1, 2, [0, 18, "DG5"], [0, 17, "GW1"], 20, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 46
+[ , 2, 1, 2, [0, 32, "Liz"], 2, 1, 1, 2, 20, [0, 24, "DaH"], [0, 22, "DaH"], 20, [0, 20, "GW2"], 1, 1, 20, 20, 1, 1, 20, 20, [0, 14, "GaO"], 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 47
+[ , 2, 1, 2, 1, 2, 1, 1, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 2, 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 48
+[ , 2, 1, 2, 2, [0, 32, "Gu"], 1, 1, 2, 2, 3, [0, 23, "DG"], 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, [0, 14, "GaO"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 49
+[ , 2, 20, [0, 36, "GH"], 2, 1, 1, 1, 2, 2, 1, 1, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 50
+[ , [6, 5], 2, 1, 2, 2, 1, 1, 2, [0, 27, "Da4"], 20, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, [0, 12, "D1"], 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 51
+[ , 2, 2, 20, [0, 36, "Bou"], 2, 20, 1, 2, 2, 1, 20, [0, 24, "DaH"], 20, 20, 1, 2, [0, 19, "DaH"], 20, 1, 1, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 20, 20, [0, 9, "DaH"], 20, [0, 8, "LX"], 1, 20, 20, 20, [0, 6, "DaH"], 1, 20, 1, 20, 1, 20, 20],
+#V   n = 52
+[ , 2, 2, 1, 1, 2, [0, 33, "Gu"], 20, [0, 32, "DaH"], 2, 2, [0, 25, "DG5"], 1, 1, 20, 20, [0, 22, "DaH"], 1, 20, 20, 1, 1, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 3, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 53
+[ , 2, [6, 16], 1, 2, [0, 36, "XX"], 1, 20, 3, 2, 2, 1, 20, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 54
+[ , 2, 1, 1, 2, 3, 1, 2, 3, 2, 2, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, [0, 16, "GaO"], 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 8, "BZ"], 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 55
+[ , [6, 5], 2, 1, 2, 1, 1, 2, 2, [0, 31, "DaH"], [0, 29, "DG"], 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 56
+[ , 2, 2, 20, [0, 40, "BKW"], 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 57
+[ , 2, 2, 2, 3, 1, 1, 2, [0, 34, "YC"], 2, 1, 20, 1, 1, 1, 2, 20, [0, 24, "DaH"], 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, [0, 12, "D1"], 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 58
+[ , 2, [6, 16], 2, 1, 1, 1, 2, 2, [0, 32, "DaH"], 1, 1, 20, 1, 1, 2, 20, 3, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 59
+[ , 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 2, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 60
+[ , [6, 5], 1, 2, 1, 1, 1, 2, [0, 36, "BZ"], 1, 1, 2, [0, 30, "BZ"], 20, 20, [0, 28, "GW2"], 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 2, 1, 1, 20, 20, [5, 21], 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 61
+[ , 2, 1, 2, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 62
+[ , 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 1, 2, 1, 20, 20, 1, 1, 1, 2, 20, 20, 20, [0, 18, "GaO"], [0, 15, "Vx"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 63
+[ , 2, 1, 2, 20, 1, 1, 2, 2, 1, 1, 2, [0, 32, "DaH"], [0, 31, "DaH"], 1, 2, 20, [0, 28, "DaH"], 1, 2, 20, 1, 20, 20, 1, 1, 2, 20, 20, 20, 3, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 64
+[ , 2, 20, [7, 253], 2, 20, 1, 2, 2, 20, 1, 2, 1, 1, 20, [0, 30, "DaH"], 20, 3, 20, [0, 27, "XBC"], 20, 20, 1, 20, 20, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, [0, 14, "XBC"], 20, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, 20, [0, 6, "XBC"], 20, 1, 20, 1, 20, 1, 20, 20],
+#V   n = 65
+[ , [6, 5], 20, 3, 2, 20, 20, [0, 44, "BCH"], 2, 20, 20, [0, 36, "DaH"], 2, 1, 2, 1, 1, 1, 20, 3, 1, 20, 20, 1, 20, 20, [0, 23, "BCH"], [0, 19, "Vx"], 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "BCH"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 5, "Ed"], 20, 1, 20, 1, 20, 20],
+#V   n = 66
+[ , 2, 1, 1, 2, 1, 20, 3, 2, 1, 20, 3, 2, 20, [0, 32, "DaH"], 20, 1, 2, 1, 1, 1, 1, 20, 20, 1, 20, 3, 1, 20, 20, 20, 1, 1, 2, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 67
+[ , 2, 1, 2, [0, 48, "Bou"], 1, 2, 3, 2, 1, 2, 3, [0, 35, "MTS"], 1, 2, 20, 20, [0, 30, "DaH"], 20, [0, 28, "XX"], 1, 1, 1, 20, 20, [0, 24, "XX"], 3, 2, [0, 19, "Vx"], 20, 20, 20, 1, 2, 20, [0, 15, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 68
+[ , 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 20, [0, 33, "BZ"], 1, 20, 3, 20, 3, 20, 1, 2, 1, 20, 1, 2, [0, 21, "Vx"], 1, 20, 20, 20, 20, [0, 18, "GaO"], 2, 1, 20, 20, [0, 14, "XX"], 1, 20, 20, 1, 20, 1, 20, 20, [0, 10, "XX"], 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 69
+[ , 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, [0, 36, "DaH"], 1, 1, 2, 1, 2, [0, 29, "XX"], 1, 20, 20, [0, 27, "XX"], 20, [0, 25, "XX"], 20, [0, 24, "XX"], 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, [0, 13, "XX"], 20, 20, [0, 12, "XX"], 20, 1, 20, 1, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 70
+[ , [6, 5], 20, [0, 52, "Bel"], [0, 50, "BKW"], 20, [0, 48, "XX"], 2, [0, 44, "DaH"], 20, [0, 40, "BZ"], [0, 38, "DaH"], 3, [0, 35, "DaH"], [0, 34, "DaH"], [0, 33, "DaH"], 20, [0, 31, "DaH"], 1, 20, 1, 20, 1, 1, 1, 20, 3, 2, [0, 21, "Vx"], [0, 20, "BZ"], [0, 19, "Ed"], 20, 20, 20, [0, 18, "GaO"], 2, 20, [0, 15, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "XX"], 20, 1, 1, 20, 20, 20, 1, 20, 20, [0, 7, "Ed"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 71
+[ , 2, 1, 2, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 3, 20, 3, 1, 2, 20, [0, 28, "XX"], 20, [0, 27, "BET"], 1, 1, 2, [0, 23, "Vx"], 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 72
+[ , 2, 1, 2, 1, 2, 20, [0, 48, "BET"], 3, 1, 2, 1, 2, [0, 36, "BZ"], 1, 2, 20, 1, 20, [0, 30, "Tol"], 20, 1, 20, 1, 20, [0, 26, "Tol"], [0, 25, "X"], 1, 1, 2, 1, 1, 20, 20, 20, [0, 18, "GaO"], 1, 20, 1, 20, 20, [0, 14, "Tol"], 1, 20, 20, [0, 12, "X"], 20, 1, 20, 20, [0, 10, "Tol"], 1, 20, 20, 20, [0, 8, "BZ"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 73
+[ , 2, 1, 2, 1, 2, 20, 3, 1, 1, 2, 1, 2, 1, 1, 2, 1, 20, 1, 2, 20, 20, [0, 28, "XX"], 20, 1, 2, 3, 20, [0, 23, "Ed"], [0, 22, "XX"], 20, 1, 1, 20, 20, 3, 20, 1, 20, 1, 20, 1, 20, [0, 13, "XX"], 20, 1, 20, 20, 1, 20, 1, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 74
+[ , 2, 1, 2, 1, 2, 2, 3, 20, 1, 2, 1, 2, 2, 1, 2, 1, 1, 20, [0, 31, "XX"], 1, 20, 1, 20, 20, [0, 27, "XX"], 2, [0, 24, "Ed"], 3, 1, 1, 20, 1, 2, 20, 1, 1, 20, 1, 20, [0, 15, "BET"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "BET"], 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 75
+[ , [6, 5], 20, [0, 56, "Bel"], 1, 2, 2, 2, 1, 20, [0, 44, "BZ"], 2, [0, 40, "BZ"], 2, 20, [0, 36, "BZ"], 1, 1, 2, 3, 1, 2, 20, 1, 20, 1, 2, 1, 1, 20, [0, 22, "Ed"], 1, 20, [0, 20, "BZ"], 20, 20, [0, 18, "Vx"], 1, 20, 1, 1, 20, 20, [0, 14, "BET"], 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 76
+[ , 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 20, 1, 1, 1, 2, 1, 20, [0, 30, "BET"], 20, 20, [0, 28, "XX"], 20, [0, 27, "Ed"], 20, [0, 24, "Ed"], [0, 23, "XX"], 1, 20, [0, 21, "XX"], 1, 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 77
+[ , 2, 1, 2, 1, 2, [0, 52, "BET"], [0, 50, "X"], 1, 1, 2, 2, 1, 2, 1, 20, 1, 1, 2, 20, 1, 2, [0, 29, "Ed"], 20, 1, 20, 3, [0, 25, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 11, "VE"], 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 78
+[ , 2, 1, 2, 20, [0, 56, "Hi"], 3, 2, 1, 1, 2, [0, 44, "Ayd"], 1, 2, 1, 1, 20, 1, 2, 1, 20, [0, 31, "XX"], 1, 20, 20, [0, 28, "XX"], 3, 1, 20, 1, 1, 20, [0, 22, "XX"], [0, 21, "Ed"], 20, 1, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 79
+[ , 2, 1, 2, 20, 3, 1, 2, 20, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 36, "GW2"], 20, 1, 1, 1, 1, 20, 1, 1, 2, [0, 25, "Ed"], 20, 1, 1, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 2, 20, [0, 14, "Ed"], 20, [0, 13, "Ed"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 80
+[ , [6, 5], 20, [7, 317], 20, 3, 20, [0, 52, "BZ"], 20, 20, [0, 48, "BZ"], 1, 1, 2, 1, 1, 1, 2, 3, 1, 20, [0, 32, "BZ"], [0, 31, "Ed"], 1, 2, 20, [0, 28, "Ed"], [0, 27, "Ed"], 1, 20, 20, [0, 24, "BZ"], [0, 23, "Ed"], 1, 1, 20, 20, [0, 20, "BZ"], 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 81
+[ , 2, 1, 2, 1, 2, 1, 2, 1, 20, 3, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 20, [0, 30, "X6u"], 20, 3, 3, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, [0, 6, "Ed"], 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 82
+[ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 20, 1, 2, [0, 29, "Ed"], 1, 1, 1, 20, [0, 25, "Ed"], 20, 1, 1, 20, [0, 22, "Ed"], 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 83
+[ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, [0, 32, "Ed"], 20, [0, 31, "XX"], 1, 20, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 84
+[ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 1, 1, 1, 2, 2, 20, 1, 2, 1, 20, 1, 2, [0, 29, "Ed"], 20, 1, 2, 1, 1, 20, 20, 1, 2, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20],
+#V   n = 85
+[ , [6, 5], 20, [7, 338], 2, [0, 60, "BCH"], 20, [0, 56, "BZ"], 2, 1, 2, 20, 20, [0, 48, "DaH"], [0, 45, "DaH"], [0, 44, "DaH"], [0, 43, "DaH"], [0, 42, "DaH"], [0, 40, "DaH"], 20, 20, [0, 36, "BZ"], [0, 33, "BZ"], [0, 32, "BZ"], 20, [0, 31, "BCH"], 1, 20, 20, [0, 28, "BZ"], 20, [0, 26, "BZ"], [0, 25, "Ed"], 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 1, 20, 20, [0, 20, "BZ"], 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 1, 20, 1, 20, 1, 20, 20, 20, [0, 12, "BZ"], 1, 20, 20, 20, [0, 10, "BCH"], [0 [...]
+#V   n = 86
+[ , 2, 20, 3, 2, 2, 20, 3, [0, 54, "Da"], 20, [0, 52, "XBZ"], 20, 20, 3, 3, 3, 3, 3, 2, 20, 20, 3, 1, 1, 20, 1, 2, [0, 29, "Ed"], 20, 3, [0, 27, "Ed"], 1, 1, 20, 20, 3, [0, 23, "Ed"], 1, 20, [0, 21, "Ed"], 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 15, "Ed"], 20, [0, 14, "XBC"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 87
+[ , 2, 2, 1, 2, 2, 2, 3, 3, 20, 3, 20, 20, 3, 3, 3, 3, 3, [0, 41, "DaH"], 2, 20, 3, 2, [0, 33, "Ed"], 1, 20, [0, 31, "X"], 1, 20, 1, 1, 20, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 20, "Ed"], 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 88
+[ , 2, 2, 20, [0, 64, "Bou"], 2, 2, 2, 2, 20, 3, 1, 20, 3, 1, 1, 1, 1, 2, [0, 38, "Vx"], 20, 3, [0, 35, "Ed"], 1, 20, [0, 32, "BZ"], 3, 1, 1, 20, [0, 28, "Ed"], 1, 1, 20, 1, 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 89
+[ , 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, 3, 1, 2, 1, 2, [0, 42, "DaH"], 2, [0, 37, "Vx"], 1, 1, 2, [0, 33, "Ed"], 1, 1, 20, [0, 30, "VE"], [0, 29, "Var"], 1, 20, [0, 27, "Ed"], 1, 20, [0, 25, "Ed"], 20, 1, 1, 1, 20, 1, 20, 1, 20, [0, 19, "Ed"], 1, 20, 1, 20, 20, [0, 16, "Ed"], 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 11, "X"], 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 90
+[ , [6, 5], [6, 6], 2, 20, [0, 64, "BZ"], 2, [0, 58, "XB"], [0, 56, "BZx"], 1, 2, 20, [0, 50, "DaH"], 1, 2, [0, 46, "DaH"], 20, [0, 44, "DaH"], 3, 2, 1, 20, [0, 36, "Ed"], [0, 35, "Ed"], 1, 20, [0, 32, "Ed"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 24, "Tol"], [0, 23, "Ed"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 10, "X"], 1, 20, 20, 20, 20, [0, 8, "BZ"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 91
+[ , 2, 1, 2, 2, 3, [0, 61, "Gu"], 2, 3, 20, [0, 54, "XB"], 1, 2, 20, [0, 48, "DaH"], 1, 1, 2, 2, [0, 40, "Vx"], 2, [0, 37, "Vx"], 1, 1, 2, 1, 1, 20, [0, 31, "Ed"], 1, 1, 20, [0, 28, "Ed"], 1, 20, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 20, [0, 21, "Var"], 20, [0, 20, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 92
+[ , 2, 2, [6, 17], 2, 3, 3, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 3, [0, 39, "BZ"], 1, 20, [0, 36, "BZ"], [0, 35, "Ed"], 20, [0, 33, "Ed"], 1, 1, 20, [0, 30, "BZ"], 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 93
+[ , 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, [0, 48, "DaH"], 20, [0, 46, "DaH"], [0, 44, "DaH"], 1, 2, [0, 38, "BZ"], [0, 37, "Vx"], 1, 1, 1, 1, 20, [0, 32, "Ed"], 1, 1, 20, [0, 29, "Var"], 1, 20, [0, 27, "Ed"], 1, 20, [0, 25, "Var"], 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 94
+[ , 2, 2, 2, [0, 68, "Bou"], 2, 1, 2, 1, 2, [0, 56, "XB"], 20, [0, 53, "DaH"], 1, 2, 3, 20, 3, 3, 1, 2, 1, 1, 20, [0, 36, "Ed"], [0, 35, "Ed"], [0, 34, "Var"], 1, 1, 20, [0, 31, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 17, "Var"], 20, 1, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, [0, 10, "Ed"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 95
+[ , [6, 5], [6, 16], 2, 2, 2, 2, [0, 62, "DaH"], [0, 59, "DaH"], [0, 58, "DaH"], 3, [0, 54, "DaH"], 3, [0, 52, "DaH"], [0, 51, "DaH"], 1, 2, 3, 2, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 33, "Var"], 1, 1, 20, 1, 1, 20, [0, 28, "Var"], 1, 20, [0, 26, "Var"], 1, 20, 20, 1, 2, 1, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 20, [0, 9, "Ed"], 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 96
+[ , 2, 1, 2, 2, 2, [0, 64, "GB4"], 2, 1, 2, 2, 2, 3, 3, 3, 20, [0, 48, "BZ"], 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], [0, 40, "BZ"], [0, 39, "BZ"], [0, 38, "BZ"], 20, [0, 36, "BZ"], 1, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, 20, [0, 24, "Tol"], 20, 1, 20, 1, 20, [0, 20, "Var"], 1, 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 1, 20, 20, [0, 14, "Ed"], 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 97
+[ , 2, 2, [6, 17], 2, [0, 68, "Koh"], 1, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 35, "Ed"], [0, 34, "Var"], 1, 1, 20, 1, 1, 20, [0, 29, "Var"], 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 98
+[ , 2, 2, 1, 2, 2, 2, [0, 64, "DaH"], 1, 2, 2, 2, 1, 2, [0, 52, "DaH"], 1, 2, [0, 48, "DaH"], 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 31, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 99
+[ , 2, 2, 2, [0, 72, "BKW"], 2, 2, 3, 1, 2, 2, 2, 1, 2, 3, 20, [0, 50, "GW1"], 1, 2, 1, 2, 1, 2, [0, 40, "BZ"], 1, 2, 20, 1, 1, 1, 20, [0, 33, "Ed"], 1, 1, 20, 1, 1, 20, [0, 28, "Var"], 1, 20, 1, 1, 20, 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 100
+[ , [6, 5], [6, 16], 2, 3, 2, 2, 1, 1, 2, [0, 60, "BZ"], 2, 1, 2, 1, 1, 2, 20, [0, 48, "BZ"], 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], 1, 20, [0, 39, "BZ"], 1, 20, [0, 36, "BZ"], [0, 35, "Var"], 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 101
+[ , 2, 1, 2, 1, 2, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, [0, 51, "XBZ"], 2, 1, 2, 3, 2, 3, 20, [0, 40, "Ed"], 3, [0, 38, "Ed"], [0, 37, "Var"], 1, 1, 20, [0, 34, "Var"], 1, 1, 20, 1, 1, 20, [0, 29, "Var"], 1, 20, 1, 1, 20, 1, 20, 20, 1, 2, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 102
+[ , 2, 2, [6, 17], 2, [0, 72, "BKW"], 2, 2, 20, [0, 64, "DaH"], 20, [0, 60, "DaH"], 1, 2, [0, 54, "DaH"], [0, 53, "DaH"], 3, [0, 50, "DaH"], 20, [0, 48, "BZ"], 2, [0, 44, "BZ"], 1, 2, 1, 1, 1, 1, 20, 1, 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Ed"], 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 20, [0, 24, "Tol"], 20, 1, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, [0, 18, "Var"], 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, [0, 12, "Tol"], 20, 20, 1, 20, 1, 20, 20, 20, 20, [...]
+#V   n = 103
+[ , 2, 2, 3, 2, 3, 2, 2, 20, 3, 1, 1, 1, 2, 2, 3, 1, 2, 20, 3, 2, 1, 2, [0, 42, "XBZ"], 20, [0, 40, "Ed"], 1, 1, 1, 20, [0, 36, "Ed"], [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 104
+[ , 2, 2, 1, 2, 2, [0, 71, "Gu"], 2, 20, 3, 1, 1, 1, 2, 2, 3, 1, 2, 20, 1, 2, 1, 2, 1, 1, 1, 20, [0, 39, "Ed"], [0, 38, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 20, [0, 28, "Var"], 1, 20, 1, 1, 20, 20, [0, 24, "Vx"], 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Ed"], 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, [0, 12, "Vx"], 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 105
+[ , [6, 5], [6, 21], 1, 2, 2, 3, [0, 68, "BZ"], 1, 1, 1, 1, 1, 2, [0, 56, "BZ"], 1, 20, [0, 52, "DaH"], 1, 20, [0, 48, "BZ"], 1, 2, [0, 43, "Ed"], [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 1, 20, [0, 37, "Var"], 1, 1, 20, [0, 34, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20,  [...]
+#V   n = 106
+[ , 2, 3, 1, 2, 2, 3, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 3, 2, 1, 1, 1, 2, 1, 1, 1, 20, [0, 40, "Ed"], 1, 1, 1, 20, [0, 36, "Var"], 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, [0, 29, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 23, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, [0, 6, "Ed"], 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 107
+[ , 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 20, [0, 54, "XB"], 3, [0, 51, "XB"], 20, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 39, "Ed"], [0, 38, "Var"], 1, 1, 20, [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 14, "Ed"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 108
+[ , 2, 2, 1, 2, [0, 76, "BKW"], 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 20, 1, 2, [0, 45, "Ed"], [0, 44, "DNX"], [0, 43, "DNX"], [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 1, 20, [0, 37, "Var"], 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 24, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, [0, 8, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 109
+[ , 2, 2, 20, [7, 426], 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 2, 20, 20, [0, 49, "GW2"], 1, 1, 1, 1, 1, 20, [0, 40, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 34, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, [0, 25, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 110
+[ , [6, 5], 2, 2, 3, 2, 2, [0, 72, "BZ"], 2, 20, 1, 1, 1, 2, [0, 60, "BZ"], 20, [0, 56, "BZ"], 1, 2, [0, 51, "BZ"], 20, 20, 3, [0, 46, "Ed"], [0, 45, "Ed"], [0, 44, "BZ"], [0, 43, "Var"], 1, 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Ed"], 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 20, [0, 19, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 2 [...]
+#V   n = 111
+[ , 2, [6, 6], 2, 2, 2, 2, 1, 2, 20, 20, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, 3, 1, 1, 1, 1, 20, [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 20, [0, 38, "Ed"], 1, 1, 20, [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 20, [0, 18, "Ed"], 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 11, "VE"], 20, 20, 1, 20, 1, 20, 20, 20, [0, 8, "Ed"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, [...]
+#V   n = 112
+[ , 2, 1, 2, 2, 2, [0, 76, "DG5"], 1, 2, 2, 20, 20, 1, 2, 2, 1, 2, 20, [0, 55, "GW2"], 2, [0, 51, "BZ"], 20, 3, 1, 1, 1, 1, 1, 1, 1, 20, [0, 40, "Var"], 1, 1, 20, [0, 37, "Var"], 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, [0, 9, "Ed"], 20, 20, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 113
+[ , 2, 2, [6, 28], 2, 2, 2, 1, 2, 2, 20, 20, 20, [0, 68, "DaH"], 2, 1, 2, 1, 2, 2, 1, 2, 3, 1, 1, 2, [0, 45, "DNX"], [0, 44, "Ed"], [0, 43, "Var"], 1, 1, 1, 20, [0, 39, "Var"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Ed"], 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 23, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 20, [0, 7, "DaH"], 1, 20, 20,  [...]
+#V   n = 114
+[ , 2, 2, 1, 2, 2, 2, 2, [0, 74, "Bou"], 2, 20, 20, 20, 3, 2, 1, 2, 1, 2, 2, 1, 2, 1, 20, 1, 2, 1, 1, 1, 20, [0, 42, "Var"], [0, 41, "Var"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, [0, 24, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 3, 20, 1, 20, 20, 20, [0, 5, "Bou"], 20, 20, 1, 1, 20, 20, 20],
+#V   n = 115
+[ , [6, 5], 2, 2, [0, 84, "Gu3"], 2, 2, [0, 76, "BZ"], 3, [0, 72, "BZ"], 1, 20, 20, 3, [0, 64, "BZ"], 20, [0, 60, "BZ"], 1, 2, 2, 2, [0, 52, "BZ"], 2, 1, 20, [0, 48, "BZ"], [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 35, "Var"], 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 116
+[ , 2, [6, 16], 2, 1, 2, 2, 2, 3, 2, 1, 1, 20, 3, 2, 1, 1, 1, 2, 2, [0, 54, "BZ"], 2, [0, 51, "BZ"], 20, [0, 49, "GW2"], 3, 1, 1, 20, [0, 44, "Ed"], [0, 43, "Var"], 1, 1, 20, [0, 40, "Ed"], 1, 1, 20, [0, 37, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20],
+#V   n = 117
+[ , 2, 1, 2, 2, [0, 84, "Bou"], [0, 80, "Gu"], 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 1, 2, 2, 1, 2, 2, [0, 50, "Ed"], 3, 1, 1, 1, 1, 1, 1, 20, [0, 42, "Var"], 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 26, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 2 [...]
+#V   n = 118
+[ , 2, 2, [0, 88, "Bel"], 2, 2, 2, 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 20, [0, 60, "GW2"], 2, 1, 2, 2, 1, 1, 20, 1, 1, 2, [0, 45, "Var"], 1, 1, 1, 20, [0, 41, "Var"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, [0, 7, "VE"], 20, 20, 1, 20, 20, 1, 20, 20, 20,  [...]
+#V   n = 119
+[ , 2, 2, 1, 2, 2, 2, 2, 1, 2, 20, 1, 2, 1, 2, 1, 2, 20, 3, [0, 59, "GW2"], 1, 2, 2, 1, 2, [0, 49, "Var"], 20, 1, 2, 1, 20, [0, 44, "Var"], [0, 43, "Var"], 1, 1, 20, [0, 40, "Var"], 1, 1, 20, 1, 1, 20, [0, 35, "Var"], 1, 20, [0, 33, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 20, [0, 21, "Ed"], 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 14, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 8, "Ed"], 20, 20 [...]
+#V   n = 120
+[ , [6, 5], 2, 2, [0, 88, "GB4"], 2, 2, [0, 80, "BZ"], 20, [0, 76, "BZ"], 20, 20, [0, 72, "BZ"], 20, [0, 68, "BZ"], 20, [0, 64, "BZ"], 20, 3, 3, [0, 57, "BZ"], [0, 56, "BZ"], [0, 54, "BZ"], [0, 52, "BZ"], [0, 51, "BZ"], 1, 20, 20, [0, 48, "BZ"], 1, 1, 1, 1, 20, [0, 42, "Var"], 1, 1, 20, 1, 1, 20, [0, 37, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 23, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Var"], 20, 1, 20, 1, 2 [...]
+#V   n = 121
+[ , 2, [6, 16], 2, 1, 2, 2, 2, 1, 2, 1, 20, 3, 1, 2, 1, 2, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 20, 3, [0, 47, "Ed"], [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 24, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1 [...]
+#V   n = 122
+[ , 2, 1, 2, 20, [0, 88, "GW2"], 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, [0, 51, "Ed"], [0, 50, "Var"], [0, 49, "Var"], 1, 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Ed"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1,  [...]
+#V   n = 123
+[ , 2, 2, [0, 92, "Bel"], 2, 3, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 1, 20, [0, 43, "Var"], 1, 1, 20, [0, 40, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, [...]
+#V   n = 124
+[ , 2, 2, 2, 2, 3, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 1, 2, [0, 57, "BZ"], 2, [0, 54, "BZ"], 1, 1, 1, 1, 1, 1, 20, [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, [...]
+#V   n = 125
+[ , [6, 5], 2, 2, 2, 1, 2, [0, 84, "BZ"], 2, [0, 80, "BZ"], 2, 1, 2, 20, [0, 72, "BZ"], 20, [0, 68, "BZ"], 2, [0, 64, "BZ"], 1, 20, [0, 60, "BZ"], 2, [0, 56, "BZ"], 2, [0, 53, "Ed"], [0, 52, "BZ"], [0, 51, "BZ"], [0, 50, "Ed"], [0, 49, "Var"], 1, 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 2 [...]
+#V   n = 126
+[ , 2, [6, 21], 2, [0, 92, "GB4"], 20, [0, 88, "BKW"], 2, [0, 82, "DaH"], 3, [0, 78, "DaH"], 20, [0, 76, "XBZ"], 20, 3, [0, 69, "DaH"], 3, [0, 66, "DaH"], 2, 1, 2, 3, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, [0, 38, "Var"], 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 28, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 127
+[ , 2, 1, 2, 2, 2, 3, 2, 2, 3, 1, 2, 3, 2, 3, 2, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, [0, 52, "Var"], [0, 51, "Var"], 1, 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 40, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20,  [...]
+#V   n = 128
+[ , 2, 20, [6, 64], 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 20, [0, 63, "BZ"], 20, [0, 60, "BZ"], 20, [0, 57, "BZ"], 20, [0, 54, "BZ"], 1, 1, 20, [0, 50, "Ed"], [0, 49, "Var"], 1, 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Ed"], 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, [0, 35, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1 [...]
+#V   n = 129
+[ , 2, 2, 3, 2, 2, 2, 2, 2, 2, 1, 2, [0, 77, "GW1"], 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 2 [...]
+#V   n = 130
+[ , [6, 5], 2, 1, 2, 2, 2, [6, 65], 2, 2, 20, [0, 80, "DaH"], 2, [0, 76, "DaH"], [0, 74, "DaH"], [0, 72, "GW2"], [0, 70, "XB"], 20, [0, 68, "DaH"], 1, 2, 1, 2, 1, 2, 1, 2, [0, 54, "Ed"], [0, 53, "DNX"], [0, 52, "Ed"], [0, 51, "Var"], 1, 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, [0, 38, "Var"], 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "BZ"], 20, [0, 25, "BZ"], 20, [0, 24, "BZ"], 20, [0, [...]
+#V   n = 131
+[ , 2, 2, 2, [0, 96, "BDK"], 2, 2, 3, 2, 2, 20, 3, 2, 3, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 2 [...]
+#V   n = 132
+[ , 2, [6, 6], 2, 3, 2, [0, 92, "GW2"], 1, 2, 2, 20, 3, [0, 79, "GW1"], 1, 2, 3, [0, 71, "XB"], [0, 70, "GW2"], 3, 20, [0, 66, "BZ"], 20, [0, 63, "BZ"], 20, [0, 60, "BZ"], 20, [0, 57, "BZ"], [0, 55, "Vx"], [0, 54, "Var"], [0, 53, "Var"], 1, 1, 1, 1, 20, [0, 48, "Var"], 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1 [...]
+#V   n = 133
+[ , 2, 1, 2, 1, 2, 2, 20, [0, 88, "DaH"], 2, 2, 3, 3, 1, 2, 3, 3, 3, 3, 20, 3, 20, 3, 20, 3, [0, 58, "Vx"], 3, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, [0, 47, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1 [...]
+#V   n = 134
+[ , 2, 2, [6, 49], 2, [0, 96, "BKW"], 2, 2, 3, 2, 2, 1, 2, 20, [0, 77, "GW1"], 1, 2, 3, 3, 20, 3, 20, 3, [0, 61, "Vx"], 3, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 20, [0, 46, "VE"], 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 2 [...]
+#V   n = 135
+[ , [6, 5], 2, 2, 2, 3, [0, 94, "GW2"], 2, 1, 2, 2, 20, [0, 80, "BZ"], 20, 3, 20, [0, 72, "BZ"], 3, 3, 20, 3, [0, 64, "Vx"], 3, 2, 1, 2, [0, 58, "Vx"], [0, 57, "Vx"], [0, 56, "DNX"], [0, 55, "DNX"], [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 1, 20, [0, 48, "Var"], 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, [0, 38, "VE"], 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 30, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1 [...]
+#V   n = 136
+[ , 2, 2, 2, 2, 2, 3, 2, 20, [0, 88, "DaH"], [0, 84, "GW2"], 1, 2, 20, 3, 1, 2, 2, 1, 1, 2, 1, 1, 2, 20, [0, 60, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "VE"], 20, [0, 24, "VE"], 20, [0, 23, "VE"], 20, [0, 22, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1 [...]
+#V   n = 137
+[ , 2, [6, 16], 2, [0, 100, "BKW"], 2, 2, [6, 65], 2, 3, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, [0, 58, "Vx"], [0, 57, "Vx"], [0, 56, "Var"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [...]
+#V   n = 138
+[ , 2, 1, 2, 2, 2, 2, 3, [0, 90, "MTS"], 3, 2, 1, 2, 1, 2, 1, 2, [0, 72, "BZ"], 2, 20, [0, 68, "BZ"], [0, 66, "Vx"], 20, [0, 64, "BZ"], 2, 20, [0, 60, "BZ"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "VE"], [0, 48, "Var"], 1, 1, 20, 1, 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "VE"], 20, 1, 20, 1, 20, 1, [...]
+#V   n = 139
+[ , 2, 2, [6, 64], 2, 2, [0, 96, "GW2"], 3, 2, 3, [0, 86, "GW2"], 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, [0, 63, "Vx"], 2, 1, 2, [0, 58, "Var"], 1, 1, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 45, "VE"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 19, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, [...]
+#V   n = 140
+[ , [6, 5], 2, 2, 2, [0, 100, "BKW"], 2, 1, 2, 3, 3, 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, [0, 76, "BZ"], 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], 20, [0, 66, "BZ"], 1, 2, [0, 62, "Vx"], 20, [0, 60, "BZ"], 1, 20, [0, 57, "VE"], [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "VE"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 141
+[ , 2, 2, 2, 2, 2, 2, 2, [0, 92, "MTS"], 2, 2, 20, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, [0, 64, "Vx"], 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "Var"], 1, 1, 20, [0, 46, "Var"], 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Var"], 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 2 [...]
+#V   n = 142
+[ , 2, [6, 16], 2, [0, 104, "Bo1"], 2, 2, 2, 2, 2, [0, 87, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 60, "Vx"], [0, 59, "VE"], [0, 58, "Var"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 2 [...]
+#V   n = 143
+[ , 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20 [...]
+#V   n = 144
+[ , 2, 2, [6, 64], 2, 2, [0, 100, "GW2"], [6, 72], 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], [0, 68, "BZ"], [0, 66, "BZ"], 20, [0, 64, "BZ"], 2, [0, 61, "Var"], [0, 60, "Var"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "Var"], 1, 20 [...]
+#V   n = 145
+[ , [6, 5], 2, 2, 2, [0, 104, "Koh"], 3, 1, 2, [0, 92, "BZ"], 1, 1, 2, 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, [0, 76, "BZ"], 2, 3, 1, 2, 3, 2, [0, 65, "Vx"], 3, [0, 63, "Vx"], 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, [...]
+#V   n = 146
+[ , 2, 2, 2, 2, 3, 2, 1, 2, 2, [0, 90, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "VE"], 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, [0, 41, "VE"], 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20,  [...]
+#V   n = 147
+[ , 2, [6, 21], 2, [0, 108, "Bo1"], 3, 2, 1, 2, 2, 1, 20, [0, 89, "GW1"], 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, [0, 64, "Vx"], [0, 63, "Vx"], [0, 62, "VE"], [0, 61, "VE"], [0, 60, "Var"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 148
+[ , 2, 1, 2, 2, 2, 2, 20, [0, 98, "MTS"], 2, 1, 2, 3, 1, 2, 1, 2, 1, 2, [0, 76, "GW2"], 2, 20, [0, 72, "BZ"], 2, [0, 69, "BZ"], 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20,  [...]
+#V   n = 149
+[ , 2, 20, [6, 64], 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, [0, 62, "Var"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 20, 20, 1,  [...]
+#V   n = 150
+[ , [6, 5], 2, 3, 2, 2, [0, 104, "DG5"], 1, 2, [0, 96, "BZ"], 20, [0, 92, "BZ"], 2, 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], [0, 77, "GW2"], [0, 76, "BZ"], 1, 2, [0, 72, "BZ"], 2, 20, [0, 68, "BZ"], [0, 66, "Vx"], 20, [0, 64, "BZ"], 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20 [...]
+#V   n = 151
+[ , 2, 2, 1, 2, 2, 3, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, [...]
+#V   n = 152
+[ , 2, 2, 2, [0, 112, "Bo1"], 2, 2, 20, [0, 101, "Ma"], 2, 1, 2, [0, 92, "XBZ"], 1, 2, 1, 2, 1, 2, 1, 2, 20, [0, 75, "BZ"], 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], 2, [0, 66, "BZ"], 20, [0, 64, "Vx"], [0, 63, "VE"], [0, 62, "Var"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 20, [0, 52, "Var"], 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1,  [...]
+#V   n = 153
+[ , 2, [6, 6], 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 3, 2, 3, 1, 2, [0, 68, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, [...]
+#V   n = 154
+[ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 65, "Var"], [0, 64, "Var"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20 [...]
+#V   n = 155
+[ , [6, 5], 2, [6, 70], 2, 2, 2, [0, 104, "BZ"], [0, 103, "MTS"], [0, 100, "BZ"], 20, [0, 96, "BZ"], [0, 94, "GW1"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, 1, 2, 20, 1, 2, [0, 69, "Vx"], 1, 2, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1,  [...]
+#V   n = 156
+[ , 2, 2, 2, 2, [6, 78], 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 20, [0, 76, "BZ"], [0, 73, "Vx"], 20, [0, 72, "BZ"], 1, 20, [0, 68, "BZ"], 2, 1, 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, [0, 55, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, [...]
+#V   n = 157
+[ , 2, 2, 2, 2, 3, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 2, 3, [0, 67, "Vx"], 20, [0, 65, "VE"], [0, 64, "Var"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "VE"], 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 158
+[ , 2, [6, 16], 2, 2, 2, [0, 110, "BKW"], 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "Var"], 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20 [...]
+#V   n = 159
+[ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, [0, 68, "Var"], [0, 67, "Var"], [0, 66, "Var"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, [0, 55, "Var"], 1, 1, 20, [0, 52, "Var"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [...]
+#V   n = 160
+[ , [6, 5], 2, [6, 75], 2, 2, 2, 1, 2, [0, 104, "BZ"], 20, [0, 100, "BZ"], 2, 20, [0, 96, "BZ"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 2, 1, 1, 2, 20, [0, 72, "BZ"], 2, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, [...]
+#V   n = 161
+[ , 2, 2, 1, 2, 2, [0, 112, "BKW"], 20, [0, 108, "MTS"], 2, 1, 2, [0, 98, "GW1"], 20, 3, 1, 2, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, [0, 44, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var" [...]
+#V   n = 162
+[ , 2, 2, 2, [0, 120, "BKW"], [0, 116, "BKW"], 3, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, [0, 80, "BZ"], 2, 20, [0, 76, "BZ"], 2, 20, [0, 72, "BZ"], [0, 70, "Vx"], 20, [0, 68, "BZ"], [0, 67, "VE"], [0, 66, "Var"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20 [...]
+#V   n = 163
+[ , 2, [6, 16], 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 164
+[ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, [0, 70, "Var"], [0, 69, "Var"], [0, 68, "Var"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 165
+[ , [6, 5], 2, [6, 80], 2, [0, 118, "BKW"], 2, 1, 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, 1, 2, 20, [0, 96, "BZ"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 2, [0, 80, "BZ"], 1, 2, [0, 76, "BZ"], 1, 2, [0, 72, "BZ"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 2 [...]
+#V   n = 166
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 20, 20, [0, 100, "XBZ"], 20, 3, 20, 3, 20, 3, 20, 3, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, [...]
+#V   n = 167
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 20, 3, 2, 3, 20, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 73, "Vx"], 1, 2, 20, [0, 69, "VE"], [0, 68, "Var"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 42, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [ [...]
+#V   n = 168
+[ , 2, [6, 21], 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 20, 3, 2, 2, 2, 3, 20, 3, [0, 85, "Vx"], 20, [0, 84, "BZ"], [0, 81, "BZ"], 20, [0, 80, "BZ"], [0, 77, "Vx"], 20, [0, 76, "BZ"], 1, 20, [0, 72, "BZ"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1 [...]
+#V   n = 169
+[ , 2, 1, 2, 2, 2, [0, 118, "DG5"], 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 73, "Vx"], 1, 2, [0, 70, "Var"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26,  [...]
+#V   n = 170
+[ , [6, 5], 20, [6, 85], 2, [0, 122, "DaH"], 3, 1, 2, [0, 112, "DaH"], 20, [0, 108, "DaH"], [0, 104, "DaH"], [0, 102, "DaH"], 20, [0, 100, "DaH"], [0, 98, "DaH"], 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 75, "Vx"], 1, 20, [0, 72, "Vx"], 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 41, [...]
+#V   n = 171
+[ , 2, 2, 1, 2, 2, 2, 20, [0, 117, "MTS"], 3, 20, 3, 3, 2, 20, 3, 3, [0, 96, "DaH"], 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 20, [0, 33, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 172
+[ , 2, 2, 20, [0, 128, "Liz"], 2, [0, 119, "Ayd"], 20, 3, 3, 20, 3, 1, 2, 2, 3, 3, 3, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 72, "Vx"], [0, 71, "VE"], [0, 70, "Var"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1,  [...]
+#V   n = 173
+[ , 2, 2, 20, 3, 2, 2, 20, 3, 2, 2, 3, 1, 2, 2, 2, 2, 3, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 1, 20, 1, [...]
+#V   n = 174
+[ , 2, [6, 6], 2, 3, 2, 2, 20, 3, 2, 2, 3, 1, 2, 2, 2, 2, 1, 2, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], 2, 20, [0, 84, "BZ"], 20, 20, [0, 80, "BZ"], 2, 20, [0, 76, "BZ"], 2, [0, 73, "Var"], [0, 72, "Var"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, [0,  [...]
+#V   n = 175
+[ , [6, 5], 2, 2, 2, [0, 126, "BKW"], [0, 121, "DG5"], 1, 2, [0, 114, "GW2"], 2, 1, 2, [0, 106, "GW2"], [0, 104, "BZ"], 2, [0, 100, "BZ"], 20, [0, 96, "BZ"], 20, 3, 1, 20, 3, 2, 20, 3, 1, 20, 3, [0, 78, "Vx"], 20, 3, [0, 75, "Vx"], 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "VE"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 4 [...]
+#V   n = 176
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 2, [0, 112, "GW2"], 20, [0, 108, "GW2"], 2, 2, [0, 103, "GW1"], 2, 1, 2, 1, 2, 1, 1, 2, [0, 87, "BZ"], 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, [...]
+#V   n = 177
+[ , 2, 2, [6, 17], 2, 2, 2, 20, [0, 119, "MTS"], 2, 3, 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 76, "Vx"], [0, 75, "Vx"], 20, [0, 73, "VE"], [0, 72, "Var"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 178
+[ , 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 20, [0, 108, "GW2"], 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 20, [0, 33, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, [...]
+#V   n = 179
+[ , 2, [6, 16], 2, [0, 132, "Koh"], 2, 2, 20, [0, 120, "MTS"], 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 20, 1, 2, [0, 77, "Vx"], 1, 2, [0, 74, "Var"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "VE"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20 [...]
+#V   n = 180
+[ , [6, 5], 2, 2, 2, [0, 130, "BKW"], 2, 1, 2, [0, 118, "GW2"], 2, 2, 2, 20, [0, 108, "BZ"], [0, 106, "GW1"], [0, 104, "BZ"], 20, [0, 100, "BZ"], 20, [0, 96, "BZ"], [0, 93, "BZ"], 20, [0, 92, "BZ"], [0, 90, "BZ"], 20, [0, 88, "BZ"], 20, 20, [0, 84, "BZ"], [0, 81, "BZ"], 20, [0, 80, "BZ"], 1, 20, [0, 76, "BZ"], 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20 [...]
+#V   n = 181
+[ , 2, 2, 2, 2, 2, 2, 2, [0, 121, "MTS"], 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, 3, 3, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 77, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1,  [...]
+#V   n = 182
+[ , 2, 2, [6, 17], [0, 134, "BKW"], 2, 2, 2, 2, 2, 2, [0, 114, "DaH"], [0, 112, "DaH"], 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 76, "Vx"], [0, 75, "VE"], [0, 74, "Var"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20 [...]
+#V   n = 183
+[ , 2, 2, 2, 2, 2, [0, 128, "GW2"], 2, [0, 122, "MTS"], [0, 120, "GW2"], 2, 2, 2, 20, [0, 110, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 80, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, [0, 42, "VE"], 1, 20, 1, 20, 1,  [...]
+#V   n = 184
+[ , 2, [6, 16], 2, 2, 2, 2, 2, 2, 3, 2, 2, [0, 113, "GW1"], 1, 2, [0, 109, "GW1"], 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 77, "Var"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 1, 20, 1, 1, 20, [0, 56, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 185
+[ , [6, 5], 2, 2, 2, [0, 134, "BKW"], 2, 2, 2, 1, 2, [0, 116, "BZ"], 2, 1, 2, 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, [0, 100, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20 [...]
+#V   n = 186
+[ , 2, 2, 2, 2, 3, 2, 2, [0, 124, "MTS"], 2, [0, 120, "DaH"], 2, 2, 20, [0, 112, "XBZ"], 2, 2, 1, 2, 1, 2, 1, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], [0, 85, "Vx"], 20, [0, 84, "BZ"], 2, 20, [0, 80, "BZ"], 2, 1, 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, [...]
+#V   n = 187
+[ , 2, 2, [6, 17], 2, 2, 2, [0, 128, "GW2"], 2, 2, 3, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 79, "Vx"], 20, [0, 77, "VE"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 188
+[ , 2, 2, 1, 2, 2, 2, 3, 2, 2, 3, 2, [0, 116, "GW1"], 2, 20, [0, 112, "GW1"], 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 83, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1 [...]
+#V   n = 189
+[ , 2, [6, 21], 2, [0, 140, "BKW"], 2, 2, 3, [22, 8, 1], 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 80, "Var"], [0, 79, "Var"], [0, 78, "Var"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, [...]
+#V   n = 190
+[ , [6, 5], 3, 2, 2, 2, 2, 3, 1, 2, 20, [0, 120, "BZ"], 2, [0, 116, "BZ"], 1, 2, [0, 112, "BZ"], 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, [0, 100, "BZ"], 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, [...]
+#V   n = 191
+[ , 2, 1, 2, 2, [0, 138, "BKW"], 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 3, 2, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, 1, 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 192
+[ , 2, 2, [6, 64], 2, 2, [0, 136, "GW2"], 1, 1, 2, 1, 2, [0, 119, "GW1"], 1, 2, [0, 115, "GW1"], 1, 2, 3, 20, 3, 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], 2, 20, [0, 84, "BZ"], [0, 82, "Vx"], 20, [0, 80, "BZ"], [0, 79, "VE"], [0, 78, "Var"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, [0, [...]
+#V   n = 193
+[ , 2, 2, 1, 2, 2, 3, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 86, "Vx"], 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0 [...]
+#V   n = 194
+[ , 2, 2, 20, [0, 144, "BKW"], 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 82, "Var"], [0, 81, "Var"], [0, 80, "Var"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, [...]
+#V   n = 195
+[ , [6, 5], [6, 6], 2, 3, [0, 141, "BKW"], [0, 137, "GW2"], 1, 1, 2, 20, [0, 124, "DaH"], 2, 1, 2, [0, 117, "GW1"], 20, [0, 114, "DaH"], 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 84, "Vx"], 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var" [...]
+#V   n = 196
+[ , 2, 2, 2, 2, 3, 2, 20, 1, 2, 2, 3, [0, 122, "GW1"], 20, [0, 120, "DaH"], 2, 20, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20,  [...]
+#V   n = 197
+[ , 2, 2, 2, 2, 2, 2, 2, 20, [0, 132, "XX"], 2, 2, 1, 2, 3, 2, 20, 3, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 85, "Vx"], 1, 2, 20, [0, 81, "VE"], [0, 80, "Var"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "VE"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1,  [...]
+#V   n = 198
+[ , 2, 2, [6, 28], 2, 2, 2, [0, 134, "MTS"], 20, 3, 2, 2, 1, 2, 1, 2, 20, 3, 2, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], [0, 89, "Vx"], 20, [0, 88, "BZ"], 1, 20, [0, 84, "BZ"], 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, [0 [...]
+#V   n = 199
+[ , 2, 2, 1, 2, 2, [0, 140, "Koh"], 1, 2, 3, [0, 128, "MTS"], [0, 126, "GW1"], 2, [0, 123, "GW1"], 1, 2, 2, 3, 2, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 85, "Vx"], 1, 2, [0, 82, "Var"], [0, 81, "Var"], 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20,  [...]
+#V   n = 200
+[ , [6, 5], [6, 16], 2, [0, 148, "Bo1"], 2, 2, 1, 2, 3, 2, 2, [0, 125, "GW1"], 1, 2, [0, 121, "GW1"], [0, 116, "BZ"], 3, [0, 112, "BZ"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 87, "Vx"], 1, 20, [0, 84, "Vx"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 1,  [...]
+#V   n = 201
+[ , 2, 2, 2, 2, [0, 145, "BKW"], [0, 141, "GW2"], 1, 2, 3, 2, 2, 1, 1, 2, 2, 2, 3, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 1, 2 [...]
+#V   n = 202
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 3, [0, 130, "MTS"], 2, 1, 2, [0, 124, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 84, "Vx"], [0, 83, "VE"], [0, 82, "Var"], [0, 81, "Var"], 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 1, 20, 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, [...]
+#V   n = 203
+[ , 2, 2, [6, 64], 2, 2, 2, 1, 2, 2, 2, [0, 129, "GW1"], 2, [0, 126, "GW1"], 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1 [...]
+#V   n = 204
+[ , 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 2, 20, [0, 88, "BZ"], [0, 86, "Vx"], [0, 85, "Var"], [0, 84, "Var"], [0, 83, "Var"], 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 48, "Var"], 1, [...]
+#V   n = 205
+[ , [6, 5], [6, 16], 2, [0, 152, "Bo1"], [0, 148, "BKW"], [0, 144, "MTS"], 1, 2, [0, 134, "X6a"], 2, 2, [0, 129, "GW1"], 1, 2, [0, 125, "GW1"], [0, 120, "BZ"], 20, [0, 116, "BZ"], 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 90, "Vx"], 20, 3, 1, 1, 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, [...]
+#V   n = 206
+[ , 2, 2, 2, 3, 2, 2, 1, 2, 2, [0, 133, "MTS"], 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 86, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "VE"], 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1 [...]
+#V   n = 207
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, [0, 132, "GW1"], 1, 2, [0, 128, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 88, "Vx"], 1, 20, [0, 85, "VE"], [0, 84, "Var"], [0, 83, "Var"], 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1 [...]
+#V   n = 208
+[ , 2, 2, [6, 64], 2, 2, 2, 1, 2, 2, 2, 1, 2, [0, 130, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, [...]
+#V   n = 209
+[ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 89, "Vx"], 1, 2, [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20,  [...]
+#V   n = 210
+[ , [6, 5], [6, 21], 2, 2, [0, 152, "BKW"], [0, 148, "MTS"], 20, [0, 144, "DaH"], [0, 138, "MTS"], [0, 136, "MTS"], 2, [0, 133, "GW1"], 1, 2, [0, 129, "GW1"], [0, 124, "BZ"], [0, 121, "DaH"], [0, 120, "BZ"], 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], [0, 93, "Vx"], 20, [0, 92, "BZ"], 1, 20, [0, 88, "BZ"], 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"],  [...]
+#V   n = 211
+[ , 2, 3, 2, [0, 156, "Bou"], 3, 2, 20, 3, 2, 2, [0, 135, "GW1"], 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 89, "Var"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "Var"], 1, 2 [...]
+#V   n = 212
+[ , 2, 1, 2, 2, 2, 2, 20, 3, 2, 2, 1, 2, 20, [0, 132, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 4 [...]
+#V   n = 213
+[ , 2, 2, [6, 64], 2, 2, 2, 2, 3, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [ [...]
+#V   n = 214
+[ , 2, 2, 3, 2, 2, [0, 151, "MTS"], 2, 3, 2, [0, 139, "MTS"], 2, [0, 136, "GW1"], 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 89, "Var"], [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 2 [...]
+#V   n = 215
+[ , [6, 5], 2, 1, 2, 2, 2, [0, 147, "Ayd"], 2, 2, 1, 2, 1, 1, 2, [0, 133, "GW1"], [0, 128, "BZ"], 20, [0, 124, "BZ"], 20, [0, 120, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20 [...]
+#V   n = 216
+[ , 2, [6, 6], 2, [0, 160, "Bo1"], 2, 2, 3, [0, 145, "MTS"], [0, 143, "GW1"], 2, [0, 139, "GW1"], 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 2, 20, [0, 92, "BZ"], 2, 1, 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, " [...]
+#V   n = 217
+[ , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, [0, 136, "GW1"], 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 91, "Vx"], 20, [0, 89, "VE"], [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 1, 1, 20, [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 49, [...]
+#V   n = 218
+[ , 2, 2, 2, 2, 2, 2, 2, 2, 2, [0, 142, "MTS"], 1, 2, [0, 138, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 95, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1 [...]
+#V   n = 219
+[ , 2, 2, [6, 49], [0, 162, "BKW"], 2, [0, 155, "MTS"], 2, 2, 2, 1, 2, [0, 140, "GW1"], 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 92, "Vx"], [0, 91, "Var"], [0, 90, "Var"], [0, 89, "Var"], 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 2 [...]
+#V   n = 220
+[ , [6, 5], 2, 2, 2, [0, 160, "BKW"], 2, [0, 150, "MTS"], [0, 148, "MTS"], 2, 1, 2, 1, 1, 2, [0, 137, "GW1"], [0, 132, "BZ"], 20, [0, 128, "BZ"], 20, [0, 124, "BZ"], 20, [0, 120, "BZ"], 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, [0, [...]
+#V   n = 221
+[ , 2, [6, 16], 2, 2, 3, 2, 2, 2, [0, 147, "GW1"], 2, [0, 143, "GW1"], 1, 1, 2, 2, 3, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20 [...]
+#V   n = 222
+[ , 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 1, 2, [0, 140, "GW1"], 2, 2, 1, 2, 1, 2, 1, 2, [0, 120, "BZ"], 2, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 2, 20, [0, 96, "BZ"], [0, 94, "Vx"], 20, [0, 92, "BZ"], [0, 91, "VE"], [0, 90, "Var"], [0, 89, "Var"], 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, [...]
+#V   n = 223
+[ , 2, 2, 2, 2, 2, 2, 2, [0, 150, "MTS"], 2, 2, 1, 2, [0, 142, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 98, "Vx"], 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1,  [...]
+#V   n = 224
+[ , 2, 2, [6, 64], 2, 2, 2, [0, 153, "MTS"], 1, 2, [0, 147, "MTS"], 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 94, "Vx"], [0, 93, "Var"], [0, 92, "Var"], [0, 91, "Var"], 1, 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"] [...]
+#V   n = 225
+[ , [6, 5], 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, [0, 145, "GW1"], 1, 1, 2, 2, 20, [0, 132, "BZ"], 20, [0, 128, "BZ"], 20, [0, 124, "BZ"], 2, [0, 120, "BZ"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 96, "Vx"], 1, 1, 1, 1, 20, [0, 90, "VE"], [0, 89, "Var"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "VE"], 1,  [...]
+#V   n = 226
+[ , 2, [6, 16], 2, [0, 168, "BKW"], [0, 163, "BKW"], [0, 161, "MTS"], 2, 1, 2, 1, 2, 1, 1, 2, [0, 142, "GW1"], [0, 136, "XBZ"], 20, 3, 20, 3, 20, 3, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 2 [...]
+#V   n = 227
+[ , 2, 2, 2, 3, 2, 2, 2, [0, 153, "MTS"], [0, 152, "GW1"], 2, [0, 148, "GW1"], 1, 1, 2, 2, 3, 20, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 97, "Vx"], 1, 2, 20, [0, 93, "VE"], [0, 92, "Var"], [0, 91, "Var"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 2 [...]
+#V   n = 228
+[ , 2, 2, 2, 2, 2, 2, [0, 156, "MTS"], 1, 2, [0, 150, "MTS"], 1, 1, 2, [0, 145, "GW1"], 2, 3, 20, 3, 20, 3, 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], [0, 101, "Vx"], 20, [0, 100, "BZ"], 1, 20, [0, 96, "BZ"], 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Var"], 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "V [...]
+#V   n = 229
+[ , 2, 2, [6, 64], 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 20, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 97, "Vx"], 1, 2, [0, 94, "Var"], [0, 93, "Var"], 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 56 [...]
+#V   n = 230
+[ , [6, 5], 2, 2, 2, 2, 2, [0, 157, "MTS"], 1, 2, 1, 2, 20, [0, 148, "GW1"], 1, 2, 3, 20, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 99, "Vx"], 1, 20, [0, 96, "Vx"], 1, 1, 20, [0, 92, "VE"], [0, 91, "Var"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1 [...]
+#V   n = 231
+[ , 2, [6, 21], 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20,  [...]
+#V   n = 232
+[ , 2, 3, 2, 2, [0, 168, "BKW"], 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 96, "Vx"], [0, 95, "VE"], [0, 94, "VE"], [0, 93, "Var"], [0, 92, "Var"], 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 20, [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, [...]
+#V   n = 233
+[ , 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, [0, 153, "GW1"], 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "Var"], [0, 84, "Var"], 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 2 [...]
+#V   n = 234
+[ , 2, 2, [6, 64], 2, 2, [0, 168, "DaH"], 1, 1, 2, [0, 155, "MTS"], 1, 1, 1, 1, 2, 2, 1, 2, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 2, 20, [0, 100, "BZ"], [0, 98, "Vx"], [0, 97, "Var"], [0, 96, "Var"], [0, 95, "Var"], 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], 1, 1, 20, [0, 80, "VE"], 1, 1, 1, 20, 1, 1,  [...]
+#V   n = 235
+[ , [6, 5], 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, [0, 140, "BZ"], 20, [0, 136, "BZ"], 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 102, "Vx"], 20, 3, 1, 1, 1, 1, 20, [0, 94, "VE"], [0, 93, "Var"], [0, 92, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 20, [0, 82, "Var"], 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1,  [...]
+#V   n = 236
+[ , 2, 2, 20, [0, 176, "BKW"], 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 98, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20,  [...]
+#V   n = 237
+[ , 2, [6, 6], 2, 3, [0, 172, "BKW"], [0, 170, "Ma"], 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 100, "Vx"], 1, 20, [0, 97, "VE"], [0, 96, "VE"], [0, 95, "Var"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 20, 1, 1, 1, 1, 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 1, 20, 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 1,  [...]
+#V   n = 238
+[ , 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [...]
+#V   n = 239
+[ , 2, 2, 2, 2, 2, 2, 20, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 101, "Vx"], 1, 2, [0, 98, "Var"], [0, 97, "Var"], 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 52, "Var" [...]
+#V   n = 240
+[ , [6, 5], 2, [6, 70], 2, 2, 2, 2, 20, [0, 164, "GW1"], 1, 1, 1, 1, 1, 2, [0, 144, "BZ"], 20, [0, 140, "BZ"], 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], [0, 105, "Vx"], 20, [0, 104, "BZ"], 1, 20, [0, 100, "BZ"], 1, 1, 20, [0, 96, "VE"], [0, 95, "Var"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 20, 20, 1, 1, 1, 1, 1, 1, 1, 1 [...]
+#V   n = 241
+[ , 2, 2, 1, 2, 2, 2, [0, 166, "MTS"], 20, 3, 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, 2, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 101, "Var"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, [...]
+#V   n = 242
+[ , 2, [6, 16], 2, [0, 180, "Bo1"], 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 100, "Vx"], [0, 99, "VE"], [0, 98, "VE"], [0, 97, "Var"], [0, 96, "Var"], 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"] [...]
+#V   n = 243
+[ , 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 104, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "Var"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1 [...]
+#V   n = 244
+[ , 2, 2, 2, 2, 2, 2, 1, 2, [0, 166, "GW1"], 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 101, "Var"], [0, 100, "Var"], [0, 99, "Var"], 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 75, "VE"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "V [...]
+#V   n = 245
+[ , [6, 5], 2, [6, 75], 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 20, [0, 144, "BZ"], 20, [0, 140, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 98, "VE"], [0, 97, "Var"], [0, 96, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 66, "VE"], 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1 [...]
+#V   n = 246
+[ , 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, [0, 148, "XBZ"], 20, 3, 20, 3, 20, 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 2, 20, [0, 104, "BZ"], 2, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, 1, 1, 20, 1, 1 [...]
+#V   n = 247
+[ , 2, [6, 16], 2, [0, 184, "Bo1"], 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, 20, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 103, "Vx"], 20, [0, 101, "VE"], [0, 100, "VE"], [0, 99, "Var"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 20, [0, 67, "VE"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1,  [...]
+#V   n = 248
+[ , 2, 2, 2, 2, 2, 2, [4, 6], [4, 8], 1, 1, 1, 1, 1, 1, 2, 3, 20, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 107, "Vx"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, [0, 75, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, [...]
+#V   n = 249
+[ , 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 104, "Vx"], [0, 103, "Var"], [0, 102, "Var"], [0, 101, "Var"], 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 77, "Vx"], 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0,  [...]
+#V   n = 250
+[ , [6, 5], 2, [6, 80], 2, [0, 184, "Koh"], 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 100, "VE"], [0, 99, "Var"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, 1 [...]
+#V   n = 251
+[ , 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 149, "Vx"], 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 56, "Var" [...]
+#V   n = 252
+[ , 2, [6, 21], 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 148, "BZ"], 2, 20, [0, 144, "BZ"], [0, 141, "BZ"], 20, [0, 140, "BZ"], 20, 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 2, 20, [0, 108, "BZ"], [0, 106, "Vx"], 20, [0, 104, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, [0, 79, " [...]
+#V   n = 253
+[ , 2, 3, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 2, 20, 3, 2, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 2, 20, 3, [0, 110, "Vx"], 20, 3, 1, 1, 1, 20, 1, 1, 1, 2, [0, 99, "VE"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, 1 [...]
+#V   n = 254
+[ , 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 20, 1, 1, 1, 2, 2, 1, 2, 2, 3, 2, 20, 3, 1, 20, 3, 2, 20, 3, 20, 20, 3, 1, 20, 3, 2, 20, 3, 2, 20, 3, [0, 114, "Vx"], 20, 3, 2, [0, 109, "Vx"], 1, 2, [0, 106, "Vx"], [0, 105, "Var"], 1, 20, 1, 1, 2, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 2, 20, 1, 20, 20, 20, 1, 1, 1, 2, 2, [0, 79, "Vx"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1,  [...]
+#V   n = 255
+[ , [6, 5], 2, 1, 2, 1, 2, 2, 20, 1, 2, 20, 20, 1, 1, 2, [0, 152, "Vx"], 2, [0, 148, "BZ"], 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 1, 20, 3, 1, 2, 3, 2, 20, 3, [0, 118, "Vx"], 20, 3, 2, [0, 113, "Vx"], 1, 2, 1, 20, [0, 108, "Vx"], 1, 1, 20, 1, 20, 1, 2, 2, 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 20, 1, 1, 2, 2, 1, 20, [0, 78, "VE"], 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1 [...]
+#V   n = 256
+[ , 3, [6, 4], 20, [0, 192, "Bel"], 20, [0, 188, "XBC"], [0, 179, "BCH"], 20, 20, [0, 176, "XBC"], 20, 20, 20, [0, 172, "XBC"], [0, 171, "XBC"], 3, [0, 150, "BZ"], 3, [0, 147, "BZ"], 20, [0, 144, "BZ"], 20, [0, 141, "BZ"], 20, [0, 138, "BZ"], 3, [0, 135, "BZ"], 20, 3, 20, [0, 129, "BZ"], 3, 20, [0, 126, "BZ"], 3, [0, 123, "BZ"], 20, 3, 3, [0, 117, "BZ"], 3, [0, 115, "Vx"], 3, 20, [0, 112, "Vx"], [0, 110, "Var"], [0, 109, "Var"], 3, [0, 107, "XBC"], [0, 106, "Var"], [0, 105, "Vx"], 20, [0 [...]
+
+
+GUAVA_BOUNDS_TABLE[2][4] := [
+#V   n = 1
+[ ],
+#V   n = 2
+[ ],
+#V   n = 3
+[ ],
+#V   n = 4
+[ ,],
+#V   n = 5
+[ ,,],
+#V   n = 6
+[ , [15, 4],, [14, 4]],
+#V   n = 7
+[ , [15, 5], [15, 4], 12, 11],
+#V   n = 8
+[ , [15, 6], [15, 5], [15, 4], 11, 11],
+#V   n = 9
+[ , [15, 7], [15, 6], [15, 5], [15, 4], 11, 11],
+#V   n = 10
+[ , [15, 8], [0, 6, "GH"], [15, 6], [15, 5], [15, 4], 11, 11],
+#V   n = 11
+[ , [15, 8], 12, 11, [15, 6], [15, 5], [15, 4], 11, 11],
+#V   n = 12
+[ , [15, 9], [15, 8], 11, 11, [15, 6], [14, 6], [15, 4], 11, 11],
+#V   n = 13
+[ , [15, 10], [15, 9], [15, 8], 11, 11, 12, 11, [15, 4], 11, 11],
+#V   n = 14
+[ , [15, 11], [15, 10], [15, 9], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11],
+#V   n = 15
+[ , [15, 12], [15, 11], [15, 10], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11],
+#V   n = 16
+[ , [15, 12], [15, 12], [15, 11], [16, 9], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11],
+#V   n = 17
+[ , [15, 13], [15, 12], [15, 12], [16, 10], [16, 9], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11],
+#V   n = 18
+[ , [15, 14], [15, 13], [15, 12], [0, 10, "Liz"], [16, 10], [16, 9], [16, 8], [15, 8], [14, 8], 11, 11, 11, [0, 3, "cap"], 11, 11],
+#V   n = 19
+[ , [15, 15], [15, 14], [14, 3], 12, 11, [16, 10], [16, 9], [16, 8], 12, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 20
+[ , [15, 16], [15, 15], 12, [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 21
+[ , [15, 16], [15, 16], 12, [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 22
+[ , [15, 17], [15, 16], 12, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, [14, 16], 11],
+#V   n = 23
+[ , [15, 18], [15, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 24
+[ , [15, 19], [15, 17], [15, 16], [15, 16], [0, 14, "Bou"], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 25
+[ , [15, 20], [15, 18], [15, 17], [15, 16], 12, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 26
+[ , [15, 20], [15, 19], [15, 18], [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 27
+[ , [15, 21], [15, 20], [15, 19], [0, 17, "Bou"], [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 28
+[ , [15, 22], [15, 20], [15, 20], 12, 11, [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 29
+[ , [15, 23], [15, 21], [15, 20], 12, 11, 11, [16, 16], [15, 16], 11, 11, [16, 14], [14, 10], [16, 12], 11, 11, [16, 10], [14, 14], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 30
+[ , [15, 24], [15, 22], [15, 21], [15, 20], 11, 11, [16, 17], [16, 16], [15, 16], 11, 11, 12, 11, [16, 12], [14, 12], 11, 12, 11, [16, 8], 11, 11, 11, [0, 4, "BK"], 11, 11, 11, 11],
+#V   n = 31
+[ , [15, 24], [15, 23], [15, 22], [0, 20, "Bou"], [15, 20], 11, [16, 18], [16, 17], [16, 16], [15, 16], 11, 11, 11, [16, 12], 12, 11, 11, 11, [16, 8], [16, 8], 11, 11, 12, 11, 11, 11, 11, 11],
+#V   n = 32
+[ , [15, 25], [15, 24], [0, 22, "GH"], 12, 11, [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], 11, 11, [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 33
+[ , [15, 26], [15, 24], 12, 11, 11, 11, [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 34
+[ , [15, 27], [15, 25], [15, 24], 11, 11, 11, [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 35
+[ , [15, 28], [15, 26], [16, 24], [15, 24], 11, 11, [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 36
+[ , [15, 28], [15, 27], [16, 25], [16, 24], [15, 24], 11, [16, 22], [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 37
+[ , [15, 29], [15, 28], [16, 26], [16, 25], [16, 24], [15, 24], [16, 23], [16, 22], [16, 21], [16, 20], [15, 20], [16, 19], [14, 10], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 38
+[ , [15, 30], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], [15, 24], [16, 23], [16, 22], [16, 21], [16, 20], [15, 20], 12, 11, [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 39
+[ , [15, 31], [15, 29], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], [14, 6], [0, 22, "Gur"], [16, 22], [16, 21], [16, 20], 12, 11, 11, [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [0, 6, "LP"], 11, 11, 11, 11, 11, 11, 11],
+#V   n = 40
+[ , [15, 32], [15, 30], [16, 28], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, 11, [16, 17], [16, 16], [15, 16], [14, 16], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 12, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 41
+[ , [15, 32], [15, 31], [16, 29], [16, 28], [0, 27, "Da"], [16, 27], [16, 26], [14, 6], [16, 24], 11, 11, [16, 22], [14, 10], [16, 20], 11, 11, 11, [16, 17], [16, 16], 12, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 42
+[ , [15, 33], [15, 32], [16, 30], [16, 29], [16, 28], 11, [16, 27], 12, 11, [16, 24], 11, 11, 12, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, [0, 3, "EB4"], 11, 11, 11],
+#V   n = 43
+[ , [15, 34], [15, 32], [16, 31], [16, 30], [16, 29], [16, 28], 11, 12, 11, [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 44
+[ , [15, 35], [15, 32], [15, 32], [16, 31], [16, 30], [16, 29], [16, 28], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 45
+[ , [15, 36], [15, 33], [15, 32], [0, 31, "Liz"], [0, 30, "Da"], [16, 30], [16, 29], [16, 28], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 46
+[ , [15, 36], [15, 34], [15, 33], [15, 32], 11, 11, [16, 30], [14, 6], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 47
+[ , [15, 37], [15, 35], [15, 34], [14, 3], [15, 32], 11, 11, 12, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 48
+[ , [15, 38], [15, 36], [15, 35], 12, [16, 32], [15, 32], 11, 11, 11, [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [0, 8, "LP"], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 49
+[ , [15, 39], [15, 36], [15, 36], 12, [16, 33], [16, 32], [15, 32], 11, 11, [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 12, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 50
+[ , [15, 40], [15, 37], [15, 36], 12, [16, 34], [16, 33], [16, 32], [15, 32], 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 51
+[ , [15, 40], [15, 38], [0, 36, "LMH"], [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], [0, 31, "Gur"], [16, 31], [16, 30], [16, 29], [16, 28], [0, 27, "LP"], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 52
+[ , [15, 41], [15, 39], 12, 11, [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [0, 12, "LP"], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 53
+[ , [15, 42], [15, 40], 12, 11, [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 12, 11, [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 54
+[ , [15, 43], [15, 40], 12, 11, [16, 37], [16, 36], [0, 35, "Gur"], [0, 34, "Gur"], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 55
+[ , [15, 44], [15, 41], [15, 40], 11, [16, 38], [16, 37], [16, 36], 11, 11, [16, 34], [14, 8], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 56
+[ , [15, 44], [15, 42], [0, 40, "HLa"], [15, 40], [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 12, 11, [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 57
+[ , [15, 45], [15, 43], 12, 11, [15, 40], [16, 39], [0, 37, "Gur"], [14, 6], [16, 36], 11, 11, 11, 11, [16, 32], 11, [14, 12], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 10, "LP"], 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 58
+[ , [15, 46], [15, 44], 12, 11, [16, 40], [15, 40], 12, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 12, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 59
+[ , [15, 47], [15, 44], 12, 11, [16, 40], [16, 40], 12, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 60
+[ , [15, 48], [15, 45], [15, 44], 11, [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], [0, 23, "LP"], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, [0, 4, "LP"], 11, 11, 11, 11, 11],
+#V   n = 61
+[ , [15, 48], [15, 46], [15, 45], [15, 44], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], [0, 19, "LP"], [16, 19], [16, 18], [16, 17], [16, 16], [0, 15, "LP"], [0, 14, "LP"], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], [0, 6, "LP"], 11, 12, 11, 11, 11, 11, 11, 11],
+#V   n = 62
+[ , [15, 49], [15, 47], [15, 46], [14, 3], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [16, 19], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 63
+[ , [15, 50], [15, 48], [15, 47], 12, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [16, 19], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 64
+[ , [15, 51], [15, 48], [15, 48], 12, [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [0, 39, "BK"], 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 24], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [0, 18, "LP"], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 65
+[ , [15, 52], [15, 48], [15, 48], 12, [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, [16, 35], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 25], [16, 24], [16, 24], 11, [14, 26], [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 66
+[ , [15, 52], [15, 49], [15, 48], [15, 48], [16, 46], [16, 45], [16, 44], [0, 43, "Gur"], [16, 43], [16, 42], [16, 41], [16, 40], 11, [0, 38, "LP"], 11, 11, 11, 11, [0, 34, "LP"], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [0, 28, "LP"], [16, 28], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [0, 12, "Jo"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 67
+[ , [15, 53], [15, 50], [15, 49], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, [0, 42, "Gur"], [16, 42], [14, 8], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [0, 31, "LP"], 11, 11, 11, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 12, 11, [16, 12], 11, 11, 11, [0, 8, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 68
+[ , [15, 54], [15, 51], [15, 50], [16, 48], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 12, 11, [16, 40], 11, 11, [0, 37, "LP"], [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 69
+[ , [15, 55], [15, 52], [15, 51], [16, 49], [16, 48], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [0, 21, "LP"], [16, 21], [16, 20], 11, 11, [0, 17, "LP"], [16, 17], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 70
+[ , [15, 56], [15, 52], [15, 52], [16, 50], [16, 49], [16, 48], [15, 48], [0, 46, "Gur"], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [0, 20, "LP"], [16, 20], 11, 11, 11, [0, 16, "LP"], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 71
+[ , [15, 56], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, [0, 45, "LP"], [0, 44, "Gur"], [16, 44], 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [0, 33, "LP"], [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 72
+[ , [15, 57], [15, 54], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, [16, 44], 11, 11, [16, 41], [16, 40], [16, 40], 11, 11, 11, [0, 36, "LP"], [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, [0, 30, "LP"], [16, 30], [16, 29], [16, 28], [0, 27, "LP"], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 73
+[ , [15, 58], [15, 55], [15, 54], [16, 52], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, [0, 43, "LP"], 11, [16, 42], [16, 41], [16, 40], [0, 39, "LP"], 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 74
+[ , [15, 59], [15, 56], [15, 55], [16, 53], [16, 52], [0, 51, "BK"], [16, 51], [0, 49, "Gur"], [14, 6], [16, 48], 11, 11, 11, 11, 11, [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], [0, 14, "LP"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 75
+[ , [15, 60], [15, 56], [15, 56], [16, 54], [16, 53], [16, 52], 11, 12, 11, 11, [0, 47, "BK"], [0, 46, "Gur"], 11, 11, 11, 11, [0, 42, "LP"], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, [0, 19, "LP"], 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 12], [0, 10, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 76
+[ , [15, 60], [15, 57], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 77
+[ , [15, 61], [15, 58], [15, 57], [15, 56], [16, 55], [0, 53, "Gur"], [16, 53], [16, 52], 11, 11, 11, 11, 11, 11, [0, 45, "LP"], [16, 45], [16, 44], 11, 11, [0, 41, "LP"], [16, 41], [16, 40], 11, [0, 38, "LP"], 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [16, 33], [16, 32], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 78
+[ , [15, 62], [15, 59], [15, 58], [16, 56], [15, 56], 12, 11, [0, 52, "Gur"], [0, 51, "BK"], 11, 11, 11, [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "LP"], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 79
+[ , [15, 63], [15, 60], [15, 59], [16, 57], [16, 56], 12, 11, 11, 11, 11, [0, 50, "BK"], [0, 49, "BK"], [16, 49], [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "LP"], [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 80
+[ , [15, 64], [15, 60], [15, 60], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 81
+[ , [15, 64], [15, 61], [15, 60], [16, 59], [16, 58], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [0, 44, "LP"], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, [0, 21, "LP"], 11, 11, 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 82
+[ , [15, 65], [15, 62], [15, 61], [15, 60], [0, 58, "LP"], [16, 57], [16, 56], [0, 55, "Gur"], [0, 54, "BK"], 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, [0, 43, "LP"], 11, 11, 11, [0, 40, "LP"], [16, 40], 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, [0, 12, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 83
+[ , [15, 66], [15, 63], [15, 62], [16, 60], 12, [16, 58], [16, 57], [16, 56], 11, 11, [0, 53, "BK"], [0, 52, "LP"], [16, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [0, 34, "LP"], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [0, 28, "LP"], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, [0, 17, "LP"], [0, 16, "LP"], [16, 16], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 84
+[ , [15, 67], [15, 64], [15, 63], [16, 61], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, [0, 51, "LP"], [0, 50, "LP"], 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], [0, 31, "LP"], 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 24, "LP"], [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 85
+[ , [15, 68], [15, 64], [15, 64], [16, 62], [0, 60, "Gur"], [16, 60], [16, 59], [16, 58], [0, 56, "BK"], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 86
+[ , [15, 68], [15, 64], [15, 64], [0, 62, "Gur"], 12, [16, 60], [0, 59, "LP"], [0, 58, "Gur"], 12, 11, [16, 56], [0, 54, "LP"], 11, 11, 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 20, "LP"], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 64],  [...]
+#V   n = 87
+[ , [15, 69], [15, 65], [15, 64], 12, 11, [16, 61], [16, 60], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [0, 27, "LP"], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 88
+[ , [15, 70], [15, 66], [15, 64], [15, 64], 11, [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, [0, 42, "LP"], 11, 11, 11, [0, 39, "LP"], 11, 11, 11, [0, 36, "LP"], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, [0, 30, "LP"], 11, 11, 11, 11, 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 89
+[ , [15, 71], [15, 67], [15, 65], [15, 64], [15, 64], [0, 62, "BK"], [16, 62], [16, 61], [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, [0, 33, "LP"], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 90
+[ , [15, 72], [15, 68], [15, 66], [15, 65], [15, 64], 12, 11, [0, 61, "Gur"], 12, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 26], [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, [0, 19, "LP"], 11, 11, 11, 11, [16, 16], [0, 14, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 91
+[ , [15, 72], [15, 68], [15, 67], [15, 66], [15, 65], [15, 64], 11, 11, 11, 11, 11, 12, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 92
+[ , [15, 73], [15, 69], [15, 68], [15, 67], [15, 66], [14, 4], [15, 64], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 93
+[ , [15, 74], [15, 70], [15, 68], [15, 68], [15, 67], 12, 11, [15, 64], [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, [0, 50, "LP"], 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "LP"], 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 94
+[ , [15, 75], [15, 71], [15, 69], [15, 68], [0, 67, "Gur"], 12, 11, [16, 64], 12, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 95
+[ , [15, 76], [15, 72], [15, 70], [15, 69], [15, 68], 11, 11, [16, 65], [16, 64], 11, 11, 12, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [0, 32, "LP"], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 96
+[ , [15, 76], [15, 72], [15, 71], [15, 70], [16, 68], [15, 68], 11, [16, 66], [0, 64, "Gur"], [16, 64], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
+#V   n = 97
+[ , [15, 77], [15, 73], [15, 72], [0, 70, "War"], [16, 69], [16, 68], [15, 68], [16, 67], 12, 11, [16, 64], [0, 62, "LP"], 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, [16, 8], 1 [...]
+#V   n = 98
+[ , [15, 78], [15, 74], [15, 72], 12, [16, 70], [16, 69], [16, 68], [0, 67, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "LP"], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 99
+[ , [15, 79], [15, 75], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, [0, 61, "LP"], [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11 [...]
+#V   n = 100
+[ , [15, 80], [15, 76], [15, 74], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], [0, 67, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, [0, 37, "LP"], 11, 11, 11, [0, 34, "LP"], 11, 11, [16, 32], [0, 31, "LP"], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 101
+[ , [15, 80], [15, 76], [15, 75], [15, 74], [16, 72], [0, 71, "LP"], [16, 71], [16, 70], 12, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 102
+[ , [15, 81], [15, 77], [15, 76], [0, 74, "Gur"], [16, 73], [16, 72], 11, [16, 71], 12, 11, 11, 12, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 103
+[ , [15, 82], [15, 78], [15, 76], 12, [16, 74], [16, 73], [16, 72], 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 104
+[ , [15, 83], [15, 79], [0, 76, "HLa"], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11,  [...]
+#V   n = 105
+[ , [15, 84], [15, 80], 12, 11, [15, 76], [0, 74, "BK"], [16, 74], [16, 73], 12, 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, 11, [0, 39, "LP"], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11 [...]
+#V   n = 106
+[ , [15, 84], [15, 80], 12, 11, [16, 76], 12, 11, [16, 74], 12, 11, 11, 12, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [0, 24, "sp"], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 107
+[ , [15, 85], [15, 80], 12, 11, [16, 77], [16, 76], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 108
+[ , [15, 86], [15, 81], [15, 80], 11, [16, 78], [14, 4], [16, 76], 11, [0, 73, "LP"], [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 109
+[ , [15, 87], [15, 82], [15, 80], [15, 80], [16, 79], 12, 11, [16, 76], 12, 11, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 110
+[ , [15, 88], [15, 83], [15, 81], [15, 80], [15, 80], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11 [...]
+#V   n = 111
+[ , [15, 88], [15, 84], [15, 82], [15, 81], [15, 80], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], [0, 66, "LP"], 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 1 [...]
+#V   n = 112
+[ , [15, 89], [15, 84], [15, 83], [15, 82], [16, 80], [15, 80], 11, 11, [0, 76, "LP"], [0, 75, "LP"], 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [0, 28, "Jo"], [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 113
+[ , [15, 90], [15, 85], [15, 84], [15, 83], [16, 81], [16, 80], [15, 80], 11, 12, 11, 11, [0, 74, "LP"], 12, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 114
+[ , [15, 91], [15, 86], [15, 84], [15, 84], [16, 82], [16, 81], [16, 80], [0, 79, "LP"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 115
+[ , [15, 92], [15, 87], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], [0, 26, "sp"], 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 116
+[ , [15, 92], [15, 88], [15, 86], [0, 84, "Ma"], [15, 84], [16, 83], [16, 82], [16, 81], [0, 79, "LP"], [0, 78, "LP"], 11, [0, 76, "LP"], [0, 75, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 68, "LP"], 11, 11, 11, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 12, 11, 11, [...]
+#V   n = 117
+[ , [15, 93], [15, 88], [15, 87], 12, [16, 84], [0, 83, "LP"], [0, 82, "LP"], [16, 82], 12, 11, 11, 12, 11, 11, [0, 74, "LP"], [0, 73, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 1 [...]
+#V   n = 118
+[ , [15, 94], [15, 89], [15, 88], 12, [16, 85], [16, 84], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 72, "LP"], [0, 71, "LP"], 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11 [...]
+#V   n = 119
+[ , [15, 95], [15, 90], [15, 88], 12, [16, 86], [16, 85], [16, 84], 11, 11, [0, 80, "LP"], 11, 11, [0, 77, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 120
+[ , [15, 96], [15, 91], [15, 89], [15, 88], [16, 87], [0, 85, "BK"], [16, 85], [16, 84], [0, 82, "BK"], 12, 11, [0, 79, "LP"], 12, 11, 11, [0, 75, "LP"], 11, 11, 11, 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, [0, 59, "LP"], 11, 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, [...]
+#V   n = 121
+[ , [15, 96], [15, 92], [15, 90], [16, 88], [15, 88], 12, 11, [16, 85], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 122
+[ , [15, 97], [15, 92], [15, 91], [16, 89], [16, 88], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 123
+[ , [15, 98], [15, 93], [15, 92], [16, 90], [16, 89], [16, 88], 11, 11, 11, [0, 83, "LP"], 11, 11, [0, 80, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 73, "LP"], [0, 72, "LP"], 11, 11, 11, 11, [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, [0, 28, "Jo"], 11, 11,  [...]
+#V   n = 124
+[ , [15, 99], [15, 94], [15, 92], [16, 91], [16, 90], [0, 88, "LP"], [16, 88], 11, [0, 85, "LP"], 12, 11, [0, 82, "LP"], 12, 11, 11, [0, 78, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 12, 11, 11, 11, 11, 11, [...]
+#V   n = 125
+[ , [15, 100], [15, 95], [15, 93], [15, 92], [16, 91], 12, 11, [0, 87, "LP"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 76, "LP"], 11, 11, 11, 11, 11, [0, 71, "LP"], 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 1 [...]
+#V   n = 126
+[ , [15, 100], [15, 96], [15, 94], [16, 92], [15, 92], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 127
+[ , [15, 101], [15, 96], [15, 95], [16, 93], [16, 92], 12, 11, 11, 11, [0, 86, "LP"], 11, 11, [0, 83, "LP"], 11, 11, [0, 80, "LP"], 11, 11, 11, 11, 11, [0, 75, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [0, 26, "sp"],  [...]
+#V   n = 128
+[ , [15, 102], [15, 96], [15, 96], [16, 94], [16, 93], [0, 91, "LP"], 11, 11, [0, 88, "LP"], 12, 11, [0, 85, "LP"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 129
+[ , [15, 103], [15, 97], [15, 96], [16, 95], [16, 94], 12, 11, [0, 90, "LP"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 79, "LP"], 11, 11, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, [0, 63, "LP"], 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 32], [16, [...]
+#V   n = 130
+[ , [15, 104], [15, 98], [15, 96], [15, 96], [16, 95], 12, 11, 11, 11, [0, 88, "LP"], 11, 11, [0, 85, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 77, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 131
+[ , [15, 104], [15, 99], [15, 97], [15, 96], [15, 96], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 83, "LP"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 73, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 132
+[ , [15, 105], [15, 100], [15, 98], [16, 96], [15, 96], [0, 94, "LP"], 11, 11, [0, 91, "LP"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 81, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32],  [...]
+#V   n = 133
+[ , [15, 106], [15, 100], [15, 99], [16, 97], [16, 96], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11,  [...]
+#V   n = 134
+[ , [15, 107], [15, 101], [15, 100], [16, 98], [16, 97], [16, 96], 11, 11, 12, [0, 91, "Da1"], 11, 11, [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 80, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [16 [...]
+#V   n = 135
+[ , [15, 108], [15, 102], [15, 100], [16, 99], [16, 98], [16, 97], [16, 96], 11, 11, 12, 11, 11, 12, 11, 11, [0, 86, "Da1"], [0, 85, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, [16, 37], [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [...]
+#V   n = 136
+[ , [15, 108], [15, 103], [15, 101], [15, 100], [16, 99], [0, 97, "DM3"], [14, 4], [16, 96], [0, 94, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 84, "Da1"], [0, 83, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16,  [...]
+#V   n = 137
+[ , [15, 109], [15, 104], [15, 102], [16, 100], [15, 100], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 82, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [ [...]
+#V   n = 138
+[ , [15, 110], [15, 104], [15, 103], [16, 101], [16, 100], 12, 11, 11, [16, 96], [0, 94, "Da1"], 11, 11, [0, 91, "Da1"], [0, 90, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36 [...]
+#V   n = 139
+[ , [15, 111], [15, 105], [15, 104], [16, 102], [16, 101], [16, 100], 11, 11, [16, 97], 12, 11, 11, 12, 11, 11, [0, 89, "Da1"], [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 12, 11,  [...]
+#V   n = 140
+[ , [15, 112], [15, 106], [15, 104], [16, 103], [16, 102], [0, 100, "DM3"], [0, 99, "Da1"], 11, [0, 97, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 87, "Da1"], [0, 86, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 40], [16, 40], 11, [16, 39], [16, 38],  [...]
+#V   n = 141
+[ , [15, 112], [15, 107], [15, 105], [15, 104], [16, 103], 12, 11, 11, 12, 11, 11, 11, [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 85, "Da1"], [0, 84, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 1 [...]
+#V   n = 142
+[ , [15, 113], [15, 108], [15, 106], [16, 104], [15, 104], 12, 11, 11, 11, [0, 97, "Da1"], 11, 11, 12, 11, 11, [0, 91, "Da1"], [0, 90, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [ [...]
+#V   n = 143
+[ , [15, 114], [15, 108], [15, 107], [16, 105], [16, 104], 12, 11, 11, [16, 100], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 89, "Da1"], [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 3 [...]
+#V   n = 144
+[ , [15, 115], [15, 109], [15, 108], [16, 106], [16, 105], [0, 103, "DM3"], [0, 102, "Da1"], 11, [0, 100, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, [...]
+#V   n = 145
+[ , [15, 116], [15, 110], [15, 108], [16, 107], [16, 106], 12, 11, 11, 12, [0, 99, "Da1"], 11, 11, [0, 96, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 87, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [0, 38, [...]
+#V   n = 146
+[ , [15, 116], [15, 111], [15, 109], [15, 108], [16, 107], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 94, "Da1"], [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, [16,  [...]
+#V   n = 147
+[ , [15, 117], [15, 112], [15, 110], [16, 108], [15, 108], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 92, "Da1"], [0, 91, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40 [...]
+#V   n = 148
+[ , [15, 118], [15, 112], [15, 111], [16, 109], [16, 108], 12, [0, 105, "Da1"], 11, [0, 103, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 90, "Da1"], [0, 89, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [ [...]
+#V   n = 149
+[ , [15, 119], [15, 112], [15, 112], [16, 110], [16, 109], [0, 107, "DM3"], 12, 11, 12, [0, 102, "Da1"], 11, 11, [0, 99, "Da1"], [0, 98, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43 [...]
+#V   n = 150
+[ , [15, 120], [15, 113], [15, 112], [16, 111], [16, 110], [16, 108], 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 97, "Da1"], [0, 96, "Da1"], [0, 95, "Da1"], 11, [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44] [...]
+#V   n = 151
+[ , [15, 120], [15, 114], [15, 112], [15, 112], [16, 111], [16, 109], [16, 108], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16,  [...]
+#V   n = 152
+[ , [15, 121], [15, 115], [15, 113], [15, 112], [15, 112], [16, 110], [0, 108, "Da1"], [16, 108], [0, 106, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 93, "Da1"], 11, [0, 92, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [ [...]
+#V   n = 153
+[ , [15, 122], [15, 116], [15, 114], [16, 112], [15, 112], [16, 111], 12, 11, 12, [0, 105, "Da1"], 11, 11, [0, 102, "Da1"], [0, 101, "Da1"], 11, 11, [0, 98, "Da1"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16 [...]
+#V   n = 154
+[ , [15, 123], [15, 116], [15, 115], [16, 113], [16, 112], [0, 111, "DM3"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 100, "Da1"], 12, 11, [0, 97, "Da1"], [0, 96, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [ [...]
+#V   n = 155
+[ , [15, 124], [15, 117], [15, 116], [16, 114], [16, 113], [16, 112], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, [...]
+#V   n = 156
+[ , [15, 124], [15, 118], [15, 116], [16, 115], [16, 114], [0, 112, "DM3"], [0, 111, "Da1"], 11, [0, 109, "Da1"], 12, 11, 11, 11, [0, 103, "Da1"], 11, 11, [0, 100, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48],  [...]
+#V   n = 157
+[ , [15, 125], [15, 119], [15, 117], [15, 116], [16, 115], 12, 11, 11, 12, [0, 108, "Da1"], 11, 11, [0, 105, "Da1"], 12, 11, [0, 102, "Da1"], 12, 11, 11, [0, 98, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 4 [...]
+#V   n = 158
+[ , [15, 126], [15, 120], [15, 118], [16, 116], [15, 116], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44 [...]
+#V   n = 159
+[ , [15, 127], [15, 120], [15, 119], [16, 117], [16, 116], 12, [0, 113, "Da1"], 11, [16, 112], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 97, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16,  [...]
+#V   n = 160
+[ , [15, 128], [15, 121], [15, 120], [16, 118], [16, 117], [0, 115, "DM3"], 12, 11, [0, 112, "Da1"], 12, 11, 11, 11, [0, 106, "Da1"], 11, 11, [0, 103, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [...]
+#V   n = 161
+[ , [15, 128], [15, 122], [15, 120], [16, 119], [16, 118], 12, 11, 11, 11, [0, 111, "Da1"], [0, 110, "Da1"], 11, [0, 108, "Da1"], 12, 11, 11, 12, 11, 11, [0, 101, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16,  [...]
+#V   n = 162
+[ , [15, 129], [15, 123], [15, 121], [15, 120], [16, 119], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 99, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47 [...]
+#V   n = 163
+[ , [15, 130], [15, 124], [15, 122], [16, 120], [15, 120], 12, [0, 116, "Da1"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [1 [...]
+#V   n = 164
+[ , [15, 131], [15, 124], [15, 123], [16, 121], [16, 120], [0, 118, "DM3"], 12, 11, [16, 116], [0, 113, "Da1"], 11, 11, [0, 110, "Da1"], [0, 109, "Da1"], [0, 108, "Da1"], 11, [0, 106, "Da1"], 11, 11, [0, 103, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [ [...]
+#V   n = 165
+[ , [15, 132], [15, 125], [15, 124], [16, 122], [16, 121], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47 [...]
+#V   n = 166
+[ , [15, 132], [15, 126], [15, 124], [16, 123], [16, 122], [16, 120], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 102, "Da1"], [0, 101, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, [...]
+#V   n = 167
+[ , [15, 133], [15, 127], [15, 125], [15, 124], [16, 123], [16, 121], [0, 119, "Da1"], 11, 11, 12, 11, 11, 11, [0, 111, "Da1"], 11, 11, [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [ [...]
+#V   n = 168
+[ , [15, 134], [15, 128], [15, 126], [16, 124], [15, 124], [0, 121, "DM3"], 12, 11, [0, 118, "Da1"], [0, 116, "Da1"], 11, 11, [0, 113, "Da1"], 12, 11, 11, 12, 11, 11, [0, 106, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 57], [16, 56], [16, 56], 11, 11, [16, 5 [...]
+#V   n = 169
+[ , [15, 135], [15, 128], [15, 127], [16, 125], [16, 124], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 104, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, [...]
+#V   n = 170
+[ , [15, 136], [15, 128], [15, 128], [16, 126], [16, 124], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16 [...]
+#V   n = 171
+[ , [15, 136], [15, 129], [15, 128], [16, 127], [16, 125], [16, 124], [0, 122, "Da1"], 11, 11, 12, 11, 11, 11, [0, 114, "Da1"], 11, 11, [0, 111, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [ [...]
+#V   n = 172
+[ , [15, 137], [15, 130], [15, 128], [15, 128], [16, 126], [0, 124, "DM3"], 12, 11, 11, [0, 119, "Da1"], [0, 118, "Da1"], 11, [0, 116, "Da1"], 12, 11, [0, 113, "Da1"], 12, 11, 11, [0, 109, "Da1"], [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11,  [...]
+#V   n = 173
+[ , [15, 138], [15, 131], [15, 128], [15, 128], [16, 127], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 106, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53],  [...]
+#V   n = 174
+[ , [15, 139], [15, 132], [15, 129], [15, 128], [15, 128], 12, 11, 11, 11, 12, 11, 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 5 [...]
+#V   n = 175
+[ , [15, 140], [15, 132], [15, 130], [15, 129], [15, 128], 12, [0, 125, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 114, "Da1"], [0, 113, "Da1"], 11, [0, 111, "Da1"], [0, 110, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, [...]
+#V   n = 176
+[ , [15, 140], [15, 133], [15, 131], [15, 130], [16, 128], [0, 127, "DM3"], 12, 11, [0, 124, "Da1"], [0, 122, "Da1"], [0, 121, "Da1"], 11, [0, 119, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 1 [...]
+#V   n = 177
+[ , [15, 141], [15, 134], [15, 132], [15, 131], [16, 129], [16, 128], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54],  [...]
+#V   n = 178
+[ , [15, 142], [15, 135], [15, 132], [15, 132], [16, 130], [16, 129], [16, 128], 11, 11, 12, 11, 11, 11, [0, 119, "Da1"], 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56 [...]
+#V   n = 179
+[ , [15, 143], [15, 136], [15, 133], [15, 132], [16, 131], [16, 130], [0, 128, "Da1"], [16, 128], 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 114, "Da1"], [0, 113, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58],  [...]
+#V   n = 180
+[ , [15, 144], [15, 136], [15, 134], [15, 133], [15, 132], [0, 130, "DM3"], 12, 11, [0, 127, "Da1"], [0, 125, "Da1"], [0, 124, "Da1"], 11, [0, 122, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 112, "Da1"], [0, 111, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 181
+[ , [15, 144], [15, 137], [15, 135], [15, 134], [16, 132], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, [...]
+#V   n = 182
+[ , [15, 145], [15, 138], [15, 136], [15, 135], [16, 133], [16, 132], [0, 130, "Da1"], 11, 11, 12, 11, 11, 11, [0, 122, "Da1"], 11, 11, [0, 119, "Da1"], [0, 118, "Da1"], 11, 11, [0, 115, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 64], [...]
+#V   n = 183
+[ , [15, 146], [15, 139], [15, 136], [15, 136], [16, 134], [16, 133], 12, 11, 11, 12, [0, 126, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, [0, 117, "Da1"], 12, 11, 11, [0, 113, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, 11, 11, 11, 11, [ [...]
+#V   n = 184
+[ , [15, 147], [15, 140], [15, 137], [15, 136], [16, 135], [0, 133, "DM3"], 12, 11, 11, [0, 128, "Da1"], 12, 11, [0, 125, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11 [...]
+#V   n = 185
+[ , [15, 148], [15, 140], [15, 138], [15, 137], [15, 136], 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [14, 60], 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11,  [...]
+#V   n = 186
+[ , [15, 148], [15, 141], [15, 139], [15, 138], [16, 136], 12, [0, 133, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 122, "Da1"], [0, 121, "Da1"], 11, 11, [0, 118, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64 [...]
+#V   n = 187
+[ , [15, 149], [15, 142], [15, 140], [0, 138, "Ma"], [16, 137], [16, 136], 12, 11, 11, 12, [0, 129, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, [0, 120, "Da1"], 12, 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65] [...]
+#V   n = 188
+[ , [15, 150], [15, 143], [15, 140], 12, [16, 138], [0, 136, "DM3"], 12, 11, 11, [0, 131, "Da1"], 12, 11, [0, 128, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, [...]
+#V   n = 189
+[ , [15, 151], [15, 144], [15, 141], [15, 140], [16, 139], 12, 11, 11, 11, 12, 11, 11, 11, [0, 127, "Da1"], 11, 11, [0, 124, "Da1"], [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 60], 11, 11, 11, 11, 11, 11, 11, [14, 66], [16, 68], 11, 11, [16, 66],  [...]
+#V   n = 190
+[ , [15, 152], [15, 144], [15, 142], [0, 140, "LaM"], [15, 140], 12, [0, 136, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 122, "Da1"], [0, 121, "Da1"], 11, 11, [0, 118, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16,  [...]
+#V   n = 191
+[ , [15, 152], [15, 144], [15, 143], 12, [16, 140], 12, 12, 11, [16, 136], 12, [0, 132, "Da1"], 11, [0, 130, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 120, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65],  [...]
+#V   n = 192
+[ , [15, 153], [15, 145], [15, 144], 12, [16, 141], [16, 140], 12, 11, 11, [0, 134, "Da1"], 12, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11 [...]
+#V   n = 193
+[ , [15, 154], [15, 146], [15, 144], 12, [16, 142], [16, 141], 12, 11, 11, 12, 11, 11, 11, [0, 130, "Da1"], 11, 11, [0, 127, "Da1"], 11, 11, 11, [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 6 [...]
+#V   n = 194
+[ , [15, 155], [15, 147], [15, 144], [15, 144], [16, 143], [16, 142], [0, 139, "Da1"], 11, 11, 12, [0, 134, "Da1"], 11, 11, 12, 11, 11, 12, 11, [0, 126, "Da1"], [0, 125, "Da1"], 12, 11, 11, [0, 121, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 195
+[ , [15, 156], [15, 148], [15, 145], [15, 144], [15, 144], [16, 143], 12, 11, 11, [0, 136, "Da1"], 12, 11, [0, 133, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11 [...]
+#V   n = 196
+[ , [15, 156], [15, 148], [15, 146], [16, 144], [15, 144], 13, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 128, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [14, 74] [...]
+#V   n = 197
+[ , [15, 157], [15, 149], [15, 147], [16, 145], [16, 144], [0, 143, "DM3"], 12, 11, 11, 12, 11, 11, 11, [0, 133, "Da1"], [0, 132, "Da1"], 11, [0, 130, "Da1"], 12, 11, 11, [0, 126, "Da1"], 11, 11, [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 198
+[ , [15, 158], [15, 150], [15, 148], [16, 146], [16, 145], [16, 144], [0, 142, "Da1"], 11, 11, 12, [0, 137, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], 11, 11, 11,  [...]
+#V   n = 199
+[ , [15, 159], [15, 151], [15, 148], [16, 147], [16, 146], [16, 145], 12, 11, 11, [0, 139, "Da1"], 12, 11, [0, 136, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, [14, 68], [16, 73], [16, 72], 11, 11,  [...]
+#V   n = 200
+[ , [15, 160], [15, 152], [15, 149], [15, 148], [16, 147], [16, 146], 12, 11, 11, 12, 11, 11, 11, [0, 135, "Da1"], 11, 11, 11, [0, 131, "Da1"], 11, 11, [0, 128, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16,  [...]
+#V   n = 201
+[ , [15, 160], [15, 152], [15, 150], [16, 148], [15, 148], [16, 147], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 133, "DM4"], 12, 11, [0, 130, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], 11, 11 [...]
+#V   n = 202
+[ , [15, 161], [15, 153], [15, 151], [16, 149], [16, 148], [15, 148], [0, 145, "DM4"], 11, [16, 144], 12, [0, 140, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, [16, 76], 11, 11, 11, [16, 73], [...]
+#V   n = 203
+[ , [15, 162], [15, 154], [15, 152], [16, 150], [16, 149], [16, 148], 12, 11, [0, 144, "DM4"], 12, 12, 11, [0, 139, "DM4"], 12, 11, 11, 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], [...]
+#V   n = 204
+[ , [15, 163], [15, 155], [15, 152], [16, 151], [16, 150], [16, 149], 12, 11, 11, 11, 12, 11, 11, [0, 138, "DM4"], [0, 137, "DM4"], 11, 11, 12, 11, 11, [0, 131, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16,  [...]
+#V   n = 205
+[ , [15, 164], [15, 156], [15, 153], [15, 152], [16, 151], [16, 150], 12, 11, 11, [0, 144, "DM4"], 12, 11, 11, 12, 11, 11, [0, 136, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11 [...]
+#V   n = 206
+[ , [15, 164], [15, 156], [15, 154], [16, 152], [15, 152], [16, 151], [0, 148, "DM4"], [16, 148], 11, 12, [0, 143, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], [...]
+#V   n = 207
+[ , [15, 165], [15, 157], [15, 155], [16, 153], [16, 152], [15, 152], 12, 11, [0, 147, "DM4"], 12, 12, 11, [0, 142, "DM4"], 12, 11, 11, 11, [0, 136, "DM4"], 11, 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11,  [...]
+#V   n = 208
+[ , [15, 166], [15, 158], [15, 156], [16, 154], [16, 153], [16, 152], 12, 11, 11, [0, 146, "DM4"], 12, 11, 11, [0, 141, "DM4"], [0, 140, "DM4"], 11, [0, 138, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11,  [...]
+#V   n = 209
+[ , [15, 167], [15, 159], [15, 156], [16, 155], [16, 154], [16, 153], [0, 150, "DM4"], 11, 11, 12, [0, 145, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77] [...]
+#V   n = 210
+[ , [15, 168], [15, 160], [15, 157], [15, 156], [16, 155], [16, 154], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11 [...]
+#V   n = 211
+[ , [15, 168], [15, 160], [15, 158], [16, 156], [15, 156], [16, 155], 12, 11, 11, [0, 148, "DM4"], 12, 11, 11, 12, 11, 11, 11, [0, 139, "DM4"], 11, 11, [0, 136, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 1 [...]
+#V   n = 212
+[ , [15, 169], [15, 160], [15, 159], [16, 157], [16, 156], [15, 156], 12, 11, 11, 12, 11, 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, [0, 141, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16,  [...]
+#V   n = 213
+[ , [15, 170], [15, 161], [15, 160], [16, 158], [16, 157], [16, 156], [0, 153, "DM4"], 11, 11, 12, [0, 148, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], [16, 80] [...]
+#V   n = 214
+[ , [15, 171], [15, 162], [15, 160], [16, 159], [16, 158], [16, 157], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 81], [16, 80], [16, 80], 11, 11, [...]
+#V   n = 215
+[ , [15, 172], [15, 163], [15, 160], [15, 160], [16, 159], [16, 158], 12, 11, 11, [0, 151, "DM4"], 12, 11, 11, 12, [0, 145, "DM4"], 11, 11, 12, 11, 11, [0, 139, "DM4"], [0, 138, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 216
+[ , [15, 172], [15, 164], [15, 161], [15, 160], [15, 160], [16, 159], 12, 11, 11, 12, 11, 11, 11, [0, 147, "DM4"], 12, 11, [0, 144, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81],  [...]
+#V   n = 217
+[ , [15, 173], [15, 164], [15, 162], [16, 160], [15, 160], [15, 160], [0, 156, "DM4"], 11, 11, 12, [0, 151, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 8 [...]
+#V   n = 218
+[ , [15, 174], [15, 165], [15, 163], [16, 161], [16, 160], [15, 160], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 144, "DM4"], 11, 11, [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11 [...]
+#V   n = 219
+[ , [15, 175], [15, 166], [15, 164], [16, 162], [16, 161], [16, 160], 12, 11, 11, [0, 154, "DM4"], 12, 11, 11, [0, 149, "DM4"], [0, 148, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84 [...]
+#V   n = 220
+[ , [15, 176], [15, 167], [15, 164], [16, 163], [16, 162], [16, 160], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 147, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [ [...]
+#V   n = 221
+[ , [15, 176], [15, 168], [15, 165], [15, 164], [16, 163], [16, 161], [0, 159, "DM4"], 11, 11, 12, [0, 154, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8 [...]
+#V   n = 222
+[ , [15, 177], [15, 168], [15, 166], [16, 164], [15, 164], [16, 162], 12, 11, 11, 12, 12, 11, [0, 153, "DM4"], 12, 11, 11, 11, [0, 147, "DM4"], 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 223
+[ , [15, 178], [15, 169], [15, 167], [16, 165], [16, 164], [16, 163], 12, 11, 11, [0, 157, "DM4"], 12, 11, 11, [0, 152, "DM4"], [0, 151, "DM4"], 11, [0, 149, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 224
+[ , [15, 179], [15, 170], [15, 168], [16, 166], [16, 165], [16, 164], 12, 11, 11, 12, [0, 156, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84 [...]
+#V   n = 225
+[ , [15, 180], [15, 171], [15, 168], [16, 167], [16, 166], [16, 164], [0, 162, "DM4"], 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 149, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 226
+[ , [15, 180], [15, 172], [15, 169], [15, 168], [16, 167], [16, 165], 12, 11, 11, 12, 12, 11, 11, 12, [0, 153, "DM4"], 11, 11, 12, 11, 11, [0, 147, "DM4"], [0, 146, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 227
+[ , [15, 181], [15, 172], [15, 170], [16, 168], [15, 168], [16, 166], 12, 11, 11, [0, 160, "DM4"], 12, 11, 11, [0, 155, "DM4"], 12, 11, [0, 152, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 228
+[ , [15, 182], [15, 173], [15, 171], [16, 169], [16, 168], [16, 167], 12, 11, 11, 12, [0, 159, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 229
+[ , [15, 183], [15, 174], [15, 172], [16, 170], [16, 169], [16, 168], [0, 165, "DM4"], 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 152, "DM4"], 11, 11, [0, 149, "DM4"], [0, 148, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 230
+[ , [15, 184], [15, 175], [15, 172], [16, 171], [16, 170], [16, 168], 12, 11, 11, 12, 12, 11, 11, 12, [0, 156, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 89], [16, 88 [...]
+#V   n = 231
+[ , [15, 184], [15, 176], [15, 173], [15, 172], [16, 171], [16, 169], 12, 11, 11, [0, 163, "DM4"], 12, 11, 11, [0, 158, "DM4"], 12, 11, [0, 155, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, [14, 34], 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 232
+[ , [15, 185], [15, 176], [15, 174], [16, 172], [15, 172], [16, 170], 12, 11, 11, 12, [0, 162, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16 [...]
+#V   n = 233
+[ , [15, 186], [15, 176], [15, 175], [16, 173], [16, 172], [16, 171], [0, 168, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 158, "DM4"], 11, 11, [0, 155, "DM4"], [0, 154, "DM4"], 11, [0, 152, "DM4"], [0, 151, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 234
+[ , [15, 187], [15, 177], [15, 176], [16, 174], [16, 173], [16, 172], 12, 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [1 [...]
+#V   n = 235
+[ , [15, 188], [15, 178], [15, 176], [16, 175], [16, 174], [16, 172], 12, 11, 11, [0, 166, "DM4"], 12, 11, 11, [0, 161, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 236
+[ , [15, 188], [15, 179], [15, 176], [15, 176], [16, 175], [16, 173], 12, 11, 11, 12, [0, 165, "DM4"], 11, 11, 12, 11, 11, 11, [0, 157, "DM4"], 11, 11, 11, [0, 153, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 237
+[ , [15, 189], [15, 180], [15, 177], [15, 176], [15, 176], [16, 174], [0, 171, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 161, "DM4"], 11, 11, 12, 11, 11, [0, 155, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 238
+[ , [15, 190], [15, 180], [15, 178], [15, 177], [15, 176], [16, 175], 12, 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11,  [...]
+#V   n = 239
+[ , [15, 191], [15, 181], [15, 179], [0, 177, "LaM"], [16, 176], [15, 176], 12, 11, 11, [0, 169, "DM4"], [0, 167, "DM4"], 11, 11, [0, 164, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 240
+[ , [15, 192], [15, 182], [15, 180], 12, [16, 177], [16, 176], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 160, "DM4"], [0, 159, "DM4"], 11, 11, [0, 156, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 241
+[ , [15, 192], [15, 183], [15, 180], 12, [16, 178], [16, 176], [0, 174, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 164, "DM4"], 11, 11, 12, 11, 11, [0, 158, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 242
+[ , [15, 193], [15, 184], [15, 181], [15, 180], [16, 179], [16, 177], 12, 11, 11, 12, 12, 11, 11, [0, 166, "DM4"], 12, 11, [0, 163, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 243
+[ , [15, 194], [15, 184], [15, 182], [0, 180, "Ha"], [15, 180], [16, 178], 12, 11, 11, [0, 172, "DM4"], [0, 170, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 158, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 244
+[ , [15, 195], [15, 185], [15, 183], 12, [16, 180], [16, 179], 12, 11, 11, 12, 12, 11, 11, 12, [0, 166, "DM4"], 11, 11, [0, 163, "DM4"], [0, 162, "DM4"], 11, [0, 160, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 245
+[ , [15, 196], [15, 186], [15, 184], 12, [16, 181], [16, 180], [0, 177, "DM4"], [0, 176, "DM4"], 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 246
+[ , [15, 196], [15, 187], [15, 184], 12, [16, 182], [16, 180], 12, 11, 11, 12, 12, 11, 11, [0, 169, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 247
+[ , [15, 197], [15, 188], [15, 185], [15, 184], [16, 183], [16, 181], 12, 11, 11, [0, 175, "DM4"], [0, 173, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 161, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 248
+[ , [15, 198], [15, 188], [15, 186], [0, 184, "Ha"], [15, 184], [16, 182], 12, 11, 11, 12, 12, 11, 11, 12, [0, 169, "DM4"], 11, 11, [0, 166, "DM4"], [0, 165, "DM4"], [0, 164, "DM4"], [0, 163, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 249
+[ , [15, 199], [15, 189], [15, 187], 12, [16, 184], [16, 183], [0, 180, "DM4"], 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [14, 34], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 250
+[ , [15, 200], [15, 190], [15, 188], 12, [16, 185], [16, 184], 12, 11, 11, 12, 12, 11, 11, [0, 172, "DM4"], 12, 11, 11, 12, 11, 11, 11, [0, 163, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 251
+[ , [15, 200], [15, 191], [15, 188], 12, [16, 186], [16, 184], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 [...]
+#V   n = 252
+[ , [15, 201], [15, 192], [15, 189], [15, 188], [16, 187], [16, 185], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 253
+[ , [15, 202], [15, 192], [15, 190], [15, 189], [15, 188], [16, 186], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
+#V   n = 254
+[ , [15, 203], [15, 192], [15, 191], [15, 190], [16, 188], [16, 187], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  [...]
+#V   n = 255
+[ , [15, 204], [15, 193], [15, 192], [15, 191], [16, 189], [16, 188], 12, 11, [16, 184], 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [...]
+#V   n = 256
+[ , [15, 204], [15, 194], [15, 192], [15, 192], [16, 190], [16, 188], 12, 11, [16, 185], [16, 184], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 [...]
diff --git a/tbl/codes2.g b/tbl/codes2.g
new file mode 100644
index 0000000..3bde814
--- /dev/null
+++ b/tbl/codes2.g
@@ -0,0 +1,5899 @@
+#############################################################################
+##
+#A  codes2.g 		        GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+#H  @(#)$Id: codes2.g,v 1.1.1.1 1998/03/19 17:31:36 lea Exp $
+##
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+##
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H  
+#H  $Log: codes2.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:36  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way. 
+#H  Lea Ruscio 19/3/98
+#H
+#H
+#H  Revision 1.2  1997/01/20 15:34:01  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H
+##
+YouWantThisCode := function(n, k, d, ref)
+	if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then
+		Add( GUAVA_TEMP_VAR, [n, k, d, ref] );
+	fi;
+	return [n, k] = GUAVA_TEMP_VAR;
+end;
+
+if YouWantThisCode(  18,   9,   6, "QR" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[QRCode, [17, 2]]]];
+fi;
+if YouWantThisCode(  23,   7,   9, "HP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  23,  14,   5, "Wa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  24,  12,   8, "QR" ) then
+	GUAVA_TEMP_VAR := [ExtendedBinaryGolayCode, []];
+fi;
+if YouWantThisCode(  27,  10,   9, "Pi2" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1],
+[0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1],
+[0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0],
+[0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0],
+[0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]
+], 2]];
+fi;
+if YouWantThisCode(  27,  14,   7, "Ka" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0]
+], 2]];
+fi;
+if YouWantThisCode(  32,  11,  12, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [31, 1, 11, 2]]]];
+fi;
+if YouWantThisCode(  32,  13,  10, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  32,  17,   8, "CS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,   8,  14, "HY2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,  23,   5, "Ch0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,  12,  12, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  35,   9,  14, "Pi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,   8,  16, "DHM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  14,  11, "Mo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  16,  10, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  37,   9,  15, "FB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  38,  22,   8, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,   7,  17, "vT3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,  10,  15, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0],
+[0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1],
+[0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  39,  12,  14, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,   7,  19, "vT1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,   8,  18, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  21,  10, "QR" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1],
+], 2]];
+fi;
+if YouWantThisCode(  43,  15,  13, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1100001011011111110110100001100000000000000")]], 43, GF(2)]];
+fi;
+if YouWantThisCode(  44,   6,  21, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,   8,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,  10,  18, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,  14,  16, "Bo0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,  16,  13, "DJ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  11,  17, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  47,  36,   5, "Ch0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,   8,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  10,  20, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  16,  15, "FB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  17,  14, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  24,  12, "QR" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1],
+], 2]];
+fi;
+if YouWantThisCode(  48,  31,   8, "RR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,  11,  19, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,  13,  17, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,  27,   9, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,   8,  24, "cy" ) then
+	GUAVA_TEMP_VAR := [BCHCode, [51, 0, 20, 2]];
+fi;
+if YouWantThisCode(  51,  17,  16, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100010000011100101111011111000110110000000000000000")]], 51, GF(2)]];
+fi;
+if YouWantThisCode(  51,  19,  14, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101101111101010010100100000101000000000000000000")]], 51, GF(2)]];
+fi;
+if YouWantThisCode(  51,  25,  11, "DJ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,  10,  21, "Pu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,  11,  21, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  55,  16,  19, "LC" ) then
+	GUAVA_TEMP_VAR := [PuncturedCode, [[GoppaCode, [Indeterminate(GF(2))^8+Z(2^6)^44*Indeterminate(GF(2))^7+Z(2^6)^60*Indeterminate(GF(2))^6+Z(2^6)^13*Indeterminate(GF(2))^5+Z(2^6)^29*Indeterminate(GF(2))^4+Z(2^3)^5*Indeterminate(GF(2))^3+Z(2^6)^61*Indeterminate(GF(2))^2+Z(2^6)^14*Indeterminate(GF(2))+Z(2^6)^47, [ 0*Z(2), Z(2)^0, Z(2^2)^2, Z(2^3), Z(2^3)^3, Z(2^3)^4, Z(2^3)^6, Z(2^6), Z(2^6)^2, Z(2^6)^3, Z(2^6)^4, Z(2^6)^5, Z(2^6)^6, Z(2^6)^7, Z(2^6)^8, Z(2^6)^10, Z(2^6)^11, Z(2^6)^12, Z(2^ [...]
+fi;
+if YouWantThisCode(  55,  21,  15, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1001011010010001100001001001010101100000000000000000000")]], 55, GF(2)]];
+fi;
+if YouWantThisCode(  55,  23,  13, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  55,  31,  10, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,  10,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,  17,  17, "MoY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  11,  23, "SRC" ) then
+	GUAVA_TEMP_VAR := [ConstructionBCode, [[BCHCode, [63,1,23,2]]]];
+fi;
+if YouWantThisCode(  58,   8,  26, "?" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  58,  13,  22, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  59,   7,  28, "?" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,   8,  27, "Sa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  10,  25, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  17,  20, "CDJ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  20,  17, "We" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode(  63,  11,  26, "BCH" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111110100010011110010101011101111011100011110000010010000000000")]], 63, GF(2)]];
+fi;
+if YouWantThisCode(  63,  19,  20, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  63,  28,  15, "B2x" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110010011101100011110101100010100011000000000000000000000000000")]], 63, GF(2)]];
+fi;
+if YouWantThisCode(  63,  46,   7, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110110010110000011000000000000000000000000000000000000000000000")]], 63, GF(2)]];
+fi;
+if YouWantThisCode(  64,  10,  28, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 27, 2]]]];
+fi;
+if YouWantThisCode(  64,  16,  24, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 23, 2]]]]; 
+fi;
+if YouWantThisCode(  64,  18,  22, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 21, 2]]]]; 
+fi;
+if YouWantThisCode(  64,  30,  14, "B2x" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 13, 2]]]]; 
+fi;
+if YouWantThisCode(  64,  36,  12, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 10, 2]]]]; 
+fi;
+if YouWantThisCode(  65,   8,  30, "DHM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  11,  27, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  13,  25, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11011101001110001001100001110000110010001110010111011000000000000")]], 65, GF(2)]];
+fi;
+if YouWantThisCode(  65,  24,  17, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  40,  10, "BCH" ) then
+	GUAVA_TEMP_VAR := [BCHCode, [65, 0, 5, 2]]; 
+
+fi;
+if YouWantThisCode(  65,  53,   5, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("10100111001010000000000000000000000000000000000000000000000000000")]], 65, GF(2)]];
+fi;
+if YouWantThisCode(  66,  18,  23, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  66,  21,  20, "CZ" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0],
+[1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  67,   8,  31, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  10,  29, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  39,  11, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  69,  19,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  50,   8, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  10,  31, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  11,  29, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  13,  28, "GB0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  16,  25, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  71,  28,  17, "SRC" ) then
+	GUAVA_TEMP_VAR := [ConstructionBCode, [[BestKnownLinearCode, [90, 45, 2]]]];
+fi;
+if YouWantThisCode(  72,  12,  29, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  17,  25, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  19,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  21,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  41,  12, "To" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  47,   9, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  11,  31, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  27,  20, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1101000101011101000010000100110110100110101111100000000000000000000000000")]], 73, GF(2)]];
+fi;
+if YouWantThisCode(  73,  36,  16, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1010001011101110000100110010100011111100000000000000000000000000000000000")]], 73, GF(2)]];
+fi;
+if YouWantThisCode(  73,  38,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,   8,  34, "?" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  16,  27, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  74,  18,  25, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  43,  11, "To" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,   7,  36, "?" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  12,  31, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  13,  30, "To2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  21,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  23,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  39,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,   8,  35, "Sa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,   9,  34, "Bo0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  17,  27, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  28,  20, "cyx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  77,  51,   9, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  10,  34, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  13,  32, "To" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  16,  29, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  18,  27, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  23,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  25,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  46,  11, "ZL" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  79,   9,  36, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  10,  35, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  14,  32, "Pi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  40,  16, "QR" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1]
+], GF(2)]];
+fi;
+if YouWantThisCode(  81,   8,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  20,  26, "CZ" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0],
+[0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0],
+[0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1],
+[0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1],
+[0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  81,  25,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  27,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  31,  20, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  42,  14, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  68,   6, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  16,  31, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  17,  29, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,   8,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  10,  38, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  11,  36, "GB0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  21,  27, "We" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode(  84,  27,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  29,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  13,  34, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  22,  26, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  12,  36, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  18,  29, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  10,  40, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  13,  35, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  29,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  31,  22, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110111010110101000010000101010010001010010101111011110101000000000000000000000000000000")]], 87, GF(2)]];
+fi;
+if YouWantThisCode(  87,  36,  20, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,   8,  41, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  15,  34, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  17,  32, "cyx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  89,  11,  40, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("10010001001111111000011000000110100001011001110111101011001011010111100001010110000000000")]], 89, GF(2)]];	
+fi;
+if YouWantThisCode(  89,  18,  31, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  23,  28, "HS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  24,  25, "MoY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  56,  11, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11010111110010000100001011010001110000000000000000000000000000000000000000000000000000000")]], 89, GF(2)]];
+fi;
+if YouWantThisCode(  89,  69,   8, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  15,  35, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  31,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  32,  21, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  45,  18, "QR" ) then
+# CJ, QRCode function is not used since GUAVA complained that finite field of order larger
+# than 2^16 cannot be evaluated
+# GeneratorPolCode function is used instead, however, the execution seems to take ages.
+	GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("10110101001101111011111111101111011001010110100000000000000000000000000000000000000000000")]], 89, GF(2)]]]];
+fi;
+if YouWantThisCode(  91,  12,  40, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  16,  33, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  51,  14, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1011101100011011000111111010110110111100100000000000000000000000000000000000000000000000000")]], 91, GF(2)]];
+fi;
+if YouWantThisCode(  91,  64,   9, "Hg" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,   7,  45, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,   8,  44, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  46,  16, "AGP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  10,  42, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  26,  26, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  33,  22, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101001010111001000001110110010101101101000100011001001001000100000000000000000000000000000000")]], 93, GF(2)]];
+fi;
+if YouWantThisCode(  94,  24,  28, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  48,  15, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  13,  40, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  23,  31, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  25,  27, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  33,  23, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  54,  14, "cyx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode(  96,   8,  46, "vT1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  10,  44, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  15,  38, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  16,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  35,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  75,   8, "Sh1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  11,  42, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  15,  39, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,   8,  48, "DHM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  11,  43, "GB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  20,  34, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  31,  25, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  35,  24, "To" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  65,  11, "Roe" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  13,  41, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  39,  21, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  18,  37, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  60,  13, "Roe" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  26,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0],
+[0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1],
+[0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1],
+[0,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0],
+[0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1],
+[0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0],
+[0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 102,  27,  30, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1],
+[0,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0],
+[0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0],
+[0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0],
+[0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 102,  37,  24, "QC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  11,  46, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  15,  41, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,   7,  51, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  17,  40, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  52,  20, "QR" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 105,   8,  50, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  19,  38, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  21,  36, "We" ) then
+GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 105,  23,  33, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  35,  26, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  39,  24, "QC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  43,  21, "HS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  57,  15, "Roe" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  11,  48, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  54,  19, "Ka" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0]
+], 2]];
+
+fi;
+if YouWantThisCode( 108,   8,  52, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  12,  46, "GB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  16,  41, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  24,  34, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  28,  32, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  30,  30, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  32,  28, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  36,  26, "BJK" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  10,  50, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  23,  35, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  20,  40, "Pi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  26,  34, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  37,  26, "BJK" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,   8,  54, "vT1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  10,  52, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  13,  48, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  16,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  24,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  45,  24, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  11,  50, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  18,  42, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  22,  38, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  38,  27, "BHJ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,   8,  56, "DHM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  26,  36, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  11,  52, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  12,  50, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  14,  48, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  16,  45, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  20,  43, "HS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  36,  32, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100101010011111111011010010100010011110010101101010000010001001001011110100000110100000000000000000000000000000000000")]], 117, GF(2)]];	
+fi;
+if YouWantThisCode( 117,  42,  26, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111100001100100000100010001011101011100010000011010010010000001011001111111100000000000000000000000000000000000000000")]], 117, GF(2)]];	
+fi;
+if YouWantThisCode( 118,  22,  42, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  24,  40, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  26,  38, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  28,  36, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  11,  54, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  12,  52, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,   8,  58, "Bo0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  16,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  37,  32, "cyx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 123,   9,  58, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  10,  57, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  16,  49, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,   9,  60, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  10,  59, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  30,  37, "MoY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  36,  35, "cy" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000110011101111110110110111110101110100100101111110110111011010001100110001101010100011010100000000000000000000000000000000000")]], 127, GF(2)]];
+fi;
+if YouWantThisCode( 127,  43,  31, "BCH" ) then
+    GUAVA_TEMP_VAR := [BCHCode, [127, 1, 28, 2]];
+fi;
+if YouWantThisCode( 128,  15,  56, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 55, 2]]]];
+fi;
+if YouWantThisCode( 128,  16,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  22,  48, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 47, 2]]]];
+fi;
+if YouWantThisCode( 128,  29,  44, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 43, 2]]]];
+fi;
+if YouWantThisCode( 128,  50,  28, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 27, 2]]]];
+fi;
+if YouWantThisCode( 128,  64,  22, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 21, 2]]]];
+fi;
+if YouWantThisCode( 128,  71,  20, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 19, 2]]]];
+fi;
+if YouWantThisCode( 128,  79,  15, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  93,  11, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128, 107,   7, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  11,  58, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  45,  29, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111010010101001001010111101001100110001111111110001100110010111101010010010101001011100000000000000000000000000000000000000000000")]], 129, GF(2)]];
+fi;
+if YouWantThisCode( 129,  72,  18, "BCH" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101001111111011110111110000011000001111101111011111110010100000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]];
+fi;
+if YouWantThisCode( 129,  87,  13, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101111111000001001110010000011111110101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]];
+fi;
+if YouWantThisCode( 129, 100,  10, "BCH" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110100110100100001001011001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]];
+fi;
+if YouWantThisCode( 129, 114,   6, "BCH" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100000111100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]];	
+fi;
+if YouWantThisCode( 130,   9,  62, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  23,  47, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  51,  27, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  72,  19, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  10,  61, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  11,  60, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  16,  53, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  17,  52, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  20,  49, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  30,  39, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  32,  37, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  37,  33, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  44,  32, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,   9,  64, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,   8,  65, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  10,  63, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  15,  57, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  22,  49, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  26,  47, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  29,  45, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  37,  35, "Vx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  50,  29, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  54,  27, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  57,  25, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  71,  21, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  75,  19, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  78,  17, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  85,  15, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  92,  13, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135,  99,  11, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 135, 106,   9, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 136,  16,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  17,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 136,  20,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  30,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  32,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  39,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  47,  32, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  68,  24, "RS" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 137,  11,  61, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,   7,  68, "vT3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,   8,  67, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 139,  15,  59, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 139,  17,  55, "BEx" ) then
+GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 139,  19,  53, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,]
+], 2]];
+fi;
+if YouWantThisCode( 139,  22,  51, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 139,  29,  47, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 139,  30,  43, "Vx" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 139,  39,  35, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  57,  27, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 139,  78,  19, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 140,   9,  66, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  11,  63, "GB6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  50,  32, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  69,  24, "Kol" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111000001101011100010111010000000110011111110000010001101101111110000001100000000000000000000000000000000000000000000000000000000000000000000")]], 141, GF(2)]];	
+fi;
+if YouWantThisCode( 142,   7,  70, "vT3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  10,  65, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  35,  40, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
+[0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1],
+[0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 142,  36,  38, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1]
+], 2]];
+fi;
+if YouWantThisCode( 142,  58,  27, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  63,  25, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  70,  23, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  74,  21, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  79,  19, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  84,  17, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  91,  15, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  98,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142, 105,  11, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142, 112,   9, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,   8,  69, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 143,  13,  63, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]
+], 2]];	
+fi;
+if YouWantThisCode( 143,  15,  61, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 143,  22,  53, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 143,  25,  50, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  43,  34, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,   9,  68, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  16,  57, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  23,  52, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  30,  45, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  40,  36, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  59,  27, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  71,  23, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  80,  19, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,   7,  72, "HvT" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  32,  44, "CLC" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1100000011010111110111100111100000111000100111010001000000000010001011100100011100000111100111101111101011000000110000000000000000000000000000000")]], 145, GF(2)]];
+fi;
+if YouWantThisCode( 146,   8,  71, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 146,  10,  68, "Ja" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  15,  63, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 146,  22,  55, "X" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1]
+], 2]];
+
+fi;
+if YouWantThisCode( 146,  28,  49, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  36,  40, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1],
+[0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 146,  38,  38, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  77,  21, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  81,  19, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,   9,  70, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  11,  66, "GB6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  25,  52, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  23,  53, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  29,  49, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  34,  41, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  43,  36, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  78,  21, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,   7,  73, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  69,  25, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  90,  17, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  97,  15, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149, 111,  11, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,   9,  72, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  10,  70, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  11,  68, "GB6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  12,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  16,  62, "CZ2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  28,  51, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  50,  33, "BHJ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,   8,  73, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  13,  65, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  23,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  24,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  34,  43, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  36,  41, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  45,  36, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1110010001011000110111010011011001110001100110100000011001001101001000010010100100011001100011111000111111100000000000000000000000000000000000000000000")]], 151, GF(2)]];	
+fi;
+if YouWantThisCode( 151,  61,  31, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010001010001110111001110100010101100100000011110100100100001011001000000111001101010011000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]];
+fi;
+if YouWantThisCode( 151,  64,  27, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  76,  23, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010011100111010110010011001101100011101000111000011000010010000100011111000000000000000000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]];
+fi;
+if YouWantThisCode( 151,  85,  19, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151, 106,  13, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1111100110101110011100000110110011110011011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]];
+fi;
+if YouWantThisCode( 151, 136,   5, "GB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,   7,  75, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  29,  51, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  31,  48, "Dup" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("1010010000110011110010101011111101011010110000000001010011011111111101000000110111001110000110011101101001101010101001101000000000000000000000000000000")]], 151, GF(2)]]]];	
+fi;
+if YouWantThisCode( 152,  41,  40, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  43,  38, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  79,  22, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  10,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  12,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  14,  65, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  16,  64, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  18,  62, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  21,  57, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  25,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  32,  46, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,   8,  75, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  24,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  36,  43, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  70,  26, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  80,  22, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  13,  67, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  15,  65, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  18,  63, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  19,  62, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  22,  57, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  26,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  48,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  52,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  77,  23, "TTH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,1,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 155, 133,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,   9,  74, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  11,  72, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  12,  70, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  25,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  30,  49, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  32,  48, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  39,  42, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  43,  40, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  45,  38, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  68,  27, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  72,  25, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  96,  17, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156, 103,  15, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156, 110,  13, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  14,  67, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  21,  59, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  27,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  62,  31, "TTH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 158,  26,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  84,  21, "KSH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,   8,  78, "BDH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,   9,  76, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  12,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  13,  69, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  15,  67, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  22,  59, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  28,  53, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  33,  46, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  19,  64, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  23,  57, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  40,  44, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  42,  42, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  45,  40, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  48,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  52,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  56,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  63,  31, "TTH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 160,  65,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  69,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  14,  69, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  27,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  29,  53, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  30,  51, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  35,  45, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,   8,  80, "BDH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,   9,  78, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  10,  76, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  11,  74, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  13,  71, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  16,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  33,  47, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  41,  44, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  43,  42, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  76,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  81,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162, 139,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  15,  69, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163, 102,  17, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163, 109,  15, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  14,  71, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  23,  59, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  24,  58, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  29,  55, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  32,  49, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,   9,  80, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  10,  78, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  11,  76, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  12,  74, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  16,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  20,  64, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  43,  44, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  44,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  48,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  52,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  56,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  65,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  69,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  15,  71, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  18,  66, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  25,  58, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  61,  34, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,   8,  81, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  21,  64, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  26,  57, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167, 136,   9, "Hg" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  10,  80, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  11,  77, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  12,  76, "GB6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  17,  68, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  19,  66, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  22,  62, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  24,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  32,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  57,  36, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  70,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  76,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  81,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  86,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,   8,  83, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  16,  72, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,0],
+[0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0],
+[1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0],
+[0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1],
+[0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0],
+[0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 170,  20,  66, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0],
+[0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0],
+[1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0],
+[0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1],
+[0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0],
+[0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 170,  22,  63, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  25,  60, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  33,  52, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 170,  36,  50, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 170, 108,  17, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,   9,  81, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  14,  74, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  19,  68, "GG1" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101011011110000001110011011111001101110110100110100100100110011010111100010001111010110011001001001011001011011101100111110110011100000011110110101011000000000000000000")]], 171, GF(2)]];
+fi;
+if YouWantThisCode( 171,  26,  59, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  38,  48, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111100100101011010010101101110001010100100011110001101100101111111001111111010011011000111100010010101000111011010100101101010010011110000000000000000000000000000000000000")]], 171, GF(2)]];
+fi;
+if YouWantThisCode( 171,  60,  35, "TTH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 172,  11,  80, "Ja" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  12,  78, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  24,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  28,  58, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  32,  53, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  43,  45, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  48,  41, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  52,  39, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  56,  37, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  18,  70, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  37,  50, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  61,  35, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,   8,  85, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  10,  82, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  14,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  16,  74, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  29,  58, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  65,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  72,  31, "TTH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0],
+[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0],
+[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1],
+[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0],
+[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1]
+], 2]];
+fi;
+if YouWantThisCode( 174,  81,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  86,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  91,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,   9,  84, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  12,  80, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  20,  68, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  24,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  28,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  32,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  36,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  40,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  47,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,   8,  87, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,   9,  85, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  10,  84, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  11,  82, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  14,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  16,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  19,  69, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  29,  60, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  33,  56, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0],
+[0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1]
+], 2]];
+fi;
+if YouWantThisCode( 179,  40,  50, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  42,  47, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  48,  44, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,   9,  87, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  11,  84, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  12,  82, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  14,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  16,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  18,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  20,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  21,  68, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  24,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  28,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  32,  57, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  52,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  56,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  60,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  65,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  70,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  75,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  81,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  86,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  91,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  10,  86, "Zwa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  27,  64, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
+[0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0],
+[0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1]
+], 2]];
+fi;
+if YouWantThisCode( 182,  36,  56, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
+[0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0]
+], 2]];
+fi;
+if YouWantThisCode( 183,   8,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  11,  86, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  12,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  14,  82, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  16,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  40,  52, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  47,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  10,  88, "Zwa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  20,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  24,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  28,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  32,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  37,  56, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  46,  48, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  52,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  56,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  60,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,   9,  90, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  11,  88, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  12,  86, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  14,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  16,  82, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  39,  54, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  42,  52, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  49,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  70,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  75,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  86,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  91,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  96,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,   8,  93, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  18,  77, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  20,  73, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  21,  72, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  24,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  25,  68, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  28,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  32,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  33,  60, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  36,  57, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  40,  53, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,   9,  92, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  11,  90, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  12,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  14,  86, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  16,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  30,  64, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  39,  56, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  43,  52, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  52,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  56,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  64,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  69,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 116,  21, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 124,  19, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 128,  17, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 136,  15, "Su" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 144,  13, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 152,  11, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  11,  92, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  14,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  16,  86, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  20,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  24,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  28,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  32,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  36,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  40,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  45,  52, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  65,  40, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  70,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  75,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  80,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  86,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  91,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  96,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192, 101,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,   9,  94, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  18,  80, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,   9,  95, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  11,  93, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  12,  89, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  16,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+# This lower-bound of 57 on the following code is probably a mistake.
+# I think the codes contributed by "Dup" are binary cyclic codes.
+# There are 1365 inequivalent (with the respect to the definition given
+# in Berlekamp's book) [195,41] cyclic codes. I've computed all the
+# minimum distance of these codes and the highest I've found was 56.
+# CJ
+if YouWantThisCode( 195,  41,  57, "Dup" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+# Similarly, there does not exists cyclic code with this parameters
+# [195, 42, 56]. There are 1365 inequivalent [195, 42] cyclic codes and
+# the minimum distance of all codes is < 56. I'm pretty sure the codes
+# contributed by "Dup" is cyclic.
+# CJ
+if YouWantThisCode( 195,  42,  56, "Dup" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  53,  49, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110010000000001001010001101110001110010111100110100100010110100100000010100100010011011110011110100010101100101010110101111111011110110010000110000000000000000000000000000000000000000000000000000")]], 195, GF(2)]];
+fi;
+if YouWantThisCode( 195,  55,  47, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111011000110100010010001010001110010111010011010010011100011100001101100000110010110101001011010111101000010000101001110111010000100011010111000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]];
+fi;
+if YouWantThisCode( 195,  61,  43, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110100101101000011000011111100100111000110010111001100011011011011101101101000100101010110111110010001001100110101000111001010010110111000000000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]];
+fi;
+if YouWantThisCode( 195,  65,  42, "MMT" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101110101111010100010110000000100111111001011111011100111101100001101110011011111110010010010011101011110100011100000100000111000110000000000000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]];
+fi;
+if YouWantThisCode( 196,  20,  77, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  21,  76, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  24,  73, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  25,  72, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  28,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  29,  68, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  32,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  33,  64, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  36,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  37,  60, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  44,  53, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  56,  45, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,   8,  97, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  11,  95, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  14,  89, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  70,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  75,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  80,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  91,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  96,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198, 101,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  12,  91, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  86,  34, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  18,  81, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  20,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  24,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  28,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  32,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  36,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  40,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  44,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  48,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  62,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  66,  41, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  81,  36, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  97,  29, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,   8,  99, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,   9,  97, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  14,  91, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  15,  90, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  16,  89, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  18,  83, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  42,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  51,  51, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  19,  81, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  13,  94, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  21,  80, "Sab" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  41,  60, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1101000100100001000000001001011011111100100011010001110100110101011011111001101111111110110011111011010101100101110001011000100111111011010010000000010000100100010110000000000000000000000000000000000000000")]], 205, GF(2)]];	
+fi;
+if YouWantThisCode( 205,  45,  55, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  56,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  60,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,   9,  99, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  15,  92, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  18,  85, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  52,  51, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  75,  39, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  96,  31, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206, 101,  29, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,   8, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  11,  98, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  12,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  14,  94, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  16,  91, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  49,  54, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  86,  35, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  91,  33, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 108,  27, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 116,  25, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 124,  23, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  20,  81, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  28,  73, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  32,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  36,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  40,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  44,  57, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  97,  31, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  18,  87, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  24,  78, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,   9, 101, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  11, 100, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  14,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  15,  94, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  19,  84, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  23,  80, "DaH" ) then
+	GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[
+[1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
+[0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1],
+[0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0],
+[0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1],
+[0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0],
+[0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0],
+[0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0],
+[0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0],
+[0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1],
+[0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0],
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0]
+], 2]];
+fi;
+if YouWantThisCode( 207,  50,  54, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  56,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  60,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  64,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  73,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  16,  93, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  20,  83, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  24,  79, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  28,  75, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  32,  71, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  36,  67, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  40,  63, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  44,  59, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  21,  82, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  45,  57, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 106,  29, "Ch" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,   8, 105, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,   9, 103, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  12,  98, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  15,  96, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  11, 102, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  13,  97, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  16,  95, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  17,  89, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  19,  86, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  51,  55, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  21,  84, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  41,  63, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  52,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  56,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  60,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  64,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  68,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  77,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   8, 107, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  12, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  14,  97, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  46,  59, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  96,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216, 101,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  11, 104, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  17,  91, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  19,  88, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  24,  82, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  28,  78, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  32,  74, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  36,  70, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+# This lower-bound of 68 on the following code is probably a mistake.
+# I think the codes contributed by "Dup" are binary cyclic codes.
+# There are 990 inequivalent (with the respect to the definition given
+# in Berlekamp's book) [217,40] cyclic codes. I've computed all the
+# minimum distance of these codes and the highest I've found was 64.
+# CJ
+if YouWantThisCode( 217,  40,  68, "Dup" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  44,  62, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  48,  58, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,   9, 106, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  21,  86, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  12, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   8, 109, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   9, 107, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  14,  99, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  20,  88, "CZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  24,  84, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  28,  80, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  32,  76, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  36,  72, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  44,  64, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  48,  60, "LLX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  52,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  56,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  60,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  64,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  68,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  72,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  11, 106, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  17,  93, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  12, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  21,  88, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  46,  62, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  51,  58, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222, 106,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  16,  97, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  38,  71, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010011011011000111110101110000101110010101000100001111111100001100011100011001111101000001001111110101011101001100111101010101100000010110011010100101111010001110100000101010011010110000000000000000000000000000000000000")]], 223, GF(2)]];
+fi;
+if YouWantThisCode( 223,  41,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  11, 108, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  14, 101, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  18,  91, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  20,  90, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,   9, 110, "Gu9" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  12, 106, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  13, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  17,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  52,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  56,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  60,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  64,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  68,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  72,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  21,  90, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  41,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  45,  63, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  49,  60, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,   9, 111, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  14, 103, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  16,  99, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  18,  93, "PD" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  11, 110, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  12, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  20,  92, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  32,  77, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  33,  76, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  36,  73, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  40,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  44,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  48,  61, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  54,  58, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  73,  48, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,   8, 113, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  13, 105, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  17,  97, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  22,  89, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  21,  92, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  69,  50, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  11, 112, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  12, 110, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  16, 101, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  20,  94, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  49,  61, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,   8, 115, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  17,  99, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  32,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  36,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  40,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  44,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  48,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  52,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  55,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  59,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  13, 107, "Gra" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  21,  94, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  30,  88, "MYI" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11110100111100101011000011001001101011011101010000101011001011101010110100010111101001001010010000101100011001100100001110111100001000011010101011011100010101000010111101001100001000101010100000111010010100000000000000000000000000000")]], 233, GF(2)]];
+fi;
+if YouWantThisCode( 234,  12, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  16, 103, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  20,  96, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  22,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  14, 105, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  23,  90, "B2x" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,   8, 117, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  17, 101, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  18,  99, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  21,  96, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  48,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  49,  64, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  59,  57, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  61,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  22,  94, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,   9, 116, "GB5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  14, 107, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  20,  99, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  11, 114, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  13, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  16, 105, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  17, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  22,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  48,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  52,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  59,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  61,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  64,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  18, 103, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  25,  93, "MYI" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1111101101100100100001101011100101010110000110111010101011010100011101111100110101000011010100111011101011011101101011101110010101100001010110011111011100010101101010101110110000110101010011101011000010010011011011111000000000000000000000000")]], 241, GF(2)]];	
+fi;
+if YouWantThisCode( 242,   9, 118, "Ja2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  17, 105, "PD" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  21, 100, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  12, 113, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  14, 109, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  16, 107, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,   8, 121, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  11, 116, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  20, 103, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  48,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  49,  68, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  52,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  53,  64, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  64,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,   9, 120, "JS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  10, 117, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  13, 113, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  21, 102, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  14, 111, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  16, 109, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  18, 107, "GG1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  22,  97, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  12, 115, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  10, 119, "EB2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  48,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  52,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  56,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  11, 118, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  13, 115, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  22,  99, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  11, 120, "GB6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  48,  73, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  49,  72, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  52,  69, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  53,  68, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  56,  65, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  14, 113, "GG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  25, 100, "Lun" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  26,  98, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100111110110010101101100001010000110100111101011010100001000000010101110011010010100011011100000000111100111001001001100001100001011101001101011101110100100100010010000001000001011000010111001011011110010011110110110010110001001010000000000000000000000000")]], 255, GF(2)]];
+fi;
+if YouWantThisCode( 255,  38,  90, "BCH" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100011101011011111110110110100111101010010011001110011111100000110010111101011110110110011100000011000001010110111011000100111011011011110100010100110001110100101111110001100110001000111110110110100110111110001101001010000000000000000000000000000000000000")]], 255, GF(2)]];
+fi;
+if YouWantThisCode( 255,  57,  65, "Gra" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111111010000001000101010101110100010001010001110110101111001101101000010111001011001010111000010101101100000000111110111100010001100111111010101001011000111011100111010100011100101101010100001101010100000000000000000000000000000000000000000000000000000000")]], 255, GF(2)]];
+fi;
+if YouWantThisCode( 255,  71,  61, "BCH" ) then
+	GUAVA_TEMP_VAR := [BCHCode, [255, 1, 59, 2]];
+fi;
+if YouWantThisCode( 255, 134,  34, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  13, 120, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 119, 2]]]];
+fi;
+if YouWantThisCode( 256,  21, 112, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 111, 2]]]];
+fi;
+if YouWantThisCode( 256,  22, 104, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  33,  96, "Rod" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("101001000101111011100000100010010000111101001001010000110101101111000110001011101110011110101011100110101111010111100111100010111001011100001011111011110010110011011101111101010110110000101001100000100111110110011001000010100000000000000000000000000000000")]], 255, GF(2)]]]];
+fi;
+if YouWantThisCode( 256,  37,  92, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 91, 2]]]];
+fi;
+if YouWantThisCode( 256,  45,  88, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 87, 2]]]];
+fi;
+if YouWantThisCode( 256,  47,  86, "XBC" ) then
+	GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 85, 2]]]];
+fi;
+if YouWantThisCode( 256,  48,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  52,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  56,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  63,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  73,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  79,  56, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 55, 2]]]];
+fi;
+if YouWantThisCode( 256,  87,  54, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 53, 2]]]];
+fi;
+if YouWantThisCode( 256,  91,  52, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 51, 2]]]];
+fi;
+if YouWantThisCode( 256,  99,  48, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 47, 2]]]];
+fi;
+if YouWantThisCode( 256, 107,  46, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 45, 2]]]];
+fi;
+if YouWantThisCode( 256, 115,  44, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 43, 2]]]];
+fi;
+if YouWantThisCode( 256, 123,  40, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 39, 2]]]];
+fi;
+if YouWantThisCode( 256, 131,  38, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 37, 2]]]];
+fi;
+if YouWantThisCode( 256, 139,  32, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 31, 2]]]];
+fi;
+if YouWantThisCode( 256, 147,  30, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 29, 2]]]];
+fi;
+if YouWantThisCode( 256, 155,  28, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 27, 2]]]];
+fi;
+if YouWantThisCode( 256, 163,  26, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 25, 2]]]];
+fi;
+if YouWantThisCode( 256, 171,  24, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 23, 2]]]];
+fi;
+if YouWantThisCode( 256, 179,  22, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 21, 2]]]];
+fi;
+if YouWantThisCode( 256, 187,  20, "XBC" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 19, 2]]]];
+fi;
+if YouWantThisCode( 256, 192,  17, "BCH" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [257, 1, 9,  2]]]];
+fi;
+if YouWantThisCode( 256, 200,  15, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 208,  13, "BCH" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 23, 2]]]];
+fi;
+if YouWantThisCode( 256, 216,  11, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 224,   9, "BCH" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [257, 0, 6, 2]]]];
+fi;
+if YouWantThisCode( 256, 232,   7, "Gp" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  11, 121, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  17, 113, "Dup" ) then
+	GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11110111110110100010011110100011110101100001110010111001010110011111000101101011101110001010111111110111011010110001000111000100011010110111011111111010100011101110101101000111110011010100111010011100001101011110001011110010001011011111011110000000000000000")]], 257, GF(2)]];
+fi;
+if YouWantThisCode( 257,  38,  91, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  46,  87, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  64,  63, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  74,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  80,  55, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  88,  53, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257,  92,  49, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 100,  47, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 108,  45, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 116,  41, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 124,  39, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 132,  35, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 140,  31, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 148,  29, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 156,  27, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 164,  25, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 172,  23, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 180,  21, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 188,  19, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 257, 241,   5, "GB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
diff --git a/tbl/codes3.g b/tbl/codes3.g
new file mode 100644
index 0000000..fb694fd
--- /dev/null
+++ b/tbl/codes3.g
@@ -0,0 +1,6793 @@
+#############################################################################
+##  
+#A  codes3.g                GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+#H  @(#)$Id: codes3.g,v 1.1.1.1 1998/03/19 17:31:39 lea Exp $
+##  
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+## 
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H 
+#H  $Log: codes3.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:39  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way.
+#H  Lea Ruscio 19/3/98
+#H
+#H 
+#H  Revision 1.2  1997/01/20 15:34:15  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H 
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H 
+##  
+YouWantThisCode := function(n, k, d, ref)
+	if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then
+		Add( GUAVA_TEMP_VAR, [n, k, d, ref] );
+	fi;
+	return [n, k] = GUAVA_TEMP_VAR;
+end;
+
+if YouWantThisCode(  12,   6,   6, "QR" ) then
+    GUAVA_TEMP_VAR := [ExtendedTernaryGolayCode,[]];
+fi;
+if YouWantThisCode(  14,   7,   6, "QR" ) then
+    GUAVA_TEMP_VAR := [ExtendedCode, [[QRCode, [13, 3]]]];
+fi;
+if YouWantThisCode(  14,   8,   5, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  15,   6,   7, "Li1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  16,   5,   9, "HN" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  23,   7,  12, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  24,  12,   9, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  25,  10,  10, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  27,  16,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,   8,  15, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,  14,   9, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,  20,   6, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  29,   5,  18, "vE0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  29,  16,   8, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,  10,  13, "GuB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  31,   7,  17, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  31,   9,  15, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  32,   4,  21, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,  10,  15, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,   5,  21, "vE0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,   8,  18, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,  22,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  35,   7,  19, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  35,  21,   8, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,   6,  21, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,   9,  18, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  18,  12, "Ple" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  37,   7,  20, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  38,   5,  24, "BB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  40,  10,  19, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  40,  12,  18, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  40,  20,  12, "Be" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  40,  24,   9, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  41,   8,  22, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  41,   9,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  41,  33,   5, "BCH" ) then
+	GUAVA_TEMP_VAR := [BCHCode, [41, 2, 3]];
+fi;
+if YouWantThisCode(  42,   7,  24, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  29,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  43,  25,   9, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  44,   6,  27, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  44,  11,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  44,  29,   8, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,   9,  24, "KP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,   7,  26, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  12,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  47,   5,  30, "vE1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  10,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  11,  22, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  24,  15, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,   5,  31, "BB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,   6,  30, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,   7,  28, "GuB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,   8,  27, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,  13,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,  14,  20, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,   7,  30, "CG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,  10,  27, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,  26,  15, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  53,  16,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  53,  17,  20, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  53,  39,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,   8,  30, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,   9,  28, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,  14,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,   6,  36, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,   7,  33, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,   8,  31, "Gu2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,  12,  27, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,  18,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,  50,   4, "Hi1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  15,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  16,  23, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  20,  20, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  58,  10,  30, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  59,  16,  24, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,   7,  36, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  14,  27, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  30,  18, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  61,   5,  39, "vE0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  61,  15,  26, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  61,  17,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  61,  21,  21, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  61,  41,  10, "Glo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  62,  11,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  62,  12,  30, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  62,  33,  13, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  63,   6,  39, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,   8,  37, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  32,  18, "Be" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  38,  12, "D1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,   5,  42, "HN" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,   7,  39, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,   9,  36, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  17,  27, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  66,  12,  33, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  66,  21,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,   6,  42, "Ha" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  16,  30, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  18,  27, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  23,  23, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  45,  11, "Glo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,   5,  45, "vEH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  11,  36, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   7,  42, "Gu2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   9,  39, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  23,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  71,  12,  36, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  71,  17,  30, "ASR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,   6,  45, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,   7,  43, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,   8,  42, "Gu2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  36,  18, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,   5,  48, "BB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  37,  18, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,   6,  48, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  38,  18, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  18,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  24,  30, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,   7,  51, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,   9,  48, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  11,  45, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  20,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  25,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  50,  14, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  56,  11, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  16,  42, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  66,   8, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  56,  12, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  19,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  20,  34, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  25,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  27,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  42,  21, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,   7,  54, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  13,  45, "BEx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  22,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  23,  31, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  50,  15, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  64,   9, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  70,   7, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  74,   6, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,   9,  50, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  11,  47, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  15,  44, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  46,  17, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  54,  14, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  55,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  60,  11, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  77,   5, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,   5,  57, "HHY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  18,  38, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  20,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  23,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  58,  12, "X6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  70,   8, "BE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  15,  45, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  16,  44, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  27,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  30,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  31,  25, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  44,  21, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  49,  16, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  63,  10, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  12,  47, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  23,  33, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  53,  15, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  56,  14, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  67,   9, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,   6,  57, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  14,  46, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  16,  45, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  20,  37, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  22,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  49,  17, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  50,  16, "X6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  60,  12, "X6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  63,  11, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  71,   8, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,   5,  60, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,   9,  54, "dB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  11,  51, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  12,  48, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  19,  38, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  24,  33, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,   7,  57, "X3a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  14,  47, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  15,  46, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  18,  42, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  30,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  33,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  55,  15, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  66,  10, "Ed2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  69,   9, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  76,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  51,  17, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  62,  12, "X6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  65,  11, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,   6,  60, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  14,  48, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  15,  47, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  23,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  53,  16, "X6" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  56,  15, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  12,  51, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  20,  40, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  83,   6, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,   7,  60, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,   8,  57, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  15,  48, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  16,  47, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  19,  41, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  36,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  48,  24, "ACG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  53,  17, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  11,  53, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  13,  51, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  21,  39, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  22,  38, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  68,  11, "Ed2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,   6,  63, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  16,  48, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  17,  45, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  19,  42, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  23,  37, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,   9,  57, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  11,  54, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  50,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  55,  17, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  59,  15, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  75,   9, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,   5,  66, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,   7,  63, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,   8,  60, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  10,  55, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  18,  45, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  24,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  36,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  54,  18, "D1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  58,  16, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  12,  53, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  15,  51, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  19,  43, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  50,  20, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  56,  17, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  49,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  10,  57, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  16,  51, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  34,  34, "Glo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  53,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  69,  14, "Glo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  90,   6, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,   5,  69, "Bel" ) then
+    GUAVA_TEMP_VAR := [BCHCode, [104,0,66,3]];
+fi;
+if YouWantThisCode( 104,   7,  66, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,   9,  60, "DGM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  11,  56, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  13,  54, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  18,  48, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  20,  43, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  24,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  27,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  35,  33, "Glo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  36,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  39,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  43,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  49,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,   8,  63, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  14,  53, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  19,  45, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  22,  42, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  23,  41, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  51,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  10,  59, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  14,  54, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  15,  53, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  17,  49, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,   7,  69, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,   9,  63, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  11,  58, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  12,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  16,  52, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  20,  45, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  27,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  30,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  36,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  39,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  46,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  49,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  52,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  56,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  57,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  61,  18, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  65,  16, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  71,  14, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  91,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  15,  54, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  24,  41, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  82,  10, "LX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,   8,  66, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  10,  62, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  21,  45, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  23,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  92,   7, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  16,  54, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  18,  51, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,   7,  72, "EB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  12,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  13,  58, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  14,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  19,  50, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  22,  45, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  24,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  25,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  27,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  30,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  33,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  36,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  39,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  42,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  46,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  49,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  52,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  55,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  59,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  71,  15, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  74,  14, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,   5,  75, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,   8,  68, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  23,  43, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  61,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  65,  18, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  80,  12, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,   6,  73, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  34,  35, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  37,  33, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  43,  30, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  47,  27, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  56,  22, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  72,  15, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  75,  14, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,   8,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  11,  63, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  24,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  25,  42, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  26,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  28,  40, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  31,  38, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  40,  32, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  44,  29, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  50,  26, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  51,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  53,  24, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  81,  12, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  23,  45, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  47,  28, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  25,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  44,  30, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  49,  27, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  22,  48, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  24,  45, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  27,  42, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  30,  40, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  33,  38, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  36,  36, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  39,  34, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  42,  32, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  46,  29, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  48,  28, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  52,  26, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  53,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  75,  15, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  80,  13, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  25,  44, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  26,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  34,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  40,  33, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,   6,  78, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,   7,  75, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  12,  66, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  28,  42, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  44,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  46,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  51,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  53,  26, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  57,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,   5,  81, "sim" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  10,  72, "dB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  15,  63, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  20,  57, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  23,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  24,  46, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  25,  45, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  26,  44, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  27,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  34,  38, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  40,  34, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  43,  32, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  48,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  50,  28, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  61,  23, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  66,  21, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  81,  14, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121, 116,   3, "Ham" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  22,  51, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  29,  42, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  32,  41, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  33,  39, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  36,  37, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  39,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  42,  33, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  56,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  67,  20, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  76,  17, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  92,  11, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122, 102,   8, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122, 112,   5, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  16,  63, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  21,  57, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  25,  46, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  26,  45, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  27,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  46,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,   6,  81, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,   8,  75, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  24,  48, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  29,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  36,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  39,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  42,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  54,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  56,  26, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  12,  68, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  26,  46, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  27,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  31,  42, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  33,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  35,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  38,  37, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  41,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  44,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  50,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  51,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  53,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  61,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  68,  21, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  79,  16, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  81,  15, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  97,  10, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,   9,  73, "GB1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  11,  72, "Br2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  13,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  25,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  29,  44, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  72,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  78,  17, "BE3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  91,  12, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126, 101,   9, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,   7,  81, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  12,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  15,  65, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  26,  47, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  27,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  31,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  34,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  66,  23, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  71,  20, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  76,  18, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  88,  13, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,   8,  78, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  24,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  29,  45, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  33,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  36,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  37,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  39,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  40,  37, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  42,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  43,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  45,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  49,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  57,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  61,  25, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  16,  65, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  26,  48, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  27,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  31,  44, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  35,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  47,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  67,  23, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  71,  21, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,   6,  84, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,   9,  76, "DGM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  10,  74, "DG4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  24,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  25,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  29,  46, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  33,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  54,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  57,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  61,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  65,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  69,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  81,  17, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  20,  63, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  27,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  31,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  84,  16, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  10,  75, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  15,  69, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  21,  60, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  23,  57, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  24,  52, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  25,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  26,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  29,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  33,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  36,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  37,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  39,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  42,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  45,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  46,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  52,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  69,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  80,  18, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,   7,  84, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,   8,  81, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  31,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  35,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  61,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  65,  25, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  74,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  76,  20, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,   6,  87, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  11,  75, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  16,  69, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  25,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  26,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  27,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  33,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  79,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,   9,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  13,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  21,  61, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  22,  60, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  24,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  30,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  31,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  58,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  65,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  69,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,   7,  86, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  25,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  26,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  27,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  29,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  33,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  34,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  36,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  37,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  39,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  42,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  45,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  48,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  49,  35, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  52,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  55,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  72,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  74,  22, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  86,  17, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  31,  48, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  32,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,   6,  90, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  11,  78, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  15,  71, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  18,  66, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  24,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  25,  54, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  26,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  27,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  28,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  29,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  78,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  31,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  70,  25, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  86,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  91,  16, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,   8,  87, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,   9,  82, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  15,  72, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  25,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  26,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  27,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  28,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  29,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  33,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  34,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  36,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  39,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  42,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  45,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  48,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  55,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  58,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  59,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  62,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  66,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  69,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  73,  24, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  82,  20, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  95,  15, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140, 111,  10, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,   7,  90, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  10,  81, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  16,  71, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  19,  66, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  20,  65, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  22,  63, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  23,  60, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  31,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  32,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  76,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  14,  73, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  18,  69, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  25,  56, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  26,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  29,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  63,  30, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  67,  28, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  79,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  86,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,   9,  84, "DGM" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  16,  72, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  28,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  31,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,   6,  93, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,   8,  90, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  13,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  15,  73, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  24,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  26,  56, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  27,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  33,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  34,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  36,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  39,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  42,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  45,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  48,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  51,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  55,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  58,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  61,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  66,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  70,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144, 130,   6, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  14,  75, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  25,  58, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  29,  54, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  31,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  32,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  63,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  73,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  75,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  84,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,   9,  85, "Zwa" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  12,  82, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  15,  74, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  21,  64, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  26,  57, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  27,  56, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  28,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  66,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  70,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  78,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,   7,  93, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  16,  73, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  30,  54, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  31,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  93,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,   6,  96, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  14,  77, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  15,  75, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  18,  72, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  27,  57, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  28,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  29,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  33,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  34,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  36,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  39,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  42,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  45,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  48,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  51,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  58,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  61,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  64,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  82,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  89,  20, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  20,  71, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  31,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  32,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  70,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  85,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149, 100,  16, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,   8,  93, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,   9,  88, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  10,  87, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  11,  84, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  14,  78, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  22,  66, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  26,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  29,  56, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  67,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  69,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  73,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  75,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  31,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  78,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  80,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  94,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,   6,  99, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  18,  73, "Da0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  19,  72, "Da0" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  33,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  34,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  36,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  39,  50, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  42,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  45,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  48,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  51,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  54,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  58,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  61,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  64,  34, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  67,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  11,  86, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  13,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  16,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  28,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  40,  49, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  43,  47, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  46,  45, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  49,  43, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  52,  41, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  59,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  84,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  91,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,   5, 102, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,   7,  99, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  33,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  34,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  37,  52, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  38,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  55,  40, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  56,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  63,  35, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  65,  34, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  36,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  40,  50, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  43,  48, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  46,  46, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  49,  44, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  52,  42, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  59,  38, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  71,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  73,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  75,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  88,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,   6, 102, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,   8,  96, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  12,  87, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  17,  78, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  33,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  34,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  38,  52, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  42,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  45,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  48,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  51,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  54,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  56,  40, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  61,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  63,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  68,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  70,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  78,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  80,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  96,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  22,  72, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  25,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  36,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  40,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  83,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  92,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157, 102,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,   5, 105, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  33,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  34,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  38,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  42,  50, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  45,  48, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  48,  46, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  51,  44, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  54,  42, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  59,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  61,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  66,  35, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  68,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  86,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  31,  62, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  36,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  40,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  44,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  47,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  50,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  53,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  58,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  65,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,   6, 105, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,   8,  99, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  10,  96, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  12,  90, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  14,  87, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  16,  84, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  19,  78, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  21,  75, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  33,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  34,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  38,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  42,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  57,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  64,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  75,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  90,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,   7, 102, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  20,  77, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  23,  73, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  25,  72, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  36,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  40,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  44,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  47,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  50,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  53,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  56,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  63,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  72,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  74,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  78,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  80,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  98,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161, 103,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,   9,  99, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  11,  93, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  13,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  26,  71, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  32,  60, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  33,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  34,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  38,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  42,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  46,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  49,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  52,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  62,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  69,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  71,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  83,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  85,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  24,  73, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  36,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  40,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  44,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  56,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  61,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  68,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  95,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,   6, 108, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,   8, 102, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  12,  91, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  18,  84, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  20,  78, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  33,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  34,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  38,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  42,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  46,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  49,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  52,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  55,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  60,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  67,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  89,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  14,  89, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  16,  86, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  19,  81, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  22,  75, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  28,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  29,  67, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  36,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  40,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  44,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  48,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  51,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  59,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  66,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  92,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  38,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  42,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  46,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  55,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  65,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  76,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  78,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  80,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166, 100,  22, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  12,  93, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  14,  90, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  28,  70, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  36,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  40,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  44,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  48,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  51,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  54,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  59,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  64,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  73,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  75,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  83,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  85,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  11,  96, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  23,  74, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  26,  73, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  30,  67, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  38,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  42,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  46,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  58,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  63,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  70,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  72,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  88,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  97,  24, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168, 153,   6, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  22,  78, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  35,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  36,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  40,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  41,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  44,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  48,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  51,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  54,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  57,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  62,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  69,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  91,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,   6, 111, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,   9, 103, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  10,  99, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  11,  97, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  17,  87, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  21,  79, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  28,  72, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  29,  71, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  31,  67, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  38,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  46,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  50,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  53,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  68,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170, 106,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  16,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  19,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  20,  83, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  34,  65, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  35,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  36,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  40,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  41,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  44,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  48,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  57,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  62,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  67,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  95,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171, 102,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171, 112,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  13,  96, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  14,  93, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  18,  87, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  28,  73, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  30,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  38,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  43,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  46,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  50,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  53,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  56,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  61,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  66,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  77,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  79,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  81,  33, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  83,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  85,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,   8, 108, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  15,  91, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  32,  66, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  35,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  36,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  40,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  41,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  48,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  60,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  65,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  74,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  76,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  88,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  90,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  99,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,   6, 114, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  11, 100, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  29,  72, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  38,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  43,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  46,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  50,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  53,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  56,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  73,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,   9, 106, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  10, 103, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  36,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  40,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  41,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  45,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  48,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  52,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  60,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  65,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  70,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  72,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  94,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175, 108,  22, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,   7, 112, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  11, 101, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  17,  90, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  19,  87, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  23,  81, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  38,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  43,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  50,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  56,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  59,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  64,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  69,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  97,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176, 104,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  21,  84, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  36,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  40,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  41,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  45,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  48,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  52,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  55,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  63,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  68,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  81,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  83,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  85,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,   8, 110, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  10, 105, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  38,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  43,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  47,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  50,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  59,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  78,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  80,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  88,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  90,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178, 101,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,   6, 117, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,   9, 108, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  22,  84, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  32,  69, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  35,  68, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  36,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  40,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  41,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  45,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  52,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  55,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  58,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  63,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  68,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  75,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  77,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  93,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179, 109,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179, 114,  21, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,   8, 111, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  16,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  24,  81, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  26,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  27,  75, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  31,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  38,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  43,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  47,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  50,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  54,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  62,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  67,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  74,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  96,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  28,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  36,  66, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  40,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  41,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  45,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  49,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  52,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  58,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  61,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  66,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  73,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181, 106,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,   7, 117, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  10, 108, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  12, 105, "ARS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  13, 102, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  15,  99, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  27,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  32,  71, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  34,  69, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  38,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  43,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  47,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  54,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  57,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  72,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182, 100,  28, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  36,  67, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  40,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  41,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  45,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  49,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  52,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  61,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  71,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  82,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  84,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  86,  35, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  88,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  90,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183, 103,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,   6, 120, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,   8, 114, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,   9, 110, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  20,  93, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  21,  89, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  23,  84, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  32,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  38,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  43,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  47,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  51,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  54,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  57,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  60,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  65,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  67,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  70,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  79,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  81,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  95,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184, 111,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184, 116,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  11, 107, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  27,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  40,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  41,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  45,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  49,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  64,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  69,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  78,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  33,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  35,  71, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  37,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  38,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  43,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  47,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  51,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  54,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  57,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  60,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  75,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  77,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  99,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186, 108,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  31,  76, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  40,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  41,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  45,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  49,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  64,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  74,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187, 102,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,   7, 120, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  10, 111, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  11, 109, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  34,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  37,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  38,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  43,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  47,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  51,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  54,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  57,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  60,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  63,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  68,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  70,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  73,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  86,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  88,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  90,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,   9, 114, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  12, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  16, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  19,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  22,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  26,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  27,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  31,  77, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  33,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  40,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  41,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  45,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  49,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  53,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  56,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  59,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  72,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  83,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  85,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  93,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  95,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189, 106,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189, 113,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  35,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  37,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  38,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  43,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  47,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  51,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  63,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  80,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  82,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,   6, 126, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  11, 111, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  23,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  33,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  34,  73, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  40,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  41,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  45,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  49,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  67,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  79,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191, 110,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,   7, 123, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,   8, 120, "GO2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  10, 114, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  13, 108, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  20,  95, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  25,  85, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  36,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  37,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  38,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  43,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  47,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  51,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  54,  58, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  55,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  57,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  58,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  60,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  63,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  66,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  70,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  71,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  73,  46, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  78,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,   9, 116, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  12, 110, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  32,  79, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  33,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  34,  74, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  40,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  41,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  45,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  49,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  53,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  62,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  65,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  77,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 105,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 119,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  20,  96, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  36,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  37,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  38,  71, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  43,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  47,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  51,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  71,  48, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  76,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  87,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  89,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  91,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  93,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  95,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194, 108,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194, 115,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194, 125,  22, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  11, 114, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  27,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  33,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  34,  75, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  40,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  41,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  45,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  49,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  53,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  56,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  59,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  62,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  65,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  70,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  75,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  84,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  86,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  98,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195, 100,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,   7, 126, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  10, 116, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  31,  82, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  32,  80, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  36,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  37,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  38,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  43,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  47,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  51,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  55,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  58,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  61,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  64,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  69,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  74,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  83,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196, 112,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  34,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  40,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  41,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  45,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  49,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  53,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  68,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  80,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  82,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,   6, 129, "Gu1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,   9, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  12, 114, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  16, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  19, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  20,  99, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  22,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  25,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  29,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  33,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  36,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  37,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  38,  73, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  43,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  47,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  51,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  55,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  58,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  61,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  64,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  74,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  79,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198, 121,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  11, 117, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  40,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  41,  71, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  45,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  49,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  53,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  57,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  60,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  63,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  68,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  73,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  78,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  91,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  93,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199, 117,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,   8, 126, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  10, 119, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  26,  90, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  27,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  34,  78, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  35,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  36,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  37,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  43,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  47,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  51,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  55,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  67,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  72,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  77,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  88,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  90,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  96,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  98,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200, 100,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,   7, 129, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  11, 118, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  39,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  40,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  45,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  49,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  53,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  57,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  60,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  63,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  71,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  85,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  87,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 103,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,   6, 132, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,   9, 122, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  12, 116, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  13, 114, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  33,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  35,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  36,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  37,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  42,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  43,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  47,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  48,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  51,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  55,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  67,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  77,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  84,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202, 115,  29, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202, 127,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  32,  85, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  39,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  40,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  45,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  50,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  53,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  57,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  60,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  63,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  66,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  71,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  76,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  83,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203, 123,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,   7, 131, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  34,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  35,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  36,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  37,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  42,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  43,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  47,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  48,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  55,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  59,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  62,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  70,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  75,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  80,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  82,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204, 119,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,   8, 128, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  11, 121, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  39,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  40,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  45,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  50,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  53,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  57,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  66,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  69,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  74,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  92,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  94,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  96,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  98,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205, 100,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,   6, 135, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  35,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  36,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  37,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  42,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  43,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  47,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  48,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  52,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  55,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  59,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  62,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  65,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  80,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  89,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  91,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206, 103,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  12, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  16, 114, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  19, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  22, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  25,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  29,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  33,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  34,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  39,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  40,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  45,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  50,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  57,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  69,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  74,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  79,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  88,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 108,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 129,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  10, 126, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  14, 117, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  36,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  42,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  43,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  47,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  48,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  52,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  55,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  59,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  62,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  65,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  68,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  73,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  78,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  85,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  87,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208, 125,  27, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,   7, 135, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  11, 124, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  20, 105, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  35,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  38,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  39,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  40,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  45,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  50,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  54,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  57,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  61,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  64,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  72,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  77,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  84,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,   8, 132, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  34,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  42,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  43,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  47,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  48,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  52,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  59,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  68,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  83,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  96,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  98,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,   6, 138, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,   9, 128, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  12, 122, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  33,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  35,  83, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  36,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  38,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  39,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  40,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  45,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  50,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  54,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  57,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  61,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  64,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  67,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  72,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  77,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  82,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  93,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  95,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211, 101,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211, 103,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211, 105,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  13, 120, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  14, 119, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  34,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  42,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  43,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  47,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  48,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  52,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  56,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  59,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  71,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  76,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  81,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  90,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  92,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 108,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 126,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  11, 127, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  35,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  36,  83, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  37,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  38,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  39,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  40,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  45,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  50,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  54,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  61,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  64,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  67,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  75,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  80,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  89,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  10, 129, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  34,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  42,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  43,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  47,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  48,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  52,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  56,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  59,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  63,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  71,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  88,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  38,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  39,  81, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  45,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  50,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  54,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  58,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  61,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  67,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  70,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  75,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  80,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  85,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  87,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   7, 139, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   8, 135, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   9, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  12, 126, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  16, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  19, 114, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  22, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  33,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  35,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  37,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  41,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  42,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  43,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  47,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  48,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  52,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  56,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  63,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  66,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  74,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  79,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  84,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  97,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  99,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216, 101,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216, 103,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  34,  88, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  39,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  45,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  50,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  54,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  58,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  61,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  70,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  73,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  78,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  83,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  94,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  96,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 108,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 110,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 133,  27, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 138,  25, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  10, 132, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  11, 131, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  35,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  36,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  38,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  41,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  42,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  47,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  48,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  52,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  56,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  60,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  63,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  66,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  69,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  91,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  93,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 113,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,   6, 144, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  34,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  44,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  45,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  50,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  54,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  58,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  73,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  78,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  83,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  90,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   8, 138, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  12, 128, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  15, 122, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  33,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  35,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  36,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  37,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  39,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  41,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  42,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  47,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  48,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  52,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  56,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  60,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  63,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  66,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  69,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  72,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  77,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  82,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  89,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  44,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  45,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  50,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  54,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  58,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  62,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  65,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  68,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  76,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  81,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  88,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221, 101,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221, 103,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,   7, 144, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  10, 135, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  11, 134, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  13, 126, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  34,  91, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  36,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  37,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  38,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  40,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  41,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  42,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  47,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  48,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  52,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  56,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  60,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  72,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  87,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  98,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222, 100,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222, 108,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  33,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  35,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  44,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  45,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  50,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  54,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  58,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  62,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  65,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  68,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  71,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  76,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  81,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  86,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  95,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  97,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,   6, 147, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,   8, 141, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  34,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  37,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  38,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  39,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  40,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  47,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  48,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  52,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  56,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  60,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  75,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  80,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  85,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  94,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224, 116,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  12, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  19, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  35,  91, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  36,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  42,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  44,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  45,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  50,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  54,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  58,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  62,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  65,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  68,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  71,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  79,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  84,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  91,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  93,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  11, 137, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  16, 126, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  33,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  37,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  38,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  39,  87, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  40,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  41,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  47,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  48,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  52,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  56,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  60,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  64,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  67,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  75,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  90,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 141,  27, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  10, 139, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  34,  94, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  35,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  43,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  44,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  45,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  50,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  54,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  58,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  62,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  71,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  74,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  79,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  84,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  89,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 102,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 104,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 106,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 108,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,   6, 150, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,   7, 146, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,   8, 144, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  37,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  38,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  39,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  40,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  41,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  42,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  47,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  48,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  52,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  56,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  60,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  64,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  67,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  70,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  78,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  83,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  88,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  99,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228, 101,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  12, 134, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  15, 128, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  33,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  34,  95, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  36,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  44,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  45,  83, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  50,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  54,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  58,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  62,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  74,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  77,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  82,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  87,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  96,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  98,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  35,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  38,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  39,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  40,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  41,  87, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  47,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  48,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  52,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  56,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  60,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  64,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  67,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  70,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  73,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  81,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  95,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  13, 132, "BY" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  36,  93, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  37,  92, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  43,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  44,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  45,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  50,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  54,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  58,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  62,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  66,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  69,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  77,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  87,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  94,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,   6, 153, "BvE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  39,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  40,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  41,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  47,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  48,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  52,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  56,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  60,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  64,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  73,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  76,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  81,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  86,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  93,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  33, 101, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  34,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  37,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  38,  92, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  43,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  44,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  45,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  50,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  54,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  58,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  62,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  66,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  69,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  72,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  80,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  85,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  92,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 103,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 105,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 107,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 109,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 111,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 113,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  12, 138, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  15, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  19, 126, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  35,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  36,  95, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  40,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  41,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  47,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  52,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  56,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  57,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  60,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  64,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  76,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  84,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  91,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 100,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 102,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  34,  99, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  37,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  38,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  39,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  43,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  44,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  49,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  50,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  54,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  55,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  62,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  66,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  69,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  72,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  75,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  80,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  90,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  99,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,   6, 156, "Bo3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,   7, 153, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  16, 132, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  33, 103, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  35,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  36,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  46,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  47,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  52,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  57,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  60,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  64,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  79,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  84,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  89,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  96,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  98,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  34, 100, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  37,  95, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  38,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  39,  93, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  40,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  42,  90, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  43,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  44,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  49,  84, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  50,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  54,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  55,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  59,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  62,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  66,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  69,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  72,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  75,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  78,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  83,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  88,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  95,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  12, 140, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  35,  99, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  36,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  46,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  47,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  52,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  57,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  64,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  68,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  71,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  74,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  82,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  87,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  94,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 107,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 109,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 111,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 113,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  33, 105, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  39,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  40,  93, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  41,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  42,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  43,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  44,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  49,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  50,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  54,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  55,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  59,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  62,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  66,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  78,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  93,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 104,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 106,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 116,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,   7, 154, "GO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  34, 102, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  35, 100, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  36,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  37,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  38,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  46,  88, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  47,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  52,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  57,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  61,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  64,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  68,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  71,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  74,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  82,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  87,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  92,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240, 101,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240, 103,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  41,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  42,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  43,  91, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  44,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  49,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  50,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  54,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  55,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  59,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  66,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  78,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  81,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  86,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  91,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241, 100,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241, 153,  28, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  15, 138, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  16, 135, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  33, 107, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  37,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  46,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  47,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  52,  84, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  57,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  61,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  64,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  68,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  71,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  74,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  77,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  85,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  90,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  99,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,   7, 156, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  11, 153, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  12, 144, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  21, 132, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  22, 128, "NBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  26, 126, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  31, 123, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  32, 122, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  34, 104, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  35, 102, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  36, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  38,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  40,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  41,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  42,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  43,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  44,  91, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  45,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  49,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  50,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  51,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  54,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  55,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  56,  81, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  59,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  60,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  63,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  66,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  67,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  70,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  73,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  76,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  79,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  81,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  82,  63, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  84,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  87,  60, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  89,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  92,  57, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  94,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  96,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  98,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 101,  52, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 103,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 105,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 107,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 109,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 111,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 113,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 115,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 117,  44, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 119,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 122,  42, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 127,  41, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 132,  39, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 133,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 137,  36, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 142,  35, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 147,  33, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 152,  32, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 153,  29, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 154,  28, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 157,  27, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 162,  26, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 163,  25, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 167,  24, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 172,  23, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 177,  21, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 182,  20, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 183,  19, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 187,  18, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 192,  17, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 197,  15, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 202,  14, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 203,  13, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 207,  12, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 212,  11, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 217,   9, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 222,   8, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 223,   7, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 227,   6, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 232,   5, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 237,   3, "Ham" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
diff --git a/tbl/codes4.g b/tbl/codes4.g
new file mode 100644
index 0000000..b7e98e8
--- /dev/null
+++ b/tbl/codes4.g
@@ -0,0 +1,8521 @@
+#############################################################################
+##  
+#A  codes4.g                GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+#H  @(#)$Id: codes4.g,v 1.1.1.1 1998/03/19 17:31:41 lea Exp $
+##  
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+## 
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H 
+#H  $Log: codes4.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:41  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way.
+#H  Lea Ruscio 19/3/98
+#H
+#H 
+#H  Revision 1.2  1997/01/20 15:34:25  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H 
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H 
+## 
+YouWantThisCode := function(n, k, d, ref)
+	if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then
+		Add( GUAVA_TEMP_VAR, [n, k, d, ref] );
+	fi;
+	return [n, k] = GUAVA_TEMP_VAR;
+end;
+
+if YouWantThisCode(   6,   3,   4, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  12,   6,   6, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  17,   4,  12, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  17,  13,   4, "ovo" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  18,   6,  10, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  18,   9,   8, "MOS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  20,  10,   8, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  20,  13,   6, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  21,  12,   7, "KPm" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  21,  15,   5, "KPm" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  24,   5,  16, "Li1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  24,   7,  13, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  26,   6,  16, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  26,  16,   7, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  27,   8,  14, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  27,   9,  13, "GuB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  27,  19,   6, "EB3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,   4,  20, "GH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,   6,  17, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  28,   7,  16, "GuB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,   5,  20, "KPq" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,   8,  16, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,   9,  15, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,  10,  14, "Da4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,  11,  13, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  30,  15,  12, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  31,   4,  22, "GH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  32,   6,  20, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  32,   7,  19, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  32,  16,  11, "Du3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,   5,  22, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,  10,  16, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  33,  11,  15, "DG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,   9,  18, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  34,  13,  14, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  35,   6,  22, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,   8,  20, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,   9,  19, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  12,  16, "DG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  18,  12, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  36,  24,   8, "Zi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  38,   9,  20, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  38,  10,  19, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  38,  19,  12, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,   7,  24, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,  12,  18, "KPm" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,  13,  17, "BMP" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,  21,  11, "KPm" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  39,  24,   9, "KPm" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  40,   5,  28, "KPq" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  41,  36,   4, "IN" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,   6,  28, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,   9,  23, "Ayd" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  10,  22, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  12,  20, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  14,  18, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  15,  17, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  17,  16, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  42,  31,   7, "Zi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  43,   5,  30, "Liz" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  43,  36,   5, "KPc" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  44,   8,  27, "Zi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  44,  22,  14, "QR" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,   7,  28, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,  15,  18, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  45,  16,  17, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,   5,  32, "Liz" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  11,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  12,  22, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  14,  20, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  46,  23,  14, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,   6,  32, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  12,  23, "DG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  48,  24,  14, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  49,   4,  36, "GH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  50,  10,  27, "Da4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  50,  28,  12, "D1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,   5,  36, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,  13,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,  18,  19, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,  35,   9, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,  37,   8, "LX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  51,  42,   6, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,   7,  33, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,   9,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,  12,  25, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  52,  17,  22, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  53,   6,  36, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,  27,  16, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  54,  39,   8, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  55,  10,  31, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  55,  11,  29, "DG" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  56,   5,  40, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,   9,  34, "YC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  18,  24, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  57,  34,  12, "D1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  58,  10,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,   9,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  13,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  60,  16,  28, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  62,  31,  18, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  62,  32,  15, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  63,  13,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  63,  14,  31, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  63,  18,  28, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  16,  30, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  20,  27, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  36,  14, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  64,  54,   6, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,   8,  44, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  12,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  27,  23, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  28,  19, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  46,  10, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  65,  57,   5, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  66,  15,  32, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,   5,  48, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  13,  35, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  18,  30, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  20,  28, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  26,  24, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  29,  19, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  36,  15, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  67,  45,  11, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  15,  33, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  28,  21, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  34,  18, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  39,  14, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  68,  48,  10, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  13,  36, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  19,  29, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  23,  27, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  25,  25, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  27,  24, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  41,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  44,  12, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  69,  50,   9, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   4,  52, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   5,  50, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   7,  48, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,   9,  44, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  11,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  12,  38, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  14,  35, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  15,  34, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  16,  33, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  18,  31, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  29,  21, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  30,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  31,  19, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  35,  18, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  38,  15, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  47,  11, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  70,  57,   7, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  71,  22,  28, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  71,  24,  27, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  71,  28,  23, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,   8,  48, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  14,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  20,  30, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  26,  26, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  27,  25, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  36,  18, "GaO" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  42,  14, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  46,  12, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  51,  10, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  72,  56,   8, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  23,  28, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  29,  23, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  30,  22, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  44,  13, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  73,  53,   9, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  20,  31, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  26,  27, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  28,  24, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  41,  15, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  74,  50,  11, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,   4,  56, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  11,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  13,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  16,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  31,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  34,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  37,  18, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  75,  44,  14, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  22,  30, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  25,  28, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  27,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  29,  24, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  30,  23, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  33,  21, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  76,  39,  17, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  77,   7,  52, "BET" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  77,   8,  50, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  77,  23,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  77,  28,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  77,  52,  11, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,   6,  56, "Hi" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  12,  44, "Ayd" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  22,  31, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  26,  28, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  33,  22, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  34,  21, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  78,  39,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  79,  19,  36, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  79,  29,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  79,  47,  14, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  79,  49,  13, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,   8,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  11,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  22,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  23,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  27,  28, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  28,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  32,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  33,  23, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  38,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  80,  45,  16, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  25,  30, "X6u" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  29,  26, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  43,  17, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  81,  70,   6, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  26,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  31,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  82,  36,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  23,  32, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  25,  31, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  83,  43,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  84,  27,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,   6,  60, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,   8,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  14,  48, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  15,  45, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  16,  44, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  17,  43, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  18,  42, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  19,  40, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  22,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  23,  33, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  24,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  26,  31, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  30,  28, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  32,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  33,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  36,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  38,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  42,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  49,  16, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  58,  12, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  63,  10, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  64,   9, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  85,  81,   3, "Ham" ) then
+    GUAVA_TEMP_VAR := [ HammingCode, [ 4, 4 ]];
+fi;
+if YouWantThisCode(  86,   9,  54, "Da" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  11,  52, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  28,  29, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  31,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  37,  23, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  40,  21, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  51,  15, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  86,  53,  14, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  19,  41, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  24,  33, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  27,  31, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  33,  26, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  43,  20, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  48,  17, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  87,  56,  13, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,   5,  64, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  20,  38, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  23,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  26,  32, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  31,  28, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  40,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  88,  47,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  19,  42, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  21,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  25,  33, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  29,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  30,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  33,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  36,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  46,  19, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  52,  16, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  89,  63,  11, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,   6,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,   8,  58, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,   9,  56, "BZx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  13,  50, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  16,  46, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  18,  44, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  23,  36, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  24,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  27,  32, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  39,  24, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  40,  23, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  67,  10, "X" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  90,  73,   8, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,   7,  61, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  11,  54, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  15,  48, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  20,  40, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  22,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  29,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  33,  28, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  36,  26, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  44,  21, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  91,  46,  20, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  21,  39, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  24,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  25,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  27,  33, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  92,  31,  30, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  16,  48, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  18,  46, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  19,  44, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  22,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  23,  37, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  29,  32, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  33,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  36,  27, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  39,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  93,  44,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,   5,  68, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  11,  56, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  13,  53, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  25,  36, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  26,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  27,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  31,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  54,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  58,  15, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  94,  70,  10, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,   8,  62, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,   9,  59, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  10,  58, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  12,  54, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  14,  52, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  15,  51, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  29,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  36,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  39,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  51,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  53,  18, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  95,  73,   9, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,   7,  64, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  17,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  19,  45, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  21,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  22,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  23,  39, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  24,  38, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  26,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  31,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  34,  30, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  44,  24, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  50,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  58,  16, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  96,  62,  14, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,   6,  68, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  28,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  29,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  36,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  39,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  97,  49,  21, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,   8,  64, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  15,  52, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  18,  48, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  34,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  43,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  98,  66,  13, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,   5,  72, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  17,  50, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  24,  40, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  32,  33, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  39,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode(  99,  49,  22, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  11,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  19,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  21,  45, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  23,  42, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  26,  39, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  29,  36, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  30,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  34,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  37,  30, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 100,  43,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  17,  51, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  25,  40, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  27,  38, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  28,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  32,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 101,  39,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,   6,  72, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  10,  64, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  12,  60, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  15,  54, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  16,  53, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  18,  50, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  20,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  22,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  34,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  37,  31, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  43,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  49,  24, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  57,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  59,  18, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  61,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 102,  74,  12, "Tol" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  24,  42, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  26,  40, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  31,  36, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  32,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  47,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 103,  56,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,   7,  71, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  28,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  29,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  37,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  40,  30, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  43,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  50,  24, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  55,  21, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  65,  16, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  67,  15, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 104,  75,  12, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,   8,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  15,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  18,  52, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  21,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  24,  43, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  25,  42, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  26,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  31,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  35,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  47,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 105,  54,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  28,  40, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  33,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  37,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  40,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  43,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  53,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 106,  94,   6, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  17,  54, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  19,  51, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  30,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  31,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  35,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  47,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 107,  72,  14, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,   6,  76, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  24,  45, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  25,  44, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  26,  43, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  27,  42, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  28,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  33,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  40,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  43,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  53,  24, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 108,  90,   8, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  23,  49, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  30,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  38,  34, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  47,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 109,  52,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,   8,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  15,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  17,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  20,  51, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  24,  46, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  25,  45, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  26,  44, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  27,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  32,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  36,  36, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  40,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  43,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  62,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  64,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 110,  77,  13, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  29,  42, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  30,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  34,  38, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  38,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  47,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  52,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  61,  21, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  67,  18, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  69,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  83,  11, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 111,  92,   8, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,   7,  76, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  19,  55, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  21,  51, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  32,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  36,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  43,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  51,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  60,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 112,  89,   9, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  14,  68, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  27,  45, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  28,  44, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  29,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  34,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  38,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  41,  34, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  47,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  59,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  73,  16, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 113,  99,   7, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,   9,  74, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  31,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  32,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  36,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  51,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114,  58,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 114, 105,   5, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,   5,  84, "Gu3" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,   8,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  10,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  15,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  17,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  22,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  26,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  27,  46, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  28,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  41,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  44,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  47,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  57,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 115,  77,  15, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  21,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  23,  51, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  25,  49, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  30,  44, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  31,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  35,  40, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  39,  37, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 116,  51,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,   6,  84, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,   7,  80, "Gu" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  24,  50, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  33,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  37,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  41,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  44,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  47,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 117,  57,  26, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,   4,  88, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  19,  60, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  30,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  35,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  39,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  51,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  56,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118,  69,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 118, 102,   7, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  20,  59, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  26,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  32,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  33,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  37,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  44,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  47,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  66,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  68,  21, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  72,  19, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  83,  14, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 119,  99,   8, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,   5,  88, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,   8,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  10,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  13,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  15,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  17,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  21,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  22,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  23,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  24,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  25,  51, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  29,  48, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  35,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  42,  37, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  51,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  56,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  65,  23, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  75,  18, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 120,  90,  12, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  30,  47, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  31,  46, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  32,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  40,  39, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  44,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  47,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  55,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  64,  24, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 121,  78,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,   6,  88, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  26,  51, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  27,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  28,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  34,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  38,  41, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  42,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  51,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 122,  63,  25, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,   4,  92, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  30,  48, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  31,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  36,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  40,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  55,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 123,  62,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  23,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  25,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  33,  46, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  34,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  38,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  42,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  45,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  48,  35, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  51,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  61,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  83,  16, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 124,  90,  13, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,   8,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  10,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  15,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  17,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  19,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  22,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  24,  56, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  26,  53, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  27,  52, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  28,  51, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  29,  50, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  30,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  36,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  40,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  55,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 125,  94,  12, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,   5,  92, "GB4" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,   7,  88, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,   9,  82, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  11,  78, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  13,  76, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  16,  69, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  18,  66, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  32,  48, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  33,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  38,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  45,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  48,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  51,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126,  61,  28, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 126, 120,   4, "Gl" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  28,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  29,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  35,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  43,  40, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  55,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  60,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 127,  88,  15, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  21,  63, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  23,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  25,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  27,  54, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  31,  50, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  32,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  37,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  41,  42, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  45,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  48,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 128,  51,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  13,  77, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  34,  48, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  35,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  39,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  43,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  55,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 129,  60,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  12,  80, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  14,  76, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  15,  74, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  16,  72, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  17,  70, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  19,  68, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  28,  54, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  29,  53, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  30,  52, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  31,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  37,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  41,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  48,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  51,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  59,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  66,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  68,  26, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  70,  25, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  72,  24, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  74,  23, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  76,  22, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  78,  21, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  80,  20, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  82,  19, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 130,  84,  18, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,   5,  96, "BDK" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  33,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  34,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  39,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  43,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  46,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 131,  55,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,   7,  92, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  13,  79, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  17,  71, "XB" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  18,  70, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  21,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  23,  63, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  25,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  27,  57, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  28,  55, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  29,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  30,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  36,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  41,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  48,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  51,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  59,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  66,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 132,  88,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,   9,  88, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  26,  58, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  32,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  33,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  38,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  46,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  55,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 133,  65,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,   6,  96, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  15,  77, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  24,  61, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  35,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  36,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  40,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  44,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 134,  59,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,   7,  94, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  13,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  17,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  22,  64, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  27,  58, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  28,  57, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  29,  56, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  30,  55, "DNX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  31,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  32,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  38,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  42,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  46,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  49,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  52,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  55,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 135,  65,  30, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  10,  88, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  11,  84, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  26,  60, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  34,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  35,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  40,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  44,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  59,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  64,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  75,  25, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  77,  24, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  79,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  81,  22, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136,  94,  16, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 136, 104,  12, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,   5, 100, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  28,  58, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  29,  57, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  30,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  31,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  37,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  42,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  49,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  52,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  55,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  72,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  74,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 137,  84,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,   9,  90, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  18,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  21,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  22,  66, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  24,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  27,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  33,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  34,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  39,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  40,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  47,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  59,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  64,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  71,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 138,  87,  20, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,   7,  96, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  11,  86, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  25,  63, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  29,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  36,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  37,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  45,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  49,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  52,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  55,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  63,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  70,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 139,  90,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,   6, 100, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  13,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  15,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  17,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  19,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  21,  69, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  23,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  26,  62, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  28,  60, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  31,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  32,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  33,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  39,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  43,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  47,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140,  59,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 140, 105,  13, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,   9,  92, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  25,  64, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  35,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  36,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  41,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  45,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  52,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  55,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  63,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  70,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141,  94,  18, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 141, 101,  15, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,   5, 104, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  11,  87, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  29,  60, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  30,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  31,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  32,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  38,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  39,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  43,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  47,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  50,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  59,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 142,  69,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  34,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  35,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  41,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  45,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  52,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  55,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  63,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 143,  81,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,   7, 100, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  21,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  23,  69, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  24,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  25,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  27,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  29,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  30,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  31,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  37,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  38,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  43,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  50,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  59,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  69,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  78,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  80,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  84,  24, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  86,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  88,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 144,  99,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,   6, 104, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  10,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  15,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  17,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  19,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  26,  65, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  28,  63, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  33,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  34,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  40,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  48,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  63,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  68,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145,  77,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 145, 135,   5, "Ed" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  11,  90, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  36,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  37,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  42,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  46,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  50,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  53,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  56,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  59,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  76,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 146,  92,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,   5, 108, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  13,  89, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  28,  64, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  29,  63, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  30,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  31,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  32,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  33,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  39,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  40,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  44,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  48,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  63,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  68,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  75,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 147,  95,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,   9,  98, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  20,  76, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  23,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  25,  69, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  35,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  36,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  42,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  46,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  53,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  56,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  59,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  67,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 148,  74,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  31,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  32,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  38,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  39,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  44,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  48,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  51,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149,  63,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 149, 106,  16, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,   7, 104, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  10,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  12,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  15,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  17,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  19,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  20,  77, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  21,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  24,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  27,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  28,  66, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  30,  64, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  34,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  35,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  41,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  46,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  53,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  56,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  59,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  67,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150,  74,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 150, 100,  19, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  37,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  38,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  43,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  51,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  63,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  73,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 151,  88,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,   5, 112, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,   9, 101, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  13,  92, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  23,  75, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  25,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  27,  69, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  29,  66, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  31,  64, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  32,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  33,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  34,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  40,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  41,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  45,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  49,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  56,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  59,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  67,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  83,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  85,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  87,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 152,  91,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  28,  68, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  36,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  37,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  43,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  47,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  51,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  54,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  63,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  73,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  82,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153,  94,  23, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 153, 105,  18, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  31,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  32,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  33,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  39,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  40,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  45,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  49,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  56,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  59,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  67,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  72,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  81,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 154,  97,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,   8, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,   9, 103, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  10, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  12,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  13,  94, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  15,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  17,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  19,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  21,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  28,  69, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  35,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  36,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  42,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  47,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  54,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  63,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 155,  80,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  24,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  25,  73, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  27,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  30,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  38,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  39,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  44,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  52,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  67,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  72,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156,  79,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 156, 101,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  31,  67, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  33,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  34,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  35,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  41,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  42,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  46,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  50,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  54,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  57,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  60,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  63,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  71,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 157,  78,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,   7, 110, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  37,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  38,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  44,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  48,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  52,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158,  67,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158, 105,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 158, 112,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  31,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  32,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  33,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  34,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  40,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  41,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  46,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  50,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  57,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  60,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  63,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  71,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 159,  78,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  10, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  12, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  15,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  17,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  19,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  21,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  23,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  29,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  36,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  37,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  43,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  44,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  48,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  52,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  55,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  67,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  77,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  88,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  90,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  92,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  94,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 160,  96,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,   7, 112, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,   9, 108, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  13,  98, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  39,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  40,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  46,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  50,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  57,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  60,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  63,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  71,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  87,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 161,  99,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,   5, 120, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,   6, 116, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  24,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  27,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  30,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  31,  70, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  33,  68, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  34,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  35,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  36,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  42,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  43,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  55,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  67,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  77,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162,  86,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 162, 102,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  38,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  39,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  45,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  49,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  53,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  60,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  63,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  71,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  76,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 163,  85,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  32,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  33,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  34,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  35,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  41,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  42,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  47,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  51,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  55,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  58,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  67,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164,  84,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164, 106,  22, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 164, 120,  16, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,   6, 118, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  10, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  12, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  17,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  19,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  21,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  23,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  25,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  28,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  31,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  37,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  38,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  44,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  45,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  49,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  53,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  60,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  63,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  71,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  76,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 165,  83,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  15, 100, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  40,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  41,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  47,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  51,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  58,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  67,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  75,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 166,  82,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  31,  73, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  35,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  36,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  37,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  43,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  44,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  49,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  53,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  56,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167,  71,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 167, 111,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  22,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  24,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  25,  81, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  27,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  28,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  30,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  33,  72, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  39,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  40,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  46,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  58,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  61,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  64,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  67,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  75,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  82,  36, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  93,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  95,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  97,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 168,  99,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,   7, 118, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  32,  73, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  35,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  36,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  42,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  43,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  48,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  52,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  56,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  71,  43, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  81,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169,  92,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169, 102,  26, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 169, 104,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,   6, 122, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  10, 112, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  12, 108, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  13, 104, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  14, 102, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  16, 100, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  17,  98, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  31,  75, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  34,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  38,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  39,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  45,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  46,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  50,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  54,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  61,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  64,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  67,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  75,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170,  91,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 170, 116,  20, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,   9, 117, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  18,  96, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  41,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  42,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  48,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  52,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  56,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  59,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  71,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  81,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  88,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171,  90,  33, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 171, 108,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,   5, 128, "Liz" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,   7, 119, "Ayd" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  35,  72, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  36,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  37,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  38,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  44,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  45,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  50,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  54,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  61,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  64,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  67,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  75,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172,  80,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 172, 125,  17, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  40,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  41,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  47,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  52,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  59,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  71,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173,  88,  35, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 173, 112,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  21,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  24,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  27,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  30,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  33,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  35,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  36,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  37,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  43,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  44,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  49,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  57,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  64,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  67,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  75,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  80,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 174,  87,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,   6, 126, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,   7, 121, "DG5" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  10, 114, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  14, 106, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  15, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  17, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  19,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  31,  78, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  34,  75, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  39,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  40,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  46,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  47,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  51,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  55,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  59,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  62,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  71,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  79,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 175,  86,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  11, 112, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  13, 108, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  16, 103, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  25,  87, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  42,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  43,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  49,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  53,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  57,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  64,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  67,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  75,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176,  98,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176, 100,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176, 102,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 176, 104,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,   9, 119, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  34,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  35,  75, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  37,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  38,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  39,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  45,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  46,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  51,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  55,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  62,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  71,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  79,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  86,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177,  97,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 177, 107,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  14, 108, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  41,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  42,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  48,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  53,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  57,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  60,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  67,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  75,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  85,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  94,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178,  96,  33, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 178, 110,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,   5, 132, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,   9, 120, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  34,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  37,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  38,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  44,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  45,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  50,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  55,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  62,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  65,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  71,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  79,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179,  93,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179, 113,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 179, 122,  21, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,   6, 130, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  10, 118, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  15, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  16, 106, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  17, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  19, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  21,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  22,  93, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  24,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  25,  90, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  27,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  30,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  31,  81, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  33,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  36,  76, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  40,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  41,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  47,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  48,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  52,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  60,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  75,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  85,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 180,  92,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,   9, 121, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  35,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  43,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  44,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  50,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  54,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  58,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  65,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  68,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  71,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  79,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  84,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181,  91,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 181, 117,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,   5, 134, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  12, 114, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  13, 112, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  37,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  38,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  39,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  40,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  46,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  47,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  52,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  56,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  60,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  63,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 182,  75,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,   7, 128, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,   9, 122, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  10, 120, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  15, 110, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  34,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  42,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  43,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  49,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  50,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  54,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  58,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  65,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  68,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  71,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  79,  45, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  84,  42, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 183,  91,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  13, 113, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  16, 109, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  37,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  38,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  39,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  45,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  46,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  52,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  56,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  63,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  75,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  83,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184,  90,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184, 105,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184, 107,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 184, 122,  23, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,   6, 134, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  12, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  17, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  19, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  21, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  41,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  42,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  48,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  49,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  54,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  58,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  61,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  68,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  71,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185,  79,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185, 100,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185, 102,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185, 104,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185, 110,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 185, 112,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,   9, 124, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  11, 120, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  15, 112, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  24,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  27,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  30,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  31,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  33,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  36,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  44,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  45,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  51,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  63,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  66,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  75,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  83,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  90,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186,  99,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186, 115,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 186, 175,   5, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,   8, 128, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  37,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  39,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  40,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  41,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  47,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  48,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  53,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  57,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  61,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  68,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  71,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  79,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  89,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 187,  98,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  13, 116, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  16, 112, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  34,  83, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  43,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  44,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  50,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  51,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  55,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  59,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  66,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  75,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  83,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  88,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188,  97,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 188, 119,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,   5, 140, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  37,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  38,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  39,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  40,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  46,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  47,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  53,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  57,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  61,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  64,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  71,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  79,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 189,  96,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  12, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  14, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  17, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  19, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  21, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  23, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  42,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  43,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  49,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  50,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  55,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  59,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  66,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  69,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  75,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  83,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  88,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190,  95,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 190, 123,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,   6, 138, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  45,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  46,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  52,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  57,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  64,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 191,  79,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,   7, 136, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  13, 119, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  16, 115, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  24, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  27,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  30,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  33,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  36,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  37,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  39,  80, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  40,  79, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  41,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  42,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  48,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  49,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  54,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  62,  61, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  69,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  72,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  75,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  83,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  88,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192,  95,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 192, 127,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  34,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  44,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  45,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  51,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  52,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  56,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  60,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  64,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  67,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  79,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  87,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193,  94,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 105,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 107,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 109,  33, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 111,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 113,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 193, 115,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,   5, 144, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  38,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  39,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  40,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  41,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  47,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  48,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  54,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  58,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  62,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  69,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  72,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  75,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  83,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194,  93,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194, 104,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 194, 118,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,   6, 141, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,   7, 137, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  12, 124, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  16, 117, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  18, 114, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  37,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  43,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  44,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  50,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  51,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  56,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  60,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  64,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  67,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  79,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195,  87,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195, 103,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 195, 121,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  13, 122, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  15, 120, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  46,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  47,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  53,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  58,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  62,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  72,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  75,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  83,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196,  93,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196, 102,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 196, 124,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  10, 132, "XX" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  37,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  41,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  42,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  43,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  49,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  50,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  55,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  60,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  67,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  70,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  79,  52, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  87,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197,  92,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 197, 101,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,   8, 134, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  21, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  24, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  27, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  30,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  33,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  34,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  36,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  39,  84, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  45,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  46,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  52,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  53,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  57,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  65,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  72,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  75,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198,  83,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198, 100,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 198, 128,  26, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,   7, 140, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  11, 128, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  12, 126, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  14, 123, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  38,  85, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  41,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  42,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  48,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  49,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  55,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  59,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  63,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  67,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  70,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  79,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  87,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  92,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 199,  99,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,   5, 148, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  13, 125, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  16, 121, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  17, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  19, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  37,  87, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  40,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  44,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  45,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  51,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  52,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  57,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  61,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  65,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  75,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  83,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 200,  98,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,   6, 145, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,   7, 141, "GW2" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  47,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  48,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  54,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  55,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  59,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  63,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  70,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  73,  58, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  79,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  82,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  87,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201,  92,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 110,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 112,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 114,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 116,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 118,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 120,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 201, 133,  25, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  11, 130, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  15, 124, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  41,  84, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  42,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  43,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  44,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  50,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  51,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  57,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  61,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  68,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  91,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202,  98,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202, 109,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 202, 123,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  12, 129, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  14, 126, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  46,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  47,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  48,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  53,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  54,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  59,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  63,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  66,  64, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  70,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  73,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  76,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  79,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  82,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  87,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203,  97,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203, 108,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 203, 126,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  21, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  24, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  27, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  30, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  33,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  36,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  39,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  40,  86, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  41,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  42,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  43,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  50,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  56,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  68,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204,  91,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204, 107,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 204, 138,  24, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,   5, 152, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,   6, 148, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,   7, 144, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  10, 134, "X6a" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  13, 129, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  16, 125, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  17, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  19, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  37,  90, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  45,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  46,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  47,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  52,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  53,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  58,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  62,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  66,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  73,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  76,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  79,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  87,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205,  97,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205, 106,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 205, 130,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  11, 133, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  41,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  49,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  50,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  55,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  56,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  60,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  64,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  68,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  71,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  83,  54, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  86,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  91,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206,  96,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 206, 105,  41, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  12, 132, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  15, 128, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  40,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  43,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  44,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  45,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  52,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  58,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  62,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  66,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  73,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  76,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207,  79,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 104,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 207, 134,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  14, 130, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  47,  82, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  48,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  49,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  54,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  55,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  60,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  64,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  71,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  83,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  86,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  91,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208,  96,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 208, 103,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  40,  89, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  43,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  44,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  51,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  52,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  57,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  62,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  69,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  76,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209,  79,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 102,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 115,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 117,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 119,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 121,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 209, 123,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,   6, 152, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,   7, 148, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,   9, 144, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  10, 138, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  11, 136, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  13, 133, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  16, 129, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  17, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  18, 121, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  19, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  21, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  24, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  27, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  30, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  33, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  36,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  37,  93, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  39,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  42,  88, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  46,  84, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  47,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  48,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  54,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  59,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  67,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  71,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  74,  62, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  83,  56, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  86,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  91,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210,  96,  48, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210, 114,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210, 126,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 210, 128,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,   5, 156, "Bou" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  12, 135, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  41,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  50,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  51,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  56,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  57,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  61,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  65,  69, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  69,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  76,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  79,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  90,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211,  95,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211, 102,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 211, 113,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  15, 132, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  43,  88, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  44,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  45,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  46,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  53,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  54,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  59,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  63,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  67,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  74,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  83,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212,  86,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 101,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 110,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 112,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 212, 132,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  40,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  48,  84, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  49,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  50,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  56,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  61,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  65,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  69,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  72,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  90,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213,  95,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213, 109,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213, 135,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 213, 144,  25, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,   7, 151, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  11, 139, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  13, 136, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  43,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  44,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  45,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  52,  81, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  53,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  58,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  63,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  67,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  74,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  77,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  80,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  83,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214,  86,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214, 101,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 214, 108,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,   8, 147, "Ayd" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  16, 133, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  17, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  19, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  21, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  47,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  48,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  49,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  55,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  56,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  60,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  65,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  72,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  90,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215,  95,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215, 100,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 215, 139,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   5, 160, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,   9, 145, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  10, 143, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  12, 139, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  24, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  27, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  30, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  33, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  36, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  39,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  42,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  51,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  52,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  58,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  62,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  70,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  77,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  80,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  83,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  86,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216,  94,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 216, 108,  44, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  15, 136, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  43,  91, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  45,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  46,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  47,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  54,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  55,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  60,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  64,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  68,  70, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  72,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  75,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217,  90,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 100,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 107,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 122,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 124,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 217, 126,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  11, 142, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  14, 138, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  40,  95, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  49,  86, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  50,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  51,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  57,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  62,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  66,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  70,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  77,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  80,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  83,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  86,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218,  94,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 106,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 119,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 121,  38, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 129,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 131,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 218, 144,  27, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,   5, 162, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,   7, 155, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  13, 140, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  43,  92, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  44,  91, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  45,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  46,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  53,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  54,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  59,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  64,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  68,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  75,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219,  90,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219, 100,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219, 116,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219, 118,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 219, 134,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   6, 160, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   8, 150, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,   9, 148, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  16, 137, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  17, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  19, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  21, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  23, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  48,  88, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  49,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  50,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  56,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  57,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  61,  77, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  62,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  66,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  70,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  73,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  80,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  83,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  94,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220,  99,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220, 106,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220, 115,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 220, 137,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  10, 147, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  12, 143, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  52,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  53,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  59,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  68,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  75,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  78,  65, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  87,  59, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221,  90,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221, 105,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 221, 114,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  15, 140, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  24, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  27, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  30, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  33, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  36, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  39, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  42,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  43,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  45,  92, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  46,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  47,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  48,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  55,  83, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  56,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  61,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  65,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  73,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  80,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  83,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  94,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222,  99,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222, 113,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 222, 141,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,   9, 150, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  14, 142, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  40,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  50,  88, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  51,  87, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  52,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  58,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  63,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  67,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  71,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  78,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  87,  60, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223,  90,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223, 105,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 223, 112,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,   8, 153, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  11, 147, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  44,  94, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  45,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  46,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  47,  91, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  54,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  55,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  60,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  61,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  65,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  69,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  73,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  76,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  94,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224,  99,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224, 104,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224, 111,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 224, 145,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  13, 145, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  19, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  21, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  23, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  25, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  43,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  49,  90, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  50,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  51,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  57,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  58,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  63,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  67,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  71,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  78,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  81,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  84,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  87,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  90,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225,  98,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225, 127,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225, 129,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 225, 131,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,   5, 168, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,   6, 163, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,   7, 161, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  16, 142, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  17, 136, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  53,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  54,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  60,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  65,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  69,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  76,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226,  94,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 104,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 111,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 122,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 124,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 126,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 134,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 226, 149,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,   9, 153, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  10, 152, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  12, 148, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  43,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  47,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  48,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  49,  91, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  50,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  56,  85, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  57,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  62,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  67,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  74,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  81,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  84,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  87,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  90,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227,  98,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 103,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 110,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 121,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 137,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 227, 139,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,   8, 156, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  11, 150, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  15, 145, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  24, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  27, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  30, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  33, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  36, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  39, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  40, 101, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  42, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  45,  96, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  52,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  53,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  59,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  60,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  64,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  72,  73, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  76,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  79,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228,  94,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 228, 120,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  44,  97, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  47,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  48,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  55,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  56,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  62,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  66,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  70,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  74,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  81,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  84,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  87,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  90,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229,  98,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229, 103,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229, 110,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229, 119,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 229, 143,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,   8, 157, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  14, 148, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  43,  99, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  46,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  50,  92, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  51,  91, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  52,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  58,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  59,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  64,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  68,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  72,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  79,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230,  94,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230, 109,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230, 118,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 230, 146,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  54,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  55,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  61,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  66,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  70,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  74,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  77,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  84,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  87,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  90,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231,  98,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231, 103,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 231, 117,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,   6, 168, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  47,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  48,  95, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  49,  94, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  50,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  51,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  57,  87, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  58,  86, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  63,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  68,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  72,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  79,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  82,  68, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232,  94,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232, 109,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232, 116,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 232, 150,  30, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  12, 153, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  53,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  54,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  60,  85, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  61,  84, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  65,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  70,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  77,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  84,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  87,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233,  98,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 103,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 108,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 115,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 233, 134,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,   7, 168, "DaH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  11, 155, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  21, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  24, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  27, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  30, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  33, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  36, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  39, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  42, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  45, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  46,  98, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  47,  97, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  48,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  49,  95, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  56,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  57,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  63,  83, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  67,  80, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  75,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  82,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  91,  63, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234,  94,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 102,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 127,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 129,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 131,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 133,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 137,  37, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 234, 139,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  17, 140, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  19, 136, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  43, 102, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  51,  94, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  52,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  53,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  65,  82, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  69,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  73,  76, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  77,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  80,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  87,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235,  98,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235, 108,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235, 115,  49, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235, 126,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235, 142,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 235, 155,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,   5, 176, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  47,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  55,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  56,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  67,  81, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  71,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  75,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  82,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  85,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  91,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236,  94,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236, 102,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236, 107,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236, 114,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236, 125,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 236, 145,  34, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,   6, 172, "BKW" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,   7, 170, "Ma" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  46, 100, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  49,  97, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  50,  96, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  51,  95, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  52,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  58,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  59,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  69,  80, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  73,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  80,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237,  98,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237, 124,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 237, 148,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  54,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  55,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  71,  79, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  75,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  78,  74, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  85,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  88,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  91,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238,  94,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 102,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 107,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 114,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 123,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 238, 160,  28, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  46, 101, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  49,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  50,  97, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  57,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  58,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  73,  78, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  80,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  83,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239,  98,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 113,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 122,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 239, 152,  32, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  10, 164, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  17, 144, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  19, 140, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  21, 136, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  24, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  27, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  30, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  33, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  36, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  39, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  42, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  43, 105, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  45, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  48, 100, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  52,  96, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  53,  95, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  54,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  60,  89, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  61,  88, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  78,  75, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  85,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  88,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  91,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240,  94,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240, 102,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240, 107,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 240, 121,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,   8, 166, "MTS" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  47, 101, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  56,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  57,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  76,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  80,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  83,  72, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241,  98,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241, 113,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241, 120,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 241, 156,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,   5, 180, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  49, 100, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  50,  99, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  51,  98, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  52,  97, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  53,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  59,  91, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  60,  90, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  78,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  88,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  91,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242,  94,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 102,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 107,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 112,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 119,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 132,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 134,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 136,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 138,  40, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 140,  39, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 142,  38, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 242, 144,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  46, 104, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  55,  95, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  56,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  62,  89, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  83,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  86,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243,  98,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 106,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 131,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 243, 147,  36, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  10, 166, "GW1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  49, 101, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  50, 100, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  51,  99, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  58,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  59,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  81,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  88,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244,  91,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244, 102,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244, 112,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244, 119,  51, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244, 130,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 244, 150,  35, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  19, 144, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  21, 140, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  53,  98, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  54,  97, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  55,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  83,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  86,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  95,  66, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245,  98,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245, 106,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245, 111,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245, 118,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 245, 129,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  17, 148, "XBZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  24, 136, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  27, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  30, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  33, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  36, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  39, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  42, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  45, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  48, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  57,  95, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  58,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246,  91,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246, 102,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246, 126,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246, 128,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 246, 154,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,   5, 184, "Bo1" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  49, 103, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  51, 101, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  52, 100, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  53,  99, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  54,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  60,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  61,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  86,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  89,  71, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  95,  67, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247,  98,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 106,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 111,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 118,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 125,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 157,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 247, 166,  29, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  46, 107, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  56,  97, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  57,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248,  84,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248, 102,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 248, 117,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  49, 104, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  50, 103, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  51, 102, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  52, 101, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  59,  95, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  60,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  82,  77, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  86,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  89,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  92,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  95,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249,  98,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249, 106,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249, 111,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249, 125,  50, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 249, 161,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,   6, 184, "Koh" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  54, 100, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  55,  99, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  56,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  62,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  63,  92, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250,  84,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 102,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 110,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 117,  55, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 124,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 137,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 139,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 141,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 143,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 145,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 250, 147,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  17, 149, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  58,  97, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  59,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  89,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  92,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  95,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251,  98,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251, 106,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251, 116,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251, 123,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251, 136,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 251, 152,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  18, 148, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  21, 144, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  22, 141, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  24, 140, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  27, 136, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  30, 132, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  33, 128, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  36, 124, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  39, 120, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  42, 116, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  45, 112, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  48, 108, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  49, 106, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  51, 104, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  61,  95, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  62,  94, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  82,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  83,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  84,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252,  87,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252, 102,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252, 110,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252, 135,  46, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 252, 166,  31, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  46, 110, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  57,  99, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  58,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  64,  93, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  89,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  92,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  95,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253,  98,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253, 106,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253, 116,  57, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253, 123,  53, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253, 132,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 253, 134,  47, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  43, 114, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  47, 109, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  50, 106, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  51, 105, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  60,  97, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  61,  96, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  83,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254,  87,  76, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254, 102,  66, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254, 110,  61, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254, 115,  58, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254, 122,  54, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 254, 131,  49, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  17, 152, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  19, 148, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  40, 118, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  44, 113, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  49, 108, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  85,  78, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  92,  73, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  95,  71, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255,  98,  69, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255, 106,  64, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255, 121,  55, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 255, 130,  50, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,   5, 192, "Bel" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,   7, 188, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,   8, 179, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  11, 176, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  15, 172, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  16, 171, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  18, 150, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  20, 147, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  22, 144, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  24, 141, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  26, 138, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  28, 135, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  32, 129, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  35, 126, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  37, 123, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  41, 117, "BZ" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  43, 115, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  46, 112, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  47, 110, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  48, 109, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  50, 107, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  51, 106, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  52, 105, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  54, 104, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  56, 103, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  57, 101, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  59,  99, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  60,  98, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  61,  97, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  62,  96, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  64,  95, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  65,  94, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  66,  93, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  68,  92, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  72,  91, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  76,  88, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  80,  87, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  81,  86, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  82,  82, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  83,  80, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  84,  79, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  87,  77, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  88,  76, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  90,  75, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  91,  74, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  94,  72, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256,  97,  70, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 100,  68, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 102,  67, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 103,  66, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 105,  65, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 108,  63, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 110,  62, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 111,  61, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 113,  60, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 115,  59, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 116,  58, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 118,  57, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 120,  56, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 123,  54, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 125,  53, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 127,  52, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 129,  51, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 132,  49, "Vx" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 134,  48, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 136,  47, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 138,  46, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 140,  45, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 142,  44, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 144,  43, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 146,  42, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 148,  41, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 150,  40, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 152,  39, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 155,  38, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 156,  37, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 159,  36, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 161,  35, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 163,  34, "VE" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 165,  33, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 167,  32, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 169,  31, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 173,  30, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 174,  29, "Var" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 177,  28, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 181,  27, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 185,  26, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 189,  24, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 193,  23, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 197,  22, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 201,  20, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 205,  19, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 207,  18, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 208,  17, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 211,  16, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 215,  15, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 219,  14, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 223,  12, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 227,  11, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 231,  10, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 232,   9, "BCH" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 235,   8, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 239,   7, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 243,   6, "XBC" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
+if YouWantThisCode( 256, 251,   3, "Ham" ) then
+	GUAVA_TEMP_VAR := false;
+fi;
diff --git a/tbl/refs.g b/tbl/refs.g
new file mode 100644
index 0000000..b5e8063
--- /dev/null
+++ b/tbl/refs.g
@@ -0,0 +1,1065 @@
+#############################################################################
+##
+#A  refs.g                  GUAVA library                       Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+##  This file contains a record, which fields are references used in the
+##  tables.
+##
+#H  @(#)$Id: refs.g,v 1.1.1.1 1998/03/19 17:31:43 lea Exp $
+##
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+##
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H  
+#H  $Log: refs.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:43  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way.
+#H  Lea Ruscio 19/3/98
+#H
+#H
+#H  Revision 1.2  1997/01/20 15:34:33  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H
+#H  Revision 1.2  1994/11/10  14:34:24  rbaart
+#H  Removed spaces
+#H
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H
+##
+GUAVA_REF_LIST := rec(
+ask	:= ["%T this reference is unknown, for more info",
+	    "%T contact A.E. Brouwer (aeb at cwi.nl)"],
+
+CLC	:= ["%A C.L. Chen",
+	    "%T On a (145,32) binary cyclic code",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 45",
+	    "%P 2546-2547",
+	    "%D Nov. 1999"],
+
+cy	:= ["%R Cyclic Code"],
+
+cyx	:= ["%R Construction X applied to cyclic Code"],
+
+XBZ	:= ["%R extended Blokh-Zyablov concatenated code"],
+
+XB	:= ["%R extended Blokh-Zyablov concatenated code"],
+
+X	:= ["%A N.J. Sloane, S.M. Reddy & C.L. Chen",
+	    "%T New binary codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-18",
+	    "%P 503-510",
+	    "%D Jul. 1972",
+	    "%O Construction X"],
+
+XX	:= ["%A W.O. Alltop",
+	    "%T A method of extending binary linear codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 30",
+	    "%P 871-872",
+	    "%D Nov. 1984",
+	    "%O Construction XX"],
+
+FP	:= ["%A A.B. Fontaine & W.W. Peterson",
+	    "%T Group code equivalence and optimum codes",
+	    "%J IRE Trans. Inform. Theory (Spec. Suppl.)",
+	    "%V IT-5",
+	    "%P 60-70",
+	    "%D May 1959"],
+
+QR	:= ["%R A quadratic residue code"],
+
+Wa	:= ["%A T.J. Wagner",
+	    "%T A remark concerning the minimum distance of binary group codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-11",
+	    "%P 458",
+	    "%D July 1965"],
+
+HP	:= ["%A A.A. Hashim & V.S. Pozdniakov",
+	    "%T Computerized search for linear binary codes",
+	    "%J Electronics Letters",
+	    "%V 12",
+	    "%P 350-351",
+	    "%D July 1976"],
+
+YH1	:= ["%A �yvind Ytrehus & Tor Helleseth",
+	    "%T There is no binary [25,8,10] code",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 36",
+	    "%P 695-696",
+	    "%D May 1990"],
+
+Si	:= ["%A J. Simonis",
+	    "%T Binary even [25,15,6] codes do not exist",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-33",
+	    "%P 151-153",
+	    "%D Jan. 1987"],
+
+Pi2	:= ["%A P. Piret",
+	    "%T Good linear codes of lengths 27 and 28",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-26",
+	    "%P 227",
+	    "%D Mar. 1980"],
+
+Ch0	:= ["%A C.L. Chen",
+	    "%T Construction of some binary linear codes of minimum distance five",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 37",
+	    "%P 1429",
+	    "%D Sep 1991"],
+
+Pu2	:= ["%A C.L.M. van Pul, [26,13,8] does not exist",
+	    "%R priv. comm",
+	    "%D 1985"],
+
+Ka	:= ["%A M. Karlin",
+	    "%T New binary coding results by circulants",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-15",
+	    "%P 81-92",
+	    "%D Jan. 1969"],
+
+DM	:= ["%A S.M. Dodunekov & N.L. Manev",
+	    "%T An improvement of the Griesmer bound for some small minimum distances",
+	    "%J Discr. Appl. Math.",
+	    "%V 12",
+	    "%P 103-114",
+	    "%D Oct. 1985"],
+
+BM	:= ["%A L.D. Baumert & R.J. McEliece",
+	    "%T A note on the Griesmer bound",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-19",
+	    "%P 134-135",
+	    "%D Jan. 1973"],
+
+XBC	:= ["%R Extended BCH code"],
+
+Ja	:= ["%A D.B. Jaffe",
+	    "%T Binary linear codes: new results on nonexistence",
+	    "%D 1996",
+	    "%O http://www.math.unl.edu/~djaffe/codes/code.ps.gz"],
+
+CS	:= ["%A Y. Cheng & N.J.A. Sloane",
+	    "%T Codes from symmetry groups",
+	    "%J SIAM J. Discrete Math.",
+	    "%V 2",
+	    "%P 28-37",
+	    "%D 1989"],
+
+vT3	:= ["%A H.C.A. van Tilborg",
+	    "%T The smallest length of binary 7-dimensional linear codes with prescribed minimum distance",
+	    "%J Discr. Math.",
+	    "%V 33",
+	    "%P 197-207",
+	    "%D 1981"],
+
+HY2	:= ["%A T. Helleseth & �. Ytrehus",
+	    "%T How to find a [33,8,14]-code",
+	    "%R Report in Informatics (preliminary version), Dept. of Informatics, Univ. of Bergen, Norway",
+	    "%D Nov. 1989"],
+
+He	:= ["%A P.W. Heijnen",
+	    "%T Er bestaat geen binaire [33,9,13] code",
+	    "%R Afstudeerverslag, T.U. Delft",
+	    "%D Oct. 1993"],
+
+DHM	:= ["%A S.M. Dodunekov, T. Helleseth, N. Manev & �. Ytrehus", 
+        "%T New bounds on binary linear codes of dimension eight",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-33",
+	    "%P 917-919",
+	    "%D Nov. 1987"],
+
+Pi	:= ["%A P. Piret",
+	    "%T Good block codes derived from cyclic codes",
+	    "%J Electronics Letters",
+	    "%V 10",
+	    "%P 391-392",
+	    "%D Sep. 1974"],
+
+BoV	:= ["%A I.G. Bouyukliev & Z.G. Varbanov",
+	    "%T Some results for linear binary codes with minimum distance 5 and 6",
+	    "%R email",
+	    "%D Oct. 2004"],
+
+Mo	:= ["%A M. Morii",
+	    "%R email comm",
+	    "%D Sept. 1993"],
+
+BE	:= ["%A J. Bierbrauer & Y. Edel",
+	    "%T New code parameters from Reed-Solomon subfield subcodes",
+	    "%J IEEE Trans. Inf. Th.",
+	    "%V 43",
+	    "%P 953-968",
+	    "%D 1997"],
+
+FB	:= ["%A P. Farkas & K. Br�hl",
+	    "%T Three best binary linear block codes of minimum distance fifteen",
+	    "%J IEEE Trans. Inf. Th.",
+	    "%V 40",
+	    "%P 949-951",
+	    "%D 1994"],
+
+Bou	:= ["%A I. Boukliev",
+	    "%T Some new bounds on minimum length for quaternary codes of dimension five",
+	    "%R preprint",
+	    "%D July 1994"],
+
+RR	:= ["%A V.V. Rao & S.M. Reddy",
+	    "%T A (48,31,8) linear code",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-19",
+	    "%P 709-711",
+	    "%D Sep. 1973"],
+
+BJV	:= ["%A I Bouyukliev, D.B. Jaffe & V. Vavrek",
+	    "%T The smallest length of eight-dimensional binary linear codes with prescribed minimum distance",
+	    "%R preprint",
+	    "%D 1999"],
+
+vT1	:= ["%A H.C.A. van Tilborg",
+	    "%T On quasi-cyclic codes with rate 1/m",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-24",
+	    "%P 628-630",
+	    "%D Sep. 1978"],
+
+BZ	:= ["%A E. L. Blokh & V. V. Zyablov",
+	    "%T Coding of generalized concatenated codes",
+	    "%J Probl. Inform. Transm.",
+	    "%V 10",
+	    "%P 218-222",
+	    "%D 1974"],
+
+Bo0	:= ["%A I Boukliev",
+	    "%R private comm",
+	    "%D 1995-1997"],
+
+Bel	:= ["%R Belov"],
+
+Gu9	:= ["%A T. A. Gulliver",
+	    "%R personal communications",
+	    "%D 1993-1998"],
+
+DJ	:= ["%A R. Dougherty & H. Janwa",
+	    "%T Covering radius computations for binary cyclic codes",
+	    "%J Math. Comput.",
+	    "%V 57",
+	    "%P 415-434",
+	    "%D July 1991"],
+
+GB5	:= ["%A T. A. Gulliver & V. K. Bhargava",
+	    "%T New optimal binary linear codes of dimensions 9 and 10",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 43",
+	    "%P 314-316",
+	    "%D 1997"],
+
+GG	:= ["%A B. Groneick & S. Grosse",
+	    "%T New binary codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 40",
+	    "%P 510-512",
+	    "%D 1994"],
+
+EB3	:= ["%A Y. Edel & J. Bierbrauer",
+	    "%T Inverting Construction Y1",
+	    "%R preprint",
+	    "%D 1997"],
+
+B2x	:= ["%A See A.E. Brouwer & T. Verhoeff",
+	    "%T An updated table of minimum-distance bounds for binary linear codes",
+	    "%J IEEE Trans. Inform. Th.",
+	    "%V 39",
+	    "%P 662-677",
+	    "%D 1993"],
+
+Pu	:= ["%A C.L.M. van Pul",
+	    "%T On bounds on codes",
+	    "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands",
+	    "%D Aug. 1982"],
+
+LC	:= ["%A M. Loeloeian & J. Conan",
+	    "%T A [55,16,19] binary Goppa code",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-30",
+	    "%P 773",
+	    "%D Sep. 1984"],
+
+Bro	:= ["%A A.E. Brouwer",
+	    "%T The linear programming bound for binary linear codes",
+	    "%J IEEE Trans. Inform. Th.",
+	    "%V 39",
+	    "%P 677-680",
+	    "%D 1993"],
+
+vT4	:= ["%A H.C.A. van Tilborg",
+	    "%T A proof of the nonexistence of a binary (55,7,26) code",
+	    "%R TH-Report 79-WSK-09, Techn. Hogeschool Eindhoven",
+	    "%D Nov. 1979"],
+
+Ja2	:= ["%A D. Jaffe",
+	    "%R email",
+	    "%D 970828, 970907, 970923, 971111, 980112, 980323"],
+
+MoY	:= ["%A M. Morii & T. Yoshimura",
+	    "%R email comm",
+	    "%D Nov 1993-Jan 1994"],
+
+BCH	:= ["%A T. Kasami & N. Tokura",
+	    "%T Some remarks on BCH bounds and minimum weights of binary primitive BCH codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-15",
+	    "%P 408-413",
+	    "%D May 1969"],
+
+SRC	:= ["%A N.J.A. Sloane, S.M. Reddy & C.L. Chen",
+	    "%T New binary codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-18",
+	    "%P 503-510",
+	    "%D July 1972"],
+
+We	:= ["%A S. Weijs",
+	    "%T A computer search for quasi-cyclic codes",
+	    "%R afstudeerverslag (M.Sc. Thesis), Techn. Univ. Eindhoven",
+	    "%D June 1997",
+	    "%O See also P. Heijnen, H. van Tilborg, T. Verhoeff & S. Weijs, Some new binary, quasi-cyclic codes, IEEE Trans. Inf. Th., to appear"],
+
+Ch	:= ["%A Y. Cheng",
+	    "%T New linear codes constructed by concatenating, extending, and shortening methods",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-33",
+	    "%P 719-721",
+	    "%D Sept. 1987"],
+
+CDJ	:= ["%A Huy T. Cao, Randall L. Dougherty & Heeralal Janwa",
+	    "%T A [55,16,19] binary Goppa code and related codes, having large minimum distance",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 37",
+	    "%P 1432",
+	    "%D Sep. 1991"],
+
+Hel	:= ["%A T. Helleseth",
+	    "%T A characterization of codes meeting the Griesmer bound",
+	    "%J Inform. & Control",
+	    "%V 50",
+	    "%P 128-159",
+	    "%D 1981"],
+
+Sa	:= ["%A Amir Said",
+	    "%R private comm",
+	    "%D 910510 and 911121"],
+
+GW2 := ["%A M. Grassl & G. White",
+        "%T New Codes from Chains of Quasi-cyclic Codes",
+        "%R ISIT",
+        "%D 2005"],
+
+GG1	:= ["%A B. Groneick & S. Grosse",
+	    "%R priv. comm. and comm. via W. Scharlau",
+	    "%D 1992-1993"],
+
+CZ	:= ["%A Chen Zhi",
+	    "%T Six new binary quasi-cyclic codes",
+	    "%J IEEE Trans. Inf. Theory",
+	    "%V 40",
+	    "%P 1666-1667",
+	    "%D 1994"],
+
+GB0	:= ["%A T. Aaron Gulliver & Vijay K. Bhargava",
+	    "%T Nine good rate (m-1)/pm quasi-cyclic codes",
+	    "%J IEEE Trans. Inform. Th.",
+	    "%V 38",
+	    "%P 1366-1369",
+	    "%D July 1991"],
+
+To	:= ["%A L.M.G.M. Tolhuizen",
+	    "%T On the optimal use and the construction of linear block codes",
+	    "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands",
+	    "%D Nov. 1986"],
+
+To2	:= ["%A Ludo M.G.M. Tolhuizen",
+	    "%T Two new binary codes obtained by shortening a generalized concatenated code",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 37",
+	    "%P 1705",
+	    "%D Nov. 1991"],
+
+ZL	:= ["%A V.A. Zinoviev & S.N. Litsyn",
+	    "%T Methods of code lengthening",
+	    "%J Problemy Peredachi Informatsii",
+	    "%V 18",
+	    "%P 29-42",
+	    "%D Oct-Dec 1982",
+	    "%O (English translation: pp. 244-254)"],
+
+EB2	:= ["%A Y. Edel & J. Bierbrauer",
+	    "%T Twisted BCH codes",
+	    "%J J. of Combinatorial Designs",
+	    "%V 5",
+	    "%P 377-389",
+	    "%D 1997"],
+
+BEx	:= ["%A J. Bierbrauer & Y. Edel",
+	    "%T New code parameters from Reed-Solomon subfield subcodes",
+	    "%J IEEE Trans. Inf. Th.",
+	    "%V 43",
+	    "%P 953-968",
+	    "%D 1997"],
+
+JS	:= ["%A D. Jaffe & J. Simonis",
+	    "%R email",
+	    "%D 970722, 980217"],
+
+GB1	:= ["%A T. A. Gulliver & V. K. Bhargava",
+	    "%T Two new rate $2/p$ binary quasi-cyclic codes",
+	    "%J IEEE Trans. Inf. Theory",
+	    "%V 40",
+	    "%P 1667-1668",
+	    "%D 1994"],
+
+BET	:= ["%A J. Bierbrauer, Y. Edel & L. Tolhuizen",
+	    "%T New codes via the lengthening of BCH codes with UEP codes",
+	    "%R preprint",
+	    "%D 1997"],
+
+Hg	:= ["%A H.J. Helgert",
+	    "%T Alternant codes",
+	    "%J Inform. Contr.",
+	    "%V 26",
+	    "%P 369-380",
+	    "%D Dec. 1974"],
+
+BDH	:= ["%A I. Boukliev, S. M. Dodunekov, T. Helleseth & �. Ytrehus",
+	    "%T On the [162,8,80;2] codes",
+	    "%R preprint",
+	    "%D 1996"],
+
+HS	:= ["%A H.J. Helgert & R.D. Stinaff",
+	    "%T Shortened BCH codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-19",
+	    "%P 818-820",
+	    "%D Nov. 1973"],
+
+BK	:= ["%A Detlef Berntzen & Peter Kemper",
+	    "%R email",
+	    "%D Feb. 1993"],
+
+LP	:= ["%R Follows from the linear programming bound"],
+
+DMa	:= ["%A S. M. Dodunekov & N. L. Manev",
+	    "%T An improvement of Greismer bound for some classes of distances",
+	    "%J Probl. Peredachi Informatsii",
+	    "%V 23",
+	    "%P 47-56",
+	    "%D 1987",
+	    "%O (Russian); English transl. in Problems of Inform. Transm. 23 (1987) 38-46"],
+
+Jo2	:= ["%A S.M. Johnson",
+	    "%T On upper bounds for unrestricted binary error-correcting codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-17",
+	    "%P 466-478",
+	    "%D July 1971"],
+
+DaH	:= ["%A Rumen Daskalov & Plamen Hristov",
+	    "%T New One-Generator Quasi-Cyclic Codes over GF(7)",
+	    "%R preprint",
+	    "%D Oct 2001",
+	    "%O R. Daskalov & P Hristov, New One-Generator Quasi-Twisted Codes over GF(5), (preprint) Oct. 2001. R. Daskalov & P Hristov, <i>New Quasi-Twisted Degenerate Ternary Linear Codes, preprint, Nov 2001. Email, 2002-2003"],
+
+AGP	:= ["%A A.O.L. Atkin, P. Gaborit, V. Pless & P Sole",
+	    "%R email",
+	    "%D 2001"],
+
+Roe	:= ["%A G. Roelofsen",
+	    "%T On Goppa and generalized Srivastava codes",
+	    "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands",
+	    "%D Aug. 1982"],
+
+Joplus	:= ["%A A.E. Brouwer",
+	    "%T The linear programming bound for binary linear codes",
+	    "%J IEEE Trans. Inform. Th.",
+	    "%V 39",
+	    "%P 677-680",
+	    "%D 1993"],
+
+Gp	:= ["%A V. D. Goppa",
+	    "%T A new class of linear error-correcting codes",
+	    "%J Problems of Info. Transmission",
+	    "%V 6",
+	    "%P 207-212",
+	    "%D 1970"],
+
+GB	:= ["%A T. Aaron Gulliver & Vijay K. Bhargava",
+	    "%T Some best rate 1/p and rate (p-1)/p systematic quasi-cyclic codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 37",
+	    "%P 552-555",
+	    "%D May 1991"],
+
+QC	:= ["%A A.E. Brouwer & T. Verhoeff",
+	    "%T An updated table of minimum-distance bounds for binary linear codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 39",
+	    "%P 662-677",
+	    "%D 1993"],
+
+MMT	:= ["%A Hideaki TANAKA, Masami MOHRI, Masakatu MORII",
+	    "%R email, comm",
+	    "%D Feb 2005"],
+
+EB1	:= ["%A Y. Edel & J. Bierbrauer",
+	    "%T Some codes related to BCH codes of low dimension",
+	    "%R preprint",
+	    "%D 1995"],
+
+BJK	:= ["%A Irina E. Bocharova, Rolf Johannesson, Boris D. Kudryashov & Per St�hl",
+	    "%T Tailbiting Codes: Bounds and Search Results",
+	    "%O IEEE, to appear"],
+
+BHJ	:= ["%A I. E. Bocharova, M. Handlery, R. Johannesson & B. D. Kudryashov",
+	    "%T Tailbiting Codes Obtained via Convolutional Codes with Large Slope",
+	    "%O to be submitted to IEEE"],
+
+RS	:= ["%A Rains & Sloane",
+	    "%T Self-dual codes",
+	    "%O in: Handbook of Coding theory, Table XI, p. 274"],
+
+Dup	:= ["%A Scott Duplichan",
+	    "%R email 000517"],
+
+Gur	:= ["%A Sugi Guritman",
+	    "%T Restrictions on the weight distribution of linear codes",
+	    "%R Thesis, Techn. Univ. Delft",
+	    "%D 2000"],
+
+BE3	:= ["%A J. Bierbrauer & Y. Edel",
+	    "%T Extending and lengthening BCH-codes",
+	    "%R preprint"],
+
+Su	:= ["%A Y. Sugiyama, M. Kasahara, S. Hirasawa & T. Namekawa",
+	    "%T Some efficient binary codes constructed using Srivastava codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-21",
+	    "%P 581-582",
+	    "%D Sep. 1975"],
+
+Vx	:= ["%R From the Varshamov-Gilbert bound together with construction X"],
+
+Jo	:= ["%R Follows from the Johnson bound"],
+
+GB6	:= ["%A T. A. Gulliver & V. K. Bhargava",
+	    "%T Improvements to the bounds on optimal binary linear codes of dimensions 11 and 12",
+	    "%J Ars Combinatoria",
+	    "%V 44",
+	    "%P 173-181",
+	    "%D 1996"],
+
+Kol	:= ["%A David R. Kohel",
+	    "%R email",
+	    "%D 1998-11-19"],
+
+Gu	:= ["%A T. A. Gulliver",
+	    "%R personal communications",
+	    "%D 1993-1998"],
+
+HvT	:= ["%A Tor Helleseth & Henk C.A. van Tilborg",
+	    "%T The classification of all (145,7,72) binary linear codes",
+	    "%R TH-Report 80-WSK-01, Techn. Hogeschool Eindhoven",
+	    "%D April 1980"],
+
+TTH	:= ["%A C. Tjhai, M. Tomlinson, R. Horan, M. Ahmed & M. Ambroze",
+	    "%T Linear codes derived from binary cyclic codes of length 151",
+	    "%R preprint",
+	    "%D 2005"],
+
+KSH	:= ["%A M. Kasahara, Y. Sugiyama, S. Hirasawa & T. Namekawa",
+	    "%T A new class of binary codes constructed on the basis of BCH codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V IT-21",
+	    "%P 582-585",
+	    "%D Sep. 1975"],
+
+BKW	:= ["%A Michael Braun, Axel Kohnert & Alfred Wassermann",
+	    "%T Optimal linear codes from matrix groups",
+	    "%R preprint",
+	    "%D Mar 2004",
+	    "%O and Construction of (sometimes) Optimal Linear Codes, email, Mar 2005"],
+
+Zwa	:= ["%A Johannes Zwanzger",
+	    "%R pers.comm",
+	    "%D Dec 2005"],
+
+BG3	:= ["%A M. C. Bhandari & M. S. Garg",
+	    "%T A new lower bound on the minimal length of a binary linear code",
+	    "%J Europ. J. Combin.",
+	    "%V 17",
+	    "%P 335-342",
+	    "%D 1996"],
+
+Sab	:= ["%A Roberta E. Sabin",
+	    "%R email",
+	    "%D Aug. 1994"],
+
+VE	:= ["%R From repeated Varshamov-Edel lengthening"],
+
+MYI	:= ["%A M. Morii, T. Yoshimura & Y. Itoh",
+	    "%R email comm",
+	    "%D Feb-Mar 1995"],
+
+PD	:= ["%A M. Grassl",
+	    "%R email",
+	    "%D 2001-03-21",
+	    "%O by puncturing a GG code at a word of the dual"],
+
+Rod	:= ["%A F. Rodier",
+	    "%T On the minimum distance of the duals of 4-error correcting extended BCH codes",
+	    "%R preprint",
+	    "%D Oct. 1997"],
+
+Lun	:= ["%A Anders Lundqvist",
+	    "%R pers.comm",
+	    "%D 1997"],
+
+HN	:= ["%A R. Hill & D.E. Newton",
+	    "%T Optimal ternary linear codes",
+	    "%J Des. Codes Cryptogr.",
+	    "%V 2",
+	    "%P 137-157",
+	    "%D 1992"],
+
+KP	:= ["%A F.R. Kschischang & S. Pasupathy",
+	    "%T Some ternary and quaternary codes and associated sphere packings",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 38",
+	    "%P 227-246",
+	    "%D 1992"],
+
+vE2	:= ["%A M. van Eupen",
+	    "%T Four nonexistence results for ternary linear codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 41",
+	    "%P 800-805",
+	    "%D 1995"],
+
+Hi1	:= ["%A R. Hill",
+	    "%T On the largest size of cap in S(5,3)",
+	    "%R Rend. Accad. Naz. Lincei (8) {bf 54}",
+	    "%D 1973",
+	    "%O 378-384"],
+
+Pel	:= ["%A G. Pellegrino",
+	    "%T Sul massimo ordine della calotte in $S_{4,3}$",
+	    "%J Matematiche",
+	    "%V 25",
+	    "%P 149-157",
+	    "%D 1971"],
+
+Ple	:= ["%A V. Pless",
+	    "%T On a new family of symmetry codes and related new 5-designs",
+	    "%J Bull. Amer. Math. Soc.",
+	    "%V 75",
+	    "%P 1339-1342",
+	    "%D 1969"],
+
+vE0	:= ["%A M. van Eupen",
+	    "%T Five new optimal ternary linear codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 40",
+	    "%P 193",
+	    "%D 1994"],
+
+HHM	:= ["%A N. Hamada, T. Helleseth, H.M. Martinsen & �. Ytrehus",
+	    "%T There is no ternary [28,6,16] code"],
+
+GuB	:= ["%A T. A. Gulliver",
+	    "%R personal communications",
+	    "%D 1993-1998"],
+
+GB4	:= ["%A T. A. Gulliver & V. K. Bhargava",
+	    "%T New good rate $(m-1)/pm$ ternary and quaternary cyclic codes",
+	    "%J Des. Codes Cryptogr.",
+	    "%V 7",
+	    "%P 223-233",
+	    "%D 1996"],
+
+BB	:= ["%A G. T. Bogdanova & I. G. Boukliev",
+	    "%T New linear codes of dimension 5 over GF(3)",
+	    "%R Proc. 4th Internat. Workshop on Algebraic and Combinatorial Coding Theory, Novgorod, Russia",
+        "%P 41-43",
+	    "%D Sept. 1994"],
+
+Bo1	:= ["%A I. Boukliev",
+	    "%T A method for construction of good linear codes",
+	    "%R preprint submitted to the International Workshop on Optimal Codes and Related Topics, Bulgaria, Sozopol",
+	    "%D 1995"],
+
+Be	:= ["%A G. F. M. Beenker",
+	    "%T A note on extended quadratic residue codes over GF(9) and their ternary images",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 30",
+	    "%P 403-405",
+	    "%D 1984"],
+
+vE1	:= ["%A M. van Eupen",
+	    "%T Some new results for ternary linear codes of dimension $5$ and $6$",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 41",
+	    "%P 2048-2051",
+	    "%D 1995"],
+
+BKn	:= ["%A Detlef Berntzen & Peter Kemper",
+	    "%R email",
+	    "%D Feb. 1993"],
+
+Glo	:= ["%A Volker von Gloeden",
+	    "%T Kubische Reste Codes",
+	    "%R Dipl",
+	    "%D marbeit, D�sseldorf, Oktober 2002"],
+
+Gu1	:= ["%A T. A. Gulliver",
+	    "%T New optimal ternary linear codes of dimension 6",
+	    "%J Ars Combin.",
+	    "%V 40",
+	    "%P 97-108",
+	    "%D 1995"],
+
+HJ	:= ["%A R. Hill and C. Jones",
+	    "%T The non-existence of ternary [47,6,29] codes"],
+
+CG	:= ["%A Y. Cheng & D. J. Guan",
+	    "%R pers. comm"],
+
+ARS	:= ["%A Nuh Aydin, Dijen Ray-Chaudhuri, Irfan Siap",
+	    "%R email",
+	    "%D 1999-2000"],
+
+Gu2	:= ["%A T. A. Gulliver",
+	    "%T New optimal ternary linear codes",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 41",
+	    "%P 1182-1185",
+	    "%D 1995"],
+
+D1	:= ["%R Code found by the (u|u+v) construction"],
+
+GO	:= ["%A T. A. Gulliver & P. R. J. �sterg�rd",
+	    "%T Improved bounds for ternary linear codes of dimension 7",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 43",
+	    "%P 1377-1381",
+	    "%D 1997"],
+
+Ha	:= ["%A N. Hamada",
+	    "%R pers. comm"],
+
+vEH	:= ["%A M. van Eupen & R. Hill",
+	    "%T An optimal ternary $[69,5,45]$ code and related codes",
+	    "%J Des. Codes Cryptogr.",
+	    "%V 4",
+	    "%P 271-282",
+	    "%D 1994"],
+
+Ma	:= ["%A T. Maruta",
+	    "%T On the nonexistence of linear codes attaining the Griesmer bound",
+	    "%J Geom. Dedicata",
+	    "%V 60",
+	    "%P 1-7",
+	    "%D 1996"],
+
+ASR	:= ["%A Nuh Aydin, Irfan Siap & Dijen Ray-Chaudhuri",
+	    "%T New ternary quasicyclic codes with improved minimum distances",
+	    "%R preprint",
+	    "%D 1999"],
+
+HW1	:= ["%A N. Hamada & Y. Watamori",
+	    "%T The nonexistence of $[71,5,46;3]$ codes",
+	    "%J J. Statist. Plann. Inf.",
+	    "%V 52",
+	    "%P 379-394",
+	    "%D 1996"],
+
+Bo3	:= ["%A I. Boukliev",
+	    "%T Some new optimal ternary linear codes",
+	    "%J Des. Codes Cryptogr.",
+	    "%V 12",
+	    "%P 5-11",
+	    "%D 1997"],
+
+Da	:= ["%A R. N. Daskalov",
+	    "%R pers. comm",
+	    "%D 1992-2005"],
+
+HHY	:= ["%A N. Hamada, T. Helleseth & �. Ytrehus",
+	    "%T On the construction of $[q^4+q^2-q,5,q^4-q^3+q^2-2q;q]$-codes meeting the Griesmer bound",
+	    "%J Des. Codes Cryptogr.",
+	    "%V 2",
+	    "%P 225-229",
+	    "%D 1992"],
+
+dB	:= ["%A M.A. de Boer",
+	    "%T A ternary [91,9,54] code",
+	    "%J preprint, 9504; A dual quaternary BCH code, 9502. Codes spanned by quadratic and Hermitian forms, IEEE Trans. Inform. Theory",
+	    "%V 42",
+	    "%P 1600-1604",
+	    "%D 1996"],
+
+Ed2	:= ["%A Y. Edel",
+	    "%T Extending and lengthening BCH-codes",
+	    "%R preprint",
+	    "%D 9710",
+	    "%O 07"],
+
+HH	:= ["%A N. Hamada & T. Helleseth",
+	    "%T The nonexistence of some ternary linear codes and update of the bounds for n_3(6,d), 1 <= d <= 243",
+	    "%R preprint",
+	    "%D 1999"],
+
+LX	:= ["%A San Ling & Chaoping Xing",
+	    "%T Polyadic Codes Revisited",
+	    "%R preprint",
+	    "%D 2003"],
+
+GO2	:= ["%A T. A. Gulliver & P. R. J. �sterg�rd",
+	    "%T Improved bounds for ternary linear codes of dimension 8",
+	    "%R preprint",
+	    "%D Nov. 1997"],
+
+DGM	:= ["%A R.N. Daskalov, T.A. Gulliver & E. Metodieva",
+	    "%T New Ternary Linear Codes",
+	    "%R IEEE Trans.Inf.Theory",
+        "%V 45",
+        "%P 1687-1688",
+	    "%D 1999",
+	    "%O no.5"],
+
+DM5	:= ["%A R. N. Daskalov & E. Metodieva",
+	    "%T The nonexistence of ternary [105,6,68] and [230,6,152] codes",
+	    "%O Designs, Codes and Cryptography, submitted"],
+
+Ed	:= ["%A Y. Edel",
+	    "%T Eine Verallgemeinerung von BCH-Codes",
+	    "%R Ph.D. Thesis, Univ. Heidelberg",
+	    "%D 1996"],
+
+Var	:= ["%A R.R. Varshamov",
+	    "%T Problems of the general theory of linear coding",
+	    "%R Ph.D. thesis, Moscow State Univ",
+	    "%D 1959",
+	    "%O (Russian) (from the Varshamov-Gilbert bound)"],
+
+Br2	:= ["%A A. E. Brouwer",
+	    "%T Linear spaces of quadrics and new good codes",
+	    "%R preprint",
+	    "%D 1997"],
+
+DG4	:= ["%A Rumen N. Daskalov & T. Aaron Gulliver",
+	    "%T New Minimum Distance Bounds for Linear Codes over Small Fields",
+	    "%R preprint",
+	    "%D March 2001"],
+
+Da2	:= ["%A R.N. Daskalov",
+	    "%T The linear programming bound for ternary linear codes",
+	    "%R IEEE International Symposium on Information Theory, Trondheim",
+        "%P 423",
+	    "%D 1994"],
+
+Koh	:= ["%A Axel Kohnert",
+	    "%R email",
+	    "%D 2006"],
+
+BEH	:= ["%A J. Barat, Y. Edel, R. Hill & L. Storme",
+	    "%T On complete caps in the projective geometriesover F3, II: New improvements.",
+	    "%R J. Combin. Math. and Combin. Computing 49",
+	    "%P 9-31",
+	    "%D 2004"],
+
+Lan	:= ["%A I.N. Landgev",
+	    "%T Nonexistence of $[143,5,94]_3$ codes",
+        "%R Proc. Internat. Workshop on Optimal Codes and Related Topics, Sozopol, Bulgaria",
+	    "%P 108-116", 
+	    "%D 1995"],
+
+Da9	:= ["%A R. N. Daskalov",
+	    "%T The sharpened linear programming bound for ternary linear codes",
+        "%R Mathematics and Education in Mathematics, Sofia",
+	    "%P 158-166", 
+	    "%D 1995"],
+
+Lg	:= ["%A I.N. Landgev",
+	    "%T The nonexistence of some ternary five-dimensional codes",
+	    "%O Des. Codes Cryptogr., to appear"],
+
+Da0	:= ["%A R. N. Daskalov",
+	    "%T New Ternary Linear Codes in Dimensions 18 and 19",
+	    "%R preprint",
+	    "%D Oct 2001"],
+
+Da6	:= ["%A R. N. Daskalov",
+	    "%T Some nonexistence results for 7-dimensional ternary linear codes",
+	    "%R preprint",
+	    "%D 1998"],
+
+DM4	:= ["%A R. N. Daskalov & E. Metodieva",
+	    "%T The Linear Programming Bound for Ternary and Quaternary Linear Codes",
+	    "%R preprint",
+	    "%D Jan 2002"],
+
+Da5	:= ["%A R. N. Daskalov",
+	    "%T The non-existence of ternary linear [158,6,104] and [203,6,134] codes",
+	    "%R preprint",
+	    "%D 1998"],
+
+BvE	:= ["%A A. E. Brouwer & M. van Eupen",
+	    "%T The correspondence between projective codes and 2-weight codes",
+	    "%R Designs, Codes and Cryptography 11",
+	    "%P 261-266",
+	    "%D 1997"],
+
+GH	:= ["%A P.P. Greenough & R. Hill",
+	    "%T Optimal linear codes over GF(4)",
+	    "%J Discrete Math.",
+	    "%V 125",
+	    "%P 187-199",
+	    "%D 1994"],
+
+MOS	:= ["%A F.J. MacWilliams, A.M. Odlyzko, N.J.A. Sloane & H.N. Ward",
+	    "%T Self-dual codes over GF(4)",
+	    "%J J. Comb. Th. (A)",
+	    "%V 25",
+	    "%P 288-318",
+	    "%D 1978"],
+
+Liz	:= ["%A P. Lizak",
+	    "%T Optimal quaternary linear codes",
+	    "%R Ph. D. Thesis, Univ. of Salford",
+	    "%D Nov. 1995"],
+
+IN	:= ["%A H. Itoh & M. Nakamichi",
+	    "%T SbEC-DbED codes derived from experiments on a computer for semiconductor memory systems",
+	    "%R Electronics and Communications in Japan", 
+        "%V 66-A", 
+	    "%D 1983",
+        "%O No.8"],
+
+Zi	:= ["%A Thomas Rehfinger, N. Suresh Babu & Karl-Heinz Zimmermann",
+	    "%T New Good Codes via CQuest -- A System for the Silicon Search of Linear Codes",
+        "%R Algebraic Combinatorics and Applications, A. Betten et al., eds, Springer",
+	    "%P 294-306",
+	    "%D 2001"],
+
+Da4	:= ["%A R. N. Daskalov",
+	    "%T Ten good quasicyclic 10-dimensional quaternary linear codes",
+	    "%R Optimal codes and related topics, Proc. Internat. Workshop on Optimal Codes and Related Topics, Sozopol, Bulgaria",
+        "%P 45-49",
+	    "%D 1995"],
+
+DG5	:= ["%A Rumen N. Daskalov & T. Aaron Gulliver",
+	    "%T New Quasi-Twisted Quaternary Linear Codes",
+	    "%R IEEE Trans. Inf. Theory", 
+        "%V 46", 
+	    "%P 2642-2643",
+	    "%O no.7"],
+
+Du3	:= ["%A I. Duursma",
+	    "%R email",
+	    "%D 050809"],
+
+DG	:= ["%A R.N. Daskalov & T.A. Gulliver",
+	    "%T New good quasi-cyclic ternary and quaternary codes",
+	    "%R IEEE Trans.Inf.Th.",
+        "%V 43",
+	    "%P 1647-1650",
+        "%D 1997",
+	    "%O no.5"],
+
+BMP	:= ["%A J. Bierbrauer, S. Marcugini & F. Pambianco",
+	    "%T A family of highly symmetric codes",
+	    "%R preprint",
+	    "%D 2002"],
+
+Ayd	:= ["%A Nuh Aydin",
+	    "%T preprint",
+	    "%D 2003"],
+
+GW1 := ["%A M. Grassl & G. White",
+        "%T New Good Linear Codes by Special Puncturings",
+        "%R ISIT 2004 Chicago USA",
+        "%D June 27 - July 2 2004"],
+
+LMH	:= ["%A I. Landgev, T. Maruta, R. Hill",
+	    "%T On the nonexistence of quaternary [51,4,37] codes",
+	    "%J Finite Fields Appl.",
+	    "%V 2",
+	    "%P 96-110",
+	    "%D 1996"],
+
+YC	:= ["%A Ying Cheng",
+	    "%R pers. comm. Sloane",
+	    "%D Feb. 1993"],
+
+HLa	:= ["%A R. Hill & I. Landgev",
+	    "%T On the nonexistence of some quaternary codes",
+	    "%R Proc. IMA conf. Finite Fields and their Applications",
+	    "%D June 1994"],
+
+Tol	:= ["%A L.M.G.M. Tolhuizen",
+	    "%T Cooperating error-correcting codes and their decoding",
+	    "%R Ph.D. thesis, Eindhoven Univ. of Techn",
+	    "%D June 1996"],
+
+Hi	:= ["%A R. Hill",
+	    "%T Caps and Groups",
+	    "%J Coll. Intern. Teorie Combin. Acc. Naz. Lincei, Roma 1973, Atti dei convegni Lincei",
+	    "%V 17",
+	    "%P 389-394",
+	    "%D 1976",
+	    "%O Rome"],
+
+DNX	:= ["%A Cunsheng Ding, Harald Niederreiter & Chaoping Xing",
+	    "%T Some new codes from algebraic curves",
+	    "%R IEEE Trans. On Inform. Theory",
+        "%V 46",
+	    "%P 2638-2642",
+	    "%D 2000"],
+
+Gu3	:= ["%A T. A. Gulliver",
+	    "%T New optimal quaternary linear codes of dimension 5",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 42",
+	    "%P 2260-2265",
+	    "%D 1996"],
+
+BDK	:= ["%A I. Boukliev, R. Daskalov & S. Kapralov",
+	    "%T Optimal quaternary codes of dimension five",
+	    "%J IEEE Trans. Inform. Theory",
+	    "%V 42",
+	    "%P 1228-1235",
+	    "%D 1996"],
+
+Da1	:= ["%A R.N. Daskalov",
+	    "%T The linear programming bound for quaternary linear codes",
+	    "%R Proceedings ACCT4'94, Novgorod, Russia", 
+	    "%P 74-77",
+	    "%D Sept. 11-17, 1994"],
+
+DM3	:= ["%A R. N. Daskalov & E. Metodieva",
+	    "%T Bounds on minimum length for quaternary linear codes in dimensions six and seven",
+	    "%R Mathematics and Education in Mathematics, Sofia",
+	    "%P 156-161",
+	    "%D 1994"]
+
+);
diff --git a/tbl/upperbd2.g b/tbl/upperbd2.g
new file mode 100644
index 0000000..6f2639d
--- /dev/null
+++ b/tbl/upperbd2.g
@@ -0,0 +1,650 @@
+#############################################################################
+##
+#A  upperbd2.g 		        GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+##  This file contains a reference and an upper bound on the minimum distance
+##  of a linear code over GF(2) of given word length and dimension.
+##
+#H  @(#)$Id: upperbd2.g,v 1.1.1.1 1998/03/19 17:31:44 lea Exp $
+##
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+##
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H
+#H  $Log: upperbd2.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:44  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way. 
+#H  Lea Ruscio 19/3/98
+#H
+#H
+#H  Revision 1.2  1997/01/20 15:34:39  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H
+##
+GUAVA_TEMP_VAR := [
+[ 12,  5,  4, "FP"],
+[ 25,  8,  9, "YH1"],
+[ 25, 15,  5, "Si"],
+[ 26, 13,  7, "Pu2"],
+[ 28,  6, 12, "BM"],
+[ 28,  8, 11, "DM"],
+[ 29, 11,  9, "Ja"],
+[ 29, 15,  7, "Ja"],
+[ 31,  7, 13, "vT3"],
+[ 33,  9, 12, "He"],
+[ 33, 12, 11, "Ja"],
+[ 34,  7, 15, "vT3"],
+[ 34, 24,  4, "BoV"],
+[ 35, 13, 11, "Ja"],
+[ 35, 17,  8, "Ja"],
+[ 36,  9, 14, "Ja"],
+[ 39, 10, 15, "Bou"],
+[ 39, 13, 13, "Ja"],
+[ 40,  6, 18, "BM"],
+[ 41,  8, 17, "BJV"],
+[ 42, 27,  7, "Ja"],
+[ 43, 13, 15, "Ja"],
+[ 43, 20, 11, "Ja"],
+[ 44,  8, 19, "DM"],
+[ 45, 18, 13, "Ja"],
+[ 48, 11, 19, "Ja"],
+[ 49,  9, 20, "Ja"],
+[ 49, 18, 15, "Ja"],
+[ 51, 14, 18, "Ja"],
+[ 53,  9, 23, "Bro"],
+[ 55,  7, 25, "vT4"],
+[ 55, 13, 21, "Ja"],
+[ 55, 39,  7, "Ja"],
+[ 57,  8, 25, "BJV"],
+[ 57, 12, 23, "Ja"],
+[ 58,  7, 27, "vT3"],
+[ 59, 14, 22, "Ja"],
+[ 59, 36, 10, "Ja"],
+[ 60,  7, 28, "Hel"],
+[ 60,  8, 27, "BJV"],
+[ 60, 21, 19, "Ja"],
+[ 63,  8, 28, "BJV"],
+[ 63, 11, 26, "Ja"],
+[ 64, 18, 22, "Ja"],
+[ 67,  8, 31, "DHM"],
+[ 67, 10, 29, "Ja"],
+[ 68, 15, 26, "Ja"],
+[ 68, 18, 24, "Ja"],
+[ 68, 48,  8, "Ja"],
+[ 69,  9, 31, "BGV"],
+[ 70, 46, 10, "Ja"],
+[ 70, 54,  6, "Ja"],
+[ 71, 13, 29, "Ja"],
+[ 72, 18, 26, "Ja"],
+[ 73,  7, 34, "Hel"],
+[ 73,  8, 33, "BJV"],
+[ 73, 12, 31, "Ja"],
+[ 74, 31, 20, "Ja"],
+[ 74, 34, 19, "Bro"],
+[ 74, 46, 12, "Ja"],
+[ 75, 28, 22, "Ja"],
+[ 76,  8, 35, "BJV"],
+[ 76, 15, 30, "Ja"],
+[ 76, 18, 28, "Ja"],
+[ 78, 46, 14, "Ja"],
+[ 79, 11, 34, "Ja"],
+[ 79, 28, 24, "Ja"],
+[ 79, 43, 16, "Ja"],
+[ 80,  8, 37, "BJV"],
+[ 80, 18, 30, "Ja"],
+[ 80, 25, 26, "Ja"],
+[ 80, 55, 10, "Ja"],
+[ 81, 60,  8, "Ja"],
+[ 82, 42, 18, "Ja"],
+[ 83,  8, 39, "DHM"],
+[ 83, 10, 37, "Ja"],
+[ 83, 39, 20, "Ja"],
+[ 83, 54, 12, "Ja"],
+[ 84, 15, 34, "Ja"],
+[ 84, 24, 29, "Bro"],
+[ 85,  7, 40, "Hel"],
+[ 85, 10, 38, "Ja"],
+[ 86, 13, 36, "Ja"],
+[ 87, 11, 38, "Ja"],
+[ 87, 38, 23, "Bro"],
+[ 88,  7, 42, "Hel"],
+[ 88,  8, 41, "BJV"],
+[ 88, 24, 31, "Bro"],
+[ 89, 36, 25, "Bro"],
+[ 89, 55, 15, "BK"],
+[ 90, 19, 35, "LP"],
+[ 90, 77,  5, "BK"],
+[ 91,  8, 43, "DMa"],
+[ 91, 49, 19, "BK"],
+[ 91, 53, 17, "Jo2"],
+[ 91, 74,  6, "Joplus"],
+[ 92, 24, 33, "Bro"],
+[ 92, 31, 29, "Bro"],
+[ 92, 35, 27, "Bro"],
+[ 93, 15, 39, "Bro"],
+[ 93, 18, 37, "Bro"],
+[ 93, 21, 35, "Bro"],
+[ 94, 13, 40, "Ja"],
+[ 94, 29, 31, "Bro"],
+[ 95,  8, 45, "DHM"],
+[ 95, 49, 21, "BK"],
+[ 96,  9, 44, "Ja"],
+[ 96, 11, 43, "Bro"],
+[ 96, 46, 23, "LP"],
+[ 96, 69, 11, "LP"],
+[ 97, 21, 37, "Bro"],
+[ 97, 28, 33, "Bro"],
+[ 97, 43, 25, "Bro"],
+[ 97, 66, 13, "BK"],
+[ 98,  8, 47, "DM"],
+[ 98, 19, 39, "Bro"],
+[ 98, 25, 35, "Bro"],
+[ 98, 40, 27, "Bro"],
+[ 98, 63, 15, "LP"],
+[ 99, 10, 45, "Ja"],
+[ 99, 14, 42, "Ja"],
+[100,  9, 47, "Bro"],
+[100, 17, 41, "Bro"],
+[100, 34, 31, "Bro"],
+[100, 77,  9, "LP"],
+[101, 21, 39, "Bro"],
+[101, 39, 29, "Bro"],
+[101, 58, 19, "Jo2"],
+[102, 10, 47, "Bro"],
+[102, 13, 44, "Ja"],
+[102, 25, 37, "Bro"],
+[102, 63, 17, "LP"],
+[103, 33, 33, "Bro"],
+[103, 56, 21, "BK"],
+[104, 11, 47, "Ja"],
+[104, 17, 43, "Bro"],
+[104, 20, 41, "Bro"],
+[104, 30, 35, "Bro"],
+[105, 54, 23, "BK"],
+[106, 25, 39, "Bro"],
+[107, 16, 45, "Bro"],
+[107, 48, 27, "LP"],
+[107, 52, 25, "BK"],
+[108, 14, 47, "Ja"],
+[108, 20, 43, "Bro"],
+[108, 30, 37, "Bro"],
+[108, 45, 29, "LP"],
+[108, 76, 13, "BK"],
+[109, 24, 41, "Bro"],
+[109, 38, 33, "Bro"],
+[109, 42, 31, "Bro"],
+[109, 73, 15, "BK"],
+[110, 83, 10, "Joplus"],
+[111, 11, 50, "Ja"],
+[111, 16, 47, "Bro"],
+[111, 29, 39, "Bro"],
+[111, 63, 21, "BK"],
+[112, 20, 45, "Bro"],
+[112, 37, 35, "Bro"],
+[112, 72, 17, "BK"],
+[113, 24, 43, "Bro"],
+[113, 27, 41, "Bro"],
+[113, 34, 37, "Bro"],
+[113, 69, 19, "Jo2"],
+[114, 62, 23, "BK"],
+[114, 96,  6, "Joplus"],
+[115, 16, 49, "Bro"],
+[115, 22, 45, "Bro"],
+[115, 59, 25, "BK"],
+[116, 11, 53, "Ja"],
+[116, 14, 51, "Ja"],
+[116, 20, 47, "Bro"],
+[116, 26, 43, "Bro"],
+[117, 34, 39, "Bro"],
+[117, 49, 31, "LP"],
+[117, 57, 27, "BK"],
+[118, 31, 41, "Bro"],
+[118, 42, 35, "Bro"],
+[118, 46, 33, "LP"],
+[118, 54, 29, "BK"],
+[119,  8, 57, "DMa"],
+[119, 11, 55, "Bro"],
+[119, 13, 53, "Ja"],
+[119, 16, 51, "Bro"],
+[119, 22, 47, "Bro"],
+[119, 39, 37, "Bro"],
+[119, 95,  9, "BK"],
+[120, 20, 49, "Bro"],
+[120, 26, 45, "Bro"],
+[121, 12, 55, "Bro"],
+[121, 72, 21, "BK"],
+[121, 84, 15, "BK"],
+[121, 88, 13, "LP"],
+[122, 18, 51, "Bro"],
+[122, 21, 49, "Bro"],
+[122, 31, 43, "Bro"],
+[122, 69, 23, "LP"],
+[122, 82, 16, "Joplus"],
+[123,  8, 59, "BJV"],
+[123, 16, 53, "Bro"],
+[123, 39, 39, "Bro"],
+[124, 14, 55, "Ja"],
+[124, 26, 47, "Bro"],
+[124, 36, 41, "Bro"],
+[124, 79, 19, "BK"],
+[125, 30, 45, "Bro"],
+[125, 64, 27, "BK"],
+[125, 68, 25, "BK"],
+[126, 10, 59, "Ja"],
+[126, 12, 57, "Ja"],
+[126, 18, 53, "Bro"],
+[126, 21, 51, "Bro"],
+[126, 97, 11, "BK"],
+[126,112,  5, "BK"],
+[127, 16, 55, "Bro"],
+[127, 25, 49, "Bro"],
+[127, 35, 43, "Bro"],
+[127, 50, 35, "BK"],
+[127, 54, 33, "LP"],
+[127, 62, 29, "BK"],
+[129, 12, 59, "Ja"],
+[129, 23, 51, "BK"],
+[129, 30, 47, "LP"],
+[129, 44, 39, "LP"],
+[129, 48, 37, "LP"],
+[129, 60, 31, "LP"],
+[130, 18, 55, "BK"],
+[130, 21, 53, "BK"],
+[130, 27, 49, "BK"],
+[130, 34, 45, "LP"],
+[131, 11, 60, "Ja"],
+[131, 16, 57, "BK"],
+[131, 77, 23, "LP"],
+[132,  9, 63, "Gur"],
+[132, 14, 59, "Ja"],
+[132, 22, 53, "BK"],
+[132, 32, 47, "LP"],
+[132, 43, 41, "LP"],
+[132, 91, 16, "Jo"],
+[133, 12, 60, "Ja"],
+[133, 17, 57, "LP"],
+[133, 40, 43, "LP"],
+[133, 75, 25, "LP"],
+[133, 96, 14, "Jo"],
+[134, 11, 62, "Ja"],
+[134, 21, 55, "BK"],
+[134, 27, 51, "BK"],
+[135, 16, 59, "BK"],
+[135, 31, 49, "BK"],
+[135, 90, 18, "Jo"],
+[136, 12, 62, "Ja"],
+[136, 22, 55, "BK"],
+[136,103, 12, "Jo"],
+[137, 17, 59, "BK"],
+[137, 26, 53, "BK"],
+[138,  8, 66, "Hel"],
+[138, 21, 57, "BK"],
+[138, 89, 20, "Jo"],
+[139, 16, 61, "BK"],
+[139, 31, 51, "BK"],
+[140, 14, 63, "Ja"],
+[140, 22, 57, "BK"],
+[140, 28, 53, "BK"],
+[141, 17, 61, "BK"],
+[141, 26, 55, "BK"],
+[141,117,  8, "Jo"],
+[142, 21, 59, "BK"],
+[143, 16, 63, "BK"],
+[144, 22, 59, "BK"],
+[144, 28, 55, "BK"],
+[145, 17, 63, "BK"],
+[145, 26, 57, "BK"],
+[145, 99, 18, "Jo"],
+[145,103, 16, "Jo"],
+[145,116, 10, "Jo"],
+[145,126,  6, "Jo"],
+[146, 21, 61, "BK"],
+[146, 23, 59, "BK"],
+[147, 11, 68, "Ja"],
+[147, 14, 66, "Ja"],
+[147, 16, 65, "BK"],
+[147, 18, 63, "BK"],
+[147, 27, 57, "BK"],
+[147, 97, 20, "Jo"],
+[147,109, 14, "Jo"],
+[148, 22, 61, "BK"],
+[149, 12, 68, "Ja"],
+[149, 32, 55, "BK"],
+[150, 11, 70, "Ja"],
+[150, 23, 61, "BK"],
+[150, 89, 26, "Jo"],
+[150, 96, 22, "Jo"],
+[151, 16, 67, "BK"],
+[151, 18, 65, "BK"],
+[151, 27, 59, "BK"],
+[152, 12, 70, "Ja"],
+[152, 22, 63, "BK"],
+[152,118, 12, "Jo"],
+[153, 17, 67, "BK"],
+[154, 23, 63, "BK"],
+[154, 29, 59, "BK"],
+[154, 96, 24, "Jo"],
+[155, 13, 71, "Ja"],
+[155, 16, 69, "BK"],
+[155, 18, 67, "BK"],
+[155, 27, 61, "BK"],
+[155, 33, 57, "BK"],
+[155, 37, 55, "BK"],
+[156, 22, 65, "BK"],
+[156, 91, 28, "Jo"],
+[157, 12, 72, "Ja"],
+[157, 17, 69, "BK"],
+[157,110, 18, "Jo"],
+[158, 23, 65, "BK"],
+[158, 29, 61, "BK"],
+[158,107, 20, "Jo"],
+[158,115, 16, "Jo"],
+[159, 16, 71, "BK"],
+[159, 18, 69, "BK"],
+[159, 27, 63, "BK"],
+[159, 33, 59, "BK"],
+[159, 97, 26, "Jo"],
+[160,105, 22, "Jo"],
+[161, 12, 75, "Ja"],
+[161, 92, 30, "Jo"],
+[162, 13, 74, "Ja"],
+[162,123, 14, "Jo"],
+[163, 97, 28, "Jo"],
+[163,104, 24, "Jo"],
+[164, 11, 77, "Ja"],
+[165, 10, 79, "Gur"],
+[165, 12, 76, "Ja"],
+[166, 11, 78, "Ja"],
+[166,136, 10, "Jo"],
+[167,104, 26, "Jo"],
+[168, 12, 78, "Ja"],
+[168, 14, 76, "Ja"],
+[168, 98, 30, "Jo"],
+[168,143,  8, "Jo"],
+[169,117, 20, "Jo"],
+[170, 13, 78, "Ja"],
+[170,122, 18, "Jo"],
+[171, 18, 75, "BK"],
+[171, 21, 73, "BK"],
+[171, 24, 71, "BK"],
+[171,104, 28, "Jo"],
+[171,115, 22, "Jo"],
+[171,136, 12, "Jo"],
+[172,128, 16, "Jo"],
+[173, 12, 80, "Ja"],
+[173, 17, 77, "BK"],
+[173, 19, 75, "BK"],
+[173,113, 24, "Jo"],
+[174, 23, 73, "BK"],
+[174, 26, 71, "BK"],
+[174,100, 32, "Jo"],
+[175, 16, 79, "BK"],
+[175, 18, 77, "BK"],
+[175, 33, 67, "BK"],
+[175, 39, 63, "BK"],
+[176, 12, 82, "Ja"],
+[176, 13, 81, "Ja"],
+[176, 24, 73, "BK"],
+[176,105, 30, "Jo"],
+[176,112, 26, "Jo"],
+[177, 17, 79, "BK"],
+[177, 19, 77, "BK"],
+[177, 28, 71, "BK"],
+[178, 10, 85, "Ja"],
+[178, 13, 82, "Ja"],
+[178,100, 34, "Jo"],
+[178,138, 14, "Jo"],
+[179, 18, 79, "BK"],
+[179, 23, 75, "BK"],
+[179, 29, 71, "BK"],
+[180, 10, 86, "Ja"],
+[180, 27, 73, "BK"],
+[180,112, 28, "Jo"],
+[180,166,  4, "Jo"],
+[181,  8, 88, "Hel"],
+[181, 12, 84, "Ja"],
+[181, 17, 81, "BK"],
+[181, 19, 79, "BK"],
+[181, 22, 77, "BK"],
+[181,106, 32, "Jo"],
+[181,128, 20, "Jo"],
+[182, 11, 86, "Ja"],
+[182,125, 22, "Jo"],
+[183, 16, 83, "BK"],
+[183, 18, 81, "BK"],
+[183, 23, 77, "BK"],
+[183,122, 24, "Jo"],
+[183,134, 18, "Jo"],
+[184,  8, 90, "Hel"],
+[184, 12, 86, "Ja"],
+[184, 13, 85, "Ja"],
+[184,112, 30, "Jo"],
+[184,164,  6, "Jo"],
+[185, 17, 83, "BK"],
+[185, 19, 81, "BK"],
+[185, 22, 79, "BK"],
+[185, 24, 77, "BK"],
+[186, 13, 86, "Ja"],
+[186,107, 34, "Jo"],
+[186,121, 26, "Jo"],
+[187,  9, 90, "Ja"],
+[187, 18, 83, "BK"],
+[187, 23, 79, "BK"],
+[187,142, 16, "Jo"],
+[188, 14, 86, "Ja"],
+[189, 12, 88, "Ja"],
+[189, 17, 85, "BK"],
+[189, 19, 83, "BK"],
+[189, 22, 81, "BK"],
+[189, 24, 79, "BK"],
+[189,113, 32, "Jo"],
+[189,120, 28, "Jo"],
+[190,104, 38, "Jo"],
+[191,  9, 92, "Ja"],
+[191, 13, 88, "Ja"],
+[192,109, 36, "Jo"],
+[192,156, 12, "Jo"],
+[192,161, 10, "Jo"],
+[193, 10, 92, "Ja"],
+[193, 12, 91, "BK"],
+[193,113, 34, "Jo"],
+[193,120, 30, "Jo"],
+[193,131, 24, "Jo"],
+[193,135, 22, "Jo"],
+[194, 20, 85, "BK"],
+[194, 25, 81, "BK"],
+[194, 28, 79, "BK"],
+[194,140, 20, "Jo"],
+[195,  9, 95, "BG3"],
+[195, 13, 90, "Ja"],
+[195, 23, 83, "BK"],
+[195, 32, 77, "BK"],
+[196, 10, 94, "Ja"],
+[196, 18, 87, "BK"],
+[196, 29, 79, "BK"],
+[196,109, 38, "Jo"],
+[196,130, 26, "Jo"],
+[197, 12, 92, "Ja"],
+[197, 17, 89, "BK"],
+[197, 22, 85, "BK"],
+[197, 24, 83, "BK"],
+[197, 33, 77, "BK"],
+[197,120, 32, "Jo"],
+[197,147, 18, "Jo"],
+[197,156, 14, "Jo"],
+[198, 28, 81, "BK"],
+[198,114, 36, "Jo"],
+[198,128, 28, "Jo"],
+[199, 13, 92, "Ja"],
+[199, 23, 85, "BK"],
+[199, 25, 83, "BK"],
+[200, 12, 94, "Ja"],
+[200, 18, 89, "BK"],
+[200, 21, 87, "BK"],
+[200, 29, 81, "BK"],
+[200, 35, 77, "BK"],
+[200,174,  8, "Jo"],
+[201,  8, 98, "Hel"],
+[201, 17, 91, "BK"],
+[201, 24, 85, "BK"],
+[201,120, 34, "Jo"],
+[201,127, 30, "Jo"],
+[202, 19, 89, "BK"],
+[203, 13, 95, "BK"],
+[203, 23, 87, "BK"],
+[203, 25, 85, "BK"],
+[204, 18, 91, "BK"],
+[204,116, 38, "Jo"],
+[204,141, 24, "Jo"],
+[204,158, 16, "Jo"],
+[205,  8,100, "Hel"],
+[205, 14, 95, "BK"],
+[205, 17, 93, "BK"],
+[205, 24, 87, "BK"],
+[205,146, 22, "Jo"],
+[206, 19, 91, "BK"],
+[206,121, 36, "Jo"],
+[206,128, 32, "Jo"],
+[206,139, 26, "Jo"],
+[207, 23, 89, "BK"],
+[207, 25, 87, "BK"],
+[207,136, 28, "Jo"],
+[207,152, 20, "Jo"],
+[208,  8,102, "Hel"],
+[208, 18, 93, "BK"],
+[208, 29, 85, "BK"],
+[208,113, 42, "Jo"],
+[209, 14, 97, "BK"],
+[209, 17, 95, "BK"],
+[209,117, 40, "Jo"],
+[209,127, 34, "Jo"],
+[210, 19, 93, "BK"],
+[210, 30, 85, "BK"],
+[211, 13, 99, "BK"],
+[211, 23, 91, "BK"],
+[211, 25, 89, "BK"],
+[211,122, 38, "Jo"],
+[211,136, 30, "Jo"],
+[212, 18, 95, "BK"],
+[212, 29, 87, "BK"],
+[213,162, 18, "Jo"],
+[214,118, 42, "Jo"],
+[214,128, 36, "Jo"],
+[214,135, 32, "Jo"],
+[215,178, 12, "Jo"],
+[216, 17, 99, "BK"],
+[216,123, 40, "Jo"],
+[217, 12,103, "BK"],
+[217, 14,101, "BK"],
+[217, 24, 93, "BK"],
+[217, 26, 91, "BK"],
+[217,149, 26, "Jo"],
+[217,153, 24, "Jo"],
+[217,175, 14, "Jo"],
+[218, 19, 97, "BK"],
+[218, 22, 95, "BK"],
+[218,128, 38, "Jo"],
+[218,135, 34, "Jo"],
+[218,146, 28, "Jo"],
+[219, 25, 93, "BK"],
+[219,159, 22, "Jo"],
+[220, 13,103, "BK"],
+[220, 18, 99, "BK"],
+[220, 20, 97, "BK"],
+[220, 31, 89, "BK"],
+[220,144, 30, "Jo"],
+[220,188, 10, "Jo"],
+[221, 24, 95, "BK"],
+[221, 26, 93, "BK"],
+[222, 19, 99, "BK"],
+[222,125, 42, "Jo"],
+[222,135, 36, "Jo"],
+[222,166, 20, "Jo"],
+[222,175, 16, "Jo"],
+[223,129, 40, "Jo"],
+[224,144, 32, "Jo"],
+[226,122, 46, "Jo"],
+[226,142, 34, "Jo"],
+[227,  9,111, "BG3"],
+[227,136, 38, "Jo"],
+[229,131, 42, "Jo"],
+[229,156, 28, "Jo"],
+[229,160, 26, "Jo"],
+[229,164, 24, "Jo"],
+[230, 11,111, "BK"],
+[230,178, 18, "Jo"],
+[231, 13,109, "BK"],
+[231, 16,107, "BK"],
+[231,143, 36, "Jo"],
+[231,154, 30, "Jo"],
+[232, 18,105, "BK"],
+[232, 20,103, "BK"],
+[232, 23,101, "BK"],
+[232,127, 46, "Jo"],
+[232,137, 40, "sp"],
+[232,171, 22, "Jo"],
+[232,211,  6, "Jo"],
+[233, 12,111, "BK"],
+[233, 17,107, "BK"],
+[233,152, 32, "Jo"],
+[234,132, 44, "Jo"],
+[234,142, 38, "Jo"],
+[236,137, 42, "Jo"],
+[236,151, 34, "Jo"],
+[237,210,  8, "Jo"],
+[238,181, 20, "Jo"],
+[239,143, 40, "Jo"],
+[239,150, 36, "Jo"],
+[240, 13,113, "BK"],
+[240, 17,111, "BK"],
+[240, 18,109, "BK"],
+[240,134, 46, "Jo"],
+[240,197, 14, "Jo"],
+[241,138, 44, "Jo"],
+[241,167, 28, "Jo"],
+[241,171, 26, "Jo"],
+[242,164, 30, "Jo"],
+[242,204, 12, "Jo"],
+[243,150, 38, "Jo"],
+[243,161, 32, "Jo"],
+[243,177, 24, "Jo"],
+[243,195, 16, "Jo"],
+[244,131, 50, "Jo"],
+[244,144, 42, "Jo"],
+[245, 12,117, "BK"],
+[245, 14,115, "BK"],
+[245, 17,113, "BK"],
+[245, 19,111, "BK"],
+[245, 21,109, "BK"],
+[245,159, 34, "Jo"],
+[246,139, 46, "Jo"],
+[247,  9,121, "DMa"],
+[247,150, 40, "Jo"],
+[247,185, 22, "Jo"],
+[247,194, 18, "Jo"],
+[248,144, 44, "Jo"],
+[249,159, 36, "Jo"],
+[250,136, 50, "Jo"],
+[251,  9,123, "Gur"],
+[252,141, 48, "Jo"],
+[252,151, 42, "Jo"],
+[252,158, 38, "Jo"],
+[252,173, 30, "Jo"],
+[252,177, 28, "Jo"],
+[253,145, 46, "Jo"],
+[253,170, 32, "Jo"],
+[254,183, 26, "Jo"],
+[254,221, 10, "sp"],
+[254,239,  4, "Jo"],
+[255,197, 20, "Jo"],
+[256,169, 34, "Jo"],
+[257,142, 50, "Jo"],
+[257,152, 44, "sp"],
+[257,159, 40, "sp"]];
diff --git a/tbl/upperbd3.g b/tbl/upperbd3.g
new file mode 100644
index 0000000..e836e87
--- /dev/null
+++ b/tbl/upperbd3.g
@@ -0,0 +1,911 @@
+#############################################################################
+##
+#A  upperbd3.g 		        GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+##  This file contains a reference and an upper bound on the minimum distance
+##  of a linear code over GF(3) of given word length and dimension.
+##
+#H  @(#)$Id: upperbd3.g,v 1.1.1.1 1998/03/19 17:31:45 lea Exp $
+##
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+##
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H
+#H  $Log: upperbd3.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:45  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way. 
+#H  Lea Ruscio 19/3/98
+#H
+#H
+#H  Revision 1.2  1997/01/20 15:34:43  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H
+##
+GUAVA_TEMP_VAR := [
+[ 15,  8,  5, "vE2"],
+[ 15,  9,  4, "vE2"],
+[ 16,  6,  7, "vE2"],
+[ 16,  7,  6, "vE2"],
+[ 21,  4, 12, "HN"],
+[ 21, 16,  3, "Pel"],
+[ 24,  8, 11, "BS"],
+[ 25, 13,  8, "LP"],
+[ 28,  6, 15, "HHM"],
+[ 33, 18,  9, "LP"],
+[ 35,  6, 20, "Bou"],
+[ 37,  6, 21, "Bou"],
+[ 37, 12, 17, "LP"],
+[ 40,  5, 24, "vE1"],
+[ 40, 27,  8, "LP"],
+[ 42, 21, 14, "BKn"],
+[ 46,  8, 26, "Gur"],
+[ 47,  6, 28, "HJ"],
+[ 50,  5, 31, "EHW"],
+[ 50,  6, 30, "HJL"],
+[ 50, 28, 14, "BKn"],
+[ 51, 40,  6, "BKn"],
+[ 53, 39,  8, "sp"],
+[ 54, 28, 17, "LP"],
+[ 55,  8, 32, "Gur"],
+[ 55,  9, 31, "Gur"],
+[ 55, 16, 26, "BKn"],
+[ 55, 30, 16, "BKn"],
+[ 56, 39, 10, "LP"],
+[ 57, 49,  4, "Jo"],
+[ 58,  7, 35, "BKn"],
+[ 59, 24, 23, "BKn"],
+[ 60, 22, 25, "BKn"],
+[ 60, 40, 12, "BKn"],
+[ 61, 17, 29, "BKn"],
+[ 61, 30, 20, "LP"],
+[ 62, 10, 35, "Gur"],
+[ 62, 14, 32, "BKn"],
+[ 64, 17, 31, "BKn"],
+[ 64, 30, 22, "BKn"],
+[ 64, 38, 16, "BKn"],
+[ 65, 14, 34, "BKn"],
+[ 65, 42, 14, "sp"],
+[ 66, 26, 26, "BKn"],
+[ 67,  7, 41, "BKn"],
+[ 67, 17, 33, "BKn"],
+[ 67, 38, 18, "BKn"],
+[ 68, 11, 38, "Gur"],
+[ 69,  6, 43, "Ma"],
+[ 69,  7, 42, "Gur"],
+[ 69, 16, 35, "LP"],
+[ 69, 20, 32, "BKn"],
+[ 69, 51, 10, "BKn"],
+[ 69, 54,  8, "BKn"],
+[ 70, 14, 37, "BKn"],
+[ 71,  5, 45, "HW1"],
+[ 71, 11, 40, "Gur"],
+[ 71, 35, 23, "LP"],
+[ 71, 39, 20, "BKn"],
+[ 71, 50, 12, "BKn"],
+[ 72, 20, 34, "BKn"],
+[ 72, 33, 25, "LP"],
+[ 73,  8, 44, "LP"],
+[ 73, 14, 39, "BKn"],
+[ 73, 28, 29, "BKn"],
+[ 73, 38, 22, "LP"],
+[ 74, 11, 42, "Da"],
+[ 74, 23, 33, "BKn"],
+[ 74, 26, 31, "BKn"],
+[ 74, 62,  6, "Jo"],
+[ 75,  5, 48, "HN"],
+[ 75, 17, 38, "Da"],
+[ 75, 51, 14, "BKn"],
+[ 76, 14, 41, "BKn"],
+[ 77, 11, 44, "BKn"],
+[ 77, 23, 35, "Da"],
+[ 77, 39, 24, "LP"],
+[ 78, 17, 40, "Da"],
+[ 78, 21, 37, "LP"],
+[ 78, 31, 30, "LP"],
+[ 78, 37, 26, "LP"],
+[ 78, 47, 19, "LP"],
+[ 78, 48, 18, "LP"],
+[ 78, 51, 16, "LP"],
+[ 79, 14, 43, "BKn"],
+[ 79, 15, 42, "Da"],
+[ 79, 35, 28, "LP"],
+[ 80, 11, 46, "BKn"],
+[ 80, 20, 39, "Da"],
+[ 80, 30, 32, "LP"],
+[ 80, 47, 20, "LP"],
+[ 81,  6, 51, "Ma"],
+[ 81, 18, 41, "Da"],
+[ 82,  8, 50, "BKn"],
+[ 82, 15, 44, "Da"],
+[ 82, 26, 36, "Da"],
+[ 82, 29, 34, "LP"],
+[ 83, 11, 48, "BKn"],
+[ 83, 21, 40, "Da"],
+[ 83, 24, 38, "Da"],
+[ 83, 46, 23, "LP"],
+[ 84, 13, 47, "LP"],
+[ 84, 18, 43, "Da"],
+[ 84, 44, 25, "LP"],
+[ 85,  8, 52, "BKn"],
+[ 85, 33, 33, "LP"],
+[ 85, 36, 31, "LP"],
+[ 85, 39, 29, "LP"],
+[ 85, 42, 27, "LP"],
+[ 86, 11, 50, "BKn"],
+[ 86, 12, 49, "Da"],
+[ 86, 15, 46, "Da"],
+[ 86, 21, 42, "Da"],
+[ 86, 64, 12, "Jo"],
+[ 87, 18, 45, "Da"],
+[ 87, 32, 35, "LP"],
+[ 87, 68, 10, "sp"],
+[ 88, 27, 39, "Da"],
+[ 88, 30, 37, "LP"],
+[ 88, 63, 14, "sp"],
+[ 89, 11, 52, "BKn"],
+[ 89, 12, 51, "BKn"],
+[ 89, 21, 44, "Da"],
+[ 89, 25, 41, "Da"],
+[ 89, 47, 26, "LP"],
+[ 90, 15, 49, "Da"],
+[ 91,  8, 56, "BKn"],
+[ 91, 24, 43, "Da"],
+[ 91, 37, 34, "LP"],
+[ 91, 40, 32, "LP"],
+[ 91, 46, 28, "LP"],
+[ 91, 63, 16, "Jo"],
+[ 91, 75,  8, "sp"],
+[ 92, 12, 53, "Da"],
+[ 92, 18, 48, "Da"],
+[ 92, 22, 45, "Da"],
+[ 92, 35, 36, "LP"],
+[ 93,  5, 60, "HH"],
+[ 93, 15, 51, "Da"],
+[ 93, 30, 40, "LP"],
+[ 93, 45, 30, "LP"],
+[ 94,  8, 58, "BKn"],
+[ 94, 28, 42, "Da"],
+[ 94, 34, 38, "LP"],
+[ 94, 58, 22, "sp"],
+[ 95, 11, 56, "BKn"],
+[ 95, 12, 55, "BKn"],
+[ 95, 18, 50, "Da"],
+[ 95, 22, 47, "Da"],
+[ 95, 64, 18, "sp"],
+[ 96,  6, 61, "Gur"],
+[ 96, 15, 53, "Da"],
+[ 96, 27, 44, "Da"],
+[ 97, 21, 49, "Da"],
+[ 97, 25, 46, "Da"],
+[ 98, 10, 59, "LP"],
+[ 98, 11, 58, "BKn"],
+[ 98, 12, 57, "BKn"],
+[ 98, 18, 52, "Da"],
+[ 98, 19, 51, "Da"],
+[ 98, 39, 37, "LP"],
+[ 98, 42, 35, "LP"],
+[ 98, 45, 33, "LP"],
+[ 99, 15, 55, "Da"],
+[ 99, 16, 54, "Da"],
+[ 99, 31, 43, "LP"],
+[ 99, 34, 41, "LP"],
+[ 99, 37, 39, "LP"],
+[ 99, 65, 20, "sp"],
+[ 99, 90,  4, "Jo"],
+[100,  8, 62, "BKn"],
+[100, 12, 58, "BKn"],
+[100, 22, 50, "Da"],
+[100, 25, 48, "Da"],
+[101, 11, 60, "BKn"],
+[101, 19, 53, "LP"],
+[101, 30, 45, "LP"],
+[102, 15, 57, "LP"],
+[102, 16, 56, "LP"],
+[102, 28, 47, "LP"],
+[103, 12, 60, "BKn"],
+[103, 22, 52, "LP"],
+[103, 26, 49, "LP"],
+[103, 77, 14, "sp"],
+[103, 80, 12, "sp"],
+[104, 11, 62, "BKn"],
+[104, 19, 55, "LP"],
+[104, 37, 42, "LP"],
+[104, 40, 40, "LP"],
+[104, 43, 38, "LP"],
+[104, 67, 22, "sp"],
+[104, 75, 16, "sp"],
+[105,  6, 67, "DM5"],
+[105, 15, 59, "BKn"],
+[105, 16, 58, "LP"],
+[105, 25, 51, "LP"],
+[105, 35, 44, "LP"],
+[105, 47, 36, "LP"],
+[106, 12, 62, "BKn"],
+[106, 19, 56, "LP"],
+[106, 22, 54, "LP"],
+[107, 10, 65, "LP"],
+[107, 11, 64, "BKn"],
+[107, 31, 48, "LP"],
+[107, 34, 46, "LP"],
+[107, 75, 18, "sp"],
+[107, 87, 10, "Jo"],
+[107, 94,  6, "sp"],
+[108,  6, 69, "Ma"],
+[108, 15, 61, "LP"],
+[108, 16, 60, "LP"],
+[108, 25, 53, "LP"],
+[108, 29, 50, "LP"],
+[108, 68, 24, "sp"],
+[109,  8, 68, "BKn"],
+[109,  9, 67, "BKn"],
+[109, 12, 64, "BKn"],
+[109, 19, 58, "LP"],
+[109, 23, 55, "LP"],
+[110, 11, 66, "BKn"],
+[110, 16, 61, "LP"],
+[110, 28, 52, "LP"],
+[110, 38, 45, "LP"],
+[110, 41, 43, "LP"],
+[110, 47, 39, "LP"],
+[110, 75, 20, "sp"],
+[111, 15, 63, "LP"],
+[111, 22, 57, "LP"],
+[111, 26, 54, "LP"],
+[112,  8, 70, "LP"],
+[112,  9, 69, "LP"],
+[112, 12, 66, "LP"],
+[112, 19, 60, "LP"],
+[112, 34, 49, "LP"],
+[112, 37, 47, "LP"],
+[112, 46, 41, "LP"],
+[113, 11, 68, "LP"],
+[113, 14, 65, "LP"],
+[113, 15, 64, "LP"],
+[113, 16, 63, "LP"],
+[113, 29, 53, "LP"],
+[113, 32, 51, "LP"],
+[113, 70, 26, "sp"],
+[114, 22, 59, "LP"],
+[114, 23, 58, "LP"],
+[114, 26, 56, "LP"],
+[114, 76, 22, "sp"],
+[115,  9, 71, "LP"],
+[115, 12, 68, "LP"],
+[115, 13, 67, "LP"],
+[115, 19, 62, "LP"],
+[115, 20, 61, "LP"],
+[115, 41, 46, "LP"],
+[116, 11, 70, "LP"],
+[116, 15, 66, "LP"],
+[116, 16, 65, "LP"],
+[116, 26, 57, "LP"],
+[116, 29, 55, "LP"],
+[116, 45, 44, "LP"],
+[116, 51, 40, "LP"],
+[117, 23, 60, "LP"],
+[117, 37, 50, "LP"],
+[117, 40, 48, "LP"],
+[118,  8, 74, "LP"],
+[118, 12, 70, "LP"],
+[118, 13, 69, "LP"],
+[118, 19, 64, "LP"],
+[118, 20, 63, "LP"],
+[118, 32, 54, "LP"],
+[118, 35, 52, "LP"],
+[118, 72, 28, "sp"],
+[118, 77, 24, "sp"],
+[119, 15, 68, "LP"],
+[119, 16, 67, "LP"],
+[119, 26, 59, "LP"],
+[119, 51, 42, "LP"],
+[119, 89, 16, "sp"],
+[119,102,  8, "sp"],
+[120,  9, 74, "Gur"],
+[120, 23, 62, "LP"],
+[120, 87, 18, "sp"],
+[120, 93, 14, "sp"],
+[121,  8, 76, "LP"],
+[121, 12, 72, "LP"],
+[121, 13, 71, "LP"],
+[121, 19, 66, "LP"],
+[121, 20, 65, "LP"],
+[121, 29, 58, "LP"],
+[121, 32, 56, "LP"],
+[121, 45, 47, "LP"],
+[122, 15, 70, "LP"],
+[122, 16, 69, "LP"],
+[122, 17, 68, "LP"],
+[122, 26, 61, "LP"],
+[122, 40, 51, "LP"],
+[122, 43, 49, "LP"],
+[122, 78, 26, "Jo"],
+[122, 86, 20, "Jo"],
+[123, 19, 67, "LP"],
+[123, 23, 64, "LP"],
+[123, 38, 53, "LP"],
+[123, 99, 12, "Jo"],
+[124,  8, 78, "LP"],
+[124,  9, 77, "LP"],
+[124, 10, 76, "LP"],
+[124, 12, 74, "LP"],
+[124, 13, 73, "LP"],
+[124, 16, 70, "LP"],
+[124, 21, 66, "LP"],
+[124, 29, 60, "LP"],
+[124, 36, 55, "LP"],
+[125, 15, 72, "LP"],
+[125, 23, 65, "LP"],
+[125, 26, 63, "LP"],
+[125, 27, 62, "LP"],
+[126, 12, 75, "LP"],
+[126, 19, 69, "LP"],
+[126, 20, 68, "LP"],
+[126, 32, 59, "LP"],
+[126, 35, 57, "LP"],
+[126, 87, 22, "sp"],
+[127,  8, 80, "LP"],
+[127,  9, 79, "LP"],
+[127, 10, 78, "LP"],
+[127, 16, 72, "LP"],
+[127, 26, 64, "LP"],
+[127, 30, 61, "LP"],
+[127, 43, 52, "LP"],
+[127, 46, 50, "LP"],
+[127, 80, 28, "sp"],
+[128, 15, 74, "LP"],
+[128, 23, 67, "LP"],
+[128, 41, 54, "LP"],
+[128, 50, 48, "LP"],
+[128, 76, 32, "sp"],
+[129, 12, 77, "LP"],
+[129, 13, 76, "LP"],
+[129, 19, 71, "LP"],
+[129, 20, 70, "LP"],
+[129, 36, 58, "LP"],
+[129, 39, 56, "LP"],
+[129, 87, 24, "sp"],
+[130, 10, 80, "LP"],
+[130, 16, 74, "LP"],
+[130, 26, 66, "LP"],
+[130, 27, 65, "LP"],
+[130, 30, 63, "LP"],
+[131, 18, 73, "Gur"],
+[131, 23, 69, "LP"],
+[131, 24, 68, "LP"],
+[132, 12, 79, "LP"],
+[132, 13, 78, "LP"],
+[132, 20, 72, "LP"],
+[132, 33, 62, "LP"],
+[132, 36, 60, "LP"],
+[132, 82, 30, "sp"],
+[133,  9, 83, "Da2"],
+[133, 16, 76, "Gur"],
+[133, 17, 75, "Gur"],
+[133, 78, 34, "Jo"],
+[133, 88, 26, "sp"],
+[133,112, 10, "sp"],
+[134, 11, 82, "Da2"],
+[134, 23, 71, "Da2"],
+[134, 24, 70, "Da2"],
+[135,  9, 84, "Gur"],
+[135, 12, 81, "Gur"],
+[135, 13, 80, "Gur"],
+[135, 20, 74, "Da2"],
+[135, 21, 73, "Da2"],
+[135,101, 18, "Jo"],
+[136,  6, 88, "Ha"],
+[136,  8, 86, "Gur"],
+[136, 16, 78, "Gur"],
+[136, 17, 77, "Gur"],
+[136, 23, 72, "Da2"],
+[136, 99, 20, "sp"],
+[136,105, 16, "sp"],
+[137, 20, 75, "Da2"],
+[137, 84, 32, "sp"],
+[137, 89, 28, "sp"],
+[137,130,  3, "BEH"],
+[138,  9, 86, "Gur"],
+[138, 12, 83, "Da2"],
+[138, 13, 82, "Gur"],
+[138, 98, 22, "sp"],
+[139,  8, 88, "Da2"],
+[139, 16, 80, "Gur"],
+[139, 17, 79, "Gur"],
+[139, 23, 74, "Da2"],
+[139, 24, 73, "Da2"],
+[140, 20, 77, "Da2"],
+[140,112, 14, "sp"],
+[141,  9, 88, "Gur"],
+[141, 12, 85, "Gur"],
+[141, 13, 84, "Gur"],
+[141, 90, 30, "Jo"],
+[141, 98, 24, "sp"],
+[142, 16, 82, "Gur"],
+[142, 17, 81, "Gur"],
+[142, 23, 76, "Da2"],
+[142, 24, 75, "Da2"],
+[142, 86, 34, "sp"],
+[143,  5, 93, "Lan"],
+[143, 19, 80, "Da2"],
+[143, 21, 78, "Da2"],
+[144,  9, 90, "Gur"],
+[144, 12, 87, "Gur"],
+[144, 13, 86, "Da2"],
+[144, 17, 82, "Gur"],
+[144, 98, 26, "sp"],
+[145,  8, 92, "Gur"],
+[145, 15, 85, "Da9"],
+[145, 16, 84, "Gur"],
+[145, 24, 77, "Da9"],
+[146, 13, 87, "Gur"],
+[146, 20, 81, "Da2"],
+[146, 21, 80, "Da2"],
+[146, 92, 32, "sp"],
+[147,  5, 96, "Lg"],
+[147,  9, 92, "Gur"],
+[147, 12, 89, "Gur"],
+[147, 16, 85, "Gur"],
+[147, 17, 84, "Gur"],
+[148, 25, 78, "Da9"],
+[148, 99, 28, "sp"],
+[148,123, 12, "sp"],
+[149, 13, 89, "Gur"],
+[149, 20, 83, "Da2"],
+[149, 21, 82, "Da2"],
+[150,  9, 94, "Da2"],
+[150, 12, 91, "Gur"],
+[150, 16, 87, "Gur"],
+[150, 17, 86, "Gur"],
+[150, 23, 81, "Da2"],
+[150, 24, 80, "Da9"],
+[150, 93, 34, "Jo"],
+[151, 20, 84, "Da2"],
+[151,113, 20, "Jo"],
+[152, 13, 91, "Gur"],
+[152, 90, 38, "sp"],
+[152,100, 30, "sp"],
+[152,111, 22, "sp"],
+[152,117, 18, "Jo"],
+[153,  9, 96, "Gur"],
+[153, 12, 93, "Gur"],
+[153, 16, 89, "Gur"],
+[153, 17, 88, "Gur"],
+[153, 23, 83, "Da2"],
+[153, 24, 82, "Da9"],
+[154,  6,100, "Ha"],
+[154,  8, 98, "Gur"],
+[154, 20, 86, "Da2"],
+[154, 21, 85, "Da2"],
+[154,110, 24, "sp"],
+[154,140,  6, "sp"],
+[155, 13, 93, "Gur"],
+[155, 95, 36, "Jo"],
+[156,  9, 98, "Gur"],
+[156, 12, 95, "Gur"],
+[156, 16, 91, "Gur"],
+[156, 17, 90, "Gur"],
+[156, 24, 84, "Da9"],
+[156, 25, 83, "Da9"],
+[156,101, 32, "sp"],
+[156,109, 26, "sp"],
+[156,124, 16, "sp"],
+[156,138,  8, "Jo"],
+[157,  6,102, "Ma"],
+[157,  8,100, "Da2"],
+[157, 20, 88, "Da2"],
+[157, 21, 87, "Da2"],
+[158, 13, 95, "Gur"],
+[158, 17, 91, "Gur"],
+[159,  9,100, "Da2"],
+[159, 12, 97, "Gur"],
+[159, 15, 94, "Gur"],
+[159, 16, 93, "Gur"],
+[159, 24, 86, "Da9"],
+[159, 25, 85, "Da9"],
+[159,109, 28, "sp"],
+[160,  8,102, "Gur"],
+[160, 20, 90, "Da2"],
+[160, 21, 89, "Da2"],
+[160, 97, 38, "sp"],
+[160,102, 34, "sp"],
+[161,  6,105, "Gur"],
+[161, 13, 97, "Gur"],
+[161, 14, 96, "Da2"],
+[161, 17, 93, "Gur"],
+[161, 24, 87, "Da9"],
+[162,  9,102, "Gur"],
+[162, 12, 99, "Gur"],
+[162, 16, 95, "Gur"],
+[162, 21, 90, "Da2"],
+[163,  8,104, "Gur"],
+[163, 11,101, "Gur"],
+[163, 20, 92, "Da2"],
+[163,110, 30, "sp"],
+[163,134, 14, "sp"],
+[164, 13, 99, "Gur"],
+[164, 14, 98, "Gur"],
+[164, 17, 95, "Gur"],
+[164, 24, 89, "Da9"],
+[165,  7,107, "Da6"],
+[165,  9,104, "Gur"],
+[165, 12,101, "Gur"],
+[165, 16, 97, "Gur"],
+[165, 21, 92, "Da2"],
+[165, 99, 40, "sp"],
+[165,104, 36, "sp"],
+[166,  8,106, "Da2"],
+[166, 20, 94, "Da2"],
+[166,110, 32, "Jo"],
+[166,144, 10, "sp"],
+[167, 13,101, "Da2"],
+[167, 14,100, "Da2"],
+[167, 17, 97, "Gur"],
+[167, 18, 96, "Da2"],
+[167, 24, 91, "Da9"],
+[167, 25, 90, "Da9"],
+[168,  9,106, "Da2"],
+[168, 12,103, "Gur"],
+[168, 16, 99, "Gur"],
+[168, 21, 94, "Da2"],
+[168,123, 24, "sp"],
+[168,126, 22, "sp"],
+[168,129, 20, "Jo"],
+[169, 13,102, "Gur"],
+[169,105, 38, "sp"],
+[170,  9,107, "Gur"],
+[170, 17, 99, "Gur"],
+[170, 18, 98, "Da2"],
+[170, 24, 93, "Da9"],
+[170, 25, 92, "Da9"],
+[170,111, 34, "Jo"],
+[170,122, 26, "sp"],
+[171, 12,105, "Gur"],
+[171, 16,101, "Gur"],
+[171, 20, 97, "Da2"],
+[171, 21, 96, "Da2"],
+[171,120, 28, "Jo"],
+[172,  8,110, "Gur"],
+[172, 13,104, "Gur"],
+[172, 25, 93, "Da9"],
+[172,136, 18, "sp"],
+[172,162,  4, "sp"],
+[173,  9,109, "Gur"],
+[173, 15,103, "Gur"],
+[173, 17,101, "Gur"],
+[173, 18,100, "Da2"],
+[173, 24, 95, "Da9"],
+[174, 12,107, "Gur"],
+[174, 20, 99, "Da2"],
+[174, 21, 98, "Da2"],
+[174, 22, 97, "Da2"],
+[174,107, 40, "sp"],
+[174,112, 36, "Jo"],
+[174,120, 30, "Jo"],
+[175,  8,112, "Da2"],
+[175, 13,106, "Gur"],
+[175, 17,102, "Da2"],
+[175, 24, 96, "Da2"],
+[175, 25, 95, "Da9"],
+[175,103, 44, "Jo"],
+[176,  9,111, "Gur"],
+[176, 15,105, "Gur"],
+[176, 21, 99, "Da2"],
+[177, 12,109, "Gur"],
+[177, 20,101, "Da2"],
+[177,120, 32, "Jo"],
+[177,151, 12, "sp"],
+[178,  8,114, "Gur"],
+[178, 13,108, "Gur"],
+[178, 14,107, "Gur"],
+[178, 17,104, "Da2"],
+[178, 18,103, "Da2"],
+[178, 24, 98, "Da9"],
+[178, 25, 97, "Da9"],
+[178,145, 16, "sp"],
+[179,  9,113, "Gur"],
+[179, 21,101, "Da2"],
+[179,109, 42, "sp"],
+[179,114, 38, "sp"],
+[180, 12,111, "Gur"],
+[181,  8,116, "Da9"],
+[181, 13,110, "Gur"],
+[181, 14,109, "Gur"],
+[181, 17,106, "Da2"],
+[181, 18,105, "Da2"],
+[181, 24,100, "Da9"],
+[181, 25, 99, "Da9"],
+[181,106, 46, "sp"],
+[181,121, 34, "sp"],
+[182, 21,103, "Da2"],
+[182, 22,102, "Da2"],
+[183,  9,115, "Gur"],
+[183, 11,114, "Gur"],
+[183, 12,113, "Gur"],
+[183, 25,100, "Da9"],
+[183,115, 40, "Jo"],
+[184,  8,118, "Da2"],
+[184, 13,112, "Gur"],
+[184, 14,111, "Gur"],
+[184, 17,108, "Da2"],
+[184, 18,107, "Da2"],
+[184,111, 44, "sp"],
+[184,135, 26, "sp"],
+[184,138, 24, "sp"],
+[184,141, 22, "Jo"],
+[185, 16,110, "Gur"],
+[185, 21,105, "Da2"],
+[185, 22,104, "Da2"],
+[185,122, 36, "sp"],
+[185,133, 28, "sp"],
+[186, 25,102, "Da9"],
+[187,  8,120, "Gur"],
+[187, 13,114, "Gur"],
+[187, 14,113, "Gur"],
+[187, 17,110, "Gur"],
+[187, 18,109, "Da2"],
+[187,132, 30, "sp"],
+[188,  9,119, "Gur"],
+[188, 16,112, "Da2"],
+[188, 21,107, "Da2"],
+[188, 22,106, "Da2"],
+[188,117, 42, "sp"],
+[188,148, 20, "sp"],
+[189, 12,117, "Gur"],
+[189, 25,104, "Da9"],
+[189,113, 46, "sp"],
+[189,123, 38, "sp"],
+[190, 13,116, "Gur"],
+[190, 14,115, "Gur"],
+[190, 15,114, "Gur"],
+[190, 17,112, "Gur"],
+[190, 18,111, "Da2"],
+[190,132, 32, "sp"],
+[190,160, 14, "sp"],
+[191,  7,124, "Da6"],
+[191, 20,110, "Da2"],
+[191, 21,109, "Da2"],
+[191, 22,108, "Da2"],
+[192,  9,122, "Da2"],
+[192, 10,121, "Da2"],
+[192, 12,119, "Gur"],
+[192, 14,116, "Gur"],
+[192, 18,112, "Da2"],
+[192, 24,107, "Da9"],
+[192, 25,106, "Da9"],
+[192,118, 44, "Jo"],
+[193, 13,118, "Gur"],
+[193, 17,114, "Gur"],
+[193, 22,109, "Da2"],
+[193,124, 40, "sp"],
+[193,132, 34, "sp"],
+[193,156, 18, "Jo"],
+[194,  8,125, "Gur"],
+[194,  9,123, "Gur"],
+[194, 21,111, "Da2"],
+[195, 11,122, "Gur"],
+[195, 12,121, "Gur"],
+[195, 14,118, "Gur"],
+[195, 18,114, "Da2"],
+[195, 25,108, "Da9"],
+[196, 13,120, "Gur"],
+[196, 17,116, "Gur"],
+[196, 21,112, "Da2"],
+[196, 22,111, "Da2"],
+[196,132, 36, "sp"],
+[197,  9,125, "Gur"],
+[197, 10,124, "Da2"],
+[197, 25,109, "Da9"],
+[197,120, 46, "Jo"],
+[198, 12,123, "Gur"],
+[198, 14,120, "Gur"],
+[198, 18,116, "Da2"],
+[198,126, 42, "sp"],
+[199, 13,122, "Gur"],
+[199, 17,118, "Gur"],
+[199, 21,114, "Da2"],
+[199, 22,113, "Da2"],
+[199,117, 50, "sp"],
+[200, 10,126, "Da2"],
+[200, 25,111, "Da9"],
+[200,133, 38, "sp"],
+[200,147, 28, "sp"],
+[200,150, 26, "sp"],
+[200,153, 24, "Jo"],
+[201, 12,125, "Gur"],
+[201, 14,122, "Gur"],
+[201, 17,119, "Gur"],
+[201, 18,118, "DM4"],
+[201,145, 30, "sp"],
+[202,122, 48, "sp"],
+[202,127, 44, "sp"],
+[202,143, 32, "Jo"],
+[203,  6,133, "Da5"],
+[203,  8,131, "Gur"],
+[203,  9,129, "Gur"],
+[203, 10,128, "Gur"],
+[204, 12,127, "Gur"],
+[204, 14,124, "Gur"],
+[204, 17,121, "Gur"],
+[204, 21,117, "DM4"],
+[204,134, 40, "sp"],
+[204,160, 22, "sp"],
+[204,170, 16, "sp"],
+[205,143, 34, "sp"],
+[206,  9,131, "Gur"],
+[206, 18,121, "DM4"],
+[206,183, 10, "sp"],
+[206,187,  8, "sp"],
+[207, 12,129, "Gur"],
+[207, 13,127, "Gur"],
+[207, 14,126, "Gur"],
+[207, 17,123, "Gur"],
+[207, 22,118, "DM4"],
+[207,124, 50, "sp"],
+[207,129, 46, "sp"],
+[207,134, 42, "Jo"],
+[208, 21,120, "DM4"],
+[208,143, 36, "sp"],
+[209, 18,123, "DM4"],
+[209, 23,118, "DM4"],
+[209, 25,117, "DM4"],
+[209,168, 20, "sp"],
+[210, 13,129, "Gur"],
+[210, 17,125, "Gur"],
+[210, 22,120, "DM4"],
+[211,130, 48, "sp"],
+[211,143, 38, "sp"],
+[212,  9,135, "Gur"],
+[212, 10,134, "Gur"],
+[212, 11,133, "Gur"],
+[212, 14,129, "Gur"],
+[212, 18,125, "DM4"],
+[212,126, 52, "sp"],
+[212,136, 44, "sp"],
+[212,185, 12, "Jo"],
+[213, 13,131, "Gur"],
+[213, 17,127, "Gur"],
+[213, 22,122, "DM4"],
+[213, 23,121, "DM4"],
+[214, 21,124, "DM4"],
+[214, 25,120, "DM4"],
+[214,143, 40, "Jo"],
+[215,  9,137, "Gur"],
+[215, 14,131, "Gur"],
+[215, 18,127, "DM4"],
+[215, 22,123, "DM4"],
+[215,161, 28, "Jo"],
+[216, 13,133, "Gur"],
+[216, 17,129, "Gur"],
+[216,132, 50, "sp"],
+[216,137, 46, "sp"],
+[216,159, 30, "sp"],
+[217, 25,122, "DM4"],
+[217,157, 32, "sp"],
+[217,166, 26, "sp"],
+[218, 11,137, "Gur"],
+[218, 14,133, "Gur"],
+[218, 18,129, "DM4"],
+[218, 19,128, "DM4"],
+[218, 21,125, "DM4"],
+[218,144, 42, "sp"],
+[218,155, 34, "sp"],
+[218,180, 18, "sp"],
+[219, 13,135, "Gur"],
+[219, 17,131, "Gur"],
+[219,171, 24, "Jo"],
+[220, 25,124, "DM4"],
+[220,138, 48, "Jo"],
+[220,154, 36, "Jo"],
+[221,  8,143, "Gur"],
+[221,  9,141, "Gur"],
+[221, 10,140, "Gur"],
+[221, 14,135, "Gur"],
+[221, 18,131, "DM4"],
+[221, 19,130, "DM4"],
+[221,134, 52, "sp"],
+[222, 13,137, "Gur"],
+[222, 16,134, "Gur"],
+[222, 17,133, "Gur"],
+[222,130, 56, "sp"],
+[222,145, 44, "sp"],
+[222,191, 14, "sp"],
+[222,207,  6, "sp"],
+[223, 18,132, "DM4"],
+[223,154, 38, "sp"],
+[224,  9,143, "Gur"],
+[224, 14,137, "Gur"],
+[224, 22,129, "DM4"],
+[224, 23,128, "DM4"],
+[224,179, 22, "Jo"],
+[225, 13,139, "Gur"],
+[225, 16,136, "Gur"],
+[225, 17,135, "Gur"],
+[225, 21,131, "DM4"],
+[225,140, 50, "sp"],
+[226, 10,143, "Gur"],
+[226,136, 54, "sp"],
+[226,146, 46, "sp"],
+[226,154, 40, "sp"],
+[227, 14,139, "Gur"],
+[227, 22,131, "DM4"],
+[227, 23,130, "DM4"],
+[227,132, 58, "sp"],
+[228, 13,141, "Gur"],
+[228, 17,137, "Gur"],
+[228, 21,133, "DM4"],
+[229, 10,145, "Gur"],
+[229, 18,136, "DM4"],
+[229, 19,135, "DM4"],
+[229, 22,132, "DM4"],
+[229,154, 42, "Jo"],
+[230,  6,151, "DM5"],
+[230,  9,147, "Gur"],
+[230, 14,141, "Gur"],
+[230, 15,140, "Gur"],
+[230,137, 56, "Jo"],
+[230,142, 52, "sp"],
+[230,147, 48, "Jo"],
+[231, 13,143, "Gur"],
+[231, 17,139, "Gur"],
+[232, 10,147, "Gur"],
+[232, 14,142, "Gur"],
+[232, 18,138, "DM4"],
+[232, 19,137, "DM4"],
+[232, 21,134, "DM4"],
+[232, 23,133, "DM4"],
+[232,168, 34, "sp"],
+[232,171, 32, "sp"],
+[232,174, 30, "sp"],
+[233,  9,149, "Gur"],
+[233,155, 44, "sp"],
+[233,178, 28, "sp"],
+[233,191, 20, "sp"],
+[234, 13,145, "Gur"],
+[234, 17,141, "Gur"],
+[234,143, 54, "Jo"],
+[234,167, 36, "sp"],
+[234,199, 16, "sp"],
+[235,  6,155, "Gur"],
+[235, 10,149, "Gur"],
+[235, 14,144, "Gur"],
+[235, 18,140, "DM4"],
+[235, 19,139, "DM4"],
+[235,139, 58, "Jo"],
+[235,149, 50, "sp"],
+[235,183, 26, "Jo"],
+[236,155, 46, "Jo"],
+[236,166, 38, "sp"],
+[237,  6,156, "Gur"],
+[237, 13,147, "Gur"],
+[237, 17,143, "Gur"],
+[238, 10,151, "Gur"],
+[238, 14,146, "Gur"],
+[238, 18,142, "DM4"],
+[238, 19,141, "DM4"],
+[238,165, 40, "Jo"],
+[239,  9,153, "Gur"],
+[239, 16,145, "Gur"],
+[239, 17,144, "Gur"],
+[239, 21,140, "DM4"],
+[239,145, 56, "sp"],
+[239,150, 52, "sp"],
+[240, 13,149, "Gur"],
+[240,191, 24, "sp"],
+[241, 10,153, "Gur"],
+[241, 14,148, "Gur"],
+[241, 18,144, "DM4"],
+[241, 19,143, "DM4"],
+[241,157, 48, "sp"],
+[241,165, 42, "sp"],
+[242, 16,147, "Gur"],
+[242, 17,146, "Gur"],
+[243,  8,158, "Gur"],
+[243, 13,151, "Gur"],
+[243, 19,144, "DM4"]];
diff --git a/tbl/upperbd4.g b/tbl/upperbd4.g
new file mode 100644
index 0000000..32294ba
--- /dev/null
+++ b/tbl/upperbd4.g
@@ -0,0 +1,819 @@
+#############################################################################
+##
+#A  upperbd4.g 		        GUAVA library                   Reinald Baart
+#A                                                       & Jasper Cramwinckel
+#A                                                          & Erik Roijackers
+##
+##  This file contains a reference and an upper bound on the minimum distance
+##  of a linear code over GF(4) of given word length and dimension.
+##
+#H  @(#)$Id: upperbd4.g,v 1.1.1.1 1998/03/19 17:31:45 lea Exp $
+##
+#Y  Copyright (C)  1994,  Vakgroep Algemene Wiskunde,  T.U. Delft,  Nederland
+##
+#H  CJ, 17 May 2006
+#H  Updated lower- and upper-bounds of minimum distance for GF(2),
+#H  GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006)
+#H
+#H  $Log: upperbd4.g,v $
+#H  Revision 1.1.1.1  1998/03/19 17:31:45  lea
+#H  Initial version of GUAVA for GAP4.  Development still under way. 
+#H  Lea Ruscio 19/3/98
+#H
+#H
+#H  Revision 1.2  1997/01/20 15:34:46  werner
+#H  Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4.
+#H
+#H  Revision 1.1  1994/11/10  14:29:23  rbaart
+#H  Initial revision
+#H
+##
+GUAVA_TEMP_VAR := [
+[ 10,  3,  6, "GH"],
+[ 18,  5, 10, "Liz"],
+[ 18, 14,  3, "cap"],
+[ 24,  6, 14, "Bou"],
+[ 27,  5, 17, "Bou"],
+[ 30, 24,  4, "BK"],
+[ 31,  5, 20, "Bou"],
+[ 32,  4, 22, "GH"],
+[ 39, 10, 22, "Gur"],
+[ 39, 30,  6, "LP"],
+[ 41,  6, 27, "Da"],
+[ 42, 37,  3, "EB4"],
+[ 45,  5, 31, "Liz"],
+[ 45,  6, 30, "Da"],
+[ 48, 36,  8, "LP"],
+[ 51,  4, 36, "LMH"],
+[ 51, 10, 31, "Gur"],
+[ 51, 15, 27, "LP"],
+[ 52, 35, 12, "LP"],
+[ 54,  8, 35, "Gur"],
+[ 54,  9, 34, "Gur"],
+[ 56,  4, 40, "HLa"],
+[ 57,  8, 37, "Gur"],
+[ 57, 42, 10, "LP"],
+[ 60, 25, 26, "LP"],
+[ 60, 29, 23, "LP"],
+[ 60, 53,  4, "LP"],
+[ 61, 22, 29, "LP"],
+[ 61, 35, 19, "LP"],
+[ 61, 40, 15, "LP"],
+[ 61, 41, 14, "LP"],
+[ 61, 51,  6, "LP"],
+[ 62, 15, 35, "LP"],
+[ 64, 12, 39, "BK"],
+[ 64, 39, 18, "LP"],
+[ 66,  9, 43, "Gur"],
+[ 66, 15, 38, "LP"],
+[ 66, 20, 34, "LP"],
+[ 66, 28, 28, "LP"],
+[ 66, 48, 12, "Jo"],
+[ 67, 11, 42, "Gur"],
+[ 67, 25, 31, "LP"],
+[ 67, 54,  8, "LP"],
+[ 68, 18, 37, "LP"],
+[ 69, 40, 21, "LP"],
+[ 69, 45, 17, "LP"],
+[ 70,  9, 46, "Gur"],
+[ 70, 42, 20, "LP"],
+[ 70, 47, 16, "LP"],
+[ 71, 11, 45, "LP"],
+[ 71, 12, 44, "Gur"],
+[ 71, 26, 33, "LP"],
+[ 72, 23, 36, "LP"],
+[ 72, 31, 30, "LP"],
+[ 72, 35, 27, "LP"],
+[ 73, 15, 43, "LP"],
+[ 73, 20, 39, "LP"],
+[ 74,  7, 51, "BK"],
+[ 74,  9, 49, "Gur"],
+[ 74, 42, 23, "LP"],
+[ 74, 53, 14, "LP"],
+[ 75, 12, 47, "BK"],
+[ 75, 13, 46, "Gur"],
+[ 75, 18, 42, "LP"],
+[ 75, 48, 19, "LP"],
+[ 75, 59, 10, "LP"],
+[ 77,  7, 53, "Gur"],
+[ 77, 16, 45, "LP"],
+[ 77, 21, 41, "LP"],
+[ 77, 25, 38, "LP"],
+[ 77, 29, 35, "LP"],
+[ 77, 37, 29, "LP"],
+[ 77, 41, 26, "LP"],
+[ 77, 46, 22, "LP"],
+[ 78,  9, 52, "Gur"],
+[ 78, 10, 51, "BK"],
+[ 78, 34, 32, "LP"],
+[ 79, 12, 50, "BK"],
+[ 79, 13, 49, "BK"],
+[ 79, 53, 18, "LP"],
+[ 80, 15, 48, "LP"],
+[ 80, 45, 25, "LP"],
+[ 81, 21, 44, "LP"],
+[ 81, 51, 21, "LP"],
+[ 82,  6, 58, "LP"],
+[ 82,  9, 55, "Gur"],
+[ 82, 10, 54, "BK"],
+[ 82, 18, 47, "LP"],
+[ 82, 23, 43, "LP"],
+[ 82, 27, 40, "LP"],
+[ 82, 31, 37, "LP"],
+[ 82, 63, 12, "LP"],
+[ 83, 12, 53, "BK"],
+[ 83, 13, 52, "LP"],
+[ 83, 36, 34, "LP"],
+[ 83, 44, 28, "LP"],
+[ 83, 58, 17, "LP"],
+[ 83, 59, 16, "LP"],
+[ 84, 15, 51, "LP"],
+[ 84, 16, 50, "LP"],
+[ 84, 21, 46, "LP"],
+[ 84, 41, 31, "LP"],
+[ 84, 50, 24, "LP"],
+[ 85,  6, 60, "Gur"],
+[ 85, 10, 56, "BK"],
+[ 86,  5, 62, "Gur"],
+[ 86,  8, 59, "LP"],
+[ 86,  9, 58, "Gur"],
+[ 86, 13, 54, "LP"],
+[ 86, 19, 49, "LP"],
+[ 86, 57, 20, "LP"],
+[ 87, 49, 27, "LP"],
+[ 88, 16, 53, "LP"],
+[ 88, 26, 45, "LP"],
+[ 88, 30, 42, "LP"],
+[ 88, 34, 39, "LP"],
+[ 88, 38, 36, "LP"],
+[ 88, 46, 30, "LP"],
+[ 88, 55, 23, "LP"],
+[ 89,  7, 62, "BK"],
+[ 89, 10, 59, "BK"],
+[ 89, 18, 52, "LP"],
+[ 89, 43, 33, "LP"],
+[ 89, 52, 26, "LP"],
+[ 90,  9, 61, "Gur"],
+[ 90, 13, 57, "LP"],
+[ 90, 24, 48, "LP"],
+[ 90, 58, 22, "LP"],
+[ 90, 62, 19, "LP"],
+[ 90, 68, 14, "LP"],
+[ 91, 16, 55, "LP"],
+[ 91, 21, 51, "LP"],
+[ 91, 30, 44, "LP"],
+[ 92, 35, 41, "LP"],
+[ 92, 65, 18, "Jo"],
+[ 93, 10, 62, "LP"],
+[ 93, 19, 54, "LP"],
+[ 93, 24, 50, "LP"],
+[ 93, 28, 47, "LP"],
+[ 93, 40, 38, "LP"],
+[ 94,  6, 67, "Gur"],
+[ 94, 13, 60, "LP"],
+[ 95, 16, 58, "LP"],
+[ 95, 22, 53, "LP"],
+[ 95, 46, 35, "LP"],
+[ 95, 50, 32, "LP"],
+[ 96, 10, 64, "Gur"],
+[ 96, 82,  8, "sp"],
+[ 97,  5, 70, "War"],
+[ 97, 13, 62, "LP"],
+[ 97, 19, 57, "LP"],
+[ 97, 33, 46, "LP"],
+[ 97, 37, 43, "LP"],
+[ 98,  9, 67, "Gur"],
+[ 98, 21, 56, "LP"],
+[ 98, 42, 40, "LP"],
+[ 99, 16, 61, "LP"],
+[ 99, 17, 60, "LP"],
+[ 99, 27, 52, "LP"],
+[ 99, 31, 49, "LP"],
+[ 99, 74, 16, "sp"],
+[ 99, 82, 10, "sp"],
+[ 99, 88,  6, "sp"],
+[100, 10, 67, "BK"],
+[100, 19, 59, "LP"],
+[100, 24, 55, "LP"],
+[100, 48, 37, "LP"],
+[100, 52, 34, "LP"],
+[100, 56, 31, "LP"],
+[100, 59, 29, "LP"],
+[101,  7, 71, "LP"],
+[101, 13, 65, "LP"],
+[101, 71, 20, "sp"],
+[102,  5, 74, "Gur"],
+[102, 16, 63, "LP"],
+[102, 22, 58, "LP"],
+[102, 27, 54, "LP"],
+[102, 35, 48, "LP"],
+[103, 32, 51, "LP"],
+[103, 40, 45, "LP"],
+[104,  4, 76, "HLa"],
+[104, 10, 70, "LP"],
+[104, 19, 62, "LP"],
+[104, 25, 57, "LP"],
+[104, 84, 12, "sp"],
+[105,  7, 74, "BK"],
+[105, 13, 68, "LP"],
+[105, 14, 67, "LP"],
+[105, 22, 60, "LP"],
+[105, 46, 42, "LP"],
+[105, 50, 39, "LP"],
+[106, 16, 66, "LP"],
+[106, 17, 65, "LP"],
+[106, 36, 50, "LP"],
+[106, 71, 24, "sp"],
+[107, 19, 64, "LP"],
+[107, 79, 18, "sp"],
+[108, 10, 73, "LP"],
+[108, 11, 72, "LP"],
+[108, 30, 56, "LP"],
+[108, 34, 53, "LP"],
+[109, 13, 71, "LP"],
+[109, 14, 70, "LP"],
+[109, 22, 63, "LP"],
+[109, 27, 59, "LP"],
+[109, 43, 47, "LP"],
+[109, 47, 44, "LP"],
+[110, 16, 69, "LP"],
+[110, 17, 68, "LP"],
+[110, 77, 22, "sp"],
+[110, 87, 14, "sp"],
+[111, 19, 67, "LP"],
+[111, 20, 66, "LP"],
+[111, 25, 62, "LP"],
+[111, 30, 58, "LP"],
+[111, 34, 55, "LP"],
+[112, 10, 76, "LP"],
+[112, 11, 75, "LP"],
+[112, 14, 72, "LP"],
+[112, 39, 52, "LP"],
+[112, 43, 49, "LP"],
+[112, 72, 28, "Jo"],
+[113, 13, 74, "LP"],
+[113, 16, 71, "LP"],
+[113, 17, 70, "LP"],
+[113, 23, 65, "LP"],
+[114,  9, 79, "LP"],
+[114, 25, 64, "LP"],
+[114, 29, 61, "LP"],
+[115, 20, 69, "LP"],
+[115, 39, 54, "LP"],
+[115, 77, 26, "sp"],
+[115, 84, 20, "Jo"],
+[116,  5, 84, "Ma"],
+[116, 10, 79, "LP"],
+[116, 11, 78, "LP"],
+[116, 13, 76, "LP"],
+[116, 14, 75, "LP"],
+[116, 22, 68, "LP"],
+[116, 28, 63, "LP"],
+[116, 36, 57, "LP"],
+[116, 44, 51, "LP"],
+[117,  7, 83, "LP"],
+[117,  8, 82, "LP"],
+[117, 16, 74, "LP"],
+[117, 17, 73, "LP"],
+[117, 33, 60, "LP"],
+[117, 91, 16, "sp"],
+[118, 19, 72, "LP"],
+[118, 20, 71, "LP"],
+[118, 25, 67, "LP"],
+[118, 82, 24, "Jo"],
+[119, 11, 80, "LP"],
+[119, 14, 77, "LP"],
+[120,  7, 85, "BK"],
+[120, 10, 82, "BK"],
+[120, 13, 79, "LP"],
+[120, 17, 75, "LP"],
+[120, 23, 70, "LP"],
+[120, 28, 66, "LP"],
+[120, 33, 62, "LP"],
+[120, 37, 59, "LP"],
+[120, 41, 56, "LP"],
+[121, 78, 30, "sp"],
+[121,113,  4, "sp"],
+[122, 20, 74, "LP"],
+[122, 26, 69, "LP"],
+[122, 31, 65, "LP"],
+[123, 11, 83, "LP"],
+[123, 14, 80, "LP"],
+[123, 22, 73, "LP"],
+[123, 23, 72, "LP"],
+[123, 28, 68, "LP"],
+[123, 82, 28, "Jo"],
+[124,  7, 88, "LP"],
+[124, 10, 85, "LP"],
+[124, 13, 82, "LP"],
+[124, 17, 78, "LP"],
+[124, 42, 58, "LP"],
+[124, 90, 22, "sp"],
+[124, 95, 18, "Jo"],
+[125,  9, 87, "LP"],
+[125, 20, 76, "LP"],
+[125, 26, 71, "LP"],
+[125, 31, 67, "LP"],
+[125, 35, 64, "LP"],
+[125, 39, 61, "LP"],
+[127, 11, 86, "LP"],
+[127, 14, 83, "LP"],
+[127, 17, 80, "LP"],
+[127, 23, 75, "LP"],
+[127, 88, 26, "sp"],
+[128,  7, 91, "LP"],
+[128, 10, 88, "LP"],
+[128, 13, 85, "LP"],
+[129,  9, 90, "LP"],
+[129, 20, 79, "LP"],
+[129, 26, 74, "LP"],
+[129, 31, 70, "LP"],
+[129, 36, 66, "LP"],
+[129, 40, 63, "LP"],
+[129, 44, 60, "LP"],
+[130, 11, 88, "LP"],
+[130, 14, 85, "LP"],
+[130, 23, 77, "LP"],
+[130,109, 12, "sp"],
+[130,112, 10, "sp"],
+[131, 17, 83, "LP"],
+[131, 29, 73, "LP"],
+[132,  7, 94, "LP"],
+[132, 10, 91, "LP"],
+[132, 20, 81, "LP"],
+[132, 35, 69, "LP"],
+[132, 88, 30, "sp"],
+[132, 95, 24, "sp"],
+[132,100, 20, "sp"],
+[134, 11, 91, "Da1"],
+[134, 14, 88, "Da1"],
+[134, 23, 80, "Da1"],
+[134,110, 14, "sp"],
+[135, 17, 86, "Da1"],
+[135, 18, 85, "Da1"],
+[135,120,  8, "sp"],
+[136,  7, 97, "DM3"],
+[136, 10, 94, "Da1"],
+[136, 20, 84, "Da1"],
+[136, 21, 83, "Da1"],
+[136, 94, 28, "sp"],
+[137, 23, 82, "Da1"],
+[138, 11, 94, "Da1"],
+[138, 14, 91, "Da1"],
+[138, 15, 90, "Da1"],
+[138, 89, 34, "sp"],
+[139, 17, 89, "Da1"],
+[139, 18, 88, "Da1"],
+[139,112, 16, "sp"],
+[140,  7,100, "DM3"],
+[140,  8, 99, "Da1"],
+[140, 10, 97, "Da1"],
+[140, 20, 87, "Da1"],
+[140, 21, 86, "Da1"],
+[140, 93, 32, "Jo"],
+[140,105, 22, "sp"],
+[141, 14, 93, "Da1"],
+[141, 23, 85, "Da1"],
+[141, 24, 84, "Da1"],
+[141,101, 26, "sp"],
+[142, 11, 97, "Da1"],
+[142, 17, 91, "Da1"],
+[142, 18, 90, "Da1"],
+[143, 20, 89, "Da1"],
+[143, 21, 88, "Da1"],
+[144,  7,103, "DM3"],
+[144,  8,102, "Da1"],
+[144, 10,100, "Da1"],
+[144, 99, 30, "sp"],
+[144,114, 18, "Jo"],
+[145, 11, 99, "Da1"],
+[145, 14, 96, "Da1"],
+[145, 24, 87, "Da1"],
+[145, 91, 38, "sp"],
+[146, 17, 94, "Da1"],
+[146, 18, 93, "Da1"],
+[147, 20, 92, "Da1"],
+[147, 21, 91, "Da1"],
+[147, 95, 36, "sp"],
+[148,  8,105, "Da1"],
+[148, 10,103, "Da1"],
+[148, 23, 90, "Da1"],
+[148, 24, 89, "Da1"],
+[148,110, 24, "sp"],
+[149,  7,107, "DM3"],
+[149, 11,102, "Da1"],
+[149, 14, 99, "Da1"],
+[149, 15, 98, "Da1"],
+[149, 99, 34, "sp"],
+[149,106, 28, "sp"],
+[150, 17, 97, "Da1"],
+[150, 18, 96, "Da1"],
+[150, 19, 95, "Da1"],
+[150, 21, 93, "Da1"],
+[151,118, 20, "sp"],
+[152,  8,108, "Da1"],
+[152, 10,106, "Da1"],
+[152, 22, 93, "Da1"],
+[152, 24, 92, "Da1"],
+[153, 11,105, "Da1"],
+[153, 14,102, "Da1"],
+[153, 15,101, "Da1"],
+[153, 18, 98, "Da1"],
+[153,105, 32, "sp"],
+[154,  7,111, "DM3"],
+[154, 17,100, "Da1"],
+[154, 20, 97, "Da1"],
+[154, 21, 96, "Da1"],
+[155,100, 38, "sp"],
+[156,  7,112, "DM3"],
+[156,  8,111, "Da1"],
+[156, 10,109, "Da1"],
+[156, 15,103, "Da1"],
+[156, 18,100, "Da1"],
+[156,115, 26, "sp"],
+[156,144,  6, "sp"],
+[157, 11,108, "Da1"],
+[157, 14,105, "Da1"],
+[157, 17,102, "Da1"],
+[157, 21, 98, "Da1"],
+[157,111, 30, "Jo"],
+[158,105, 36, "sp"],
+[158,122, 22, "sp"],
+[159,  8,113, "Da1"],
+[159, 24, 97, "Da1"],
+[160,  7,115, "DM3"],
+[160, 10,112, "Da1"],
+[160, 15,106, "Da1"],
+[160, 18,103, "Da1"],
+[161, 11,111, "Da1"],
+[161, 12,110, "Da1"],
+[161, 14,108, "Da1"],
+[161, 21,101, "Da1"],
+[161,110, 34, "sp"],
+[162, 24, 99, "Da1"],
+[162,102, 42, "sp"],
+[162,137, 14, "sp"],
+[163,  8,116, "Da1"],
+[163,141, 12, "Jo"],
+[164,  7,118, "DM3"],
+[164, 11,113, "Da1"],
+[164, 14,110, "Da1"],
+[164, 15,109, "Da1"],
+[164, 16,108, "Da1"],
+[164, 18,106, "Da1"],
+[164, 21,103, "Da1"],
+[164,106, 40, "sp"],
+[164,120, 28, "sp"],
+[164,136, 16, "sp"],
+[165,126, 24, "sp"],
+[166, 24,102, "Da1"],
+[166, 25,101, "Da1"],
+[166,110, 38, "sp"],
+[166,117, 32, "sp"],
+[167,  8,119, "Da1"],
+[167, 15,111, "Da1"],
+[167, 18,108, "Da1"],
+[168,  7,121, "DM3"],
+[168, 10,118, "Da1"],
+[168, 11,116, "Da1"],
+[168, 14,113, "Da1"],
+[168, 21,106, "Da1"],
+[168,137, 18, "sp"],
+[169, 24,104, "Da1"],
+[169,104, 46, "sp"],
+[170,116, 36, "sp"],
+[170,151, 10, "Jo"],
+[171,  8,122, "Da1"],
+[171, 15,114, "Da1"],
+[171, 18,111, "Da1"],
+[171,108, 44, "sp"],
+[172,  7,124, "DM3"],
+[172, 11,119, "Da1"],
+[172, 12,118, "Da1"],
+[172, 14,116, "Da1"],
+[172, 17,113, "Da1"],
+[172, 21,109, "Da1"],
+[172, 22,108, "Da1"],
+[172,111, 42, "Jo"],
+[172,125, 30, "sp"],
+[173, 25,106, "Da1"],
+[173,131, 26, "sp"],
+[173,139, 20, "sp"],
+[174, 15,116, "Da1"],
+[174,122, 34, "sp"],
+[175,  8,125, "Da1"],
+[175, 18,114, "Da1"],
+[175, 19,113, "Da1"],
+[175, 21,111, "Da1"],
+[175, 22,110, "Da1"],
+[175,116, 40, "sp"],
+[176,  7,127, "DM3"],
+[176, 10,124, "Da1"],
+[176, 11,122, "Da1"],
+[176, 12,121, "Da1"],
+[176, 14,119, "Da1"],
+[176, 25,108, "Da1"],
+[178, 15,119, "Da1"],
+[178, 18,116, "Da1"],
+[178,121, 38, "sp"],
+[178,141, 22, "Jo"],
+[179,  8,128, "Da1"],
+[179, 21,114, "Da1"],
+[179, 22,113, "Da1"],
+[179,113, 46, "sp"],
+[180,  7,130, "DM3"],
+[180, 10,127, "Da1"],
+[180, 11,125, "Da1"],
+[180, 12,124, "Da1"],
+[180, 14,122, "Da1"],
+[180, 24,112, "Da1"],
+[180, 25,111, "Da1"],
+[180,130, 32, "sp"],
+[180,135, 28, "sp"],
+[181,117, 44, "sp"],
+[182,  8,130, "Da1"],
+[182, 15,122, "Da1"],
+[182, 18,119, "Da1"],
+[182, 19,118, "Da1"],
+[182, 22,115, "Da1"],
+[182,127, 36, "Jo"],
+[183, 12,126, "Da1"],
+[183, 21,117, "Da1"],
+[183, 25,113, "Da1"],
+[184,  7,133, "DM3"],
+[184, 11,128, "Da1"],
+[184, 14,125, "Da1"],
+[184,122, 42, "sp"],
+[185, 15,124, "Da1"],
+[185,145, 24, "sp"],
+[186,  8,133, "Da1"],
+[186, 18,122, "Da1"],
+[186, 19,121, "Da1"],
+[186, 22,118, "Da1"],
+[187,  5,138, "Ma"],
+[187, 12,129, "Da1"],
+[187, 21,120, "Da1"],
+[187, 25,116, "Da1"],
+[187,127, 40, "sp"],
+[188,  7,136, "DM3"],
+[188, 11,131, "Da1"],
+[188, 14,128, "Da1"],
+[188,135, 34, "sp"],
+[188,140, 30, "sp"],
+[189, 15,127, "Da1"],
+[189, 18,124, "Da1"],
+[189, 19,123, "Da1"],
+[189,122, 46, "Jo"],
+[190,  5,140, "LaM"],
+[190,  8,136, "Da1"],
+[190, 21,122, "Da1"],
+[190, 22,121, "Da1"],
+[190, 25,118, "Da1"],
+[190,174,  8, "Jo"],
+[191, 12,132, "Da1"],
+[191, 14,130, "Da1"],
+[191, 24,120, "Da1"],
+[191,133, 38, "sp"],
+[191,148, 26, "sp"],
+[192, 11,134, "Da1"],
+[192,127, 44, "sp"],
+[193, 15,130, "Da1"],
+[193, 18,127, "Da1"],
+[193, 22,123, "Da1"],
+[194,  8,139, "Da1"],
+[194, 12,134, "Da1"],
+[194, 20,126, "Da1"],
+[194, 21,125, "Da1"],
+[194, 25,121, "Da1"],
+[195, 11,136, "Da1"],
+[195, 14,133, "Da1"],
+[195,132, 42, "sp"],
+[195,163, 18, "sp"],
+[195,166, 16, "sp"],
+[196, 19,128, "Da1"],
+[196,124, 50, "sp"],
+[196,145, 32, "sp"],
+[197,  7,143, "DM3"],
+[197, 15,133, "Da1"],
+[197, 16,132, "Da1"],
+[197, 18,130, "Da1"],
+[197, 22,126, "Da1"],
+[197, 25,123, "Da1"],
+[197,141, 36, "sp"],
+[197,171, 14, "sp"],
+[198,  8,142, "Da1"],
+[198, 12,137, "Da1"],
+[198,128, 48, "sp"],
+[198,152, 28, "sp"],
+[198,163, 20, "sp"],
+[199, 11,139, "Da1"],
+[199, 14,136, "Da1"],
+[199,138, 40, "Jo"],
+[200, 15,135, "Da1"],
+[200, 19,131, "Da1"],
+[200, 22,128, "Da1"],
+[201, 18,133, "DM4"],
+[201, 21,130, "DM4"],
+[201,133, 46, "sp"],
+[202,  8,145, "DM4"],
+[202, 12,140, "DM4"],
+[202,164, 22, "sp"],
+[203, 10,144, "DM4"],
+[203, 14,139, "DM4"],
+[203, 19,133, "DM4"],
+[203,126, 54, "sp"],
+[204, 15,138, "DM4"],
+[204, 16,137, "DM4"],
+[204, 22,131, "DM4"],
+[204,129, 52, "Jo"],
+[204,138, 44, "sp"],
+[204,150, 34, "sp"],
+[205, 11,144, "DM4"],
+[205, 18,136, "DM4"],
+[205,146, 38, "sp"],
+[205,156, 30, "Jo"],
+[205,182, 12, "sp"],
+[206,  8,148, "DM4"],
+[206, 12,143, "DM4"],
+[206,133, 50, "Jo"],
+[206,165, 24, "Jo"],
+[207, 10,147, "DM4"],
+[207, 14,142, "DM4"],
+[207, 19,136, "DM4"],
+[207, 22,133, "DM4"],
+[208, 11,146, "DM4"],
+[208, 15,141, "DM4"],
+[208, 16,140, "DM4"],
+[208, 18,138, "DM4"],
+[208,144, 42, "sp"],
+[209,  8,150, "DM4"],
+[209, 12,145, "DM4"],
+[209,138, 48, "sp"],
+[211, 11,148, "DM4"],
+[211, 19,139, "DM4"],
+[211, 22,136, "DM4"],
+[212, 15,144, "DM4"],
+[212, 16,143, "DM4"],
+[212, 18,141, "DM4"],
+[212,143, 46, "sp"],
+[212,155, 36, "sp"],
+[212,168, 26, "sp"],
+[213,  8,153, "DM4"],
+[213, 12,148, "DM4"],
+[213,135, 54, "sp"],
+[213,151, 40, "sp"],
+[213,161, 32, "sp"],
+[214, 19,141, "DM4"],
+[215, 11,151, "DM4"],
+[215, 16,145, "DM4"],
+[215, 22,139, "DM4"],
+[215, 23,138, "DM4"],
+[215,139, 52, "sp"],
+[216, 15,147, "DM4"],
+[216, 18,144, "DM4"],
+[216,149, 44, "sp"],
+[217,  8,156, "DM4"],
+[217, 12,151, "DM4"],
+[218, 19,144, "DM4"],
+[218, 22,141, "DM4"],
+[218,144, 50, "sp"],
+[218,171, 28, "sp"],
+[219, 11,154, "DM4"],
+[219, 15,149, "DM4"],
+[219, 16,148, "DM4"],
+[220, 18,147, "DM4"],
+[220,137, 58, "sp"],
+[220,160, 38, "sp"],
+[220,165, 34, "sp"],
+[221,  8,159, "DM4"],
+[221, 12,154, "DM4"],
+[221,149, 48, "sp"],
+[221,156, 42, "Jo"],
+[222, 14,153, "DM4"],
+[222, 19,147, "DM4"],
+[222, 22,144, "DM4"],
+[222, 23,143, "DM4"],
+[223, 11,157, "DM4"],
+[223, 15,152, "DM4"],
+[223, 16,151, "DM4"],
+[223, 18,149, "DM4"],
+[224, 12,156, "DM4"],
+[224,145, 54, "sp"],
+[224,204, 10, "sp"],
+[225,  8,162, "DM4"],
+[225, 19,149, "DM4"],
+[225,155, 46, "sp"],
+[225,175, 30, "sp"],
+[226, 16,153, "DM4"],
+[226, 22,147, "DM4"],
+[226, 23,146, "DM4"],
+[226,149, 52, "sp"],
+[226,190, 20, "Jo"],
+[227, 11,160, "DM4"],
+[227, 15,155, "DM4"],
+[227, 18,152, "DM4"],
+[227,194, 18, "sp"],
+[228, 12,159, "DM4"],
+[228,165, 40, "sp"],
+[228,170, 36, "sp"],
+[228,189, 22, "sp"],
+[229,  8,165, "DM4"],
+[229, 19,152, "DM4"],
+[229, 22,149, "DM4"],
+[229, 23,148, "DM4"],
+[229,154, 50, "sp"],
+[230, 16,156, "DM4"],
+[230,146, 58, "sp"],
+[230,162, 44, "sp"],
+[231, 11,163, "DM4"],
+[231, 15,158, "DM4"],
+[231, 18,155, "DM4"],
+[231,178, 32, "sp"],
+[231,189, 24, "sp"],
+[231,201, 16, "sp"],
+[232, 12,162, "DM4"],
+[232,150, 56, "sp"],
+[233,  8,168, "DM4"],
+[233, 16,158, "DM4"],
+[233, 19,155, "DM4"],
+[233, 20,154, "DM4"],
+[233, 22,152, "DM4"],
+[233, 23,151, "DM4"],
+[233,160, 48, "sp"],
+[235, 11,166, "DM4"],
+[235, 15,161, "DM4"],
+[235,155, 54, "sp"],
+[235,190, 26, "sp"],
+[236, 12,165, "DM4"],
+[236, 19,157, "DM4"],
+[236, 23,153, "DM4"],
+[236,170, 42, "sp"],
+[236,175, 38, "sp"],
+[237,  8,171, "DM4"],
+[237, 16,161, "DM4"],
+[237, 22,155, "DM4"],
+[237,148, 62, "sp"],
+[238,151, 60, "sp"],
+[238,160, 52, "sp"],
+[238,167, 46, "sp"],
+[238,182, 34, "sp"],
+[239,  5,177, "LaM"],
+[239, 11,169, "DM4"],
+[239, 12,167, "DM4"],
+[239, 15,164, "DM4"],
+[240, 19,160, "DM4"],
+[240, 20,159, "DM4"],
+[240, 23,156, "DM4"],
+[240,192, 28, "sp"],
+[240,213, 14, "sp"],
+[241,  8,174, "DM4"],
+[241, 16,164, "DM4"],
+[241, 22,158, "DM4"],
+[241,156, 58, "sp"],
+[241,165, 50, "Jo"],
+[242, 15,166, "DM4"],
+[242, 18,163, "DM4"],
+[242,233,  4, "sp"],
+[243,  5,180, "Ha"],
+[243, 11,172, "DM4"],
+[243, 12,170, "DM4"],
+[243, 23,158, "DM4"],
+[243,160, 56, "sp"],
+[243,179, 40, "sp"],
+[244, 16,166, "DM4"],
+[244, 19,163, "DM4"],
+[244, 20,162, "DM4"],
+[244, 22,160, "DM4"],
+[244,175, 44, "sp"],
+[245,  8,177, "DM4"],
+[245,  9,176, "DM4"],
+[245,186, 36, "Jo"],
+[246, 15,169, "DM4"],
+[246,165, 54, "sp"],
+[246,172, 48, "sp"],
+[246,195, 30, "sp"],
+[247, 11,175, "DM4"],
+[247, 12,173, "DM4"],
+[247, 23,161, "DM4"],
+[247,157, 62, "sp"],
+[247,234,  6, "sp"],
+[248,  5,184, "Ha"],
+[248, 16,169, "DM4"],
+[248, 19,166, "DM4"],
+[248, 20,165, "DM4"],
+[248, 21,164, "DM4"],
+[248, 22,163, "DM4"],
+[249,  8,180, "DM4"],
+[249,161, 60, "sp"],
+[250, 15,172, "DM4"],
+[250, 23,163, "DM4"],
+[250,171, 52, "sp"],
+[251,184, 42, "sp"],
+[252,166, 58, "sp"],
+[252,180, 46, "sp"],
+[252,198, 32, "sp"],
+[253,191, 38, "sp"],
+[254,159, 66, "sp"],
+[255,162, 64, "sp"],
+[255,171, 56, "sp"],
+[255,178, 50, "sp"]];

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/gap-guava.git



More information about the debian-science-commits mailing list